Feature implementation

- #2236
  - #1984
Better PSRAM handling
platformio.ini update
On/Off bus handling
This commit is contained in:
Blaz Kristan 2023-05-28 22:50:19 +02:00
parent 7d84de6690
commit 5a8a8dc292
20 changed files with 2302 additions and 2240 deletions

View File

@ -1,5 +1,26 @@
## WLED changelog
#### Build 2305280
- DDP protocol update (#3193)
- added PCF8574 I2C port expander support for Multi relay usermod
- MQTT multipacket (fragmented) message fix
- new ethernet board: @srg74 Ethernet Shield
- new 2D effects: Soap (#3184) & Octopus & Waving cell (credit @St3P40 https://github.com/80Stepko08)
- various fixes and enhancements
#### Build 2305090
- new ethernet board: @Wladi ABC! WLED Eth
- Battery usermod voltage calculation (#3116)
- custom palette editor (#3164)
- improvements in Dancing Shadows and Tartan effects
- UCS389x support
- switched to NeoPixelBus 2.7.5 (replaced NeoPixelBrightnessBus with NeoPixelBusLg)
- SPI bus clock selection (for LEDs) (#3173)
- DMX mode preset fix (#3134)
- iOS fix for scroll (#3182)
- Wordclock "Norddeutsch" fix (#3161)
- various fixes and enhancements
#### Build 2304090
- updated Arduino ESP8266 core to 4.1.0 (newer compiler)
- updated NeoPixelBus to 2.7.3 (with support for UCS890x chipset)

View File

@ -178,14 +178,12 @@ lib_deps =
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
#TFT_eSPI
#For use SSD1306 OLED display uncomment following
#U8g2@~2.28.8
#U8g2@~2.32.10
#For Dallas sensor uncomment following 2 lines
#OneWire@~2.3.5
#milesburton/DallasTemperature@^3.9.0
#For compatible OLED display uncomment following
#U8g2 #@ ~2.33.15
#For Dallas sensor uncomment following
#OneWire @ ~2.3.7
#For BME280 sensor uncomment following
#BME280@~3.0.0
#BME280 @ ~3.0.0
; adafruit/Adafruit BMP280 Library @ 2.1.0
; adafruit/Adafruit CCS811 Library @ 1.0.4
; adafruit/Adafruit Si7021 Library @ 1.4.0

View File

@ -2805,7 +2805,7 @@ uint16_t mode_bouncing_balls(void) {
// number of balls based on intensity setting to max of 7 (cycles colors)
// non-chosen color is a random color
uint16_t numBalls = (SEGMENT.intensity * (maxNumBalls - 1)) / 255 + 1; // minimum 1 ball
const float gravity = -9.81; // standard value of gravity
const float gravity = -9.81f; // standard value of gravity
const bool hasCol2 = SEGCOLOR(2);
const unsigned long time = millis();
@ -4175,11 +4175,9 @@ static const char _data_FX_MODE_DANCING_SHADOWS[] PROGMEM = "Dancing Shadows@!,#
By Stefan Seegel
*/
uint16_t mode_washing_machine(void) {
float speed = tristate_square8(strip.now >> 7, 90, 15);
float quot = 32.0f - ((float)SEGMENT.speed / 16.0f);
speed /= quot;
int speed = tristate_square8(strip.now >> 7, 90, 15);
SEGENV.step += (speed * 128.0f);
SEGENV.step += (speed * 2048) / (512 - SEGMENT.speed);
for (int i = 0; i < SEGLEN; i++) {
uint8_t col = sin8(((SEGMENT.intensity / 25 + 1) * 255 * i / SEGLEN) + (SEGENV.step >> 7));
@ -4593,7 +4591,7 @@ uint16_t mode_2DBlackHole(void) { // By: Stepko https://editor.soulma
}
SEGMENT.fadeToBlackBy(16 + (SEGMENT.speed>>3)); // create fading trails
float t = (float)(millis())/128; // timebase
unsigned long t = millis()/128; // timebase
// outer stars
for (size_t i = 0; i < 8; i++) {
x = beatsin8(SEGMENT.custom1>>3, 0, cols - 1, 0, ((i % 2) ? 128 : 0) + t * i);

View File

@ -515,7 +515,7 @@ typedef struct Segment {
static uint16_t getUsedSegmentData(void) { return _usedSegmentData; }
static void addUsedSegmentData(int len) { _usedSegmentData += len; }
void set(uint16_t i1, uint16_t i2, uint8_t grp=1, uint8_t spc=0, uint16_t ofs=UINT16_MAX, uint16_t i1Y=0, uint16_t i2Y=1);
void setUp(uint16_t i1, uint16_t i2, uint8_t grp=1, uint8_t spc=0, uint16_t ofs=UINT16_MAX, uint16_t i1Y=0, uint16_t i2Y=1);
bool setColor(uint8_t slot, uint32_t c); //returns true if changed
void setCCT(uint16_t k);
void setOpacity(uint8_t o);

View File

@ -152,12 +152,12 @@ bool Segment::allocateData(size_t len) {
if (data && _dataLen == len) return true; //already allocated
deallocateData();
if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) return false; //not enough memory
// if possible use SPI RAM on ESP32
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
if (psramFound())
data = (byte*) ps_malloc(len);
else
#endif
// do not use SPI RAM on ESP32 since it is slow
//#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
//if (psramFound())
// data = (byte*) ps_malloc(len);
//else
//#endif
data = (byte*) malloc(len);
if (!data) return false; //allocation failed
Segment::addUsedSegmentData(len);
@ -379,7 +379,7 @@ void Segment::handleTransition() {
}
}
void Segment::set(uint16_t i1, uint16_t i2, uint8_t grp, uint8_t spc, uint16_t ofs, uint16_t i1Y, uint16_t i2Y) {
void Segment::setUp(uint16_t i1, uint16_t i2, uint8_t grp, uint8_t spc, uint16_t ofs, uint16_t i1Y, uint16_t i2Y) {
//return if neither bounds nor grouping have changed
bool boundsUnchanged = (start == i1 && stop == i2);
#ifndef WLED_DISABLE_2D
@ -1427,7 +1427,7 @@ Segment& WS2812FX::getSegment(uint8_t id) {
void WS2812FX::setSegment(uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping, uint8_t spacing, uint16_t offset, uint16_t startY, uint16_t stopY) {
if (n >= _segments.size()) return;
_segments[n].set(i1, i2, grouping, spacing, offset, startY, stopY);
_segments[n].setUp(i1, i2, grouping, spacing, offset, startY, stopY);
}
void WS2812FX::restartRuntime() {

View File

@ -438,6 +438,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
getStringFromJson(mqttDeviceTopic, if_mqtt[F("topics")][F("device")], 33); // "wled/test"
getStringFromJson(mqttGroupTopic, if_mqtt[F("topics")][F("group")], 33); // ""
CJSON(retainMqttMsg, if_mqtt[F("rtn")]);
#endif
#ifndef WLED_DISABLE_HUESYNC
@ -885,6 +886,7 @@ void serializeConfig() {
if_mqtt[F("user")] = mqttUser;
if_mqtt[F("pskl")] = strlen(mqttPass);
if_mqtt[F("cid")] = mqttClientID;
if_mqtt[F("rtn")] = retainMqttMsg;
JsonObject if_mqtt_topics = if_mqtt.createNestedObject(F("topics"));
if_mqtt_topics[F("device")] = mqttDeviceTopic;

View File

@ -72,7 +72,7 @@
</div>
<div id="briwrap">
<p class="hd">Brightness</p>
<div class="slider" style="left:24px;">
<div class="slider" style="padding-right:32px;">
<i class="icons slider-icon" onclick="tglTheme()" style="transform: translate(-32px,5px);">&#xe2a6;</i>
<div class="sliderwrap il">
<input id="sliderBri" onchange="setBri()" oninput="updateTrail(this)" max="255" min="1" type="range" value="128" />

View File

@ -965,8 +965,8 @@ function genPalPrevCss(id)
function generateListItemHtml(listName, id, name, clickAction, extraHtml = '', effectPar = '')
{
return `<div class="lstI${id==0?' sticky':''}" data-id="${id}" ${effectPar===''?'':'data-opt="'+effectPar+'"'}onClick="${clickAction}(${id})">`+
`<label class="radio schkl" onclick="event.preventDefault()">`+
return `<div class="lstI${id==0?' sticky':''}" data-id="${id}" ${effectPar===''?'':'data-opt="'+effectPar+'" '}onClick="${clickAction}(${id})">`+
`<label title="(${id})" class="radio schkl" onclick="event.preventDefault()">`+ // (#1984)
`<input type="radio" value="${id}" name="${listName}">`+
`<span class="radiomark"></span>`+
`<div class="lstIcontent">`+

View File

@ -202,6 +202,7 @@ Client ID: <input type="text" name="MQCID" maxlength="40"><br>
Device Topic: <input type="text" name="MD" maxlength="32"><br>
Group Topic: <input type="text" name="MG" maxlength="32"><br>
Publish on button press: <input type="checkbox" name="BM"><br>
Retain brightness & color messages: <input type="checkbox" name="RT"><br>
<i>Reboot required to apply changes. </i><a href="https://kno.wled.ge/interfaces/mqtt/" target="_blank">MQTT info</a>
</div>
<h3>Philips Hue</h3>

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -105,7 +105,7 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
of = offsetAbs;
}
if (stop > start && of > len -1) of = len -1;
seg.set(start, stop, grp, spc, of, startY, stopY);
seg.setUp(start, stop, grp, spc, of, startY, stopY);
if (seg.reset && seg.stop == 0) return true; // segment was deleted & is marked for reset, no need to change anything else
@ -127,36 +127,43 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
JsonArray colarr = elem["col"];
if (!colarr.isNull())
{
for (size_t i = 0; i < 3; i++)
{
int rgbw[] = {0,0,0,0};
bool colValid = false;
JsonArray colX = colarr[i];
if (colX.isNull()) {
byte brgbw[] = {0,0,0,0};
const char* hexCol = colarr[i];
if (hexCol == nullptr) { //Kelvin color temperature (or invalid), e.g 2400
int kelvin = colarr[i] | -1;
if (kelvin < 0) continue;
if (kelvin == 0) seg.setColor(i, 0);
if (kelvin > 0) colorKtoRGB(kelvin, brgbw);
if (seg.getLightCapabilities() & 3) {
// segment has RGB or White
for (size_t i = 0; i < 3; i++)
{
int rgbw[] = {0,0,0,0};
bool colValid = false;
JsonArray colX = colarr[i];
if (colX.isNull()) {
byte brgbw[] = {0,0,0,0};
const char* hexCol = colarr[i];
if (hexCol == nullptr) { //Kelvin color temperature (or invalid), e.g 2400
int kelvin = colarr[i] | -1;
if (kelvin < 0) continue;
if (kelvin == 0) seg.setColor(i, 0);
if (kelvin > 0) colorKtoRGB(kelvin, brgbw);
colValid = true;
} else { //HEX string, e.g. "FFAA00"
colValid = colorFromHexString(brgbw, hexCol);
}
for (size_t c = 0; c < 4; c++) rgbw[c] = brgbw[c];
} else { //Array of ints (RGB or RGBW color), e.g. [255,160,0]
byte sz = colX.size();
if (sz == 0) continue; //do nothing on empty array
copyArray(colX, rgbw, 4);
colValid = true;
} else { //HEX string, e.g. "FFAA00"
colValid = colorFromHexString(brgbw, hexCol);
}
for (size_t c = 0; c < 4; c++) rgbw[c] = brgbw[c];
} else { //Array of ints (RGB or RGBW color), e.g. [255,160,0]
byte sz = colX.size();
if (sz == 0) continue; //do nothing on empty array
copyArray(colX, rgbw, 4);
colValid = true;
if (!colValid) continue;
seg.setColor(i, RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]));
if (seg.mode == FX_MODE_STATIC) strip.trigger(); //instant refresh
}
if (!colValid) continue;
seg.setColor(i, RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]));
if (seg.mode == FX_MODE_STATIC) strip.trigger(); //instant refresh
} else {
// non RGB & non White segment (usually On/Off bus)
seg.setColor(0, ULTRAWHITE);
seg.setColor(1, BLACK);
}
}
@ -199,7 +206,9 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
getVal(elem["ix"], &seg.intensity);
uint8_t pal = seg.palette;
if (getVal(elem["pal"], &pal)) seg.setPalette(pal);
if (seg.getLightCapabilities() & 1) { // ignore palette for White and On/Off segments
if (getVal(elem["pal"], &pal)) seg.setPalette(pal);
}
getVal(elem["c1"], &seg.custom1);
getVal(elem["c2"], &seg.custom2);
@ -709,7 +718,7 @@ void serializeInfo(JsonObject root)
#endif
root[F("freeheap")] = ESP.getFreeHeap();
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
if (psramFound()) root[F("psram")] = ESP.getFreePsram();
#endif
root[F("uptime")] = millis()/1000 + rolloverMillis*4294967;

View File

@ -9,8 +9,8 @@
void parseMQTTBriPayload(char* payload)
{
if (strstr(payload, "ON") || strstr(payload, "on") || strstr(payload, "true")) {bri = briLast; stateUpdated(1);}
else if (strstr(payload, "T" ) || strstr(payload, "t" )) {toggleOnOff(); stateUpdated(1);}
if (strstr(payload, "ON") || strstr(payload, "on") || strstr(payload, "true")) {bri = briLast; stateUpdated(CALL_MODE_DIRECT_CHANGE);}
else if (strstr(payload, "T" ) || strstr(payload, "t" )) {toggleOnOff(); stateUpdated(CALL_MODE_DIRECT_CHANGE);}
else {
uint8_t in = strtoul(payload, NULL, 10);
if (in == 0 && bri > 0) briLast = bri;
@ -142,22 +142,22 @@ void publishMqtt()
sprintf_P(s, PSTR("%u"), bri);
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/g"));
mqtt->publish(subuf, 0, true, s); // retain message
mqtt->publish(subuf, 0, retainMqttMsg, s); // optionally retain message (#2236)
sprintf_P(s, PSTR("#%06X"), (col[3] << 24) | (col[0] << 16) | (col[1] << 8) | (col[2]));
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/c"));
mqtt->publish(subuf, 0, true, s); // retain message
mqtt->publish(subuf, 0, retainMqttMsg, s); // optionally retain message (#2236)
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/status"));
mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT
mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT
char apires[1024]; // allocating 1024 bytes from stack can be risky
char apires[1024]; // allocating 1024 bytes from stack can be risky
XML_response(nullptr, apires);
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/v"));
mqtt->publish(subuf, 0, false, apires); // do not retain message
mqtt->publish(subuf, 0, retainMqttMsg, apires); // optionally retain message (#2236)
#endif
}

View File

@ -152,16 +152,13 @@ int getSignalQuality(int rssi)
//handle Ethernet connection event
void WiFiEvent(WiFiEvent_t event)
{
#ifdef WLED_USE_ETHERNET
char hostname[25];
#endif
switch (event) {
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
case SYSTEM_EVENT_ETH_START:
DEBUG_PRINTLN(F("ETH Started"));
break;
case SYSTEM_EVENT_ETH_CONNECTED:
{
DEBUG_PRINTLN(F("ETH Connected"));
if (!apActive) {
WiFi.disconnect(true);
@ -172,10 +169,12 @@ void WiFiEvent(WiFiEvent_t event)
ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
}
// convert the "serverDescription" into a valid DNS hostname (alphanumeric)
char hostname[64];
prepareHostname(hostname);
ETH.setHostname(hostname);
showWelcomePage = false;
break;
}
case SYSTEM_EVENT_ETH_DISCONNECTED:
DEBUG_PRINTLN(F("ETH Disconnected"));
// This doesn't really affect ethernet per se,

View File

@ -52,7 +52,7 @@ static void doSaveState() {
size_t len = measureJson(*fileDoc) + 1;
DEBUG_PRINTLN(len);
// if possible use SPI RAM on ESP32
#ifdef WLED_USE_PSRAM
#if defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
if (psramFound())
tmpRAMbuffer = (char*) ps_malloc(len);
else

View File

@ -350,6 +350,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
strlcpy(mqttDeviceTopic, request->arg(F("MD")).c_str(), 33);
strlcpy(mqttGroupTopic, request->arg(F("MG")).c_str(), 33);
buttonPublishMqtt = request->hasArg(F("BM"));
retainMqttMsg = request->hasArg(F("RT"));
#endif
#ifndef WLED_DISABLE_HUESYNC
@ -788,7 +789,7 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
if (pos > 0) {
spcI = getNumVal(&req, pos);
}
selseg.set(startI, stopI, grpI, spcI, UINT16_MAX, startY, stopY);
selseg.setUp(startI, stopI, grpI, spcI, UINT16_MAX, startY, stopY);
pos = req.indexOf(F("RV=")); //Segment reverse
if (pos > 0) selseg.reverse = req.charAt(pos+3) != '0';

View File

@ -362,7 +362,7 @@ void handleNotifications()
uint16_t stopY = 1, stop = (udpIn[3+ofs] << 8 | udpIn[4+ofs]);
uint16_t offset = (udpIn[7+ofs] << 8 | udpIn[8+ofs]);
if (!receiveSegmentOptions) {
selseg.set(start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY);
selseg.setUp(start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY);
continue;
}
//for (size_t j = 1; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, on, reversed; ignore selected
@ -396,9 +396,9 @@ void handleNotifications()
stopY = (udpIn[34+ofs] << 8 | udpIn[35+ofs]);
}
if (receiveSegmentBounds) {
selseg.set(start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY);
selseg.setUp(start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY);
} else {
selseg.set(selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY);
selseg.setUp(selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY);
}
}
stateChanged = true;

View File

@ -188,12 +188,11 @@ void WLED::loop()
DEBUG_PRINT(F("Runtime: ")); DEBUG_PRINTLN(millis());
DEBUG_PRINT(F("Unix time: ")); toki.printTime(toki.getTime());
DEBUG_PRINT(F("Free heap: ")); DEBUG_PRINTLN(ESP.getFreeHeap());
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
if (psramFound()) {
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
DEBUG_PRINT(F("Free PSRAM: ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
} else
DEBUG_PRINTLN(F("No PSRAM"));
}
#endif
DEBUG_PRINT(F("Wifi state: ")); DEBUG_PRINTLN(WiFi.status());
@ -321,25 +320,33 @@ void WLED::setup()
#endif
DEBUG_PRINT(F("heap ")); DEBUG_PRINTLN(ESP.getFreeHeap());
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
#if defined(CONFIG_IDF_TARGET_ESP32S3)
// S3: reserve GPIO 33-37 for "octal" PSRAM
managed_pin_type pins[] = { {33, true}, {34, true}, {35, true}, {36, true}, {37, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
// S2: reserve GPIO 26-32 for PSRAM
managed_pin_type pins[] = { {26, true}, {27, true}, {28, true}, {29, true}, {30, true}, {31, true}, {32, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
// C3: reserve GPIO 12-17 for PSRAM
managed_pin_type pins[] = { {12, true}, {13, true}, {14, true}, {15, true}, {16, true}, {17, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#else
// GPIO16/GPIO17 reserved for SPI RAM
managed_pin_type pins[] = { {16, true}, {17, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#endif
#if defined(WLED_USE_PSRAM)
if (psramFound()) {
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32S3)
// GPIO16/GPIO17 reserved for SPI RAM
managed_pin_type pins[2] = { {16, true}, {17, true} };
pinManager.allocateMultiplePins(pins, 2, PinOwner::SPI_RAM);
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
// S3: add GPIO 33-37 for "octal" PSRAM
managed_pin_type pins[5] = { {33, true}, {34, true}, {35, true}, {36, true}, {37, true} };
pinManager.allocateMultiplePins(pins, 5, PinOwner::SPI_RAM);
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
DEBUG_PRINT(F("Free PSRAM : ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
}
#else
DEBUG_PRINTLN(F("PSRAM not used."));
#endif
#endif
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
DEBUG_PRINT(F("Free PSRAM : ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
} else
DEBUG_PRINTLN(F("No PSRAM found."));
#endif
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && !defined(WLED_USE_PSRAM)
DEBUG_PRINTLN(F("PSRAM not used."));
#endif
//DEBUG_PRINT(F("LEDs inited. heap usage ~"));
//DEBUG_PRINTLN(heapPreAlloc - ESP.getFreeHeap());
@ -429,8 +436,6 @@ void WLED::setup()
if (Serial.available() > 0 && Serial.peek() == 'I') handleImprovPacket();
#endif
strip.service(); // why?
#ifndef WLED_DISABLE_OTA
if (aOtaEnabled) {
ArduinoOTA.onStart([]() {
@ -481,6 +486,8 @@ void WLED::beginStrip()
else if (bri == 0) bri = 128;
} else {
briLast = briS; bri = 0;
strip.fill(BLACK);
strip.show();
}
if (bootPreset > 0) {
applyPreset(bootPreset, CALL_MODE_INIT);
@ -591,7 +598,7 @@ bool WLED::initEthernet()
return false;
}
/*
/*
For LAN8720 the most correct way is to perform clean reset each time before init
applying LOW to power or nRST pin for at least 100 us (please refer to datasheet, page 59)
ESP_IDF > V4 implements it (150 us, lan87xx_reset_hw(esp_eth_phy_t *phy) function in
@ -718,8 +725,6 @@ void WLED::initInterfaces()
ArduinoOTA.begin();
#endif
strip.service();
// Set up mDNS responder:
if (strlen(cmDNS) > 0) {
// "end" must be called before "begin" is called a 2nd time

View File

@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2305090
#define VERSION 2305280
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG
@ -145,7 +145,7 @@
// The following is a construct to enable code to compile without it.
// There is a code thet will still not use PSRAM though:
// AsyncJsonResponse is a derived class that implements DynamicJsonDocument (AsyncJson-v6.h)
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
struct PSRAM_Allocator {
void* allocate(size_t size) {
if (psramFound()) return ps_malloc(size); // use PSRAM if it exists
@ -421,6 +421,7 @@ WLED_GLOBAL char mqttUser[41] _INIT(""); // optional: username
WLED_GLOBAL char mqttPass[65] _INIT(""); // optional: password for MQTT auth
WLED_GLOBAL char mqttClientID[41] _INIT(""); // override the client ID
WLED_GLOBAL uint16_t mqttPort _INIT(1883);
WLED_GLOBAL bool retainMqttMsg _INIT(false); // retain brightness and color
#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
#else
#define WLED_MQTT_CONNECTED false

View File

@ -212,7 +212,7 @@ void appendGPIOinfo() {
//Note: Using pin 3 (RX) disables Adalight / Serial JSON
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(CONFIG_IDF_TARGET_ESP32C3)
if (psramFound()) oappend(SET_F(",16,17")); // GPIO16 & GPIO17 reserved for SPI RAM on ESP32 (not on S2, S3 or C3)
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
@ -561,6 +561,7 @@ void getSettingsJS(byte subPage, char* dest)
sappends('s',"MD",mqttDeviceTopic);
sappends('s',SET_F("MG"),mqttGroupTopic);
sappend('c',SET_F("BM"),buttonPublishMqtt);
sappend('c',SET_F("RT"),retainMqttMsg);
#else
oappend(SET_F("toggle('MQTT');")); // hide MQTT settings
#endif