Usermod config info & data.

This commit is contained in:
Blaz Kristan 2022-06-11 18:55:23 +02:00
parent bd45c67528
commit 8c759cb65a
7 changed files with 219 additions and 120 deletions

View File

@ -1185,6 +1185,28 @@ class AudioReactive : public Usermod {
} }
void appendConfigData() {
oappend(SET_F("dd=addDropdown('AudioReactive','digitalmic:type');"));
oappend(SET_F("addOption(dd,'Generic Analog',0);"));
oappend(SET_F("addOption(dd,'Generic I2S',1);"));
oappend(SET_F("addOption(dd,'ES7243',2);"));
oappend(SET_F("addOption(dd,'SPH0654',3);"));
oappend(SET_F("addOption(dd,'Generic I2S with Mclk',4);"));
oappend(SET_F("addOption(dd,'Generic I2S PDM',5);"));
oappend(SET_F("dd=addDropdown('AudioReactive','cfg:AGC');"));
oappend(SET_F("addOption(dd,'Off',0);"));
oappend(SET_F("addOption(dd,'Normal',1);"));
oappend(SET_F("addOption(dd,'Vivid',2);"));
oappend(SET_F("addOption(dd,'Lazy',3);"));
oappend(SET_F("addInfo('AudioReactive:digitalmic:pin[]',0,'I2S SD');"));
oappend(SET_F("addInfo('AudioReactive:digitalmic:pin[]',1,'I2S WS');"));
oappend(SET_F("addInfo('AudioReactive:digitalmic:pin[]',2,'I2S SCK');"));
oappend(SET_F("addInfo('AudioReactive:digitalmic:pin[]',3,'I2S Master CLK');"));
oappend(SET_F("addInfo('AudioReactive:digitalmic:pin[]',4,'I2C SDA');"));
oappend(SET_F("addInfo('AudioReactive:digitalmic:pin[]',5,'I2C SCL');"));
}
/* /*
* handleOverlayDraw() is called just before every show() (LED strip update frame) after effects have set the colors. * handleOverlayDraw() is called just before every show() (LED strip update frame) after effects have set the colors.
* Use this to blank out some LEDs or set them to a different color regardless of the set effect mode. * Use this to blank out some LEDs or set them to a different color regardless of the set effect mode.

View File

@ -941,6 +941,23 @@ class FourLineDisplayUsermod : public Usermod {
// if (!initDone) return; // prevent crash on boot applyPreset() // if (!initDone) return; // prevent crash on boot applyPreset()
//} //}
void appendConfigData() {
oappend(SET_F("dd=addDropdown('4LineDisplay','type');"));
oappend(SET_F("addOption(dd,'None',0);"));
oappend(SET_F("addOption(dd,'SSD1306',1);"));
oappend(SET_F("addOption(dd,'SH1106',2);"));
oappend(SET_F("addOption(dd,'SSD1306 128x64',3);"));
oappend(SET_F("addOption(dd,'SSD1305',4);"));
oappend(SET_F("addOption(dd,'SSD1305 128x64',5);"));
oappend(SET_F("addOption(dd,'SSD1306 SPI',6);"));
oappend(SET_F("addOption(dd,'SSD1306 SPI 128x64',7);"));
oappend(SET_F("addInfo('4LineDisplay:pin[]',0,'I2C/SPI CLK');"));
oappend(SET_F("addInfo('4LineDisplay:pin[]',1,'I2C/SPI DTA');"));
oappend(SET_F("addInfo('4LineDisplay:pin[]',2,'SPI CS');"));
oappend(SET_F("addInfo('4LineDisplay:pin[]',3,'SPI DC');"));
oappend(SET_F("addInfo('4LineDisplay:pin[]',4,'SPI RST');"));
}
/* /*
* addToConfig() can be used to add custom persistent settings to the cfg.json file in the "um" (usermod) object. * addToConfig() can be used to add custom persistent settings to the cfg.json file in the "um" (usermod) object.
* It will be called by WLED when settings are actually saved (for example, LED settings are saved) * It will be called by WLED when settings are actually saved (for example, LED settings are saved)
@ -960,9 +977,7 @@ class FourLineDisplayUsermod : public Usermod {
top[FPSTR(_enabled)] = enabled; top[FPSTR(_enabled)] = enabled;
JsonArray io_pin = top.createNestedArray("pin"); JsonArray io_pin = top.createNestedArray("pin");
for (byte i=0; i<5; i++) io_pin.add(ioPin[i]); for (byte i=0; i<5; i++) io_pin.add(ioPin[i]);
top["help4Pins"] = F("Clk,Data,CS,DC,RST"); // help for Settings page
top["type"] = type; top["type"] = type;
top["help4Type"] = F("1=SSD1306,2=SH1106,3=SSD1306_128x64,4=SSD1305,5=SSD1305_128x64,6=SSD1306_SPI,7=SSD1306_SPI_128x64"); // help for Settings page
top[FPSTR(_flip)] = (bool) flip; top[FPSTR(_flip)] = (bool) flip;
top[FPSTR(_contrast)] = contrast; top[FPSTR(_contrast)] = contrast;
top[FPSTR(_contrastFix)] = (bool) contrastFix; top[FPSTR(_contrastFix)] = (bool) contrastFix;

View File

@ -100,6 +100,46 @@
urows += `<input type="${t==="int"?"number":t}" name="${k}:${f}${a?"[]":""}" ${c} oninput="check(this,'${k.substr(k.indexOf(":")+1)}')"><br>`; urows += `<input type="${t==="int"?"number":t}" name="${k}:${f}${a?"[]":""}" ${c} oninput="check(this,'${k.substr(k.indexOf(":")+1)}')"><br>`;
} }
} }
// https://stackoverflow.com/questions/39729741/javascript-change-input-text-to-select-option
function addDropdown(um,fld) {
let sel = d.createElement('select');
let arr = d.getElementsByName(um+":"+fld);
let inp = arr[1]; // assume 1st field to be hidden (type)
if (inp && inp.tagName === "INPUT" && (inp.type === "text" || inp.type === "number")) { // may also use nodeName
let v = inp.value;
let n = inp.name;
// copy the existing input element's attributes to the new select element
for (var i = 0; i < inp.attributes.length; ++ i) {
var att = inp.attributes[i];
// type and value don't apply, so skip them
// ** you might also want to skip style, or others -- modify as needed **
if (att.name != 'type' && att.name != 'value' && att.name != 'class' && att.name != 'style') {
sel.setAttribute(att.name, att.value);
}
}
sel.setAttribute("data-val", v);
// finally, replace the old input element with the new select element
inp.parentElement.replaceChild(sel, inp);
return obj;
}
return null;
}
function addOption(sel,txt,val) {
if (sel===null) return;
let opt = d.createElement("option");
opt.value = val;
opt.text = txt;
sel.appendChild(opt);
for (let i=0; i<sel.childNodes.length; i++) {
let c = sel.childNodes[i];
if (c.value == sel.dataset.val) sel.selectedIndex = i;
}
}
// https://stackoverflow.com/questions/26440494/insert-text-after-this-input-element-with-javascript
function addInfo(name,el,txt) {
let obj = d.getElementsByName(name);
if (obj[el]) obj[el].insertAdjacentHTML('afterend', '&nbsp;'+txt);
}
function ldS() { function ldS() {
var url = (loc?`http://${locip}`:'') + '/cfg.json'; var url = (loc?`http://${locip}`:'') + '/cfg.json';
fetch(url, { fetch(url, {

View File

@ -255,12 +255,13 @@ class Usermod {
public: public:
Usermod() { um_data = nullptr; } Usermod() { um_data = nullptr; }
virtual ~Usermod() { if (um_data) delete um_data; } virtual ~Usermod() { if (um_data) delete um_data; }
virtual void loop() {} virtual void setup() = 0; // pure virtual, has to be overriden
virtual void loop() = 0; // pure virtual, has to be overriden
virtual void handleOverlayDraw() {} virtual void handleOverlayDraw() {}
virtual bool handleButton(uint8_t b) { return false; } virtual bool handleButton(uint8_t b) { return false; }
virtual bool getUMData(um_data_t **data) { if (data) *data = nullptr; return false; }; virtual bool getUMData(um_data_t **data) { if (data) *data = nullptr; return false; };
virtual void setup() {}
virtual void connected() {} virtual void connected() {}
virtual void appendConfigData() {}
virtual void addToJsonState(JsonObject& obj) {} virtual void addToJsonState(JsonObject& obj) {}
virtual void addToJsonInfo(JsonObject& obj) {} virtual void addToJsonInfo(JsonObject& obj) {}
virtual void readFromJsonState(JsonObject& obj) {} virtual void readFromJsonState(JsonObject& obj) {}
@ -284,6 +285,7 @@ class UsermodManager {
bool getUMData(um_data_t **um_data, uint8_t mod_id = USERMOD_ID_RESERVED); // USERMOD_ID_RESERVED will poll all usermods bool getUMData(um_data_t **um_data, uint8_t mod_id = USERMOD_ID_RESERVED); // USERMOD_ID_RESERVED will poll all usermods
void setup(); void setup();
void connected(); void connected();
void appendConfigData();
void addToJsonState(JsonObject& obj); void addToJsonState(JsonObject& obj);
void addToJsonInfo(JsonObject& obj); void addToJsonInfo(JsonObject& obj);
void readFromJsonState(JsonObject& obj); void readFromJsonState(JsonObject& obj);

View File

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

View File

@ -4,8 +4,11 @@
*/ */
//Usermod Manager internals //Usermod Manager internals
void UsermodManager::setup() { for (byte i = 0; i < numMods; i++) ums[i]->setup(); }
void UsermodManager::connected() { for (byte i = 0; i < numMods; i++) ums[i]->connected(); }
void UsermodManager::loop() { for (byte i = 0; i < numMods; i++) ums[i]->loop(); } void UsermodManager::loop() { for (byte i = 0; i < numMods; i++) ums[i]->loop(); }
void UsermodManager::handleOverlayDraw() { for (byte i = 0; i < numMods; i++) ums[i]->handleOverlayDraw(); } void UsermodManager::handleOverlayDraw() { for (byte i = 0; i < numMods; i++) ums[i]->handleOverlayDraw(); }
void UsermodManager::appendConfigData() { for (byte i = 0; i < numMods; i++) ums[i]->appendConfigData(); }
bool UsermodManager::handleButton(uint8_t b) { bool UsermodManager::handleButton(uint8_t b) {
bool overrideIO = false; bool overrideIO = false;
for (byte i = 0; i < numMods; i++) { for (byte i = 0; i < numMods; i++) {
@ -20,10 +23,6 @@ bool UsermodManager::getUMData(um_data_t **data, uint8_t mod_id) {
} }
return false; return false;
} }
void UsermodManager::setup() { for (byte i = 0; i < numMods; i++) ums[i]->setup(); }
void UsermodManager::connected() { for (byte i = 0; i < numMods; i++) ums[i]->connected(); }
void UsermodManager::addToJsonState(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->addToJsonState(obj); } void UsermodManager::addToJsonState(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->addToJsonState(obj); }
void UsermodManager::addToJsonInfo(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->addToJsonInfo(obj); } void UsermodManager::addToJsonInfo(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->addToJsonInfo(obj); }
void UsermodManager::readFromJsonState(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->readFromJsonState(obj); } void UsermodManager::readFromJsonState(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->readFromJsonState(obj); }

View File

@ -615,6 +615,7 @@ void getSettingsJS(byte subPage, char* dest)
oappend(SET_F("numM=")); oappend(SET_F("numM="));
oappendi(usermods.getModCount()); oappendi(usermods.getModCount());
oappend(";"); oappend(";");
usermods.appendConfigData();
} }
if (subPage == 9) // update if (subPage == 9) // update