Merge remote-tracking branch 'origin/ac_main' into mdev

This commit is contained in:
Ewoud
2022-12-16 11:43:27 +01:00
71 changed files with 2730 additions and 2157 deletions

View File

@@ -24,8 +24,8 @@
Modified heavily for WLED
*/
#include "FX.h"
#include "wled.h"
#include "FX.h"
#include "fcn_declare.h"
#define IBN 5100
@@ -3485,6 +3485,7 @@ uint16_t mode_tetrix(void) {
if (SEGENV.call == 0) {
drop->stack = 0; // reset brick stack size
drop->step = 0;
if (SEGMENT.check1) drop->col = 0;// use only one color from palette
//for (int i=0; i<SEGLEN; i++) SEGMENT.setPixelColor(indexToVStrip(i, stripNr), SEGCOLOR(1)); // will fill virtual strip only
}
@@ -3496,7 +3497,7 @@ uint16_t mode_tetrix(void) {
speed = map(speed, 1, 255, 5000, 250); // time taken for full (SEGLEN) drop
drop->speed = float(SEGLEN * FRAMETIME) / float(speed); // set speed
drop->pos = SEGLEN; // start at end of segment (no need to subtract 1)
drop->col = random8(0,15)<<4; // limit color choices so there is enough HUE gap
if (!SEGMENT.check1) drop->col = random8(0,15)<<4; // limit color choices so there is enough HUE gap
drop->step = 1; // drop state (0 init, 1 forming, 2 falling)
drop->brick = (SEGMENT.intensity ? (SEGMENT.intensity>>5)+1 : random8(1,5)) * (1+(SEGLEN>>6)); // size of brick
}
@@ -3510,7 +3511,7 @@ uint16_t mode_tetrix(void) {
if (drop->step == 2) { // falling
if (drop->pos > drop->stack) { // fall until top of stack
drop->pos -= drop->speed; // may add gravity as: speed += gravity
if (uint16_t(drop->pos) < drop->stack) drop->pos = drop->stack;
if (int(drop->pos) < int(drop->stack)) drop->pos = drop->stack;
for (int i=int(drop->pos); i<SEGLEN; i++) {
uint32_t col = i<int(drop->pos)+drop->brick ? SEGMENT.color_from_palette(drop->col, false, false, 0) : SEGCOLOR(1);
SEGMENT.setPixelColor(indexToVStrip(i, stripNr), col);
@@ -3530,6 +3531,7 @@ uint16_t mode_tetrix(void) {
} else {
drop->stack = 0; // reset brick stack size
drop->step = 0; // proceed with next brick
if (SEGMENT.check1) drop->col += 8; // gradually increase palette index
}
}
}
@@ -3540,7 +3542,7 @@ uint16_t mode_tetrix(void) {
return FRAMETIME;
}
static const char _data_FX_MODE_TETRIX[] PROGMEM = "Tetrix@!,Width;!,!;!;1.5d;sx=0,ix=0,pal=11,m12=1"; //WLEDMM 1.5d
static const char _data_FX_MODE_TETRIX[] PROGMEM = "Tetrix@!,Width,,,,One color;!,!;!;1.5d;sx=0,ix=0,pal=11,m12=1";//WLEDMM 1.5d
/*

View File

@@ -203,14 +203,27 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
int8_t pin = btn["pin"][0] | -1;
if (pin > -1 && pinManager.allocatePin(pin, false, PinOwner::Button)) {
btnPin[s] = pin;
if (disablePullUp) {
pinMode(btnPin[s], INPUT);
} else {
#ifdef ESP32
pinMode(btnPin[s], buttonType[s]==BTN_TYPE_PUSH_ACT_HIGH ? INPUT_PULLDOWN : INPUT_PULLUP);
#else
pinMode(btnPin[s], INPUT_PULLUP);
#endif
#ifdef ARDUINO_ARCH_ESP32
// ESP32 only: check that analog button pin is a valid ADC gpio
if (((buttonType[s] == BTN_TYPE_ANALOG) || (buttonType[s] == BTN_TYPE_ANALOG_INVERTED)) && (digitalPinToAnalogChannel(btnPin[s]) < 0))
{
// not an ADC analog pin
DEBUG_PRINTF("PIN ALLOC error: GPIO%d for analog button #%d is not an analog pin!\n", btnPin[s], s);
btnPin[s] = -1;
pinManager.deallocatePin(pin,PinOwner::Button);
}
else
#endif
{
if (disablePullUp) {
pinMode(btnPin[s], INPUT);
} else {
#ifdef ESP32
pinMode(btnPin[s], buttonType[s]==BTN_TYPE_PUSH_ACT_HIGH ? INPUT_PULLDOWN : INPUT_PULLUP);
#else
pinMode(btnPin[s], INPUT_PULLUP);
#endif
}
}
} else {
btnPin[s] = -1;

View File

@@ -97,6 +97,7 @@
#define USERMOD_ID_ANALOG_CLOCK 33 //Usermod "Analog_Clock.h"
#define USERMOD_ID_PING_PONG_CLOCK 34 //Usermod "usermod_v2_ping_pong_clock.h"
#define USERMOD_ID_ADS1115 35 //Usermod "usermod_ads1115.h"
#define USERMOD_ID_BOBLIGHT 36 //Usermod "boblight.h"
#define USERMOD_ID_SD_CARD 37 //Usermod "usermod_sd_card.h"
#define USERMOD_ID_PWM_OUTPUTS 38 //Usermod "usermod_pwm_outputs.h
//WLEDMM

View File

@@ -287,15 +287,15 @@
</div>
<div id="fxopt" class="option fade">
<label id="opt0" class="check ochkl hide"><i class="icons">&#xe2b3;</i><span class="tooltiptext" id="optLabel0">Check 1</span>
<input type="checkbox" onchange="setOption(1, this.checked)">
<input id="checkO1" type="checkbox" onchange="setOption(1, this.checked)">
<span class="checkmark"></span>
</label>
<label id="opt1" class="check ochkl hide"><i class="icons">&#xe34b;</i><span class="tooltiptext" id="optLabel1">Check 2</span>
<input type="checkbox" onchange="setOption(2, this.checked)">
<input id="checkO2" type="checkbox" onchange="setOption(2, this.checked)">
<span class="checkmark"></span>
</label>
<label id="opt2" class="check ochkl hide"><i class="icons">&#xe04c;</i><span class="tooltiptext" id="optLabel2">Check 3</span>
<input type="checkbox" onchange="setOption(3, this.checked)">
<input id="checkO3" type="checkbox" onchange="setOption(3, this.checked)">
<span class="checkmark"></span>
</label>
</div>

View File

@@ -1349,6 +1349,9 @@ function readState(s,command=false)
gId('sliderC1').value = i.c1 ? i.c1 : 0;
gId('sliderC2').value = i.c2 ? i.c2 : 0;
gId('sliderC3').value = i.c3 ? i.c3 : 0;
gId('checkO1').checked = !(!i.o1);
gId('checkO2').checked = !(!i.o2);
gId('checkO3').checked = !(!i.o3);
if (s.error && s.error != 0) {
var errstr = "";
@@ -2042,7 +2045,7 @@ function setSeg(s)
var startY = parseInt(sY.value);
var stopY = parseInt(eY.value);
if (startY<sY.min || startY>sY.max) {sY.value=sY.min; return;} // prevent out of bounds
if (stopY<eY.min || stop>eY.max) {eY.value=eY.max; return;} // prevent out of bounds
if (stopY<eY.min || stopY>eY.max) {eY.value=eY.max; return;} // prevent out of bounds
obj.seg.startY = startY;
obj.seg.stopY = (cfg.comp.seglen?startY:0)+stopY;
}
@@ -2216,12 +2219,12 @@ function setPreset(i)
{
var obj = {"ps":i};
if (pJson && pJson[i] && (!pJson[i].win || pJson[i].win.indexOf("Please") <= 0)) {
// we will send complete preset content as to avoid delay introduced by
// async nature of applyPreset(). json.cpp has to decide wether to call applyPreset()
// or not (by looking at the JSON content, if "ps" only)
// we will send the complete preset content as to avoid delay introduced by
// async nature of applyPreset() and having to read the preset from file system.
obj = {"pd":i}; // use "pd" instead of "ps" to indicate that we are sending the preset content directly
Object.assign(obj, pJson[i]);
delete obj.ql; // no need for quick load
delete obj.n; // no need for name
delete obj.ql; // no need for quick load
delete obj.n; // no need for name
}
if (isPlaylist(i)) obj.on = true; // force on
showToast("Loading preset " + pName(i) +" (" + i + ")");

View File

@@ -43,6 +43,7 @@
}
};
function gId(s) { return d.getElementById(s); }
function toggle(el) { gId(el).classList.toggle("hide"); gId('No'+el).classList.toggle("hide"); }
function isObject(item) {
return (item && typeof item === 'object' && !Array.isArray(item));
}
@@ -247,7 +248,10 @@
<h2>Web Setup</h2>
Server description: <input type="text" name="DS" maxlength="32"><br>
Sync button toggles both send and receive: <input type="checkbox" name="ST"><br>
Enable simplified UI: <input type="checkbox" name="SU"><br>
<div id="NoSimple" class="hide">
<em style="color:#fa0;">This firmware build does not include simplified UI support.<br></em>
</div>
<div id="Simple">Enable simplified UI: <input type="checkbox" name="SU"><br></div>
<i>The following UI customization settings are unique both to the WLED device and this browser.<br>
You will need to set them again if using a different browser, device or WLED IP address.<br>
Refresh the main UI to apply changes.</i><br>

View File

@@ -106,8 +106,9 @@
}
//WLEDMM util function
function initCap(s) {
if (typeof s !== 'string') return ''
return s.charAt(0).toUpperCase() + s.slice(1)
if (typeof s !== 'string') return '';
// https://www.freecodecamp.org/news/how-to-capitalize-words-in-javascript/
return s.replace(/[\W_]/g,' ').replace(/(^\w{1})|(\s+\w{1})/g, l=>l.toUpperCase()); // replace - and _ with space, capitalize every 1st letter
}
function addField(k,f,o,a=false) { //key, field, (sub)object, isArray
if (isO(o)) {

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -447,29 +447,22 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
handleSet(nullptr, apireq, false); // may set stateChanged
}
// applying preset (2 cases: a) API call includes all preset values, b) API only specifies preset ID)
if (!root["ps"].isNull()) {
// applying preset (2 cases: a) API call includes all preset values ("pd"), b) API only specifies preset ID ("ps"))
byte presetToRestore = 0;
// a) already applied preset content (requires "seg" or "win" but will ignore the rest)
if (!root["pd"].isNull() && stateChanged) {
currentPreset = root[F("pd")] | currentPreset;
if (root["win"].isNull()) presetCycCurr = currentPreset;
presetToRestore = currentPreset; // stateUpdated() will clear the preset, so we need to restore it after
//unloadPlaylist(); // applying a preset unloads the playlist, may be needed here too?
} else if (!root["ps"].isNull()) {
ps = presetCycCurr;
if (stateChanged) {
// a) already applied preset content (requires "seg" or "win" but will ignore the rest)
currentPreset = root["ps"] | currentPreset;
// if preset contains HTTP API call do not change presetCycCurr
if (root["win"].isNull()) presetCycCurr = currentPreset;
stateChanged = false; // cancel state change update (preset was set directly by applying values stored in UI JSON array)
notify(callMode);
} else if (root["win"].isNull() && getVal(root["ps"], &ps, 0, 0) && ps > 0 && ps < 251 && ps != currentPreset) {
if (root["win"].isNull() && getVal(root["ps"], &ps, 0, 0) && ps > 0 && ps < 251 && ps != currentPreset) {
// b) preset ID only or preset that does not change state (use embedded cycling limits if they exist in getVal())
presetCycCurr = ps;
presetId = ps;
root.remove("v"); // may be added in UI call
root.remove("time"); // may be added in UI call
root.remove("ps");
root.remove("on"); // some external calls add "on" to "ps" call
if (root.size() == 0) {
unloadPlaylist(); // we need to unload playlist
applyPreset(ps, callMode); // async load (only preset ID was specified)
return stateResponse;
}
unloadPlaylist(); // applying a preset unloads the playlist
applyPreset(ps, callMode); // async load from file system (only preset ID was specified)
return stateResponse;
}
}
@@ -481,6 +474,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
}
stateUpdated(callMode);
if (presetToRestore) currentPreset = presetToRestore;
return stateResponse;
}

View File

@@ -16,15 +16,15 @@ static char quickLoad[9];
static char saveName[33];
static bool includeBri = true, segBounds = true, selectedOnly = false, playlistSave = false;
static const char *getName(bool persist = true) {
static const char *getFileName(bool persist = true) {
return persist ? "/presets.json" : "/tmp.json";
}
static void doSaveState() {
bool persist = (presetToSave < 251);
const char *filename = getName(persist);
const char *filename = getFileName(persist);
if (!requestJSONBufferLock(10)) return; // will set fileDoc
if (!requestJSONBufferLock(10)) return; // will set fileDoc
initPresetsFile(); // just in case if someone deleted presets.json using /edit
JsonObject sObj = doc.to<JsonObject>();
@@ -83,7 +83,7 @@ bool getPresetName(byte index, String& name)
{
if (!requestJSONBufferLock(9)) return false;
bool presetExists = false;
if (readObjectFromFileUsingId(getName(), index, &doc))
if (readObjectFromFileUsingId(getFileName(), index, &doc))
{
JsonObject fdo = doc.as<JsonObject>();
if (fdo["n"]) {
@@ -97,12 +97,12 @@ bool getPresetName(byte index, String& name)
void initPresetsFile()
{
if (WLED_FS.exists(getName())) return;
if (WLED_FS.exists(getFileName())) return;
StaticJsonDocument<64> doc;
JsonObject sObj = doc.to<JsonObject>();
sObj.createNestedObject("0");
File f = WLED_FS.open(getName(), "w");
File f = WLED_FS.open(getFileName(), "w");
if (!f) {
errorFlag = ERR_FS_GENERAL;
return;
@@ -127,14 +127,14 @@ void handlePresets()
return;
}
if (presetToApply == 0 || fileDoc) return; // no preset waiting to apply, or JSON buffer is already allocated, return to loop until free
bool changePreset = false;
uint8_t tmpPreset = presetToApply; // store temporary since deserializeState() may call applyPreset()
uint8_t tmpMode = callModeToApply;
if (tmpPreset == 0 || (fileDoc /*&& !force*/)) return; // JSON buffer already allocated and not force apply or no preset waiting
JsonObject fdo;
const char *filename = getName(tmpPreset < 255);
const char *filename = getFileName(tmpPreset < 255);
/*
* The following code is no longer needed as handlePreset() is never run from
@@ -265,30 +265,28 @@ void savePreset(byte index, const char* pname, JsonObject sObj)
presetToSave = index;
playlistSave = false;
if (sObj[F("ql")].is<const char*>()) strlcpy(quickLoad, sObj[F("ql")].as<const char*>(), 9); // client limits QL to 2 chars, buffer for 8 bytes to allow unicode
sObj.remove("v");
sObj.remove("time");
sObj.remove(F("error"));
sObj.remove(F("psave"));
if (sObj["o"].isNull()) { // "o" marks a playlist or manually entered API
if (sObj["o"].isNull()) { // no "o" means not a playlist or custom API call, saving of state is async (not immediately)
includeBri = sObj["ib"].as<bool>() || index==255; // temporary preset needs brightness
segBounds = sObj["sb"].as<bool>() || index==255; // temporary preset needs bounds
selectedOnly = sObj[F("sc")].as<bool>();
saveLedmap = sObj[F("ledmap")] | -1;
sObj.remove("ib");
sObj.remove("sb");
sObj.remove(F("sc"));
} else {
// this is a playlist or API
sObj.remove("o");
// this is a playlist or API call
if (sObj[F("playlist")].isNull()) {
presetToSave = 0; // we will save API immediately
if (index < 251 && fileDoc) {
if (sObj["n"].isNull()) sObj["n"] = saveName;
initPresetsFile(); // just in case if someone deleted presets.json using /edit
writeObjectToFileUsingId(getName(index), index, fileDoc);
presetsModifiedTime = toki.second(); //unix time
updateFSInfo();
}
// we will save API call immediately
presetToSave = 0;
if (index > 250 || !fileDoc) return; // cannot save API calls to temporary preset (255)
sObj.remove("o");
sObj.remove("v");
sObj.remove("time");
sObj.remove(F("error"));
sObj.remove(F("psave"));
if (sObj["n"].isNull()) sObj["n"] = saveName;
initPresetsFile(); // just in case if someone deleted presets.json using /edit
writeObjectToFileUsingId(getFileName(index), index, fileDoc);
presetsModifiedTime = toki.second(); //unix time
updateFSInfo();
} else {
// store playlist
includeBri = true; // !sObj["on"].isNull();
@@ -299,7 +297,7 @@ void savePreset(byte index, const char* pname, JsonObject sObj)
void deletePreset(byte index) {
StaticJsonDocument<24> empty;
writeObjectToFileUsingId(getName(), index, &empty);
writeObjectToFileUsingId(getFileName(), index, &empty);
presetsModifiedTime = toki.second(); //unix time
updateFSInfo();
}

View File

@@ -169,21 +169,28 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
if (pinManager.allocatePin(hw_btn_pin,false,PinOwner::Button)) {
btnPin[i] = hw_btn_pin;
buttonType[i] = request->arg(be).toInt();
#ifdef ESP32
if (((buttonType[i] == BTN_TYPE_ANALOG) || (buttonType[i] == BTN_TYPE_ANALOG_INVERTED)) && (digitalPinToAnalogChannel(btnPin[i]) < 0)) { // WLEDMM
#ifdef ARDUINO_ARCH_ESP32
// ESP32 only: check that analog button pin is a valid ADC gpio
if (((buttonType[i] == BTN_TYPE_ANALOG) || (buttonType[i] == BTN_TYPE_ANALOG_INVERTED)) && (digitalPinToAnalogChannel(btnPin[i]) < 0))
{
// not an ADC analog pin
USER_PRINTF("PIN ALLOC error: GPIO%d for analog button #%d is not an analog pin!\n", btnPin[i], i);
if (btnPin[i] >= 0) DEBUG_PRINTF("PIN ALLOC error: GPIO%d for analog button #%d is not an analog pin!\n", btnPin[i], i);
btnPin[i] = -1;
pinManager.deallocatePin(hw_btn_pin,PinOwner::Button);
} else { // WLEDMM end
if (disablePullUp) {
pinMode(btnPin[i], INPUT);
} else {
pinMode(btnPin[i], buttonType[i]==BTN_TYPE_PUSH_ACT_HIGH ? INPUT_PULLDOWN : INPUT_PULLUP);
} }
#else
pinMode(btnPin[i], INPUT_PULLUP);
#endif
}
else
#endif
{
if (disablePullUp) {
pinMode(btnPin[i], INPUT);
} else {
#ifdef ESP32
pinMode(btnPin[i], buttonType[i]==BTN_TYPE_PUSH_ACT_HIGH ? INPUT_PULLDOWN : INPUT_PULLUP);
#else
pinMode(btnPin[i], INPUT_PULLUP);
#endif
}
}
} else {
btnPin[i] = -1;
buttonType[i] = BTN_TYPE_NONE;

View File

@@ -14,9 +14,10 @@ Distributed as-is; no warranty is given.
******************************************************************************/
/* ----- LIBRARIES ----- */
#ifdef ESP32
#if defined(ARDUINO_ARCH_ESP32)
#include <Arduino.h>
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S2)
#include "SparkFunDMX.h"
#include <HardwareSerial.h>
@@ -29,28 +30,40 @@ Distributed as-is; no warranty is given.
#define BREAKSPEED 83333
#define BREAKFORMAT SERIAL_8N1
int enablePin = -1; // disable the enable pin because it is not needed
int rxPin = -1; // disable the receiving pin because it is not needed
int txPin = 2; // transmit DMX data over this pin (default is pin 2)
static const int enablePin = -1; // disable the enable pin because it is not needed
static const int rxPin = -1; // disable the receiving pin because it is not needed - softhack007: Pin=-1 means "use default" not "disable"
static const int txPin = 2; // transmit DMX data over this pin (default is pin 2)
//DMX value array and size. Entry 0 will hold startbyte
uint8_t dmxData[dmxMaxChannel] = {};
int chanSize;
int currentChannel = 0;
static uint8_t dmxData[dmxMaxChannel] = { 0 };
static int chanSize = 0;
#if !defined(DMX_SEND_ONLY)
static int currentChannel = 0;
#endif
HardwareSerial DMXSerial(2);
// Some new MCUs (-S2, -C3) don't have HardwareSerial(2)
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 2, 0)
#if SOC_UART_NUM < 3
#error DMX output is not possible on your MCU, as it does not have HardwareSerial(2)
#endif
#endif
static HardwareSerial DMXSerial(2);
/* Interrupt Timer for DMX Receive */
hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
#if !defined(DMX_SEND_ONLY)
static hw_timer_t * timer = NULL;
static portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
#endif
volatile int _interruptCounter;
volatile bool _startCodeDetected = false;
static volatile int _interruptCounter = 0;
static volatile bool _startCodeDetected = false;
#if !defined(DMX_SEND_ONLY)
/* Start Code is detected by 21 low interrupts */
void IRAM_ATTR onTimer() {
if (digitalRead(rxPin) == 1)
if ((rxPin >= 0) && (digitalRead(rxPin) == 1))
{
_interruptCounter = 0; //If the RX Pin is high, we are not in an interrupt
}
@@ -80,10 +93,13 @@ void SparkFunDMX::initRead(int chanQuant) {
chanQuant = defaultMax;
}
chanSize = chanQuant;
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW);
pinMode(rxPin, INPUT);
if (enablePin >= 0) {
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW);
}
if (rxPin >= 0) pinMode(rxPin, INPUT);
}
#endif
// Set up the DMX-Protocol
void SparkFunDMX::initWrite (int chanQuant) {
@@ -96,15 +112,19 @@ void SparkFunDMX::initWrite (int chanQuant) {
chanSize = chanQuant + 1; //Add 1 for start code
DMXSerial.begin(DMXSPEED, DMXFORMAT, rxPin, txPin);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, HIGH);
if (enablePin >= 0) {
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, HIGH);
}
}
#if !defined(DMX_SEND_ONLY)
// Function to read DMX data
uint8_t SparkFunDMX::read(int Channel) {
if (Channel > chanSize) Channel = chanSize;
return(dmxData[Channel - 1]); //subtract one to account for start byte
}
#endif
// Function to send DMX data
void SparkFunDMX::write(int Channel, uint8_t value) {
@@ -133,6 +153,7 @@ void SparkFunDMX::update() {
DMXSerial.flush();
DMXSerial.end();//clear our DMX array, end the Hardware Serial port
}
#if !defined(DMX_SEND_ONLY)
else if (_READWRITE == _READ)//In a perfect world, this function ends serial communication upon packet completion and attaches RX to a CHANGE interrupt so the start code can be read again
{
if (_startCodeDetected == true)
@@ -153,8 +174,9 @@ void SparkFunDMX::update() {
}
}
}
#endif
}
// Function to update the DMX bus
#endif
#endif
#endif

View File

@@ -19,19 +19,23 @@ Distributed as-is; no warranty is given.
#ifndef SparkFunDMX_h
#define SparkFunDMX_h
#define DMX_SEND_ONLY // this disables DMX sending features, and saves us two GPIO pins
// ---- Methods ----
class SparkFunDMX {
public:
void initRead(int maxChan);
void initWrite(int maxChan);
#if !defined(DMX_SEND_ONLY)
void initRead(int maxChan);
uint8_t read(int Channel);
#endif
void write(int channel, uint8_t value);
void update();
private:
uint8_t _startCodeValue = 0xFF;
bool _READ = true;
bool _WRITE = false;
const uint8_t _startCodeValue = 0xFF;
const bool _READ = true;
const bool _WRITE = false;
bool _READWRITE;
};

View File

@@ -77,7 +77,7 @@
#endif
#ifdef USERMOD_VL53L0X_GESTURES
#include "../usermods/VL53L0X_gestures/usermod_vl53l0x_gestures.h"
#include "../usermods/VL53L0X_gestures/usermod_vl53l0x_gestures.h"
#endif
#ifdef USERMOD_ANIMATED_STAIRCASE
@@ -105,7 +105,7 @@
#endif
#ifdef USERMOD_ST7789_DISPLAY
#include "../usermods/ST7789_display/ST7789_Display.h"
#include "../usermods/ST7789_display/ST7789_Display.h"
#endif
#ifdef USERMOD_SEVEN_SEGMENT
@@ -141,23 +141,27 @@
#endif
#ifdef USERMOD_SMARTNEST
#include "../usermods/smartnest/usermod_smartnest.h"
#include "../usermods/smartnest/usermod_smartnest.h"
#endif
#ifdef USERMOD_AUDIOREACTIVE
#include "../usermods/audioreactive/audio_reactive.h"
#include "../usermods/audioreactive/audio_reactive.h"
#endif
#ifdef USERMOD_ANALOG_CLOCK
#include "../usermods/Analog_Clock/Analog_Clock.h"
#include "../usermods/Analog_Clock/Analog_Clock.h"
#endif
#ifdef USERMOD_PING_PONG_CLOCK
#include "../usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h"
#include "../usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h"
#endif
#ifdef USERMOD_ADS1115
#include "../usermods/ADS1115_v2/usermod_ads1115.h"
#include "../usermods/ADS1115_v2/usermod_ads1115.h"
#endif
#ifdef USERMOD_BOBLIGHT
#include "../usermods/boblight/boblight.h"
#endif
#if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI)
@@ -340,6 +344,10 @@ void registerUsermods()
#ifdef USERMOD_ADS1115
usermods.add(new ADS1115Usermod());
#endif
#ifdef USERMOD_BOBLIGHT
usermods.add(new BobLightUsermod());
#endif
#ifdef SD_ADAPTER
usermods.add(new UsermodSdCard());

View File

@@ -277,7 +277,7 @@ void WLED::setup()
Serial.begin(115200);
Serial.setTimeout(50);
#if defined(WLED_DEBUG) && (defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3))
#if defined(WLED_DEBUG) && defined(ARDUINO_ARCH_ESP32) && (defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) || ARDUINO_USB_CDC_ON_BOOT)
delay(2500); // allow CDC USB serial to initialise
#endif
//Serial.setDebugOutput(true);

View File

@@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2212060
#define VERSION 2212130
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG

View File

@@ -474,6 +474,8 @@ void getSettingsJS(byte subPage, char* dest)
sappend('c',SET_F("ST"),syncToggleReceive);
#ifdef WLED_ENABLE_SIMPLE_UI
sappend('c',SET_F("SU"),simplifiedUI);
#else
oappend(SET_F("toggle('Simple');")); // hide Simplified UI settings
#endif
}