Removed dynamic JSON buffer entirely.

Temporary presets in RAM (ESP32)
Async loading of presets (stability).
Other minor fixes.
Bumped version to 0.13.1-bl6
This commit is contained in:
Blaz Kristan 2022-01-01 12:52:50 +01:00
parent 40323e3afe
commit 8386b9a0b4
25 changed files with 2067 additions and 2115 deletions

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "wled",
"version": "0.13.1-bl5",
"version": "0.13.1-bl6",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "wled",
"version": "0.13.1-bl5",
"version": "0.13.1-bl6",
"description": "Tools for WLED project",
"main": "tools/cdata.js",
"directories": {

View File

@ -1131,11 +1131,7 @@ void WS2812FX::deserializeMap(uint8_t n) {
return;
}
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(7)) return;
#endif
DEBUG_PRINT(F("Reading LED map from "));
DEBUG_PRINTLN(fileName);

View File

@ -435,11 +435,7 @@ void deserializeConfigFromFS() {
return;
}
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(1)) return;
#endif
DEBUG_PRINTLN(F("Reading settings from /cfg.json..."));
@ -463,11 +459,7 @@ void serializeConfig() {
DEBUG_PRINTLN(F("Writing settings to /cfg.json..."));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(2)) return;
#endif
JsonArray rev = doc.createNestedArray("rev");
rev.add(1); //major settings revision
@ -792,11 +784,7 @@ void serializeConfig() {
bool deserializeConfigSec() {
DEBUG_PRINTLN(F("Reading settings from /wsec.json..."));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(3)) return false;
#endif
bool success = readObjectFromFile("/wsec.json", nullptr, &doc);
if (!success) {
@ -841,11 +829,7 @@ bool deserializeConfigSec() {
void serializeConfigSec() {
DEBUG_PRINTLN(F("Writing settings to /wsec.json..."));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(4)) return;
#endif
JsonObject nw = doc.createNestedObject("nw");

View File

@ -303,11 +303,7 @@
#define JSON_BUFFER_SIZE 20480
#endif
#ifdef WLED_USE_DYNAMIC_JSON
#define MIN_HEAP_SIZE (JSON_BUFFER_SIZE+512)
#else
#define MIN_HEAP_SIZE (MAX_LED_MEMORY+2048)
#endif
#define MIN_HEAP_SIZE (MAX_LED_MEMORY+2048)
// Maximum size of node map (list of other WLED instances)
#ifdef ESP8266

View File

@ -1343,7 +1343,7 @@ function requestJson(command=null)
var useWs = (ws && ws.readyState === WebSocket.OPEN);
var type = command ? 'post':'get';
if (command) {
command.v = true; // force complete /json/si API response
if (useWs || !command.ps) command.v = true; // force complete /json/si API response (ps is async so no point)
command.time = Math.floor(Date.now() / 1000);
var t = gId('tt');
if (t.validity.valid && command.transition==null) {
@ -1357,6 +1357,8 @@ function requestJson(command=null)
if (useWs) {
ws.send(req?req:'{"v":true}');
return;
} else if (command && command.ps) { //refresh UI if we don't use WS (async loading of presets)
setTimeout(requestJson,200);
}
fetch(url, {

View File

@ -759,15 +759,9 @@ function genPalPrevCss(id)
} else {
if (selColors) {
let e = element[1] - 1;
//if (Array.isArray(selColors[e])) {
r = selColors[e][0];
g = selColors[e][1];
b = selColors[e][2];
//} else {
// r = (selColors[e]>>16) & 0xFF;
// g = (selColors[e]>> 8) & 0xFF;
// b = (selColors[e] ) & 0xFF;
//}
r = selColors[e][0];
g = selColors[e][1];
b = selColors[e][2];
}
}
if (index === false) {
@ -931,18 +925,10 @@ function readState(s,command=false)
for (let e = cd.length-1; e >= 0; e--)
{
var r,g,b,w;
//if (Array.isArray(i.col[e])) {
r = i.col[e][0];
g = i.col[e][1];
b = i.col[e][2];
if (isRgbw) w = i.col[e][3];
//} else {
// // unsigned long RGBW (@blazoncek v2 experimental API implementation)
// r = (i.col[e]>>16) & 0xFF;
// g = (i.col[e]>> 8) & 0xFF;
// b = (i.col[e] ) & 0xFF;
// if (isRgbw) w = (i.col[e] >> 24) & 0xFF;
//}
r = i.col[e][0];
g = i.col[e][1];
b = i.col[e][2];
if (isRgbw) w = i.col[e][3];
cd[e].style.backgroundColor = "rgb(" + r + "," + g + "," + b + ")";
if (isRgbw) whites[e] = parseInt(w);
selectSlot(csel);
@ -993,7 +979,7 @@ function requestJson(command=null)
var useWs = (ws && ws.readyState === WebSocket.OPEN);
var type = command ? 'post':'get';
if (command) {
command.v = true; // force complete /json/si API response
if (useWs || !command.ps) command.v = true; // force complete /json/si API response
command.time = Math.floor(Date.now() / 1000);
var t = gId('tt');
if (t.validity.valid && command.transition==null) {
@ -1007,6 +993,8 @@ function requestJson(command=null)
if (useWs) {
ws.send(req?req:'{"v":true}');
return;
} else if (command && command.ps) { //refresh UI if we don't use WS (async loading of presets)
setTimeout(requestJson,200);
}
fetch(url, {

View File

@ -194,6 +194,7 @@ int16_t loadPlaylist(JsonObject playlistObject, byte presetId = 0);
void handlePlaylist();
//presets.cpp
void handlePresets();
bool applyPreset(byte index, byte callMode = CALL_MODE_DIRECT_CHANGE);
inline bool applyTemporaryPreset() {return applyPreset(255);};
void savePreset(byte index, bool persist = true, const char* pname = nullptr, JsonObject saveobj = JsonObject());

View File

@ -43,54 +43,54 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
#endif
// Autogenerated from wled00/data/update.htm, do not edit!!
const uint16_t PAGE_update_length = 734;
const uint16_t PAGE_update_length = 733;
const uint8_t PAGE_update[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x85, 0x54, 0xef, 0x6b, 0xdc, 0x46,
0x10, 0xfd, 0xae, 0xbf, 0x62, 0xb3, 0xa6, 0x60, 0x43, 0x4e, 0xb2, 0xef, 0x48, 0x29, 0x3a, 0x49,
0xa5, 0xae, 0xfd, 0x21, 0x50, 0x88, 0x21, 0x49, 0x4b, 0x28, 0xa5, 0xac, 0xb4, 0x23, 0x69, 0xb8,
0xd5, 0xae, 0xb2, 0x3b, 0xba, 0xf3, 0xf5, 0xf0, 0xff, 0x9e, 0xd1, 0xca, 0x76, 0x9c, 0x94, 0xd2,
0x2f, 0x62, 0x7f, 0xcc, 0x7b, 0x33, 0xf3, 0xe6, 0xad, 0x8a, 0x57, 0x37, 0xef, 0x7e, 0xfd, 0xf0,
0xe9, 0xee, 0x56, 0xf4, 0x34, 0x98, 0xaa, 0x78, 0xfc, 0x82, 0xd2, 0x55, 0x31, 0x00, 0x29, 0xd1,
0x10, 0xfd, 0xae, 0xbf, 0x62, 0xb3, 0xa6, 0x60, 0x43, 0x4e, 0xb2, 0xef, 0x20, 0x14, 0x9d, 0xa4,
0x50, 0xd7, 0xfe, 0x10, 0x28, 0xc4, 0x90, 0xa4, 0xa5, 0x94, 0x12, 0x56, 0xda, 0x91, 0x34, 0xdc,
0x6a, 0x57, 0xd9, 0x1d, 0xdd, 0xf9, 0x7a, 0xf8, 0x7f, 0xef, 0x68, 0x65, 0x3b, 0x4e, 0x43, 0xe8,
0x17, 0xb1, 0x3f, 0xe6, 0xbd, 0x99, 0x79, 0xf3, 0x56, 0xc5, 0xab, 0x9b, 0xf7, 0xbf, 0x7e, 0xfc,
0xf3, 0xee, 0x56, 0xf4, 0x34, 0x98, 0xaa, 0x78, 0xfc, 0x82, 0xd2, 0x55, 0x31, 0x00, 0x29, 0xd1,
0x38, 0x4b, 0x60, 0xa9, 0x94, 0x07, 0xd4, 0xd4, 0x97, 0x1a, 0xf6, 0xd8, 0xc0, 0x2a, 0x6e, 0xa4,
0xb0, 0x6a, 0x80, 0x52, 0xee, 0x11, 0x0e, 0xa3, 0xf3, 0x24, 0xab, 0xa4, 0x20, 0x24, 0x03, 0xd5,
0x1f, 0xbf, 0xdd, 0xde, 0x88, 0x8f, 0xa3, 0x56, 0x04, 0x45, 0xb6, 0x1c, 0x15, 0xa1, 0xf1, 0x38,
0x1f, 0xbf, 0xdd, 0xde, 0x88, 0x4f, 0xa3, 0x56, 0x04, 0x45, 0xb6, 0x1c, 0x15, 0xa1, 0xf1, 0x38,
0x52, 0x95, 0xb4, 0x93, 0x6d, 0x08, 0x9d, 0x15, 0xd7, 0xe7, 0x17, 0xa7, 0x03, 0x5a, 0xed, 0x0e,
0x69, 0x8f, 0x81, 0x9c, 0x3f, 0xa6, 0xb5, 0x6a, 0x76, 0xe7, 0x17, 0x0f, 0xcf, 0x21, 0x1f, 0x39,
0x44, 0xbb, 0x66, 0x1a, 0xb8, 0x82, 0xb4, 0x03, 0xba, 0x35, 0x30, 0x2f, 0xaf, 0x8f, 0x6f, 0xf5,
0x69, 0x8f, 0x81, 0x9c, 0x3f, 0xa6, 0xb5, 0x6a, 0x76, 0xe7, 0x17, 0x0f, 0xcf, 0x21, 0x9f, 0x38,
0x44, 0xbb, 0x66, 0x1a, 0xb8, 0x82, 0xb4, 0x03, 0xba, 0x35, 0x30, 0x2f, 0xaf, 0x8f, 0xef, 0xf4,
0xb9, 0x9c, 0x5a, 0x79, 0x91, 0x06, 0x3a, 0x1a, 0x48, 0x35, 0x86, 0xd1, 0xa8, 0x63, 0x29, 0xad,
0xb3, 0x20, 0x5f, 0xff, 0x27, 0x64, 0x08, 0xdd, 0xbf, 0x31, 0xb5, 0x71, 0xcd, 0x4e, 0x3e, 0x24,
0x45, 0xf6, 0x58, 0x62, 0x11, 0x03, 0xaa, 0x24, 0xad, 0xe9, 0x34, 0x57, 0xd4, 0x79, 0x37, 0x59,
0x9d, 0x9f, 0x6d, 0x36, 0x9b, 0x6d, 0xe3, 0x8c, 0xf3, 0xf9, 0x59, 0xdb, 0xb6, 0xdb, 0x96, 0x95,
0x59, 0xb5, 0x6a, 0x40, 0x73, 0xcc, 0x7f, 0x07, 0xaf, 0x95, 0x55, 0xaf, 0x83, 0xb2, 0x61, 0x15,
0xc0, 0x63, 0xbb, 0xad, 0x9d, 0xd7, 0xe0, 0xf3, 0x74, 0xd3, 0xf4, 0x22, 0x38, 0x83, 0x5a, 0x44,
0x82, 0xc7, 0xb4, 0x39, 0x5a, 0x83, 0x16, 0x56, 0x31, 0xf9, 0x42, 0x15, 0xf0, 0x1f, 0xc8, 0xd7,
0x97, 0xe3, 0xfd, 0x76, 0x50, 0xbe, 0x43, 0x9b, 0xff, 0xf4, 0xbc, 0x5c, 0x91, 0x1b, 0xf3, 0xab,
0xf5, 0x78, 0xff, 0x80, 0x76, 0x9c, 0xe8, 0x4f, 0x3a, 0x8e, 0x50, 0xb6, 0x68, 0xe0, 0xaf, 0xd3,
0x57, 0xe8, 0xd5, 0x8f, 0x7c, 0x5f, 0x3b, 0x7d, 0x3c, 0xfd, 0x4f, 0x65, 0x04, 0xf7, 0xb4, 0x52,
0x06, 0x3b, 0x9b, 0x37, 0x2c, 0x0d, 0xf8, 0xed, 0xcb, 0x2e, 0xd7, 0xeb, 0xf5, 0xcb, 0x2e, 0x63,
0x95, 0x3d, 0x60, 0xd7, 0x13, 0x17, 0x77, 0xf9, 0xc3, 0xc3, 0x19, 0x8b, 0x78, 0x7a, 0xea, 0x62,
0xd6, 0x3b, 0x2a, 0x17, 0x15, 0x2b, 0xb2, 0xc5, 0x38, 0x73, 0x11, 0x6c, 0xa2, 0xf5, 0xe2, 0x83,
0xf7, 0xae, 0xa5, 0x83, 0xf2, 0xf0, 0x6c, 0x08, 0xbe, 0x28, 0x5a, 0xe7, 0x07, 0xc1, 0x06, 0xeb,
0x9d, 0x2e, 0xe5, 0xdd, 0xbb, 0xf7, 0x1f, 0xa4, 0x48, 0x54, 0x1c, 0x7a, 0x29, 0xb3, 0x29, 0x06,
0x4a, 0x81, 0x7c, 0xc7, 0x53, 0x16, 0xc0, 0x76, 0x98, 0x3b, 0x96, 0xc3, 0x64, 0x08, 0x47, 0xe5,
0x29, 0x9b, 0xf1, 0x2b, 0x8e, 0x52, 0x52, 0x38, 0x1b, 0xa6, 0x7a, 0x40, 0xb6, 0x28, 0xdb, 0x85,
0x3d, 0xf8, 0xd6, 0x06, 0x52, 0xc6, 0x80, 0x16, 0x7b, 0xf0, 0x81, 0x19, 0x73, 0x71, 0x99, 0x5e,
0x6d, 0xd2, 0x2b, 0x16, 0xfb, 0x4d, 0x51, 0xfb, 0xea, 0xc6, 0x1d, 0xac, 0x71, 0x4a, 0x0b, 0xea,
0x41, 0x18, 0xce, 0x14, 0x48, 0xd4, 0x68, 0x95, 0x3f, 0xe6, 0xa2, 0x50, 0x22, 0xe9, 0x3d, 0xb4,
0xa5, 0xec, 0x89, 0xc6, 0x90, 0x67, 0x59, 0x87, 0xd4, 0x4f, 0x75, 0xda, 0xb8, 0x21, 0xfb, 0x05,
0x7d, 0xe3, 0x9c, 0xdb, 0x21, 0x64, 0x73, 0x67, 0x99, 0x07, 0x03, 0x2a, 0x40, 0x90, 0x82, 0x78,
0x4c, 0xc0, 0x15, 0xfc, 0x5d, 0x1b, 0x65, 0x77, 0xb2, 0x2a, 0x70, 0xe8, 0x44, 0x12, 0x7c, 0xf3,
0x95, 0x87, 0x4f, 0xd2, 0xd0, 0x23, 0x18, 0x1d, 0x52, 0x74, 0x8f, 0xb4, 0x4f, 0x14, 0xdf, 0x53,
0xa7, 0x61, 0xdf, 0xfd, 0x1c, 0x45, 0x2d, 0x5b, 0xae, 0x70, 0x15, 0x3e, 0x4f, 0xac, 0xe0, 0xfc,
0xc0, 0x32, 0x55, 0xcd, 0x3d, 0x14, 0xd1, 0x08, 0x62, 0x91, 0x65, 0x76, 0x82, 0x14, 0x8d, 0x51,
0x21, 0xb0, 0x9d, 0xe9, 0xe9, 0x5d, 0x3e, 0xc9, 0xe8, 0xe1, 0xf3, 0x84, 0x1e, 0xf4, 0x4b, 0x60,
0xb2, 0x20, 0x17, 0xe5, 0xbe, 0xc1, 0xee, 0x95, 0x99, 0xf8, 0x66, 0x19, 0xd6, 0x2b, 0xb9, 0x80,
0xea, 0x89, 0x88, 0xdf, 0xe3, 0x02, 0x5a, 0x36, 0xdf, 0x80, 0x12, 0x67, 0x1b, 0x83, 0xcd, 0xae,
0x94, 0xd7, 0xf3, 0x0c, 0xae, 0xd9, 0x4f, 0x45, 0xb6, 0xc4, 0xb1, 0x2b, 0xe6, 0x61, 0x55, 0x85,
0xc6, 0x7d, 0x9c, 0xe8, 0xfc, 0x08, 0x99, 0xb1, 0x8a, 0x19, 0xd0, 0x76, 0x69, 0x9a, 0x72, 0x6c,
0xcc, 0x93, 0xdc, 0x45, 0x35, 0x84, 0x76, 0xc2, 0x3a, 0xe2, 0x04, 0x8e, 0x37, 0xce, 0x73, 0x07,
0xad, 0x87, 0xd0, 0xc7, 0x81, 0x8d, 0xaa, 0x03, 0x91, 0x5f, 0x14, 0x19, 0xf3, 0x31, 0xf7, 0xe2,
0xb5, 0x2c, 0xfe, 0xb7, 0xbe, 0x00, 0xc6, 0x3c, 0x8c, 0x02, 0xcd, 0x04, 0x00, 0x00
0xb3, 0x20, 0x5f, 0xff, 0x10, 0x32, 0x84, 0xee, 0x7b, 0x4c, 0x6d, 0x5c, 0xb3, 0x93, 0x0f, 0x49,
0x91, 0x3d, 0x96, 0x58, 0xc4, 0x80, 0x2a, 0x49, 0x6b, 0x3a, 0xcd, 0x15, 0x75, 0xde, 0x4d, 0x56,
0xe7, 0x67, 0x9b, 0xcd, 0x66, 0xdb, 0x38, 0xe3, 0x7c, 0x7e, 0xd6, 0xb6, 0xed, 0xb6, 0x65, 0x65,
0x56, 0xad, 0x1a, 0xd0, 0x1c, 0xf3, 0xdf, 0xc1, 0x6b, 0x65, 0xd5, 0xeb, 0xa0, 0x6c, 0x58, 0x05,
0xf0, 0xd8, 0x6e, 0x6b, 0xe7, 0x35, 0xf8, 0x3c, 0xdd, 0x34, 0xbd, 0x08, 0xce, 0xa0, 0x16, 0x91,
0xe0, 0x31, 0x6d, 0x8e, 0xd6, 0xa0, 0x85, 0x55, 0x4c, 0xbe, 0x50, 0x05, 0xfc, 0x07, 0xf2, 0xf5,
0xe5, 0x78, 0xbf, 0x1d, 0x94, 0xef, 0xd0, 0xe6, 0x3f, 0x3f, 0x2f, 0x57, 0xe4, 0xc6, 0xfc, 0x6a,
0x3d, 0xde, 0x3f, 0xa0, 0x1d, 0x27, 0xfa, 0x8b, 0x8e, 0x23, 0x94, 0x2d, 0x1a, 0xf8, 0xfb, 0xf4,
0x15, 0x7a, 0xf5, 0x86, 0xef, 0x6b, 0xa7, 0x8f, 0xa7, 0xff, 0xa9, 0x8c, 0xe0, 0x9e, 0x56, 0xca,
0x60, 0x67, 0xf3, 0x86, 0xa5, 0x01, 0xbf, 0x7d, 0xd9, 0xe5, 0x7a, 0xbd, 0x7e, 0xd9, 0x65, 0xac,
0xb2, 0x07, 0xec, 0x7a, 0xe2, 0xe2, 0x2e, 0x7f, 0x7a, 0x38, 0x63, 0x11, 0x4f, 0x4f, 0x5d, 0xcc,
0x7a, 0x47, 0xe5, 0xa2, 0x62, 0x45, 0xb6, 0x18, 0x67, 0x2e, 0x82, 0x4d, 0xb4, 0x5e, 0x7c, 0xf0,
0xc1, 0xb5, 0x74, 0x50, 0x1e, 0x9e, 0x0d, 0xc1, 0x17, 0x45, 0xeb, 0xfc, 0x20, 0xd8, 0x60, 0xbd,
0xd3, 0xa5, 0xbc, 0x7b, 0xff, 0xe1, 0xa3, 0x14, 0x89, 0x8a, 0x43, 0x2f, 0x65, 0x36, 0xc5, 0x40,
0x29, 0x90, 0xef, 0x78, 0xca, 0x02, 0xd8, 0x0e, 0x73, 0xc7, 0x72, 0x98, 0x0c, 0xe1, 0xa8, 0x3c,
0x65, 0x33, 0x7e, 0xc5, 0x51, 0x4a, 0x0a, 0x67, 0xc3, 0x54, 0x0f, 0xc8, 0x16, 0x65, 0xbb, 0xb0,
0x07, 0xdf, 0xd9, 0x40, 0xca, 0x18, 0xd0, 0x62, 0x0f, 0x3e, 0x30, 0x63, 0x2e, 0x2e, 0xd3, 0xab,
0x4d, 0x7a, 0xc5, 0x62, 0xbf, 0x29, 0x6a, 0x5f, 0xdd, 0xb8, 0x83, 0x35, 0x4e, 0x69, 0x41, 0x3d,
0x08, 0xc3, 0x99, 0x02, 0x89, 0x1a, 0xad, 0xf2, 0xc7, 0x5c, 0x14, 0x4a, 0x24, 0xbd, 0x87, 0xb6,
0x94, 0x3d, 0xd1, 0x18, 0xf2, 0x2c, 0xeb, 0x90, 0xfa, 0xa9, 0x4e, 0x1b, 0x37, 0x64, 0xbf, 0xa0,
0x6f, 0x9c, 0x73, 0x3b, 0x84, 0x6c, 0xee, 0x2c, 0xf3, 0x60, 0x40, 0x05, 0x08, 0x52, 0x10, 0x8f,
0x09, 0xb8, 0x82, 0xcf, 0xb5, 0x51, 0x76, 0x27, 0xab, 0x02, 0x87, 0x4e, 0x24, 0xc1, 0x37, 0x5f,
0x79, 0xf8, 0x24, 0x0d, 0x3d, 0x82, 0xd1, 0x21, 0x45, 0xf7, 0x48, 0xfb, 0x44, 0xf1, 0x5f, 0xea,
0x34, 0xec, 0xbb, 0xb7, 0x51, 0xd4, 0xb2, 0xe5, 0x0a, 0x57, 0xe1, 0xcb, 0xc4, 0x0a, 0xce, 0x0f,
0x2c, 0x53, 0xd5, 0xdc, 0x43, 0x11, 0x8d, 0x20, 0x16, 0x59, 0x66, 0x27, 0x48, 0xd1, 0x18, 0x15,
0x02, 0xdb, 0x99, 0x9e, 0xde, 0xe5, 0x93, 0x8c, 0x1e, 0xbe, 0x4c, 0xe8, 0x41, 0xbf, 0x04, 0x26,
0x0b, 0x72, 0x51, 0xee, 0x1b, 0xec, 0x5e, 0x99, 0x89, 0x6f, 0x96, 0x61, 0xbd, 0x92, 0x0b, 0xa8,
0x9e, 0x88, 0xf8, 0x3d, 0x2e, 0xa0, 0x65, 0xf3, 0x0d, 0x28, 0x71, 0xb6, 0x31, 0xd8, 0xec, 0x4a,
0x79, 0x3d, 0xcf, 0xe0, 0x9a, 0xfd, 0x54, 0x64, 0x4b, 0x1c, 0xbb, 0x62, 0x1e, 0x56, 0x55, 0x68,
0xdc, 0xc7, 0x89, 0xce, 0x8f, 0x90, 0x19, 0xab, 0x98, 0x01, 0x6d, 0x97, 0xa6, 0x29, 0xc7, 0xc6,
0x3c, 0xc9, 0x5d, 0x54, 0x43, 0x68, 0x27, 0xac, 0x23, 0x4e, 0xe0, 0x78, 0xe3, 0x3c, 0x77, 0xd0,
0x7a, 0x08, 0x7d, 0x1c, 0xd8, 0xa8, 0x3a, 0x10, 0xf9, 0x45, 0x91, 0x31, 0x1f, 0x73, 0x2f, 0x5e,
0xcb, 0xe2, 0x7f, 0xeb, 0x5f, 0xd6, 0x9c, 0xdd, 0xf9, 0xcd, 0x04, 0x00, 0x00
};

View File

@ -1217,121 +1217,121 @@ const uint8_t PAGE_settings_time[] PROGMEM = {
// Autogenerated from wled00/data/settings_sec.htm, do not edit!!
const uint16_t PAGE_settings_sec_length = 1802;
const uint16_t PAGE_settings_sec_length = 1801;
const uint8_t PAGE_settings_sec[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x95, 0x57, 0x6d, 0x6f, 0xdb, 0x38,
0x12, 0xfe, 0xae, 0x5f, 0x41, 0xb3, 0x40, 0xd7, 0x06, 0x64, 0x29, 0x49, 0x6f, 0x17, 0xdd, 0xc4,
0x52, 0xcf, 0x69, 0x9c, 0x4d, 0x80, 0x64, 0x13, 0xc4, 0xee, 0xf6, 0x0e, 0x87, 0x43, 0x41, 0x4b,
0x23, 0x8b, 0x6b, 0x99, 0xd4, 0x92, 0x54, 0x5c, 0xa3, 0xe8, 0x7f, 0xbf, 0x19, 0x4a, 0x4a, 0x9c,
0xb4, 0x8b, 0x5c, 0x3f, 0xe4, 0x45, 0x14, 0xe7, 0xed, 0x99, 0x99, 0x67, 0x46, 0x93, 0xc1, 0xd9,
0xcd, 0xfb, 0xc5, 0xbf, 0x6f, 0x67, 0xac, 0x74, 0x9b, 0x2a, 0x9d, 0xd0, 0x6f, 0x56, 0x09, 0xb5,
0x4a, 0x38, 0x28, 0x8e, 0xcf, 0x20, 0xf2, 0x74, 0xb2, 0x01, 0x27, 0x98, 0x12, 0x1b, 0x48, 0xf8,
0xbd, 0x84, 0x6d, 0xad, 0x8d, 0xe3, 0x2c, 0xd3, 0xca, 0x81, 0x72, 0x09, 0xdf, 0xca, 0xdc, 0x95,
0xc9, 0xcf, 0x07, 0x07, 0x3c, 0x0d, 0xda, 0xab, 0xc1, 0xb3, 0x77, 0x39, 0xdc, 0xcb, 0x0c, 0xc6,
0xfe, 0x21, 0x94, 0x4a, 0x3a, 0x29, 0xaa, 0xb1, 0xcd, 0x44, 0x05, 0xc9, 0x61, 0xb8, 0x11, 0x9f,
0xe5, 0xa6, 0xd9, 0x3c, 0x3c, 0x37, 0x16, 0x8c, 0x7f, 0x10, 0x4b, 0x7c, 0x56, 0x9a, 0xb3, 0xe0,
0x99, 0xe9, 0xce, 0xa1, 0xac, 0x14, 0xc6, 0x02, 0x1a, 0x69, 0x5c, 0x31, 0x7e, 0x8b, 0xa7, 0x4e,
0xba, 0x0a, 0xd2, 0x6b, 0x69, 0x33, 0x36, 0x07, 0xe7, 0xa4, 0x5a, 0xd9, 0x49, 0xdc, 0x1e, 0x4e,
0x6c, 0x66, 0x64, 0xed, 0xd2, 0xe0, 0x5e, 0x18, 0xe6, 0xe4, 0x06, 0x74, 0xe3, 0xc2, 0x3c, 0xc9,
0x75, 0xd6, 0x6c, 0xd0, 0xd1, 0x93, 0xa2, 0x51, 0x99, 0x93, 0x5a, 0xb1, 0x8b, 0xe1, 0xe8, 0xcb,
0x56, 0xaa, 0x5c, 0x6f, 0x23, 0x5d, 0x83, 0x1a, 0xf2, 0xd2, 0xb9, 0xda, 0x1e, 0xc7, 0xf1, 0x5a,
0xe9, 0x68, 0x5b, 0x41, 0x1e, 0xad, 0x20, 0x2e, 0x40, 0xb8, 0xc6, 0x80, 0x8d, 0x6d, 0x67, 0x26,
0x7e, 0x65, 0x21, 0x6b, 0x8c, 0x74, 0xbb, 0x71, 0x7f, 0xc4, 0x47, 0x5f, 0x1f, 0x94, 0x9e, 0x3e,
0x57, 0xfa, 0x20, 0xc8, 0x43, 0xfe, 0xc9, 0x42, 0x55, 0xec, 0xdf, 0xfe, 0xf0, 0xcd, 0xed, 0xa6,
0xce, 0x85, 0x83, 0xef, 0xdd, 0x5d, 0x5d, 0xe6, 0x43, 0x37, 0xfa, 0x62, 0x00, 0xfd, 0x51, 0x8c,
0x9c, 0x73, 0xb3, 0x0a, 0x28, 0xa4, 0xd3, 0x9d, 0x7f, 0xf5, 0x78, 0x55, 0xda, 0x9b, 0xe5, 0x9f,
0x90, 0xb9, 0xbd, 0xfb, 0xee, 0xf5, 0x6b, 0xae, 0xfd, 0x21, 0x4f, 0x12, 0xb7, 0xab, 0x41, 0x17,
0x74, 0x36, 0x98, 0x1a, 0x23, 0x76, 0x91, 0xb4, 0xfe, 0xef, 0x13, 0x25, 0xb6, 0xd4, 0xdb, 0x85,
0x16, 0x16, 0xb5, 0x84, 0x90, 0x0c, 0x0e, 0x47, 0x5f, 0x08, 0x50, 0x95, 0x90, 0x1f, 0xdc, 0xd1,
0x0b, 0x3e, 0x3a, 0x51, 0x91, 0x54, 0x0a, 0xcc, 0xc5, 0xe2, 0xfa, 0x2a, 0x71, 0xa1, 0x8a, 0xb2,
0x4a, 0x58, 0x7b, 0x25, 0xad, 0x8b, 0x44, 0x9e, 0x0f, 0xe1, 0x1d, 0x07, 0x63, 0xb4, 0xe1, 0xc7,
0x9c, 0xb4, 0xf1, 0x51, 0x98, 0x55, 0x20, 0xcc, 0xa2, 0x4d, 0xca, 0xb0, 0x4b, 0xce, 0x08, 0xe5,
0xac, 0xdb, 0x55, 0x10, 0x09, 0x25, 0x37, 0x82, 0x8c, 0x27, 0x5c, 0x69, 0x85, 0x28, 0x74, 0x37,
0x12, 0xc4, 0xb0, 0x17, 0x1a, 0xf6, 0x0e, 0x22, 0x74, 0xfb, 0xf6, 0x0c, 0x6c, 0xf4, 0x3d, 0x0c,
0x3b, 0x43, 0x5f, 0x47, 0xe1, 0xd1, 0xaf, 0x07, 0x07, 0x7b, 0xe1, 0x34, 0x75, 0xa5, 0x45, 0x7e,
0x2e, 0x2b, 0xa0, 0x78, 0xfa, 0x60, 0x14, 0x6c, 0xd9, 0xbf, 0xae, 0xaf, 0x2e, 0x30, 0xf3, 0x77,
0xf0, 0x57, 0x03, 0xd6, 0x61, 0x48, 0xe8, 0xfa, 0xec, 0x1e, 0x71, 0x25, 0xbd, 0x80, 0xd1, 0x0d,
0x39, 0x89, 0xf2, 0x70, 0xdf, 0xf4, 0x1e, 0x3a, 0xa5, 0xb4, 0x68, 0xdd, 0xd6, 0x5a, 0x59, 0x58,
0xc0, 0x67, 0x17, 0xfa, 0x13, 0xeb, 0xb0, 0x70, 0x6c, 0x9a, 0xfc, 0x83, 0xbc, 0x18, 0x51, 0x8c,
0xdf, 0xaa, 0x6d, 0xc1, 0xd9, 0xd3, 0xeb, 0x9e, 0x28, 0x26, 0x1d, 0xd9, 0x3a, 0x1c, 0xf4, 0x0a,
0xda, 0x12, 0xb9, 0xbd, 0x99, 0x2f, 0xb0, 0x3e, 0xe2, 0x36, 0x20, 0xcc, 0x01, 0x45, 0xa2, 0x7d,
0x24, 0xe7, 0xda, 0x6c, 0xce, 0x84, 0x13, 0x27, 0x5d, 0xd2, 0x75, 0x24, 0x6a, 0x94, 0xc1, 0x7c,
0x61, 0x51, 0x09, 0x84, 0x33, 0x2a, 0x30, 0x7e, 0xfb, 0x9f, 0x83, 0xff, 0x22, 0x02, 0x84, 0x3a,
0xbd, 0xd3, 0x23, 0x3c, 0xbf, 0x17, 0x55, 0x83, 0x7d, 0xc7, 0xc3, 0xc1, 0xe1, 0xd7, 0x60, 0x12,
0x77, 0x2d, 0xd4, 0xb5, 0x12, 0xb3, 0x26, 0x4b, 0x78, 0x5f, 0xc7, 0xd1, 0x9f, 0xf6, 0x5d, 0x9d,
0xfc, 0x82, 0x4d, 0xf8, 0x78, 0x8d, 0xb2, 0x97, 0xfe, 0x53, 0x6e, 0xa8, 0x67, 0x59, 0x63, 0x2a,
0x4c, 0x83, 0x4f, 0x68, 0x66, 0xb1, 0x39, 0x4e, 0x48, 0xa1, 0xbf, 0x31, 0x89, 0x5b, 0x92, 0x59,
0xea, 0x7c, 0xc7, 0xb4, 0x22, 0xff, 0x13, 0xfe, 0x1b, 0xb8, 0x3f, 0x86, 0x23, 0x54, 0x57, 0xa0,
0xf7, 0x4c, 0xe2, 0x09, 0xfd, 0xf3, 0xc9, 0xf2, 0x8e, 0x86, 0xe6, 0x05, 0x67, 0x48, 0x02, 0xa5,
0xc6, 0x37, 0xb5, 0xc6, 0xaa, 0x43, 0xea, 0xc9, 0xe5, 0x3d, 0xf3, 0xa9, 0x4f, 0xb0, 0x12, 0x6b,
0x83, 0x19, 0x4f, 0xf7, 0xcf, 0x4a, 0xa8, 0xea, 0x53, 0x3c, 0x5a, 0x36, 0xce, 0x61, 0xea, 0xa9,
0xdc, 0x13, 0xde, 0x3e, 0x70, 0xb4, 0x9b, 0x55, 0x32, 0x5b, 0x27, 0xfc, 0x82, 0xac, 0xbe, 0x43,
0xe7, 0xda, 0x37, 0xe8, 0x1d, 0xaa, 0x78, 0x49, 0xe8, 0x94, 0x84, 0x4e, 0x31, 0x2d, 0x8f, 0x62,
0x9d, 0x40, 0xd0, 0x4a, 0xd8, 0x66, 0xb9, 0x91, 0xe8, 0xe4, 0x5c, 0xdc, 0x03, 0x7b, 0xcd, 0xee,
0x60, 0xa9, 0xb5, 0x7b, 0xbc, 0x5c, 0x9a, 0xde, 0x4e, 0x79, 0x94, 0xce, 0x3b, 0x26, 0xc1, 0x7b,
0x1f, 0x7c, 0xdf, 0x33, 0x04, 0xb9, 0xa9, 0x11, 0xa6, 0xa3, 0x34, 0xb8, 0xd2, 0xd9, 0x9a, 0x6d,
0xa5, 0x01, 0xcc, 0x98, 0x65, 0xc3, 0x9b, 0xc5, 0x74, 0xc4, 0xac, 0x2e, 0xdc, 0x56, 0x18, 0x60,
0x2d, 0x4d, 0x1c, 0xb3, 0x89, 0x54, 0x75, 0xe3, 0x3a, 0x67, 0xb3, 0x12, 0xb2, 0xf5, 0x52, 0x7f,
0xee, 0x91, 0xfb, 0xfd, 0x86, 0x30, 0x30, 0x69, 0x70, 0x8b, 0xa8, 0xd4, 0xa5, 0x11, 0xf6, 0xb9,
0x44, 0x8d, 0x2f, 0xb6, 0xda, 0xe4, 0xbd, 0xc4, 0xcd, 0x2d, 0x62, 0x2d, 0x3e, 0x57, 0xa0, 0x56,
0xc8, 0xe5, 0xfc, 0xcd, 0x51, 0xa7, 0x60, 0xa1, 0x19, 0x28, 0x22, 0x69, 0x86, 0x6e, 0x84, 0x0c,
0x13, 0xc4, 0x7a, 0x16, 0x64, 0x06, 0x84, 0xc5, 0xd2, 0x67, 0x3b, 0xdd, 0x30, 0x05, 0x90, 0x33,
0xa7, 0x99, 0xa8, 0x2c, 0x49, 0x38, 0x40, 0x06, 0x2e, 0x01, 0xe7, 0x87, 0x31, 0xc8, 0x3c, 0xac,
0x37, 0x37, 0x08, 0x48, 0xeb, 0x02, 0xdf, 0xf4, 0x27, 0xc4, 0x36, 0x4d, 0x95, 0xb3, 0x25, 0x10,
0xd7, 0xab, 0x15, 0xaa, 0xd9, 0x96, 0xa0, 0xc8, 0x1c, 0xb2, 0x59, 0x67, 0x3c, 0x8f, 0x48, 0x6c,
0xb2, 0x4c, 0x83, 0x33, 0x69, 0x7b, 0x6f, 0xda, 0x7b, 0x4a, 0x3b, 0x26, 0xb1, 0xc9, 0x2d, 0x84,
0x4c, 0xa3, 0x49, 0xb3, 0x95, 0x16, 0x98, 0x50, 0x4c, 0x38, 0xea, 0x21, 0xf4, 0x23, 0xc3, 0x07,
0x03, 0x05, 0x16, 0x48, 0xc9, 0xda, 0x21, 0xf5, 0x80, 0xe6, 0x80, 0x6a, 0xc0, 0x07, 0x3a, 0x91,
0x69, 0x3f, 0x4e, 0x18, 0xd5, 0x00, 0x36, 0x32, 0xba, 0xb8, 0x42, 0x4d, 0x88, 0x39, 0x16, 0xec,
0xae, 0xf5, 0xce, 0xdb, 0x96, 0x85, 0x37, 0x5f, 0x51, 0x9a, 0xf0, 0x5a, 0xde, 0xba, 0x94, 0x0f,
0x26, 0xb1, 0x4c, 0x7d, 0x7c, 0x67, 0xa0, 0x76, 0x4c, 0x64, 0x19, 0xa5, 0x0f, 0x31, 0xf9, 0x28,
0xcf, 0x25, 0xeb, 0x9b, 0x88, 0xa4, 0x49, 0x12, 0xf2, 0x17, 0x72, 0x78, 0xf3, 0x91, 0xb7, 0xda,
0xe8, 0xe7, 0x5c, 0x64, 0x4e, 0x1b, 0x82, 0x1c, 0xf5, 0xbc, 0x20, 0x78, 0x37, 0xef, 0x72, 0x37,
0xad, 0xaa, 0x47, 0xb3, 0x42, 0xe5, 0xac, 0xf6, 0xe2, 0x16, 0x6b, 0x0b, 0xdf, 0x20, 0xe0, 0x40,
0x85, 0xd1, 0x63, 0x8b, 0x02, 0x17, 0x8b, 0xc5, 0x2d, 0x73, 0x46, 0x14, 0x85, 0xcc, 0x28, 0xb2,
0x46, 0x81, 0xca, 0xcc, 0xae, 0x76, 0x78, 0x89, 0x4d, 0xf7, 0x20, 0x95, 0xca, 0x67, 0xd7, 0xa2,
0x3d, 0xcc, 0xbc, 0xc3, 0x3c, 0xae, 0x3d, 0xcc, 0x92, 0x12, 0x9f, 0x01, 0x12, 0x87, 0x6f, 0x69,
0xe2, 0x1e, 0x84, 0x98, 0x2a, 0xbf, 0x7c, 0x93, 0xce, 0xfb, 0x12, 0x6e, 0x2b, 0x1e, 0x6b, 0xfd,
0xcd, 0x4b, 0x3d, 0xf7, 0x81, 0x7a, 0x2e, 0xb8, 0x16, 0xaa, 0x11, 0x95, 0xc7, 0xbc, 0x17, 0x7d,
0xe8, 0x40, 0x93, 0xce, 0xda, 0xf2, 0x9c, 0x9a, 0xbc, 0x91, 0x4a, 0xe3, 0xa5, 0xbf, 0x85, 0xa7,
0x5b, 0x31, 0xa6, 0x5d, 0x73, 0x90, 0x4f, 0xd4, 0xcf, 0x4d, 0xed, 0xbb, 0xd5, 0x22, 0xc0, 0x9d,
0x53, 0xa2, 0xa7, 0x93, 0xa5, 0x53, 0xac, 0x52, 0x6b, 0x14, 0x2d, 0xb1, 0x82, 0x12, 0x1e, 0x77,
0x08, 0x22, 0x13, 0x6a, 0xf5, 0x0e, 0x87, 0xb7, 0x67, 0x32, 0xce, 0x9c, 0x30, 0x2b, 0x5a, 0x52,
0xfa, 0x93, 0x71, 0x61, 0xd0, 0x14, 0xef, 0xd5, 0x77, 0x52, 0x93, 0x58, 0xb4, 0x38, 0x13, 0x63,
0xa5, 0x9d, 0xc5, 0x87, 0x97, 0xbe, 0x08, 0xf7, 0xfc, 0x26, 0xc2, 0xee, 0x53, 0xea, 0x49, 0xdc,
0x57, 0x54, 0x8d, 0x56, 0xbc, 0x75, 0x9e, 0xf6, 0x61, 0x06, 0x4f, 0xc1, 0xeb, 0x08, 0xfd, 0x43,
0x3b, 0x24, 0x1e, 0xb0, 0xfc, 0x69, 0x6f, 0x0c, 0xe6, 0xd1, 0xbc, 0x88, 0x48, 0x67, 0xf8, 0x34,
0x22, 0x3e, 0xfa, 0xa9, 0x2b, 0xb9, 0x8e, 0x10, 0xcd, 0xf7, 0xb0, 0xe8, 0xa0, 0xc8, 0x8a, 0xd5,
0x73, 0x18, 0x82, 0x17, 0x70, 0xc0, 0x8d, 0xb1, 0x90, 0xab, 0xc6, 0xf8, 0x49, 0xdf, 0xa3, 0xf1,
0x04, 0x8c, 0x27, 0x37, 0x82, 0x17, 0x31, 0x39, 0xfa, 0x5b, 0x50, 0x9e, 0x62, 0x12, 0xfc, 0x08,
0x28, 0x47, 0xe1, 0x63, 0x70, 0x84, 0xc8, 0x1e, 0x20, 0x34, 0x69, 0x02, 0x3f, 0xd1, 0xb0, 0xae,
0x74, 0xa5, 0xcd, 0xf1, 0xab, 0x42, 0xd0, 0x4a, 0xfc, 0xfa, 0xd5, 0xaf, 0x6f, 0xdf, 0xbe, 0x3d,
0xe9, 0xca, 0x08, 0x1b, 0xae, 0x4f, 0x6b, 0xfc, 0x24, 0xa2, 0xb6, 0xf3, 0x6e, 0xfe, 0x98, 0xdd,
0x7d, 0xbc, 0xbb, 0x5c, 0xcc, 0x88, 0x39, 0x91, 0x9f, 0x1a, 0xe4, 0x48, 0xe5, 0xbe, 0x2f, 0x11,
0x79, 0x10, 0x82, 0x4b, 0xd5, 0x33, 0xe9, 0x53, 0x7d, 0x1b, 0x41, 0x9c, 0xf0, 0x57, 0x83, 0xc3,
0x82, 0x09, 0x56, 0xec, 0xb3, 0x04, 0x43, 0xaa, 0x36, 0x30, 0xf6, 0xbc, 0x47, 0x0e, 0xe1, 0xda,
0xe7, 0xcd, 0xcd, 0xe6, 0xb7, 0xa8, 0xd4, 0xc7, 0x73, 0xfe, 0x1d, 0x36, 0x0f, 0x1f, 0x98, 0xd9,
0x7a, 0xee, 0x23, 0x7e, 0x5d, 0x52, 0xd7, 0xe7, 0x38, 0x7a, 0x22, 0xea, 0x99, 0xe9, 0x12, 0xb7,
0xb1, 0xbe, 0x51, 0xba, 0xc6, 0xe8, 0x17, 0xe8, 0x95, 0x74, 0x65, 0xb3, 0x8c, 0x32, 0xbd, 0x89,
0xa7, 0xd2, 0x64, 0x5a, 0xeb, 0xb5, 0x84, 0xf8, 0xe3, 0xd5, 0xec, 0x2c, 0x7e, 0xec, 0x92, 0x4f,
0x4b, 0xfc, 0xf8, 0x58, 0xf3, 0x94, 0x8e, 0xa9, 0x0a, 0x02, 0x76, 0x0f, 0xc6, 0x52, 0x38, 0x07,
0xd1, 0xe1, 0x9b, 0xe8, 0x70, 0xbc, 0xac, 0x7e, 0xee, 0x39, 0xe9, 0x87, 0x4c, 0x6c, 0xe5, 0x5a,
0xc6, 0xef, 0xf1, 0xb3, 0xc4, 0x48, 0xcc, 0xbc, 0x36, 0x76, 0x8c, 0xac, 0x37, 0xce, 0x0c, 0xe4,
0xd2, 0xd9, 0xbd, 0xf2, 0xec, 0x1d, 0xd8, 0xbf, 0x1a, 0xe2, 0x6c, 0xa0, 0x8d, 0x09, 0x19, 0x4f,
0x42, 0x4b, 0x97, 0xb6, 0x86, 0x0c, 0x3f, 0x62, 0x90, 0xea, 0xf0, 0xf6, 0x63, 0xf7, 0x4e, 0x59,
0xd9, 0xe0, 0x60, 0xf0, 0xa7, 0x7e, 0xf6, 0x21, 0xc5, 0x03, 0x46, 0xb0, 0xc3, 0xc5, 0x15, 0x67,
0x92, 0x66, 0xb4, 0x84, 0x20, 0x5c, 0xc8, 0x8d, 0x68, 0x9a, 0x66, 0x3b, 0x39, 0x37, 0x78, 0x60,
0xd9, 0x61, 0x36, 0x62, 0x47, 0x07, 0x87, 0xbf, 0x8c, 0x8f, 0x0e, 0x8e, 0x0e, 0xd9, 0xfb, 0xd2,
0xe0, 0x56, 0x28, 0x91, 0x3c, 0xe7, 0x59, 0xb9, 0xa5, 0x9d, 0xba, 0x1b, 0x47, 0x57, 0x38, 0xa8,
0x70, 0xaf, 0x44, 0xd8, 0xd1, 0xa9, 0x76, 0x9a, 0xfe, 0x10, 0x18, 0xcb, 0x4a, 0x2f, 0xe3, 0x0d,
0xae, 0x93, 0x60, 0xe2, 0xab, 0xcb, 0xf7, 0xb3, 0xdf, 0xe7, 0xb3, 0x6f, 0x53, 0x10, 0x5c, 0x5f,
0x2e, 0x58, 0xd5, 0x5a, 0xf2, 0x01, 0xe2, 0x08, 0xeb, 0x1d, 0x9d, 0x83, 0xc1, 0xa8, 0x30, 0x0c,
0x6b, 0x71, 0x10, 0x22, 0xab, 0xda, 0x1a, 0xbd, 0xec, 0xd8, 0xc0, 0xca, 0x9a, 0x53, 0xd7, 0xfa,
0xdd, 0x97, 0xf9, 0x75, 0x96, 0x86, 0x29, 0x5d, 0x69, 0x57, 0x1d, 0x6a, 0x15, 0x5a, 0xe9, 0xda,
0xef, 0x85, 0x1f, 0x5c, 0xb1, 0x82, 0x6f, 0x76, 0xac, 0xff, 0x6b, 0xc5, 0x8a, 0x69, 0xea, 0x20,
0x76, 0x9e, 0x75, 0x7a, 0xba, 0x7f, 0xc6, 0x45, 0xac, 0x6b, 0x5f, 0x9c, 0xda, 0x75, 0x25, 0x76,
0xc7, 0xfe, 0x73, 0x83, 0xe2, 0xf6, 0xaf, 0xf1, 0x1f, 0x5a, 0x51, 0x69, 0x5f, 0xa5, 0x4f, 0xe5,
0xff, 0x01, 0xcf, 0xd2, 0xf0, 0x4f, 0x3a, 0x0f, 0x00, 0x00
0x12, 0xfe, 0xae, 0x5f, 0xc1, 0xb0, 0x40, 0xd7, 0x06, 0x6c, 0x29, 0x71, 0xef, 0x8a, 0x6e, 0x62,
0xa9, 0x97, 0x34, 0xce, 0x25, 0x40, 0xb2, 0x09, 0x62, 0x77, 0x7b, 0x87, 0xc3, 0xa1, 0xa0, 0xa5,
0x91, 0xc5, 0xb5, 0x4c, 0x6a, 0x49, 0xca, 0xae, 0x51, 0xf4, 0xbf, 0xdf, 0x0c, 0x25, 0x39, 0x76,
0xda, 0x45, 0xae, 0x1f, 0xf2, 0x22, 0x8a, 0xf3, 0xf6, 0xcc, 0xcc, 0x33, 0xa3, 0xf1, 0xd1, 0xe5,
0xfd, 0x87, 0xd9, 0xbf, 0x1f, 0x26, 0xac, 0x70, 0xab, 0x32, 0x19, 0xd3, 0x6f, 0x56, 0x0a, 0xb5,
0x88, 0x39, 0x28, 0x8e, 0xcf, 0x20, 0xb2, 0x64, 0xbc, 0x02, 0x27, 0x98, 0x12, 0x2b, 0x88, 0xf9,
0x5a, 0xc2, 0xa6, 0xd2, 0xc6, 0x71, 0x96, 0x6a, 0xe5, 0x40, 0xb9, 0x98, 0x6f, 0x64, 0xe6, 0x8a,
0xf8, 0xef, 0xc7, 0xc7, 0x3c, 0x09, 0x9a, 0xab, 0xc1, 0xb3, 0x77, 0x19, 0xac, 0x65, 0x0a, 0x43,
0xff, 0x30, 0x90, 0x4a, 0x3a, 0x29, 0xca, 0xa1, 0x4d, 0x45, 0x09, 0xf1, 0xc9, 0x60, 0x25, 0xbe,
0xc8, 0x55, 0xbd, 0xda, 0x3d, 0xd7, 0x16, 0x8c, 0x7f, 0x10, 0x73, 0x7c, 0x56, 0x9a, 0xb3, 0xe0,
0x99, 0xe9, 0xd6, 0xa1, 0xb4, 0x10, 0xc6, 0x02, 0x1a, 0xa9, 0x5d, 0x3e, 0x7c, 0x87, 0xa7, 0x4e,
0xba, 0x12, 0x92, 0x3b, 0x69, 0x53, 0x36, 0x05, 0xe7, 0xa4, 0x5a, 0xd8, 0x71, 0xd4, 0x1c, 0x8e,
0x6d, 0x6a, 0x64, 0xe5, 0x92, 0x60, 0x2d, 0x0c, 0x73, 0x72, 0x05, 0xba, 0x76, 0x83, 0x2c, 0xce,
0x74, 0x5a, 0xaf, 0xd0, 0xd1, 0xb3, 0xbc, 0x56, 0xa9, 0x93, 0x5a, 0xb1, 0xeb, 0x5e, 0xff, 0xeb,
0x46, 0xaa, 0x4c, 0x6f, 0x42, 0x5d, 0x81, 0xea, 0xf1, 0xc2, 0xb9, 0xca, 0x9e, 0x46, 0xd1, 0x52,
0xe9, 0x70, 0x53, 0x42, 0x16, 0x2e, 0x20, 0xca, 0x41, 0xb8, 0xda, 0x80, 0x8d, 0x6c, 0x6b, 0x26,
0x7a, 0x65, 0x21, 0xad, 0x8d, 0x74, 0xdb, 0x61, 0x77, 0xc4, 0xfb, 0xdf, 0x76, 0x4a, 0x2f, 0x9e,
0x2b, 0xdd, 0x09, 0xf2, 0x01, 0xff, 0x6c, 0xa1, 0xcc, 0xf7, 0x6f, 0x7f, 0xfc, 0xee, 0x76, 0x5d,
0x65, 0xc2, 0xc1, 0x8f, 0xee, 0x2e, 0x6e, 0xb2, 0x9e, 0xeb, 0x7f, 0x35, 0x80, 0xfe, 0x28, 0x46,
0xce, 0xb9, 0x49, 0x09, 0x14, 0xd2, 0xc5, 0xd6, 0xbf, 0x7a, 0xba, 0x2a, 0xed, 0xfd, 0xfc, 0x0f,
0x48, 0xdd, 0xde, 0x7d, 0xf7, 0xfa, 0x35, 0xd7, 0xfe, 0x90, 0xc7, 0xb1, 0xdb, 0x56, 0xa0, 0x73,
0x3a, 0x3b, 0x3a, 0x37, 0x46, 0x6c, 0x43, 0x69, 0xfd, 0xdf, 0x03, 0x25, 0xb6, 0xd0, 0x9b, 0x99,
0x16, 0x16, 0xb5, 0x0c, 0x20, 0x3e, 0x3a, 0xe9, 0x7f, 0x25, 0x40, 0x55, 0x4c, 0x7e, 0x70, 0x47,
0x2f, 0x78, 0xff, 0x4c, 0x85, 0x52, 0x29, 0x30, 0xd7, 0xb3, 0xbb, 0xdb, 0xd8, 0x0d, 0x54, 0x98,
0x96, 0xc2, 0xda, 0x5b, 0x69, 0x5d, 0x28, 0xb2, 0xac, 0x07, 0xef, 0x39, 0x18, 0xa3, 0x0d, 0x3f,
0xe5, 0xa4, 0x8d, 0xf7, 0x07, 0x69, 0x09, 0xc2, 0xcc, 0x9a, 0xa4, 0xf4, 0xda, 0xe4, 0xf4, 0x51,
0xce, 0xba, 0x6d, 0x09, 0xa1, 0x50, 0x72, 0x25, 0xc8, 0x78, 0xcc, 0x95, 0x56, 0x88, 0x42, 0x7b,
0x23, 0x46, 0x0c, 0x3b, 0xa1, 0x5e, 0xe7, 0x20, 0x42, 0xb7, 0x6f, 0xcf, 0xc0, 0x4a, 0xaf, 0xa1,
0xd7, 0x1a, 0xfa, 0xd6, 0x1f, 0x8c, 0x7e, 0x3d, 0x3e, 0xde, 0x0b, 0xa7, 0xae, 0x4a, 0x2d, 0xb2,
0x2b, 0x59, 0x02, 0xc5, 0xd3, 0x05, 0xa3, 0x60, 0xc3, 0xfe, 0x75, 0x77, 0x7b, 0x8d, 0x99, 0x7f,
0x84, 0x3f, 0x6b, 0xb0, 0x0e, 0x43, 0x42, 0xd7, 0x27, 0x6b, 0xc4, 0x95, 0xf4, 0x02, 0x46, 0xd7,
0xe3, 0x24, 0xca, 0x07, 0xfb, 0xa6, 0xf7, 0xd0, 0x29, 0xa4, 0x45, 0xeb, 0xb6, 0xd2, 0xca, 0xc2,
0x0c, 0xbe, 0xb8, 0x81, 0x3f, 0xb1, 0x0e, 0x0b, 0xc7, 0x26, 0xf1, 0xdf, 0xc8, 0x8b, 0x3e, 0xc5,
0xf8, 0xbd, 0xda, 0x06, 0x9c, 0x3d, 0xbd, 0xee, 0x40, 0x31, 0xe9, 0x48, 0x97, 0x83, 0xa3, 0x4e,
0x41, 0x53, 0x22, 0x0f, 0xf7, 0xd3, 0x19, 0xd6, 0x47, 0xd4, 0x04, 0x84, 0x39, 0xa0, 0x48, 0xb4,
0x8f, 0xe4, 0x4a, 0x9b, 0xd5, 0xa5, 0x70, 0xe2, 0xac, 0x4d, 0xba, 0x0e, 0x45, 0x85, 0x32, 0x98,
0x2f, 0x2c, 0x2a, 0x81, 0x70, 0x86, 0x39, 0xc6, 0x6f, 0xff, 0x73, 0xfc, 0x5f, 0x44, 0x80, 0x50,
0xa7, 0x77, 0xba, 0x8f, 0xe7, 0x6b, 0x51, 0xd6, 0xd8, 0x77, 0x7c, 0x70, 0x74, 0xf2, 0x2d, 0x18,
0x47, 0x6d, 0x0b, 0xb5, 0xad, 0xc4, 0xac, 0x49, 0x63, 0xde, 0xd5, 0x71, 0xf8, 0x87, 0x7d, 0x5f,
0xc5, 0x6f, 0xb1, 0x09, 0x9f, 0xae, 0x51, 0xf6, 0x92, 0x7f, 0xc8, 0x15, 0xf5, 0x2c, 0xab, 0x4d,
0x89, 0x69, 0xf0, 0x09, 0x4d, 0x2d, 0x36, 0xc7, 0x19, 0x29, 0xf4, 0x37, 0xc6, 0x51, 0x43, 0x32,
0x73, 0x9d, 0x6d, 0x99, 0x56, 0xe4, 0x7f, 0xcc, 0xff, 0x09, 0xee, 0xf7, 0x5e, 0x1f, 0xd5, 0xe5,
0xe8, 0x3d, 0x93, 0x78, 0x42, 0xff, 0x7c, 0xb6, 0xbc, 0xa5, 0xa1, 0x69, 0xce, 0x19, 0x92, 0x40,
0xa1, 0xf1, 0x4d, 0xa5, 0xb1, 0xea, 0x90, 0x7a, 0x32, 0xb9, 0x66, 0x3e, 0xf5, 0x31, 0x56, 0x62,
0x65, 0x30, 0xe3, 0xc9, 0xfe, 0x59, 0x01, 0x65, 0x75, 0x81, 0x47, 0xf3, 0xda, 0x39, 0x4c, 0x3d,
0x95, 0x7b, 0xcc, 0x9b, 0x07, 0x8e, 0x76, 0xd3, 0x52, 0xa6, 0xcb, 0x98, 0x5f, 0x93, 0xd5, 0xf7,
0xe8, 0x5c, 0xf3, 0x06, 0xbd, 0x43, 0x15, 0x2f, 0x09, 0x5d, 0x90, 0xd0, 0x05, 0xa6, 0xe5, 0x49,
0xac, 0x15, 0x08, 0x1a, 0x09, 0x5b, 0xcf, 0x57, 0x12, 0x9d, 0x9c, 0x8a, 0x35, 0xb0, 0xd7, 0xec,
0x11, 0xe6, 0x5a, 0xbb, 0xa7, 0xcb, 0x85, 0xe9, 0xec, 0x14, 0xa3, 0x64, 0xda, 0x32, 0x09, 0xde,
0xfb, 0xe8, 0xfb, 0x9e, 0x21, 0xc8, 0x75, 0x85, 0x30, 0x8d, 0x92, 0xe0, 0x56, 0xa7, 0x4b, 0xb6,
0x91, 0x06, 0x30, 0x63, 0x96, 0xf5, 0xee, 0x67, 0xe7, 0x7d, 0x66, 0x75, 0xee, 0x36, 0xc2, 0x00,
0x6b, 0x68, 0xe2, 0x94, 0x8d, 0xa5, 0xaa, 0x6a, 0xd7, 0x3a, 0x9b, 0x16, 0x90, 0x2e, 0xe7, 0xfa,
0x4b, 0x87, 0xdc, 0x6f, 0xf7, 0x84, 0x81, 0x49, 0x82, 0x07, 0x44, 0xa5, 0x2a, 0x8c, 0xb0, 0xcf,
0x25, 0x2a, 0x7c, 0xb1, 0xd1, 0x26, 0xeb, 0x24, 0xee, 0x1f, 0x10, 0x6b, 0xf1, 0xa5, 0x04, 0xb5,
0x40, 0x2e, 0xe7, 0x6f, 0x46, 0xad, 0x82, 0x99, 0x66, 0xa0, 0x88, 0xa4, 0x19, 0xba, 0x31, 0x60,
0x98, 0x20, 0xd6, 0xb1, 0x20, 0x33, 0x20, 0x2c, 0x96, 0x3e, 0xdb, 0xea, 0x9a, 0x29, 0x80, 0x8c,
0x39, 0xcd, 0x44, 0x69, 0x49, 0xc2, 0x01, 0x32, 0x70, 0x01, 0x38, 0x3f, 0x8c, 0x41, 0xe6, 0x61,
0x9d, 0xb9, 0xa3, 0x80, 0xb4, 0xce, 0xf0, 0x4d, 0x77, 0x42, 0x6c, 0x53, 0x97, 0x19, 0x9b, 0x03,
0x71, 0xbd, 0x5a, 0xa0, 0x9a, 0x4d, 0x01, 0x8a, 0xcc, 0x21, 0x9b, 0xb5, 0xc6, 0xb3, 0x90, 0xc4,
0xc6, 0xf3, 0x24, 0xb8, 0x94, 0xb6, 0xf3, 0xa6, 0xb9, 0xa7, 0xb4, 0x63, 0x12, 0x9b, 0xdc, 0xc2,
0x80, 0x69, 0x34, 0x69, 0x36, 0xd2, 0x02, 0x13, 0x8a, 0x09, 0x47, 0x3d, 0x84, 0x7e, 0xa4, 0xf8,
0x60, 0x20, 0xc7, 0x02, 0x29, 0x58, 0x33, 0xa4, 0x76, 0x68, 0x1e, 0x51, 0x0d, 0xf8, 0x40, 0xc7,
0x32, 0xe9, 0xc6, 0x09, 0xa3, 0x1a, 0xc0, 0x46, 0x46, 0x17, 0x17, 0xa8, 0x09, 0x31, 0xc7, 0x82,
0xdd, 0x36, 0xde, 0x79, 0xdb, 0x32, 0xf7, 0xe6, 0x4b, 0x4a, 0x13, 0x5e, 0xcb, 0x1a, 0x97, 0xb2,
0xa3, 0x71, 0x24, 0x13, 0x1f, 0xdf, 0x25, 0xa8, 0x2d, 0x13, 0x69, 0x4a, 0xe9, 0x43, 0x4c, 0x3e,
0xc9, 0x2b, 0xc9, 0xba, 0x26, 0x22, 0x69, 0x92, 0x84, 0xec, 0x85, 0x1c, 0xde, 0x7f, 0xe2, 0x8d,
0x36, 0xfa, 0xb9, 0x12, 0xa9, 0xd3, 0x86, 0x20, 0x47, 0x3d, 0x2f, 0x08, 0x3e, 0x4e, 0xdb, 0xdc,
0x9d, 0x97, 0xe5, 0x93, 0x59, 0xa1, 0x32, 0x56, 0x79, 0x71, 0x8b, 0xb5, 0x85, 0x6f, 0x10, 0x70,
0xa0, 0xc2, 0xe8, 0xb0, 0x45, 0x81, 0xeb, 0xd9, 0xec, 0x81, 0x39, 0x23, 0xf2, 0x5c, 0xa6, 0x14,
0x59, 0xad, 0x40, 0xa5, 0x66, 0x5b, 0x39, 0xbc, 0xc4, 0xce, 0xf7, 0x20, 0x95, 0xca, 0x67, 0xd7,
0xa2, 0x3d, 0xcc, 0xbc, 0xc3, 0x3c, 0x2e, 0x3d, 0xcc, 0x92, 0x12, 0x9f, 0x02, 0x12, 0x87, 0x6f,
0x69, 0xe2, 0x1e, 0x84, 0x98, 0x2a, 0xbf, 0x78, 0x93, 0x4c, 0xbb, 0x12, 0x6e, 0x2a, 0x1e, 0x6b,
0xfd, 0xcd, 0x4b, 0x3d, 0xf7, 0x91, 0x7a, 0x2e, 0xb8, 0x13, 0xaa, 0x16, 0xa5, 0xc7, 0xbc, 0x13,
0xdd, 0x75, 0xa0, 0x49, 0x26, 0x4d, 0x79, 0x9e, 0x9b, 0xac, 0x96, 0x4a, 0xe3, 0xa5, 0xbf, 0x84,
0xa7, 0x5d, 0x31, 0xce, 0xdb, 0xe6, 0x20, 0x9f, 0xa8, 0x9f, 0xeb, 0xca, 0x77, 0xab, 0x45, 0x80,
0x5b, 0xa7, 0x44, 0x47, 0x27, 0x73, 0xa7, 0x58, 0xa9, 0x96, 0x28, 0x5a, 0x60, 0x05, 0xc5, 0x3c,
0x6a, 0x11, 0x44, 0x26, 0xd4, 0xea, 0x3d, 0x0e, 0x6f, 0xcf, 0x64, 0x9c, 0x39, 0x61, 0x16, 0xb4,
0xa4, 0x74, 0x27, 0xc3, 0xdc, 0xa0, 0x29, 0xde, 0xa9, 0x6f, 0xa5, 0xc6, 0x91, 0x68, 0x70, 0x26,
0xc6, 0x4a, 0x5a, 0x8b, 0xbb, 0x97, 0xbe, 0x08, 0xf7, 0xfc, 0x26, 0xc2, 0xee, 0x52, 0xea, 0x49,
0xdc, 0x57, 0x54, 0x85, 0x56, 0xbc, 0x75, 0x9e, 0x74, 0x61, 0x06, 0x87, 0xe0, 0xb5, 0x84, 0xfe,
0xb1, 0x19, 0x12, 0x3b, 0x2c, 0x7f, 0xd9, 0x1b, 0x83, 0x59, 0x38, 0xcd, 0x43, 0xd2, 0x39, 0x38,
0x8c, 0x88, 0xf7, 0x7f, 0x69, 0x4b, 0xae, 0x25, 0x44, 0xf3, 0x23, 0x2c, 0x5a, 0x28, 0xd2, 0x7c,
0xf1, 0x1c, 0x86, 0xe0, 0x05, 0x1c, 0x70, 0x63, 0xcc, 0xe5, 0xa2, 0x36, 0x7e, 0xd2, 0x77, 0x68,
0x1c, 0x80, 0x71, 0x70, 0x23, 0x78, 0x11, 0x93, 0xd1, 0x5f, 0x82, 0x72, 0x88, 0x49, 0xf0, 0x33,
0xa0, 0x8c, 0x06, 0x4f, 0xc1, 0x11, 0x22, 0x7b, 0x80, 0xd0, 0xa4, 0x09, 0xfc, 0x44, 0xc3, 0xba,
0xd2, 0xa5, 0x36, 0xa7, 0xaf, 0x72, 0x41, 0x2b, 0xf1, 0xeb, 0x57, 0xbf, 0xbe, 0x7b, 0xf7, 0xee,
0xac, 0x2d, 0x23, 0x6c, 0xb8, 0x2e, 0xad, 0xd1, 0x41, 0x44, 0x4d, 0xe7, 0xdd, 0xff, 0x3e, 0x79,
0xfc, 0xf4, 0x78, 0x33, 0x9b, 0x10, 0x73, 0x22, 0x3f, 0xd5, 0xc8, 0x91, 0xca, 0xfd, 0x58, 0x22,
0xf4, 0x20, 0x04, 0x37, 0xaa, 0x63, 0xd2, 0x43, 0x7d, 0x2b, 0x41, 0x9c, 0xf0, 0x67, 0x8d, 0xc3,
0x82, 0x09, 0x96, 0xef, 0xb3, 0x04, 0x43, 0xaa, 0x36, 0x30, 0xf4, 0xbc, 0x47, 0x0e, 0xe1, 0xda,
0xe7, 0xcd, 0x4d, 0xa6, 0x0f, 0xa8, 0xd4, 0xc7, 0x73, 0xf5, 0x03, 0x36, 0x1f, 0xec, 0x98, 0xd9,
0x7a, 0xee, 0x23, 0x7e, 0x9d, 0x53, 0xd7, 0x67, 0x38, 0x7a, 0x42, 0xea, 0x99, 0xf3, 0x39, 0x6e,
0x63, 0x5d, 0xa3, 0xb4, 0x8d, 0xd1, 0x2d, 0xd0, 0x0b, 0xe9, 0x8a, 0x7a, 0x1e, 0xa6, 0x7a, 0x15,
0x9d, 0x4b, 0x93, 0x6a, 0xad, 0x97, 0x12, 0xa2, 0x4f, 0xb7, 0x93, 0xcb, 0xe8, 0xa9, 0x4b, 0x3e,
0xcf, 0xf1, 0xe3, 0x63, 0xc9, 0x13, 0x3a, 0xa6, 0x2a, 0x08, 0xd8, 0x1a, 0x8c, 0xa5, 0x70, 0x8e,
0xc3, 0x93, 0x37, 0xe1, 0xc9, 0x70, 0x5e, 0xbe, 0xed, 0x38, 0xe9, 0xa7, 0x4c, 0x6c, 0xe4, 0x52,
0x46, 0x1f, 0xf0, 0xb3, 0xc4, 0x48, 0xcc, 0xbc, 0x36, 0x76, 0x88, 0xac, 0x37, 0x4c, 0x0d, 0x64,
0xd2, 0xd9, 0xbd, 0xf2, 0xec, 0x1c, 0xd8, 0xbf, 0x3a, 0xc0, 0xd9, 0x40, 0x1b, 0x13, 0x32, 0x9e,
0x84, 0x86, 0x2e, 0x6d, 0x05, 0x29, 0x7e, 0xc4, 0x20, 0xd5, 0xe1, 0xed, 0xa7, 0xee, 0x3d, 0x67,
0x45, 0x8d, 0x83, 0xc1, 0x9f, 0xfa, 0xd9, 0x87, 0x14, 0x0f, 0x18, 0xc1, 0x16, 0x17, 0x57, 0x9c,
0x49, 0x9a, 0xd1, 0x12, 0x82, 0x70, 0x21, 0x37, 0xa2, 0x69, 0x9a, 0xed, 0xe4, 0xdc, 0xd1, 0x8e,
0x65, 0x7b, 0x69, 0x9f, 0x8d, 0x8e, 0x4f, 0xde, 0x0e, 0x47, 0xc7, 0xa3, 0x13, 0xf6, 0xa1, 0x30,
0xb8, 0x15, 0x4a, 0x24, 0xcf, 0x69, 0x5a, 0x6c, 0x68, 0xa7, 0x6e, 0xc7, 0xd1, 0x2d, 0x0e, 0x2a,
0xdc, 0x2b, 0x11, 0x76, 0x74, 0xaa, 0x99, 0xa6, 0x3f, 0x05, 0xc6, 0xbc, 0xd4, 0xf3, 0x68, 0x85,
0xeb, 0x24, 0x98, 0xe8, 0xf6, 0xe6, 0xc3, 0xe4, 0xb7, 0xe9, 0xe4, 0xfb, 0x14, 0x04, 0x77, 0x37,
0x33, 0x56, 0x36, 0x96, 0x7c, 0x80, 0x38, 0xc2, 0x3a, 0x47, 0xa7, 0x60, 0x30, 0x2a, 0x0c, 0xc3,
0x5a, 0x1c, 0x84, 0xc8, 0xaa, 0xb6, 0x42, 0x2f, 0x5b, 0x36, 0xb0, 0xb2, 0xe2, 0xd4, 0xb5, 0x7e,
0xf7, 0x65, 0x7e, 0x9d, 0xa5, 0x61, 0x4a, 0x57, 0x9a, 0x55, 0x87, 0x5a, 0x85, 0x56, 0xba, 0xe6,
0x7b, 0xe1, 0x27, 0x57, 0xac, 0xe0, 0xbb, 0x1d, 0xeb, 0xff, 0x5a, 0xb1, 0x22, 0x9a, 0x3a, 0x88,
0x9d, 0x67, 0x9d, 0x8e, 0xee, 0x9f, 0x71, 0x11, 0x6b, 0xdb, 0x17, 0xa7, 0x76, 0x55, 0x8a, 0xed,
0xa9, 0xff, 0xdc, 0xa0, 0xb8, 0xfd, 0x6b, 0xfc, 0x87, 0x56, 0x54, 0xda, 0x57, 0xe9, 0x53, 0xf9,
0x7f, 0xd7, 0x61, 0x61, 0x82, 0x3a, 0x0f, 0x00, 0x00
};

View File

@ -7,7 +7,7 @@
*/
// Autogenerated from wled00/data/simple.htm, do not edit!!
const uint16_t PAGE_simple_L = 17522;
const uint16_t PAGE_simple_L = 17543;
const uint8_t PAGE_simple[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xe5, 0xbd, 0x69, 0x77, 0xe2, 0xbc,
0xb2, 0x30, 0xfa, 0x3d, 0xbf, 0x82, 0x76, 0xef, 0x9d, 0xc6, 0x1b, 0x07, 0xcc, 0x18, 0x86, 0x26,
@ -967,142 +967,143 @@ const uint8_t PAGE_simple[] PROGMEM = {
0xf9, 0xfd, 0xdb, 0x6f, 0x82, 0x5f, 0x84, 0xa4, 0x0a, 0xc8, 0xbf, 0xb0, 0x8c, 0x09, 0x85, 0x2c,
0x44, 0xc3, 0xd0, 0x84, 0x3c, 0xc9, 0xf3, 0x9e, 0x7b, 0x89, 0x4a, 0x22, 0xf3, 0xd3, 0xc0, 0x10,
0x5b, 0x43, 0x57, 0xfd, 0xe7, 0x81, 0x21, 0x02, 0xb0, 0x8a, 0x7d, 0x6e, 0x04, 0x12, 0x95, 0x63,
0xfe, 0x59, 0x1a, 0x13, 0x80, 0xa6, 0xce, 0x04, 0x39, 0x33, 0x70, 0x30, 0xe8, 0x52, 0x38, 0xea,
0x1a, 0xa5, 0x5e, 0xda, 0x30, 0xa7, 0x49, 0x1e, 0x03, 0x1a, 0xf8, 0x30, 0x57, 0x70, 0x1c, 0x66,
0x0b, 0xe8, 0x48, 0xb6, 0x9a, 0x0a, 0x14, 0xcc, 0x1e, 0x60, 0x89, 0x40, 0xa7, 0xeb, 0x11, 0x76,
0xe8, 0xf9, 0xf7, 0xfd, 0x65, 0x98, 0x15, 0xff, 0xa5, 0xbb, 0x16, 0x58, 0x4d, 0xfa, 0x52, 0x77,
0xd0, 0x8f, 0x10, 0xae, 0x50, 0x97, 0xf8, 0x65, 0xd2, 0x95, 0xe6, 0x41, 0x70, 0x2e, 0xe1, 0x3d,
0xde, 0x88, 0x51, 0x12, 0xf4, 0x64, 0x1d, 0x48, 0x88, 0xa5, 0xed, 0xc7, 0xbb, 0x00, 0x92, 0xd7,
0x85, 0xbc, 0x98, 0xbe, 0x53, 0xda, 0x10, 0xf0, 0xe8, 0x1b, 0xc1, 0xcb, 0x3a, 0x30, 0x7a, 0x1e,
0x2f, 0x3d, 0xdb, 0x41, 0xef, 0x3e, 0xa0, 0x03, 0xcf, 0x54, 0x69, 0x4c, 0xe7, 0xa0, 0x48, 0xad,
0xe1, 0x75, 0xb8, 0x16, 0x32, 0xfb, 0xbb, 0xdb, 0xd6, 0x4e, 0x99, 0x5b, 0x0a, 0xf8, 0x2e, 0x94,
0xaa, 0xf3, 0x6f, 0x86, 0x11, 0x26, 0xff, 0x2f, 0xab, 0x1e, 0x7d, 0x1e, 0x2f, 0x30, 0xd8, 0x47,
0x1f, 0xad, 0xa2, 0x80, 0xfa, 0x04, 0xe4, 0x48, 0xa8, 0x0e, 0x82, 0x1b, 0xc4, 0x7e, 0x98, 0x0e,
0x4d, 0x89, 0xe8, 0x21, 0x6b, 0x75, 0x0f, 0xaf, 0x02, 0xcf, 0x87, 0xf4, 0x0e, 0xe2, 0xea, 0x1d,
0xee, 0x77, 0x95, 0x44, 0xe5, 0x3e, 0x5f, 0x0d, 0xaf, 0x68, 0xbc, 0x14, 0x02, 0x56, 0x9d, 0x3d,
0x02, 0x63, 0x82, 0xb0, 0xc3, 0x0a, 0xff, 0xa6, 0xbf, 0x3e, 0x6e, 0xc0, 0xbb, 0x6f, 0x5d, 0x89,
0x9c, 0xd8, 0x59, 0x98, 0x46, 0x95, 0xdd, 0xb3, 0x83, 0x9f, 0x61, 0x7d, 0x23, 0x7c, 0xbf, 0xd4,
0xc2, 0xbd, 0x78, 0x07, 0xcc, 0xcd, 0xf0, 0x0d, 0x42, 0x42, 0xd2, 0xbb, 0x9a, 0x87, 0x7d, 0xf3,
0xb1, 0x8b, 0x38, 0xdc, 0xe3, 0xaa, 0x18, 0x9b, 0xe5, 0xcd, 0x82, 0x7f, 0x75, 0x7a, 0x9d, 0x55,
0xd9, 0xe7, 0x42, 0x57, 0xa8, 0xe3, 0x3b, 0x86, 0x80, 0xde, 0x42, 0x29, 0xf8, 0x42, 0x2f, 0x9e,
0x8b, 0x77, 0xca, 0xdb, 0x7d, 0xf1, 0x66, 0x20, 0xdc, 0x55, 0xec, 0x93, 0x7b, 0x49, 0x90, 0xfb,
0xc0, 0xb3, 0x23, 0x5f, 0x5e, 0x9f, 0x59, 0x58, 0x1c, 0xdd, 0x91, 0x59, 0xd7, 0x29, 0x5a, 0xec,
0x6f, 0x7b, 0xc5, 0xf6, 0x58, 0x3d, 0xf6, 0xc8, 0x56, 0x79, 0x1d, 0xa3, 0xeb, 0x88, 0x67, 0x6a,
0xd5, 0xbd, 0x5d, 0x5b, 0xf7, 0x5d, 0x22, 0x31, 0x73, 0xcb, 0xed, 0xd6, 0x86, 0x5c, 0x64, 0x4d,
0xd4, 0xb6, 0xa9, 0xba, 0xd0, 0x84, 0xcd, 0x3b, 0xc0, 0x58, 0x16, 0xd7, 0x2c, 0x33, 0xe1, 0xdd,
0x83, 0x54, 0x91, 0xae, 0xe2, 0x1b, 0x5a, 0xbc, 0xa0, 0x58, 0xb7, 0x58, 0x3d, 0xb2, 0xa7, 0xdc,
0xec, 0x84, 0x01, 0xd6, 0x36, 0xe6, 0xc4, 0x9a, 0x62, 0x46, 0x3c, 0xbb, 0x67, 0xe6, 0xcf, 0x06,
0xb0, 0xe9, 0x62, 0x90, 0x78, 0x69, 0x6f, 0x47, 0x21, 0x8a, 0x4a, 0xa6, 0x7c, 0x45, 0x6a, 0xd6,
0x36, 0x65, 0xe0, 0xb9, 0xa8, 0x55, 0x90, 0x66, 0x1c, 0xa4, 0x77, 0x39, 0xf3, 0x5a, 0xb0, 0x1b,
0x32, 0xd1, 0x00, 0x8d, 0x80, 0x8e, 0x22, 0x3b, 0x14, 0x33, 0xe3, 0x39, 0x72, 0xc8, 0x52, 0xb1,
0x21, 0xeb, 0x17, 0x9f, 0x76, 0x83, 0x37, 0x6a, 0x41, 0x8e, 0x99, 0xfd, 0xb5, 0xa6, 0xeb, 0xab,
0xdb, 0xf1, 0x6e, 0xe9, 0xdc, 0xaf, 0xcf, 0x06, 0x1a, 0x3a, 0x8f, 0xc5, 0x02, 0x48, 0x48, 0x8c,
0x01, 0x80, 0x7e, 0x5c, 0xa5, 0x1b, 0x43, 0xa8, 0x1f, 0x54, 0x83, 0x3d, 0x7a, 0x82, 0x1a, 0x44,
0xd0, 0xc7, 0xe5, 0x32, 0x4a, 0x45, 0x91, 0xab, 0x59, 0xc3, 0x27, 0x38, 0xc2, 0x17, 0x69, 0xba,
0x9d, 0xab, 0xad, 0x78, 0x1e, 0x70, 0x79, 0x78, 0x69, 0x6b, 0x49, 0x23, 0x74, 0x37, 0xeb, 0x8a,
0xf3, 0x82, 0x61, 0x61, 0x0d, 0xa4, 0xed, 0xed, 0x75, 0x3d, 0xa0, 0xef, 0x87, 0x03, 0xd1, 0x6a,
0xde, 0x6b, 0x64, 0x9a, 0x5c, 0xc8, 0x64, 0x20, 0x4d, 0x34, 0xd3, 0xaa, 0x72, 0xf6, 0xd0, 0x34,
0x31, 0x96, 0x8d, 0x02, 0xaa, 0x7a, 0x57, 0x36, 0xc7, 0xc6, 0x19, 0xbe, 0xe6, 0x36, 0x3c, 0xcc,
0xd5, 0x0e, 0xfe, 0x1b, 0xa3, 0x5c, 0x83, 0xab, 0x3f, 0x1f, 0x66, 0xb4, 0x07, 0xff, 0xc1, 0x28,
0x83, 0x70, 0x9d, 0xcd, 0xb4, 0x01, 0x62, 0xe2, 0x8b, 0x17, 0x05, 0x44, 0x7e, 0x2e, 0x57, 0xab,
0x53, 0x06, 0xb8, 0xb1, 0x3a, 0x30, 0xb6, 0xaa, 0xaf, 0xe2, 0x84, 0x69, 0x8c, 0xc6, 0x81, 0xf8,
0x1e, 0xe7, 0x28, 0x54, 0xb6, 0x47, 0xea, 0xb3, 0xd5, 0xd8, 0x64, 0x08, 0xab, 0x4d, 0xf5, 0x66,
0xd5, 0xd0, 0xd1, 0xba, 0x38, 0x38, 0xef, 0xe2, 0xcf, 0x10, 0xbc, 0x08, 0x11, 0xaf, 0x01, 0x08,
0xf3, 0x53, 0x25, 0x71, 0x38, 0xf4, 0x45, 0x4a, 0xd1, 0x81, 0xae, 0x0c, 0x6f, 0xd5, 0xfa, 0xe6,
0xe3, 0x28, 0x63, 0x37, 0x6e, 0xaf, 0x41, 0x98, 0x3d, 0x5b, 0x0b, 0x2b, 0x62, 0x2c, 0xad, 0x0c,
0x2e, 0x74, 0xdf, 0xf4, 0xba, 0x39, 0x58, 0x0f, 0x72, 0xc5, 0xc2, 0x5a, 0x01, 0x8b, 0xb7, 0xf9,
0xc5, 0x67, 0x15, 0xaf, 0x79, 0x23, 0x71, 0xdc, 0xb2, 0xf8, 0x7a, 0x9f, 0xd5, 0x2d, 0xd0, 0xfa,
0x5f, 0xd6, 0x22, 0x07, 0xe1, 0x70, 0x07, 0x31, 0x0d, 0x0a, 0x2c, 0x2a, 0x2b, 0x21, 0x85, 0xc7,
0x7b, 0x23, 0xde, 0xc8, 0x3b, 0x7d, 0xe7, 0x1d, 0xcb, 0x73, 0x23, 0x17, 0x69, 0xd0, 0x62, 0x64,
0x6e, 0x9c, 0x48, 0xdb, 0xbe, 0xc5, 0x8a, 0x21, 0x43, 0x78, 0xa7, 0x1f, 0xa9, 0x05, 0xec, 0x76,
0xb3, 0x85, 0xbe, 0xb2, 0x57, 0x89, 0x5b, 0x94, 0x6b, 0xdc, 0xfb, 0xf4, 0xa5, 0xed, 0xa0, 0xcf,
0x3b, 0xcc, 0xd8, 0x8d, 0x7b, 0xdb, 0xdd, 0x6c, 0xf7, 0xa8, 0x36, 0xbb, 0x20, 0x0b, 0x31, 0xe1,
0x15, 0x5f, 0xab, 0x7b, 0x46, 0x8c, 0xe0, 0x0d, 0x46, 0xf5, 0x07, 0x1e, 0x55, 0x6a, 0xad, 0xa1,
0xa2, 0x39, 0x80, 0x51, 0x04, 0x51, 0x02, 0x4d, 0x77, 0x07, 0x8c, 0xbe, 0x03, 0xa7, 0x8e, 0x5b,
0x60, 0x40, 0xea, 0x8b, 0x41, 0x55, 0x14, 0x6c, 0xf8, 0x9b, 0xe0, 0xcb, 0x51, 0x41, 0x93, 0x8c,
0x9c, 0x2c, 0xf5, 0x83, 0xa3, 0xdd, 0x0d, 0xd1, 0x54, 0x51, 0xe4, 0x6b, 0xaa, 0x09, 0x56, 0xcf,
0x20, 0x5c, 0x2c, 0x5f, 0x8a, 0x95, 0xe3, 0x97, 0xd0, 0x57, 0x9d, 0x24, 0x69, 0xa2, 0x24, 0x63,
0x64, 0xf4, 0x80, 0xde, 0xc9, 0x36, 0xc0, 0x0d, 0x32, 0xbe, 0xc6, 0x3a, 0x07, 0x89, 0xcb, 0x38,
0x5e, 0x08, 0x3a, 0x19, 0xfc, 0x97, 0x60, 0xc4, 0x37, 0x28, 0xe8, 0xf0, 0x5c, 0x2e, 0x1b, 0xae,
0x09, 0x8a, 0x42, 0x2d, 0x84, 0xb2, 0x9b, 0x90, 0x4b, 0xcb, 0x0a, 0xe3, 0xf2, 0x38, 0x94, 0xd1,
0x8f, 0xb8, 0xc1, 0xc2, 0x4e, 0xb0, 0xa0, 0x55, 0xff, 0x2d, 0x24, 0x61, 0xce, 0x1e, 0x6b, 0x43,
0x70, 0xea, 0xeb, 0x5a, 0x10, 0xcc, 0xfa, 0x3a, 0xf8, 0xb5, 0xf8, 0x80, 0xdd, 0xad, 0x5e, 0x82,
0xbb, 0xbc, 0x0e, 0x7e, 0x98, 0x4b, 0xfe, 0xd7, 0x06, 0x24, 0xf8, 0x89, 0x11, 0x95, 0x21, 0x4e,
0xc3, 0x59, 0xaa, 0x5a, 0xba, 0x17, 0x07, 0xc0, 0x7f, 0x3c, 0x5e, 0xfd, 0xf6, 0x11, 0xb9, 0x6d,
0x6f, 0xc7, 0x3a, 0xd5, 0x64, 0x6f, 0x33, 0x49, 0x72, 0x03, 0x7b, 0x02, 0x12, 0x06, 0xfe, 0xe8,
0xe6, 0xf4, 0x87, 0x40, 0xe2, 0xf3, 0xd1, 0xa5, 0xb6, 0xa7, 0x90, 0xfb, 0x42, 0xf5, 0xdc, 0x30,
0xe9, 0xd6, 0xd7, 0xb1, 0x1a, 0x9f, 0xca, 0xfd, 0xc8, 0x81, 0x18, 0x3c, 0xb0, 0xd2, 0x19, 0xaf,
0x82, 0x94, 0xea, 0x8f, 0x1f, 0x26, 0x4c, 0xac, 0x09, 0x73, 0x68, 0xa6, 0x65, 0x21, 0x0c, 0xfc,
0xa7, 0xf0, 0x03, 0xff, 0x07, 0x09, 0x54, 0xcb, 0xd2, 0xa6, 0x63, 0x1a, 0xdc, 0x7a, 0xfd, 0x13,
0x4c, 0x3a, 0xb4, 0x83, 0xfb, 0xe9, 0xde, 0xac, 0x0e, 0x03, 0x05, 0x0c, 0x22, 0xb0, 0xfd, 0x68,
0x93, 0x00, 0xf7, 0xa3, 0x56, 0xa1, 0xc9, 0x6a, 0x8e, 0x55, 0xa4, 0xf6, 0x75, 0xac, 0xea, 0x47,
0xb5, 0x51, 0x5e, 0x46, 0x38, 0x98, 0x1d, 0x93, 0x28, 0xee, 0x6b, 0x53, 0xd6, 0xca, 0x4f, 0x45,
0x71, 0xe2, 0x52, 0x0d, 0x11, 0x38, 0x50, 0xc2, 0x8b, 0x1f, 0xbd, 0xcd, 0xc7, 0x27, 0xb8, 0xb9,
0xc0, 0xf6, 0x08, 0xf0, 0x77, 0xd2, 0xbf, 0xea, 0xc4, 0xbd, 0x30, 0x12, 0x2f, 0xb7, 0x0c, 0x2e,
0xcd, 0xcd, 0x60, 0x00, 0x64, 0x66, 0xaa, 0xe1, 0x89, 0x83, 0xa5, 0x2b, 0x41, 0x2c, 0x98, 0xa2,
0xc8, 0x79, 0x7f, 0xcf, 0xc2, 0x4a, 0x26, 0x07, 0x4a, 0xaa, 0x9e, 0x2d, 0xf3, 0x7b, 0x79, 0x7a,
0x7c, 0x1b, 0x5b, 0xe7, 0x85, 0x81, 0xb2, 0x97, 0xf3, 0x7e, 0xe6, 0xc5, 0x12, 0x20, 0xb6, 0x50,
0xa8, 0xd7, 0x07, 0x0a, 0x4d, 0x49, 0xd5, 0xf3, 0x98, 0x22, 0x96, 0x43, 0x29, 0x00, 0x80, 0xad,
0x4a, 0x76, 0xbb, 0xaf, 0x37, 0x4b, 0x94, 0x08, 0xea, 0xbf, 0x06, 0x36, 0x5e, 0xee, 0x33, 0x50,
0x96, 0x78, 0x53, 0x92, 0xf8, 0x4f, 0x21, 0x51, 0x04, 0x33, 0xeb, 0x17, 0xde, 0x2c, 0x50, 0xc9,
0x8a, 0x8c, 0x6c, 0x14, 0xa3, 0x67, 0x45, 0xdc, 0x53, 0xc1, 0x9d, 0xc3, 0xd4, 0x1d, 0x8e, 0xf9,
0x91, 0xc5, 0xec, 0x5f, 0x53, 0xec, 0x9f, 0x82, 0x26, 0x91, 0x46, 0xb9, 0xaf, 0xf8, 0x72, 0x31,
0x81, 0x84, 0x76, 0xf4, 0x38, 0xfa, 0xe2, 0x4b, 0x6b, 0x98, 0x60, 0x77, 0x18, 0x73, 0xd4, 0x21,
0x9c, 0x64, 0x2d, 0xc3, 0x6a, 0xdd, 0xf0, 0xae, 0x4d, 0xda, 0x10, 0xb7, 0xfe, 0xac, 0x2a, 0xbd,
0x53, 0x23, 0xe4, 0x3c, 0x8b, 0x84, 0xed, 0xb0, 0x6e, 0xb9, 0x32, 0xeb, 0x83, 0xa3, 0xc4, 0x92,
0x3e, 0x63, 0x6e, 0x25, 0x87, 0x77, 0xac, 0x39, 0x82, 0x49, 0x46, 0x36, 0x75, 0x1c, 0xb6, 0x1b,
0x3c, 0xc1, 0x1d, 0x4c, 0x7f, 0x7b, 0x09, 0x4f, 0x72, 0x78, 0xc7, 0x96, 0x43, 0x8d, 0xd6, 0xf1,
0xac, 0x37, 0x1d, 0x16, 0x3b, 0xc4, 0xc3, 0x2f, 0x99, 0x83, 0x01, 0x08, 0x70, 0x19, 0x29, 0xb7,
0x58, 0xe2, 0x59, 0x8d, 0xc8, 0x38, 0xc4, 0xc8, 0x0d, 0x24, 0x9b, 0xef, 0xf8, 0xa3, 0x1d, 0x8e,
0x1f, 0x22, 0x5f, 0x8c, 0xaa, 0x91, 0x9b, 0x6c, 0xa1, 0x7f, 0xd5, 0x70, 0x67, 0xf1, 0x16, 0x93,
0xcf, 0x4e, 0x01, 0xc7, 0x3b, 0x44, 0x77, 0xf8, 0xfe, 0xf8, 0x14, 0xf0, 0x6c, 0x7f, 0x84, 0xfb,
0x63, 0xa0, 0x58, 0x44, 0xe3, 0x31, 0xff, 0x03, 0xf7, 0xd7, 0xbf, 0xe1, 0xf7, 0x32, 0xeb, 0x7b,
0x8b, 0x08, 0xa2, 0x57, 0x4f, 0xef, 0x87, 0xd1, 0x64, 0xa6, 0x47, 0x00, 0xe3, 0xbb, 0x99, 0x1e,
0xee, 0x6f, 0xb8, 0x98, 0x63, 0x05, 0x29, 0xa9, 0x2c, 0xde, 0x66, 0xca, 0x0b, 0x20, 0x8e, 0xab,
0x4e, 0xf2, 0x3f, 0x8f, 0xf9, 0x74, 0x5f, 0x46, 0x80, 0xe2, 0x30, 0x38, 0x25, 0x9f, 0x36, 0xc8,
0xcc, 0x8b, 0xf5, 0xe8, 0x6a, 0xb2, 0x8e, 0xf7, 0x59, 0xc7, 0xac, 0x18, 0x8c, 0x57, 0x77, 0x43,
0x4a, 0xe2, 0x76, 0xac, 0x1f, 0x4e, 0x8d, 0x2b, 0xd5, 0xe1, 0xd7, 0x6e, 0x07, 0x07, 0x71, 0x77,
0x1a, 0x46, 0x21, 0x04, 0xf7, 0xea, 0x68, 0xc1, 0x01, 0x11, 0xf3, 0x87, 0x86, 0xf7, 0x08, 0xd9,
0x6b, 0xa3, 0xec, 0x68, 0x1c, 0x91, 0xbb, 0x61, 0x7f, 0x0b, 0xbd, 0x4d, 0x3b, 0xe6, 0x1d, 0xbe,
0xe3, 0xb8, 0x29, 0xe1, 0x1d, 0x23, 0x35, 0x3b, 0xd6, 0x5f, 0xc3, 0x0f, 0xff, 0x74, 0x3b, 0x1d,
0x2d, 0xcf, 0xef, 0xed, 0x64, 0xa9, 0xd3, 0x83, 0x6d, 0x35, 0x2f, 0xa3, 0xf7, 0x88, 0x18, 0xcc,
0x63, 0xbc, 0xce, 0x8e, 0xab, 0x79, 0xe1, 0x48, 0x18, 0xf5, 0xa7, 0x99, 0x63, 0x3b, 0x8a, 0xb5,
0x9a, 0xe3, 0xaa, 0x27, 0x78, 0x26, 0x37, 0x4d, 0xdf, 0xff, 0x90, 0xc4, 0x8b, 0xd1, 0x10, 0x08,
0x4e, 0x1b, 0xbd, 0x7c, 0x26, 0x89, 0x2e, 0x4f, 0xf6, 0xc4, 0x2e, 0x04, 0xe2, 0xc2, 0x13, 0x34,
0x66, 0xaf, 0x8d, 0x60, 0xf7, 0xee, 0xda, 0x5e, 0xa0, 0x47, 0xd8, 0x0e, 0x91, 0xf5, 0xb1, 0x95,
0x5c, 0xbb, 0x01, 0xb3, 0x9a, 0x13, 0x36, 0x0d, 0x58, 0xee, 0x92, 0xc5, 0xf2, 0xfd, 0x77, 0x73,
0xcd, 0xfd, 0xa4, 0xc1, 0x8b, 0x59, 0x79, 0xe1, 0xb2, 0x9e, 0xa5, 0x91, 0x7e, 0x53, 0x41, 0xa3,
0x7d, 0xa9, 0x8b, 0xc2, 0x4c, 0x64, 0xde, 0x5b, 0x66, 0xa4, 0x76, 0xe9, 0x0d, 0xda, 0xe8, 0x53,
0x88, 0x70, 0xf2, 0xb1, 0xc1, 0x1c, 0xd9, 0xfe, 0x66, 0x7d, 0x9a, 0x9d, 0xdc, 0x50, 0xe9, 0x25,
0xd9, 0xc4, 0xde, 0x8f, 0x27, 0xfc, 0x10, 0x7f, 0x56, 0x43, 0xc1, 0xfa, 0x03, 0xc9, 0x6e, 0x5b,
0x26, 0x8d, 0xbc, 0x42, 0x28, 0xd1, 0xc0, 0x14, 0xb2, 0xb2, 0x73, 0xc8, 0x02, 0x09, 0x82, 0x73,
0x78, 0x50, 0x17, 0xd0, 0xe9, 0x6e, 0xa6, 0x8a, 0x4b, 0x6f, 0x57, 0x35, 0xcc, 0xd0, 0x95, 0xd7,
0x64, 0x28, 0xae, 0xcc, 0x0d, 0x81, 0xf2, 0xed, 0x01, 0x7a, 0xc8, 0x31, 0x12, 0x17, 0xe5, 0xdd,
0x34, 0xec, 0x17, 0x81, 0x59, 0x76, 0x31, 0x65, 0x27, 0xfd, 0x23, 0x2a, 0xfc, 0xef, 0xdf, 0xe1,
0xae, 0x3b, 0xb1, 0xdf, 0x26, 0x5e, 0xc3, 0x06, 0x08, 0xf4, 0xd0, 0x03, 0xd0, 0x30, 0x44, 0xec,
0xd1, 0x47, 0xa6, 0x1b, 0xbf, 0x14, 0x7a, 0x07, 0x2e, 0xff, 0x83, 0x61, 0xfe, 0xa7, 0xeb, 0x15,
0xb8, 0x35, 0x47, 0xc2, 0x7f, 0x37, 0xd7, 0x05, 0x5d, 0xb9, 0xae, 0x81, 0x2f, 0x49, 0x6f, 0x3e,
0x44, 0x3e, 0x4c, 0x52, 0xd4, 0x02, 0x62, 0x46, 0x05, 0x2b, 0xe0, 0x8d, 0x7e, 0xa5, 0x33, 0x66,
0xdd, 0xd9, 0x99, 0x89, 0xde, 0xb5, 0x35, 0x94, 0x87, 0x99, 0x78, 0x4d, 0x4d, 0x2a, 0x69, 0xff,
0xcb, 0xcc, 0x4c, 0x83, 0x73, 0x78, 0x39, 0xbe, 0x26, 0x7e, 0xc1, 0x5b, 0xb8, 0x92, 0xac, 0x8f,
0x7b, 0x22, 0x70, 0xcb, 0xef, 0x22, 0xef, 0x27, 0x60, 0x38, 0x84, 0xbd, 0x87, 0x09, 0xc6, 0x5e,
0x3a, 0x9b, 0xdb, 0xde, 0xfe, 0xa3, 0xf1, 0xd5, 0xeb, 0x2e, 0x3a, 0x00, 0x0e, 0x0c, 0x75, 0xf5,
0x6e, 0x67, 0x6e, 0x67, 0x47, 0xe3, 0x5c, 0x8a, 0xdc, 0xa9, 0xdb, 0xd8, 0xb7, 0xec, 0x8e, 0xe1,
0x05, 0xd4, 0x48, 0xb8, 0x08, 0x5f, 0x6d, 0xb7, 0x0b, 0x20, 0x83, 0x36, 0xc1, 0xe8, 0xe1, 0xe1,
0xc0, 0x3f, 0x45, 0x66, 0x16, 0x00, 0xb9, 0xa4, 0x1f, 0x62, 0x14, 0xcc, 0x23, 0xbb, 0x98, 0x7a,
0xb7, 0xf4, 0x51, 0xce, 0xf4, 0x80, 0xb7, 0x72, 0xd7, 0x42, 0x7a, 0x0b, 0xbe, 0x66, 0xdd, 0x43,
0xef, 0x09, 0xc1, 0x58, 0xcf, 0x9a, 0x7f, 0xef, 0x2e, 0x1e, 0xbf, 0x4c, 0x71, 0xd1, 0xbb, 0x78,
0x47, 0x90, 0xb6, 0x93, 0xfc, 0x33, 0x67, 0xf3, 0xbe, 0x58, 0x8d, 0x65, 0xb3, 0x76, 0x00, 0x8f,
0x7c, 0x0c, 0x2e, 0xbd, 0x93, 0x12, 0x2f, 0xff, 0x0d, 0x53, 0x85, 0x7f, 0x13, 0x1f, 0x11, 0xd2,
0xe9, 0xb4, 0xc3, 0x34, 0x2f, 0xcf, 0x96, 0xf6, 0xd4, 0x0d, 0xe2, 0x5e, 0x77, 0x8f, 0x01, 0x1d,
0x5e, 0x7c, 0x3a, 0x94, 0xf3, 0x2e, 0xb0, 0xde, 0xde, 0x66, 0x4f, 0x26, 0x1f, 0x9c, 0xba, 0x4d,
0xe0, 0xd1, 0x8c, 0x84, 0xc9, 0xbb, 0x39, 0xb0, 0x42, 0xf9, 0x7d, 0xba, 0x50, 0x7f, 0xff, 0x8e,
0x8a, 0x47, 0x10, 0xdd, 0x90, 0x8a, 0x17, 0x8f, 0xf3, 0x42, 0xa8, 0x37, 0x90, 0x26, 0xd0, 0x5a,
0x7c, 0x75, 0x6d, 0x79, 0xcc, 0x5b, 0xfa, 0x7a, 0xe0, 0xca, 0x30, 0x96, 0xee, 0xa5, 0x63, 0xee,
0xbc, 0xac, 0x5e, 0xf9, 0x05, 0x2a, 0x1e, 0x94, 0x60, 0x3e, 0x75, 0x7a, 0x4b, 0x19, 0xd0, 0xc1,
0x6a, 0xa9, 0xa1, 0x89, 0x07, 0x0d, 0xd1, 0x2b, 0x47, 0xb9, 0xdc, 0xe6, 0x82, 0xe1, 0xfb, 0xc6,
0x3e, 0x2e, 0x49, 0x41, 0x82, 0xc4, 0xe7, 0x04, 0x5c, 0x91, 0x9f, 0x94, 0x1b, 0x8f, 0x3e, 0x2b,
0x16, 0x5c, 0x5d, 0xe6, 0x95, 0xdb, 0xfa, 0x9e, 0x71, 0x5f, 0xce, 0x90, 0xf8, 0x9e, 0xc1, 0xcd,
0x3c, 0xfc, 0x1e, 0x38, 0x43, 0x7d, 0x2f, 0xf1, 0xff, 0x02, 0xbd, 0x7f, 0x71, 0xf0, 0x34, 0xc0,
0x00, 0x00
0xfe, 0x59, 0x1a, 0x13, 0xc0, 0x2f, 0xbe, 0x40, 0x4d, 0xe4, 0x65, 0xd0, 0x47, 0x30, 0x8c, 0xea,
0xcc, 0xfb, 0x8a, 0x9b, 0xd5, 0xe1, 0x08, 0x6c, 0x94, 0x80, 0x69, 0xc3, 0x9c, 0x26, 0x79, 0x0c,
0x6e, 0xe0, 0xc3, 0x1c, 0xc2, 0x71, 0x98, 0x5d, 0xa0, 0x23, 0x09, 0x6b, 0x2a, 0x50, 0x33, 0x7b,
0x80, 0xe5, 0x02, 0x03, 0xa8, 0x47, 0x58, 0xa3, 0xe7, 0xeb, 0xf7, 0x97, 0x64, 0x56, 0xfc, 0x97,
0xee, 0x5a, 0x63, 0x35, 0xe9, 0x4b, 0xdd, 0x41, 0x9f, 0x42, 0xb8, 0x42, 0x5d, 0xe2, 0x97, 0x49,
0x57, 0xb2, 0x07, 0x81, 0xba, 0x84, 0xf7, 0xf8, 0x24, 0x46, 0x4c, 0xd0, 0x53, 0x76, 0x20, 0x2d,
0x96, 0xb6, 0x1f, 0xfb, 0x02, 0x08, 0x8f, 0x86, 0xbf, 0x60, 0xb8, 0x2b, 0x0e, 0x32, 0x12, 0x2e,
0x12, 0x9a, 0x78, 0x21, 0x87, 0xbe, 0x0b, 0xe6, 0xeb, 0x36, 0x7d, 0x37, 0xb6, 0x21, 0xe0, 0x61,
0x39, 0x82, 0xd7, 0x7b, 0x60, 0xbc, 0x3d, 0x5e, 0x93, 0xb6, 0x83, 0xfb, 0x01, 0x80, 0x40, 0x3c,
0x85, 0xa5, 0x31, 0x2d, 0x85, 0x4e, 0x43, 0x0d, 0x2f, 0xd0, 0xb5, 0x50, 0x3c, 0xdc, 0xdd, 0xb6,
0x76, 0xca, 0xdc, 0x52, 0xc0, 0xb7, 0xa7, 0x54, 0x9d, 0x7f, 0x33, 0xf0, 0x30, 0xf9, 0x7f, 0x59,
0x59, 0xe9, 0xf3, 0x78, 0xe5, 0xc1, 0x3e, 0x7a, 0x75, 0x15, 0x05, 0x14, 0x2e, 0x4a, 0x1c, 0x1a,
0x55, 0x44, 0x02, 0xa5, 0x85, 0xa5, 0x44, 0x34, 0x97, 0xb5, 0xda, 0x8a, 0x57, 0x81, 0xe7, 0x43,
0x9a, 0x0a, 0x71, 0x35, 0x15, 0xf7, 0xbb, 0x4a, 0xa2, 0x9a, 0x02, 0x5f, 0x0d, 0xf3, 0x00, 0xbc,
0x46, 0x02, 0xd6, 0xa9, 0x3d, 0x02, 0xf3, 0x83, 0xb0, 0xe3, 0x0d, 0xff, 0x9e, 0x87, 0x7f, 0xd5,
0xe6, 0x77, 0x5f, 0xd4, 0x12, 0x39, 0xe4, 0xb3, 0x30, 0x8d, 0x2a, 0xbb, 0x9a, 0x07, 0x3f, 0xc3,
0x2a, 0x4a, 0xf8, 0x4a, 0xaa, 0x85, 0x7b, 0x57, 0x0f, 0x58, 0xa8, 0xe1, 0x4b, 0x87, 0x84, 0xa4,
0x77, 0x9b, 0x0f, 0xfb, 0xe6, 0x63, 0x77, 0x77, 0xb8, 0x27, 0x5c, 0x31, 0x9c, 0xcb, 0x9b, 0x06,
0xff, 0xb6, 0xf5, 0x3a, 0xab, 0xb2, 0xcf, 0x85, 0x6e, 0x5d, 0xc7, 0xd7, 0x12, 0x01, 0xc1, 0x85,
0x52, 0xf0, 0x1d, 0x60, 0x3c, 0x17, 0xef, 0x94, 0xb7, 0x61, 0xe3, 0x4d, 0x41, 0xb8, 0xab, 0xd8,
0x27, 0xf7, 0x5e, 0x21, 0xf7, 0x81, 0x67, 0xa7, 0xc4, 0xbc, 0x3e, 0xb3, 0x48, 0x3a, 0xba, 0x89,
0xb3, 0xae, 0x53, 0xb4, 0xd8, 0xdf, 0xf6, 0x8a, 0x6d, 0xcb, 0x7a, 0x1c, 0x95, 0x31, 0x83, 0x3a,
0x06, 0xe4, 0x11, 0xcf, 0x3a, 0xab, 0x7b, 0x1b, 0xbd, 0xee, 0xeb, 0x47, 0x62, 0x16, 0x9a, 0xdb,
0xad, 0x0d, 0xb9, 0xc8, 0xcd, 0xa8, 0x39, 0x54, 0x75, 0xa1, 0x09, 0x9b, 0x37, 0x8d, 0xb1, 0x2c,
0x2e, 0x5a, 0x66, 0xf5, 0xbb, 0x67, 0xaf, 0x22, 0x5d, 0xc5, 0x97, 0xba, 0x78, 0x71, 0xb4, 0x6e,
0xb1, 0x7a, 0x64, 0x1b, 0xba, 0xd9, 0x09, 0x03, 0xac, 0x6d, 0xcc, 0x89, 0x35, 0xc5, 0xec, 0x7e,
0x76, 0x35, 0xcd, 0x9f, 0x0d, 0x60, 0xd3, 0x5d, 0x22, 0xf1, 0xd2, 0xde, 0x26, 0x44, 0x14, 0x95,
0x4c, 0x5f, 0x8b, 0xd4, 0xac, 0x6d, 0xca, 0xc0, 0xa3, 0x54, 0xab, 0x20, 0xcd, 0x38, 0x48, 0xef,
0x3e, 0xe7, 0xb5, 0x60, 0x37, 0x64, 0xa2, 0xcd, 0x1a, 0x01, 0x1d, 0x45, 0x76, 0x28, 0xcc, 0xc6,
0xf3, 0xfd, 0x90, 0xa5, 0x62, 0x43, 0xd6, 0x2f, 0x3e, 0xed, 0xc6, 0x7b, 0xd4, 0x82, 0x1c, 0x33,
0xfb, 0x6b, 0x4d, 0xd7, 0x57, 0x77, 0xf0, 0xdd, 0xd2, 0xb9, 0x5f, 0x9f, 0x0d, 0x34, 0x74, 0x84,
0x8b, 0xc5, 0x9c, 0x90, 0x18, 0x03, 0x00, 0x95, 0xba, 0x4a, 0xf7, 0x92, 0x50, 0xa5, 0xa8, 0x06,
0xdb, 0xfa, 0x04, 0x95, 0x8e, 0xa0, 0x8f, 0xcb, 0x65, 0x94, 0x8a, 0x22, 0xb7, 0xb9, 0x86, 0x0f,
0x7d, 0x84, 0xef, 0xde, 0x74, 0x3b, 0x57, 0x5b, 0x71, 0x56, 0xe0, 0xf2, 0xf0, 0xd2, 0xd6, 0x92,
0x46, 0xe8, 0x3a, 0xd7, 0x15, 0x7f, 0x07, 0xc3, 0xc2, 0x1a, 0x48, 0xdb, 0xdb, 0xeb, 0x7a, 0x40,
0x5f, 0x29, 0x07, 0x12, 0xd8, 0xbc, 0xd7, 0xc8, 0x34, 0xb9, 0x90, 0xc9, 0x40, 0x9a, 0x68, 0xa6,
0x55, 0xe5, 0xec, 0xa1, 0x69, 0x62, 0xf8, 0x1b, 0x05, 0x54, 0xf5, 0x6e, 0x79, 0x8e, 0x8d, 0x33,
0x7c, 0x33, 0x6e, 0x78, 0x98, 0xab, 0x1d, 0xfc, 0x37, 0x46, 0xb9, 0x06, 0x57, 0x7f, 0x3e, 0xcc,
0x68, 0x0f, 0xfe, 0x83, 0x51, 0x06, 0x11, 0x3e, 0x9b, 0x69, 0x03, 0xc4, 0xc4, 0x17, 0x2f, 0x70,
0x88, 0xfc, 0x5c, 0xae, 0x56, 0xa7, 0x0c, 0x70, 0x63, 0x75, 0x60, 0x6c, 0x55, 0x5f, 0x13, 0x0a,
0xd3, 0x18, 0x0d, 0x1d, 0xf1, 0x9d, 0xd4, 0x51, 0xa8, 0x6c, 0x5b, 0xd5, 0x67, 0xab, 0xb1, 0xc9,
0x10, 0x56, 0x9b, 0xea, 0xcd, 0xaa, 0xa1, 0xd3, 0x78, 0x71, 0x70, 0xde, 0x5d, 0xa1, 0x21, 0x78,
0x11, 0x22, 0x5e, 0x03, 0x10, 0xe6, 0xa7, 0x4a, 0xe2, 0x70, 0xe8, 0xbb, 0x97, 0xa2, 0x03, 0x5d,
0x19, 0xde, 0xaa, 0xc1, 0xce, 0xc7, 0x51, 0xc6, 0x2e, 0xe9, 0x5e, 0x83, 0x30, 0x7b, 0xb6, 0x16,
0x56, 0xc4, 0xbe, 0x5a, 0x19, 0x5c, 0xe8, 0x8a, 0xea, 0x75, 0x73, 0xb0, 0x1e, 0xe4, 0x8a, 0x51,
0xb6, 0x02, 0x16, 0x2f, 0x00, 0x8c, 0xcf, 0x2a, 0xde, 0x0c, 0x47, 0xe2, 0xb8, 0x65, 0x21, 0xf9,
0x3e, 0xab, 0x5b, 0xa0, 0xc3, 0x60, 0x59, 0x8b, 0x9c, 0x9d, 0xc3, 0x4d, 0xc7, 0x34, 0xe8, 0xb9,
0xa8, 0xad, 0x84, 0x34, 0x1e, 0xef, 0x25, 0x7a, 0x23, 0xef, 0xc0, 0x9e, 0x77, 0x92, 0xcf, 0x0d,
0x76, 0xa4, 0x71, 0x8e, 0x91, 0xb9, 0x71, 0x22, 0x6d, 0xfb, 0x46, 0x2e, 0x46, 0x19, 0xe1, 0x35,
0x80, 0xa4, 0x16, 0xb0, 0xdb, 0xcd, 0x46, 0xfd, 0xca, 0xf6, 0x26, 0xee, 0x6a, 0xae, 0xd9, 0x11,
0xa0, 0xef, 0x79, 0x07, 0xb5, 0xdf, 0x61, 0xf6, 0x71, 0xdc, 0x41, 0xef, 0x66, 0xbb, 0xa7, 0xbb,
0xd9, 0x9d, 0x5a, 0x88, 0x09, 0xaf, 0xf8, 0x5a, 0xe5, 0x33, 0x62, 0x37, 0x6f, 0xb0, 0xc3, 0x3f,
0x70, 0xc2, 0x52, 0x03, 0x0f, 0x35, 0xcd, 0x01, 0x8c, 0x22, 0x08, 0x2c, 0x68, 0xba, 0x9b, 0x66,
0xf4, 0xb5, 0x39, 0x75, 0xdc, 0x35, 0x03, 0x52, 0x5f, 0x0c, 0xaa, 0xa2, 0x60, 0xc3, 0xdf, 0x04,
0xdf, 0xa7, 0x0a, 0xaa, 0x64, 0xe4, 0x30, 0xaa, 0x1f, 0x4f, 0xed, 0xee, 0xa1, 0xa6, 0x8a, 0x22,
0x5f, 0x53, 0xcd, 0x05, 0x49, 0x0f, 0xc2, 0xc5, 0xf2, 0xa5, 0x58, 0x39, 0x7e, 0x09, 0x7d, 0xd5,
0x49, 0x92, 0x26, 0x4a, 0x32, 0x06, 0x53, 0x0f, 0xe8, 0x35, 0x6e, 0x03, 0xdc, 0x53, 0xe3, 0x6b,
0xac, 0x73, 0x90, 0xb8, 0x8c, 0xe3, 0x85, 0xa0, 0x5f, 0xc2, 0x7f, 0x6f, 0x46, 0x7c, 0x4f, 0x83,
0x0e, 0xcf, 0xe5, 0xb2, 0xe1, 0x9a, 0xa0, 0x28, 0xd4, 0x42, 0x28, 0xbb, 0x09, 0x79, 0xc1, 0xac,
0x30, 0x2e, 0x8f, 0x43, 0x19, 0xfd, 0x88, 0xe7, 0x2c, 0xec, 0x37, 0x0b, 0x5a, 0xf5, 0x5f, 0x5c,
0x12, 0xe6, 0xec, 0xb1, 0x36, 0x04, 0xa7, 0xbe, 0xae, 0x05, 0xc1, 0xac, 0xaf, 0x83, 0x5f, 0x8b,
0x0f, 0xd8, 0xdd, 0x1d, 0x26, 0xb8, 0x31, 0xec, 0xe0, 0x87, 0xb9, 0xe4, 0x7f, 0x6d, 0x40, 0x82,
0x9f, 0x18, 0x51, 0x19, 0xe2, 0x34, 0x9c, 0xa5, 0xaa, 0xa5, 0x7b, 0xd7, 0x00, 0xfc, 0xc7, 0xe3,
0x6d, 0x71, 0x1f, 0x91, 0xdb, 0xf6, 0x76, 0xac, 0x53, 0x4d, 0xf6, 0x02, 0x94, 0x24, 0x37, 0xb0,
0x27, 0x20, 0x61, 0xe0, 0x8f, 0xee, 0x67, 0x7f, 0x08, 0x24, 0x3e, 0x1f, 0x5d, 0x6a, 0xa2, 0x0a,
0xb9, 0x2f, 0x54, 0xcf, 0x0d, 0x93, 0x6e, 0x7d, 0x1d, 0xab, 0xf1, 0xa9, 0xdc, 0x0f, 0x36, 0x88,
0xc1, 0x03, 0xc3, 0x9e, 0xf1, 0x2a, 0x48, 0xa9, 0xfe, 0xf8, 0x61, 0xc2, 0xc4, 0x9a, 0x30, 0x87,
0x66, 0x5a, 0x16, 0xc2, 0xc0, 0x7f, 0x0a, 0x3f, 0xf0, 0x7f, 0x90, 0x40, 0xb5, 0x2c, 0x6d, 0x3a,
0xa6, 0xc1, 0xad, 0xd7, 0x3f, 0xc1, 0xa6, 0x43, 0x73, 0xb9, 0x9f, 0xee, 0xcd, 0xea, 0x30, 0x50,
0xc0, 0x20, 0x02, 0xdb, 0x8f, 0x36, 0x09, 0x70, 0x3f, 0x6a, 0x15, 0x9a, 0xac, 0xe6, 0x58, 0x45,
0x6a, 0x86, 0xc7, 0xaa, 0x7e, 0x54, 0x1b, 0xe5, 0x65, 0x84, 0x83, 0xd9, 0x31, 0x89, 0xe2, 0xbe,
0x69, 0x65, 0xad, 0xfc, 0x54, 0x14, 0x27, 0x2e, 0xd5, 0x10, 0x81, 0x03, 0x25, 0xbc, 0xf8, 0xd1,
0x41, 0x7d, 0x7c, 0x82, 0xfb, 0x11, 0x6c, 0x5b, 0x01, 0x7f, 0x27, 0xfd, 0xdb, 0x51, 0xdc, 0x3b,
0x26, 0xf1, 0x3e, 0xcc, 0xe0, 0x9e, 0xdd, 0x0c, 0xc6, 0x4c, 0x66, 0xa6, 0x1a, 0x1e, 0x52, 0x58,
0xba, 0x12, 0xc4, 0x82, 0x29, 0x8a, 0x5c, 0x11, 0xe0, 0x59, 0x58, 0xc9, 0xe4, 0x40, 0x49, 0xd5,
0xb3, 0x65, 0x7e, 0x2f, 0x4f, 0x4f, 0x7c, 0x63, 0xeb, 0xbc, 0x30, 0x50, 0xf6, 0x72, 0xde, 0xcf,
0xbc, 0x58, 0x02, 0xc4, 0x16, 0x0a, 0xf5, 0xfa, 0x40, 0xa1, 0x29, 0xa9, 0x7a, 0x1e, 0x53, 0xc4,
0x72, 0x28, 0x05, 0x00, 0xb0, 0x55, 0xc9, 0x2e, 0x04, 0xf6, 0x66, 0x89, 0x12, 0x41, 0xfd, 0xd7,
0xc0, 0xc6, 0xfb, 0x80, 0x06, 0xca, 0x12, 0x2f, 0x57, 0x12, 0xff, 0x29, 0x24, 0x8a, 0x60, 0x66,
0xfd, 0xc2, 0xcb, 0x08, 0x2a, 0x59, 0x91, 0x91, 0x8d, 0x62, 0xf4, 0xac, 0x88, 0x47, 0x2b, 0xb8,
0xa6, 0x98, 0x7a, 0xd0, 0x31, 0x3f, 0xb2, 0x98, 0xfd, 0x9b, 0x8d, 0xfd, 0x83, 0xd3, 0x24, 0xd2,
0x28, 0xf7, 0x15, 0xdf, 0x47, 0x26, 0x90, 0xd0, 0x26, 0x20, 0x47, 0xdf, 0x95, 0x69, 0x0d, 0x13,
0xec, 0xda, 0x63, 0x8e, 0xfa, 0x90, 0x93, 0xac, 0x65, 0x58, 0xad, 0x1b, 0x5e, 0xcf, 0x49, 0x1b,
0xe2, 0xd6, 0x1f, 0x6f, 0xa5, 0xd7, 0x70, 0x84, 0xfc, 0x6d, 0x91, 0x48, 0x1f, 0xd6, 0x2d, 0x57,
0x66, 0x7d, 0x70, 0xfa, 0x58, 0xd2, 0x67, 0xcc, 0xfb, 0xe4, 0xf0, 0x8e, 0x35, 0x47, 0x30, 0xc9,
0xc8, 0x3e, 0x90, 0xc3, 0x36, 0x90, 0x27, 0xb8, 0xe9, 0xe9, 0xef, 0x48, 0xe1, 0xe1, 0x0f, 0xef,
0xa4, 0x73, 0xa8, 0xd1, 0x3a, 0x1e, 0x0f, 0xa7, 0xc3, 0x62, 0xe7, 0x7e, 0xf8, 0x25, 0xf3, 0x30,
0x00, 0x01, 0x2e, 0x23, 0xe5, 0x16, 0x4b, 0x3c, 0xde, 0x11, 0x19, 0x87, 0x18, 0xb9, 0xb4, 0x64,
0xf3, 0xb5, 0x80, 0xb4, 0xc3, 0xf1, 0x73, 0xe7, 0x8b, 0x51, 0x35, 0x72, 0xf9, 0x2d, 0xf4, 0xaf,
0x1a, 0xee, 0x2c, 0x5e, 0x7c, 0xf2, 0xd9, 0xc1, 0xe1, 0x78, 0x87, 0xe8, 0xa6, 0xe0, 0x1f, 0x1f,
0x1c, 0x9e, 0xed, 0x8f, 0x70, 0x4b, 0x0d, 0x14, 0x8b, 0x68, 0x08, 0xe7, 0x7f, 0xe0, 0xff, 0xfa,
0x37, 0x1c, 0x5f, 0x66, 0x7d, 0x6f, 0x11, 0x41, 0xf4, 0xea, 0x81, 0xff, 0x30, 0x9a, 0xcc, 0xf4,
0x08, 0x60, 0x7c, 0x37, 0xd3, 0xc3, 0xfd, 0x0d, 0x77, 0x79, 0xac, 0x20, 0x25, 0x95, 0xc5, 0x0b,
0x50, 0x79, 0x01, 0xc4, 0x71, 0xd5, 0x49, 0xfe, 0xe7, 0x61, 0xa2, 0xee, 0xfb, 0x0b, 0x50, 0x1c,
0x06, 0x07, 0xeb, 0xd3, 0x06, 0x99, 0x79, 0xe1, 0x21, 0x5d, 0x4d, 0xd6, 0xf1, 0x0a, 0xec, 0x98,
0x15, 0x83, 0x21, 0xee, 0x6e, 0x14, 0x4a, 0xdc, 0x8e, 0xf5, 0x23, 0xb0, 0x71, 0xa5, 0x3a, 0xfc,
0xda, 0x1d, 0xe4, 0x20, 0x54, 0x4f, 0xc3, 0xc0, 0x85, 0xe0, 0x2a, 0x1e, 0x2d, 0x38, 0x53, 0x62,
0xfe, 0xd0, 0xf0, 0xea, 0x21, 0x7b, 0x6d, 0x60, 0x1e, 0x0d, 0x3d, 0x72, 0xf7, 0xf8, 0x6f, 0xa1,
0xb7, 0x69, 0xc7, 0xbc, 0xc3, 0xd7, 0x22, 0x37, 0x25, 0xbc, 0x96, 0xa4, 0x66, 0xc7, 0xfa, 0x6b,
0xf8, 0x11, 0xa3, 0x6e, 0xa7, 0xa3, 0xe5, 0xf9, 0xbd, 0x9d, 0x2c, 0x75, 0x7a, 0xb0, 0xdd, 0xe9,
0x65, 0xf4, 0xea, 0x11, 0x83, 0xc5, 0xd3, 0xac, 0xb3, 0xe3, 0x6a, 0x5e, 0x04, 0x13, 0x06, 0x0a,
0x6a, 0xe6, 0xd8, 0x8e, 0x62, 0xad, 0xe6, 0xb8, 0xea, 0x09, 0x1e, 0xe3, 0x4d, 0xd3, 0x57, 0x46,
0x24, 0xf1, 0x2e, 0x35, 0x04, 0x82, 0xd3, 0x46, 0xef, 0xab, 0x49, 0xa2, 0xcf, 0x93, 0x3d, 0xb1,
0x3b, 0x84, 0xb8, 0xf0, 0x04, 0x8d, 0xd9, 0x9b, 0x26, 0xd8, 0x55, 0xbd, 0xb6, 0x17, 0x1b, 0x12,
0xb6, 0x43, 0x64, 0x7d, 0x6c, 0x25, 0xd7, 0xee, 0xd9, 0xac, 0xe6, 0x84, 0x4d, 0x03, 0x96, 0xbb,
0x64, 0xe1, 0x7f, 0xff, 0xdd, 0x5c, 0x73, 0xa5, 0x69, 0xf0, 0x2e, 0x57, 0x5e, 0xb8, 0xac, 0x67,
0x69, 0x70, 0xe0, 0x54, 0xd0, 0x68, 0x5f, 0xea, 0xa2, 0x30, 0x13, 0x99, 0xfb, 0x96, 0x19, 0xa9,
0x5d, 0x7a, 0xe9, 0x36, 0xfa, 0x14, 0x22, 0x9c, 0x7c, 0x6c, 0x30, 0x7f, 0xb7, 0xbf, 0xbf, 0x9f,
0x66, 0x87, 0x3d, 0x54, 0x7a, 0xaf, 0x36, 0xb1, 0xf7, 0xe3, 0x09, 0x3f, 0xc4, 0x9f, 0xd5, 0x50,
0x7c, 0xff, 0x40, 0xb2, 0xdb, 0x96, 0x49, 0x83, 0xb5, 0x10, 0x4a, 0x34, 0x96, 0x85, 0xac, 0x6c,
0x36, 0xb2, 0xd8, 0x83, 0xe0, 0xe8, 0x1e, 0xd4, 0x05, 0x74, 0xba, 0xfb, 0xaf, 0xe2, 0xd2, 0xdb,
0x88, 0x0d, 0x33, 0x74, 0xe5, 0x35, 0x19, 0x0a, 0x45, 0x73, 0xa3, 0xa6, 0x7c, 0x7b, 0x80, 0x9e,
0x8b, 0x8c, 0x84, 0x52, 0x79, 0x97, 0x13, 0xfb, 0x45, 0x60, 0x96, 0x5d, 0x4c, 0xd9, 0x49, 0xff,
0x54, 0x0b, 0xff, 0xfb, 0x77, 0xb8, 0xeb, 0x4e, 0xec, 0xb7, 0x89, 0x37, 0xb7, 0x01, 0x02, 0x3d,
0xf4, 0x00, 0x34, 0x8c, 0x2a, 0x7b, 0xf4, 0x91, 0xe9, 0x86, 0x3c, 0x85, 0x5e, 0x9b, 0xcb, 0xff,
0x60, 0x98, 0xff, 0xe9, 0x7a, 0x05, 0x6e, 0xcd, 0x91, 0xf0, 0xdf, 0xcd, 0x75, 0x71, 0x5a, 0xae,
0x6b, 0xe0, 0x4b, 0xd2, 0x9b, 0x0f, 0x91, 0x0f, 0x93, 0x14, 0xb5, 0x80, 0x98, 0x51, 0xc1, 0x0a,
0x78, 0xa3, 0x5f, 0xe9, 0x8c, 0x59, 0x77, 0x76, 0x66, 0xa2, 0x77, 0xd3, 0x0d, 0xe5, 0x61, 0x26,
0xde, 0x6c, 0x93, 0x4a, 0xda, 0xff, 0x32, 0x33, 0xd3, 0xe0, 0xe8, 0x5e, 0x8e, 0xaf, 0x89, 0x5f,
0xf0, 0xe2, 0xae, 0x24, 0xeb, 0xe3, 0x9e, 0x08, 0xdc, 0xf2, 0xbb, 0xc8, 0xfb, 0x09, 0x18, 0x41,
0x61, 0xef, 0x61, 0x82, 0xb1, 0x97, 0xce, 0xe6, 0xb6, 0xb7, 0xff, 0x68, 0x7c, 0xf5, 0xba, 0x8b,
0x0e, 0x80, 0x03, 0x43, 0x5d, 0xbd, 0x0e, 0x9a, 0xdb, 0xd9, 0xd1, 0x38, 0x97, 0x22, 0x77, 0xea,
0x36, 0xf6, 0x2d, 0xbb, 0x63, 0x78, 0x31, 0x38, 0x12, 0x2e, 0xc2, 0x57, 0xdb, 0xed, 0x02, 0xc8,
0xa0, 0x4d, 0x30, 0x7a, 0x78, 0x9e, 0xf0, 0x4f, 0x91, 0x99, 0x05, 0x40, 0x2e, 0xe9, 0x87, 0x18,
0x05, 0xf3, 0xc8, 0x2e, 0xa6, 0xde, 0xc5, 0x7e, 0x94, 0x33, 0x3d, 0xe0, 0x45, 0xde, 0xb5, 0x90,
0xde, 0x82, 0x6f, 0x66, 0xf7, 0xd0, 0x7b, 0x42, 0x30, 0x3c, 0xb4, 0xe6, 0x5f, 0xd5, 0x8b, 0x27,
0x36, 0x53, 0x5c, 0xf4, 0xfa, 0xde, 0x11, 0xa4, 0xed, 0x24, 0xff, 0xcc, 0xd9, 0xbc, 0x2f, 0x56,
0x63, 0xd9, 0xac, 0x1d, 0xc0, 0x23, 0x1f, 0x83, 0x4b, 0xaf, 0xb1, 0xc4, 0xfb, 0x82, 0xc3, 0x54,
0xe1, 0x5f, 0xde, 0x47, 0x84, 0x74, 0x3a, 0xed, 0x30, 0xcd, 0xcb, 0xb3, 0xa5, 0x3d, 0x75, 0x83,
0xb8, 0x37, 0xe4, 0x63, 0x0c, 0x88, 0x17, 0xd2, 0x0e, 0xe5, 0xbc, 0x3b, 0xaf, 0xb7, 0xb7, 0xd9,
0x93, 0xc9, 0x07, 0x07, 0x75, 0x13, 0x78, 0x9a, 0x23, 0x61, 0xf2, 0x6e, 0x0e, 0xac, 0x50, 0x7e,
0x9f, 0x2e, 0xd4, 0xdf, 0xbf, 0xa3, 0xe2, 0x11, 0x44, 0x37, 0xa4, 0xe2, 0x5d, 0xe5, 0xbc, 0x10,
0xea, 0x0d, 0xa4, 0x09, 0xb4, 0x16, 0x5f, 0x5d, 0x5b, 0x1e, 0xf3, 0x96, 0xbe, 0x1e, 0xb8, 0x32,
0x8c, 0xa5, 0x7b, 0x4f, 0x99, 0x3b, 0x2f, 0xab, 0xb7, 0x84, 0x81, 0x8a, 0x07, 0x25, 0x98, 0x4f,
0x9d, 0x5e, 0x6c, 0x06, 0x74, 0xb0, 0x5a, 0x6a, 0x68, 0xe2, 0xd9, 0x44, 0xf4, 0xca, 0x51, 0x2e,
0xb7, 0xb9, 0x60, 0xf8, 0x8a, 0xb2, 0x8f, 0x4b, 0x52, 0x90, 0x20, 0xf1, 0x39, 0x01, 0x57, 0xe4,
0x27, 0xe5, 0xc6, 0xa3, 0xcf, 0x8a, 0x05, 0xb7, 0x9d, 0x79, 0xe5, 0xb6, 0xbe, 0x67, 0xdc, 0xf7,
0x39, 0x24, 0xbe, 0x67, 0x70, 0x37, 0x0f, 0xbf, 0x07, 0xce, 0x50, 0xdf, 0x4b, 0xfc, 0xbf, 0x68,
0x99, 0x89, 0x0f, 0x67, 0xc0, 0x00, 0x00
};

File diff suppressed because it is too large Load Diff

View File

@ -71,12 +71,10 @@ void decBrightness()
// apply preset or fallback to a effect and palette if it doesn't exist
void presetFallback(uint8_t presetID, uint8_t effectID, uint8_t paletteID)
{
byte prevError = errorFlag;
if (!applyPreset(presetID, CALL_MODE_BUTTON_PRESET)) {
effectCurrent = effectID;
effectPalette = paletteID;
errorFlag = prevError; //clear error 12 from non-existent preset
}
applyPreset(presetID, CALL_MODE_BUTTON_PRESET);
//these two will be overwritten if preset exists in handlePresets()
effectCurrent = effectID;
effectPalette = paletteID;
}
/*
@ -575,11 +573,7 @@ void decodeIRJson(uint32_t code)
JsonObject fdo;
JsonObject jsonCmdObj;
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(13)) return;
#endif
sprintf_P(objKey, PSTR("\"0x%lX\":"), (unsigned long)code);
@ -614,9 +608,9 @@ void decodeIRJson(uint32_t code)
lastValidCode = code;
decBrightness();
} else if (cmdStr.startsWith(F("!presetF"))) { //!presetFallback
uint8_t p1 = fdo["PL"] ? fdo["PL"] : 1;
uint8_t p2 = fdo["FX"] ? fdo["FX"] : random8(MODE_COUNT);
uint8_t p3 = fdo["FP"] ? fdo["FP"] : 0;
uint8_t p1 = fdo["PL"] | 1;
uint8_t p2 = fdo["FX"] | random8(MODE_COUNT);
uint8_t p3 = fdo["FP"] | 0;
presetFallback(p1, p2, p3);
}
} else {

View File

@ -239,7 +239,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
return; // seg.differs(prev);
}
// deserializes WLED state (fileDoc points to doc object if called from web server)
// deserializes WLED state (fileDoc points to doc object (root) if called from web server, MQTT, IR, preset; not from UDP)
bool deserializeState(JsonObject root, byte callMode, byte presetId)
{
DEBUG_PRINTLN(F("Deserializing state"));
@ -959,12 +959,8 @@ void serveJson(AsyncWebServerRequest* request)
return;
}
#ifdef WLED_USE_DYNAMIC_JSON
AsyncJsonResponse* response = new AsyncJsonResponse(JSON_BUFFER_SIZE, subJson==6);
#else
if (!requestJSONBufferLock(17)) return;
AsyncJsonResponse *response = new AsyncJsonResponse(&doc, subJson==6);
#endif
JsonVariant lDoc = response->getRoot();

View File

@ -91,20 +91,16 @@ void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties
colorUpdated(CALL_MODE_DIRECT_CHANGE);
} else if (strcmp_P(topic, PSTR("/api")) == 0) {
DEBUG_PRINTLN(F("MQTT JSON buffer requested."));
if (!requestJSONBufferLock(15)) { delete[] payloadStr; return; }
if (payload[0] == '{') { //JSON API
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(15)) return;
#endif
deserializeJson(doc, payloadStr);
deserializeState(doc.as<JsonObject>());
releaseJSONBufferLock();
} else { //HTTP API
String apireq = "win&";
apireq += (char*)payloadStr;
handleSet(nullptr, apireq);
}
releaseJSONBufferLock();
} else if (strlen(topic) != 0) {
// non standard topic, check with usermods
usermods.onMqttMessage(topic, payloadStr);

View File

@ -4,97 +4,118 @@
* Methods to handle saving and loading presets to/from the filesystem
*/
// called from: handleSet(), deserializeState(), applyMacro(), handlePlaylist(), checkCountdown(), checkTimers(), handleNightlight(), presetFallback()
// shortPressAction(), longPressAction(), doublePressAction(), handleSwitch(), onAlexaChange()
#ifdef ARDUINO_ARCH_ESP32
static char *tmpRAMbuffer = nullptr;
#endif
static volatile byte presetToApply = 0;
static volatile byte callModeToApply = 0;
bool applyPreset(byte index, byte callMode)
{
if (index == 0) return false;
const char *filename = index < 255 ? "/presets.json" : "/tmp.json";
uint8_t core = 1;
//crude way to determine if this was called by a network request
#ifdef ARDUINO_ARCH_ESP32
core = xPortGetCoreID();
#endif
//only allow use of fileDoc from the core responsible for network requests
//do not use active network request doc from preset called by main loop (playlist, schedule, ...)
if (fileDoc && core) {
errorFlag = readObjectFromFileUsingId(filename, index, fileDoc) ? ERR_NONE : ERR_FS_PLOAD;
JsonObject fdo = fileDoc->as<JsonObject>();
if (fdo["ps"] == index) fdo.remove("ps"); //remove load request for same presets to prevent recursive crash
#ifdef WLED_DEBUG_FS
serializeJson(*fileDoc, Serial);
#endif
deserializeState(fdo, callMode, index);
} else {
DEBUG_PRINTLN(F("Apply preset JSON buffer requested."));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(9)) return false;
#endif
errorFlag = readObjectFromFileUsingId(filename, index, &doc) ? ERR_NONE : ERR_FS_PLOAD;
JsonObject fdo = doc.as<JsonObject>();
if (fdo["ps"] == index) fdo.remove("ps");
#ifdef WLED_DEBUG_FS
serializeJson(doc, Serial);
#endif
deserializeState(fdo, callMode, index);
releaseJSONBufferLock();
}
if (!errorFlag) {
if (index < 255) currentPreset = index;
return true;
}
return false;
presetToApply = index;
callModeToApply = callMode;
return true;
}
void handlePresets()
{
if (presetToApply == 0 || fileDoc) return; //JSON buffer allocated (apply preset in next cycle) or no preset waiting
JsonObject fdo;
const char *filename = presetToApply < 255 ? "/presets.json" : "/tmp.json";
// allocate buffer
DEBUG_PRINTLN(F("Apply preset JSON buffer requested."));
if (!requestJSONBufferLock(9)) return; // will also assign fileDoc
#ifdef ARDUINO_ARCH_ESP32
if (presetToApply==255 && tmpRAMbuffer!=nullptr) {
deserializeJson(*fileDoc,tmpRAMbuffer);
errorFlag = ERR_NONE;
} else
#endif
{
errorFlag = readObjectFromFileUsingId(filename, presetToApply, fileDoc) ? ERR_NONE : ERR_FS_PLOAD;
}
fdo = fileDoc->as<JsonObject>();
fdo.remove("ps"); //remove load request for presets to prevent recursive crash
deserializeState(fdo, callModeToApply, presetToApply);
#if defined(ARDUINO_ARCH_ESP32)
//Aircoookie recommended not to delete buffer
if (presetToApply==255 && tmpRAMbuffer!=nullptr) {
free(tmpRAMbuffer);
tmpRAMbuffer = nullptr;
}
#endif
releaseJSONBufferLock(); // will also clear fileDoc
if (!errorFlag && presetToApply < 255) currentPreset = presetToApply;
if (callModeToApply == CALL_MODE_BUTTON_PRESET) errorFlag = ERR_NONE; //ignore error on button press
presetToApply = 0; //clear request for preset
callModeToApply = 0;
}
//called from handleSet(PS=) [network callback (fileDoc==nullptr), IR (irrational), deserializeState, UDP] and deserializeState() [network callback (filedoc!=nullptr)]
void savePreset(byte index, bool persist, const char* pname, JsonObject saveobj)
{
if (index == 0 || (index > 250 && persist) || (index<255 && !persist)) return;
JsonObject sObj = saveobj;
bool bufferAllocated = false;
const char *filename = persist ? "/presets.json" : "/tmp.json";
if (!fileDoc) {
// called from handleSet() HTTP API
DEBUG_PRINTLN(F("Save preset JSON buffer requested."));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(10)) return;
#endif
sObj = doc.to<JsonObject>();
if (pname) sObj["n"] = pname;
DEBUGFS_PRINTLN(F("Save current state"));
serializeState(sObj, true);
if (persist) currentPreset = index;
writeObjectToFileUsingId(filename, index, &doc);
releaseJSONBufferLock();
} else { //from JSON API (fileDoc != nullptr)
DEBUGFS_PRINTLN(F("Reuse recv buffer"));
sObj.remove(F("psave"));
sObj.remove(F("v"));
if (!sObj["o"]) {
DEBUGFS_PRINTLN(F("Save current state"));
serializeState(sObj, true, sObj["ib"], sObj["sb"]);
if (persist) currentPreset = index;
}
sObj.remove("o");
sObj.remove("ib");
sObj.remove("sb");
sObj.remove(F("error"));
sObj.remove(F("time"));
writeObjectToFileUsingId(filename, index, fileDoc);
sObj = fileDoc->to<JsonObject>();
bufferAllocated = true;
}
if (pname) sObj["n"] = pname;
sObj.remove(F("psave"));
sObj.remove(F("v"));
if (!sObj["o"]) {
DEBUGFS_PRINTLN(F("Serialize current state"));
if (sObj["ib"].isNull() && sObj["sb"].isNull()) serializeState(sObj, true);
else serializeState(sObj, true, sObj["ib"], sObj["sb"]);
if (persist) currentPreset = index;
}
sObj.remove("o");
sObj.remove("ib");
sObj.remove("sb");
sObj.remove(F("error"));
sObj.remove(F("time"));
#if defined(ARDUINO_ARCH_ESP32)
if (index==255) {
if (tmpRAMbuffer!=nullptr) free(tmpRAMbuffer);
size_t len = measureJson(*fileDoc) + 1;
DEBUG_PRINTLN(len);
// if possible use SPI RAM on ESP32
#ifdef WLED_USE_PSRAM
if (psramFound())
tmpRAMbuffer = (char*) ps_malloc(len);
else
#endif
tmpRAMbuffer = (char*) malloc(len);
if (tmpRAMbuffer!=nullptr) {
serializeJson(*fileDoc, tmpRAMbuffer, len);
} else {
writeObjectToFileUsingId(filename, index, fileDoc);
}
} else
#endif
writeObjectToFileUsingId(filename, index, fileDoc);
if (persist) presetsModifiedTime = toki.second(); //unix time
if (bufferAllocated) releaseJSONBufferLock();
updateFSInfo();
}

View File

@ -427,11 +427,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
//USERMODS
if (subPage == 8)
{
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(5)) return;
#endif
JsonObject um = doc.createNestedObject("um");

View File

@ -462,16 +462,17 @@ void handleNotifications()
// API over UDP
udpIn[packetSize] = '\0';
if (!requestJSONBufferLock(18)) return;
if (udpIn[0] >= 'A' && udpIn[0] <= 'Z') { //HTTP API
String apireq = "win&";
apireq += (char*)udpIn;
handleSet(nullptr, apireq);
} else if (udpIn[0] == '{') { //JSON API
DynamicJsonDocument jsonBuffer(2048);
DeserializationError error = deserializeJson(jsonBuffer, udpIn);
JsonObject root = jsonBuffer.as<JsonObject>();
DeserializationError error = deserializeJson(doc, udpIn);
JsonObject root = doc.as<JsonObject>();
if (!error && !root.isNull()) deserializeState(root);
}
releaseJSONBufferLock();
}

View File

@ -65,12 +65,14 @@ void WLED::loop()
yield();
handleIO();
handleIR();
#ifndef WLED_DISABLE_ALEXA
handleAlexa();
#endif
yield();
if (doReboot)
reset();
if (doReboot) reset();
if (doCloseFile) {
closeFile();
yield();
@ -78,21 +80,25 @@ void WLED::loop()
if (!realtimeMode || realtimeOverride) // block stuff if WARLS/Adalight is enabled
{
if (apActive)
dnsServer.processNextRequest();
#ifndef WLED_DISABLE_OTA
if (WLED_CONNECTED && aOtaEnabled)
ArduinoOTA.handle();
#endif
if (apActive) dnsServer.processNextRequest();
#ifndef WLED_DISABLE_OTA
if (WLED_CONNECTED && aOtaEnabled) ArduinoOTA.handle();
#endif
handleNightlight();
handlePlaylist();
yield();
#ifndef WLED_DISABLE_HUESYNC
handleHue();
#ifndef WLED_DISABLE_BLYNK
handleBlynk();
#endif
yield();
#endif
#ifndef WLED_DISABLE_BLYNK
handleBlynk();
yield();
#endif
handlePresets();
yield();
#ifdef WLED_DEBUG
@ -100,10 +106,10 @@ void WLED::loop()
#endif
if (!offMode || strip.isOffRefreshRequred)
strip.service();
#ifdef ESP8266
#ifdef ESP8266
else if (!noWifiSleep)
delay(1); //required to make sure ESP enters modem sleep (see #1184)
#endif
#endif
#ifdef WLED_DEBUG
stripMillis = millis() - stripMillis;
if (stripMillis > 50) DEBUG_PRINTLN("Slow strip.");

View File

@ -3,12 +3,12 @@
/*
Main sketch, global variable declarations
@title WLED project sketch
@version 0.13.1-bl5
@version 0.13.1-bl6
@author Christian Schwinne
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2112281
#define VERSION 2201011
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG
@ -612,10 +612,8 @@ WLED_GLOBAL int8_t loadLedmap _INIT(-1);
// Usermod manager
WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager());
#ifndef WLED_USE_DYNAMIC_JSON
// global ArduinoJson buffer
WLED_GLOBAL StaticJsonDocument<JSON_BUFFER_SIZE> doc;
#endif
WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
// enable additional debug output

View File

@ -382,11 +382,7 @@ void deEEP() {
DEBUG_PRINTLN(F("Preset file not found, attempting to load from EEPROM"));
DEBUGFS_PRINTLN(F("Allocating saving buffer for dEEP"));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(8)) return;
#endif
JsonObject sObj = doc.to<JsonObject>();
sObj.createNestedObject("0");

View File

@ -48,11 +48,7 @@ void handleSerial()
Serial.print("WLED"); Serial.write(' '); Serial.println(VERSION);
} else if (next == '{') { //JSON API
bool verboseResponse = false;
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(16)) return;
#endif
Serial.setTimeout(100);
DeserializationError error = deserializeJson(doc, Serial);
if (error) {

View File

@ -119,34 +119,30 @@ void initServer()
AsyncCallbackJsonWebHandler* handler = new AsyncCallbackJsonWebHandler("/json", [](AsyncWebServerRequest *request) {
bool verboseResponse = false;
bool isConfig = false;
{ //scope JsonDocument so it releases its buffer
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(14)) return;
#endif
DeserializationError error = deserializeJson(doc, (uint8_t*)(request->_tempObject));
JsonObject root = doc.as<JsonObject>();
if (error || root.isNull()) {
releaseJSONBufferLock();
request->send(400, "application/json", F("{\"error\":9}"));
return;
}
const String& url = request->url();
isConfig = url.indexOf("cfg") > -1;
if (!isConfig) {
#ifdef WLED_DEBUG
DEBUG_PRINTLN(F("Serialized HTTP"));
serializeJson(root,Serial);
DEBUG_PRINTLN();
#endif
verboseResponse = deserializeState(root);
} else {
verboseResponse = deserializeConfig(root); //use verboseResponse to determine whether cfg change should be saved immediately
}
if (!requestJSONBufferLock(14)) return;
DeserializationError error = deserializeJson(doc, (uint8_t*)(request->_tempObject));
JsonObject root = doc.as<JsonObject>();
if (error || root.isNull()) {
releaseJSONBufferLock();
request->send(400, "application/json", F("{\"error\":9}"));
return;
}
const String& url = request->url();
isConfig = url.indexOf("cfg") > -1;
if (!isConfig) {
#ifdef WLED_DEBUG
DEBUG_PRINTLN(F("Serialized HTTP"));
serializeJson(root,Serial);
DEBUG_PRINTLN();
#endif
verboseResponse = deserializeState(root);
} else {
verboseResponse = deserializeConfig(root); //use verboseResponse to determine whether cfg change should be saved immediately
}
releaseJSONBufferLock();
if (verboseResponse) {
if (!isConfig) {
serveJson(request); return; //if JSON contains "v"

View File

@ -37,11 +37,7 @@ void wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventTyp
bool verboseResponse = false;
{ //scope JsonDocument so it releases its buffer
DEBUG_PRINTLN(F("WS JSON receive buffer requested."));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(11)) return;
#endif
DeserializationError error = deserializeJson(doc, data, len);
JsonObject root = doc.as<JsonObject>();
@ -105,11 +101,7 @@ void sendDataWs(AsyncWebSocketClient * client)
{ //scope JsonDocument so it releases its buffer
DEBUG_PRINTLN(F("WS JSON send buffer requested."));
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(JSON_BUFFER_SIZE);
#else
if (!requestJSONBufferLock(12)) return;
#endif
JsonObject state = doc.createNestedObject("state");
serializeState(state);

View File

@ -249,21 +249,17 @@ void getSettingsJS(byte subPage, char* dest)
{
char nS[8];
// Pin reservations will become unnecessary when settings pages will read cfg.json directly
// add reserved and usermod pins as d.um_p array
oappend(SET_F("d.um_p=[6,7,8,9,10,11"));
{ // scope so buffer can be released earlier
#ifdef WLED_USE_DYNAMIC_JSON
DynamicJsonDocument doc(3072);
#else
if (!requestJSONBufferLock(6)) return;
#endif
JsonObject mods = doc.createNestedObject(F("um"));
usermods.addToConfig(mods);
if (!mods.isNull()) fillUMPins(mods);
releaseJSONBufferLock();
if (requestJSONBufferLock(6)) {
// if we can't allocate JSON buffer ignore usermod pins
JsonObject mods = doc.createNestedObject(F("um"));
usermods.addToConfig(mods);
if (!mods.isNull()) fillUMPins(mods);
releaseJSONBufferLock();
}
#ifdef WLED_ENABLE_DMX