From 7fe0123c637650eb3bc4deeff738ea4bd81c033c Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Wed, 23 Aug 2023 18:13:15 +0200 Subject: [PATCH 001/108] modified: wled00/FX.cpp modified: wled00/FX.h --- wled00/FX.cpp | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ wled00/FX.h | 4 ++- 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index dc92c216..47545c5a 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1915,6 +1915,96 @@ uint16_t mode_pride_2015(void) { } static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!;;"; +////////////////////// +// JBL // +////////////////////// + + +uint16_t pos = 0; +uint8_t hue = 0; +int hueDelay = 0; + +uint8_t red(uint32_t c) +{ + return (c >> 16); +} +uint8_t green(uint32_t c) +{ + return (c >> 8); +} +uint8_t blue(uint32_t c) +{ + return (c); +} + +uint16_t mode_jbl() +{ + + um_data_t *um_data; + if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { + // add support for no audio + um_data = simulateSound(SEGMENT.soundSim); + } + uint8_t samplePeak = *(uint8_t*)um_data->u_data[3]; + uint8_t *maxVol = (uint8_t*)um_data->u_data[6]; + uint8_t *binNum = (uint8_t*)um_data->u_data[7]; + float volumeSmth = *(float*) um_data->u_data[0]; + + + + + hueDelay++; + + if (hue > 254) + { + hue = 0; + } + + if (hueDelay > SEGMENT.custom1) + { + hueDelay = 0; + hue++; + } + + float speed = 0; + + uint16_t counter = 0; + + if (volumeSmth * SEGMENT.intensity > (255 - SEGMENT.speed)) + { + speed = 1000; + } + else + { + speed = 20; + }; + + pos += speed; + + counter = pos; + counter = counter >> 8; + + for (uint16_t i = 0; i < SEGLEN; i++) + { + uint8_t colorIndex = (i * 255 / SEGLEN) - counter; + + uint32_t paletteColor = SEGMENT.color_from_palette(colorIndex, false, true, 255); + + uint8_t r = red(paletteColor); + uint8_t g = green(paletteColor); + uint8_t b = blue(paletteColor); + + uint8_t activeColor = max(r, max(g, b)); + + CRGB rgb(CHSV(hue, 255, activeColor)); + + SEGMENT.setPixelColor(i, rgb.r, rgb.g, rgb.b); + }; + + return FRAMETIME; +} // mode_jbl() + +static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Sensitivity 1,Sensivity 2,Color change speed;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; //eight colored dots, weaving in and out of sync with each other uint16_t mode_juggle(void) { @@ -8060,6 +8150,7 @@ void WS2812FX::setupEffectData() { // --- 1D audio effects --- addEffect(FX_MODE_PIXELS, &mode_pixels, _data_FX_MODE_PIXELS); addEffect(FX_MODE_PIXELWAVE, &mode_pixelwave, _data_FX_MODE_PIXELWAVE); + addEffect(FX_MODE_JBL, &mode_jbl, _data_FX_MODE_JBL); addEffect(FX_MODE_JUGGLES, &mode_juggles, _data_FX_MODE_JUGGLES); addEffect(FX_MODE_MATRIPIX, &mode_matripix, _data_FX_MODE_MATRIPIX); addEffect(FX_MODE_GRAVIMETER, &mode_gravimeter, _data_FX_MODE_GRAVIMETER); diff --git a/wled00/FX.h b/wled00/FX.h index 1175157e..c68c2694 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -335,7 +335,9 @@ void strip_wait_until_idle(String whoCalledMe); // WLEDMM implemented in FX_fcn. #define FX_MODE_2DAKEMI 186 #define FX_MODE_ARTIFX 187 //WLEDMM ARTIFX -#define MODE_COUNT 188 +#define FX_MODE_JBL 188 + +#define MODE_COUNT 189 typedef enum mapping1D2D { M12_Pixels = 0, From 05f5237971581d3ea9e9900e4061c8984d88488b Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Wed, 23 Aug 2023 21:37:35 +0200 Subject: [PATCH 002/108] modified: wled00/FX.cpp --- wled00/FX.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 47545c5a..7bbd3e06 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1960,7 +1960,7 @@ uint16_t mode_jbl() hue = 0; } - if (hueDelay > SEGMENT.custom1) + if (hueDelay > SEGMENT.speed) { hueDelay = 0; hue++; @@ -1970,7 +1970,7 @@ uint16_t mode_jbl() uint16_t counter = 0; - if (volumeSmth * SEGMENT.intensity > (255 - SEGMENT.speed)) + if (volumeSmth * 2 > (255 - SEGMENT.intensity)) { speed = 1000; } @@ -2004,7 +2004,7 @@ uint16_t mode_jbl() return FRAMETIME; } // mode_jbl() -static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Sensitivity 1,Sensivity 2,Color change speed;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; +static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Sensitivity 1,Sensivity 2;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; //eight colored dots, weaving in and out of sync with each other uint16_t mode_juggle(void) { From d64b6b3511de98daaf472de9409d81e4306f4f2c Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Wed, 23 Aug 2023 21:46:35 +0200 Subject: [PATCH 003/108] fixed slider names --- wled00/FX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 7bbd3e06..c7216be3 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -2004,7 +2004,7 @@ uint16_t mode_jbl() return FRAMETIME; } // mode_jbl() -static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Sensitivity 1,Sensivity 2;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; +static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Color change speed,Sensivity;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; //eight colored dots, weaving in and out of sync with each other uint16_t mode_juggle(void) { From 1d61351903b8344f895254cdaada36c37e2690b7 Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Thu, 24 Aug 2023 20:19:41 +0200 Subject: [PATCH 004/108] Code improvement changes --- wled00/FX.cpp | 70 +++++++++++++++++++-------------------------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index c7216be3..5811e687 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1920,25 +1920,16 @@ static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!;;"; ////////////////////// -uint16_t pos = 0; -uint8_t hue = 0; -int hueDelay = 0; -uint8_t red(uint32_t c) -{ - return (c >> 16); -} -uint8_t green(uint32_t c) -{ - return (c >> 8); -} -uint8_t blue(uint32_t c) -{ - return (c); -} +uint16_t mode_jbl() { -uint16_t mode_jbl() -{ + static uint16_t mode_jbl_pos = 0; + + /* + * use of persistent variables: + * aux0: hueDelay + * aux1: hue + */ um_data_t *um_data; if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { @@ -1950,53 +1941,44 @@ uint16_t mode_jbl() uint8_t *binNum = (uint8_t*)um_data->u_data[7]; float volumeSmth = *(float*) um_data->u_data[0]; + SEGENV.aux0++; - - - hueDelay++; - - if (hue > 254) - { - hue = 0; + if (SEGENV.aux1 > 254) { + SEGENV.aux1 = 0; } - if (hueDelay > SEGMENT.speed) - { - hueDelay = 0; - hue++; + if (SEGENV.aux0 > SEGMENT.speed) { + SEGENV.aux1 = 0; + SEGENV.aux0++; } - float speed = 0; + uint_fast32_t speed = 0; uint16_t counter = 0; - if (volumeSmth * 2 > (255 - SEGMENT.intensity)) - { + if (volumeSmth * 2 > (255 - SEGMENT.intensity)) { speed = 1000; - } - else - { + } else { speed = 20; }; - pos += speed; + mode_jbl_pos += speed; - counter = pos; - counter = counter >> 8; + counter = mode_jbl_pos >> 8; + + for (uint16_t i = 0; i < SEGLEN; i++) { - for (uint16_t i = 0; i < SEGLEN; i++) - { uint8_t colorIndex = (i * 255 / SEGLEN) - counter; uint32_t paletteColor = SEGMENT.color_from_palette(colorIndex, false, true, 255); - uint8_t r = red(paletteColor); - uint8_t g = green(paletteColor); - uint8_t b = blue(paletteColor); + uint8_t r = R(paletteColor); + uint8_t g = G(paletteColor); + uint8_t b = B(paletteColor); uint8_t activeColor = max(r, max(g, b)); - CRGB rgb(CHSV(hue, 255, activeColor)); + CRGB rgb(CHSV(SEGENV.aux1, 255, activeColor)); SEGMENT.setPixelColor(i, rgb.r, rgb.g, rgb.b); }; @@ -2031,7 +2013,7 @@ static const char _data_FX_MODE_JUGGLE[] PROGMEM = "Juggle@!,Trail;;!;;sx=64,ix= uint16_t mode_palette() { - uint16_t counter = 0; + uint16_t counter = 0; if (SEGMENT.speed != 0) { counter = (strip.now * ((SEGMENT.speed >> 3) +1)) & 0xFFFF; From 7f0191bd118b7a1fae6b130e87475095f4cd7e30 Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Thu, 24 Aug 2023 23:47:57 +0200 Subject: [PATCH 005/108] Minor code modifications/clean up --- wled00/FX.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 5811e687..1e74b4c7 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1923,12 +1923,18 @@ static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!;;"; uint16_t mode_jbl() { - static uint16_t mode_jbl_pos = 0; - + if (SEGENV.call == 0) { + SEGMENT.fill(BLACK); // clear LEDs + SEGENV.aux0 = 0; + SEGENV.aux1 = 0; + SEGENV.step = 0; + } + /* * use of persistent variables: * aux0: hueDelay * aux1: hue + * step: pos */ um_data_t *um_data; @@ -1962,9 +1968,9 @@ uint16_t mode_jbl() { speed = 20; }; - mode_jbl_pos += speed; + SEGENV.step += speed; - counter = mode_jbl_pos >> 8; + counter = SEGENV.step >> 8; for (uint16_t i = 0; i < SEGLEN; i++) { From 350e20544dfb6b40c750e898ed6174664727660b Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Fri, 25 Aug 2023 00:04:05 +0200 Subject: [PATCH 006/108] Fixing effect speed issues --- .vscode/extensions.json | 10 ---------- wled00/FX.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 14 deletions(-) delete mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 080e70d0..00000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "platformio.platformio-ide" - ], - "unwantedRecommendations": [ - "ms-vscode.cpptools-extension-pack" - ] -} diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 1e74b4c7..757e618b 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1953,7 +1953,7 @@ uint16_t mode_jbl() { SEGENV.aux1 = 0; } - if (SEGENV.aux0 > SEGMENT.speed) { + if (SEGENV.aux0 > SEGMENT.custom1) { SEGENV.aux1 = 0; SEGENV.aux0++; } @@ -1963,9 +1963,9 @@ uint16_t mode_jbl() { uint16_t counter = 0; if (volumeSmth * 2 > (255 - SEGMENT.intensity)) { - speed = 1000; + speed = SEGMENT.speed * 50; } else { - speed = 20; + speed = SEGMENT.speed; }; SEGENV.step += speed; @@ -1992,7 +1992,7 @@ uint16_t mode_jbl() { return FRAMETIME; } // mode_jbl() -static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Color change speed,Sensivity;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; +static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Effect speed,Sensivity,Color change speed;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; //eight colored dots, weaving in and out of sync with each other uint16_t mode_juggle(void) { From 3499c38fed243409a1840adf156230a8b8f94e74 Mon Sep 17 00:00:00 2001 From: tonyxforce <77063724+tonyxforce@users.noreply.github.com> Date: Fri, 25 Aug 2023 01:03:14 +0200 Subject: [PATCH 007/108] Fix deleted file --- .vscode/extensions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..080e70d0 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} From 6a37f814653b820d0be254455273198cdf068db6 Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Fri, 25 Aug 2023 01:03:40 +0200 Subject: [PATCH 008/108] Renamed the effect, biased the sliders, so it looks best with all sliders in the middle, added option to change the effect speed multiplier --- wled00/FX.cpp | 18 +++++++++--------- wled00/FX.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 757e618b..737e97ee 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1916,12 +1916,12 @@ uint16_t mode_pride_2015(void) { static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!;;"; ////////////////////// -// JBL // +// PARTYBOX // ////////////////////// -uint16_t mode_jbl() { +uint16_t mode_partybox() { if (SEGENV.call == 0) { SEGMENT.fill(BLACK); // clear LEDs @@ -1953,9 +1953,9 @@ uint16_t mode_jbl() { SEGENV.aux1 = 0; } - if (SEGENV.aux0 > SEGMENT.custom1) { - SEGENV.aux1 = 0; - SEGENV.aux0++; + if (SEGENV.aux0 > map(255-SEGMENT.custom1, 0, 255, 0, 140)) { + SEGENV.aux0 = 0; + SEGENV.aux1++; } uint_fast32_t speed = 0; @@ -1963,7 +1963,7 @@ uint16_t mode_jbl() { uint16_t counter = 0; if (volumeSmth * 2 > (255 - SEGMENT.intensity)) { - speed = SEGMENT.speed * 50; + speed = SEGMENT.speed * map(SEGMENT.custom2, 0, 255, 0, 100); } else { speed = SEGMENT.speed; }; @@ -1990,9 +1990,9 @@ uint16_t mode_jbl() { }; return FRAMETIME; -} // mode_jbl() +} // mode_partybox() -static const char _data_FX_MODE_JBL[] PROGMEM = "JBL@Effect speed,Sensivity,Color change speed;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; +static const char _data_FX_MODE_PARTYBOX[] PROGMEM = "partybox@Effect speed,Sensivity,Color change speed,Effect speed active multiplier;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; //eight colored dots, weaving in and out of sync with each other uint16_t mode_juggle(void) { @@ -8138,7 +8138,7 @@ void WS2812FX::setupEffectData() { // --- 1D audio effects --- addEffect(FX_MODE_PIXELS, &mode_pixels, _data_FX_MODE_PIXELS); addEffect(FX_MODE_PIXELWAVE, &mode_pixelwave, _data_FX_MODE_PIXELWAVE); - addEffect(FX_MODE_JBL, &mode_jbl, _data_FX_MODE_JBL); + addEffect(FX_MODE_PARTYBOX, &mode_partybox, _data_FX_MODE_PARTYBOX); addEffect(FX_MODE_JUGGLES, &mode_juggles, _data_FX_MODE_JUGGLES); addEffect(FX_MODE_MATRIPIX, &mode_matripix, _data_FX_MODE_MATRIPIX); addEffect(FX_MODE_GRAVIMETER, &mode_gravimeter, _data_FX_MODE_GRAVIMETER); diff --git a/wled00/FX.h b/wled00/FX.h index c68c2694..c9de50cd 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -335,7 +335,7 @@ void strip_wait_until_idle(String whoCalledMe); // WLEDMM implemented in FX_fcn. #define FX_MODE_2DAKEMI 186 #define FX_MODE_ARTIFX 187 //WLEDMM ARTIFX -#define FX_MODE_JBL 188 +#define FX_MODE_PARTYBOX 188 #define MODE_COUNT 189 From e5ca80c035aa58ab4d067bb0770dcfc5fc951221 Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Fri, 25 Aug 2023 01:18:05 +0200 Subject: [PATCH 009/108] Bias value changes --- wled00/FX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 737e97ee..aef9f69b 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1953,7 +1953,7 @@ uint16_t mode_partybox() { SEGENV.aux1 = 0; } - if (SEGENV.aux0 > map(255-SEGMENT.custom1, 0, 255, 0, 140)) { + if (SEGENV.aux0 > map(SEGMENT.custom1, 0, 255, 0, 14)) { SEGENV.aux0 = 0; SEGENV.aux1++; } From c07a8ae263eb451ceaf36139bc60ad4e7384ba03 Mon Sep 17 00:00:00 2001 From: tonyxforce Date: Fri, 25 Aug 2023 20:26:16 +0200 Subject: [PATCH 010/108] Fixed possible naming legal issues --- wled00/FX.cpp | 10 +++++----- wled00/FX.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index aef9f69b..96a2726d 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1916,12 +1916,12 @@ uint16_t mode_pride_2015(void) { static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!;;"; ////////////////////// -// PARTYBOX // +// PARTYJERK // ////////////////////// -uint16_t mode_partybox() { +uint16_t mode_partyjerk() { if (SEGENV.call == 0) { SEGMENT.fill(BLACK); // clear LEDs @@ -1990,9 +1990,9 @@ uint16_t mode_partybox() { }; return FRAMETIME; -} // mode_partybox() +} // mode_partyjerk() -static const char _data_FX_MODE_PARTYBOX[] PROGMEM = "partybox@Effect speed,Sensivity,Color change speed,Effect speed active multiplier;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; +static const char _data_FX_MODE_PARTYJERK[] PROGMEM = "Party jerk@Effect speed,Sensivity,Color change speed,Effect speed active multiplier;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; //eight colored dots, weaving in and out of sync with each other uint16_t mode_juggle(void) { @@ -8138,7 +8138,7 @@ void WS2812FX::setupEffectData() { // --- 1D audio effects --- addEffect(FX_MODE_PIXELS, &mode_pixels, _data_FX_MODE_PIXELS); addEffect(FX_MODE_PIXELWAVE, &mode_pixelwave, _data_FX_MODE_PIXELWAVE); - addEffect(FX_MODE_PARTYBOX, &mode_partybox, _data_FX_MODE_PARTYBOX); + addEffect(FX_MODE_PARTYJERK, &mode_partyjerk, _data_FX_MODE_PARTYJERK); addEffect(FX_MODE_JUGGLES, &mode_juggles, _data_FX_MODE_JUGGLES); addEffect(FX_MODE_MATRIPIX, &mode_matripix, _data_FX_MODE_MATRIPIX); addEffect(FX_MODE_GRAVIMETER, &mode_gravimeter, _data_FX_MODE_GRAVIMETER); diff --git a/wled00/FX.h b/wled00/FX.h index c9de50cd..ff9ee811 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -335,7 +335,7 @@ void strip_wait_until_idle(String whoCalledMe); // WLEDMM implemented in FX_fcn. #define FX_MODE_2DAKEMI 186 #define FX_MODE_ARTIFX 187 //WLEDMM ARTIFX -#define FX_MODE_PARTYBOX 188 +#define FX_MODE_PARTYJERK 188 #define MODE_COUNT 189 From e6513fef88bb243514176e458c6f06432d1defe8 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Wed, 15 Nov 2023 22:51:03 +0100 Subject: [PATCH 011/108] (WIP) align platformio build env with upstream * espressif32@5.2.0 --> espressif32@5.3.0 * pxmagic.htm added in cdata.js * minor updates in style.css * align some constants and definitions (wled.h, const.h) * npm run build --- CHANGELOG.md | 85 ++++++++++++++++++++++++++++++- platformio.ini | 90 +++++++++++++++++++-------------- tools/cdata.js | 1 + wled00/const.h | 25 ++++++++-- wled00/data/style.css | 10 ++++ wled00/html_settings.h | 111 +++++++++++++++++++++-------------------- wled00/wled.h | 4 +- 7 files changed, 229 insertions(+), 97 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 594fa97e..b5c660fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,92 @@ ## WLED changelog +#### Build 2310010, build 2310130 +- Release of WLED version 0.14.0 "Hoshi" +- Bugfixes for #3400, #3403, #3405 +- minor HTML optimizations +- audioreactive: bugfix for UDP sound sync (partly initialized packets) + +#### Build 2309240 +- Release of WLED beta version 0.14.0-b6 "Hoshi" +- Effect bugfixes and improvements (Meteor, Meteor Smooth, Scrolling Text) +- audioreactive: bugfixes for ES8388 and ES7243 init; minor improvements for analog inputs + +#### Build 2309100 +- Release of WLED beta version 0.14.0-b5 "Hoshi" +- New standard esp32 build with audioreactive +- Effect blending bugfixes, and minor optimizations + +#### Build 2309050 +- Effect blending (#3311) (finally effect transitions!) + *WARNING*: May not work well with ESP8266, with plenty of segments or usermods (low RAM condition)!!! +- Added receive and send sync groups to JSON API (#3317) (you can change sync groups using preset) +- Internal temperature usermod (#3246) +- MQTT server and topic length overrides (#3354) (new build flags) +- Animated Staircase usermod enhancement (#3348) (on/off toggle/relay control) +- Added local time info to Info page (#3351) +- New effect: Rolling Balls (a.k.a. linear bounce) (#1039) +- Various bug fixes and enhancements. + +#### Build 2308110 +- Release of WLED beta version 0.14.0-b4 "Hoshi" +- Reset effect data immediately upon mode change + +#### Build 2308030 +- Improved random palette handling and blending +- Soap bugfix +- Fix ESP-NOW crash with AP mode Always + +#### Build 2307180 +- Bus-level global buffering (#3280) +- Removed per-segment LED buffer (SEGMENT.leds) +- various fixes and improvements (ESP variants platform 5.3.0, effect optimizations, /json/cfg pin allocation) + +#### Build 2307130 +- larger `oappend()` stack buffer (3.5k) for ESP32 +- Preset cycle bugfix (#3262) +- Rotary encoder ALT fix for large LED count (#3276) +- effect updates (2D Plasmaball), `blur()` speedup +- On/Off toggle from nodes view (may show unknown device type on older versions) (#3291) +- various fixes and improvements (ABL, crashes when changing presets with different segments) + +#### Build 2306270 +- ESP-NOW remote support (#3237) +- Pixel Magic tool (display pixel art) (#3249) +- Websocket (peek) fallback when connection cannot be established, WS retries (#3267) +- Add WiFi network scan RPC command to Improv Serial (#3271) +- Longer (custom option available) segment name for ESP32 +- various fixes and improvements + +#### Build 2306210 +- 0.14.0-b3 release +- respect global I2C in all usermods (no local initialization of I2C bus) +- Multi relay usermod compile-time enabled option (-D MULTI_RELAY_ENABLED=true|false) + +#### Build 2306180 +- Added client-side option for applying effect defaults from metadata +- Improved ESP8266 stability by reducing WebSocket response resends +- Updated ESP8266 core to 3.1.2 + +#### Build 2306141 +- Lissajous improvements +- Scrolling Text improvements (leading 0) + +#### Build 2306140 +- Add settings PIN (un)locking to JSON post API + +#### Build 2306130 +- Bumped version to 0.14-b3 (beta 3) +- added pin dropdowns in LED preferences (not for LED pins) and usermods +- introduced (unused ATM) NeoGammaWLEDMethod class +- Reverse proxy support +- PCF8754 support for Rotary encoder (requires wiring INT pin to ESP GPIO) +- Rely on global I2C pins for usermods (breaking change) +- various fixes and enhancements + #### Build 2306020 - Support for segment sets (PR #3171) -- Reduce sound simulation modes to 2 to facilitiate segment sets +- Reduce sound simulation modes to 2 to facilitate segment sets - Trigger button immediately on press if all configured presets are the same (PR #3226) - Changes for allowing Alexa to change light color to White when auto-calculating from RGB (PR #3211) diff --git a/platformio.ini b/platformio.ini index 1e511cf7..324a463d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -11,7 +11,7 @@ # CI binaries ;; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth # ESP32 variant builds are temporarily excluded from CI due to toolchain issues on the GitHub Actions Linux environment -; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB +; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, esp32dev_audioreactive, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB, esp32s3dev_8MB_PSRAM_opi # Release binaries ; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB @@ -34,6 +34,7 @@ ; default_envs = esp8285_4CH_MagicHome ; default_envs = esp8285_H801 ; default_envs = d1_mini_5CH_Shojo_PCB +; default_envs = wemos_shield_esp32 ; default_envs = m5atom ; default_envs = esp32_eth ; default_envs = esp32dev_qio80 @@ -109,13 +110,14 @@ arduino_core_2_7_4 = espressif8266@2.6.2 arduino_core_3_0_0 = espressif8266@3.0.0 arduino_core_3_2_0 = espressif8266@3.2.0 arduino_core_4_1_0 = espressif8266@4.1.0 +arduino_core_3_1_2 = espressif8266@4.2.0 # Development platforms arduino_core_develop = https://github.com/platformio/platform-espressif8266#develop arduino_core_git = https://github.com/platformio/platform-espressif8266#feature/stage # Platform to use for ESP8266 -platform_wled_default = ${common.arduino_core_4_1_0} +platform_wled_default = ${common.arduino_core_3_1_2} # We use 2.7.4.7 for all, includes PWM flicker fix and Wstring optimization #platform_packages = tasmota/framework-arduinoespressif8266 @ 3.20704.7 platform_packages = platformio/framework-arduinoespressif8266 @@ -138,7 +140,7 @@ platform_packages = platformio/framework-arduinoespressif8266 # ------------------------------------------------------------------------------ debug_flags = -D DEBUG=1 -D WLED_DEBUG -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_TLS_MEM ;; for esp8266 - -DARDUINOJSON_DEBUG=1 ;; enables some debug asserts in arduinoJSON + -DARDUINOJSON_DEBUG=1 ;; WLEDMM: this enables some debug asserts in arduinoJSON # if needed (for memleaks etc) also add; -DDEBUG_ESP_OOM -include "umm_malloc/umm_malloc_cfg.h" # -DDEBUG_ESP_CORE is not working right now @@ -230,8 +232,7 @@ upload_speed = 115200 # ------------------------------------------------------------------------------ lib_compat_mode = strict lib_deps = - fastled/FastLED @ 3.6.0 ;; 3.6.0 was release recently - ;https://github.com/FastLED/FastLED.git#master @3.6.0+sha.23c67b7 ;; up to 50% faster - using a "known good" hash, so we get predictable builds + fastled/FastLED @ 3.6.0 IRremoteESP8266 @ 2.8.2 ;;makuna/NeoPixelBus @ 2.7.5 ;; WLEDMM will be added in board specific sections ;;https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7 @@ -258,7 +259,7 @@ build_flags = -DESP8266 -DFP_IN_IROM ;-Wno-deprecated-declarations - ;; -Wno-register ;; leaves some warnings when compiling C files: command-line option '-Wno-register' is valid for C++/ObjC++ but not for C + ;-Wno-register ;; leaves some warnings when compiling C files: command-line option '-Wno-register' is valid for C++/ObjC++ but not for C ;-Dregister= # remove warnings in C++17 due to use of deprecated register keyword by the FastLED library ;; warning: this can be dangerous -Wno-misleading-indentation ; NONOSDK22x_190703 = 2.2.2-dev(38a443e) @@ -299,7 +300,7 @@ build_flags = -g ; -DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3 default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv ;; WLED standard for 4MB flash: 1.4MB firmware, 1MB filesystem -;default_partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; Alternative for 4MB flash: 1.8MB firmware, 256KB filesystem (esptool erase_flash needed before changing) +;default_partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; WLEDMM alternative for 4MB flash: 1.8MB firmware, 256KB filesystem (esptool erase_flash needed before changing) lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 ;; WLEDMM this must be first in the list, otherwise Aircoookie/ESPAsyncWebServer pulls in an older version of AsyncTCP !! @@ -313,22 +314,17 @@ lib_deps = ;; ** For compiling with latest Frameworks (IDF4.4.x and arduino-esp32 v2.0.x) ** ;;; previous standard V4 platform -platformV4_pre = espressif32@ ~5.1.1 -platformV4_packages_pre = - platformio/framework-arduinoespressif32@ ~3.20004.0 +platformV4_pre = espressif32@5.2.0 +platformV4_packages_pre = toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0 ;;; standard V4 platform -platformV4 = espressif32@5.2.0 +platformV4 = espressif32@5.3.0 platformV4_packages = - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0 - -;;; updated V4 platform (5.3.0) - experimental -;;platformV4_up = espressif32@ ~5.3.0 -;;platformV4_packages_up = ;;; experimental: latest V4 platform with latest arduino-esp32 2.0.9 + ESP-IDF 4.4.4 (may or may not work) -platformV4_xp = espressif32@ ~6.3.0 +platformV4_xp = espressif32@ ~6.4.0 platformV4_packages_xp = platformio/framework-arduinoespressif32 @ ~3.20009.0 ;; arduino-esp32 v2.0.9+ +;; platformV4_packages_xp = platformio/framework-arduinoespressif32 @ ~3.20011.0 ;; arduino-esp32 v2.0.11 (latest one supported in platformio) build_flagsV4 = -g -DARDUINO_ARCH_ESP32 -DESP32 @@ -349,9 +345,8 @@ lib_depsV4 = ;; ;; please note that you can NOT update existing ESP32 installs with a "V4" build. Also updating by OTA will not work properly. ;; You need to completely erase your device (esptool erase_flash) first, then install the "V4" build from VSCode+platformio. -platform = espressif32@5.2.0 +platform = espressif32@5.3.0 platform_packages = - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0 build_flags = -g -Wshadow=compatible-local ;; emit warning in case a local variable "shadows" another local one -DARDUINO_ARCH_ESP32 -DESP32 @@ -366,9 +361,8 @@ lib_deps = [esp32s2] ;; generic definitions for all ESP32-S2 boards -platform = espressif32@5.2.0 +platform = espressif32@5.3.0 platform_packages = - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0 build_flags = -g -DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM -DARDUINO_ARCH_ESP32S2 @@ -388,9 +382,8 @@ lib_deps = [esp32c3] ;; generic definitions for all ESP32-C3 boards -platform = espressif32@5.2.0 +platform = espressif32@5.3.0 platform_packages = - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0 build_flags = -g -DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM -DARDUINO_ARCH_ESP32C3 @@ -409,9 +402,8 @@ lib_deps = [esp32s3] ;; generic definitions for all ESP32-S3 boards -platform = espressif32@5.2.0 +platform = espressif32@5.3.0 platform_packages = - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0 build_flags = -g -DESP32 -DARDUINO_ARCH_ESP32 @@ -461,7 +453,7 @@ lib_deps = ${esp8266.lib_deps} ; board_build.ldscript = ${common.ldscript_1m128k} ; build_unflags = ${common.build_unflags} ; build_flags = ${common.build_flags_esp8266} -D WLED_RELEASE_NAME=ESP01 -D WLED_DISABLE_OTA -; ; -D WLED_USE_UNREAL_MATH ;; may cause wrong sunset/sunrise times, but saves 7064 bytes FLASH and 975 bytes RAM +; ; -D WLED_USE_UNREAL_MATH ;; may cause wrong sunset/sunrise times, but saves 7064 bytes FLASH and 975 bytes RAM ; lib_deps = ${esp8266.lib_deps} [env:esp07] @@ -512,6 +504,21 @@ lib_deps = ${esp32.lib_deps} monitor_filters = esp32_exception_decoder board_build.partitions = ${esp32.default_partitions} +;WLEDMM: use WLEDMM build environments +; [env:esp32dev_audioreactive] +; board = esp32dev +; platform = ${esp32.platform} +; platform_packages = ${esp32.platform_packages} +; build_unflags = ${common.build_unflags} +; build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32_audioreactive #-D WLED_DISABLE_BROWNOUT_DET +; ${esp32.AR_build_flags} +; lib_deps = ${esp32.lib_deps} +; ${esp32.AR_lib_deps} +; monitor_filters = esp32_exception_decoder +; board_build.partitions = ${esp32.default_partitions} +; ; board_build.f_flash = 80000000L +; ; board_build.flash_mode = dio + [env:esp32dev_qio80] board = esp32dev platform = ${esp32.platform} @@ -545,7 +552,8 @@ platform = ${esp32.platform} platform_packages = ${esp32.platform_packages} upload_speed = 921600 build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32_Ethernet -D RLYPIN=-1 -D WLED_USE_ETHERNET -D BTNPIN=-1 -D WLED_DISABLE_ESPNOW +build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32_Ethernet -D RLYPIN=-1 -D WLED_USE_ETHERNET -D BTNPIN=-1 + -D WLED_DISABLE_ESPNOW ;; ESP-NOW requires wifi, may crash with ethernet only lib_deps = ${esp32.lib_deps} board_build.partitions = ${esp32.default_partitions} @@ -559,6 +567,7 @@ board_build.flash_mode = qio upload_speed = 460800 build_unflags = ${common.build_unflags} build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=S2_saola + ;-DLOLIN_WIFI_FIX ;; try this in case Wifi does not work -DARDUINO_USB_CDC_ON_BOOT=1 lib_deps = ${esp32s2.lib_deps} @@ -569,8 +578,9 @@ platform_packages = ${esp32c3.platform_packages} framework = arduino board = esp32-c3-devkitm-1 board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv -build_flags = ${common.build_flags} ${esp32c3.build_flags} #-D WLED_RELEASE_NAME=ESP32-C3 +build_flags = ${common.build_flags} ${esp32c3.build_flags} -D WLED_RELEASE_NAME=ESP32-C3 -D WLED_WATCHDOG_TIMEOUT=0 + -DLOLIN_WIFI_FIX ; seems to work much better with this -DARDUINO_USB_CDC_ON_BOOT=1 ;; for virtual CDC USB ;-DARDUINO_USB_CDC_ON_BOOT=0 ;; for serial-to-USB chip upload_speed = 460800 @@ -584,10 +594,10 @@ platform = ${esp32s3.platform} platform_packages = ${esp32s3.platform_packages} upload_speed = 921600 ; or 460800 build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags} ${esp32s3.build_flags} +build_flags = ${common.build_flags} ${esp32s3.build_flags} -D WLED_RELEASE_NAME=ESP32-S3_8MB -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 -D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip - ;-D ARDUINO_USB_CDC_ON_BOOT=1 ;; -D ARDUINO_USB_MODE=0 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") + ;-D ARDUINO_USB_CDC_ON_BOOT=1 ;; -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") ;-D WLED_DEBUG lib_deps = ${esp32s3.lib_deps} board_build.partitions = tools/WLED_ESP32_8MB.csv @@ -596,11 +606,10 @@ board_build.flash_mode = qio ; board_build.flash_mode = dio ;; try this if you have problems at startup monitor_filters = esp32_exception_decoder -[env:esp32s3dev_8MB_PSRAM] -;; ESP32-TinyS3 development board, with 8MB FLASH and 8MB PSRAM (memory_type: qio_opi, qio_qspi, or opi_opi) -;board = um_tinys3 ; -> needs workaround from https://github.com/Aircoookie/WLED/pull/2905#issuecomment-1328049860 -;board = esp32s3box ; -> error: 'esp32_adc2gpio' was not declared in this scope -board = esp32-s3-devkitc-1 ; -> compiles, but does not support PSRAM +[env:esp32s3dev_8MB_PSRAM_opi] +;; ESP32-S3 development board, with 8MB FLASH and >= 8MB PSRAM (memory_type: qio_opi) +board = esp32-s3-devkitc-1 ;; generic dev board; the next line adds PSRAM support +board_build.arduino.memory_type = qio_opi ;; use with PSRAM: 8MB or 16MB platform = ${esp32s3.platform} platform_packages = ${esp32s3.platform_packages} upload_speed = 921600 @@ -608,7 +617,7 @@ build_unflags = ${common.build_unflags} build_flags = ${common.build_flags} ${esp32s3.build_flags} -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 ;-D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip - -D ARDUINO_USB_CDC_ON_BOOT=1 ;; -D ARDUINO_USB_MODE=0 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") + -D ARDUINO_USB_CDC_ON_BOOT=1 -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") ; -D WLED_RELEASE_NAME=ESP32-S3_PSRAM -D WLED_USE_PSRAM -DBOARD_HAS_PSRAM ; tells WLED that PSRAM shall be used lib_deps = ${esp32s3.lib_deps} @@ -617,6 +626,13 @@ board_build.f_flash = 80000000L board_build.flash_mode = qio monitor_filters = esp32_exception_decoder +[env:esp32s3dev_8MB_PSRAM_qspi] +;; ESP32-TinyS3 development board, with 8MB FLASH and PSRAM (memory_type: qio_qspi) +extends = env:esp32s3dev_8MB_PSRAM_opi +;board = um_tinys3 ; -> needs workaround from https://github.com/Aircoookie/WLED/pull/2905#issuecomment-1328049860 +board = esp32-s3-devkitc-1 ;; generic dev board; the next line adds PSRAM support +board_build.arduino.memory_type = qio_qspi ;; use with PSRAM: 2MB or 4MB + [env:esp8285_4CH_MagicHome] board = esp8285 platform = ${common.platform_wled_default} @@ -685,7 +701,7 @@ platform_packages = ${esp32s2.platform_packages} board = lolin_s2_mini board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv build_unflags = ${common.build_unflags} #-DARDUINO_USB_CDC_ON_BOOT=1 -build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=LolinS2 +build_flags = ${common.build_flags} ${esp32s2.build_flags} -D WLED_RELEASE_NAME=ESP32-S2 -DBOARD_HAS_PSRAM -DARDUINO_USB_CDC_ON_BOOT=1 # try disabling and enabling unflag above in case of board-specific issues, will disable Serial -DARDUINO_USB_MSC_ON_BOOT=0 diff --git a/tools/cdata.js b/tools/cdata.js index 8959a588..561d390e 100644 --- a/tools/cdata.js +++ b/tools/cdata.js @@ -223,6 +223,7 @@ writeHtmlGzipped("wled00/data/index.htm", "wled00/html_ui.h", 'index'); writeHtmlGzipped("wled00/data/simple.htm", "wled00/html_simple.h", 'simple'); writeHtmlGzipped("wled00/data/pixart/pixart.htm", "wled00/html_pixart.h", 'pixart'); writeHtmlGzipped("wled00/data/cpal/cpal.htm", "wled00/html_cpal.h", 'cpal'); +writeHtmlGzipped("wled00/data/pxmagic/pxmagic.htm", "wled00/html_pxmagic.h", 'pxmagic'); /* writeChunks( "wled00/data", diff --git a/wled00/const.h b/wled00/const.h index 4db4d898..8baebad8 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -158,7 +158,7 @@ #define CALL_MODE_NO_NOTIFY 5 #define CALL_MODE_FX_CHANGED 6 //no longer used #define CALL_MODE_HUE 7 -#define CALL_MODE_PRESET_CYCLE 8 +#define CALL_MODE_PRESET_CYCLE 8 //no longer used #define CALL_MODE_BLYNK 9 //no longer used #define CALL_MODE_ALEXA 10 #define CALL_MODE_WS_SEND 11 //special call mode, not for notifier, updates websocket only @@ -331,24 +331,43 @@ // WLED Error modes #define ERR_NONE 0 // All good :) -#define ERR_EEP_COMMIT 2 // Could not commit to EEPROM (wrong flash layout?) +#define ERR_DENIED 1 // Permission denied +#define ERR_EEP_COMMIT 2 // Could not commit to EEPROM (wrong flash layout?) OBSOLETE #define ERR_NOBUF 3 // JSON buffer was not released in time, request cannot be handled at this time #define ERR_JSON 9 // JSON parsing failed (input too large?) #define ERR_FS_BEGIN 10 // Could not init filesystem (no partition?) #define ERR_FS_QUOTA 11 // The FS is full or the maximum file size is reached #define ERR_FS_PLOAD 12 // It was attempted to load a preset that does not exist #define ERR_FS_IRLOAD 13 // It was attempted to load an IR JSON cmd, but the "ir.json" file does not exist +#define ERR_FS_RMLOAD 14 // It was attempted to load an remote JSON cmd, but the "remote.json" file does not exist #define ERR_FS_GENERAL 19 // A general unspecified filesystem error occured #define ERR_OVERTEMP 30 // An attached temperature sensor has measured above threshold temperature (not implemented) #define ERR_OVERCURRENT 31 // An attached current sensor has measured a current above the threshold (not implemented) #define ERR_UNDERVOLT 32 // An attached voltmeter has measured a voltage below the threshold (not implemented) -//Timer mode types +// Timer mode types #define NL_MODE_SET 0 //After nightlight time elapsed, set to target brightness #define NL_MODE_FADE 1 //Fade to target brightness gradually #define NL_MODE_COLORFADE 2 //Fade to target brightness and secondary color gradually #define NL_MODE_SUN 3 //Sunrise/sunset. Target brightness is set immediately, then Sunrise effect is started. Max 60 min. +// Settings sub page IDs +#define SUBPAGE_MENU 0 +#define SUBPAGE_WIFI 1 +#define SUBPAGE_LEDS 2 +#define SUBPAGE_UI 3 +#define SUBPAGE_SYNC 4 +#define SUBPAGE_TIME 5 +#define SUBPAGE_SEC 6 +#define SUBPAGE_DMX 7 +#define SUBPAGE_UM 8 +#define SUBPAGE_UPDATE 9 +#define SUBPAGE_2D 10 +#define SUBPAGE_LOCK 251 +#define SUBPAGE_PINREQ 252 +#define SUBPAGE_CSS 253 +#define SUBPAGE_JS 254 +#define SUBPAGE_WELCOME 255 #define NTP_PACKET_SIZE 48 diff --git a/wled00/data/style.css b/wled00/data/style.css index 608cc92f..5daca929 100644 --- a/wled00/data/style.css +++ b/wled00/data/style.css @@ -61,6 +61,12 @@ button.sml { .hide { display: none; } +.err { + color: #f00; +} +.warn { + color: #fa0; +} input { background: #333; color: #fff; @@ -114,6 +120,10 @@ select { font-family: Verdana, sans-serif; border: 0.5ch solid #333; } +select.pin { + max-width: 120px; + text-overflow: ellipsis; +} tr { line-height: 100%; } diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 286cd106..10719405 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -6,61 +6,64 @@ */ // Autogenerated from wled00/data/style.css, do not edit!! -const uint16_t PAGE_settingsCss_length = 847; +const uint16_t PAGE_settingsCss_length = 888; const uint8_t PAGE_settingsCss[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x55, 0xc1, 0x8e, 0x9b, 0x30, - 0x10, 0xfd, 0x15, 0xaa, 0x68, 0xa5, 0xad, 0x14, 0x10, 0x10, 0xc8, 0xa6, 0x46, 0x95, 0xaa, 0xde, - 0x7b, 0xab, 0xaa, 0x4a, 0xd5, 0x1e, 0x0c, 0x1e, 0x82, 0x15, 0x63, 0x23, 0xdb, 0x74, 0x49, 0x11, - 0xff, 0x5e, 0xdb, 0xc0, 0x42, 0xb2, 0x68, 0x7b, 0xa9, 0xa2, 0x44, 0xc4, 0x63, 0xc6, 0x6f, 0xde, - 0xbc, 0x79, 0xae, 0x74, 0xcd, 0x7a, 0x2d, 0xda, 0xa2, 0xf2, 0x71, 0xa1, 0xa9, 0xe0, 0xa8, 0xc6, - 0x9c, 0x36, 0x2d, 0xc3, 0xf6, 0xcf, 0x90, 0x0b, 0x72, 0xed, 0x4b, 0xc1, 0xb5, 0x5f, 0xe2, 0x9a, - 0xb2, 0x2b, 0xfa, 0x01, 0x92, 0x60, 0x8e, 0xf7, 0x0a, 0x73, 0xe5, 0x2b, 0x90, 0xb4, 0xcc, 0x5c, - 0x58, 0xd1, 0x3f, 0x80, 0x22, 0x09, 0x75, 0xa6, 0xa1, 0xd3, 0x3e, 0x66, 0xf4, 0xcc, 0x51, 0x01, - 0x5c, 0x83, 0xcc, 0x72, 0x5c, 0x5c, 0xce, 0x52, 0xb4, 0x9c, 0xa0, 0x5d, 0x1c, 0xc7, 0x59, 0x21, - 0x98, 0x90, 0x68, 0x57, 0x96, 0x65, 0xc6, 0x28, 0x07, 0xbf, 0x02, 0x7a, 0xae, 0x34, 0x8a, 0xc3, - 0xf0, 0x21, 0xab, 0xb1, 0x3c, 0x53, 0x8e, 0xc2, 0xa1, 0x92, 0x7d, 0x2e, 0x24, 0x01, 0xe9, 0x4f, - 0xdb, 0x8f, 0xc7, 0xa3, 0x59, 0x0c, 0x94, 0xc1, 0xfb, 0x42, 0x89, 0xae, 0x50, 0x7c, 0x0c, 0x9b, - 0x6e, 0xc0, 0x7b, 0x8c, 0x2a, 0xf1, 0x1b, 0x64, 0x3f, 0xed, 0x8b, 0x4f, 0xe5, 0x88, 0x81, 0x40, - 0x21, 0xa4, 0x2b, 0x03, 0x71, 0xc1, 0x61, 0x08, 0x72, 0xcd, 0xf7, 0x79, 0xab, 0xb5, 0xe0, 0xfd, - 0x1a, 0xd2, 0xe1, 0x70, 0x58, 0x43, 0xfa, 0x47, 0xb5, 0x23, 0x28, 0x14, 0x1c, 0x8a, 0xca, 0x53, - 0x82, 0x51, 0xe2, 0xb9, 0x04, 0x13, 0x56, 0x89, 0x09, 0x6d, 0x15, 0x8a, 0x93, 0xa6, 0xcb, 0x08, - 0x55, 0x0d, 0xc3, 0x57, 0x44, 0xb9, 0xab, 0x32, 0x67, 0xa2, 0xb8, 0xac, 0xc8, 0x8a, 0x0d, 0xfa, - 0xb9, 0xdc, 0x28, 0x6e, 0x3a, 0xef, 0x34, 0x7e, 0xb3, 0x06, 0x13, 0x42, 0xf9, 0x19, 0xd9, 0xff, - 0x36, 0x90, 0xd5, 0x94, 0xfb, 0x63, 0xc9, 0x89, 0x8d, 0x17, 0xad, 0x54, 0x06, 0x6c, 0x23, 0xa8, - 0x63, 0x77, 0xb3, 0xd6, 0xb1, 0x4c, 0x47, 0xd6, 0x2a, 0xdd, 0x3d, 0x4a, 0x8b, 0x60, 0xd5, 0xbd, - 0xf4, 0xf6, 0xac, 0x15, 0xbe, 0xd0, 0xb3, 0x9f, 0xc8, 0xf2, 0xbd, 0x53, 0x05, 0xe6, 0xfd, 0xb8, - 0xee, 0x6b, 0xd1, 0x20, 0xdf, 0x2d, 0x07, 0xe6, 0x51, 0x8a, 0x97, 0xde, 0xae, 0x84, 0x59, 0x23, - 0x14, 0x75, 0x60, 0x94, 0xa6, 0xc5, 0xe5, 0xba, 0x52, 0xc0, 0xdc, 0x4d, 0xab, 0x83, 0x3f, 0x3e, - 0xe5, 0x04, 0x3a, 0x14, 0x0d, 0x01, 0xe3, 0x97, 0xa9, 0xdd, 0xa6, 0xf5, 0x41, 0x05, 0xac, 0xf9, - 0xda, 0xaf, 0x84, 0xc4, 0xa0, 0xd4, 0x4b, 0x52, 0x9c, 0x1b, 0xe2, 0x5b, 0x0d, 0xd9, 0x08, 0xd4, - 0xc9, 0x20, 0xa8, 0x28, 0x81, 0x7e, 0xa6, 0xdc, 0x71, 0x40, 0x79, 0xd3, 0xea, 0xff, 0xd0, 0xe9, - 0xf4, 0xa6, 0xd3, 0x63, 0x5a, 0x64, 0x4e, 0xc2, 0x39, 0x03, 0x32, 0xab, 0xee, 0x74, 0x3a, 0x8d, - 0x91, 0x5f, 0xfa, 0xda, 0xc0, 0x67, 0xde, 0xd6, 0x39, 0xc8, 0xe7, 0xfd, 0x6a, 0xc9, 0x96, 0xf3, - 0xbc, 0x57, 0xc0, 0xa0, 0xd0, 0xfd, 0xc2, 0x7a, 0x0d, 0xa6, 0x17, 0xf5, 0x4c, 0xb4, 0x69, 0xf7, - 0x46, 0x9a, 0x49, 0xf0, 0x09, 0xd4, 0x1b, 0xc1, 0xa0, 0xeb, 0xe6, 0x89, 0x88, 0xc2, 0x70, 0xf3, - 0xfd, 0xe0, 0x75, 0xc7, 0x29, 0xdd, 0xde, 0x30, 0xc7, 0x8f, 0xc9, 0x76, 0xbc, 0x9e, 0xe2, 0xe9, - 0x71, 0x3b, 0xae, 0xfa, 0x45, 0xa0, 0x9b, 0x00, 0x5e, 0x37, 0xdc, 0x21, 0x2c, 0x2a, 0x28, 0x2e, - 0xb9, 0xe8, 0x9e, 0x7b, 0x2d, 0x0d, 0xf5, 0xa5, 0x90, 0x35, 0x32, 0x0a, 0x63, 0xf0, 0x18, 0x05, - 0xe9, 0xc7, 0x89, 0x16, 0x5f, 0x3a, 0x83, 0x70, 0x42, 0xd3, 0xc4, 0xdb, 0x7c, 0xfd, 0x66, 0xa7, - 0x04, 0x63, 0x08, 0x7a, 0x7d, 0x4e, 0x49, 0x19, 0x3c, 0xaf, 0x68, 0x8f, 0x6c, 0x21, 0x53, 0x33, - 0x16, 0xee, 0xb3, 0xff, 0xae, 0x16, 0x2d, 0xfb, 0xb5, 0xc7, 0x99, 0x0e, 0x3d, 0x98, 0x12, 0x5e, - 0x87, 0xd2, 0xf6, 0x3b, 0x20, 0xe9, 0x4c, 0x8e, 0xf1, 0xcf, 0x0f, 0xb4, 0x6e, 0x84, 0xd4, 0x98, - 0xeb, 0x21, 0x30, 0x3c, 0xac, 0x21, 0x07, 0xa9, 0xf5, 0xd7, 0xdb, 0xf1, 0x1f, 0x76, 0xdf, 0xbf, - 0x7d, 0xf7, 0xb4, 0xd5, 0xe2, 0x22, 0x82, 0x87, 0x61, 0x57, 0xab, 0xf3, 0xed, 0x34, 0xec, 0xb4, - 0xc0, 0x4a, 0xf7, 0xa2, 0xc1, 0x05, 0xd5, 0x57, 0x33, 0xa3, 0x6f, 0x67, 0x32, 0x49, 0x92, 0x3b, - 0x87, 0x48, 0x9d, 0x67, 0x18, 0x2b, 0xa9, 0x9d, 0x32, 0xde, 0xd0, 0x31, 0xe2, 0x7a, 0x5a, 0x99, - 0x96, 0xe5, 0x35, 0x9b, 0xb0, 0xf9, 0xa6, 0x0b, 0x5c, 0x2b, 0x77, 0xfe, 0x32, 0xbd, 0x25, 0xed, - 0x80, 0x6c, 0xdc, 0x12, 0xb3, 0x1b, 0xa4, 0xd9, 0xa2, 0x04, 0xf7, 0x64, 0xae, 0x22, 0xf8, 0xf9, - 0xe8, 0xa7, 0xe1, 0x83, 0xd5, 0x43, 0x37, 0xd9, 0xd3, 0x27, 0x73, 0x59, 0x58, 0x5b, 0x40, 0xa9, - 0x2d, 0xd7, 0x15, 0x17, 0xa8, 0xca, 0x38, 0xd0, 0x5c, 0x61, 0xb4, 0xe5, 0x3a, 0xc7, 0x24, 0x33, - 0xd7, 0x5b, 0x3d, 0x3a, 0x65, 0x89, 0x09, 0x50, 0xee, 0x05, 0xa9, 0xda, 0x2f, 0x8f, 0x5e, 0x6c, - 0x7f, 0x9c, 0x80, 0xd4, 0xcc, 0x5a, 0x00, 0x52, 0x0a, 0xf9, 0x6e, 0xe6, 0x3c, 0x8e, 0x36, 0x33, - 0x0f, 0x5f, 0xec, 0x80, 0x63, 0x4f, 0x15, 0x12, 0x80, 0x7b, 0x98, 0x13, 0xef, 0x71, 0x29, 0xe2, - 0xe9, 0x68, 0xb8, 0xfb, 0xd8, 0xaf, 0x74, 0x0a, 0x35, 0xa6, 0xec, 0xc6, 0x37, 0x9c, 0x72, 0xf7, - 0xef, 0x7b, 0x4b, 0x83, 0x95, 0x7a, 0x31, 0x9d, 0xbb, 0x33, 0x1c, 0xf6, 0xd6, 0x80, 0xee, 0x47, - 0xe0, 0x7d, 0x7c, 0xc9, 0x29, 0xbc, 0xc3, 0xf7, 0x66, 0xe0, 0xc3, 0x7f, 0x0c, 0xfc, 0xe1, 0xce, - 0xd2, 0xc6, 0x41, 0x9c, 0x6e, 0x70, 0x7b, 0x4f, 0x0e, 0x3b, 0x73, 0x2f, 0x2b, 0x6f, 0x9a, 0xc5, - 0x49, 0xc3, 0x89, 0x0d, 0x0c, 0x7f, 0x01, 0xbc, 0xb1, 0xff, 0x31, 0x9d, 0x08, 0x00, 0x00 + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x56, 0x51, 0x8b, 0xab, 0x38, + 0x14, 0xfe, 0x2b, 0x2e, 0x65, 0x60, 0x2e, 0x54, 0x51, 0xab, 0x9d, 0xde, 0xc8, 0xc2, 0xb2, 0xef, + 0xf7, 0x6d, 0x58, 0x16, 0x96, 0x79, 0x88, 0xe6, 0x58, 0x43, 0x63, 0x22, 0x49, 0xbc, 0xb5, 0x23, + 0xfe, 0xf7, 0x4d, 0xa2, 0x8e, 0xb6, 0x23, 0x73, 0x5f, 0x2e, 0xa5, 0x25, 0xe6, 0xc4, 0xe4, 0x3b, + 0xdf, 0xf9, 0xce, 0x97, 0x56, 0xba, 0x66, 0xbd, 0x16, 0x6d, 0x51, 0xf9, 0xb8, 0xd0, 0x54, 0x70, + 0x54, 0x63, 0x4e, 0x9b, 0x96, 0x61, 0xfb, 0x30, 0xe4, 0x82, 0xdc, 0xfa, 0x52, 0x70, 0xed, 0x97, + 0xb8, 0xa6, 0xec, 0x86, 0xfe, 0x01, 0x49, 0x30, 0xc7, 0x7b, 0x85, 0xb9, 0xf2, 0x15, 0x48, 0x5a, + 0x66, 0x2e, 0xac, 0xe8, 0x3b, 0xa0, 0x48, 0x42, 0x9d, 0x69, 0xe8, 0xb4, 0x8f, 0x19, 0x3d, 0x73, + 0x54, 0x00, 0xd7, 0x20, 0xb3, 0x1c, 0x17, 0x97, 0xb3, 0x14, 0x2d, 0x27, 0x68, 0x17, 0xc7, 0x71, + 0x56, 0x08, 0x26, 0x24, 0xda, 0x95, 0x65, 0x99, 0x31, 0xca, 0xc1, 0xaf, 0x80, 0x9e, 0x2b, 0x8d, + 0xe2, 0x30, 0x7c, 0xca, 0x6a, 0x2c, 0xcf, 0x94, 0xa3, 0x70, 0xa8, 0x64, 0x9f, 0x0b, 0x49, 0x40, + 0xfa, 0xd3, 0xf2, 0xe3, 0xf1, 0x68, 0x26, 0x03, 0x65, 0xf0, 0x5e, 0x29, 0xd1, 0x15, 0x8a, 0x8f, + 0x61, 0xd3, 0x0d, 0x78, 0x8f, 0x51, 0x25, 0x7e, 0x82, 0xec, 0xa7, 0x75, 0xf1, 0xa9, 0x1c, 0x31, + 0x10, 0x28, 0x84, 0x74, 0x69, 0x20, 0x2e, 0x38, 0x0c, 0x41, 0xae, 0xf9, 0x3e, 0x6f, 0xb5, 0x16, + 0xbc, 0x5f, 0x43, 0x3a, 0x1c, 0x0e, 0x6b, 0x48, 0xbf, 0xc8, 0x76, 0x04, 0x85, 0x82, 0x43, 0x51, + 0x79, 0x4a, 0x30, 0x4a, 0x3c, 0xb7, 0xc1, 0x84, 0x55, 0x62, 0x42, 0x5b, 0x85, 0xe2, 0xa4, 0xe9, + 0x32, 0x42, 0x55, 0xc3, 0xf0, 0x0d, 0x51, 0xee, 0xb2, 0xcc, 0x99, 0x28, 0x2e, 0x2b, 0xb2, 0x62, + 0x83, 0x7e, 0x4e, 0x37, 0x8a, 0x9b, 0xce, 0x3b, 0x8d, 0xdf, 0xac, 0xc1, 0x84, 0x50, 0x7e, 0x46, + 0xf6, 0xd9, 0x06, 0xb2, 0x9a, 0x72, 0x7f, 0x4c, 0x39, 0xb1, 0xf1, 0xa2, 0x95, 0xca, 0x80, 0x6d, + 0x04, 0x75, 0xec, 0x6e, 0xe6, 0x3a, 0xa6, 0xe9, 0xc8, 0x5a, 0x6d, 0xf7, 0x88, 0xd2, 0x22, 0x58, + 0x55, 0x2f, 0xbd, 0x3f, 0x6b, 0x85, 0x2f, 0xf4, 0xec, 0x27, 0xb2, 0x7c, 0xef, 0x54, 0x81, 0x79, + 0x3f, 0xce, 0xfb, 0x5a, 0x34, 0xc8, 0x77, 0xd3, 0x81, 0x19, 0x4a, 0x71, 0xed, 0xed, 0x4c, 0x98, + 0x35, 0x42, 0x51, 0x07, 0x46, 0x69, 0x5a, 0x5c, 0x6e, 0x2b, 0x05, 0xcc, 0xd5, 0xb4, 0x3a, 0x78, + 0xf7, 0x29, 0x27, 0xd0, 0xa1, 0x68, 0x08, 0x18, 0xbf, 0x4c, 0xe5, 0x36, 0xa5, 0x0f, 0x2a, 0x60, + 0xcd, 0xdf, 0xfd, 0x4a, 0x48, 0x0c, 0x4a, 0xbd, 0x6c, 0x8a, 0x73, 0x43, 0x7c, 0xab, 0x21, 0x1b, + 0x81, 0x3a, 0x19, 0x04, 0x15, 0x25, 0xd0, 0xcf, 0x94, 0x8f, 0xf5, 0x06, 0x39, 0x8b, 0x42, 0x02, + 0x19, 0x82, 0x2b, 0x96, 0x7c, 0x16, 0x49, 0x89, 0xc3, 0x81, 0xf2, 0xa6, 0xd5, 0xbf, 0x41, 0x09, + 0xe9, 0x9d, 0x12, 0xc6, 0x6d, 0x91, 0x41, 0x82, 0x73, 0x06, 0x64, 0x3e, 0xf0, 0x74, 0x3a, 0x8d, + 0x91, 0xff, 0xf4, 0xad, 0x81, 0x3f, 0x79, 0x5b, 0xe7, 0x20, 0xdf, 0xf6, 0xab, 0x29, 0x9b, 0xee, + 0xdb, 0x5e, 0x01, 0x83, 0x42, 0xf7, 0x4b, 0x55, 0x6a, 0x30, 0xb5, 0xaa, 0xe7, 0x42, 0x18, 0x39, + 0x6c, 0x6c, 0x33, 0x35, 0x44, 0x02, 0xf5, 0x46, 0x30, 0xe8, 0xba, 0xb9, 0x63, 0xa2, 0x30, 0xdc, + 0x7c, 0x3f, 0xf8, 0x58, 0x71, 0x4a, 0xb7, 0x17, 0xcc, 0xf1, 0x63, 0xb2, 0x1d, 0xaf, 0xa7, 0x78, + 0x7a, 0xdc, 0x8e, 0xab, 0x7e, 0x11, 0xf0, 0x26, 0x80, 0x8f, 0x05, 0x0f, 0x08, 0x8b, 0x0a, 0x8a, + 0x4b, 0x2e, 0xba, 0xb7, 0x5e, 0x4b, 0x43, 0x7d, 0x29, 0x64, 0x8d, 0x8c, 0x02, 0x19, 0x3c, 0x47, + 0x41, 0xfa, 0x6d, 0xa2, 0xc5, 0x97, 0xce, 0x40, 0x9c, 0x10, 0x35, 0xf1, 0x36, 0x5f, 0xbf, 0x5b, + 0x29, 0xc1, 0x18, 0x86, 0x5e, 0x9f, 0x53, 0x52, 0x06, 0x6f, 0x2b, 0xda, 0x23, 0x9b, 0xc8, 0x54, + 0x8c, 0x85, 0xfb, 0xec, 0xb7, 0xab, 0x65, 0x3c, 0x22, 0x68, 0xa8, 0xed, 0xa9, 0x6e, 0x6a, 0xbd, + 0xc8, 0x75, 0xa6, 0xd3, 0xbf, 0x75, 0xb6, 0x92, 0x89, 0x2b, 0x02, 0xc6, 0x68, 0xa3, 0xa8, 0x1a, + 0xb4, 0xec, 0xd7, 0xae, 0x69, 0x6a, 0xfa, 0x64, 0x92, 0xfe, 0x68, 0x73, 0xab, 0x90, 0x80, 0xa4, + 0x33, 0x9d, 0xc6, 0x91, 0xff, 0xa0, 0x75, 0x23, 0xa4, 0xc6, 0x5c, 0x0f, 0x81, 0x61, 0x6e, 0x9d, + 0x64, 0x90, 0x5a, 0xc7, 0xbe, 0x37, 0x94, 0x61, 0xf7, 0xfa, 0xe3, 0xd5, 0xd3, 0x56, 0xbd, 0x8b, + 0x6c, 0x9e, 0x86, 0x5d, 0xad, 0xce, 0xf7, 0xfd, 0xb5, 0xd3, 0x02, 0x2b, 0xdd, 0x8b, 0x06, 0x17, + 0x54, 0xdf, 0x4c, 0xd7, 0x7f, 0xee, 0xf2, 0x24, 0x49, 0x1e, 0x3c, 0x27, 0x75, 0x2e, 0x64, 0xcc, + 0xa9, 0x76, 0x5a, 0xfa, 0x44, 0xe0, 0x88, 0xeb, 0x65, 0x65, 0x83, 0xb6, 0x12, 0xd9, 0x84, 0xcd, + 0x37, 0x75, 0xe3, 0x5a, 0xb9, 0xf3, 0x17, 0x3f, 0x28, 0x69, 0x07, 0x64, 0xe3, 0xde, 0x99, 0xfd, + 0x25, 0xcd, 0x16, 0xed, 0xb8, 0x91, 0xb9, 0xdc, 0xe0, 0xdf, 0x67, 0x3f, 0x0d, 0x9f, 0xac, 0x82, + 0x66, 0xd6, 0xbf, 0x9b, 0xeb, 0xc7, 0x1a, 0x0d, 0x4a, 0x6d, 0xba, 0x2e, 0xb9, 0x40, 0x55, 0xc6, + 0xd3, 0xe6, 0x0c, 0xa3, 0x2d, 0x1f, 0x3b, 0x26, 0x99, 0xb9, 0x30, 0xeb, 0xd1, 0x7b, 0x4b, 0x4c, + 0x80, 0x72, 0x2f, 0x48, 0xd5, 0x7e, 0x19, 0x7a, 0xb1, 0xfd, 0x71, 0x92, 0x53, 0x33, 0x6b, 0xd6, + 0x9b, 0x84, 0xfc, 0x72, 0xe7, 0x3c, 0x8e, 0x36, 0x77, 0x1e, 0xfe, 0xb2, 0x96, 0x80, 0x3d, 0x55, + 0x48, 0x00, 0xee, 0x61, 0x4e, 0xbc, 0xe7, 0x25, 0x89, 0x97, 0xa3, 0xe1, 0xee, 0x5b, 0xbf, 0x52, + 0x36, 0xd4, 0x98, 0xb2, 0x3b, 0xa7, 0x71, 0x5a, 0xdf, 0x7f, 0xed, 0x46, 0x0d, 0x56, 0xea, 0x6a, + 0x2a, 0xf7, 0x60, 0x51, 0xec, 0xb3, 0x65, 0x3d, 0x36, 0xcd, 0xd7, 0xf8, 0x92, 0x53, 0xf8, 0x80, + 0xef, 0x93, 0x45, 0x84, 0xbf, 0xb0, 0x88, 0xc3, 0x83, 0x09, 0x8e, 0xad, 0x3b, 0xfd, 0x27, 0xb0, + 0x37, 0xef, 0xb0, 0x33, 0x37, 0xbd, 0xf2, 0xa6, 0xee, 0x9d, 0x34, 0x9c, 0xd8, 0xc0, 0xf0, 0x3f, + 0x39, 0x38, 0xc0, 0xa3, 0xef, 0x08, 0x00, 0x00 }; diff --git a/wled00/wled.h b/wled00/wled.h index e8890695..b0673d62 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -3,7 +3,7 @@ /* Main sketch, global variable declarations @title WLED project sketch - @version 0.14.0-b2X + @version 0.14.1-b1x @author Christian Schwinne */ @@ -546,7 +546,7 @@ WLED_GLOBAL uint16_t userVar0 _INIT(0), userVar1 _INIT(0); //available for use i // wifi WLED_GLOBAL bool apActive _INIT(false); WLED_GLOBAL bool forceReconnect _INIT(false); -WLED_GLOBAL uint32_t lastReconnectAttempt _INIT(0); +WLED_GLOBAL unsigned long lastReconnectAttempt _INIT(0); WLED_GLOBAL bool interfacesInited _INIT(false); WLED_GLOBAL bool wasConnected _INIT(false); From 6426f3b934b89c3be02dbe2f9891bc26204dd012 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:55:43 +0100 Subject: [PATCH 012/108] sound sync: prevent sequence "roll-back" due to late packets (1->254) this is to prevent that an "old" packet with high sequence number (before counter roll-over) gets accepted wrongly. --- usermods/audioreactive/audio_reactive.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index 50448ab1..bdd11143 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -1500,9 +1500,10 @@ class AudioReactive : public Usermod { // validate sequence, discard out-of-sequence packets static uint8_t lastFrameCounter = 0; bool sequenceOK = false; - if(receivedPacket->frameCounter > lastFrameCounter) sequenceOK = true; - if((lastFrameCounter > 248) && (receivedPacket->frameCounter < 12)) sequenceOK = true; // handle roll-over (255 -> 0) - if((sequenceOK == false) && (receivedPacket->frameCounter != 0)) { // always accept "0" - its the legacy value + if(receivedPacket->frameCounter > lastFrameCounter) sequenceOK = true; // sequence OK + if((lastFrameCounter < 12) && (receivedPacket->frameCounter > 248)) sequenceOK = false; // prevent sequence "roll-back" due to late packets (1->254) + if((lastFrameCounter > 248) && (receivedPacket->frameCounter < 12)) sequenceOK = true; // handle roll-over (255 -> 0) + if((sequenceOK == false) && (receivedPacket->frameCounter != 0)) { // always accept "0" - its the legacy value DEBUGSR_PRINTF("Skipping audio frame out of order or duplicated - %u vs %u\n", lastFrameCounter, receivedPacket->frameCounter); return false; // reject out-of sequence frame } From cc8d4e396917387a81fcd04b7c593bde31e41fc6 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 20 Nov 2023 21:13:35 +0100 Subject: [PATCH 013/108] Merge pull request #3536 from Aircoookie/ntp_errorchecking NTP validation, and rejecting malformed responses (related to #3515) --- wled00/const.h | 3 ++- wled00/ntp.cpp | 31 ++++++++++++++++++++++++++----- wled00/set.cpp | 2 +- wled00/wled.cpp | 2 +- wled00/wled.h | 5 +++-- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/wled00/const.h b/wled00/const.h index 8baebad8..6dbc2aaa 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -369,7 +369,8 @@ #define SUBPAGE_JS 254 #define SUBPAGE_WELCOME 255 -#define NTP_PACKET_SIZE 48 +#define NTP_PACKET_SIZE 48 // size of NTP recive buffer +#define NTP_MIN_PACKET_SIZE 48 // min expected size - NTP v4 allows for "extended information" appended to the standard fields //maximum number of rendered LEDs - this does not have to match max. physical LEDs, e.g. if there are virtual busses #ifndef MAX_LEDS diff --git a/wled00/ntp.cpp b/wled00/ntp.cpp index 7d056d3c..ecc11ce0 100644 --- a/wled00/ntp.cpp +++ b/wled00/ntp.cpp @@ -199,6 +199,9 @@ void handleNetworkTime() { if (millis() - ntpPacketSentTime > 10000) { + #ifdef ARDUINO_ARCH_ESP32 // I had problems using udp.flush() on 8266 + while (ntpUdp.parsePacket() > 0) ntpUdp.flush(); // flush any existing packets + #endif sendNTPPacket(); ntpPacketSentTime = millis(); } @@ -239,23 +242,41 @@ void sendNTPPacket() ntpUdp.endPacket(); } +static bool isValidNtpResponse(byte * ntpPacket) { + // Perform a few validity checks on the packet + // based on https://github.com/taranais/NTPClient/blob/master/NTPClient.cpp + if((ntpPacket[0] & 0b11000000) == 0b11000000) return false; //reject LI=UNSYNC + // if((ntpPacket[0] & 0b00111000) >> 3 < 0b100) return false; //reject Version < 4 + if((ntpPacket[0] & 0b00000111) != 0b100) return false; //reject Mode != Server + if((ntpPacket[1] < 1) || (ntpPacket[1] > 15)) return false; //reject invalid Stratum + if( ntpPacket[16] == 0 && ntpPacket[17] == 0 && + ntpPacket[18] == 0 && ntpPacket[19] == 0 && + ntpPacket[20] == 0 && ntpPacket[21] == 0 && + ntpPacket[22] == 0 && ntpPacket[23] == 0) //reject ReferenceTimestamp == 0 + return false; + + return true; +} + bool checkNTPResponse() { #ifdef ARDUINO_ARCH_ESP32 ntpUdp.flush(); #endif int cb = ntpUdp.parsePacket(); -#ifdef ARDUINO_ARCH_ESP32 - if (!cb) {ntpUdp.flush(); return false;} // WLEDMM flush buffer -#else - if (!cb) {return false;} // WLEDMM do not flush buffer -#endif + if (cb < NTP_MIN_PACKET_SIZE) { + #ifdef ARDUINO_ARCH_ESP32 // I had problems using udp.flush() on 8266 + if (cb > 0) ntpUdp.flush(); // this avoids memory leaks on esp32 + #endif + return false; + } uint32_t ntpPacketReceivedTime = millis(); DEBUG_PRINT(F("NTP recv, l=")); DEBUG_PRINTLN(cb); byte pbuf[NTP_PACKET_SIZE]; ntpUdp.read(pbuf, NTP_PACKET_SIZE); // read the packet into the buffer + if (!isValidNtpResponse(pbuf)) return false; // verify we have a valid response to client Toki::Time arrived = toki.fromNTP(pbuf + 32); Toki::Time departed = toki.fromNTP(pbuf + 40); diff --git a/wled00/set.cpp b/wled00/set.cpp index 580857ef..cc68bf45 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -426,7 +426,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) //start ntp if not already connected if (ntpEnabled && WLED_CONNECTED && !ntpConnected) ntpConnected = ntpUdp.begin(ntpLocalPort); - ntpLastSyncTime = 0; // force new NTP query + ntpLastSyncTime = NTP_NEVER; // force new NTP query longitude = request->arg(F("LN")).toFloat(); latitude = request->arg(F("LT")).toFloat(); diff --git a/wled00/wled.cpp b/wled00/wled.cpp index dba77245..2fd88117 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -232,7 +232,7 @@ void WLED::loop() if (lastMqttReconnectAttempt > millis()) { rolloverMillis++; lastMqttReconnectAttempt = 0; - ntpLastSyncTime = 0; + ntpLastSyncTime = NTP_NEVER; // force new NTP query strip.restartRuntime(); } if (millis() - lastMqttReconnectAttempt > 30000 || lastMqttReconnectAttempt == 0) { // lastMqttReconnectAttempt==0 forces immediate broadcast diff --git a/wled00/wled.h b/wled00/wled.h index b0673d62..cd0072a7 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -670,10 +670,11 @@ WLED_GLOBAL String escapedMac; WLED_GLOBAL DNSServer dnsServer; // network time +#define NTP_NEVER 999000000L WLED_GLOBAL bool ntpConnected _INIT(false); WLED_GLOBAL time_t localTime _INIT(0); -WLED_GLOBAL unsigned long ntpLastSyncTime _INIT(999000000L); -WLED_GLOBAL unsigned long ntpPacketSentTime _INIT(999000000L); +WLED_GLOBAL unsigned long ntpLastSyncTime _INIT(NTP_NEVER); +WLED_GLOBAL unsigned long ntpPacketSentTime _INIT(NTP_NEVER); WLED_GLOBAL IPAddress ntpServerIP; WLED_GLOBAL uint16_t ntpLocalPort _INIT(2390); WLED_GLOBAL uint16_t rolloverMillis _INIT(0); From 782628b6aae2cc4ec81bba3db0b7151e02dcc373 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sun, 10 Dec 2023 14:40:36 +0100 Subject: [PATCH 014/108] UM battery: changed default for auto-off feature to "disabled" Especially on 8266, the usermod can cause unexpected shut-downs in default configuration, when A0 is not connected to a battery voltage measurement circuit. --- usermods/Battery/battery_defaults.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/Battery/battery_defaults.h b/usermods/Battery/battery_defaults.h index c1e3c6bb..60dd4c4b 100644 --- a/usermods/Battery/battery_defaults.h +++ b/usermods/Battery/battery_defaults.h @@ -56,7 +56,7 @@ // auto-off feature #ifndef USERMOD_BATTERY_AUTO_OFF_ENABLED - #define USERMOD_BATTERY_AUTO_OFF_ENABLED true + #define USERMOD_BATTERY_AUTO_OFF_ENABLED false #endif #ifndef USERMOD_BATTERY_AUTO_OFF_THRESHOLD @@ -78,4 +78,4 @@ #ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION #define USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION 5 -#endif \ No newline at end of file +#endif From 90b52b3a0d3e39578cf5925b29b61c5fde8d2277 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sun, 10 Dec 2023 14:54:35 +0100 Subject: [PATCH 015/108] Changed some usermods to be "disabled" by default Some usermods may cause unexpected behaviour if not configured properly. * Battery: can cause unexpected shutdowns if no voltage measurement circuit connected * RTC: can cause unexpected time &date changes if no RTC connected to I2C * mcu temp: can cause hight CPU load, and may cause instabilities due to use of an "unsupported" API from espressif --- wled00/usermods_list.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 95ebfb5d..74afd5de 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -225,7 +225,7 @@ void registerUsermods() */ //usermods.add(new MyExampleUsermod()); #ifdef USERMOD_BATTERY - usermods.add(new UsermodBattery("Battery", true)); + usermods.add(new UsermodBattery("Battery", false)); // WLEDMM #endif #ifdef USERMOD_DALLASTEMPERATURE @@ -293,7 +293,7 @@ void registerUsermods() #endif #ifdef USERMOD_RTC - usermods.add(new RTCUsermod("RTC", true)); + usermods.add(new RTCUsermod("RTC", false)); //WLEDMM #endif #ifdef USERMOD_ELEKSTUBE_IPS @@ -385,7 +385,7 @@ void registerUsermods() #endif #ifdef USERMOD_MCUTEMP - usermods.add(new mcuTemp("MCUTemp", true)); + usermods.add(new mcuTemp("MCUTemp", false)); #endif //#ifdef USERMOD_INTERNAL_TEMPERATURE From e4cb0929c322a6ed7df8cde161264ecde4d63ddf Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 10 Dec 2023 16:49:13 +0100 Subject: [PATCH 016/108] PartyJerk: minor code style improvements * fix some too-long tabs *author info added * shrunk number of blank lines * removed unused audio variables * colorIndex : better accuracy by first doing multiply, then divide --- wled00/FX.cpp | 35 +++++++++++------------------------ wled00/FX.h | 3 +-- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 84bd4a8c..a5926f4b 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1921,21 +1921,20 @@ uint16_t mode_pride_2015(void) { } static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!;;"; + ////////////////////// // PARTYJERK // ////////////////////// - - - +// by @tonyxforce +// NB: This effects expects a palette that starts with black and then ramps up brightness. +// Currently works best with the "color gradient" and the "colors 1&2" palettes uint16_t mode_partyjerk() { - if (SEGENV.call == 0) { SEGMENT.fill(BLACK); // clear LEDs SEGENV.aux0 = 0; SEGENV.aux1 = 0; SEGENV.step = 0; } - /* * use of persistent variables: * aux0: hueDelay @@ -1948,24 +1947,18 @@ uint16_t mode_partyjerk() { // add support for no audio um_data = simulateSound(SEGMENT.soundSim); } - uint8_t samplePeak = *(uint8_t*)um_data->u_data[3]; - uint8_t *maxVol = (uint8_t*)um_data->u_data[6]; - uint8_t *binNum = (uint8_t*)um_data->u_data[7]; - float volumeSmth = *(float*) um_data->u_data[0]; + float volumeSmth = *(float*) um_data->u_data[0]; SEGENV.aux0++; - if (SEGENV.aux1 > 254) { SEGENV.aux1 = 0; } - if (SEGENV.aux0 > map(SEGMENT.custom1, 0, 255, 0, 14)) { SEGENV.aux0 = 0; SEGENV.aux1++; } uint_fast32_t speed = 0; - uint16_t counter = 0; if (volumeSmth * 2 > (255 - SEGMENT.intensity)) { @@ -1975,30 +1968,24 @@ uint16_t mode_partyjerk() { }; SEGENV.step += speed; - counter = SEGENV.step >> 8; - for (uint16_t i = 0; i < SEGLEN; i++) { - - uint8_t colorIndex = (i * 255 / SEGLEN) - counter; - - uint32_t paletteColor = SEGMENT.color_from_palette(colorIndex, false, true, 255); - + for (unsigned i = 0; i < SEGLEN; i++) { + uint8_t colorIndex = ((i * 255) / SEGLEN) - counter; + uint32_t paletteColor = SEGMENT.color_from_palette(colorIndex, false, PALETTE_MOVING_WRAP, 255); uint8_t r = R(paletteColor); uint8_t g = G(paletteColor); uint8_t b = B(paletteColor); - uint8_t activeColor = max(r, max(g, b)); CRGB rgb(CHSV(SEGENV.aux1, 255, activeColor)); - - SEGMENT.setPixelColor(i, rgb.r, rgb.g, rgb.b); + SEGMENT.setPixelColor((uint16_t)i, rgb.r, rgb.g, rgb.b); }; return FRAMETIME; } // mode_partyjerk() +static const char _data_FX_MODE_PARTYJERK[] PROGMEM = "Party jerk@Effect speed,Sensitivity,Color change speed,Effect speed active multiplier;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; -static const char _data_FX_MODE_PARTYJERK[] PROGMEM = "Party jerk@Effect speed,Sensivity,Color change speed,Effect speed active multiplier;!,!;!;1v;c1=8,c2=48,m12=0,si=0"; //eight colored dots, weaving in and out of sync with each other uint16_t mode_juggle(void) { @@ -2025,7 +2012,7 @@ static const char _data_FX_MODE_JUGGLE[] PROGMEM = "Juggle@!,Trail;;!;;sx=64,ix= uint16_t mode_palette() { - uint16_t counter = 0; + uint16_t counter = 0; if (SEGMENT.speed != 0) { counter = (strip.now * ((SEGMENT.speed >> 3) +1)) & 0xFFFF; diff --git a/wled00/FX.h b/wled00/FX.h index 353b40b8..ac72422e 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -334,8 +334,7 @@ void strip_wait_until_idle(String whoCalledMe); // WLEDMM implemented in FX_fcn. #define FX_MODE_ROCKTAVES 185 #define FX_MODE_2DAKEMI 186 #define FX_MODE_ARTIFX 187 //WLEDMM ARTIFX - -#define FX_MODE_PARTYJERK 188 +#define FX_MODE_PARTYJERK 188 #define MODE_COUNT 189 From d2c9c9ee71ae52de9b6b4de0e3fd3e02f3f47603 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 10 Dec 2023 16:50:49 +0100 Subject: [PATCH 017/108] fix small typo --- wled00/FX.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX.h b/wled00/FX.h index ac72422e..3e4df0e7 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -398,7 +398,7 @@ typedef struct Segment { uint16_t aux0; // custom var uint16_t aux1; // custom var byte* data = nullptr; // effect data pointer // WLEDMM initialize to nullptr - CRGB* ledsrgb = nullptr; // local leds[] array (may be a pointer to global) //WLEDMM rename to ledsrgb to search on them (temp?), and initialilize to nullptr + CRGB* ledsrgb = nullptr; // local leds[] array (may be a pointer to global) //WLEDMM rename to ledsrgb to search on them (temp?), and initialize to nullptr size_t ledsrgbSize; //WLEDMM static CRGB *_globalLeds; // global leds[] array static uint16_t maxWidth, maxHeight; // these define matrix width & height (max. segment dimensions) From 2d54393c2d0b03d6f9569f70827205edec29a126 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 10 Dec 2023 17:53:07 +0100 Subject: [PATCH 018/108] start of 0.14.0-b27.33 --- package-lock.json | 4 ++-- package.json | 2 +- wled00/improv.cpp | 2 +- wled00/wled.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index da832670..429c9dda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wled", - "version": "0.14.0-b27.32", + "version": "0.14.0-b27.33", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wled", - "version": "0.14.0-b27.32", + "version": "0.14.0-b27.33", "license": "GPL-3.0-or-later", "dependencies": { "clean-css": "^4.2.3", diff --git a/package.json b/package.json index 54e922ad..10f0dae9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.14.0-b27.32", + "version": "0.14.0-b27.33", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/wled00/improv.cpp b/wled00/improv.cpp index 346f7e64..0dd2b25c 100644 --- a/wled00/improv.cpp +++ b/wled00/improv.cpp @@ -210,7 +210,7 @@ void sendImprovInfoResponse() { //Use serverDescription if it has been changed from the default "WLED", else mDNS name bool useMdnsName = (strcmp(serverDescription, "WLED") == 0 && strlen(cmDNS) > 0); char vString[32]; - snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b27.32/%i"),VERSION); + snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b27.33/%i"),VERSION); const char *str[4] = {"WLED", vString, bString, useMdnsName ? cmDNS : serverDescription}; sendImprovRPCResult(ImprovRPCType::Request_Info, 4, str); diff --git a/wled00/wled.h b/wled00/wled.h index 1595201c..74570889 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312050 +#define VERSION 2312100 //WLEDMM + Moustachauve/Wled-Native // You can define custom product info from build flags. From 61b1842aadb4f0a16a464916cd9fd80b6632a38a Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 10 Dec 2023 18:08:36 +0100 Subject: [PATCH 019/108] npm run build --- wled00/html_other.h | 76 +++++++++++++++++++++--------------------- wled00/html_settings.h | 38 ++++++++++----------- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/wled00/html_other.h b/wled00/html_other.h index ecf0bb22..dafe667f 100644 --- a/wled00/html_other.h +++ b/wled00/html_other.h @@ -43,44 +43,44 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()====="; // Autogenerated from wled00/data/update.htm, do not edit!! const uint16_t PAGE_update_length = 607; const uint8_t PAGE_update[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x75, 0x53, 0xd1, 0x6e, 0xd4, 0x30, - 0x10, 0x7c, 0xcf, 0x57, 0x18, 0x3f, 0xdd, 0x49, 0x9c, 0x53, 0x0a, 0x12, 0xa2, 0x24, 0x29, 0x3a, - 0x5a, 0x21, 0x24, 0xaa, 0x56, 0x6a, 0x0b, 0xe2, 0x09, 0x39, 0xf1, 0x26, 0x31, 0xe7, 0xd8, 0xa9, - 0xbd, 0xb9, 0xd3, 0x09, 0xf5, 0xdf, 0x59, 0x3b, 0x77, 0x05, 0xa9, 0xf0, 0x12, 0xc5, 0xc9, 0xec, - 0x64, 0x76, 0x66, 0x52, 0xbc, 0xb8, 0xb8, 0xfe, 0x78, 0xf7, 0xfd, 0xe6, 0x92, 0xf5, 0x38, 0x98, - 0xaa, 0x38, 0x5c, 0x41, 0xaa, 0xaa, 0x18, 0x00, 0x25, 0x6b, 0x9c, 0x45, 0xb0, 0x58, 0xf2, 0x9d, - 0x56, 0xd8, 0x97, 0x0a, 0xb6, 0xba, 0x81, 0x55, 0x3a, 0x70, 0x66, 0xe5, 0x00, 0x25, 0xdf, 0x6a, - 0xd8, 0x8d, 0xce, 0x23, 0xaf, 0xb2, 0x02, 0x35, 0x1a, 0xa8, 0xbe, 0x7d, 0xb9, 0xbc, 0x60, 0xf7, - 0xa3, 0x92, 0x08, 0x45, 0x3e, 0x3f, 0x2a, 0x42, 0xe3, 0xf5, 0x88, 0x55, 0xd6, 0x4e, 0xb6, 0x41, - 0xed, 0x2c, 0x5b, 0x2f, 0x96, 0xbf, 0x76, 0xda, 0x2a, 0xb7, 0x13, 0xbd, 0x0e, 0xe8, 0xfc, 0x5e, - 0xd4, 0xb2, 0xd9, 0x2c, 0x96, 0x8f, 0x4f, 0x90, 0x7b, 0x82, 0x28, 0xd7, 0x4c, 0x03, 0x29, 0x10, - 0x1d, 0xe0, 0xa5, 0x81, 0x78, 0xbb, 0xde, 0x7f, 0x56, 0x0b, 0x3e, 0xb5, 0x7c, 0x29, 0x02, 0xee, - 0x0d, 0x08, 0xa5, 0xc3, 0x68, 0xe4, 0xbe, 0xe4, 0xd6, 0x59, 0xe0, 0x2f, 0xff, 0x3b, 0x32, 0x84, - 0xee, 0xf9, 0x4c, 0x6d, 0x5c, 0xb3, 0xe1, 0x8f, 0x59, 0x91, 0x1f, 0x24, 0x1e, 0xa4, 0xb2, 0xe0, - 0x9b, 0x92, 0xe7, 0x01, 0x10, 0xb5, 0xed, 0x42, 0x1e, 0xc4, 0xcf, 0x70, 0x3e, 0x96, 0xef, 0x78, - 0xf5, 0x17, 0x32, 0x52, 0x55, 0xd9, 0x07, 0x3d, 0x44, 0x03, 0xd8, 0xe4, 0xcd, 0x82, 0xcf, 0xf4, - 0x4d, 0x08, 0x7c, 0xf9, 0x9e, 0x90, 0x09, 0x51, 0xe4, 0xb3, 0xa5, 0xb5, 0x53, 0x7b, 0xe6, 0xac, - 0x71, 0x52, 0x95, 0xfc, 0x13, 0xe0, 0xd7, 0xc5, 0x92, 0xe8, 0xfa, 0xd3, 0x2a, 0xbb, 0x72, 0xce, - 0x5e, 0x39, 0xc5, 0x92, 0x75, 0xb7, 0xae, 0xc5, 0x9d, 0xf4, 0xf0, 0xe4, 0x21, 0x21, 0x8a, 0xd6, - 0xf9, 0x81, 0x51, 0x26, 0xbd, 0xa3, 0xd9, 0x9b, 0xeb, 0xdb, 0x3b, 0xce, 0x64, 0xb2, 0x89, 0x44, - 0x4e, 0x09, 0xc7, 0x99, 0xa6, 0x57, 0xe4, 0x0b, 0xcb, 0x80, 0x1c, 0xdc, 0x8f, 0x14, 0xce, 0x30, - 0x19, 0xd4, 0xa3, 0xf4, 0x98, 0xc7, 0xf9, 0x15, 0xc1, 0x24, 0x27, 0x05, 0x61, 0xaa, 0x07, 0x4d, - 0xa9, 0xde, 0x27, 0x01, 0x61, 0x94, 0x96, 0x35, 0x46, 0x86, 0x50, 0xf2, 0xa0, 0x47, 0x5e, 0x9d, - 0x88, 0x57, 0x6f, 0xc4, 0xc9, 0xaa, 0x3e, 0x7d, 0x2b, 0x5e, 0x9f, 0x46, 0x67, 0x08, 0x40, 0xea, - 0x7d, 0x75, 0xe1, 0x76, 0x49, 0x3d, 0xc3, 0x1e, 0x98, 0xa1, 0x6f, 0x06, 0x64, 0x1e, 0x0c, 0xc8, - 0x00, 0x67, 0xac, 0x90, 0x2c, 0xeb, 0x3d, 0xb4, 0x25, 0xef, 0x11, 0xc7, 0x70, 0x96, 0xe7, 0x9d, - 0xc6, 0x7e, 0xaa, 0x45, 0xe3, 0x86, 0xfc, 0xb0, 0xe0, 0x64, 0x20, 0xe4, 0x71, 0xc9, 0xfc, 0x30, - 0x16, 0x38, 0x43, 0xe9, 0x29, 0xa9, 0x92, 0xff, 0xa8, 0x8d, 0xb4, 0x1b, 0xd2, 0xa3, 0x87, 0x8e, - 0x65, 0xc9, 0xfe, 0x23, 0x11, 0x3d, 0x11, 0xa1, 0xd7, 0x60, 0x54, 0x10, 0xda, 0x1d, 0x78, 0x8f, - 0x14, 0xcf, 0xb8, 0x45, 0xd8, 0x76, 0xe7, 0xc9, 0xf9, 0xb2, 0x25, 0x91, 0xab, 0xf0, 0x30, 0x91, - 0x9b, 0xb1, 0x9f, 0xb9, 0x4c, 0x6b, 0x14, 0xda, 0x8e, 0x13, 0xb2, 0xd9, 0xa2, 0x56, 0x1b, 0x38, - 0x76, 0xf9, 0x68, 0xa4, 0x87, 0x87, 0x49, 0x7b, 0x50, 0x33, 0xba, 0x9e, 0x10, 0xa9, 0x8e, 0x33, - 0x7c, 0xb6, 0x8e, 0xc8, 0xe6, 0x70, 0x5e, 0x14, 0xf9, 0xfc, 0xfa, 0x1f, 0xd0, 0xf9, 0x10, 0xfd, - 0x6e, 0x8c, 0x6e, 0x36, 0x25, 0x5f, 0x47, 0xbb, 0xd7, 0xd4, 0xf2, 0x3f, 0x43, 0x29, 0x97, 0xaa, - 0x50, 0x7a, 0x9b, 0xa5, 0xf8, 0x62, 0x47, 0x89, 0xa6, 0x4a, 0xec, 0x54, 0x3c, 0x21, 0x04, 0x81, - 0x13, 0xf9, 0x4d, 0xda, 0x96, 0x29, 0xc7, 0xac, 0x43, 0xca, 0xcb, 0xd1, 0xc1, 0x79, 0xd2, 0xda, - 0x7a, 0x08, 0x7d, 0x8a, 0x64, 0x94, 0x1d, 0xb0, 0xb3, 0x65, 0x91, 0x13, 0x5f, 0x5c, 0x37, 0x16, - 0x2e, 0xb6, 0x2f, 0xfe, 0xd6, 0xbf, 0x01, 0xb4, 0xad, 0x31, 0xbd, 0xec, 0x03, 0x00, 0x00 + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x75, 0x53, 0xd1, 0x6e, 0xd3, 0x30, + 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0x0d, 0x09, 0x31, 0x92, 0x0c, 0x95, + 0x4d, 0x08, 0x89, 0x69, 0x95, 0xb6, 0x81, 0x78, 0x42, 0x4e, 0x7c, 0xd3, 0x98, 0x3a, 0x76, 0x66, + 0xdf, 0xb4, 0xaa, 0xd0, 0xfe, 0x9d, 0x6b, 0xa7, 0x1d, 0x48, 0x83, 0x97, 0x28, 0x4e, 0xce, 0x3d, + 0x39, 0xf7, 0x9c, 0x93, 0xe2, 0xe4, 0xea, 0xf6, 0xe3, 0xfd, 0xf7, 0xd5, 0x35, 0xeb, 0xb0, 0x37, + 0x55, 0x71, 0xb8, 0x82, 0x54, 0x55, 0xd1, 0x03, 0x4a, 0xd6, 0x38, 0x8b, 0x60, 0xb1, 0xe4, 0x3b, + 0xad, 0xb0, 0x2b, 0x15, 0x6c, 0x75, 0x03, 0x8b, 0x74, 0xe0, 0xcc, 0xca, 0x1e, 0x4a, 0xbe, 0xd5, + 0xb0, 0x1b, 0x9c, 0x47, 0x5e, 0x65, 0x05, 0x6a, 0x34, 0x50, 0x7d, 0xfb, 0x72, 0x7d, 0xc5, 0x1e, + 0x06, 0x25, 0x11, 0x8a, 0x7c, 0x7a, 0x54, 0x84, 0xc6, 0xeb, 0x01, 0xab, 0xac, 0x1d, 0x6d, 0x83, + 0xda, 0x59, 0xb6, 0x9c, 0xcd, 0x7f, 0xed, 0xb4, 0x55, 0x6e, 0x27, 0x3a, 0x1d, 0xd0, 0xf9, 0xbd, + 0xa8, 0x65, 0xb3, 0x99, 0xcd, 0x9f, 0x9e, 0x21, 0x0f, 0x04, 0x51, 0xae, 0x19, 0x7b, 0x52, 0x20, + 0xd6, 0x80, 0xd7, 0x06, 0xe2, 0xed, 0x72, 0xff, 0x59, 0xcd, 0xf8, 0xd8, 0xf2, 0xb9, 0x08, 0xb8, + 0x37, 0x20, 0x94, 0x0e, 0x83, 0x91, 0xfb, 0x92, 0x5b, 0x67, 0x81, 0xbf, 0xfa, 0xef, 0x48, 0x1f, + 0xd6, 0x2f, 0x67, 0x6a, 0xe3, 0x9a, 0x0d, 0x7f, 0xca, 0x8a, 0xfc, 0x20, 0xf1, 0x20, 0x95, 0x05, + 0xdf, 0x94, 0x3c, 0x0f, 0x80, 0xa8, 0xed, 0x3a, 0xe4, 0x41, 0xfc, 0x0c, 0x97, 0x43, 0xf9, 0x8e, + 0x57, 0x7f, 0x21, 0x23, 0x55, 0x95, 0x7d, 0xd0, 0x7d, 0x34, 0x80, 0x8d, 0xde, 0xcc, 0xf8, 0x44, + 0xdf, 0x84, 0xc0, 0xe7, 0xef, 0x09, 0x99, 0x10, 0x45, 0x3e, 0x59, 0x5a, 0x3b, 0xb5, 0x67, 0xce, + 0x1a, 0x27, 0x55, 0xc9, 0x3f, 0x01, 0x7e, 0x9d, 0xcd, 0x89, 0xae, 0x3b, 0xab, 0xb2, 0x1b, 0xe7, + 0xec, 0x8d, 0x53, 0x2c, 0x59, 0x77, 0xe7, 0x5a, 0xdc, 0x49, 0x0f, 0xcf, 0x1e, 0x12, 0xa2, 0x68, + 0x9d, 0xef, 0x19, 0x65, 0xd2, 0x39, 0x9a, 0x5d, 0xdd, 0xde, 0xdd, 0x73, 0x26, 0x93, 0x4d, 0x24, + 0x72, 0x4c, 0x38, 0xce, 0x34, 0xbd, 0x22, 0x5f, 0x58, 0x06, 0xe4, 0xe0, 0x7e, 0xa0, 0x70, 0xfa, + 0xd1, 0xa0, 0x1e, 0xa4, 0xc7, 0x3c, 0xce, 0x2f, 0x08, 0x26, 0x39, 0x29, 0x08, 0x63, 0xdd, 0x6b, + 0x4a, 0xf5, 0x21, 0x09, 0x08, 0x83, 0xb4, 0xac, 0x31, 0x32, 0x84, 0x92, 0x07, 0x3d, 0xf0, 0xea, + 0x54, 0xbc, 0x7e, 0x23, 0x4e, 0x17, 0xf5, 0xd9, 0x5b, 0x71, 0x7e, 0x1e, 0x9d, 0x21, 0x00, 0xa9, + 0xf7, 0xd5, 0x95, 0xdb, 0x25, 0xf5, 0x0c, 0x3b, 0x60, 0x86, 0xbe, 0x19, 0x90, 0x79, 0x30, 0x20, + 0x03, 0x5c, 0xb0, 0x42, 0xb2, 0xac, 0xf3, 0xd0, 0x96, 0xbc, 0x43, 0x1c, 0xc2, 0x45, 0x9e, 0xaf, + 0x35, 0x76, 0x63, 0x2d, 0x1a, 0xd7, 0xe7, 0x87, 0x05, 0x47, 0x03, 0x21, 0x8f, 0x4b, 0xe6, 0x87, + 0xb1, 0xc0, 0x19, 0x4a, 0x4f, 0x49, 0x95, 0xfc, 0x47, 0x6d, 0xa4, 0xdd, 0x90, 0x1e, 0xdd, 0xaf, + 0x59, 0x96, 0xec, 0x3f, 0x12, 0xd1, 0x13, 0x11, 0x3a, 0x0d, 0x46, 0x05, 0xa1, 0xdd, 0x81, 0xf7, + 0x48, 0xf1, 0x82, 0x5b, 0x84, 0xed, 0xfa, 0x32, 0x39, 0x5f, 0xb6, 0x24, 0x72, 0x11, 0x1e, 0x47, + 0x72, 0x33, 0xf6, 0x33, 0x97, 0x69, 0x8d, 0x42, 0xdb, 0x61, 0x44, 0x36, 0x59, 0xd4, 0x6a, 0x03, + 0xc7, 0x2e, 0x1f, 0x8d, 0xf4, 0xf0, 0x38, 0x6a, 0x0f, 0x6a, 0x42, 0xd7, 0x23, 0x22, 0xd5, 0x71, + 0x82, 0x4f, 0xd6, 0x11, 0xd9, 0x14, 0xce, 0x49, 0x91, 0x4f, 0xaf, 0xff, 0x01, 0x9d, 0x0e, 0xd1, + 0xef, 0xc6, 0xe8, 0x66, 0x53, 0xf2, 0x65, 0xb4, 0x7b, 0x49, 0x2d, 0xff, 0x33, 0x94, 0x72, 0xa9, + 0x0a, 0xa5, 0xb7, 0x59, 0x8a, 0x2f, 0x76, 0x94, 0x68, 0xaa, 0xc4, 0x4e, 0xc5, 0x13, 0x42, 0x10, + 0x38, 0x91, 0xaf, 0xd2, 0xb6, 0x4c, 0x39, 0x66, 0x1d, 0x52, 0x5e, 0x8e, 0x0e, 0xce, 0x93, 0xd6, + 0xd6, 0x43, 0xe8, 0x52, 0x24, 0x83, 0x5c, 0x03, 0xbb, 0x98, 0x17, 0x39, 0xf1, 0xc5, 0x75, 0x63, + 0xe1, 0x62, 0xfb, 0xe2, 0x6f, 0xfd, 0x1b, 0x5f, 0x58, 0xea, 0xbb, 0xec, 0x03, 0x00, 0x00 }; diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 10719405..1c435010 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -1713,25 +1713,25 @@ const uint8_t PAGE_settings_sec[] PROGMEM = { 0x45, 0xb8, 0x35, 0x0e, 0x2f, 0xb4, 0x2e, 0x31, 0x1b, 0xd6, 0xe8, 0x74, 0x43, 0x1a, 0x08, 0x87, 0x68, 0xdd, 0xc2, 0x2c, 0xe8, 0xc7, 0x94, 0xf7, 0xb3, 0x1c, 0xfd, 0x92, 0x8f, 0xe9, 0xf5, 0xc5, 0x05, 0x65, 0x43, 0x8f, 0x5d, 0x4b, 0x43, 0x7c, 0xc3, 0xf6, 0xa3, 0xfb, 0x0f, 0xa3, 0xfd, 0xbd, - 0xd9, 0xc1, 0x9f, 0xa3, 0x07, 0x07, 0xec, 0x3f, 0xff, 0xfa, 0x37, 0x61, 0x30, 0x48, 0x02, 0x76, - 0xb0, 0x7f, 0xf0, 0x80, 0xfd, 0x98, 0x46, 0xba, 0xbc, 0xc2, 0x8f, 0x61, 0x21, 0x54, 0x19, 0x45, - 0xd1, 0xce, 0xfa, 0x21, 0xad, 0x1f, 0x16, 0xe8, 0x19, 0x48, 0x90, 0xcf, 0xcd, 0xfa, 0xc5, 0x8b, - 0x64, 0x3b, 0xdb, 0x9b, 0x89, 0xf6, 0x99, 0x2e, 0x30, 0x59, 0xb1, 0xa3, 0x1a, 0xa3, 0xa0, 0xd9, - 0x56, 0x34, 0xfe, 0xe6, 0x44, 0x84, 0x00, 0xf9, 0xff, 0x01, 0xc8, 0xe1, 0x46, 0xf0, 0x0f, 0x09, - 0x5b, 0xa9, 0xa5, 0x1a, 0xfa, 0x6b, 0x13, 0xdd, 0x16, 0x60, 0xdf, 0x1e, 0xda, 0xc2, 0x5e, 0x62, - 0x64, 0xaa, 0xa8, 0x4e, 0xbf, 0x70, 0x72, 0x77, 0x2b, 0xc6, 0x16, 0x49, 0x17, 0x40, 0xb4, 0x00, - 0x25, 0x9b, 0x7e, 0x62, 0x2b, 0x99, 0x28, 0xd0, 0xae, 0x43, 0x6b, 0x5c, 0x6e, 0x7c, 0xed, 0x1d, - 0xb1, 0xac, 0x46, 0xe7, 0xf4, 0x6f, 0xfd, 0x70, 0x80, 0x1e, 0x88, 0x6b, 0x8f, 0x59, 0xe3, 0x1e, - 0x8e, 0xa6, 0xad, 0x19, 0x4d, 0xbe, 0x48, 0x17, 0xf4, 0x87, 0xe6, 0x27, 0x1a, 0x8f, 0x5c, 0xbf, - 0xc3, 0xa9, 0xe7, 0x71, 0x4c, 0xa8, 0xdc, 0x9b, 0x90, 0xde, 0xff, 0x79, 0xcf, 0xc7, 0xf5, 0x59, - 0x66, 0x70, 0xdd, 0x55, 0x68, 0x25, 0x93, 0x24, 0x5b, 0xd1, 0x8f, 0x05, 0x6d, 0xe7, 0x3e, 0x47, - 0x4f, 0xc7, 0x3d, 0x0c, 0x09, 0x08, 0xf3, 0x9a, 0xc1, 0xe3, 0xc7, 0x70, 0x99, 0xe5, 0x7a, 0x86, - 0x04, 0xc0, 0x5d, 0xda, 0x0c, 0xcf, 0xcf, 0x9e, 0x9d, 0xbe, 0x9c, 0x9c, 0x7e, 0x89, 0x7b, 0xef, - 0xe2, 0x6c, 0xca, 0xf2, 0x46, 0x95, 0xf7, 0x15, 0xed, 0xbe, 0xb3, 0x79, 0x22, 0x0d, 0x1c, 0x84, - 0x47, 0xd6, 0x62, 0x68, 0x40, 0x7b, 0xc1, 0xcd, 0xb5, 0xec, 0x78, 0xd1, 0xaa, 0x8a, 0x13, 0x83, - 0xf9, 0x5b, 0x3d, 0xf3, 0x17, 0x75, 0x6a, 0x7c, 0xb4, 0xa5, 0xe9, 0x32, 0xc4, 0x1a, 0xc4, 0x99, - 0xcd, 0x2f, 0x21, 0xdf, 0x1c, 0xf1, 0xbf, 0x9c, 0xf0, 0x7b, 0x3f, 0x34, 0xe2, 0x0f, 0xa9, 0xf7, - 0xe2, 0x83, 0x6e, 0x36, 0x74, 0xcd, 0xa1, 0x5f, 0x50, 0xff, 0x0b, 0xc6, 0xda, 0x4c, 0x86, 0x51, + 0xd9, 0xc1, 0x9f, 0xa3, 0x07, 0x0f, 0xd8, 0x7f, 0xfe, 0xf5, 0x6f, 0xc2, 0x60, 0x90, 0x04, 0xec, + 0x60, 0xff, 0xe0, 0x01, 0xfb, 0x31, 0x8d, 0x74, 0x79, 0x85, 0x1f, 0xc3, 0x42, 0xa8, 0x32, 0x8a, + 0xa2, 0x9d, 0xf5, 0x43, 0x5a, 0x3f, 0x2c, 0xd0, 0x33, 0x90, 0x20, 0x9f, 0x9b, 0xf5, 0x8b, 0x17, + 0xc9, 0x76, 0xb6, 0x37, 0x13, 0xed, 0x33, 0x5d, 0x60, 0xb2, 0x62, 0x47, 0x35, 0x46, 0x41, 0xb3, + 0xad, 0x68, 0xfc, 0xcd, 0x89, 0x08, 0x01, 0xf2, 0xff, 0x03, 0x90, 0xc3, 0x8d, 0xe0, 0x1f, 0x12, + 0xb6, 0x52, 0x4b, 0x35, 0xf4, 0xd7, 0x26, 0xba, 0x2d, 0xc0, 0xbe, 0x3d, 0xb4, 0x85, 0xbd, 0xc4, + 0xc8, 0x54, 0x51, 0x9d, 0x7e, 0xe1, 0xe4, 0xee, 0x56, 0x8c, 0x2d, 0x92, 0x2e, 0x80, 0x68, 0x01, + 0x4a, 0x36, 0xfd, 0xc4, 0x56, 0x32, 0x51, 0xa0, 0x5d, 0x87, 0xd6, 0xb8, 0xdc, 0xf8, 0xda, 0x3b, + 0x62, 0x59, 0x8d, 0xce, 0xe9, 0xdf, 0xfa, 0xe1, 0x00, 0x3d, 0x10, 0xd7, 0x1e, 0xb3, 0xc6, 0x3d, + 0x1c, 0x4d, 0x5b, 0x33, 0x9a, 0x7c, 0x91, 0x2e, 0xe8, 0x0f, 0xcd, 0x4f, 0x34, 0x1e, 0xb9, 0x7e, + 0x87, 0x53, 0xcf, 0xe3, 0x98, 0x50, 0xb9, 0x37, 0x21, 0xbd, 0xff, 0xf3, 0x9e, 0x8f, 0xeb, 0xb3, + 0xcc, 0xe0, 0xba, 0xab, 0xd0, 0x4a, 0x26, 0x49, 0xb6, 0xa2, 0x1f, 0x0b, 0xda, 0xce, 0x7d, 0x8e, + 0x9e, 0x8e, 0x7b, 0x18, 0x12, 0x10, 0xe6, 0x35, 0x83, 0xc7, 0x8f, 0xe1, 0x32, 0xcb, 0xf5, 0x0c, + 0x09, 0x80, 0xbb, 0xb4, 0x19, 0x9e, 0x9f, 0x3d, 0x3b, 0x7d, 0x39, 0x39, 0xfd, 0x12, 0xf7, 0xde, + 0xc5, 0xd9, 0x94, 0xe5, 0x8d, 0x2a, 0xef, 0x2b, 0xda, 0x7d, 0x67, 0xf3, 0x44, 0x1a, 0x38, 0x08, + 0x8f, 0xac, 0xc5, 0xd0, 0x80, 0xf6, 0x82, 0x9b, 0x6b, 0xd9, 0xf1, 0xa2, 0x55, 0x15, 0x27, 0x06, + 0xf3, 0xb7, 0x7a, 0xe6, 0x2f, 0xea, 0xd4, 0xf8, 0x68, 0x4b, 0xd3, 0x65, 0x88, 0x35, 0x88, 0x33, + 0x9b, 0x5f, 0x42, 0xbe, 0x39, 0xe2, 0x7f, 0x39, 0xe1, 0xf7, 0x7e, 0x68, 0xc4, 0x1f, 0x52, 0xef, + 0xc5, 0x07, 0xdd, 0x6c, 0xe8, 0x9a, 0x43, 0xbf, 0xa0, 0xfe, 0x17, 0x48, 0x2f, 0x3a, 0xd7, 0x51, 0x15, 0x00, 0x00 }; From 423723d4ad8c5229f4213230070d53e2b3e59454 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 10 Dec 2023 18:11:23 +0100 Subject: [PATCH 020/108] changelog - deleted parts not relevnt for WLEDMM removed bugfixes/changes for code not present in WLEDMM --- CHANGELOG.md | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5c660fc..ebb620ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,50 +1,29 @@ ## WLED changelog #### Build 2310010, build 2310130 -- Release of WLED version 0.14.0 "Hoshi" - Bugfixes for #3400, #3403, #3405 - minor HTML optimizations - audioreactive: bugfix for UDP sound sync (partly initialized packets) #### Build 2309240 -- Release of WLED beta version 0.14.0-b6 "Hoshi" - Effect bugfixes and improvements (Meteor, Meteor Smooth, Scrolling Text) - audioreactive: bugfixes for ES8388 and ES7243 init; minor improvements for analog inputs -#### Build 2309100 -- Release of WLED beta version 0.14.0-b5 "Hoshi" -- New standard esp32 build with audioreactive -- Effect blending bugfixes, and minor optimizations - #### Build 2309050 -- Effect blending (#3311) (finally effect transitions!) - *WARNING*: May not work well with ESP8266, with plenty of segments or usermods (low RAM condition)!!! - Added receive and send sync groups to JSON API (#3317) (you can change sync groups using preset) - Internal temperature usermod (#3246) -- MQTT server and topic length overrides (#3354) (new build flags) -- Animated Staircase usermod enhancement (#3348) (on/off toggle/relay control) -- Added local time info to Info page (#3351) - New effect: Rolling Balls (a.k.a. linear bounce) (#1039) - Various bug fixes and enhancements. -#### Build 2308110 -- Release of WLED beta version 0.14.0-b4 "Hoshi" -- Reset effect data immediately upon mode change - #### Build 2308030 -- Improved random palette handling and blending -- Soap bugfix - Fix ESP-NOW crash with AP mode Always #### Build 2307180 -- Bus-level global buffering (#3280) -- Removed per-segment LED buffer (SEGMENT.leds) - various fixes and improvements (ESP variants platform 5.3.0, effect optimizations, /json/cfg pin allocation) #### Build 2307130 - larger `oappend()` stack buffer (3.5k) for ESP32 - Preset cycle bugfix (#3262) -- Rotary encoder ALT fix for large LED count (#3276) - effect updates (2D Plasmaball), `blur()` speedup - On/Off toggle from nodes view (may show unknown device type on older versions) (#3291) - various fixes and improvements (ABL, crashes when changing presets with different segments) @@ -52,14 +31,11 @@ #### Build 2306270 - ESP-NOW remote support (#3237) - Pixel Magic tool (display pixel art) (#3249) -- Websocket (peek) fallback when connection cannot be established, WS retries (#3267) - Add WiFi network scan RPC command to Improv Serial (#3271) -- Longer (custom option available) segment name for ESP32 - various fixes and improvements #### Build 2306210 - 0.14.0-b3 release -- respect global I2C in all usermods (no local initialization of I2C bus) - Multi relay usermod compile-time enabled option (-D MULTI_RELAY_ENABLED=true|false) #### Build 2306180 @@ -74,15 +50,6 @@ #### Build 2306140 - Add settings PIN (un)locking to JSON post API -#### Build 2306130 -- Bumped version to 0.14-b3 (beta 3) -- added pin dropdowns in LED preferences (not for LED pins) and usermods -- introduced (unused ATM) NeoGammaWLEDMethod class -- Reverse proxy support -- PCF8754 support for Rotary encoder (requires wiring INT pin to ESP GPIO) -- Rely on global I2C pins for usermods (breaking change) -- various fixes and enhancements - #### Build 2306020 - Support for segment sets (PR #3171) @@ -92,7 +59,6 @@ #### Build 2305280 - DDP protocol update (#3193) -- added PCF8574 I2C port expander support for Multi relay usermod - MQTT multipacket (fragmented) message fix - added option to retain MQTT brightness and color messages - new ethernet board: @srg74 Ethernet Shield From d63b716cd0f57b67514e39d9630b4e31f17780ad Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:22:39 +0100 Subject: [PATCH 021/108] Slightly reduce json buffer size on boards with PSRAM Found out that the main JSON 'doc' is still living in normal RAM, even when PSRAM is available... This results is very low RAM especially on -S2. This change tries to find a balance between "need large json buffer" and "other features become unstable when free RAM is low". --- wled00/const.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wled00/const.h b/wled00/const.h index 2f210508..b06c4aa8 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -423,12 +423,12 @@ #if defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) #if defined(ARDUINO_ARCH_ESP32S2) || defined(ARDUINO_ARCH_ESP32C3) #if defined(ARDUINO_ARCH_ESP32C3) - #define JSON_BUFFER_SIZE 46000 // WLEDMM - max 46KB on -C3 with PSRAM (chip has 400kb RAM) + #define JSON_BUFFER_SIZE 44000 // WLEDMM - max 44KB on -C3 with PSRAM (chip has 400kb RAM) #else - #define JSON_BUFFER_SIZE 36000 // WLEDMM - max 36KB on -S2 with PSRAM (chip has 320kb RAM) + #define JSON_BUFFER_SIZE 32000 // WLEDMM - max 32KB on -S2 with PSRAM (chip has 320kb RAM) #endif #else - #define JSON_BUFFER_SIZE 56000 // WLEDMM (was 60000) slightly reduced to avoid build error "region dram0_0_seg overflowed" + #define JSON_BUFFER_SIZE 54000 // WLEDMM (was 60000) slightly reduced to avoid build error "region dram0_0_seg overflowed" #endif #else #define JSON_BUFFER_SIZE 24576 From cc0563dd451d69927b43037739ec013d0086cbc7 Mon Sep 17 00:00:00 2001 From: TroyHacks <5659019+troyhacks@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:32:04 -0500 Subject: [PATCH 022/108] Fixes for Animated_Staircase --- .../Animated_Staircase/Animated_Staircase.h | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index 20c240c7..e6ef3cc1 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -16,7 +16,7 @@ class Animated_Staircase : public Usermod { /* configuration (available in API and stored in flash) */ bool enabled = false; // Enable this usermod unsigned long segment_delay_ms = 150; // Time between switching each segment - unsigned long on_time_ms = 30000; // The time for the light to stay on + unsigned long on_time_ms = 5000; // The time for the light to stay on - TroyHacks: 5s for testing int8_t topPIRorTriggerPin = -1; // disabled int8_t bottomPIRorTriggerPin = -1; // disabled int8_t topEchoPin = -1; // disabled @@ -161,28 +161,37 @@ class Animated_Staircase : public Usermod { if ((millis() - lastScanTime) > scanDelay) { lastScanTime = millis(); - bottomSensorRead = bottomSensorWrite || - (!useUSSensorBottom ? - (bottomPIRorTriggerPin<0 ? false : digitalRead(bottomPIRorTriggerPin)) : - ultrasoundRead(bottomPIRorTriggerPin, bottomEchoPin, bottomMaxDist*59) // cm to us - ); - topSensorRead = topSensorWrite || - (!useUSSensorTop ? - (topPIRorTriggerPin<0 ? false : digitalRead(topPIRorTriggerPin)) : - ultrasoundRead(topPIRorTriggerPin, topEchoPin, topMaxDist*59) // cm to us - ); + if (useUSSensorBottom) { + bottomSensorRead = ultrasoundRead(bottomPIRorTriggerPin, bottomEchoPin, bottomMaxDist*59); // US + } else if (bottomPIRorTriggerPin > 0) { + bottomSensorRead = digitalRead(bottomPIRorTriggerPin); // PIR + } else { + bottomSensorRead = false; // DUNNO + } + + if (useUSSensorTop) { + topSensorRead = ultrasoundRead(topPIRorTriggerPin, topEchoPin, topMaxDist*59); // US + } else if (topPIRorTriggerPin > 0) { + topSensorRead = digitalRead(topPIRorTriggerPin); // PIR + } else { + topSensorRead = false; // DUNNO + } if (bottomSensorRead != bottomSensorState) { bottomSensorState = bottomSensorRead; // change previous state sensorChanged = true; - publishMqtt(true, bottomSensorState ? "on" : "off"); + #ifndef WLED_DISABLE_MQTT + publishMqtt(true, bottomSensorState ? "on" : "off"); + #endif DEBUG_PRINTLN(F("Bottom sensor changed.")); } if (topSensorRead != topSensorState) { topSensorState = topSensorRead; // change previous state sensorChanged = true; - publishMqtt(false, topSensorState ? "on" : "off"); + #ifndef WLED_DISABLE_MQTT + publishMqtt(false, topSensorState ? "on" : "off"); + #endif#endif DEBUG_PRINTLN(F("Top sensor changed.")); } @@ -224,7 +233,13 @@ class Animated_Staircase : public Usermod { if (bottomSensorState || topSensorState) return; // Swipe OFF in the direction of the last sensor detection - swipe = lastSensor; + // WLED-MM/TroyHacks: This should follow you up/dowm the stairs. + if (lastSensor == SWIPE_UP) { + swipe = SWIPE_DOWN; + } else { + swipe = SWIPE_UP; + } + on = false; DEBUG_PRINT(F("OFF -> Swipe ")); From 6b94c56f49358b7321e54bccb7e4a35e12bf5986 Mon Sep 17 00:00:00 2001 From: Troy <5659019+troyhacks@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:41:16 -0500 Subject: [PATCH 023/108] Update Animated_Staircase.h Minor typos in comments --- usermods/Animated_Staircase/Animated_Staircase.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index e6ef3cc1..a5dd6945 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -16,7 +16,7 @@ class Animated_Staircase : public Usermod { /* configuration (available in API and stored in flash) */ bool enabled = false; // Enable this usermod unsigned long segment_delay_ms = 150; // Time between switching each segment - unsigned long on_time_ms = 5000; // The time for the light to stay on - TroyHacks: 5s for testing + unsigned long on_time_ms = 5000; // The time for the light to stay on - TroyHacks: 5s for testing int8_t topPIRorTriggerPin = -1; // disabled int8_t bottomPIRorTriggerPin = -1; // disabled int8_t topEchoPin = -1; // disabled @@ -71,7 +71,7 @@ class Animated_Staircase : public Usermod { // last sensor state, or trigger a sensor // through the API bool topSensorRead = false; - bool topSensorWrite = false; + bool = false; bool bottomSensorRead = false; bool bottomSensorWrite = false; bool topSensorState = false; @@ -196,7 +196,7 @@ class Animated_Staircase : public Usermod { } // Values read, reset the flags for next API call - topSensorWrite = false; + = false; bottomSensorWrite = false; if (topSensorRead != bottomSensorRead) { @@ -233,7 +233,7 @@ class Animated_Staircase : public Usermod { if (bottomSensorState || topSensorState) return; // Swipe OFF in the direction of the last sensor detection - // WLED-MM/TroyHacks: This should follow you up/dowm the stairs. + // WLED-MM/TroyHacks: This should follow you up/down the stairs. if (lastSensor == SWIPE_UP) { swipe = SWIPE_DOWN; } else { @@ -375,7 +375,7 @@ class Animated_Staircase : public Usermod { bottomSensorWrite = true; return true; } else if (action == "down") { - topSensorWrite = true; + = true; return true; } else if (action == "on") { enable(true); From ccf54fe6a256559fbba8089b5eed3f324151dc23 Mon Sep 17 00:00:00 2001 From: Troy <5659019+troyhacks@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:50:02 -0500 Subject: [PATCH 024/108] Update Animated_Staircase.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Little oops fix. 🗡️ --- usermods/Animated_Staircase/Animated_Staircase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index a5dd6945..11343891 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -71,7 +71,7 @@ class Animated_Staircase : public Usermod { // last sensor state, or trigger a sensor // through the API bool topSensorRead = false; - bool = false; + bool topSensorWrite = false; bool bottomSensorRead = false; bool bottomSensorWrite = false; bool topSensorState = false; From 80c257cf7837bda0f147cca53b10668eb47baa0a Mon Sep 17 00:00:00 2001 From: Troy <5659019+troyhacks@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:59:20 -0500 Subject: [PATCH 025/108] Update Animated_Staircase.h Minor editor mishaps. --- usermods/Animated_Staircase/Animated_Staircase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index 11343891..97bee1bd 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -196,7 +196,7 @@ class Animated_Staircase : public Usermod { } // Values read, reset the flags for next API call - = false; + topSensorWrite = false; bottomSensorWrite = false; if (topSensorRead != bottomSensorRead) { From 4f30f69584a36a08bfae67c844d9a7af12a3bd3c Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 12 Dec 2023 00:43:48 +0100 Subject: [PATCH 026/108] found a way to increase TCP stacksize (for AudioReactive UI) we can use `-D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=xxxx` to increase the stack size of AsyncWebserver - default is 8196. This should give us a bit of headroom for new UI items. We still need PR #94 for more savings. --- platformio.ini | 6 ++++++ usermods/audioreactive/audio_reactive.h | 11 +++++++++++ wled00/const.h | 6 +++++- wled00/data/index.js | 2 +- wled00/wled.cpp | 22 ++++++++++++++++++++-- wled00/wled.h | 2 +- wled00/wled_server.cpp | 4 ++-- 7 files changed, 46 insertions(+), 7 deletions(-) diff --git a/platformio.ini b/platformio.ini index 15de61d3..ef73c2cd 100644 --- a/platformio.ini +++ b/platformio.ini @@ -294,6 +294,7 @@ build_flags = -g -DARDUINO_ARCH_ESP32 #-DCONFIG_LITTLEFS_FOR_IDF_3_2 -D CONFIG_ASYNC_TCP_USE_WDT=0 + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE #use LITTLEFS library by lorol in ESP32 core 1.x.x instead of built-in in 2.x.x -D LOROL_LITTLEFS ; -DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3 @@ -334,6 +335,7 @@ build_flagsV4 = -g -DARDUINO_ARCH_ESP32 -DESP32 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE -D CONFIG_ASYNC_TCP_USE_WDT=0 + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE ; -DARDUINO_USB_CDC_ON_BOOT=0 ;; mandatory for "classic ESP32" when builing with arduino-esp32 >=2.0.3 ;;; V4.4.x libraries (without LOROL_LITTLEFS; with newer NeoPixelBus) lib_depsV4 = @@ -357,6 +359,7 @@ build_flags = -g -DARDUINO_ARCH_ESP32 -DESP32 #-DCONFIG_LITTLEFS_FOR_IDF_3_2 -D CONFIG_ASYNC_TCP_USE_WDT=0 + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE -DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3 default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv lib_deps = @@ -375,6 +378,7 @@ build_flags = -g -DCONFIG_IDF_TARGET_ESP32S2=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM -D CONFIG_ASYNC_TCP_USE_WDT=0 + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9216 ;; WLEDMM increase stack by 1Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DCO -DARDUINO_USB_MODE=0 ;; this flag is mandatory for ESP32-S2 ! @@ -397,6 +401,7 @@ build_flags = -g -DCONFIG_IDF_TARGET_ESP32C3=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM -D CONFIG_ASYNC_TCP_USE_WDT=0 + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE -DCO -DARDUINO_USB_MODE=1 ;; this flag is mandatory for ESP32-C3 ;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry: @@ -419,6 +424,7 @@ build_flags = -g -DCONFIG_IDF_TARGET_ESP32S3=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM -D CONFIG_ASYNC_TCP_USE_WDT=0 + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_DFU_ON_BOOT=0 -DCO ;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry: diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index e4bf2a76..c97ccb0f 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -91,6 +91,17 @@ #define PLOT_FLUSH() #endif +// sanity checks +#ifdef ARDUINO_ARCH_ESP32 + // we need more space in for oappend() stack buffer -> SETTINGS_STACK_BUF_SIZE and CONFIG_ASYNC_TCP_TASK_STACK_SIZE + #if SETTINGS_STACK_BUF_SIZE < 3904 // 3904 is required for WLEDMM-0.14.0-b28 + #warning please increase SETTINGS_STACK_BUF_SIZE >= 3904 + #endif + #if (CONFIG_ASYNC_TCP_TASK_STACK_SIZE - SETTINGS_STACK_BUF_SIZE) < 4352 // at least 4096+256 words of free task stack is needed by async_tcp alone + #error remaining async_tcp stack will be too low - please increase CONFIG_ASYNC_TCP_TASK_STACK_SIZE + #endif +#endif + // audiosync constants #define AUDIOSYNC_NONE 0x00 // UDP sound sync off #define AUDIOSYNC_SEND 0x01 // UDP sound sync - send mode diff --git a/wled00/const.h b/wled00/const.h index b06c4aa8..a4e0b230 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -382,7 +382,11 @@ #ifdef ESP8266 #define SETTINGS_STACK_BUF_SIZE 2048 #else -#define SETTINGS_STACK_BUF_SIZE 3834 // WLEDMM added 696+32 bytes of margin (was 3096) for audioreactive UI + #if !defined(USERMOD_AUDIOREACTIVE) + #define SETTINGS_STACK_BUF_SIZE 3834 // WLEDMM added 696+32 bytes of margin (was 3096) + #else + #define SETTINGS_STACK_BUF_SIZE 3904 // WLEDMM more buffer for audioreactive UI (add '-D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9216' to your build_flags) + #endif #endif #ifdef WLED_USE_ETHERNET diff --git a/wled00/data/index.js b/wled00/data/index.js index 8ecf2369..d4109554 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -697,7 +697,7 @@ ${inforow("Filesystem",i.fs.u + "/" + i.fs.t + " kB (" +Math.round(i.fs.u*100/i. ${theap>0?inforow("Heap ☾",((i.totalheap-i.freeheap)/1000).toFixed(0)+"/"+theap.toFixed(0)+" kB"," ("+Math.round((i.totalheap-i.freeheap)/(10*theap))+"%)"):""} ${i.minfreeheap?inforow("Max used heap ☾",((i.totalheap-i.minfreeheap)/1000).toFixed(1)+" kB"," ("+Math.round((i.totalheap-i.minfreeheap)/(10*theap))+"%)"):""} ${inforow("Free heap",heap," kB")} -${i.freestack?inforow("Free stack ☾",i.freestack," kB"):""} +${i.freestack?inforow("Free stack ☾",(i.freestack/1024).toFixed(3)," kB"):""} ${inforow("Flash Size ☾",flashsize," kB")} ${i.tpram?inforow("PSRAM ☾",(i.tpram/1024).toFixed(1)," kB"):""} ${i.psram?((i.tpram-i.psram)>16383?inforow("Used PSRAM ☾",((i.tpram-i.psram)/1024).toFixed(1)," kB"):inforow("Used PSRAM ☾",(i.tpram-i.psram)," B")):""} diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 2fd88117..196ff7ab 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -64,6 +64,22 @@ // WLEDMM end +#if defined(ARDUINO_ARCH_ESP32) && (defined(WLED_DEBUG) || defined(WLED_DEBUG_HEAP)) +// WLEDMM stack debug tool - find async_tcp task, and queries it's free stack +static int wledmm_get_tcp_stacksize(void) { + static TaskHandle_t tcp_taskHandle = NULL; // to store the task handle for later calls + char * tcp_taskname = pcTaskGetTaskName(tcp_taskHandle); // ask for name of the known task (to make sure we are still looking at the right one) + + if ((tcp_taskHandle == NULL) || (tcp_taskname == NULL) || (strncmp(tcp_taskname, "async_tcp", 9) != 0)) { + tcp_taskHandle = xTaskGetHandle("async_tcp"); // need to look for the task by name. FreeRTOS docs say this is very slow, so we store the result for next time + //DEBUG_PRINT(F("async_tcp task ")); DEBUG_PRINTLN( (tcp_taskHandle != NULL) ? F("found") : F("not found")); + } + + if (tcp_taskHandle != NULL) return uxTaskGetStackHighWaterMark(tcp_taskHandle); // got it !! + else return -1; +} +#endif + /* * Main WLED class implementation. Mostly initialization and connection logic */ @@ -347,6 +363,8 @@ void WLED::loop() if (millis() - debugTime > 4999 ) { // WLEDMM: Special case for debugging heap faster DEBUG_PRINT(F("*** Free heap: ")); DEBUG_PRINT(heap_caps_get_free_size(0x1800)); DEBUG_PRINT(F("\tLargest free block: ")); DEBUG_PRINT(heap_caps_get_largest_free_block(0x1800)); + DEBUG_PRINT(F(" *** \t\tArduino min free stack: ")); DEBUG_PRINT(uxTaskGetStackHighWaterMark(NULL)); + DEBUG_PRINT(F(" TCP min free stack: ")); DEBUG_PRINT(wledmm_get_tcp_stacksize()); DEBUG_PRINTLN(F(" ***")); debugTime = millis(); } @@ -531,7 +549,7 @@ void WLED::setup() #endif DEBUG_PRINT(F("heap ")); DEBUG_PRINTLN(ESP.getFreeHeap()); #ifdef ARDUINO_ARCH_ESP32 - #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 0) // unfortunately not availeable in older framework versions + #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 0) // unfortunately not available in older framework versions DEBUG_PRINT(F("\nArduino max stack ")); DEBUG_PRINTLN(getArduinoLoopTaskStackSize()); #endif DEBUG_PRINTF("%s min free stack %d\n", pcTaskGetTaskName(NULL), uxTaskGetStackHighWaterMark(NULL)); //WLEDMM @@ -568,7 +586,7 @@ void WLED::setup() //DEBUG_PRINT(F("LEDs inited. heap usage ~")); //DEBUG_PRINTLN(heapPreAlloc - ESP.getFreeHeap()); - USER_FLUSH(); // WLEDMM flush buffer now, before anything time-critial is started. + USER_FLUSH(); // WLEDMM flush buffer now, before anything time-critical is started. pinManager.manageDebugTXPin(); diff --git a/wled00/wled.h b/wled00/wled.h index 032a3a4f..38f472df 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312050 +#define VERSION 2312120 //WLEDMM + Moustachauve/Wled-Native // You can define custom product info from build flags. diff --git a/wled00/wled_server.cpp b/wled00/wled_server.cpp index 2a50cf37..202b07d9 100644 --- a/wled00/wled_server.cpp +++ b/wled00/wled_server.cpp @@ -575,8 +575,8 @@ void serveSettingsJS(AsyncWebServerRequest* request) #ifdef ARDUINO_ARCH_ESP32 DEBUG_PRINT(F("ServeSettingsJS: ")); - DEBUG_PRINTF("%s min free stack %d\n", pcTaskGetTaskName(NULL), uxTaskGetStackHighWaterMark(NULL)); //WLEDMM - DEBUG_PRINTF(PSTR(" bytes.\tString buffer usage: %4d of %d bytes\n"), strlen(buf)+1, SETTINGS_STACK_BUF_SIZE+37); + DEBUG_PRINTF("%s min free stack %d", pcTaskGetTaskName(NULL), uxTaskGetStackHighWaterMark(NULL)); //WLEDMM + DEBUG_PRINTF(PSTR(" bytes.\t\tString buffer usage: %4d of %d bytes\n"), strlen(buf)+1, SETTINGS_STACK_BUF_SIZE+37); #endif AsyncWebServerResponse *response; From 8fa24c4830c8b358310b364f6684b265b17acb38 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 12 Dec 2023 00:44:03 +0100 Subject: [PATCH 027/108] npm run build --- wled00/html_ui.h | 4731 +++++++++++++++++++++++----------------------- 1 file changed, 2366 insertions(+), 2365 deletions(-) diff --git a/wled00/html_ui.h b/wled00/html_ui.h index 5c0e22e0..5f879702 100644 --- a/wled00/html_ui.h +++ b/wled00/html_ui.h @@ -7,494 +7,494 @@ */ // Autogenerated from wled00/data/index.htm, do not edit!! -const uint16_t PAGE_index_L = 38063; +const uint16_t PAGE_index_L = 38073; const uint8_t PAGE_index[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xcc, 0xbd, 0xf9, 0x7e, 0xe2, 0xc8, - 0x92, 0x30, 0xfa, 0xbf, 0x9f, 0x42, 0xa5, 0xea, 0x53, 0x86, 0x46, 0x06, 0xb1, 0x2f, 0x2e, 0xec, - 0xc1, 0x78, 0xdf, 0x6d, 0xbc, 0xd7, 0xd4, 0x6f, 0x4a, 0x40, 0x02, 0xb2, 0x85, 0x24, 0x4b, 0x62, - 0x33, 0xcd, 0x3c, 0xc7, 0xf7, 0x34, 0xf7, 0x61, 0xee, 0x93, 0xdc, 0x88, 0x4c, 0x2d, 0x29, 0x21, - 0x6c, 0x57, 0x4f, 0xcf, 0xb9, 0x5f, 0x9f, 0x53, 0x46, 0xca, 0x35, 0x22, 0x32, 0x32, 0x32, 0x22, - 0x32, 0x32, 0xf5, 0xfd, 0xcb, 0xee, 0x45, 0xf3, 0xe6, 0xf1, 0x72, 0x4f, 0x18, 0x38, 0x43, 0x6d, - 0x4b, 0xf8, 0x8e, 0x3f, 0x82, 0xa6, 0xe8, 0xfd, 0xba, 0x48, 0x74, 0x11, 0x13, 0x88, 0xd2, 0x85, - 0x9f, 0x21, 0x71, 0x14, 0x41, 0x57, 0x86, 0xa4, 0x2e, 0x8e, 0x55, 0x32, 0x31, 0x0d, 0xcb, 0x11, - 0x85, 0xb5, 0x8e, 0xa1, 0x3b, 0x44, 0x77, 0xea, 0xe2, 0x44, 0xed, 0x3a, 0x83, 0x7a, 0x97, 0x8c, - 0xd5, 0x0e, 0xd9, 0xa0, 0x2f, 0x92, 0xaa, 0xab, 0x8e, 0xaa, 0x68, 0x1b, 0x76, 0x47, 0xd1, 0x48, - 0x3d, 0x2b, 0x0d, 0x21, 0x61, 0x38, 0x1a, 0x7a, 0xef, 0xa2, 0xd7, 0xe8, 0x5a, 0x67, 0xa0, 0x58, - 0x36, 0x81, 0x46, 0x46, 0x4e, 0x6f, 0xa3, 0x22, 0x86, 0x3b, 0x73, 0x06, 0x64, 0x48, 0x36, 0x3a, - 0x86, 0x66, 0x58, 0xa2, 0xe0, 0x77, 0xf7, 0x35, 0x47, 0xff, 0xe3, 0xda, 0xf0, 0x72, 0x66, 0xc4, - 0x16, 0xdd, 0xaa, 0x8a, 0x69, 0x6a, 0x64, 0x63, 0x68, 0xb4, 0x55, 0xf8, 0x99, 0x90, 0xf6, 0x06, - 0x24, 0x6c, 0x74, 0x14, 0x53, 0x69, 0x6b, 0x04, 0x6b, 0x6a, 0xaa, 0xfe, 0x22, 0x58, 0x44, 0xab, - 0x8b, 0xf6, 0x00, 0xd0, 0xe9, 0x8c, 0x1c, 0x41, 0x85, 0x76, 0x00, 0xad, 0x81, 0x45, 0x7a, 0x75, - 0xb1, 0xab, 0x38, 0x4a, 0x4d, 0x1d, 0x2a, 0x7d, 0x92, 0x99, 0x6e, 0x60, 0xce, 0x66, 0x5b, 0xb1, - 0x49, 0xa9, 0x20, 0x35, 0x1a, 0x8d, 0x9d, 0x46, 0x63, 0xaf, 0xb1, 0x07, 0x7f, 0xf1, 0xf7, 0xa0, - 0xd1, 0x3c, 0xc0, 0xa7, 0xfd, 0x3e, 0xfc, 0x39, 0xd2, 0xae, 0x6e, 0x5e, 0x3a, 0xe7, 0xcd, 0x81, - 0x71, 0x82, 0x69, 0xbb, 0xb7, 0xda, 0xd1, 0xf5, 0xfe, 0x11, 0x3e, 0x5e, 0xb1, 0xd2, 0x7d, 0x5a, - 0xf6, 0x30, 0x73, 0x99, 0x79, 0xc4, 0x94, 0xbd, 0xec, 0xf1, 0xf5, 0xde, 0xfe, 0xed, 0xc5, 0x51, - 0xf6, 0x19, 0x92, 0x32, 0x97, 0x93, 0x8b, 0x69, 0xff, 0xfc, 0x80, 0x34, 0x6e, 0xcf, 0xa6, 0x7b, - 0xd5, 0x83, 0x52, 0xe7, 0xaa, 0x79, 0xb2, 0x7b, 0xdf, 0x18, 0x98, 0x8d, 0xdd, 0xa7, 0x5c, 0xaf, - 0x72, 0x79, 0xf6, 0xbc, 0xd3, 0xca, 0x5f, 0xdd, 0xcb, 0x95, 0xab, 0x93, 0x9c, 0x7c, 0xa2, 0x3c, - 0x35, 0x73, 0xfd, 0x5e, 0xb3, 0x3a, 0x68, 0xea, 0xaf, 0xc6, 0xc8, 0x38, 0xef, 0x37, 0xae, 0xfb, - 0x8f, 0xe5, 0xb7, 0xb3, 0x69, 0x63, 0x76, 0xae, 0xdd, 0x76, 0xaf, 0x0e, 0xb5, 0x07, 0xb5, 0xa1, - 0x5d, 0xe4, 0xce, 0x76, 0x1b, 0xbb, 0xa5, 0xfc, 0xde, 0xdd, 0xeb, 0xf9, 0x61, 0x83, 0xc8, 0x0d, - 0x0a, 0x88, 0xb6, 0x7f, 0xf3, 0xd2, 0x1a, 0x5d, 0x0d, 0x9b, 0x4d, 0x71, 0x6b, 0x4d, 0xf8, 0x6e, - 0x77, 0x2c, 0xd5, 0x74, 0xb6, 0xd6, 0x7a, 0x23, 0xbd, 0xe3, 0xa8, 0x86, 0x2e, 0x98, 0x84, 0xbc, - 0x24, 0x9c, 0xe4, 0x7c, 0xac, 0x58, 0x02, 0xa9, 0x3b, 0xe9, 0x3e, 0x71, 0x9a, 0x48, 0xe5, 0xa9, - 0x93, 0x10, 0x73, 0x5d, 0x31, 0xb9, 0xa9, 0xf6, 0x12, 0x84, 0x65, 0x5b, 0x9b, 0x8e, 0x35, 0x9b, - 0x5b, 0x75, 0xc7, 0x30, 0xd3, 0x13, 0x55, 0xef, 0x1a, 0x93, 0xf4, 0xc4, 0x5e, 0x74, 0x14, 0xa7, - 0x33, 0xc0, 0x16, 0x16, 0xd6, 0xb7, 0x6f, 0x56, 0xda, 0x02, 0x46, 0x9a, 0xb5, 0x1c, 0xc5, 0x21, - 0xf5, 0x7a, 0xfd, 0x9e, 0xb4, 0x5b, 0x46, 0xe7, 0x85, 0x38, 0xe9, 0x8b, 0xcb, 0xbd, 0xf3, 0x6d, - 0x2b, 0x6d, 0x13, 0xbd, 0x9b, 0x10, 0xe7, 0xeb, 0xda, 0x78, 0xbd, 0xe6, 0x58, 0x23, 0xb2, 0x10, - 0x93, 0xb5, 0x84, 0x55, 0xd7, 0xc9, 0x44, 0xf0, 0xcb, 0x26, 0x12, 0xe2, 0xc0, 0x71, 0x4c, 0xbb, - 0x26, 0xd6, 0xeb, 0x6e, 0x37, 0x9a, 0x01, 0xbd, 0x00, 0xb4, 0x69, 0xd3, 0x32, 0x1c, 0x03, 0xd8, - 0x64, 0x5b, 0x9c, 0xd8, 0xb6, 0x58, 0x83, 0xbf, 0x62, 0x32, 0x25, 0xd6, 0x32, 0x19, 0x31, 0xd5, - 0x35, 0x3a, 0xa3, 0x21, 0x30, 0x47, 0x50, 0x78, 0x60, 0xd8, 0x4e, 0x4a, 0xcc, 0x60, 0x99, 0x64, - 0xda, 0xd0, 0x0d, 0x93, 0xe8, 0xf5, 0x44, 0xb2, 0xbe, 0x35, 0x8f, 0x85, 0x63, 0x21, 0x59, 0xe9, - 0xb6, 0xaa, 0x2b, 0xd6, 0xec, 0x66, 0x66, 0x22, 0x5f, 0x59, 0x96, 0x32, 0x6b, 0x8f, 0x7a, 0x3d, - 0x62, 0x89, 0x90, 0xa5, 0x74, 0xbb, 0x7b, 0x63, 0x68, 0xfe, 0x54, 0xb5, 0x81, 0x05, 0x89, 0x95, - 0x10, 0x87, 0xc4, 0xb6, 0x81, 0x6b, 0x20, 0x13, 0x9a, 0x44, 0xca, 0x00, 0xa5, 0xc4, 0x1f, 0x46, - 0xfb, 0x99, 0x74, 0x1c, 0xa1, 0x81, 0xb5, 0x77, 0x68, 0xed, 0x9f, 0x80, 0x07, 0xd0, 0xac, 0xe5, - 0x58, 0xaa, 0xde, 0x4f, 0xc3, 0xb4, 0xd0, 0x12, 0x56, 0x1a, 0xb9, 0x2e, 0x99, 0x9c, 0x6b, 0xc4, - 0x11, 0x74, 0x8a, 0xfe, 0xad, 0xaa, 0x3b, 0x15, 0x5a, 0xcb, 0xcb, 0x45, 0xca, 0x97, 0x4b, 0x5f, - 0xea, 0xfa, 0x0f, 0xf9, 0xe7, 0x5f, 0x7f, 0xe5, 0xf0, 0x21, 0x0b, 0x0f, 0x5f, 0x48, 0xd2, 0x22, - 0xce, 0xc8, 0xd2, 0x37, 0xb1, 0xb2, 0x0a, 0xa9, 0xb9, 0x9f, 0x52, 0x07, 0x7e, 0xf2, 0x3f, 0x25, - 0xad, 0x7e, 0xa6, 0x38, 0x83, 0x34, 0xcc, 0xc1, 0x84, 0x93, 0xa6, 0xf3, 0x33, 0xa3, 0x4a, 0x4e, - 0x7a, 0x40, 0xd4, 0xfe, 0xc0, 0xc9, 0x74, 0x92, 0xd2, 0x80, 0x15, 0xe8, 0x69, 0x86, 0x61, 0x25, - 0xbc, 0x32, 0x1b, 0xda, 0x9f, 0x6a, 0x32, 0x93, 0x4b, 0x6e, 0xe2, 0x20, 0x1b, 0xf5, 0xc2, 0xa6, - 0xcf, 0x1c, 0x0a, 0x8e, 0x2b, 0xeb, 0x4d, 0x90, 0x01, 0x89, 0x6d, 0xb9, 0x96, 0x2b, 0xa6, 0x72, - 0xb9, 0xe2, 0x9f, 0x4e, 0x26, 0x57, 0x2c, 0x2e, 0x7a, 0xd0, 0x0a, 0x49, 0x77, 0x34, 0xa2, 0x58, - 0xd7, 0x80, 0x75, 0x42, 0x96, 0x64, 0xc9, 0x6d, 0xd4, 0xef, 0x36, 0x29, 0xcd, 0xea, 0xe9, 0xe2, - 0xe6, 0xec, 0x7b, 0x67, 0x73, 0x96, 0x4a, 0x25, 0xb1, 0xca, 0x14, 0x13, 0xa6, 0xdf, 0xd5, 0xcd, - 0x29, 0x24, 0x40, 0xbb, 0xfa, 0x0f, 0xe3, 0xe7, 0xb7, 0x6f, 0xec, 0x21, 0x95, 0x0d, 0x1e, 0x73, - 0x80, 0x2e, 0xb4, 0xdf, 0x53, 0x35, 0xad, 0xe5, 0xcc, 0x40, 0x9c, 0xfc, 0xb2, 0xfa, 0xed, 0xc4, - 0x1f, 0x73, 0x25, 0x81, 0x35, 0x60, 0xc4, 0xdc, 0x47, 0xa8, 0xc3, 0xbd, 0xe4, 0xe0, 0x25, 0xf9, - 0x4b, 0x22, 0xe9, 0x36, 0xe9, 0xab, 0xfa, 0x25, 0xe0, 0x9b, 0x48, 0xc2, 0x9b, 0x62, 0x75, 0x12, - 0xd3, 0x3f, 0xb5, 0xd4, 0x40, 0x9a, 0xfd, 0xa9, 0x49, 0xe9, 0x02, 0xfc, 0x91, 0xa5, 0xdc, 0x9f, - 0x94, 0x1e, 0x97, 0x47, 0x58, 0x02, 0xfb, 0x49, 0x24, 0x93, 0x92, 0x91, 0xaa, 0xe7, 0x17, 0x01, - 0x5f, 0x83, 0x48, 0xb0, 0x0d, 0x8d, 0xa4, 0x89, 0x65, 0x01, 0xec, 0xe2, 0x25, 0x4c, 0x18, 0xe1, - 0xbe, 0x25, 0xd0, 0xd7, 0x9a, 0x28, 0x39, 0xc9, 0xc5, 0x02, 0xfe, 0xbf, 0xf6, 0x3d, 0xe3, 0xce, - 0x2d, 0xe1, 0xbb, 0xa3, 0x3a, 0x1a, 0xd9, 0xba, 0x3f, 0xdd, 0xdb, 0xfd, 0x9e, 0x61, 0xcf, 0x31, - 0x13, 0xaf, 0x47, 0x48, 0xb7, 0xad, 0x74, 0x5e, 0x12, 0x30, 0x73, 0x90, 0xf0, 0x20, 0x57, 0x3d, - 0x0e, 0x86, 0x39, 0xb8, 0xa7, 0x11, 0x7c, 0xb4, 0x77, 0x66, 0x37, 0x4a, 0xff, 0x1c, 0x04, 0x1d, - 0x4c, 0x0a, 0x98, 0x59, 0x62, 0x12, 0x98, 0x01, 0x86, 0xd9, 0x2f, 0xda, 0x81, 0xf9, 0xe6, 0x10, - 0xb7, 0x74, 0x42, 0x64, 0xbd, 0xc0, 0xac, 0xd5, 0xd2, 0x0e, 0xe3, 0x62, 0x90, 0x8e, 0x2a, 0x9b, - 0x0f, 0x99, 0x67, 0x65, 0xac, 0xb8, 0x05, 0x24, 0x2d, 0x6d, 0x5b, 0x9d, 0xba, 0xa8, 0x5a, 0x46, - 0xfa, 0xd9, 0xc6, 0xd7, 0x65, 0xfe, 0xd6, 0x0c, 0xe8, 0x4f, 0x22, 0xc0, 0xdc, 0x1d, 0x53, 0xed, - 0xbc, 0x50, 0x2e, 0xc5, 0xf2, 0x4d, 0x94, 0xd2, 0x97, 0x90, 0x82, 0x85, 0xbe, 0x9a, 0xf4, 0x41, - 0x94, 0xe6, 0x74, 0xd4, 0x6b, 0xb9, 0x92, 0x2c, 0x4d, 0x06, 0x84, 0x68, 0xa7, 0x38, 0xf6, 0x3a, - 0x4c, 0x91, 0xda, 0x97, 0x2c, 0x4b, 0x69, 0xe8, 0x7d, 0x8d, 0xd4, 0x72, 0x65, 0xb7, 0xc0, 0xae, - 0x6a, 0x11, 0x4a, 0x89, 0x9a, 0xd8, 0x81, 0x29, 0xfb, 0x32, 0x51, 0x6d, 0x98, 0x4b, 0x9a, 0x32, - 0x33, 0x46, 0x4e, 0xed, 0x07, 0x50, 0x7d, 0x68, 0x1a, 0x3a, 0x00, 0x54, 0xc3, 0x3e, 0x47, 0x6a, - 0xfa, 0x1e, 0x2b, 0x49, 0x86, 0x89, 0x55, 0xec, 0xda, 0x7c, 0xb1, 0xf8, 0xb9, 0x48, 0x4a, 0x14, - 0x32, 0x98, 0xdb, 0x09, 0x51, 0xd5, 0x4d, 0xa8, 0x07, 0xd3, 0x5a, 0x94, 0xe8, 0x1c, 0xb7, 0x51, - 0x8e, 0x01, 0xa0, 0x89, 0x6c, 0x32, 0x54, 0x8e, 0xae, 0x31, 0x35, 0x58, 0x8c, 0x74, 0x9c, 0xba, - 0xb4, 0xe8, 0xc8, 0x84, 0xf9, 0x46, 0x2e, 0x5b, 0x9a, 0xda, 0x25, 0x96, 0x9d, 0x80, 0xf2, 0x74, - 0x26, 0x38, 0x1f, 0x53, 0xd9, 0xf9, 0x80, 0xca, 0x0e, 0xa3, 0xb2, 0x85, 0x9d, 0x39, 0xc6, 0xa8, - 0x33, 0xa0, 0xc4, 0x76, 0xde, 0x25, 0x36, 0x2d, 0x6c, 0xd7, 0xaf, 0xf1, 0xe7, 0x86, 0xd6, 0x01, - 0x54, 0x46, 0x66, 0x62, 0x9d, 0x62, 0xf8, 0x83, 0x75, 0x48, 0x0b, 0x89, 0x3f, 0xd7, 0xa5, 0x39, - 0x00, 0x8b, 0x72, 0xc0, 0xa9, 0x43, 0xa9, 0x23, 0x90, 0xdb, 0xd6, 0x58, 0xd1, 0x12, 0x14, 0x2d, - 0x11, 0x49, 0x08, 0x79, 0x04, 0xe5, 0x8f, 0x8f, 0x4a, 0x20, 0x9f, 0xbf, 0x7d, 0x4b, 0xd0, 0x99, - 0xeb, 0xd7, 0x82, 0xa9, 0x6a, 0xe8, 0xa7, 0x00, 0x08, 0x4c, 0x82, 0x85, 0x94, 0x95, 0x65, 0xa4, - 0x1c, 0x34, 0x7b, 0xa3, 0x0e, 0x09, 0x0c, 0x0a, 0x6b, 0x75, 0x90, 0x06, 0x64, 0x81, 0xcc, 0xcd, - 0x81, 0xaa, 0x75, 0xa1, 0xca, 0x27, 0x0b, 0x6a, 0x6e, 0x41, 0x7e, 0x9a, 0xd8, 0x38, 0xa7, 0xb7, - 0xd6, 0xfe, 0xa3, 0x07, 0xeb, 0xcd, 0x46, 0x4f, 0xe9, 0x90, 0xb9, 0xfb, 0x34, 0x54, 0xb5, 0x59, - 0xed, 0xfe, 0x08, 0x27, 0xde, 0x26, 0x10, 0xb0, 0x36, 0xb2, 0xb4, 0x04, 0x5d, 0xa6, 0x31, 0x3f, - 0x33, 0x31, 0x7a, 0xbd, 0xdc, 0xa6, 0xa7, 0x4e, 0x50, 0x6d, 0xc2, 0x5b, 0xb2, 0xbb, 0x72, 0xf5, - 0xe0, 0xac, 0xdf, 0xa0, 0x0b, 0x76, 0xa3, 0xa1, 0xdf, 0x36, 0x1a, 0x36, 0x5b, 0x05, 0xb3, 0xf8, - 0x77, 0xb8, 0xdf, 0x68, 0x1c, 0x3c, 0x0d, 0xfb, 0x8d, 0x95, 0xff, 0xed, 0x0c, 0x1b, 0x8d, 0xfe, - 0xc3, 0xe4, 0xba, 0xd9, 0x78, 0xed, 0x3c, 0x1e, 0x3f, 0x1d, 0x35, 0x6e, 0x1e, 0x9b, 0xc7, 0x8d, - 0xf3, 0x49, 0xf3, 0xcd, 0x68, 0xec, 0x34, 0x61, 0xe5, 0x9f, 0x3c, 0x1e, 0x1e, 0xed, 0xd8, 0xe5, - 0xdd, 0x8a, 0x7a, 0x31, 0x79, 0xeb, 0x0f, 0xf3, 0x67, 0x0f, 0x67, 0xfa, 0xdb, 0x53, 0xf3, 0xc5, - 0xd1, 0x9f, 0x3b, 0xed, 0xf3, 0xd4, 0x95, 0x76, 0x7c, 0xaa, 0x1c, 0xe7, 0x47, 0xda, 0xed, 0xa9, - 0xa9, 0x99, 0xf7, 0xa5, 0xdb, 0xd7, 0x7b, 0xd5, 0x20, 0xad, 0x6a, 0xf6, 0x78, 0x46, 0xe4, 0xe7, - 0x5b, 0xed, 0x78, 0xf2, 0x64, 0x15, 0xf5, 0x9b, 0xee, 0x5e, 0xfe, 0x54, 0x77, 0xba, 0x97, 0xe3, - 0x46, 0x3f, 0xd5, 0x73, 0x32, 0xbd, 0xb6, 0x7d, 0x6a, 0x1f, 0x68, 0xe7, 0xa7, 0xa3, 0x81, 0x36, - 0xbc, 0x7a, 0x3e, 0x51, 0xcb, 0xe7, 0x97, 0xbb, 0x7b, 0x47, 0xfd, 0xc9, 0xcd, 0x10, 0x54, 0x05, - 0xa5, 0x34, 0xec, 0x6a, 0xa9, 0xd6, 0xe1, 0xed, 0xce, 0x60, 0xef, 0xa8, 0x7b, 0xb8, 0x3f, 0x55, - 0x5e, 0xca, 0x76, 0x61, 0x2f, 0x33, 0x7b, 0x1b, 0x1c, 0xb7, 0x9e, 0x9b, 0xe5, 0x9d, 0xab, 0xab, - 0xd3, 0xde, 0xee, 0xc4, 0x30, 0xf7, 0x33, 0x6a, 0x49, 0x79, 0x6d, 0xed, 0x69, 0x7b, 0xfb, 0xbb, - 0x0f, 0xd3, 0xca, 0xd3, 0xdd, 0xfd, 0xf3, 0x2c, 0x6f, 0xcd, 0x86, 0x85, 0xf3, 0xd2, 0xbe, 0xf6, - 0x74, 0x55, 0x18, 0x8c, 0x52, 0xfa, 0x83, 0x7d, 0x70, 0xb4, 0x7b, 0x76, 0xb5, 0x9f, 0xef, 0x37, - 0xa6, 0x4a, 0xb6, 0xd0, 0xe8, 0x37, 0x2c, 0xe7, 0xee, 0x6c, 0xd0, 0x7b, 0xe9, 0x3f, 0xf7, 0xf6, - 0x1a, 0x6d, 0xb5, 0x39, 0x98, 0x8c, 0x5a, 0x47, 0x93, 0xbd, 0xdb, 0xe6, 0x70, 0xd4, 0xbd, 0x1c, - 0xa8, 0x57, 0xdd, 0x9b, 0x92, 0x35, 0x3e, 0x7a, 0x3e, 0x6d, 0x5d, 0x3f, 0xed, 0x4d, 0x76, 0x07, - 0xfb, 0xd5, 0x9d, 0x23, 0xdb, 0x30, 0x8e, 0x8a, 0xf9, 0x9b, 0xa3, 0xeb, 0x23, 0xe3, 0xe8, 0x76, - 0xb7, 0xf2, 0x32, 0x3b, 0x7f, 0x3a, 0x2a, 0xdf, 0x3e, 0x37, 0x66, 0x67, 0xd6, 0x75, 0x46, 0x39, - 0xcb, 0xec, 0x4e, 0x94, 0x0b, 0xd3, 0x78, 0x53, 0x06, 0xd5, 0xd3, 0x83, 0xa6, 0xfd, 0x98, 0x7b, - 0x3b, 0xcf, 0x3d, 0x5e, 0xbc, 0xd9, 0xb9, 0xd3, 0xfc, 0xf4, 0x95, 0x9c, 0x9b, 0x85, 0xb7, 0x87, - 0xe7, 0xd7, 0x4a, 0xfb, 0xe1, 0x26, 0x33, 0x38, 0xdb, 0x39, 0x7d, 0xce, 0x14, 0xf3, 0x8f, 0xbb, - 0x8d, 0xa3, 0x56, 0xaa, 0x3c, 0x2a, 0x95, 0x2a, 0x7a, 0xfe, 0x30, 0x75, 0x78, 0x7d, 0xd9, 0x7d, - 0xea, 0x66, 0x47, 0xf9, 0x9b, 0xb7, 0xee, 0xf5, 0x53, 0xf7, 0xee, 0xec, 0xa6, 0x77, 0xa4, 0x15, - 0x0f, 0x7b, 0x27, 0xfd, 0x6e, 0xb6, 0x5d, 0x6e, 0x8d, 0x5f, 0xbb, 0xd5, 0xfb, 0xea, 0xc8, 0xb4, - 0xba, 0x97, 0x95, 0xab, 0x9b, 0x8b, 0x21, 0x51, 0xde, 0x8a, 0x37, 0x97, 0x17, 0xd7, 0xc7, 0xda, - 0xee, 0xee, 0xf3, 0xe1, 0xdd, 0xf3, 0x81, 0xdc, 0x38, 0x3f, 0xbb, 0x7a, 0xb4, 0x87, 0xd7, 0xd6, - 0x89, 0x36, 0x34, 0x67, 0xaf, 0x77, 0xe5, 0x97, 0x51, 0xfb, 0xe8, 0xaa, 0x99, 0x3b, 0x68, 0x1d, - 0xbd, 0xec, 0xb7, 0x52, 0x67, 0x3a, 0x69, 0x1e, 0x17, 0x2a, 0xc7, 0xc7, 0xfb, 0x77, 0xcd, 0xc1, - 0x55, 0x6f, 0x34, 0x39, 0x39, 0x33, 0x73, 0xb3, 0xdb, 0xaa, 0x39, 0x7c, 0xcd, 0xde, 0x9d, 0xdc, - 0x5e, 0x97, 0x60, 0xc1, 0x93, 0x0f, 0x4c, 0xb9, 0xf5, 0x7c, 0xf7, 0x78, 0x7d, 0xbd, 0x9f, 0x7a, - 0x78, 0x2e, 0xa7, 0x2e, 0xd4, 0xdb, 0xd6, 0x4b, 0xe6, 0xe0, 0xe8, 0x6d, 0x94, 0x1d, 0xaa, 0x87, - 0x4f, 0xf7, 0xd3, 0x54, 0xbf, 0xf2, 0x98, 0xbd, 0xbe, 0x7d, 0x71, 0x2e, 0x87, 0xaf, 0x47, 0xaa, - 0x73, 0x7d, 0xf3, 0x70, 0x77, 0xfe, 0xf6, 0xd6, 0x74, 0x46, 0xfb, 0x97, 0x27, 0x9d, 0x43, 0xf9, - 0xed, 0x7a, 0xe7, 0x20, 0xf5, 0x58, 0xcd, 0x34, 0xf5, 0xc1, 0x8e, 0x92, 0x93, 0xc7, 0x45, 0xe3, - 0xb0, 0x67, 0xef, 0xdd, 0x9e, 0xf5, 0x1f, 0xce, 0x2e, 0xf7, 0x7a, 0x17, 0xc5, 0xa7, 0xce, 0xf1, - 0x54, 0xde, 0x3f, 0xba, 0x54, 0xef, 0x66, 0x93, 0xfe, 0x73, 0xbb, 0x74, 0x76, 0x34, 0xba, 0x4b, - 0x19, 0x4f, 0x85, 0x71, 0xee, 0xe5, 0xa5, 0x94, 0x79, 0xd3, 0x8f, 0xa6, 0xbb, 0x27, 0x56, 0x7f, - 0x74, 0x96, 0xcb, 0xcd, 0x52, 0xed, 0xfb, 0xca, 0xe4, 0xf6, 0xe0, 0x55, 0x2d, 0x2b, 0xa7, 0x95, - 0xde, 0xd5, 0xf1, 0xdb, 0x44, 0x6f, 0x3e, 0x57, 0x9c, 0x23, 0xd3, 0xec, 0x1e, 0x55, 0xdb, 0x8f, - 0xbb, 0xad, 0xbb, 0xe3, 0xbb, 0xe6, 0xd5, 0x91, 0xae, 0x9a, 0xf7, 0xf2, 0x61, 0xdb, 0xe9, 0x68, - 0x9d, 0x9b, 0xf2, 0xb8, 0x39, 0x3b, 0x1d, 0x3e, 0x28, 0xad, 0x3b, 0xeb, 0xaa, 0x75, 0x7e, 0x36, - 0x6b, 0x2b, 0xc7, 0xc7, 0x3b, 0x83, 0xdc, 0xa5, 0xfa, 0x60, 0x3d, 0xb4, 0xfb, 0xdd, 0x52, 0xa3, - 0xfd, 0x4a, 0x3a, 0xdd, 0xdd, 0x9b, 0x8b, 0xea, 0xde, 0xd5, 0xde, 0x11, 0xb9, 0x97, 0xef, 0x2e, - 0xef, 0xaf, 0x3a, 0xdd, 0xab, 0x8a, 0xe6, 0x5c, 0x5e, 0xec, 0x8d, 0x52, 0xe5, 0xd2, 0x6b, 0xee, - 0x68, 0x7a, 0x7b, 0x63, 0x1c, 0x93, 0x7b, 0xb3, 0xf7, 0x7c, 0xa5, 0x1e, 0x1e, 0x1e, 0x16, 0x61, - 0x2a, 0xed, 0x9e, 0x3e, 0x67, 0xdb, 0x87, 0xfd, 0xab, 0xe9, 0x83, 0x7d, 0x0b, 0x08, 0x9d, 0x3c, - 0xb6, 0xfb, 0xa9, 0xe6, 0x14, 0xfe, 0x57, 0xaa, 0x92, 0xc3, 0xce, 0xc5, 0x18, 0x44, 0xf4, 0x71, - 0x56, 0x2b, 0xb5, 0x65, 0x7d, 0xb7, 0xfc, 0x7c, 0x90, 0x6a, 0xb7, 0x1a, 0xd9, 0x6e, 0xf3, 0xe9, - 0x6e, 0x3a, 0x9c, 0x54, 0x9e, 0x8e, 0x33, 0x47, 0x8f, 0xce, 0xf4, 0xd2, 0x69, 0x1f, 0x4f, 0x35, - 0xf3, 0x2a, 0x73, 0x7a, 0xf0, 0xdc, 0x7a, 0x95, 0xe5, 0x9b, 0x61, 0xf7, 0xfc, 0xe8, 0x69, 0x6a, - 0x1d, 0x10, 0x2d, 0x35, 0x4b, 0x59, 0x4f, 0xc7, 0x96, 0x91, 0xd2, 0x6f, 0x07, 0xf9, 0x4b, 0xeb, - 0xfc, 0xe8, 0x60, 0x72, 0x52, 0xba, 0xb7, 0x1e, 0xce, 0xcf, 0xee, 0x72, 0xd3, 0x1b, 0x72, 0x7d, - 0x7f, 0xd8, 0x7a, 0x6e, 0x75, 0x5e, 0x9c, 0xd3, 0xe3, 0x1e, 0xc9, 0x5a, 0x9d, 0xb2, 0x6d, 0xce, - 0xc6, 0x2f, 0xf9, 0x76, 0xe9, 0xae, 0xf0, 0x52, 0xa8, 0xb4, 0xac, 0x7c, 0x63, 0x98, 0xbd, 0x1c, - 0x67, 0xae, 0xd4, 0xde, 0xc0, 0x3e, 0xca, 0x8d, 0xce, 0xc6, 0x9d, 0x4a, 0x29, 0x7f, 0xa1, 0x5e, - 0x5d, 0x5d, 0x9f, 0x1b, 0xa4, 0x6b, 0x5e, 0xf6, 0x0e, 0xf5, 0xd6, 0xa4, 0x03, 0xd2, 0x30, 0xa5, - 0xec, 0xee, 0xed, 0x95, 0xca, 0x9d, 0x93, 0xb7, 0x9b, 0xfe, 0x8e, 0x76, 0xd5, 0x7f, 0x36, 0x9f, - 0xfb, 0x37, 0xbb, 0xfa, 0xb1, 0x73, 0xa0, 0x3f, 0xe4, 0x5e, 0xdb, 0xc3, 0x87, 0xe3, 0xd2, 0xfe, - 0xc5, 0xce, 0xe9, 0x53, 0x79, 0x62, 0x5b, 0xa9, 0xe3, 0xa7, 0xb7, 0x47, 0xbd, 0xfd, 0xdc, 0x6d, - 0xbf, 0x34, 0x47, 0x7b, 0xbd, 0x5b, 0xf9, 0x70, 0xac, 0x4d, 0x5e, 0xdb, 0xce, 0x6d, 0xff, 0xb8, - 0xfc, 0x76, 0xfd, 0xb0, 0x7f, 0x7e, 0x6c, 0x8f, 0x5b, 0x53, 0x6d, 0xf2, 0x96, 0xbb, 0x7f, 0x74, - 0x94, 0xc2, 0xf4, 0xd9, 0x52, 0x33, 0x3d, 0x7b, 0xa4, 0xe9, 0xfa, 0xfe, 0xdd, 0xe5, 0xcc, 0xd0, - 0xcd, 0x4b, 0xf9, 0xfa, 0xb4, 0x68, 0xdc, 0x9d, 0x9f, 0xbc, 0xbc, 0xf4, 0xf6, 0xb4, 0x83, 0x42, - 0xc7, 0xbe, 0xd9, 0x3d, 0x6f, 0xd8, 0xfd, 0xb7, 0x66, 0xbe, 0x72, 0x50, 0xee, 0xb7, 0x4e, 0xee, - 0xfa, 0xad, 0xa7, 0xf2, 0x30, 0xd3, 0xd9, 0x1b, 0x9f, 0x34, 0x4e, 0x87, 0xd3, 0x93, 0xb7, 0x4c, - 0x66, 0x54, 0x1e, 0x94, 0x48, 0xff, 0x70, 0xbf, 0x7c, 0x66, 0x1d, 0x16, 0x9e, 0x8f, 0xcd, 0xcc, - 0xd3, 0xb4, 0xf0, 0x9a, 0xcf, 0x29, 0x95, 0x9b, 0x72, 0x76, 0xaa, 0x1f, 0xde, 0x5d, 0x37, 0x0f, - 0xb4, 0xde, 0xfe, 0xd3, 0xb9, 0xe3, 0x74, 0x73, 0xfb, 0x9d, 0x5b, 0x45, 0x99, 0x95, 0x48, 0xf5, - 0xf2, 0x65, 0x30, 0xea, 0xcc, 0xae, 0x65, 0xe3, 0x72, 0x94, 0x7d, 0xcb, 0xbe, 0x65, 0x76, 0x77, - 0x52, 0x95, 0x89, 0x3a, 0x6d, 0xec, 0x77, 0xcf, 0x6e, 0xb3, 0x7d, 0x7d, 0xb8, 0x53, 0x98, 0x36, - 0x26, 0xa5, 0x8a, 0x39, 0x39, 0xec, 0xdc, 0x3f, 0x6b, 0xfb, 0xd6, 0x8e, 0xfe, 0x30, 0x3d, 0x7d, - 0x7e, 0x2e, 0xe5, 0x6f, 0x0f, 0xfa, 0xe3, 0xf3, 0x83, 0xbb, 0x83, 0xc6, 0xf1, 0xfe, 0xdb, 0x74, - 0x7f, 0x92, 0xba, 0x37, 0x86, 0x7a, 0xf9, 0xac, 0xa1, 0xb6, 0xef, 0xda, 0xa3, 0x92, 0x46, 0x0e, - 0xaf, 0x77, 0x8a, 0x76, 0x27, 0x2b, 0xf7, 0x4e, 0x9d, 0xb6, 0xd5, 0xb5, 0x32, 0xc7, 0xaf, 0x77, - 0xa5, 0x47, 0x2b, 0x65, 0x8c, 0x27, 0xfb, 0xce, 0xf5, 0xe1, 0x5e, 0xf9, 0xac, 0xf0, 0x76, 0x50, - 0x95, 0x5f, 0xcf, 0x77, 0x4a, 0x8f, 0xd7, 0x7b, 0x86, 0x51, 0xcc, 0xbe, 0xec, 0x1f, 0x2b, 0xed, - 0xd7, 0xfc, 0x39, 0x39, 0xbc, 0x3b, 0xe9, 0x92, 0x5e, 0x66, 0x60, 0x9f, 0xed, 0xef, 0xb7, 0x4c, - 0xa7, 0x38, 0xac, 0x3c, 0x0c, 0x8f, 0x5f, 0x77, 0x77, 0x1b, 0xfa, 0xb5, 0xdc, 0x29, 0x64, 0x2b, - 0xc3, 0xe9, 0x70, 0x6a, 0x5d, 0xbd, 0x5d, 0x8d, 0x66, 0x97, 0xba, 0x6d, 0x5e, 0x4f, 0x7a, 0x8d, - 0xc7, 0x17, 0xd3, 0x19, 0xbc, 0x59, 0x40, 0x96, 0x9b, 0xec, 0xf4, 0xbc, 0xd5, 0x2b, 0xdc, 0x3b, - 0x3b, 0x67, 0x67, 0xd5, 0xdd, 0xab, 0x9b, 0x6c, 0x75, 0x74, 0x9a, 0xea, 0xb7, 0x0b, 0xe5, 0xfe, - 0xfe, 0xe9, 0x65, 0xbe, 0x73, 0x23, 0x57, 0xf6, 0x2b, 0x47, 0x85, 0xee, 0xd3, 0xf4, 0x58, 0x2b, - 0x64, 0x0f, 0xec, 0x69, 0xf5, 0xfe, 0xf0, 0xed, 0x74, 0xe7, 0xe2, 0xf0, 0xed, 0xfe, 0xf9, 0xba, - 0x55, 0x3d, 0x3f, 0x6d, 0x5e, 0xdc, 0xee, 0x34, 0xf7, 0xaf, 0x52, 0xa3, 0x83, 0xc1, 0x4e, 0xe6, - 0xae, 0xfc, 0xf4, 0x76, 0x3b, 0x39, 0xd9, 0x6b, 0xdd, 0x0c, 0x77, 0x2d, 0xf5, 0x38, 0x75, 0x8b, - 0xbc, 0x9f, 0x69, 0xef, 0x3f, 0xec, 0x9f, 0x9d, 0x9e, 0xda, 0xcf, 0x7d, 0xb5, 0xe1, 0x14, 0x4c, - 0xb3, 0x3c, 0xd2, 0xcc, 0x69, 0x3b, 0xe7, 0xbc, 0xed, 0x55, 0x8e, 0x2a, 0xd3, 0xc1, 0xec, 0xf0, - 0x62, 0x77, 0xe7, 0x24, 0xdf, 0x3a, 0xe8, 0x97, 0xae, 0x2e, 0xb3, 0xb9, 0x1d, 0xf5, 0x32, 0xff, - 0x78, 0x36, 0xc9, 0x59, 0xbb, 0xfb, 0xce, 0xfd, 0xed, 0xee, 0xc3, 0x69, 0x8a, 0xd8, 0xfa, 0x38, - 0x7f, 0x58, 0xbd, 0x9a, 0xbe, 0xf6, 0x86, 0xed, 0x5d, 0xbd, 0x7d, 0x76, 0xfa, 0x7c, 0x70, 0xbb, - 0x6f, 0xbe, 0xbe, 0x3e, 0xb5, 0xf5, 0xfb, 0x56, 0x5f, 0xd6, 0x06, 0xf7, 0xe3, 0xea, 0xe4, 0x36, - 0x5f, 0x7c, 0xbd, 0x39, 0x7c, 0xbd, 0xac, 0xbe, 0xbd, 0xde, 0x5a, 0xa7, 0xe5, 0x97, 0xd7, 0x93, - 0xe7, 0xca, 0xe3, 0xf3, 0xd3, 0x5b, 0x5f, 0xce, 0x9a, 0xed, 0x6a, 0x6a, 0x76, 0x55, 0xb1, 0x1f, - 0x9e, 0xcc, 0xc7, 0xe9, 0xc9, 0x81, 0xba, 0x7f, 0x7c, 0x73, 0x6e, 0x1f, 0x4d, 0x26, 0xe6, 0xec, - 0xba, 0x50, 0xe8, 0xef, 0x5d, 0xe8, 0x77, 0x99, 0x14, 0x01, 0x46, 0xea, 0x1e, 0xee, 0x66, 0x72, - 0xda, 0x55, 0x7e, 0xd4, 0x2a, 0xce, 0xb2, 0xaf, 0x6f, 0x47, 0x6f, 0xce, 0xc3, 0xed, 0xf9, 0xe5, - 0x5e, 0xc9, 0xe8, 0x3e, 0x1e, 0xcb, 0x97, 0xaf, 0xb7, 0xea, 0xfd, 0xb1, 0xd3, 0x3f, 0x39, 0x38, - 0x39, 0x3b, 0x3a, 0x7d, 0x2c, 0xc9, 0xdd, 0x29, 0x79, 0x9c, 0xe9, 0xed, 0x76, 0xca, 0xde, 0x3f, - 0x39, 0x79, 0x3d, 0xd7, 0xe5, 0xfb, 0xb7, 0x9c, 0x75, 0xea, 0x9c, 0xb5, 0x77, 0xae, 0xee, 0x2f, - 0xf5, 0x47, 0x67, 0x78, 0xac, 0x14, 0xee, 0x5f, 0xf7, 0xaf, 0x8d, 0x76, 0xa6, 0x3a, 0x1c, 0x8e, - 0x66, 0x9d, 0xab, 0xbb, 0x71, 0x59, 0xed, 0x35, 0xcf, 0xc7, 0x0f, 0x96, 0x36, 0x78, 0xeb, 0xef, - 0x9e, 0xee, 0x8e, 0xc1, 0xd2, 0x4d, 0x55, 0x0e, 0x8b, 0xd3, 0xe7, 0x93, 0x6a, 0xa1, 0xd2, 0xd9, - 0x25, 0x4e, 0x6a, 0x5f, 0x79, 0xe8, 0xb5, 0x52, 0xa7, 0x2f, 0x46, 0xe6, 0xde, 0x49, 0x8d, 0x5b, - 0x9d, 0x57, 0xc5, 0x7a, 0x2d, 0xbd, 0x3c, 0xdd, 0xb4, 0x5f, 0x0a, 0xe7, 0xca, 0xc9, 0xab, 0x79, - 0xd1, 0x7e, 0xd9, 0xdb, 0x33, 0x6d, 0xa5, 0x53, 0x3d, 0xcd, 0x5a, 0xd7, 0xe7, 0x0f, 0xc7, 0xfd, - 0xcb, 0xb6, 0x75, 0x3f, 0xdb, 0xed, 0x3e, 0x3e, 0x93, 0x92, 0xb3, 0x73, 0xd5, 0x78, 0x73, 0x5e, - 0xda, 0x8f, 0x4d, 0x79, 0xb2, 0x4b, 0x0a, 0xb7, 0xfa, 0xb9, 0x6a, 0x0e, 0xf5, 0x27, 0xd0, 0x56, - 0x46, 0x99, 0xd1, 0x73, 0xaf, 0x74, 0xd2, 0x2b, 0x8f, 0x49, 0x36, 0x9b, 0x3b, 0x1c, 0xf5, 0xaa, - 0xb9, 0xbd, 0x71, 0xa6, 0x4c, 0xf4, 0x9d, 0x4c, 0x4a, 0xbf, 0x2c, 0x9b, 0x6d, 0x50, 0x33, 0xaf, - 0x8e, 0x9f, 0xda, 0xaa, 0xfc, 0xdc, 0x6c, 0x99, 0xc6, 0x79, 0x15, 0x10, 0xbf, 0x79, 0x79, 0x2e, - 0x1f, 0x9f, 0x4d, 0xcc, 0xf6, 0x7d, 0xdf, 0x30, 0x1b, 0xed, 0x81, 0xd3, 0xbe, 0xb8, 0x7f, 0x99, - 0x39, 0x8d, 0xfd, 0xfc, 0x49, 0x2a, 0xf3, 0x6a, 0xc8, 0xad, 0x46, 0xeb, 0xfc, 0x3e, 0x77, 0x90, - 0x6b, 0x9f, 0xf6, 0x74, 0x7b, 0x60, 0xee, 0x14, 0x94, 0x6a, 0x77, 0xf8, 0x56, 0xce, 0x1c, 0x4e, - 0x33, 0x99, 0x6e, 0x27, 0x7f, 0xf1, 0x70, 0xfe, 0x54, 0x00, 0x5e, 0x9d, 0x3d, 0xdc, 0xde, 0xe5, - 0xba, 0x8f, 0xd7, 0xf6, 0x6e, 0xb5, 0xfc, 0x7a, 0x72, 0x5a, 0xae, 0xbe, 0x2a, 0x6f, 0x23, 0x40, - 0xed, 0x28, 0x3b, 0xbe, 0x7c, 0xb8, 0x29, 0xe7, 0xcb, 0xc5, 0xf6, 0x7d, 0xeb, 0xc0, 0xe8, 0xec, - 0x18, 0xbd, 0xdd, 0x1c, 0x39, 0xba, 0x7e, 0x3b, 0x96, 0x3b, 0x67, 0x4d, 0x19, 0xb4, 0xb5, 0xc9, - 0x95, 0xdc, 0xef, 0x8d, 0x47, 0xad, 0xee, 0xb8, 0x9b, 0x2d, 0xf4, 0xb2, 0x23, 0xe0, 0xfa, 0xd3, - 0xcb, 0xbd, 0xfc, 0xf1, 0xf1, 0xe1, 0x69, 0x69, 0xd4, 0xec, 0x66, 0xf4, 0xa2, 0x5e, 0xe9, 0xe6, - 0x8b, 0xb7, 0x17, 0x27, 0x97, 0x7a, 0x49, 0x1f, 0x58, 0xb0, 0x40, 0x5a, 0x77, 0x79, 0xa5, 0x9b, - 0xd7, 0xdf, 0x72, 0xea, 0x8d, 0x7a, 0x7e, 0x5a, 0xc8, 0x16, 0xf6, 0x74, 0xd2, 0x3b, 0xcd, 0x1c, - 0x1f, 0x9c, 0x6a, 0xf7, 0x4f, 0xce, 0xd3, 0xbd, 0xf2, 0x6a, 0xec, 0x0d, 0x0a, 0xd3, 0xd6, 0xf3, - 0xd8, 0x3e, 0x68, 0x67, 0x4a, 0xc3, 0xaa, 0xa5, 0xec, 0x6b, 0xf6, 0xe9, 0xb0, 0x30, 0x3a, 0x7c, - 0xb9, 0xba, 0xd7, 0xc6, 0xe5, 0x9b, 0xcc, 0x84, 0x3c, 0xbd, 0x3d, 0x1f, 0x1e, 0x92, 0xf2, 0xf4, - 0x49, 0xbd, 0x7d, 0x33, 0x8f, 0x8b, 0xf7, 0x8d, 0xfb, 0x9d, 0xd3, 0xdd, 0xf3, 0xc9, 0xf5, 0xc9, - 0x74, 0x72, 0xfd, 0xa8, 0xef, 0x1b, 0x0f, 0x07, 0xd3, 0x8e, 0x72, 0x32, 0x3d, 0x2f, 0xed, 0x5e, - 0x57, 0x76, 0xce, 0xf5, 0x9c, 0x51, 0x3d, 0x7f, 0x85, 0x11, 0x76, 0xc6, 0x96, 0x52, 0xbc, 0xd1, - 0x8f, 0x9e, 0x1f, 0xce, 0x76, 0xb4, 0xe1, 0xd1, 0xfe, 0x53, 0x7e, 0x76, 0xf9, 0xf8, 0x90, 0x3f, - 0x73, 0xaa, 0xe3, 0xe2, 0x70, 0x78, 0x38, 0x9a, 0x3c, 0x8e, 0xc7, 0xd3, 0xcb, 0x31, 0xb1, 0x4e, - 0xab, 0xa4, 0x35, 0xb6, 0xdf, 0x1e, 0xce, 0x9f, 0x6f, 0x1f, 0xac, 0x97, 0xf6, 0x6b, 0xe7, 0xe0, - 0xe2, 0xee, 0x3e, 0xd7, 0xde, 0x6b, 0xef, 0x1e, 0x9c, 0xa8, 0xf9, 0xb3, 0xd3, 0xbb, 0x9b, 0xfb, - 0xb7, 0xb7, 0xfb, 0xc3, 0xfd, 0x62, 0x61, 0x67, 0x94, 0xc9, 0x59, 0x8d, 0xec, 0xeb, 0x8b, 0x51, - 0xd2, 0xaa, 0xbd, 0xfd, 0xfe, 0x5d, 0x7b, 0x67, 0x64, 0xf5, 0xee, 0x76, 0xee, 0xf7, 0xf7, 0xb5, - 0xbb, 0xfb, 0xec, 0xa8, 0x3f, 0xbd, 0x98, 0x74, 0xec, 0x54, 0xe5, 0x3e, 0x93, 0x01, 0xf9, 0xf4, - 0x74, 0xac, 0x92, 0x53, 0xad, 0x7a, 0xff, 0xd0, 0xa8, 0x90, 0x83, 0xd3, 0x62, 0xc7, 0xda, 0x29, - 0xf7, 0x06, 0x17, 0x67, 0xb3, 0xa9, 0x56, 0x69, 0x3f, 0x5f, 0xdd, 0x1f, 0x3c, 0xef, 0x64, 0xdb, - 0xf7, 0x19, 0xe3, 0xa5, 0x74, 0xdb, 0x79, 0x25, 0xba, 0x6d, 0x95, 0xf7, 0x2b, 0x87, 0xe5, 0x91, - 0x63, 0x0f, 0xbb, 0xaf, 0xc6, 0xe1, 0xf0, 0xad, 0x5a, 0xb5, 0xc6, 0x33, 0xb2, 0x97, 0xb9, 0x7c, - 0x03, 0x05, 0xa1, 0x30, 0x1c, 0xdf, 0x3d, 0x9c, 0x3e, 0xcf, 0x1e, 0x2b, 0xe3, 0xca, 0x73, 0xf1, - 0x61, 0xf0, 0x44, 0x0e, 0xf3, 0xca, 0xe5, 0x43, 0xb9, 0xd8, 0x35, 0xd5, 0x8b, 0x22, 0x39, 0xcf, - 0x5c, 0xbc, 0x4d, 0x3a, 0x07, 0xe5, 0xb7, 0x97, 0x9e, 0xe6, 0x64, 0xec, 0x6e, 0x91, 0x94, 0x1f, - 0x3b, 0xaf, 0xed, 0x0b, 0x63, 0xd2, 0xbb, 0xee, 0xe7, 0x72, 0xd7, 0xc5, 0x62, 0xa5, 0xa8, 0x38, - 0xb9, 0xf1, 0xc3, 0x43, 0xa5, 0x7c, 0x9f, 0x7d, 0x94, 0xfb, 0x57, 0x72, 0xb9, 0x5a, 0xa8, 0x96, - 0xc9, 0xe3, 0x4d, 0x76, 0xef, 0x65, 0x66, 0xec, 0xbd, 0x9e, 0x3d, 0x82, 0x0e, 0x78, 0xd8, 0xad, - 0x5c, 0x8d, 0x4f, 0x0e, 0xac, 0xeb, 0x83, 0x52, 0xfb, 0xf8, 0xf1, 0x66, 0xb7, 0xd9, 0x7c, 0x7a, - 0x3c, 0xd8, 0xbb, 0xef, 0x0c, 0x8b, 0x07, 0x59, 0x20, 0x63, 0x4e, 0x2d, 0x16, 0x1e, 0xab, 0xf7, - 0x8e, 0xba, 0x33, 0x7a, 0xd1, 0x2e, 0x8b, 0xe5, 0x47, 0x67, 0xe7, 0xe9, 0xac, 0x71, 0xaf, 0x8d, - 0x72, 0xbd, 0xc7, 0xb7, 0xdd, 0xb3, 0xf2, 0x55, 0xaa, 0xb8, 0x0f, 0x92, 0xbc, 0x95, 0xbf, 0x78, - 0x2b, 0x3e, 0xc3, 0x1a, 0x76, 0xa4, 0x74, 0x9c, 0xf6, 0xfd, 0xa5, 0x31, 0x19, 0x5d, 0xf5, 0xcf, - 0x67, 0x87, 0xda, 0xe8, 0x44, 0x53, 0x26, 0xd5, 0x89, 0xde, 0xbe, 0x18, 0x3a, 0x23, 0xe5, 0xd9, - 0xc8, 0xdc, 0xb5, 0x26, 0x55, 0x90, 0xc8, 0xad, 0xeb, 0xc9, 0x59, 0x67, 0x04, 0x6c, 0xf9, 0x34, - 0xd9, 0x1f, 0x0c, 0x4a, 0x76, 0x79, 0x60, 0xbf, 0x5a, 0xea, 0x7d, 0xd3, 0xee, 0x37, 0x72, 0x76, - 0x5e, 0xdf, 0x07, 0xb5, 0xb9, 0x70, 0x54, 0xbe, 0x48, 0x29, 0xf6, 0x74, 0x32, 0x7d, 0x6a, 0x3b, - 0xa7, 0xa7, 0x72, 0x7e, 0xaf, 0xda, 0x1e, 0x74, 0xae, 0x4b, 0x8f, 0x6f, 0xd5, 0xe1, 0x51, 0x7b, - 0x5f, 0xbe, 0xad, 0x96, 0x4e, 0xe4, 0xe9, 0x41, 0xa3, 0xdc, 0x9e, 0x56, 0x67, 0x29, 0x2d, 0x97, - 0xc9, 0x94, 0xf3, 0xcf, 0xa9, 0xc3, 0x9c, 0x2a, 0xef, 0x1d, 0x74, 0x73, 0xe5, 0x51, 0xe3, 0xee, - 0xfc, 0x28, 0x73, 0x3f, 0x68, 0x3e, 0x8e, 0xee, 0x5f, 0x8f, 0x76, 0x95, 0xc7, 0xa9, 0xd2, 0xb5, - 0x65, 0xad, 0x73, 0xb7, 0x7f, 0x97, 0xea, 0x5e, 0x68, 0x87, 0xc3, 0x9d, 0x69, 0xe6, 0xf5, 0xa2, - 0xdc, 0x29, 0x65, 0x46, 0x4f, 0x0f, 0xb2, 0x73, 0x4d, 0x6e, 0x9d, 0xe3, 0xab, 0x71, 0xa9, 0x30, - 0x03, 0xf6, 0x6d, 0x8c, 0x1f, 0x4a, 0xd3, 0x5d, 0xf2, 0xd6, 0x78, 0xc8, 0x54, 0xee, 0x87, 0x95, - 0x66, 0x7f, 0x90, 0xa9, 0x16, 0x2f, 0xaa, 0x17, 0x53, 0xfb, 0xbc, 0xf9, 0xa8, 0xdb, 0x0f, 0xf7, - 0x57, 0xa9, 0xb2, 0xd9, 0x7c, 0xab, 0x64, 0xce, 0xcf, 0x9e, 0x8a, 0xe5, 0xa7, 0xc6, 0xd1, 0xc1, - 0x5e, 0xf7, 0x66, 0x92, 0x52, 0xcc, 0xca, 0x5d, 0xea, 0x28, 0x7f, 0x7e, 0x7b, 0x47, 0x60, 0x4e, - 0x4d, 0xd4, 0x71, 0x4a, 0xeb, 0x74, 0x5e, 0x9f, 0xb3, 0xe5, 0xdc, 0x43, 0xf9, 0x71, 0x52, 0xec, - 0x1f, 0x37, 0x6e, 0xaf, 0x0e, 0x1e, 0x2f, 0xaf, 0x4a, 0x57, 0xb3, 0xe9, 0x75, 0xaf, 0x4f, 0x9a, - 0xa9, 0xab, 0x4e, 0xf1, 0x5e, 0x6f, 0x9c, 0x35, 0x1b, 0x87, 0xfb, 0xe3, 0xd2, 0xcd, 0xb1, 0x43, - 0x9c, 0xbc, 0xa9, 0x67, 0x2a, 0xf9, 0x76, 0xe1, 0xb1, 0xd9, 0x38, 0xda, 0x19, 0xe7, 0x8b, 0x46, - 0xcf, 0xbc, 0xb9, 0x9e, 0x39, 0xc5, 0xcb, 0x67, 0xd0, 0x49, 0x6f, 0x2a, 0x27, 0x8f, 0x8d, 0xbd, - 0xab, 0x93, 0x8a, 0xbe, 0xdf, 0xdf, 0xe9, 0x80, 0x5a, 0x7c, 0x3b, 0x01, 0xde, 0x7f, 0x3d, 0x6c, - 0xed, 0x9c, 0x18, 0x7b, 0x07, 0xe5, 0x93, 0xa7, 0xab, 0xd3, 0x33, 0xf3, 0xd9, 0x28, 0x8e, 0x06, - 0x4a, 0xe6, 0xf2, 0x28, 0x37, 0x1b, 0xed, 0xdc, 0x5f, 0x34, 0x6f, 0x5a, 0xbb, 0x4f, 0xca, 0xb3, - 0xf9, 0x7a, 0x55, 0xaa, 0xa4, 0x9e, 0x94, 0x6c, 0xe5, 0xb9, 0x7f, 0xd0, 0x7f, 0x3c, 0xbb, 0xa9, - 0xe8, 0x3b, 0x83, 0xe7, 0x93, 0xce, 0xbe, 0x75, 0xd2, 0x7c, 0xdc, 0x2f, 0xcd, 0x4e, 0x5a, 0x4f, - 0xd7, 0xa7, 0xfb, 0x45, 0xe7, 0xba, 0xf8, 0x78, 0x32, 0xb8, 0x7d, 0x7b, 0x3b, 0xbf, 0x3f, 0x2b, - 0xe6, 0x86, 0x3b, 0xe3, 0xd1, 0xe5, 0x99, 0x7a, 0x5a, 0x9e, 0x5e, 0x4e, 0x0b, 0xb7, 0xca, 0x75, - 0x7f, 0x5f, 0x3d, 0x7e, 0x6a, 0xdc, 0xed, 0xdb, 0x9d, 0xa7, 0xdc, 0xe1, 0xed, 0xd1, 0xe0, 0xf6, - 0xb2, 0xb3, 0xa7, 0x1c, 0x16, 0xef, 0xef, 0x77, 0xc7, 0xe3, 0xe1, 0xb8, 0x7b, 0xd9, 0xd3, 0x8a, - 0x27, 0x4a, 0x73, 0x7c, 0x51, 0x31, 0xb2, 0xa9, 0xde, 0x7e, 0x73, 0xa7, 0x5d, 0x1a, 0x8c, 0x47, - 0xa7, 0x6f, 0x15, 0xed, 0xec, 0xfa, 0x62, 0xd2, 0x7b, 0xbe, 0x3c, 0xaf, 0xa8, 0x8a, 0x55, 0x95, - 0xaf, 0x9b, 0x4d, 0xf5, 0xba, 0x79, 0x6c, 0xe5, 0x47, 0xfd, 0xd7, 0xc3, 0x5e, 0xe9, 0xf4, 0xb5, - 0x7f, 0xfb, 0xf8, 0x68, 0x17, 0x07, 0x6f, 0xe3, 0x51, 0xd5, 0x39, 0x3b, 0xba, 0xb8, 0xb5, 0x32, - 0x53, 0x73, 0x7c, 0x6d, 0x9f, 0xdf, 0x8d, 0xbb, 0x4f, 0x19, 0x33, 0x35, 0xdc, 0xa9, 0xe8, 0xe5, - 0xbb, 0x1c, 0x48, 0x45, 0xf9, 0x26, 0xa5, 0x5c, 0x0f, 0x2e, 0xcd, 0xf3, 0x81, 0x7d, 0xbe, 0x7f, - 0xf1, 0x3a, 0x35, 0xf6, 0x72, 0x23, 0xd9, 0x1e, 0xbd, 0xde, 0xa8, 0x66, 0x7f, 0x5a, 0xac, 0x1c, - 0x1d, 0x37, 0xa8, 0x27, 0xb0, 0x9e, 0x14, 0x7a, 0x86, 0x35, 0x54, 0x9c, 0xc4, 0x3a, 0x1a, 0x50, - 0xeb, 0xc9, 0x45, 0xcd, 0x32, 0x0c, 0x67, 0xbe, 0xb1, 0xd1, 0xd9, 0xc8, 0xd6, 0xbe, 0x66, 0xb3, - 0xd9, 0x4d, 0x7c, 0xec, 0xd5, 0xbe, 0xf6, 0x7a, 0x3d, 0xfa, 0x98, 0xab, 0xa1, 0xff, 0x95, 0x3e, - 0xe6, 0x6b, 0x5f, 0xf3, 0xf9, 0x3c, 0x7d, 0x2c, 0xd4, 0xbe, 0x16, 0x0a, 0x05, 0xfa, 0x58, 0xac, - 0x7d, 0x2d, 0x16, 0x8b, 0xf4, 0xb1, 0x54, 0xfb, 0x5a, 0x2a, 0x95, 0xe8, 0x63, 0xa5, 0xf6, 0xb5, - 0x52, 0xa9, 0xd0, 0xc7, 0x76, 0xed, 0x6b, 0xbb, 0xdd, 0xa6, 0x8f, 0x9d, 0xda, 0xd7, 0x4e, 0xa7, - 0x43, 0x1f, 0x49, 0xed, 0x2b, 0x21, 0x84, 0x3e, 0x76, 0x6b, 0x5f, 0xbb, 0xdd, 0x2e, 0x7d, 0xb4, - 0xa0, 0x40, 0x9e, 0xf5, 0xd6, 0x87, 0x8e, 0x3b, 0x0c, 0x1c, 0x0d, 0x7a, 0xab, 0x28, 0xf4, 0x71, - 0x56, 0xfb, 0xaa, 0x54, 0x65, 0x78, 0x74, 0xa0, 0x5d, 0x39, 0xcd, 0xfa, 0x35, 0x6a, 0x56, 0xbf, - 0xad, 0x24, 0xf2, 0x05, 0x49, 0xf0, 0xfe, 0xc9, 0xe9, 0x6a, 0x92, 0xe6, 0x39, 0xed, 0xe5, 0x4c, - 0xb0, 0xeb, 0x13, 0xb4, 0x85, 0xa4, 0x57, 0x46, 0x61, 0x85, 0xb2, 0x72, 0x4e, 0x12, 0x82, 0x3f, - 0xcb, 0xe5, 0x06, 0xac, 0x5c, 0x31, 0x2b, 0x09, 0xde, 0xbf, 0x70, 0x21, 0x67, 0x50, 0x2b, 0xcb, - 0xe6, 0x14, 0x9f, 0x4c, 0xef, 0x09, 0x6a, 0x95, 0xf2, 0x2c, 0xad, 0x6d, 0xd6, 0xb2, 0x05, 0x73, - 0x2a, 0xb0, 0x3f, 0xb2, 0xfb, 0x84, 0x65, 0x20, 0xa7, 0x0a, 0xaf, 0xb2, 0x50, 0xc6, 0xbf, 0xb4, - 0x56, 0xb7, 0xa6, 0x1b, 0x3a, 0x92, 0xc8, 0xee, 0x9b, 0x35, 0xb1, 0x8d, 0xee, 0x11, 0x11, 0x33, - 0x86, 0x4e, 0x0d, 0x6a, 0x2e, 0xd0, 0x7b, 0x3f, 0xa7, 0xfe, 0x84, 0x0d, 0x85, 0xb9, 0x50, 0x86, - 0x0a, 0xe8, 0xff, 0x23, 0x8d, 0x7a, 0x20, 0x16, 0x6d, 0xa3, 0x3b, 0x9b, 0x0f, 0x15, 0xab, 0xaf, - 0xea, 0x35, 0x79, 0x13, 0x7d, 0x4c, 0x7d, 0xcb, 0x18, 0xe9, 0x5d, 0xe6, 0x5f, 0xaf, 0x31, 0xb0, - 0x61, 0xd4, 0x93, 0x9b, 0xbc, 0xbd, 0x7d, 0x48, 0xb4, 0x31, 0x71, 0xd4, 0x8e, 0x22, 0xdd, 0x11, - 0xab, 0xab, 0xe8, 0x8a, 0x64, 0x2b, 0xba, 0xbd, 0x61, 0x13, 0x4b, 0xed, 0xb1, 0x82, 0xb6, 0xfa, - 0x46, 0x6a, 0x59, 0x80, 0x72, 0x33, 0xdc, 0x50, 0x2f, 0xb9, 0x89, 0xfe, 0xe2, 0x0d, 0x45, 0x53, - 0xfb, 0x7a, 0xad, 0x43, 0xd0, 0x9f, 0xb0, 0x89, 0xae, 0xf8, 0x17, 0xd5, 0xd9, 0x60, 0x60, 0xa2, - 0xd7, 0x13, 0xfd, 0x3a, 0x0c, 0x2d, 0x37, 0x6b, 0x04, 0x6d, 0x43, 0xfb, 0x1a, 0xe9, 0x78, 0x19, - 0x43, 0xe3, 0x2d, 0x2e, 0xd5, 0x5e, 0x4e, 0x5c, 0x2e, 0xe5, 0xf5, 0xa7, 0x98, 0x1b, 0x03, 0xb5, - 0x3f, 0xd0, 0xd0, 0xff, 0xe4, 0x62, 0xec, 0x58, 0x80, 0x89, 0xa9, 0x58, 0x00, 0xd9, 0xa6, 0xdd, - 0xb1, 0x0c, 0x4d, 0x6b, 0x2b, 0x16, 0xdb, 0xbf, 0xa8, 0x95, 0x00, 0x9d, 0x20, 0x2d, 0x8c, 0x98, - 0xdd, 0x4e, 0x0a, 0x5c, 0x5d, 0x4a, 0x58, 0x89, 0x12, 0x9f, 0xb9, 0x36, 0x6b, 0x59, 0x59, 0xfe, - 0xd7, 0x26, 0x6b, 0x87, 0x3e, 0x9a, 0x86, 0xad, 0xd2, 0xf1, 0xe8, 0xa9, 0x53, 0xd2, 0xdd, 0x34, - 0x60, 0x59, 0x65, 0x6d, 0x6f, 0xb4, 0xc9, 0x40, 0x19, 0xab, 0xd0, 0x36, 0x02, 0xbb, 0xf8, 0xda, - 0xee, 0x73, 0x4d, 0x8c, 0x07, 0x41, 0x1b, 0xe3, 0x49, 0xb4, 0x91, 0xb7, 0x0d, 0x55, 0xef, 0x92, - 0x69, 0x6d, 0x23, 0x1b, 0x1a, 0x4b, 0xbf, 0x94, 0x4b, 0x6f, 0x2e, 0xcb, 0x22, 0x26, 0x51, 0x90, - 0x2c, 0xee, 0x13, 0x9f, 0x47, 0xc7, 0xb0, 0x83, 0x80, 0x6d, 0x1a, 0xa6, 0xd2, 0x51, 0x9d, 0x19, - 0xb0, 0x08, 0xc5, 0x91, 0xb5, 0xe6, 0x26, 0x0a, 0x39, 0x7b, 0x61, 0x7a, 0x3c, 0x44, 0xb9, 0x55, - 0x16, 0x72, 0xf8, 0x77, 0xa1, 0x48, 0x4a, 0x6d, 0xac, 0x42, 0x69, 0xd2, 0x95, 0xcc, 0x79, 0x98, - 0x5e, 0xdd, 0x24, 0x9f, 0x3d, 0xa7, 0x4c, 0xd1, 0x25, 0x1d, 0xc3, 0xa2, 0x7c, 0xc9, 0x50, 0x6f, - 0x8f, 0x1c, 0xc7, 0xd0, 0xe7, 0xc0, 0x0c, 0x9a, 0xaa, 0x13, 0xe8, 0xbc, 0x33, 0xb2, 0x6c, 0x68, - 0xc3, 0x34, 0x54, 0xc4, 0x63, 0x91, 0xd6, 0x94, 0x36, 0xd1, 0xec, 0x80, 0x7f, 0x4d, 0xa5, 0xdb, - 0x55, 0xf5, 0x7e, 0xad, 0xc2, 0x01, 0xf1, 0x15, 0xb7, 0x7e, 0x68, 0xc1, 0x79, 0x84, 0x5a, 0x6d, - 0x03, 0x9a, 0x1f, 0xd6, 0x80, 0xdf, 0x3a, 0x09, 0x06, 0x56, 0x7b, 0x90, 0x14, 0x52, 0x02, 0x0c, - 0x73, 0x72, 0xd3, 0xa2, 0x14, 0x2f, 0x2d, 0x31, 0x70, 0x25, 0x19, 0x81, 0x62, 0x73, 0x62, 0x41, - 0xa3, 0x7a, 0x1f, 0x18, 0xb2, 0x4b, 0x6a, 0x40, 0x2c, 0x9c, 0x17, 0xda, 0x86, 0xa5, 0x2d, 0xd2, - 0x6d, 0x4b, 0x9d, 0x7b, 0x20, 0xc1, 0x04, 0x5e, 0xa4, 0x27, 0x16, 0xfa, 0xb9, 0xac, 0x28, 0x20, - 0x8e, 0x61, 0x02, 0xf0, 0x1a, 0xe9, 0xc1, 0x94, 0x75, 0x3b, 0xe6, 0xc7, 0xcf, 0xef, 0xdb, 0x69, - 0x27, 0xfd, 0x21, 0xce, 0x2e, 0xd2, 0xb8, 0x01, 0x65, 0xc7, 0xf9, 0xc1, 0xd8, 0x0c, 0x44, 0x8f, - 0x19, 0xd0, 0x11, 0xe4, 0xb8, 0xc6, 0xcd, 0xc9, 0x1c, 0x00, 0xf2, 0x45, 0x1d, 0xe2, 0x6e, 0x9d, - 0x02, 0x2c, 0x8e, 0x84, 0xdd, 0xf0, 0xd8, 0x8b, 0x4b, 0xef, 0xaa, 0xb6, 0xa9, 0x29, 0xb3, 0x9a, - 0xaa, 0xd3, 0x12, 0x54, 0xac, 0x2c, 0xd2, 0x30, 0x18, 0x61, 0x6a, 0xf4, 0x93, 0x41, 0x1d, 0xc8, - 0xee, 0xf5, 0x22, 0xf9, 0x25, 0x2e, 0xdf, 0xa3, 0x1b, 0x58, 0x7a, 0xca, 0x48, 0x73, 0xf8, 0x8a, - 0x30, 0x12, 0x02, 0x43, 0x47, 0x4a, 0x03, 0x31, 0xdc, 0x67, 0x6f, 0x5c, 0x37, 0xe8, 0x40, 0x0a, - 0x05, 0x3a, 0x9c, 0xe9, 0xc1, 0xa8, 0xef, 0x3a, 0xff, 0x28, 0x3e, 0x85, 0x1c, 0x12, 0xd6, 0xd4, - 0x80, 0xb3, 0xad, 0x99, 0x70, 0xd3, 0xd8, 0x39, 0xdd, 0x93, 0xd2, 0x36, 0xe9, 0x3b, 0x73, 0x07, - 0x77, 0xf5, 0x36, 0x5c, 0x27, 0x31, 0x23, 0x74, 0x30, 0xfd, 0x16, 0xb4, 0x8c, 0x70, 0xb3, 0xeb, - 0x0f, 0x10, 0xed, 0x84, 0x83, 0x76, 0x49, 0x4c, 0x71, 0xbd, 0xec, 0x4a, 0x7e, 0x75, 0x4e, 0xda, - 0xa1, 0xf4, 0xf6, 0x5a, 0x93, 0x37, 0x7d, 0x4e, 0x60, 0x6d, 0x0c, 0xd5, 0x6e, 0x57, 0x23, 0x8b, - 0xf4, 0x0b, 0x99, 0x39, 0x2e, 0xbb, 0xb3, 0x0c, 0x1c, 0xf6, 0x45, 0x7a, 0xac, 0x68, 0xe1, 0x64, - 0xca, 0x06, 0x6e, 0xba, 0xa0, 0x72, 0xdd, 0xd8, 0x30, 0x9e, 0xc0, 0x5b, 0x36, 0xf5, 0x40, 0xd3, - 0x4d, 0xc8, 0x80, 0x9d, 0x94, 0xb6, 0x6d, 0x68, 0x23, 0x87, 0x30, 0x5e, 0x82, 0x59, 0xe0, 0xf1, - 0x78, 0x11, 0x89, 0x04, 0x22, 0x90, 0x95, 0xa7, 0x73, 0x18, 0x57, 0x78, 0x26, 0xed, 0x60, 0x29, - 0x20, 0x0f, 0x09, 0x80, 0x3e, 0xb9, 0x48, 0x13, 0x5a, 0x42, 0x4a, 0xf7, 0xdd, 0x5f, 0xaf, 0x8e, - 0x14, 0xea, 0x30, 0x32, 0x03, 0x96, 0x66, 0xb6, 0x5b, 0x7d, 0xbe, 0xcc, 0x88, 0xcb, 0xa0, 0x22, - 0xf3, 0x23, 0xa4, 0x8c, 0xef, 0x2b, 0x74, 0x34, 0x0d, 0x33, 0x06, 0xa7, 0x38, 0x96, 0x74, 0xa7, - 0x8e, 0x3b, 0x67, 0x68, 0xcd, 0x8d, 0x4e, 0x4c, 0xdd, 0x95, 0x0b, 0x5b, 0x2e, 0x09, 0x24, 0xb2, - 0x00, 0xb1, 0x5a, 0x16, 0xc6, 0x1f, 0x4a, 0xab, 0x5d, 0x81, 0x9b, 0xea, 0x2c, 0x6f, 0xc3, 0x52, - 0xba, 0xea, 0xc8, 0xae, 0xe5, 0x70, 0xa5, 0xf6, 0x27, 0x20, 0xed, 0x3b, 0xef, 0x43, 0x9e, 0x2f, - 0x72, 0xc3, 0x0f, 0xc9, 0x02, 0x0a, 0x21, 0x68, 0x34, 0x32, 0xf7, 0x42, 0x33, 0x2e, 0x57, 0x70, - 0xd1, 0xdd, 0xe8, 0x08, 0xb0, 0x70, 0xe8, 0x21, 0x66, 0x2c, 0xb1, 0x31, 0x53, 0x2c, 0x58, 0x13, - 0x57, 0x0c, 0xb3, 0x47, 0x3b, 0x3a, 0xdc, 0x59, 0xa8, 0xe4, 0x72, 0x38, 0xed, 0x28, 0xd4, 0x07, - 0xf5, 0xde, 0x7f, 0xd4, 0x0c, 0x43, 0xa4, 0x8a, 0x32, 0x2f, 0x22, 0x68, 0x7b, 0x9a, 0x35, 0x5f, - 0x5e, 0xc8, 0x7d, 0x36, 0xb2, 0x0c, 0xdc, 0x24, 0x48, 0xc8, 0x49, 0x7e, 0x79, 0xf0, 0xb3, 0x85, - 0x74, 0xde, 0x5e, 0x31, 0xf0, 0x81, 0xb8, 0xe3, 0x44, 0x37, 0x70, 0xe1, 0xd4, 0x94, 0xf0, 0x8f, - 0x02, 0x94, 0xee, 0x0a, 0xb4, 0xf7, 0xa5, 0xce, 0xb2, 0x15, 0xb9, 0x4b, 0xfa, 0xc0, 0x6b, 0xaa, - 0x36, 0x8f, 0x65, 0x8d, 0xf8, 0x09, 0xf8, 0x55, 0x53, 0xc7, 0x04, 0xe3, 0x15, 0xbc, 0x45, 0xb5, - 0xe0, 0x53, 0x8d, 0x2e, 0xcb, 0x2e, 0x37, 0xc8, 0x41, 0xc1, 0xdc, 0xae, 0x57, 0xb4, 0xea, 0xaf, - 0xe0, 0x55, 0xae, 0xe4, 0x0a, 0xd4, 0x8a, 0x50, 0x84, 0x8e, 0x0b, 0x3e, 0xc4, 0xcc, 0xb8, 0xc4, - 0x06, 0x64, 0x48, 0xf8, 0x07, 0x70, 0x00, 0x59, 0x35, 0x5f, 0xe2, 0x51, 0x5e, 0x15, 0x59, 0x9e, - 0x62, 0x30, 0xb3, 0x57, 0x2c, 0x68, 0xfe, 0x52, 0xc2, 0xa3, 0xb5, 0x6a, 0x02, 0xc0, 0x9a, 0x42, - 0xbb, 0x17, 0xdc, 0xc5, 0xf6, 0x5d, 0x28, 0x7a, 0x9a, 0x01, 0xca, 0x02, 0xb6, 0xee, 0x61, 0x4f, - 0xf5, 0x29, 0x6e, 0xd0, 0x69, 0x1d, 0x1c, 0x70, 0x29, 0xda, 0x10, 0xe5, 0x82, 0x77, 0x75, 0xc3, - 0x4e, 0x72, 0x73, 0xa8, 0xea, 0xae, 0xae, 0x55, 0xa0, 0x6c, 0x8b, 0x8b, 0x81, 0x0b, 0x98, 0xc7, - 0x20, 0xae, 0x26, 0xdd, 0x36, 0xa1, 0xb4, 0xbb, 0xee, 0xb3, 0x05, 0x24, 0xb6, 0x5c, 0x1b, 0xcb, - 0xb9, 0x93, 0xa2, 0xf8, 0x2f, 0xae, 0x46, 0x80, 0x72, 0x6d, 0x80, 0x2a, 0xce, 0xfc, 0x1d, 0x0a, - 0x0d, 0x92, 0x11, 0x48, 0x49, 0x88, 0x66, 0x69, 0x54, 0xac, 0xc7, 0xe4, 0xbd, 0x16, 0x94, 0xd0, - 0x3a, 0x18, 0x99, 0x48, 0x8b, 0x0f, 0x1b, 0x28, 0xbd, 0x5f, 0x1d, 0x43, 0x5d, 0x14, 0x60, 0x7c, - 0x0b, 0x2c, 0x34, 0x50, 0xc1, 0xf8, 0x71, 0x67, 0x8f, 0x9c, 0x8a, 0xa3, 0x27, 0xff, 0xc4, 0x8c, - 0xa4, 0x27, 0x1e, 0x68, 0x16, 0xa6, 0x08, 0x1b, 0x9e, 0x91, 0x62, 0x26, 0xfd, 0x67, 0x40, 0xdd, - 0x23, 0xf3, 0x06, 0x32, 0xb5, 0x5f, 0x22, 0x96, 0xa3, 0xb9, 0x6e, 0x54, 0x49, 0x4e, 0x66, 0x04, - 0xbf, 0xcb, 0x0d, 0xda, 0x67, 0x72, 0xb5, 0x96, 0x8b, 0xe4, 0x74, 0x23, 0x76, 0xe6, 0x1c, 0x97, - 0xf9, 0x0c, 0x6e, 0x11, 0x34, 0x58, 0xc6, 0x64, 0x05, 0x6e, 0xf8, 0x9e, 0xf1, 0x7a, 0x43, 0xb1, - 0x3d, 0x45, 0x2e, 0x43, 0x36, 0x70, 0x25, 0x38, 0xa4, 0x04, 0x13, 0x16, 0xa1, 0x80, 0x4e, 0x26, - 0x35, 0x65, 0xe4, 0x18, 0x9b, 0xbc, 0x7e, 0xbe, 0x0a, 0xbe, 0x60, 0x5d, 0x17, 0xa8, 0x25, 0xe6, - 0x1a, 0x10, 0x5e, 0x43, 0x1b, 0xac, 0x0e, 0x16, 0xa0, 0x36, 0xcc, 0xe2, 0x6b, 0x6f, 0x2a, 0x7d, - 0x35, 0x15, 0x6d, 0x02, 0x7f, 0x11, 0x2d, 0xf8, 0x79, 0xd5, 0xe0, 0xcf, 0xc8, 0x51, 0xe1, 0x07, - 0x74, 0x07, 0x96, 0x08, 0x0f, 0x7e, 0x0a, 0x3e, 0xe4, 0xa4, 0x74, 0x4f, 0xef, 0x82, 0xde, 0x33, - 0x75, 0x67, 0x41, 0xae, 0x22, 0x87, 0x56, 0x90, 0x2c, 0x08, 0xe7, 0x05, 0xd7, 0x4c, 0xb8, 0xf6, - 0x1c, 0xa7, 0x8f, 0x27, 0xd6, 0x70, 0x35, 0xf0, 0x94, 0x72, 0x5c, 0x8e, 0x10, 0x57, 0x54, 0x87, - 0xdd, 0xc2, 0x02, 0x6a, 0x30, 0xaa, 0x3f, 0x5d, 0xe8, 0xe8, 0xe2, 0x0a, 0xc2, 0x40, 0x1f, 0x90, - 0x29, 0x80, 0xae, 0x91, 0xee, 0x50, 0x31, 0x29, 0x22, 0x5a, 0x80, 0x08, 0xdd, 0xc4, 0x77, 0x11, - 0x7a, 0xed, 0xd8, 0x1b, 0x13, 0x1e, 0x21, 0xb6, 0x2f, 0x2e, 0x61, 0x7c, 0x04, 0x2c, 0x1c, 0x14, - 0x1d, 0x29, 0xcd, 0x36, 0xe2, 0xa5, 0xb4, 0x89, 0xaa, 0x38, 0x55, 0x9d, 0xdc, 0x07, 0x5a, 0xda, - 0x57, 0xdf, 0x29, 0x88, 0x2e, 0x76, 0xfe, 0x34, 0x2e, 0x52, 0xdd, 0x0f, 0x26, 0xac, 0x3d, 0x34, - 0x0c, 0x67, 0x30, 0x8f, 0x5d, 0x60, 0x38, 0xc6, 0xeb, 0x49, 0xd9, 0xe4, 0x9f, 0xe9, 0xa2, 0x9d, - 0x14, 0x88, 0x62, 0x93, 0x0d, 0xd0, 0xfd, 0x28, 0x6f, 0x6d, 0x30, 0x0b, 0xc0, 0xef, 0x4a, 0x16, - 0x36, 0x68, 0xcb, 0xde, 0xc0, 0x6e, 0xb8, 0xb2, 0x13, 0x47, 0xd7, 0x5b, 0x4d, 0xbc, 0x29, 0x80, - 0xd2, 0x16, 0x47, 0x1a, 0xd2, 0xa2, 0x12, 0x77, 0x85, 0x6d, 0x17, 0x52, 0xe8, 0x57, 0xce, 0xea, - 0x7c, 0x32, 0xaa, 0x1b, 0x78, 0x3d, 0xf7, 0x34, 0x32, 0xdd, 0xa4, 0xcb, 0xd6, 0x06, 0x58, 0x47, - 0x43, 0xdb, 0x33, 0xdc, 0x9e, 0x47, 0xb6, 0xa3, 0xf6, 0x66, 0x1b, 0xee, 0x4c, 0xf1, 0x92, 0x7d, - 0x95, 0x24, 0xeb, 0x1b, 0x6a, 0xe9, 0x6a, 0x91, 0x17, 0xcb, 0xe9, 0x32, 0xae, 0xc0, 0x74, 0x31, - 0xdf, 0x20, 0x18, 0x4d, 0x60, 0xbb, 0xd3, 0xce, 0x76, 0x94, 0x19, 0xa0, 0x2e, 0xd1, 0x07, 0x00, - 0xdb, 0x5f, 0x4a, 0xd9, 0x1a, 0xea, 0xa3, 0xeb, 0x71, 0x3c, 0xf4, 0xdf, 0x79, 0x99, 0x05, 0xe9, - 0xec, 0x9d, 0x57, 0x9b, 0x29, 0xea, 0x1e, 0x44, 0xb9, 0xcd, 0xd0, 0xe0, 0xb2, 0x11, 0xf6, 0x3a, - 0x9d, 0x73, 0xca, 0xa9, 0xc7, 0x39, 0xf3, 0x4f, 0xf6, 0xe8, 0xaf, 0x75, 0x8b, 0xaf, 0xa4, 0xd7, - 0x03, 0xcb, 0xfe, 0x60, 0xff, 0x81, 0xf2, 0x21, 0xfc, 0x7e, 0xba, 0x0d, 0x0a, 0xab, 0xdf, 0xb5, - 0xe0, 0x99, 0x93, 0xfc, 0x94, 0xc8, 0x87, 0xa6, 0x5f, 0x48, 0xf7, 0xe6, 0xa6, 0x69, 0x5e, 0x96, - 0xcd, 0x69, 0x54, 0x59, 0xc4, 0x01, 0x5d, 0x96, 0x5f, 0x11, 0x7e, 0xa3, 0xd6, 0x0b, 0x6b, 0x0f, - 0x8d, 0x43, 0x4f, 0xd3, 0xc8, 0xcb, 0x81, 0x2e, 0x47, 0x9f, 0x39, 0x91, 0x40, 0xdf, 0x97, 0x1b, - 0xf6, 0x48, 0x0e, 0x08, 0xa9, 0x7a, 0xcf, 0x10, 0xdc, 0x56, 0xa5, 0x00, 0x3d, 0x17, 0xec, 0x77, - 0x74, 0xe1, 0x45, 0xb4, 0x30, 0xc2, 0x04, 0xbc, 0xd1, 0x0e, 0x25, 0xcc, 0x99, 0xba, 0x49, 0xf5, - 0x53, 0x6f, 0x9e, 0xb3, 0x29, 0xbe, 0xba, 0xed, 0xc2, 0x92, 0x2e, 0x5d, 0xe2, 0x54, 0xd4, 0x52, - 0x08, 0x43, 0x46, 0x4d, 0xce, 0x70, 0x46, 0x4b, 0x3e, 0x06, 0x63, 0x8f, 0xd7, 0xb3, 0x71, 0x4e, - 0x09, 0x10, 0x01, 0x02, 0x2a, 0x83, 0x8a, 0x25, 0xb1, 0x5e, 0x30, 0x45, 0xe2, 0x74, 0xd2, 0xa2, - 0xed, 0x41, 0x3f, 0x0f, 0x54, 0x7a, 0x7f, 0x65, 0x18, 0x80, 0xb6, 0x48, 0xf4, 0x85, 0x8b, 0x97, - 0x00, 0x8a, 0x88, 0xa1, 0x39, 0xaa, 0x89, 0x06, 0x9a, 0x27, 0xb7, 0x42, 0x89, 0x73, 0x74, 0x64, - 0xb4, 0x55, 0x0d, 0xe1, 0x61, 0x75, 0x57, 0xcf, 0xfb, 0xa2, 0xbb, 0x40, 0x0d, 0x94, 0x2e, 0xf4, - 0x84, 0xf8, 0xf9, 0x7e, 0x3e, 0x7c, 0xe0, 0x7c, 0x6e, 0x9f, 0xf0, 0x9d, 0xf1, 0x64, 0xaa, 0x2c, - 0x31, 0x61, 0x29, 0x50, 0x6e, 0x4b, 0x21, 0xb6, 0xf1, 0x55, 0xd5, 0x00, 0x77, 0x97, 0x23, 0x2b, - 0xbc, 0xde, 0xea, 0x2e, 0xfd, 0xf4, 0x7d, 0xa3, 0xca, 0x86, 0x61, 0x49, 0x8a, 0xbc, 0xef, 0x1d, - 0x4a, 0x97, 0x91, 0xd2, 0x31, 0x74, 0xf4, 0xa6, 0x7f, 0x36, 0x87, 0xe6, 0x78, 0x4c, 0x81, 0x5a, - 0x4d, 0xe9, 0x51, 0xe6, 0x8a, 0xa1, 0xb7, 0x9b, 0x37, 0xf7, 0x24, 0xa1, 0x28, 0xae, 0x50, 0xc3, - 0xa9, 0x3c, 0x8e, 0xc7, 0xa7, 0x18, 0x90, 0x8b, 0xd1, 0x88, 0x4b, 0x60, 0x46, 0x2b, 0xb5, 0x07, - 0xbd, 0xa4, 0xe8, 0x20, 0xf2, 0xee, 0xbe, 0x55, 0xcf, 0x01, 0x5e, 0x9d, 0x01, 0xe9, 0xbc, 0x30, - 0x55, 0x33, 0x96, 0x9b, 0x62, 0xb2, 0x78, 0x9e, 0xa2, 0x8f, 0x1a, 0xc7, 0xf3, 0xc0, 0xbc, 0x4a, - 0x97, 0xc4, 0xb0, 0x5d, 0x64, 0x30, 0xa8, 0x8a, 0x46, 0x03, 0xac, 0x1f, 0xd1, 0x3e, 0x73, 0x67, - 0x5c, 0x60, 0x6f, 0xc9, 0x38, 0x0b, 0x2c, 0xdb, 0x99, 0x73, 0x5a, 0x1e, 0xb2, 0xe2, 0xe2, 0xab, - 0x63, 0x28, 0x90, 0x1c, 0x34, 0xf7, 0x3e, 0x3f, 0xaf, 0xb0, 0xa1, 0x73, 0x49, 0x6e, 0x62, 0xa3, - 0xd5, 0xf4, 0x09, 0x96, 0x0e, 0xb3, 0x30, 0x6f, 0x56, 0xe7, 0x42, 0x82, 0x20, 0xec, 0xf3, 0x2c, - 0xbe, 0x6b, 0x6d, 0x3d, 0x50, 0x73, 0x2b, 0xb9, 0xd2, 0xe7, 0x87, 0x2d, 0x27, 0xa3, 0xe6, 0x49, - 0xdc, 0x8a, 0xc9, 0xc8, 0x92, 0xb6, 0x07, 0xc6, 0x64, 0x1e, 0x08, 0x20, 0x45, 0x57, 0x87, 0xcc, - 0x71, 0x89, 0xa3, 0xa2, 0xea, 0x54, 0xd8, 0x04, 0x8f, 0x42, 0x0e, 0xff, 0x58, 0x04, 0xb5, 0x4b, - 0xbf, 0x09, 0x1a, 0x14, 0xca, 0xb5, 0xb1, 0x44, 0xdf, 0xaf, 0xed, 0x5c, 0x7c, 0xcb, 0x8b, 0xf4, - 0xd0, 0xe8, 0x2a, 0x4b, 0xfe, 0x4c, 0x4f, 0xdf, 0xf0, 0xac, 0x40, 0xcf, 0xb4, 0xc6, 0x21, 0xe5, - 0x10, 0x76, 0x06, 0xa8, 0xdf, 0x67, 0x11, 0xdf, 0x95, 0x43, 0x6a, 0xc4, 0x2a, 0xf8, 0x8f, 0x09, - 0x66, 0x3a, 0xc4, 0x1b, 0xf9, 0x05, 0x9b, 0x37, 0xe2, 0x79, 0x5a, 0xe2, 0x6b, 0x48, 0xe7, 0x46, - 0x7f, 0x84, 0x61, 0x93, 0xdf, 0x5b, 0xa8, 0x5d, 0xeb, 0x93, 0x39, 0xc6, 0xe8, 0x1a, 0x27, 0x7d, - 0xd5, 0x8d, 0x2e, 0xb1, 0x7d, 0xf9, 0x5d, 0x58, 0x7c, 0xb5, 0xa8, 0x2d, 0xe7, 0x25, 0xe4, 0x17, - 0x5f, 0xf5, 0xae, 0xe6, 0xf8, 0xce, 0x69, 0xd7, 0x23, 0x4c, 0x0b, 0x81, 0x12, 0x12, 0xeb, 0x88, - 0x8d, 0x50, 0x2a, 0x25, 0x14, 0x91, 0x52, 0x6c, 0xc9, 0x5b, 0xf6, 0x8c, 0x7c, 0x05, 0x01, 0xa4, - 0x43, 0x67, 0x9f, 0xf5, 0x2d, 0x07, 0x8d, 0x15, 0x38, 0xbe, 0x2e, 0x2e, 0x09, 0x6e, 0x9a, 0xb2, - 0xc4, 0x10, 0xb8, 0xa9, 0xe5, 0xfb, 0xf8, 0x73, 0xe1, 0x85, 0x9e, 0xb7, 0x1a, 0xe8, 0x02, 0x1a, - 0xd8, 0xd2, 0xd9, 0x02, 0x36, 0xc7, 0x91, 0x2f, 0xb0, 0x83, 0x43, 0x4d, 0xd0, 0xc5, 0x9d, 0x6b, - 0xc2, 0xcd, 0xa5, 0x8e, 0xd4, 0x0f, 0xdc, 0xa9, 0x6c, 0x24, 0xe2, 0x8a, 0x52, 0x1b, 0x8b, 0x2f, - 0xc9, 0xda, 0xec, 0xce, 0x23, 0x9a, 0x10, 0x3a, 0x7e, 0xbc, 0x56, 0xba, 0xbc, 0x5b, 0x35, 0x17, - 0x10, 0x2a, 0x54, 0x96, 0x41, 0xde, 0x76, 0x74, 0x6f, 0x78, 0x8b, 0x61, 0x88, 0x69, 0x9e, 0xc4, - 0x03, 0x16, 0x2a, 0xed, 0xe1, 0xde, 0x55, 0xc7, 0x1c, 0xe9, 0x0a, 0x55, 0x39, 0xb0, 0x9b, 0x3c, - 0x8b, 0x84, 0x35, 0x11, 0x2e, 0x58, 0xad, 0xc4, 0x14, 0xa4, 0x0d, 0x7e, 0x55, 0x87, 0xfd, 0x89, - 0xd7, 0x4b, 0xc5, 0xb5, 0xbc, 0x16, 0x5f, 0x35, 0xbe, 0x76, 0x89, 0x8e, 0x50, 0xac, 0x93, 0x1d, - 0x6c, 0x2f, 0xc5, 0x72, 0xe6, 0xcb, 0x3e, 0x95, 0x6a, 0xc8, 0x7d, 0x12, 0xec, 0x4c, 0x58, 0xa4, - 0xbb, 0x80, 0x2e, 0xb9, 0xd6, 0xe9, 0x9a, 0x87, 0xaf, 0x9c, 0x79, 0xb2, 0x48, 0x4f, 0xd4, 0x39, - 0x3d, 0xba, 0xb2, 0x01, 0x0b, 0x13, 0x0c, 0x36, 0xf2, 0x9d, 0x09, 0xc3, 0x88, 0x13, 0xbb, 0xbb, - 0x19, 0xcd, 0xe9, 0x58, 0x00, 0xdb, 0x06, 0xe9, 0xf6, 0x89, 0xed, 0xe9, 0xa1, 0x74, 0x55, 0xf8, - 0x8f, 0x17, 0x32, 0xeb, 0x59, 0x60, 0xbd, 0xd9, 0x02, 0x93, 0x47, 0xf3, 0x9e, 0x65, 0x0c, 0xe7, - 0xbe, 0xcc, 0xf1, 0x97, 0x8b, 0x85, 0x63, 0xcc, 0xdf, 0x17, 0xb6, 0xc1, 0x52, 0xe6, 0x69, 0xc0, - 0x2e, 0x3d, 0xfc, 0x45, 0x7d, 0x7d, 0x7d, 0xd5, 0xa2, 0x9e, 0xf3, 0x9c, 0x9e, 0x21, 0xcf, 0xb1, - 0xb7, 0xba, 0x85, 0x27, 0xcf, 0x6a, 0x1d, 0x94, 0x12, 0x31, 0x4e, 0xa1, 0x09, 0xf6, 0xd1, 0x70, - 0x27, 0xb5, 0xcf, 0x3b, 0x5b, 0xbe, 0xd2, 0x59, 0x22, 0x44, 0x20, 0xa6, 0xa5, 0x68, 0x55, 0xae, - 0x5f, 0xa6, 0x7e, 0x6e, 0xf4, 0xb1, 0x37, 0x8c, 0x05, 0xaf, 0xa2, 0xc3, 0x52, 0xfa, 0x2a, 0xcb, - 0x60, 0x7c, 0x66, 0x8b, 0xff, 0x92, 0x60, 0xe0, 0xa0, 0xbd, 0xfe, 0x3f, 0xd6, 0xde, 0x57, 0xb9, - 0x27, 0x43, 0x83, 0xed, 0x7f, 0xb0, 0x41, 0x19, 0x31, 0x9e, 0xfc, 0x73, 0x0d, 0xf6, 0x7a, 0xd8, - 0xe0, 0x4b, 0x4c, 0x83, 0xd2, 0xd7, 0x49, 0x5b, 0xd1, 0xa2, 0xbd, 0x7c, 0xdc, 0x76, 0xaf, 0x57, - 0xe9, 0x65, 0x7b, 0x82, 0x4c, 0xdb, 0x16, 0xd0, 0xa5, 0xfa, 0xb5, 0xd3, 0xee, 0xb6, 0x69, 0x3f, - 0xcc, 0x8b, 0x31, 0xa0, 0x46, 0x0c, 0xeb, 0x54, 0xf2, 0xbd, 0xba, 0x12, 0xe7, 0xdf, 0xa5, 0xce, - 0x0c, 0xe1, 0xab, 0xd5, 0x6f, 0xb3, 0x32, 0xae, 0x57, 0xc3, 0x5f, 0x26, 0xc0, 0x86, 0x62, 0x19, - 0x08, 0xa2, 0xc4, 0xe8, 0x21, 0x71, 0x2e, 0x75, 0x29, 0x4d, 0xba, 0xb0, 0x78, 0xb1, 0x47, 0xd3, - 0x01, 0xcd, 0xcd, 0x9b, 0xd9, 0xae, 0x91, 0x4d, 0x71, 0x6a, 0x8f, 0xda, 0x28, 0x1c, 0x39, 0x0f, - 0xfd, 0xb2, 0x49, 0x13, 0xeb, 0xc8, 0x8e, 0x30, 0xad, 0x1c, 0xcf, 0xdd, 0xf9, 0x18, 0x73, 0x81, - 0xdf, 0x4e, 0x28, 0x84, 0xd7, 0xe4, 0x42, 0xb0, 0x71, 0x01, 0x4f, 0x9c, 0xb4, 0x09, 0x34, 0x4a, - 0x21, 0x9d, 0x03, 0xad, 0x05, 0xdd, 0x28, 0x92, 0xaf, 0xcc, 0x7b, 0x29, 0x9c, 0x9a, 0xb9, 0xac, - 0x82, 0x7a, 0x33, 0x73, 0x01, 0xf2, 0xdf, 0x1c, 0x39, 0x21, 0xfc, 0xa9, 0xe2, 0xf4, 0xae, 0x62, - 0xcb, 0x9d, 0x5d, 0xa0, 0x47, 0x17, 0x7e, 0xce, 0x3d, 0xed, 0x00, 0x37, 0x4f, 0x15, 0x48, 0xeb, - 0x10, 0xc6, 0x79, 0xfc, 0x6e, 0xba, 0xbf, 0xef, 0xb6, 0x3a, 0x98, 0x21, 0xe4, 0x4f, 0x0f, 0x2f, - 0xe3, 0x4b, 0x7d, 0xd6, 0x7a, 0x46, 0x67, 0x64, 0x07, 0x5b, 0xcf, 0x31, 0x25, 0x02, 0xa5, 0x85, - 0xed, 0x8c, 0x59, 0x23, 0x5d, 0xa7, 0x0b, 0x1f, 0xf4, 0xd3, 0x79, 0x99, 0x73, 0xc0, 0xf1, 0x46, - 0x7d, 0x64, 0xeb, 0x8c, 0x1b, 0x48, 0xf4, 0x72, 0x7d, 0xdc, 0x8b, 0x33, 0x18, 0x0d, 0xdb, 0x7e, - 0x40, 0x00, 0x6f, 0xdf, 0x2d, 0xeb, 0x10, 0x21, 0xbf, 0x3f, 0xcf, 0x17, 0x11, 0x20, 0x56, 0xd1, - 0x97, 0x33, 0x09, 0x40, 0x1d, 0x8e, 0x05, 0x0e, 0xa3, 0x30, 0xe8, 0xcb, 0xfb, 0x58, 0x2f, 0x8d, - 0x05, 0x0d, 0x90, 0xc1, 0x23, 0x60, 0xf0, 0xbf, 0xe4, 0x47, 0x2d, 0x53, 0x94, 0x3d, 0xef, 0xad, - 0x6b, 0x60, 0xf0, 0x83, 0xf9, 0x3f, 0xa4, 0x46, 0xac, 0xa6, 0x8b, 0x8a, 0xda, 0xe2, 0x2b, 0x3d, - 0x16, 0x64, 0x0b, 0xbf, 0x3b, 0x2c, 0x95, 0x00, 0x90, 0xc0, 0x26, 0xa7, 0xb3, 0x30, 0x6c, 0x1d, - 0x65, 0x43, 0xce, 0x75, 0xaa, 0xbf, 0xbc, 0xd3, 0xe3, 0x0a, 0x8a, 0xc4, 0x35, 0xeb, 0xb7, 0xc3, - 0x6b, 0x76, 0xee, 0xcc, 0x28, 0x78, 0x1e, 0xd5, 0x41, 0x77, 0x1e, 0xe3, 0xea, 0xfc, 0xda, 0xb6, - 0x54, 0x56, 0xdc, 0xd7, 0x1f, 0x73, 0xa5, 0x72, 0xac, 0xfe, 0xc8, 0x6d, 0x09, 0xb4, 0x87, 0x0e, - 0x54, 0x65, 0xbe, 0x61, 0xde, 0x94, 0xac, 0x84, 0xa2, 0x0d, 0x38, 0x15, 0x15, 0xdd, 0x11, 0x0b, - 0xaa, 0x8f, 0xf1, 0x46, 0x03, 0x1f, 0x45, 0x52, 0x88, 0xb8, 0xc0, 0xc2, 0x5e, 0xf0, 0xa5, 0x1d, - 0xb1, 0xa5, 0x99, 0x15, 0x76, 0x37, 0x15, 0x43, 0x52, 0x6e, 0xa3, 0x3b, 0x72, 0x03, 0x4d, 0x70, - 0x57, 0xca, 0x1b, 0x4b, 0x64, 0x0f, 0x3c, 0x5b, 0xb4, 0xb1, 0x2c, 0xd2, 0xfc, 0x90, 0xa1, 0x65, - 0x5e, 0xc9, 0x77, 0x19, 0x23, 0x33, 0x73, 0x6a, 0x45, 0xfd, 0x77, 0xeb, 0x45, 0xbc, 0x4e, 0xcc, - 0x24, 0xf6, 0x13, 0x89, 0xa6, 0xa9, 0xa6, 0xad, 0xda, 0xab, 0x8d, 0xec, 0x7c, 0xf2, 0x3d, 0x27, - 0xb3, 0xeb, 0x51, 0xa7, 0xca, 0xef, 0x86, 0xcd, 0xfc, 0x0c, 0x52, 0xb0, 0x0d, 0x10, 0x97, 0x9a, - 0x0b, 0x27, 0xe3, 0x8b, 0xb7, 0x4b, 0xb6, 0x0a, 0x86, 0x62, 0xf2, 0x3d, 0x07, 0xc1, 0x82, 0xb5, - 0x37, 0x0f, 0xe9, 0xa7, 0xfe, 0xe6, 0x1d, 0x64, 0xd1, 0x9d, 0x69, 0x2f, 0xde, 0xc3, 0x73, 0x89, - 0x6d, 0x64, 0xa9, 0x8b, 0x3e, 0x76, 0x23, 0x77, 0x45, 0x84, 0x0a, 0xb6, 0xa5, 0xcf, 0xc3, 0x9e, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xcc, 0xbd, 0xf9, 0x7e, 0xe3, 0xb8, + 0x8e, 0x30, 0xfa, 0x7f, 0x9e, 0x42, 0xa5, 0xea, 0x53, 0xb1, 0xdb, 0x8a, 0x2d, 0xef, 0x4b, 0xca, + 0xc9, 0x38, 0xce, 0xbe, 0x27, 0xce, 0x5e, 0x53, 0xbf, 0x29, 0xd9, 0xa6, 0x6d, 0x25, 0xb2, 0xa4, + 0x48, 0xf2, 0x16, 0xb7, 0xe7, 0x39, 0xbe, 0xa7, 0xb9, 0x0f, 0x73, 0x9f, 0xe4, 0x02, 0xa4, 0x16, + 0x4a, 0x96, 0x93, 0x54, 0x4f, 0xcf, 0xb9, 0x5f, 0x9f, 0x53, 0xb1, 0xc4, 0x05, 0x04, 0x41, 0x10, + 0x04, 0x40, 0x90, 0xfa, 0xfe, 0x65, 0xf7, 0xa2, 0x79, 0xf3, 0x78, 0xb9, 0x27, 0x0c, 0x9c, 0xa1, + 0xb6, 0x25, 0x7c, 0xc7, 0x1f, 0x41, 0x53, 0xf4, 0x7e, 0x5d, 0x24, 0xba, 0x88, 0x09, 0x44, 0xe9, + 0xc2, 0xcf, 0x90, 0x38, 0x8a, 0xa0, 0x2b, 0x43, 0x52, 0x17, 0xc7, 0x2a, 0x99, 0x98, 0x86, 0xe5, + 0x88, 0xc2, 0x5a, 0xc7, 0xd0, 0x1d, 0xa2, 0x3b, 0x75, 0x71, 0xa2, 0x76, 0x9d, 0x41, 0xbd, 0x4b, + 0xc6, 0x6a, 0x87, 0x6c, 0xd0, 0x17, 0x49, 0xd5, 0x55, 0x47, 0x55, 0xb4, 0x0d, 0xbb, 0xa3, 0x68, + 0xa4, 0x9e, 0x95, 0x86, 0x90, 0x30, 0x1c, 0x0d, 0xbd, 0x77, 0xd1, 0x03, 0xba, 0xd6, 0x19, 0x28, + 0x96, 0x4d, 0x00, 0xc8, 0xc8, 0xe9, 0x6d, 0x54, 0xc4, 0x70, 0x63, 0xce, 0x80, 0x0c, 0xc9, 0x46, + 0xc7, 0xd0, 0x0c, 0x4b, 0x14, 0xfc, 0xe6, 0xbe, 0xe6, 0xe8, 0x7f, 0x1c, 0x0c, 0x2f, 0x67, 0x46, + 0x6c, 0xd1, 0xad, 0xaa, 0x98, 0xa6, 0x46, 0x36, 0x86, 0x46, 0x5b, 0x85, 0x9f, 0x09, 0x69, 0x6f, + 0x40, 0xc2, 0x46, 0x47, 0x31, 0x95, 0xb6, 0x46, 0xb0, 0xa6, 0xa6, 0xea, 0x2f, 0x82, 0x45, 0xb4, + 0xba, 0x68, 0x0f, 0xa0, 0x3b, 0x9d, 0x91, 0x23, 0xa8, 0x00, 0x07, 0xba, 0x35, 0xb0, 0x48, 0xaf, + 0x2e, 0x76, 0x15, 0x47, 0xa9, 0xa9, 0x43, 0xa5, 0x4f, 0x32, 0xd3, 0x0d, 0xcc, 0xd9, 0x6c, 0x2b, + 0x36, 0x29, 0x15, 0xa4, 0x46, 0xa3, 0xb1, 0xd3, 0x68, 0xec, 0x35, 0xf6, 0xe0, 0x2f, 0xfe, 0x1e, + 0x34, 0x9a, 0x07, 0xf8, 0xb4, 0xdf, 0x87, 0x3f, 0x47, 0xda, 0xd5, 0xcd, 0x4b, 0xe7, 0xbc, 0x39, + 0x30, 0x4e, 0x30, 0x6d, 0xf7, 0x56, 0x3b, 0xba, 0xde, 0x3f, 0xc2, 0xc7, 0x2b, 0x56, 0xba, 0x4f, + 0xcb, 0x1e, 0x66, 0x2e, 0x33, 0x8f, 0x98, 0xb2, 0x97, 0x3d, 0xbe, 0xde, 0xdb, 0xbf, 0xbd, 0x38, + 0xca, 0x3e, 0x43, 0x52, 0xe6, 0x72, 0x72, 0x31, 0xed, 0x9f, 0x1f, 0x90, 0xc6, 0xed, 0xd9, 0x74, + 0xaf, 0x7a, 0x50, 0xea, 0x5c, 0x35, 0x4f, 0x76, 0xef, 0x1b, 0x03, 0xb3, 0xb1, 0xfb, 0x94, 0xeb, + 0x55, 0x2e, 0xcf, 0x9e, 0x77, 0x5a, 0xf9, 0xab, 0x7b, 0xb9, 0x72, 0x75, 0x92, 0x93, 0x4f, 0x94, + 0xa7, 0x66, 0xae, 0xdf, 0x6b, 0x56, 0x07, 0x4d, 0xfd, 0xd5, 0x18, 0x19, 0xe7, 0xfd, 0xc6, 0x75, + 0xff, 0xb1, 0xfc, 0x76, 0x36, 0x6d, 0xcc, 0xce, 0xb5, 0xdb, 0xee, 0xd5, 0xa1, 0xf6, 0xa0, 0x36, + 0xb4, 0x8b, 0xdc, 0xd9, 0x6e, 0x63, 0xb7, 0x94, 0xdf, 0xbb, 0x7b, 0x3d, 0x3f, 0x6c, 0x10, 0xb9, + 0x41, 0x11, 0xd1, 0xf6, 0x6f, 0x5e, 0x5a, 0xa3, 0xab, 0x61, 0xb3, 0x29, 0x6e, 0xad, 0x09, 0xdf, + 0xed, 0x8e, 0xa5, 0x9a, 0xce, 0xd6, 0x5a, 0x6f, 0xa4, 0x77, 0x1c, 0xd5, 0xd0, 0x05, 0x93, 0x90, + 0x97, 0x84, 0x93, 0x9c, 0x8f, 0x15, 0x4b, 0x20, 0x75, 0x27, 0xdd, 0x27, 0x4e, 0x13, 0xa9, 0x3c, + 0x75, 0x12, 0x62, 0xae, 0x2b, 0x26, 0x37, 0xd5, 0x5e, 0x82, 0xb0, 0x6c, 0x6b, 0xd3, 0xb1, 0x66, + 0x73, 0xab, 0xee, 0x18, 0x66, 0x7a, 0xa2, 0xea, 0x5d, 0x63, 0x92, 0x9e, 0xd8, 0x8b, 0x8e, 0xe2, + 0x74, 0x06, 0x08, 0x61, 0x61, 0x7d, 0xfb, 0x66, 0xa5, 0x2d, 0x60, 0xa4, 0x59, 0xcb, 0x51, 0x1c, + 0x52, 0xaf, 0xd7, 0xef, 0x49, 0xbb, 0x65, 0x74, 0x5e, 0x88, 0x93, 0xbe, 0xb8, 0xdc, 0x3b, 0xdf, + 0xb6, 0xd2, 0x36, 0xd1, 0xbb, 0x09, 0x71, 0xbe, 0xae, 0x8d, 0xd7, 0x6b, 0x8e, 0x35, 0x22, 0x0b, + 0x31, 0x59, 0x4b, 0x58, 0x75, 0x9d, 0x4c, 0x04, 0xbf, 0x6c, 0x22, 0x21, 0x0e, 0x1c, 0xc7, 0xb4, + 0x6b, 0x62, 0xbd, 0xee, 0x36, 0xa3, 0x19, 0xd0, 0x0a, 0x60, 0x9b, 0x36, 0x2d, 0xc3, 0x31, 0x80, + 0x4d, 0xb6, 0xc5, 0x89, 0x6d, 0x8b, 0x35, 0xf8, 0x2b, 0x26, 0x53, 0x62, 0x2d, 0x93, 0x11, 0x53, + 0x5d, 0xa3, 0x33, 0x1a, 0x02, 0x73, 0x04, 0x85, 0x07, 0x86, 0xed, 0xa4, 0xc4, 0x0c, 0x96, 0x49, + 0xa6, 0x0d, 0xdd, 0x30, 0x89, 0x5e, 0x4f, 0x24, 0xeb, 0x5b, 0xf3, 0x58, 0x3c, 0x16, 0x92, 0x95, + 0x6e, 0xab, 0xba, 0x62, 0xcd, 0x6e, 0x66, 0x26, 0xf2, 0x95, 0x65, 0x29, 0xb3, 0xf6, 0xa8, 0xd7, + 0x23, 0x96, 0x08, 0x59, 0x4a, 0xb7, 0xbb, 0x37, 0x06, 0xf0, 0xa7, 0xaa, 0x0d, 0x2c, 0x48, 0xac, + 0x84, 0x38, 0x24, 0xb6, 0x0d, 0x5c, 0x03, 0x99, 0x00, 0x12, 0x29, 0x03, 0x94, 0x12, 0x7f, 0x18, + 0xed, 0x67, 0xd2, 0x71, 0x84, 0x06, 0xd6, 0xde, 0xa1, 0xb5, 0x7f, 0x42, 0x3f, 0x80, 0x66, 0x2d, + 0xc7, 0x52, 0xf5, 0x7e, 0x1a, 0xa6, 0x85, 0x96, 0xb0, 0xd2, 0xc8, 0x75, 0xc9, 0xe4, 0x5c, 0x23, + 0x8e, 0xa0, 0xd3, 0xee, 0xdf, 0xaa, 0xba, 0x53, 0xa1, 0xb5, 0xbc, 0x5c, 0xa4, 0x7c, 0xb9, 0xf4, + 0xa5, 0xae, 0xff, 0x90, 0x7f, 0xfe, 0xf5, 0x57, 0x0e, 0x1f, 0xb2, 0xf0, 0xf0, 0x85, 0x24, 0x2d, + 0xe2, 0x8c, 0x2c, 0x7d, 0x13, 0x2b, 0xab, 0x90, 0x9a, 0xfb, 0x29, 0x75, 0xe0, 0x27, 0xff, 0x53, + 0xd2, 0xea, 0x67, 0x8a, 0x33, 0x48, 0xc3, 0x1c, 0x4c, 0x38, 0x69, 0x3a, 0x3f, 0x33, 0xaa, 0xe4, + 0xa4, 0x07, 0x44, 0xed, 0x0f, 0x9c, 0x4c, 0x27, 0x29, 0x0d, 0x58, 0x81, 0x9e, 0x66, 0x18, 0x56, + 0xc2, 0x2b, 0xb3, 0xa1, 0xfd, 0xa9, 0x26, 0x33, 0xb9, 0xe4, 0x26, 0x0e, 0xb2, 0x51, 0x2f, 0x6c, + 0xfa, 0xcc, 0xa1, 0xe0, 0xb8, 0xb2, 0xd6, 0x04, 0x19, 0x3a, 0xb1, 0x2d, 0xd7, 0x72, 0xc5, 0x54, + 0x2e, 0x57, 0xfc, 0xd3, 0xc9, 0xe4, 0x8a, 0xc5, 0x45, 0x0f, 0xa0, 0x90, 0x74, 0x47, 0x23, 0x8a, + 0x75, 0x0d, 0xbd, 0x4e, 0xc8, 0x92, 0x2c, 0xb9, 0x40, 0xfd, 0x66, 0x93, 0xd2, 0xac, 0x9e, 0x2e, + 0x6e, 0xce, 0xbe, 0x77, 0x36, 0x67, 0xa9, 0x54, 0x12, 0xab, 0x4c, 0x31, 0x61, 0xfa, 0x5d, 0xdd, + 0x9c, 0x42, 0x02, 0xc0, 0xd5, 0x7f, 0x18, 0x3f, 0xbf, 0x7d, 0x63, 0x0f, 0xa9, 0x6c, 0xf0, 0x98, + 0x83, 0xee, 0x02, 0xfc, 0x9e, 0xaa, 0x69, 0x2d, 0x67, 0x06, 0xe2, 0xe4, 0x97, 0xd5, 0x6f, 0x27, + 0xfe, 0x98, 0x2b, 0x09, 0xac, 0x01, 0x23, 0xe6, 0x3e, 0x42, 0x1d, 0xee, 0x25, 0x07, 0x2f, 0xc9, + 0x5f, 0x12, 0x49, 0xb7, 0x49, 0x5f, 0xd5, 0x2f, 0xa1, 0xbf, 0x89, 0x24, 0xbc, 0x29, 0x56, 0x27, + 0x31, 0xfd, 0x53, 0x4b, 0x0d, 0xa4, 0xd9, 0x9f, 0x9a, 0x94, 0x2e, 0xc0, 0x1f, 0x59, 0xca, 0xfd, + 0x49, 0xe9, 0x71, 0x79, 0x84, 0x25, 0xb0, 0x9d, 0x44, 0x32, 0x29, 0x19, 0xa9, 0x7a, 0x7e, 0x11, + 0xf0, 0x35, 0x88, 0x04, 0xdb, 0xd0, 0x48, 0x9a, 0x58, 0x16, 0xe0, 0x2e, 0x5e, 0xc2, 0x84, 0x11, + 0xee, 0x5b, 0x02, 0x7d, 0xad, 0x89, 0x92, 0x93, 0x5c, 0x2c, 0xe0, 0xff, 0x6b, 0xdf, 0x33, 0xee, + 0xdc, 0x12, 0xbe, 0x3b, 0xaa, 0xa3, 0x91, 0xad, 0xfb, 0xd3, 0xbd, 0xdd, 0xef, 0x19, 0xf6, 0x1c, + 0x33, 0xf1, 0x7a, 0x84, 0x74, 0xdb, 0x4a, 0xe7, 0x25, 0x01, 0x33, 0x07, 0x09, 0x0f, 0x72, 0xd5, + 0xe3, 0x60, 0x98, 0x83, 0x7b, 0x1a, 0xc1, 0x47, 0x7b, 0x67, 0x76, 0xa3, 0xf4, 0xcf, 0x41, 0xd0, + 0xc1, 0xa4, 0x80, 0x99, 0x25, 0x26, 0x81, 0x19, 0x60, 0x98, 0xfd, 0xa2, 0x1d, 0x98, 0x6f, 0x0e, + 0x71, 0x4b, 0x27, 0x44, 0xd6, 0x0a, 0xcc, 0x5a, 0x2d, 0xed, 0x30, 0x2e, 0x06, 0xe9, 0xa8, 0xb2, + 0xf9, 0x90, 0x79, 0x56, 0xc6, 0x8a, 0x5b, 0x40, 0xd2, 0xd2, 0xb6, 0xd5, 0xa9, 0x8b, 0xaa, 0x65, + 0xa4, 0x9f, 0x6d, 0x7c, 0x5d, 0xe6, 0x6f, 0xcd, 0x80, 0xf6, 0x24, 0x02, 0xcc, 0xdd, 0x31, 0xd5, + 0xce, 0x0b, 0xe5, 0x52, 0x2c, 0xdf, 0x44, 0x29, 0x7d, 0x09, 0x29, 0x58, 0xe8, 0xab, 0x49, 0x1f, + 0x44, 0x69, 0x4e, 0x47, 0xbd, 0x96, 0x2b, 0xc9, 0xd2, 0x64, 0x40, 0x88, 0x76, 0x8a, 0x63, 0xaf, + 0xc3, 0x14, 0xa9, 0x7d, 0xc9, 0xb2, 0x94, 0x86, 0xde, 0xd7, 0x48, 0x2d, 0x57, 0x76, 0x0b, 0xec, + 0xaa, 0x16, 0xa1, 0x94, 0xa8, 0x89, 0x1d, 0x98, 0xb2, 0x2f, 0x13, 0xd5, 0x86, 0xb9, 0xa4, 0x29, + 0x33, 0x63, 0xe4, 0xd4, 0x7e, 0x00, 0xd5, 0x87, 0xa6, 0xa1, 0x03, 0x42, 0x35, 0x6c, 0x73, 0xa4, + 0xa6, 0xef, 0xb1, 0x92, 0x64, 0x98, 0x58, 0xc5, 0xae, 0xcd, 0x17, 0x8b, 0x9f, 0x8b, 0xa4, 0x44, + 0x31, 0x83, 0xb9, 0x9d, 0x10, 0x55, 0xdd, 0x84, 0x7a, 0x30, 0xad, 0x45, 0x89, 0xce, 0x71, 0x1b, + 0xe5, 0x18, 0x20, 0x9a, 0xc8, 0x26, 0x43, 0xe5, 0xe8, 0x1a, 0x53, 0x83, 0xc5, 0x48, 0xc7, 0xa9, + 0x4b, 0x8b, 0x8e, 0x4c, 0x98, 0x6f, 0xe4, 0xb2, 0xa5, 0xa9, 0x5d, 0x62, 0xd9, 0x09, 0x28, 0x4f, + 0x67, 0x82, 0xf3, 0x31, 0x95, 0x9d, 0x0f, 0xa8, 0xec, 0x30, 0x2a, 0x5b, 0xd8, 0x98, 0x63, 0x8c, + 0x3a, 0x03, 0x4a, 0x6c, 0xe7, 0x5d, 0x62, 0xd3, 0xc2, 0x76, 0xfd, 0x1a, 0x7f, 0x6e, 0x68, 0x1d, + 0xe8, 0xca, 0xc8, 0x4c, 0xac, 0xd3, 0x1e, 0xfe, 0x60, 0x0d, 0xd2, 0x42, 0xe2, 0xcf, 0x75, 0x69, + 0x0e, 0xc8, 0xa2, 0x1c, 0x70, 0xea, 0x50, 0xea, 0x08, 0xe4, 0xb6, 0x35, 0x56, 0xb4, 0x04, 0xed, + 0x96, 0x88, 0x24, 0x84, 0x3c, 0x82, 0xf2, 0xc7, 0xef, 0x4a, 0x20, 0x9f, 0xbf, 0x7d, 0x4b, 0xd0, + 0x99, 0xeb, 0xd7, 0x82, 0xa9, 0x6a, 0xe8, 0xa7, 0x80, 0x08, 0x4c, 0x82, 0x85, 0x94, 0x95, 0x65, + 0xa4, 0x1c, 0x80, 0xbd, 0x51, 0x87, 0x04, 0x06, 0x85, 0x41, 0x1d, 0xa4, 0xa1, 0xb3, 0x40, 0xe6, + 0xe6, 0x40, 0xd5, 0xba, 0x50, 0xe5, 0x93, 0x05, 0x35, 0xb7, 0x20, 0x3f, 0x4d, 0x6c, 0x9c, 0xd3, + 0x5b, 0x6b, 0xff, 0xd1, 0x83, 0xf5, 0x66, 0xa3, 0xa7, 0x74, 0xc8, 0xdc, 0x7d, 0x1a, 0xaa, 0xda, + 0xac, 0x76, 0x7f, 0x84, 0x13, 0x6f, 0x13, 0x08, 0x58, 0x1b, 0x59, 0x5a, 0x82, 0x2e, 0xd3, 0x98, + 0x9f, 0x99, 0x18, 0xbd, 0x5e, 0x6e, 0xd3, 0x53, 0x27, 0xa8, 0x36, 0xe1, 0x2d, 0xd9, 0x5d, 0xb9, + 0x7a, 0x70, 0xd6, 0x6f, 0xd0, 0x05, 0xbb, 0xd1, 0xd0, 0x6f, 0x1b, 0x0d, 0x9b, 0xad, 0x82, 0x59, + 0xfc, 0x3b, 0xdc, 0x6f, 0x34, 0x0e, 0x9e, 0x86, 0xfd, 0xc6, 0xca, 0xff, 0x76, 0x86, 0x8d, 0x46, + 0xff, 0x61, 0x72, 0xdd, 0x6c, 0xbc, 0x76, 0x1e, 0x8f, 0x9f, 0x8e, 0x1a, 0x37, 0x8f, 0xcd, 0xe3, + 0xc6, 0xf9, 0xa4, 0xf9, 0x66, 0x34, 0x76, 0x9a, 0xb0, 0xf2, 0x4f, 0x1e, 0x0f, 0x8f, 0x76, 0xec, + 0xf2, 0x6e, 0x45, 0xbd, 0x98, 0xbc, 0xf5, 0x87, 0xf9, 0xb3, 0x87, 0x33, 0xfd, 0xed, 0xa9, 0xf9, + 0xe2, 0xe8, 0xcf, 0x9d, 0xf6, 0x79, 0xea, 0x4a, 0x3b, 0x3e, 0x55, 0x8e, 0xf3, 0x23, 0xed, 0xf6, + 0xd4, 0xd4, 0xcc, 0xfb, 0xd2, 0xed, 0xeb, 0xbd, 0x6a, 0x90, 0x56, 0x35, 0x7b, 0x3c, 0x23, 0xf2, + 0xf3, 0xad, 0x76, 0x3c, 0x79, 0xb2, 0x8a, 0xfa, 0x4d, 0x77, 0x2f, 0x7f, 0xaa, 0x3b, 0xdd, 0xcb, + 0x71, 0xa3, 0x9f, 0xea, 0x39, 0x99, 0x5e, 0xdb, 0x3e, 0xb5, 0x0f, 0xb4, 0xf3, 0xd3, 0xd1, 0x40, + 0x1b, 0x5e, 0x3d, 0x9f, 0xa8, 0xe5, 0xf3, 0xcb, 0xdd, 0xbd, 0xa3, 0xfe, 0xe4, 0x66, 0x08, 0xaa, + 0x82, 0x52, 0x1a, 0x76, 0xb5, 0x54, 0xeb, 0xf0, 0x76, 0x67, 0xb0, 0x77, 0xd4, 0x3d, 0xdc, 0x9f, + 0x2a, 0x2f, 0x65, 0xbb, 0xb0, 0x97, 0x99, 0xbd, 0x0d, 0x8e, 0x5b, 0xcf, 0xcd, 0xf2, 0xce, 0xd5, + 0xd5, 0x69, 0x6f, 0x77, 0x62, 0x98, 0xfb, 0x19, 0xb5, 0xa4, 0xbc, 0xb6, 0xf6, 0xb4, 0xbd, 0xfd, + 0xdd, 0x87, 0x69, 0xe5, 0xe9, 0xee, 0xfe, 0x79, 0x96, 0xb7, 0x66, 0xc3, 0xc2, 0x79, 0x69, 0x5f, + 0x7b, 0xba, 0x2a, 0x0c, 0x46, 0x29, 0xfd, 0xc1, 0x3e, 0x38, 0xda, 0x3d, 0xbb, 0xda, 0xcf, 0xf7, + 0x1b, 0x53, 0x25, 0x5b, 0x68, 0xf4, 0x1b, 0x96, 0x73, 0x77, 0x36, 0xe8, 0xbd, 0xf4, 0x9f, 0x7b, + 0x7b, 0x8d, 0xb6, 0xda, 0x1c, 0x4c, 0x46, 0xad, 0xa3, 0xc9, 0xde, 0x6d, 0x73, 0x38, 0xea, 0x5e, + 0x0e, 0xd4, 0xab, 0xee, 0x4d, 0xc9, 0x1a, 0x1f, 0x3d, 0x9f, 0xb6, 0xae, 0x9f, 0xf6, 0x26, 0xbb, + 0x83, 0xfd, 0xea, 0xce, 0x91, 0x6d, 0x18, 0x47, 0xc5, 0xfc, 0xcd, 0xd1, 0xf5, 0x91, 0x71, 0x74, + 0xbb, 0x5b, 0x79, 0x99, 0x9d, 0x3f, 0x1d, 0x95, 0x6f, 0x9f, 0x1b, 0xb3, 0x33, 0xeb, 0x3a, 0xa3, + 0x9c, 0x65, 0x76, 0x27, 0xca, 0x85, 0x69, 0xbc, 0x29, 0x83, 0xea, 0xe9, 0x41, 0xd3, 0x7e, 0xcc, + 0xbd, 0x9d, 0xe7, 0x1e, 0x2f, 0xde, 0xec, 0xdc, 0x69, 0x7e, 0xfa, 0x4a, 0xce, 0xcd, 0xc2, 0xdb, + 0xc3, 0xf3, 0x6b, 0xa5, 0xfd, 0x70, 0x93, 0x19, 0x9c, 0xed, 0x9c, 0x3e, 0x67, 0x8a, 0xf9, 0xc7, + 0xdd, 0xc6, 0x51, 0x2b, 0x55, 0x1e, 0x95, 0x4a, 0x15, 0x3d, 0x7f, 0x98, 0x3a, 0xbc, 0xbe, 0xec, + 0x3e, 0x75, 0xb3, 0xa3, 0xfc, 0xcd, 0x5b, 0xf7, 0xfa, 0xa9, 0x7b, 0x77, 0x76, 0xd3, 0x3b, 0xd2, + 0x8a, 0x87, 0xbd, 0x93, 0x7e, 0x37, 0xdb, 0x2e, 0xb7, 0xc6, 0xaf, 0xdd, 0xea, 0x7d, 0x75, 0x64, + 0x5a, 0xdd, 0xcb, 0xca, 0xd5, 0xcd, 0xc5, 0x90, 0x28, 0x6f, 0xc5, 0x9b, 0xcb, 0x8b, 0xeb, 0x63, + 0x6d, 0x77, 0xf7, 0xf9, 0xf0, 0xee, 0xf9, 0x40, 0x6e, 0x9c, 0x9f, 0x5d, 0x3d, 0xda, 0xc3, 0x6b, + 0xeb, 0x44, 0x1b, 0x9a, 0xb3, 0xd7, 0xbb, 0xf2, 0xcb, 0xa8, 0x7d, 0x74, 0xd5, 0xcc, 0x1d, 0xb4, + 0x8e, 0x5e, 0xf6, 0x5b, 0xa9, 0x33, 0x9d, 0x34, 0x8f, 0x0b, 0x95, 0xe3, 0xe3, 0xfd, 0xbb, 0xe6, + 0xe0, 0xaa, 0x37, 0x9a, 0x9c, 0x9c, 0x99, 0xb9, 0xd9, 0x6d, 0xd5, 0x1c, 0xbe, 0x66, 0xef, 0x4e, + 0x6e, 0xaf, 0x4b, 0xb0, 0xe0, 0xc9, 0x07, 0xa6, 0xdc, 0x7a, 0xbe, 0x7b, 0xbc, 0xbe, 0xde, 0x4f, + 0x3d, 0x3c, 0x97, 0x53, 0x17, 0xea, 0x6d, 0xeb, 0x25, 0x73, 0x70, 0xf4, 0x36, 0xca, 0x0e, 0xd5, + 0xc3, 0xa7, 0xfb, 0x69, 0xaa, 0x5f, 0x79, 0xcc, 0x5e, 0xdf, 0xbe, 0x38, 0x97, 0xc3, 0xd7, 0x23, + 0xd5, 0xb9, 0xbe, 0x79, 0xb8, 0x3b, 0x7f, 0x7b, 0x6b, 0x3a, 0xa3, 0xfd, 0xcb, 0x93, 0xce, 0xa1, + 0xfc, 0x76, 0xbd, 0x73, 0x90, 0x7a, 0xac, 0x66, 0x9a, 0xfa, 0x60, 0x47, 0xc9, 0xc9, 0xe3, 0xa2, + 0x71, 0xd8, 0xb3, 0xf7, 0x6e, 0xcf, 0xfa, 0x0f, 0x67, 0x97, 0x7b, 0xbd, 0x8b, 0xe2, 0x53, 0xe7, + 0x78, 0x2a, 0xef, 0x1f, 0x5d, 0xaa, 0x77, 0xb3, 0x49, 0xff, 0xb9, 0x5d, 0x3a, 0x3b, 0x1a, 0xdd, + 0xa5, 0x8c, 0xa7, 0xc2, 0x38, 0xf7, 0xf2, 0x52, 0xca, 0xbc, 0xe9, 0x47, 0xd3, 0xdd, 0x13, 0xab, + 0x3f, 0x3a, 0xcb, 0xe5, 0x66, 0xa9, 0xf6, 0x7d, 0x65, 0x72, 0x7b, 0xf0, 0xaa, 0x96, 0x95, 0xd3, + 0x4a, 0xef, 0xea, 0xf8, 0x6d, 0xa2, 0x37, 0x9f, 0x2b, 0xce, 0x91, 0x69, 0x76, 0x8f, 0xaa, 0xed, + 0xc7, 0xdd, 0xd6, 0xdd, 0xf1, 0x5d, 0xf3, 0xea, 0x48, 0x57, 0xcd, 0x7b, 0xf9, 0xb0, 0xed, 0x74, + 0xb4, 0xce, 0x4d, 0x79, 0xdc, 0x9c, 0x9d, 0x0e, 0x1f, 0x94, 0xd6, 0x9d, 0x75, 0xd5, 0x3a, 0x3f, + 0x9b, 0xb5, 0x95, 0xe3, 0xe3, 0x9d, 0x41, 0xee, 0x52, 0x7d, 0xb0, 0x1e, 0xda, 0xfd, 0x6e, 0xa9, + 0xd1, 0x7e, 0x25, 0x9d, 0xee, 0xee, 0xcd, 0x45, 0x75, 0xef, 0x6a, 0xef, 0x88, 0xdc, 0xcb, 0x77, + 0x97, 0xf7, 0x57, 0x9d, 0xee, 0x55, 0x45, 0x73, 0x2e, 0x2f, 0xf6, 0x46, 0xa9, 0x72, 0xe9, 0x35, + 0x77, 0x34, 0xbd, 0xbd, 0x31, 0x8e, 0xc9, 0xbd, 0xd9, 0x7b, 0xbe, 0x52, 0x0f, 0x0f, 0x0f, 0x8b, + 0x30, 0x95, 0x76, 0x4f, 0x9f, 0xb3, 0xed, 0xc3, 0xfe, 0xd5, 0xf4, 0xc1, 0xbe, 0x85, 0x0e, 0x9d, + 0x3c, 0xb6, 0xfb, 0xa9, 0xe6, 0x14, 0xfe, 0x57, 0xaa, 0x92, 0xc3, 0xce, 0xc5, 0x18, 0x44, 0xf4, + 0x71, 0x56, 0x2b, 0xb5, 0x65, 0x7d, 0xb7, 0xfc, 0x7c, 0x90, 0x6a, 0xb7, 0x1a, 0xd9, 0x6e, 0xf3, + 0xe9, 0x6e, 0x3a, 0x9c, 0x54, 0x9e, 0x8e, 0x33, 0x47, 0x8f, 0xce, 0xf4, 0xd2, 0x69, 0x1f, 0x4f, + 0x35, 0xf3, 0x2a, 0x73, 0x7a, 0xf0, 0xdc, 0x7a, 0x95, 0xe5, 0x9b, 0x61, 0xf7, 0xfc, 0xe8, 0x69, + 0x6a, 0x1d, 0x10, 0x2d, 0x35, 0x4b, 0x59, 0x4f, 0xc7, 0x96, 0x91, 0xd2, 0x6f, 0x07, 0xf9, 0x4b, + 0xeb, 0xfc, 0xe8, 0x60, 0x72, 0x52, 0xba, 0xb7, 0x1e, 0xce, 0xcf, 0xee, 0x72, 0xd3, 0x1b, 0x72, + 0x7d, 0x7f, 0xd8, 0x7a, 0x6e, 0x75, 0x5e, 0x9c, 0xd3, 0xe3, 0x1e, 0xc9, 0x5a, 0x9d, 0xb2, 0x6d, + 0xce, 0xc6, 0x2f, 0xf9, 0x76, 0xe9, 0xae, 0xf0, 0x52, 0xa8, 0xb4, 0xac, 0x7c, 0x63, 0x98, 0xbd, + 0x1c, 0x67, 0xae, 0xd4, 0xde, 0xc0, 0x3e, 0xca, 0x8d, 0xce, 0xc6, 0x9d, 0x4a, 0x29, 0x7f, 0xa1, + 0x5e, 0x5d, 0x5d, 0x9f, 0x1b, 0xa4, 0x6b, 0x5e, 0xf6, 0x0e, 0xf5, 0xd6, 0xa4, 0x03, 0xd2, 0x30, + 0xa5, 0xec, 0xee, 0xed, 0x95, 0xca, 0x9d, 0x93, 0xb7, 0x9b, 0xfe, 0x8e, 0x76, 0xd5, 0x7f, 0x36, + 0x9f, 0xfb, 0x37, 0xbb, 0xfa, 0xb1, 0x73, 0xa0, 0x3f, 0xe4, 0x5e, 0xdb, 0xc3, 0x87, 0xe3, 0xd2, + 0xfe, 0xc5, 0xce, 0xe9, 0x53, 0x79, 0x62, 0x5b, 0xa9, 0xe3, 0xa7, 0xb7, 0x47, 0xbd, 0xfd, 0xdc, + 0x6d, 0xbf, 0x34, 0x47, 0x7b, 0xbd, 0x5b, 0xf9, 0x70, 0xac, 0x4d, 0x5e, 0xdb, 0xce, 0x6d, 0xff, + 0xb8, 0xfc, 0x76, 0xfd, 0xb0, 0x7f, 0x7e, 0x6c, 0x8f, 0x5b, 0x53, 0x6d, 0xf2, 0x96, 0xbb, 0x7f, + 0x74, 0x94, 0xc2, 0xf4, 0xd9, 0x52, 0x33, 0x3d, 0x7b, 0xa4, 0xe9, 0xfa, 0xfe, 0xdd, 0xe5, 0xcc, + 0xd0, 0xcd, 0x4b, 0xf9, 0xfa, 0xb4, 0x68, 0xdc, 0x9d, 0x9f, 0xbc, 0xbc, 0xf4, 0xf6, 0xb4, 0x83, + 0x42, 0xc7, 0xbe, 0xd9, 0x3d, 0x6f, 0xd8, 0xfd, 0xb7, 0x66, 0xbe, 0x72, 0x50, 0xee, 0xb7, 0x4e, + 0xee, 0xfa, 0xad, 0xa7, 0xf2, 0x30, 0xd3, 0xd9, 0x1b, 0x9f, 0x34, 0x4e, 0x87, 0xd3, 0x93, 0xb7, + 0x4c, 0x66, 0x54, 0x1e, 0x94, 0x48, 0xff, 0x70, 0xbf, 0x7c, 0x66, 0x1d, 0x16, 0x9e, 0x8f, 0xcd, + 0xcc, 0xd3, 0xb4, 0xf0, 0x9a, 0xcf, 0x29, 0x95, 0x9b, 0x72, 0x76, 0xaa, 0x1f, 0xde, 0x5d, 0x37, + 0x0f, 0xb4, 0xde, 0xfe, 0xd3, 0xb9, 0xe3, 0x74, 0x73, 0xfb, 0x9d, 0x5b, 0x45, 0x99, 0x95, 0x48, + 0xf5, 0xf2, 0x65, 0x30, 0xea, 0xcc, 0xae, 0x65, 0xe3, 0x72, 0x94, 0x7d, 0xcb, 0xbe, 0x65, 0x76, + 0x77, 0x52, 0x95, 0x89, 0x3a, 0x6d, 0xec, 0x77, 0xcf, 0x6e, 0xb3, 0x7d, 0x7d, 0xb8, 0x53, 0x98, + 0x36, 0x26, 0xa5, 0x8a, 0x39, 0x39, 0xec, 0xdc, 0x3f, 0x6b, 0xfb, 0xd6, 0x8e, 0xfe, 0x30, 0x3d, + 0x7d, 0x7e, 0x2e, 0xe5, 0x6f, 0x0f, 0xfa, 0xe3, 0xf3, 0x83, 0xbb, 0x83, 0xc6, 0xf1, 0xfe, 0xdb, + 0x74, 0x7f, 0x92, 0xba, 0x37, 0x86, 0x7a, 0xf9, 0xac, 0xa1, 0xb6, 0xef, 0xda, 0xa3, 0x92, 0x46, + 0x0e, 0xaf, 0x77, 0x8a, 0x76, 0x27, 0x2b, 0xf7, 0x4e, 0x9d, 0xb6, 0xd5, 0xb5, 0x32, 0xc7, 0xaf, + 0x77, 0xa5, 0x47, 0x2b, 0x65, 0x8c, 0x27, 0xfb, 0xce, 0xf5, 0xe1, 0x5e, 0xf9, 0xac, 0xf0, 0x76, + 0x50, 0x95, 0x5f, 0xcf, 0x77, 0x4a, 0x8f, 0xd7, 0x7b, 0x86, 0x51, 0xcc, 0xbe, 0xec, 0x1f, 0x2b, + 0xed, 0xd7, 0xfc, 0x39, 0x39, 0xbc, 0x3b, 0xe9, 0x92, 0x5e, 0x66, 0x60, 0x9f, 0xed, 0xef, 0xb7, + 0x4c, 0xa7, 0x38, 0xac, 0x3c, 0x0c, 0x8f, 0x5f, 0x77, 0x77, 0x1b, 0xfa, 0xb5, 0xdc, 0x29, 0x64, + 0x2b, 0xc3, 0xe9, 0x70, 0x6a, 0x5d, 0xbd, 0x5d, 0x8d, 0x66, 0x97, 0xba, 0x6d, 0x5e, 0x4f, 0x7a, + 0x8d, 0xc7, 0x17, 0xd3, 0x19, 0xbc, 0x59, 0x40, 0x96, 0x9b, 0xec, 0xf4, 0xbc, 0xd5, 0x2b, 0xdc, + 0x3b, 0x3b, 0x67, 0x67, 0xd5, 0xdd, 0xab, 0x9b, 0x6c, 0x75, 0x74, 0x9a, 0xea, 0xb7, 0x0b, 0xe5, + 0xfe, 0xfe, 0xe9, 0x65, 0xbe, 0x73, 0x23, 0x57, 0xf6, 0x2b, 0x47, 0x85, 0xee, 0xd3, 0xf4, 0x58, + 0x2b, 0x64, 0x0f, 0xec, 0x69, 0xf5, 0xfe, 0xf0, 0xed, 0x74, 0xe7, 0xe2, 0xf0, 0xed, 0xfe, 0xf9, + 0xba, 0x55, 0x3d, 0x3f, 0x6d, 0x5e, 0xdc, 0xee, 0x34, 0xf7, 0xaf, 0x52, 0xa3, 0x83, 0xc1, 0x4e, + 0xe6, 0xae, 0xfc, 0xf4, 0x76, 0x3b, 0x39, 0xd9, 0x6b, 0xdd, 0x0c, 0x77, 0x2d, 0xf5, 0x38, 0x75, + 0x8b, 0xbc, 0x9f, 0x69, 0xef, 0x3f, 0xec, 0x9f, 0x9d, 0x9e, 0xda, 0xcf, 0x7d, 0xb5, 0xe1, 0x14, + 0x4c, 0xb3, 0x3c, 0xd2, 0xcc, 0x69, 0x3b, 0xe7, 0xbc, 0xed, 0x55, 0x8e, 0x2a, 0xd3, 0xc1, 0xec, + 0xf0, 0x62, 0x77, 0xe7, 0x24, 0xdf, 0x3a, 0xe8, 0x97, 0xae, 0x2e, 0xb3, 0xb9, 0x1d, 0xf5, 0x32, + 0xff, 0x78, 0x36, 0xc9, 0x59, 0xbb, 0xfb, 0xce, 0xfd, 0xed, 0xee, 0xc3, 0x69, 0x8a, 0xd8, 0xfa, + 0x38, 0x7f, 0x58, 0xbd, 0x9a, 0xbe, 0xf6, 0x86, 0xed, 0x5d, 0xbd, 0x7d, 0x76, 0xfa, 0x7c, 0x70, + 0xbb, 0x6f, 0xbe, 0xbe, 0x3e, 0xb5, 0xf5, 0xfb, 0x56, 0x5f, 0xd6, 0x06, 0xf7, 0xe3, 0xea, 0xe4, + 0x36, 0x5f, 0x7c, 0xbd, 0x39, 0x7c, 0xbd, 0xac, 0xbe, 0xbd, 0xde, 0x5a, 0xa7, 0xe5, 0x97, 0xd7, + 0x93, 0xe7, 0xca, 0xe3, 0xf3, 0xd3, 0x5b, 0x5f, 0xce, 0x9a, 0xed, 0x6a, 0x6a, 0x76, 0x55, 0xb1, + 0x1f, 0x9e, 0xcc, 0xc7, 0xe9, 0xc9, 0x81, 0xba, 0x7f, 0x7c, 0x73, 0x6e, 0x1f, 0x4d, 0x26, 0xe6, + 0xec, 0xba, 0x50, 0xe8, 0xef, 0x5d, 0xe8, 0x77, 0x99, 0x14, 0x01, 0x46, 0xea, 0x1e, 0xee, 0x66, + 0x72, 0xda, 0x55, 0x7e, 0xd4, 0x2a, 0xce, 0xb2, 0xaf, 0x6f, 0x47, 0x6f, 0xce, 0xc3, 0xed, 0xf9, + 0xe5, 0x5e, 0xc9, 0xe8, 0x3e, 0x1e, 0xcb, 0x97, 0xaf, 0xb7, 0xea, 0xfd, 0xb1, 0xd3, 0x3f, 0x39, + 0x38, 0x39, 0x3b, 0x3a, 0x7d, 0x2c, 0xc9, 0xdd, 0x29, 0x79, 0x9c, 0xe9, 0xed, 0x76, 0xca, 0xde, + 0x3f, 0x39, 0x79, 0x3d, 0xd7, 0xe5, 0xfb, 0xb7, 0x9c, 0x75, 0xea, 0x9c, 0xb5, 0x77, 0xae, 0xee, + 0x2f, 0xf5, 0x47, 0x67, 0x78, 0xac, 0x14, 0xee, 0x5f, 0xf7, 0xaf, 0x8d, 0x76, 0xa6, 0x3a, 0x1c, + 0x8e, 0x66, 0x9d, 0xab, 0xbb, 0x71, 0x59, 0xed, 0x35, 0xcf, 0xc7, 0x0f, 0x96, 0x36, 0x78, 0xeb, + 0xef, 0x9e, 0xee, 0x8e, 0xc1, 0xd2, 0x4d, 0x55, 0x0e, 0x8b, 0xd3, 0xe7, 0x93, 0x6a, 0xa1, 0xd2, + 0xd9, 0x25, 0x4e, 0x6a, 0x5f, 0x79, 0xe8, 0xb5, 0x52, 0xa7, 0x2f, 0x46, 0xe6, 0xde, 0x49, 0x8d, + 0x5b, 0x9d, 0x57, 0xc5, 0x7a, 0x2d, 0xbd, 0x3c, 0xdd, 0xb4, 0x5f, 0x0a, 0xe7, 0xca, 0xc9, 0xab, + 0x79, 0xd1, 0x7e, 0xd9, 0xdb, 0x33, 0x6d, 0xa5, 0x53, 0x3d, 0xcd, 0x5a, 0xd7, 0xe7, 0x0f, 0xc7, + 0xfd, 0xcb, 0xb6, 0x75, 0x3f, 0xdb, 0xed, 0x3e, 0x3e, 0x93, 0x92, 0xb3, 0x73, 0xd5, 0x78, 0x73, + 0x5e, 0xda, 0x8f, 0x4d, 0x79, 0xb2, 0x4b, 0x0a, 0xb7, 0xfa, 0xb9, 0x6a, 0x0e, 0xf5, 0x27, 0xd0, + 0x56, 0x46, 0x99, 0xd1, 0x73, 0xaf, 0x74, 0xd2, 0x2b, 0x8f, 0x49, 0x36, 0x9b, 0x3b, 0x1c, 0xf5, + 0xaa, 0xb9, 0xbd, 0x71, 0xa6, 0x4c, 0xf4, 0x9d, 0x4c, 0x4a, 0xbf, 0x2c, 0x9b, 0x6d, 0x50, 0x33, + 0xaf, 0x8e, 0x9f, 0xda, 0xaa, 0xfc, 0xdc, 0x6c, 0x99, 0xc6, 0x79, 0x15, 0x3a, 0x7e, 0xf3, 0xf2, + 0x5c, 0x3e, 0x3e, 0x9b, 0x98, 0xed, 0xfb, 0xbe, 0x61, 0x36, 0xda, 0x03, 0xa7, 0x7d, 0x71, 0xff, + 0x32, 0x73, 0x1a, 0xfb, 0xf9, 0x93, 0x54, 0xe6, 0xd5, 0x90, 0x5b, 0x8d, 0xd6, 0xf9, 0x7d, 0xee, + 0x20, 0xd7, 0x3e, 0xed, 0xe9, 0xf6, 0xc0, 0xdc, 0x29, 0x28, 0xd5, 0xee, 0xf0, 0xad, 0x9c, 0x39, + 0x9c, 0x66, 0x32, 0xdd, 0x4e, 0xfe, 0xe2, 0xe1, 0xfc, 0xa9, 0x00, 0xbc, 0x3a, 0x7b, 0xb8, 0xbd, + 0xcb, 0x75, 0x1f, 0xaf, 0xed, 0xdd, 0x6a, 0xf9, 0xf5, 0xe4, 0xb4, 0x5c, 0x7d, 0x55, 0xde, 0x46, + 0xd0, 0xb5, 0xa3, 0xec, 0xf8, 0xf2, 0xe1, 0xa6, 0x9c, 0x2f, 0x17, 0xdb, 0xf7, 0xad, 0x03, 0xa3, + 0xb3, 0x63, 0xf4, 0x76, 0x73, 0xe4, 0xe8, 0xfa, 0xed, 0x58, 0xee, 0x9c, 0x35, 0x65, 0xd0, 0xd6, + 0x26, 0x57, 0x72, 0xbf, 0x37, 0x1e, 0xb5, 0xba, 0xe3, 0x6e, 0xb6, 0xd0, 0xcb, 0x8e, 0x80, 0xeb, + 0x4f, 0x2f, 0xf7, 0xf2, 0xc7, 0xc7, 0x87, 0xa7, 0xa5, 0x51, 0xb3, 0x9b, 0xd1, 0x8b, 0x7a, 0xa5, + 0x9b, 0x2f, 0xde, 0x5e, 0x9c, 0x5c, 0xea, 0x25, 0x7d, 0x60, 0xc1, 0x02, 0x69, 0xdd, 0xe5, 0x95, + 0x6e, 0x5e, 0x7f, 0xcb, 0xa9, 0x37, 0xea, 0xf9, 0x69, 0x21, 0x5b, 0xd8, 0xd3, 0x49, 0xef, 0x34, + 0x73, 0x7c, 0x70, 0xaa, 0xdd, 0x3f, 0x39, 0x4f, 0xf7, 0xca, 0xab, 0xb1, 0x37, 0x28, 0x4c, 0x5b, + 0xcf, 0x63, 0xfb, 0xa0, 0x9d, 0x29, 0x0d, 0xab, 0x96, 0xb2, 0xaf, 0xd9, 0xa7, 0xc3, 0xc2, 0xe8, + 0xf0, 0xe5, 0xea, 0x5e, 0x1b, 0x97, 0x6f, 0x32, 0x13, 0xf2, 0xf4, 0xf6, 0x7c, 0x78, 0x48, 0xca, + 0xd3, 0x27, 0xf5, 0xf6, 0xcd, 0x3c, 0x2e, 0xde, 0x37, 0xee, 0x77, 0x4e, 0x77, 0xcf, 0x27, 0xd7, + 0x27, 0xd3, 0xc9, 0xf5, 0xa3, 0xbe, 0x6f, 0x3c, 0x1c, 0x4c, 0x3b, 0xca, 0xc9, 0xf4, 0xbc, 0xb4, + 0x7b, 0x5d, 0xd9, 0x39, 0xd7, 0x73, 0x46, 0xf5, 0xfc, 0x15, 0x46, 0xd8, 0x19, 0x5b, 0x4a, 0xf1, + 0x46, 0x3f, 0x7a, 0x7e, 0x38, 0xdb, 0xd1, 0x86, 0x47, 0xfb, 0x4f, 0xf9, 0xd9, 0xe5, 0xe3, 0x43, + 0xfe, 0xcc, 0xa9, 0x8e, 0x8b, 0xc3, 0xe1, 0xe1, 0x68, 0xf2, 0x38, 0x1e, 0x4f, 0x2f, 0xc7, 0xc4, + 0x3a, 0xad, 0x92, 0xd6, 0xd8, 0x7e, 0x7b, 0x38, 0x7f, 0xbe, 0x7d, 0xb0, 0x5e, 0xda, 0xaf, 0x9d, + 0x83, 0x8b, 0xbb, 0xfb, 0x5c, 0x7b, 0xaf, 0xbd, 0x7b, 0x70, 0xa2, 0xe6, 0xcf, 0x4e, 0xef, 0x6e, + 0xee, 0xdf, 0xde, 0xee, 0x0f, 0xf7, 0x8b, 0x85, 0x9d, 0x51, 0x26, 0x67, 0x35, 0xb2, 0xaf, 0x2f, + 0x46, 0x49, 0xab, 0xf6, 0xf6, 0xfb, 0x77, 0xed, 0x9d, 0x91, 0xd5, 0xbb, 0xdb, 0xb9, 0xdf, 0xdf, + 0xd7, 0xee, 0xee, 0xb3, 0xa3, 0xfe, 0xf4, 0x62, 0xd2, 0xb1, 0x53, 0x95, 0xfb, 0x4c, 0x06, 0xe4, + 0xd3, 0xd3, 0xb1, 0x4a, 0x4e, 0xb5, 0xea, 0xfd, 0x43, 0xa3, 0x42, 0x0e, 0x4e, 0x8b, 0x1d, 0x6b, + 0xa7, 0xdc, 0x1b, 0x5c, 0x9c, 0xcd, 0xa6, 0x5a, 0xa5, 0xfd, 0x7c, 0x75, 0x7f, 0xf0, 0xbc, 0x93, + 0x6d, 0xdf, 0x67, 0x8c, 0x97, 0xd2, 0x6d, 0xe7, 0x95, 0xe8, 0xb6, 0x55, 0xde, 0xaf, 0x1c, 0x96, + 0x47, 0x8e, 0x3d, 0xec, 0xbe, 0x1a, 0x87, 0xc3, 0xb7, 0x6a, 0xd5, 0x1a, 0xcf, 0xc8, 0x5e, 0xe6, + 0xf2, 0x0d, 0x14, 0x84, 0xc2, 0x70, 0x7c, 0xf7, 0x70, 0xfa, 0x3c, 0x7b, 0xac, 0x8c, 0x2b, 0xcf, + 0xc5, 0x87, 0xc1, 0x13, 0x39, 0xcc, 0x2b, 0x97, 0x0f, 0xe5, 0x62, 0xd7, 0x54, 0x2f, 0x8a, 0xe4, + 0x3c, 0x73, 0xf1, 0x36, 0xe9, 0x1c, 0x94, 0xdf, 0x5e, 0x7a, 0x9a, 0x93, 0xb1, 0xbb, 0x45, 0x52, + 0x7e, 0xec, 0xbc, 0xb6, 0x2f, 0x8c, 0x49, 0xef, 0xba, 0x9f, 0xcb, 0x5d, 0x17, 0x8b, 0x95, 0xa2, + 0xe2, 0xe4, 0xc6, 0x0f, 0x0f, 0x95, 0xf2, 0x7d, 0xf6, 0x51, 0xee, 0x5f, 0xc9, 0xe5, 0x6a, 0xa1, + 0x5a, 0x26, 0x8f, 0x37, 0xd9, 0xbd, 0x97, 0x99, 0xb1, 0xf7, 0x7a, 0xf6, 0x08, 0x3a, 0xe0, 0x61, + 0xb7, 0x72, 0x35, 0x3e, 0x39, 0xb0, 0xae, 0x0f, 0x4a, 0xed, 0xe3, 0xc7, 0x9b, 0xdd, 0x66, 0xf3, + 0xe9, 0xf1, 0x60, 0xef, 0xbe, 0x33, 0x2c, 0x1e, 0x64, 0x81, 0x8c, 0x39, 0xb5, 0x58, 0x78, 0xac, + 0xde, 0x3b, 0xea, 0xce, 0xe8, 0x45, 0xbb, 0x2c, 0x96, 0x1f, 0x9d, 0x9d, 0xa7, 0xb3, 0xc6, 0xbd, + 0x36, 0xca, 0xf5, 0x1e, 0xdf, 0x76, 0xcf, 0xca, 0x57, 0xa9, 0xe2, 0x3e, 0x48, 0xf2, 0x56, 0xfe, + 0xe2, 0xad, 0xf8, 0x0c, 0x6b, 0xd8, 0x91, 0xd2, 0x71, 0xda, 0xf7, 0x97, 0xc6, 0x64, 0x74, 0xd5, + 0x3f, 0x9f, 0x1d, 0x6a, 0xa3, 0x13, 0x4d, 0x99, 0x54, 0x27, 0x7a, 0xfb, 0x62, 0xe8, 0x8c, 0x94, + 0x67, 0x23, 0x73, 0xd7, 0x9a, 0x54, 0x41, 0x22, 0xb7, 0xae, 0x27, 0x67, 0x9d, 0x11, 0xb0, 0xe5, + 0xd3, 0x64, 0x7f, 0x30, 0x28, 0xd9, 0xe5, 0x81, 0xfd, 0x6a, 0xa9, 0xf7, 0x4d, 0xbb, 0xdf, 0xc8, + 0xd9, 0x79, 0x7d, 0x1f, 0xd4, 0xe6, 0xc2, 0x51, 0xf9, 0x22, 0xa5, 0xd8, 0xd3, 0xc9, 0xf4, 0xa9, + 0xed, 0x9c, 0x9e, 0xca, 0xf9, 0xbd, 0x6a, 0x7b, 0xd0, 0xb9, 0x2e, 0x3d, 0xbe, 0x55, 0x87, 0x47, + 0xed, 0x7d, 0xf9, 0xb6, 0x5a, 0x3a, 0x91, 0xa7, 0x07, 0x8d, 0x72, 0x7b, 0x5a, 0x9d, 0xa5, 0xb4, + 0x5c, 0x26, 0x53, 0xce, 0x3f, 0xa7, 0x0e, 0x73, 0xaa, 0xbc, 0x77, 0xd0, 0xcd, 0x95, 0x47, 0x8d, + 0xbb, 0xf3, 0xa3, 0xcc, 0xfd, 0xa0, 0xf9, 0x38, 0xba, 0x7f, 0x3d, 0xda, 0x55, 0x1e, 0xa7, 0x4a, + 0xd7, 0x96, 0xb5, 0xce, 0xdd, 0xfe, 0x5d, 0xaa, 0x7b, 0xa1, 0x1d, 0x0e, 0x77, 0xa6, 0x99, 0xd7, + 0x8b, 0x72, 0xa7, 0x94, 0x19, 0x3d, 0x3d, 0xc8, 0xce, 0x35, 0xb9, 0x75, 0x8e, 0xaf, 0xc6, 0xa5, + 0xc2, 0x0c, 0xd8, 0xb7, 0x31, 0x7e, 0x28, 0x4d, 0x77, 0xc9, 0x5b, 0xe3, 0x21, 0x53, 0xb9, 0x1f, + 0x56, 0x9a, 0xfd, 0x41, 0xa6, 0x5a, 0xbc, 0xa8, 0x5e, 0x4c, 0xed, 0xf3, 0xe6, 0xa3, 0x6e, 0x3f, + 0xdc, 0x5f, 0xa5, 0xca, 0x66, 0xf3, 0xad, 0x92, 0x39, 0x3f, 0x7b, 0x2a, 0x96, 0x9f, 0x1a, 0x47, + 0x07, 0x7b, 0xdd, 0x9b, 0x49, 0x4a, 0x31, 0x2b, 0x77, 0xa9, 0xa3, 0xfc, 0xf9, 0xed, 0x1d, 0x81, + 0x39, 0x35, 0x51, 0xc7, 0x29, 0xad, 0xd3, 0x79, 0x7d, 0xce, 0x96, 0x73, 0x0f, 0xe5, 0xc7, 0x49, + 0xb1, 0x7f, 0xdc, 0xb8, 0xbd, 0x3a, 0x78, 0xbc, 0xbc, 0x2a, 0x5d, 0xcd, 0xa6, 0xd7, 0xbd, 0x3e, + 0x69, 0xa6, 0xae, 0x3a, 0xc5, 0x7b, 0xbd, 0x71, 0xd6, 0x6c, 0x1c, 0xee, 0x8f, 0x4b, 0x37, 0xc7, + 0x0e, 0x71, 0xf2, 0xa6, 0x9e, 0xa9, 0xe4, 0xdb, 0x85, 0xc7, 0x66, 0xe3, 0x68, 0x67, 0x9c, 0x2f, + 0x1a, 0x3d, 0xf3, 0xe6, 0x7a, 0xe6, 0x14, 0x2f, 0x9f, 0x41, 0x27, 0xbd, 0xa9, 0x9c, 0x3c, 0x36, + 0xf6, 0xae, 0x4e, 0x2a, 0xfa, 0x7e, 0x7f, 0xa7, 0x03, 0x6a, 0xf1, 0xed, 0x04, 0x78, 0xff, 0xf5, + 0xb0, 0xb5, 0x73, 0x62, 0xec, 0x1d, 0x94, 0x4f, 0x9e, 0xae, 0x4e, 0xcf, 0xcc, 0x67, 0xa3, 0x38, + 0x1a, 0x28, 0x99, 0xcb, 0xa3, 0xdc, 0x6c, 0xb4, 0x73, 0x7f, 0xd1, 0xbc, 0x69, 0xed, 0x3e, 0x29, + 0xcf, 0xe6, 0xeb, 0x55, 0xa9, 0x92, 0x7a, 0x52, 0xb2, 0x95, 0xe7, 0xfe, 0x41, 0xff, 0xf1, 0xec, + 0xa6, 0xa2, 0xef, 0x0c, 0x9e, 0x4f, 0x3a, 0xfb, 0xd6, 0x49, 0xf3, 0x71, 0xbf, 0x34, 0x3b, 0x69, + 0x3d, 0x5d, 0x9f, 0xee, 0x17, 0x9d, 0xeb, 0xe2, 0xe3, 0xc9, 0xe0, 0xf6, 0xed, 0xed, 0xfc, 0xfe, + 0xac, 0x98, 0x1b, 0xee, 0x8c, 0x47, 0x97, 0x67, 0xea, 0x69, 0x79, 0x7a, 0x39, 0x2d, 0xdc, 0x2a, + 0xd7, 0xfd, 0x7d, 0xf5, 0xf8, 0xa9, 0x71, 0xb7, 0x6f, 0x77, 0x9e, 0x72, 0x87, 0xb7, 0x47, 0x83, + 0xdb, 0xcb, 0xce, 0x9e, 0x72, 0x58, 0xbc, 0xbf, 0xdf, 0x1d, 0x8f, 0x87, 0xe3, 0xee, 0x65, 0x4f, + 0x2b, 0x9e, 0x28, 0xcd, 0xf1, 0x45, 0xc5, 0xc8, 0xa6, 0x7a, 0xfb, 0xcd, 0x9d, 0x76, 0x69, 0x30, + 0x1e, 0x9d, 0xbe, 0x55, 0xb4, 0xb3, 0xeb, 0x8b, 0x49, 0xef, 0xf9, 0xf2, 0xbc, 0xa2, 0x2a, 0x56, + 0x55, 0xbe, 0x6e, 0x36, 0xd5, 0xeb, 0xe6, 0xb1, 0x95, 0x1f, 0xf5, 0x5f, 0x0f, 0x7b, 0xa5, 0xd3, + 0xd7, 0xfe, 0xed, 0xe3, 0xa3, 0x5d, 0x1c, 0xbc, 0x8d, 0x47, 0x55, 0xe7, 0xec, 0xe8, 0xe2, 0xd6, + 0xca, 0x4c, 0xcd, 0xf1, 0xb5, 0x7d, 0x7e, 0x37, 0xee, 0x3e, 0x65, 0xcc, 0xd4, 0x70, 0xa7, 0xa2, + 0x97, 0xef, 0x72, 0x20, 0x15, 0xe5, 0x9b, 0x94, 0x72, 0x3d, 0xb8, 0x34, 0xcf, 0x07, 0xf6, 0xf9, + 0xfe, 0xc5, 0xeb, 0xd4, 0xd8, 0xcb, 0x8d, 0x64, 0x7b, 0xf4, 0x7a, 0xa3, 0x9a, 0xfd, 0x69, 0xb1, + 0x72, 0x74, 0xdc, 0xa0, 0x9e, 0xc0, 0x7a, 0x52, 0xe8, 0x19, 0xd6, 0x50, 0x71, 0x12, 0xeb, 0x68, + 0x40, 0xad, 0x27, 0x17, 0x35, 0xcb, 0x30, 0x9c, 0xf9, 0xc6, 0x46, 0x67, 0x23, 0x5b, 0xfb, 0x9a, + 0xcd, 0x66, 0x37, 0xf1, 0xb1, 0x57, 0xfb, 0xda, 0xeb, 0xf5, 0xe8, 0x63, 0xae, 0x86, 0xfe, 0x57, + 0xfa, 0x98, 0xaf, 0x7d, 0xcd, 0xe7, 0xf3, 0xf4, 0xb1, 0x50, 0xfb, 0x5a, 0x28, 0x14, 0xe8, 0x63, + 0xb1, 0xf6, 0xb5, 0x58, 0x2c, 0xd2, 0xc7, 0x52, 0xed, 0x6b, 0xa9, 0x54, 0xa2, 0x8f, 0x95, 0xda, + 0xd7, 0x4a, 0xa5, 0x42, 0x1f, 0xdb, 0xb5, 0xaf, 0xed, 0x76, 0x9b, 0x3e, 0x76, 0x6a, 0x5f, 0x3b, + 0x9d, 0x0e, 0x7d, 0x24, 0xb5, 0xaf, 0x84, 0x10, 0xfa, 0xd8, 0xad, 0x7d, 0xed, 0x76, 0xbb, 0xf4, + 0xd1, 0x82, 0x02, 0x79, 0xd6, 0x5a, 0x1f, 0x1a, 0xee, 0x30, 0x74, 0x34, 0x68, 0xad, 0xa2, 0xd0, + 0xc7, 0x59, 0xed, 0xab, 0x52, 0x95, 0xe1, 0xd1, 0x01, 0xb8, 0x72, 0x9a, 0xb5, 0x6b, 0xd4, 0xac, + 0x7e, 0x5b, 0x49, 0xe4, 0x0b, 0x92, 0xe0, 0xfd, 0x93, 0xd3, 0xd5, 0x24, 0xcd, 0x73, 0xda, 0xcb, + 0x99, 0x60, 0xd7, 0x27, 0x28, 0x84, 0xa4, 0x57, 0x46, 0x61, 0x85, 0xb2, 0x72, 0x4e, 0x12, 0x82, + 0x3f, 0xcb, 0xe5, 0x06, 0xac, 0x5c, 0x31, 0x2b, 0x09, 0xde, 0xbf, 0x70, 0x21, 0x67, 0x50, 0x2b, + 0xcb, 0xe6, 0x14, 0x9f, 0x4c, 0xef, 0x09, 0x6a, 0x95, 0xf2, 0x2c, 0xad, 0x6d, 0xd6, 0xb2, 0x05, + 0x73, 0x2a, 0xb0, 0x3f, 0xb2, 0xfb, 0x84, 0x65, 0x20, 0xa7, 0x0a, 0xaf, 0xb2, 0x50, 0xc6, 0xbf, + 0xb4, 0x56, 0xb7, 0xa6, 0x1b, 0x3a, 0x92, 0xc8, 0xee, 0x9b, 0x35, 0xb1, 0x8d, 0xee, 0x11, 0x11, + 0x33, 0x86, 0x4e, 0x0d, 0x6a, 0x2e, 0xd0, 0x7b, 0x3f, 0xa7, 0xfe, 0x84, 0x0d, 0x85, 0xb9, 0x50, + 0x86, 0x0a, 0xe8, 0xff, 0x23, 0x8d, 0x7a, 0x20, 0x16, 0x6d, 0xa3, 0x3b, 0x9b, 0x0f, 0x15, 0xab, + 0xaf, 0xea, 0x35, 0x79, 0x13, 0x7d, 0x4c, 0x7d, 0xcb, 0x18, 0xe9, 0x5d, 0xe6, 0x5f, 0xaf, 0x31, + 0xb4, 0x61, 0xd4, 0x93, 0x9b, 0xbc, 0xbd, 0x7d, 0x48, 0xb4, 0x31, 0x71, 0xd4, 0x8e, 0x22, 0xdd, + 0x11, 0xab, 0xab, 0xe8, 0x8a, 0x64, 0x2b, 0xba, 0xbd, 0x61, 0x13, 0x4b, 0xed, 0xb1, 0x82, 0xb6, + 0xfa, 0x46, 0x6a, 0x59, 0xc0, 0x72, 0x33, 0x0c, 0xa8, 0x97, 0xdc, 0x44, 0x7f, 0xf1, 0x86, 0xa2, + 0xa9, 0x7d, 0xbd, 0xd6, 0x21, 0xe8, 0x4f, 0xd8, 0x44, 0x57, 0xfc, 0x8b, 0xea, 0x6c, 0x30, 0x34, + 0xd1, 0xeb, 0x89, 0x7e, 0x1d, 0xd6, 0x2d, 0x37, 0x6b, 0x04, 0xb0, 0x01, 0xbe, 0x46, 0x3a, 0x5e, + 0xc6, 0xd0, 0x78, 0x8b, 0x4b, 0xb5, 0x97, 0x13, 0x97, 0x4b, 0x79, 0xed, 0x29, 0xe6, 0xc6, 0x40, + 0xed, 0x0f, 0x34, 0xf4, 0x3f, 0xb9, 0x3d, 0x76, 0x2c, 0xe8, 0x89, 0xa9, 0x58, 0x80, 0xd9, 0xa6, + 0xdd, 0xb1, 0x0c, 0x4d, 0x6b, 0x2b, 0x16, 0xdb, 0xbf, 0xa8, 0x95, 0xa0, 0x3b, 0x41, 0x5a, 0xb8, + 0x63, 0x76, 0x3b, 0x29, 0x70, 0x75, 0x29, 0x61, 0x25, 0x4a, 0x7c, 0xe6, 0xda, 0xac, 0x65, 0x65, + 0xf9, 0x5f, 0x9b, 0x0c, 0x0e, 0x7d, 0x34, 0x0d, 0x5b, 0xa5, 0xe3, 0xd1, 0x53, 0xa7, 0xa4, 0xbb, + 0x69, 0xc0, 0xb2, 0xca, 0x60, 0x6f, 0xb4, 0xc9, 0x40, 0x19, 0xab, 0x00, 0x1b, 0x91, 0x5d, 0x7c, + 0x6d, 0xf7, 0x39, 0x10, 0xe3, 0x41, 0x00, 0x63, 0x3c, 0x89, 0x02, 0x79, 0xdb, 0x50, 0xf5, 0x2e, + 0x99, 0xd6, 0x36, 0xb2, 0xa1, 0xb1, 0xf4, 0x4b, 0xb9, 0xf4, 0xe6, 0xb2, 0x2c, 0x62, 0x12, 0x05, + 0xc9, 0xe2, 0x3e, 0xf1, 0x79, 0x74, 0x0c, 0x3b, 0x88, 0xd8, 0xa6, 0x61, 0x2a, 0x1d, 0xd5, 0x99, + 0x01, 0x8b, 0xd0, 0x3e, 0x32, 0x68, 0x6e, 0xa2, 0x90, 0xb3, 0x17, 0xa6, 0xc7, 0x43, 0x94, 0x5b, + 0x65, 0x21, 0x87, 0x7f, 0x17, 0x8a, 0xa4, 0xd4, 0xc6, 0x2a, 0x94, 0x26, 0x5d, 0xc9, 0x9c, 0x87, + 0xe9, 0xd5, 0x4d, 0xf2, 0xd9, 0x73, 0xca, 0x14, 0x5d, 0xd2, 0x31, 0x2c, 0xca, 0x97, 0xac, 0xeb, + 0xed, 0x91, 0xe3, 0x18, 0xfa, 0x1c, 0x98, 0x41, 0x53, 0x75, 0x02, 0x8d, 0x77, 0x46, 0x96, 0x0d, + 0x30, 0x4c, 0x43, 0xc5, 0x7e, 0x2c, 0xd2, 0x9a, 0xd2, 0x26, 0x9a, 0x1d, 0xf0, 0xaf, 0xa9, 0x74, + 0xbb, 0xaa, 0xde, 0xaf, 0x55, 0x38, 0x24, 0xbe, 0xe2, 0xd6, 0x0f, 0x2d, 0x38, 0x8f, 0x50, 0xab, + 0x6d, 0x00, 0xf8, 0x61, 0x0d, 0xf8, 0xad, 0x93, 0x60, 0x68, 0xb5, 0x07, 0x49, 0x21, 0x25, 0xc0, + 0x30, 0x27, 0x37, 0x2d, 0x4a, 0xf1, 0xd2, 0x12, 0x03, 0x57, 0x92, 0x11, 0x2c, 0x36, 0x27, 0x16, + 0x00, 0xd5, 0xfb, 0xc0, 0x90, 0x5d, 0x52, 0x03, 0x62, 0xe1, 0xbc, 0xd0, 0x36, 0x2c, 0x6d, 0x91, + 0x6e, 0x5b, 0xea, 0xdc, 0x43, 0x09, 0x26, 0xf0, 0x22, 0x3d, 0xb1, 0xd0, 0xcf, 0x65, 0x45, 0x11, + 0x71, 0x0c, 0x13, 0x90, 0xd7, 0x48, 0x0f, 0xa6, 0xac, 0xdb, 0x30, 0x3f, 0x7e, 0x7e, 0xdb, 0x4e, + 0x3b, 0xe9, 0x0f, 0x71, 0x76, 0x91, 0xc6, 0x0d, 0x28, 0x3b, 0xce, 0x0f, 0xc6, 0x66, 0x20, 0x7a, + 0xcc, 0x80, 0x8e, 0x20, 0xc7, 0x35, 0x6e, 0x4e, 0xe6, 0x00, 0x91, 0x2f, 0xea, 0x10, 0x77, 0xeb, + 0x14, 0x60, 0x71, 0x24, 0xec, 0x86, 0xc7, 0x5e, 0x5c, 0x7a, 0x57, 0xb5, 0x4d, 0x4d, 0x99, 0xd5, + 0x54, 0x9d, 0x96, 0xa0, 0x62, 0x65, 0x91, 0x86, 0xc1, 0x08, 0x53, 0xa3, 0x9f, 0x0c, 0xea, 0x40, + 0x76, 0xaf, 0x17, 0xc9, 0x2f, 0x71, 0xf9, 0x1e, 0xdd, 0xc0, 0xd2, 0x53, 0x46, 0x9a, 0xc3, 0x57, + 0x84, 0x91, 0x10, 0x58, 0x77, 0xa4, 0x34, 0x10, 0xc3, 0x7d, 0xf6, 0xc6, 0x75, 0x83, 0x0e, 0xa4, + 0x50, 0xa0, 0xc3, 0x99, 0x1e, 0x8c, 0xfa, 0xae, 0xf3, 0x8f, 0xf6, 0xa7, 0x90, 0x43, 0xc2, 0x9a, + 0x1a, 0x70, 0xb6, 0x35, 0x13, 0x6e, 0x1a, 0x3b, 0xa7, 0x7b, 0x52, 0xda, 0x26, 0x7d, 0x67, 0xee, + 0xe0, 0xae, 0xde, 0x86, 0xeb, 0x24, 0x66, 0x84, 0x0e, 0xa6, 0xdf, 0x82, 0x96, 0x11, 0x6e, 0x76, + 0xfd, 0x01, 0xa2, 0x8d, 0x70, 0xd8, 0x2e, 0x89, 0x29, 0xae, 0x95, 0x5d, 0xc9, 0xaf, 0xce, 0x49, + 0x3b, 0x94, 0xde, 0x1e, 0x34, 0x79, 0xd3, 0xe7, 0x04, 0x06, 0x63, 0xa8, 0x76, 0xbb, 0x1a, 0x59, + 0xa4, 0x5f, 0xc8, 0xcc, 0x71, 0xd9, 0x9d, 0x65, 0xe0, 0xb0, 0x2f, 0xd2, 0x63, 0x45, 0x0b, 0x27, + 0x53, 0x36, 0x70, 0xd3, 0x05, 0x95, 0x6b, 0xc6, 0x86, 0xf1, 0x04, 0xde, 0xb2, 0xa9, 0x07, 0x9a, + 0x6e, 0x42, 0x06, 0xec, 0xa4, 0xb4, 0x6d, 0x43, 0x1b, 0x39, 0x84, 0xf1, 0x12, 0xcc, 0x02, 0x8f, + 0xc7, 0x8b, 0x48, 0x24, 0x10, 0x81, 0xac, 0x3c, 0x9d, 0xc3, 0xb8, 0xc2, 0x33, 0x69, 0x07, 0x4b, + 0x01, 0x79, 0x48, 0x00, 0xf6, 0xc9, 0x45, 0x9a, 0xd0, 0x12, 0x52, 0xba, 0xef, 0xfe, 0x7a, 0x75, + 0xa4, 0x50, 0x83, 0x91, 0x19, 0xb0, 0x34, 0xb3, 0xdd, 0xea, 0xf3, 0x65, 0x46, 0x5c, 0x46, 0x15, + 0x99, 0x1f, 0x31, 0x65, 0x7c, 0x5f, 0xa1, 0xa3, 0x69, 0x98, 0x31, 0x7d, 0x8a, 0x63, 0x49, 0x77, + 0xea, 0xb8, 0x73, 0x86, 0xd6, 0xdc, 0xe8, 0xc4, 0xd4, 0x5d, 0xb9, 0xb0, 0xe5, 0x92, 0x40, 0x22, + 0x0b, 0x3a, 0x56, 0xcb, 0xc2, 0xf8, 0x43, 0x69, 0xb5, 0x2b, 0x70, 0x53, 0x9d, 0xe5, 0x6d, 0x58, + 0x4a, 0x57, 0x1d, 0xd9, 0xb5, 0x1c, 0xae, 0xd4, 0xfe, 0x04, 0xa4, 0x6d, 0xe7, 0x7d, 0xcc, 0xf3, + 0x45, 0x6e, 0xf8, 0x21, 0x59, 0x40, 0x21, 0x04, 0x40, 0x23, 0x73, 0x2f, 0x34, 0xe3, 0x72, 0x05, + 0xb7, 0xbb, 0x1b, 0x1d, 0x01, 0x16, 0x0e, 0x3d, 0xc4, 0x8c, 0x25, 0x36, 0x66, 0x8a, 0x05, 0x6b, + 0xe2, 0x8a, 0x61, 0xf6, 0x68, 0x47, 0x87, 0x3b, 0x0b, 0x95, 0x5c, 0x0e, 0xa7, 0x0d, 0x85, 0xda, + 0xa0, 0xde, 0xfb, 0x8f, 0xc0, 0xb0, 0x8e, 0x54, 0x51, 0xe6, 0x45, 0x04, 0x6d, 0x4f, 0xb3, 0xe6, + 0xcb, 0x0b, 0xb9, 0xcf, 0x46, 0x96, 0x81, 0x9b, 0x04, 0x09, 0x39, 0xc9, 0x2f, 0x0f, 0x7e, 0xb6, + 0x90, 0xce, 0xdb, 0x2b, 0x06, 0x3e, 0x10, 0x77, 0x9c, 0xe8, 0x06, 0x2e, 0x9c, 0x9a, 0x12, 0xfe, + 0x51, 0x80, 0xd2, 0x5d, 0x81, 0xb6, 0xbe, 0xd4, 0x58, 0xb6, 0x22, 0x77, 0x49, 0x1f, 0x78, 0x4d, + 0xd5, 0xe6, 0xb1, 0xac, 0x11, 0x3f, 0x01, 0xbf, 0x6a, 0xea, 0x98, 0x60, 0xbc, 0x82, 0xb7, 0xa8, + 0x16, 0x7c, 0xaa, 0xd1, 0x65, 0xd9, 0xe5, 0x06, 0x39, 0x28, 0x98, 0xdb, 0xf5, 0x8a, 0x56, 0xfd, + 0x15, 0xbc, 0xca, 0x95, 0x5c, 0xd1, 0xb5, 0x22, 0x14, 0xa1, 0xe3, 0x82, 0x0f, 0x31, 0x33, 0x2e, + 0xb1, 0x01, 0x19, 0x12, 0xfe, 0x81, 0x3e, 0x80, 0xac, 0x9a, 0x2f, 0xf1, 0x28, 0xaf, 0x8a, 0x2c, + 0x4f, 0x31, 0x98, 0xd9, 0x2b, 0x16, 0x34, 0x7f, 0x29, 0xe1, 0xbb, 0xb5, 0x6a, 0x02, 0xc0, 0x9a, + 0x42, 0x9b, 0x17, 0xdc, 0xc5, 0xf6, 0x5d, 0x2c, 0x7a, 0x9a, 0x01, 0xca, 0x02, 0x42, 0xf7, 0x7a, + 0x4f, 0xf5, 0x29, 0x6e, 0xd0, 0x69, 0x1d, 0x1c, 0x70, 0x29, 0x0a, 0x88, 0x72, 0xc1, 0xbb, 0xba, + 0x61, 0x27, 0xb9, 0x39, 0x54, 0x75, 0x57, 0xd7, 0x2a, 0x50, 0xb6, 0xc5, 0xc5, 0xc0, 0x45, 0xcc, + 0x63, 0x10, 0x57, 0x93, 0x6e, 0x9b, 0x50, 0xda, 0x5d, 0xf7, 0xd9, 0x02, 0x12, 0x5b, 0xae, 0x8d, + 0xe5, 0xdc, 0x49, 0x51, 0xfc, 0x17, 0x57, 0x23, 0xe8, 0x72, 0x6d, 0x80, 0x2a, 0xce, 0xfc, 0x1d, + 0x0a, 0x0d, 0x92, 0x11, 0x4c, 0x49, 0x88, 0x66, 0x69, 0x54, 0xac, 0xc7, 0xe4, 0x3d, 0x08, 0x4a, + 0x68, 0x1d, 0x8c, 0x4c, 0xa4, 0xc5, 0x87, 0x00, 0x4a, 0xef, 0x57, 0xc7, 0x50, 0x17, 0x05, 0x18, + 0xdf, 0x02, 0x0b, 0x0d, 0x54, 0x30, 0x7e, 0xdc, 0xd9, 0x23, 0xa7, 0xe2, 0xe8, 0xc9, 0x3f, 0x31, + 0x23, 0xe9, 0x89, 0x07, 0x9a, 0x85, 0x29, 0xc2, 0x86, 0x67, 0xa4, 0x98, 0x49, 0xff, 0x19, 0xba, + 0xee, 0x91, 0x79, 0x03, 0x99, 0xda, 0x2f, 0x11, 0xcb, 0xd1, 0x5c, 0x33, 0xaa, 0x24, 0x27, 0x33, + 0x82, 0xdf, 0xe4, 0x06, 0x6d, 0x33, 0xb9, 0x5a, 0xcb, 0x45, 0x72, 0xba, 0x11, 0x3b, 0x73, 0x8e, + 0xcb, 0x7c, 0x06, 0xb7, 0x08, 0x1a, 0x2c, 0x63, 0xb2, 0xa2, 0x6f, 0xf8, 0x9e, 0xf1, 0x5a, 0x43, + 0xb1, 0x3d, 0x45, 0x2e, 0x43, 0x36, 0x70, 0x25, 0x38, 0xa4, 0x04, 0x13, 0x16, 0xb1, 0x80, 0x46, + 0x26, 0x35, 0x65, 0xe4, 0x18, 0x9b, 0xbc, 0x7e, 0xbe, 0x0a, 0xbf, 0x60, 0x5d, 0x17, 0xa8, 0x25, + 0xe6, 0x1a, 0x10, 0x1e, 0xa0, 0x0d, 0x56, 0x07, 0x0b, 0x50, 0x1b, 0x66, 0xf1, 0xb5, 0x37, 0x95, + 0xbe, 0x9a, 0x8a, 0x36, 0x81, 0xbf, 0xd8, 0x2d, 0xf8, 0x79, 0xd5, 0xe0, 0xcf, 0xc8, 0x51, 0xe1, + 0x07, 0x74, 0x07, 0x96, 0x08, 0x0f, 0x7e, 0x0a, 0x3e, 0xe4, 0xa4, 0x74, 0x4f, 0xef, 0x82, 0xde, + 0x33, 0x75, 0x67, 0x41, 0xae, 0x22, 0x87, 0x56, 0x90, 0x2c, 0x08, 0xe7, 0x05, 0x07, 0x26, 0x5c, + 0x7b, 0x8e, 0xd3, 0xc7, 0x13, 0x6b, 0xb8, 0x1a, 0x78, 0x4a, 0x39, 0x2e, 0x47, 0xd8, 0x57, 0x54, + 0x87, 0xdd, 0xc2, 0x02, 0x6a, 0x30, 0xaa, 0x3f, 0x5d, 0xe8, 0xe8, 0xe2, 0x0a, 0xc2, 0x50, 0x1f, + 0x90, 0x29, 0xa0, 0xae, 0x91, 0xee, 0x50, 0x31, 0x69, 0x47, 0xb4, 0xa0, 0x23, 0x74, 0x13, 0xdf, + 0xed, 0xd0, 0x6b, 0xc7, 0xde, 0x98, 0xf0, 0x1d, 0x62, 0xfb, 0xe2, 0x12, 0xc6, 0x47, 0xc0, 0xc2, + 0x41, 0xbb, 0x23, 0xa5, 0xd9, 0x46, 0xbc, 0x94, 0x36, 0x51, 0x15, 0xa7, 0xaa, 0x93, 0xfb, 0x40, + 0x4b, 0xfb, 0xea, 0x3b, 0x45, 0xd1, 0xed, 0x9d, 0x3f, 0x8d, 0x8b, 0x54, 0xf7, 0x83, 0x09, 0x6b, + 0x0f, 0x0d, 0xc3, 0x19, 0xcc, 0x63, 0x17, 0x18, 0x8e, 0xf1, 0x7a, 0x52, 0x36, 0xf9, 0x67, 0xba, + 0x68, 0x27, 0x05, 0xa2, 0xd8, 0x64, 0x03, 0x74, 0x3f, 0xca, 0x5b, 0x1b, 0xcc, 0x02, 0xf0, 0x9b, + 0x92, 0x85, 0x0d, 0x0a, 0xd9, 0x1b, 0xd8, 0x0d, 0x57, 0x76, 0xe2, 0xe8, 0x7a, 0xab, 0x89, 0x37, + 0x05, 0x50, 0xda, 0xe2, 0x48, 0x43, 0x5a, 0x54, 0xe2, 0xae, 0xb0, 0xed, 0x42, 0x0a, 0xfd, 0xca, + 0x59, 0x9d, 0x4f, 0x46, 0x75, 0x03, 0xaf, 0xe5, 0x9e, 0x46, 0xa6, 0x9b, 0x74, 0xd9, 0xda, 0x00, + 0xeb, 0x68, 0x68, 0x7b, 0x86, 0xdb, 0xf3, 0xc8, 0x76, 0xd4, 0xde, 0x6c, 0xc3, 0x9d, 0x29, 0x5e, + 0xb2, 0xaf, 0x92, 0x64, 0x7d, 0x43, 0x2d, 0x5d, 0x2d, 0xf2, 0x62, 0x39, 0x5d, 0xc6, 0x15, 0x98, + 0x2e, 0xe6, 0x1b, 0x04, 0xa3, 0x09, 0x6c, 0x77, 0xda, 0xd9, 0x8e, 0x32, 0x83, 0xae, 0x4b, 0xf4, + 0x01, 0xd0, 0xf6, 0x97, 0x52, 0xb6, 0x86, 0xfa, 0xdd, 0xf5, 0x38, 0x1e, 0xda, 0xef, 0xbc, 0xcc, + 0x82, 0x74, 0xf6, 0xce, 0xab, 0xcd, 0xb4, 0xeb, 0x1e, 0x46, 0xb9, 0xcd, 0xd0, 0xe0, 0xb2, 0x11, + 0xf6, 0x1a, 0x9d, 0x73, 0xca, 0xa9, 0xc7, 0x39, 0xf3, 0x4f, 0xb6, 0xe8, 0xaf, 0x75, 0x8b, 0xaf, + 0xa4, 0xd7, 0x03, 0xcb, 0xfe, 0x60, 0xff, 0x81, 0xf2, 0x21, 0xfc, 0x7e, 0x1a, 0x06, 0xc5, 0xd5, + 0x6f, 0x5a, 0xf0, 0xcc, 0x49, 0x7e, 0x4a, 0xe4, 0x43, 0xd3, 0x2f, 0xa4, 0x7b, 0x73, 0xd3, 0x34, + 0x2f, 0xcb, 0xe6, 0x34, 0xaa, 0x2c, 0xe2, 0x80, 0x2e, 0xcb, 0xaf, 0x08, 0xbf, 0x51, 0xeb, 0x85, + 0xc1, 0x43, 0xe3, 0xd0, 0xd3, 0x34, 0xf2, 0x72, 0xa0, 0xcb, 0xd1, 0x67, 0x4e, 0x24, 0xd0, 0xf7, + 0x65, 0xc0, 0x1e, 0xc9, 0xa1, 0x43, 0xaa, 0xde, 0x33, 0x04, 0x17, 0xaa, 0x14, 0x74, 0xcf, 0x45, + 0xfb, 0x1d, 0x5d, 0x78, 0x11, 0x2d, 0x8c, 0x38, 0x01, 0x6f, 0xb4, 0x43, 0x09, 0x73, 0xa6, 0x6e, + 0x52, 0xfd, 0xd4, 0x9b, 0xe7, 0x6c, 0x8a, 0xaf, 0x86, 0x5d, 0x58, 0xd2, 0xa5, 0x4b, 0x9c, 0x8a, + 0x5a, 0x0a, 0xf5, 0x90, 0x51, 0x93, 0x33, 0x9c, 0xd1, 0x92, 0x8f, 0xe9, 0xb1, 0xc7, 0xeb, 0xd9, + 0x38, 0xa7, 0x04, 0x88, 0x00, 0x01, 0x95, 0x41, 0xc5, 0x92, 0x58, 0x2b, 0x98, 0x22, 0x71, 0x3a, + 0x69, 0xd1, 0xf6, 0xb0, 0x9f, 0x07, 0x2a, 0xbd, 0xbf, 0x32, 0x0c, 0x40, 0x5b, 0x24, 0xfa, 0xc2, + 0xed, 0x97, 0x00, 0x8a, 0x88, 0xa1, 0x39, 0xaa, 0x89, 0x06, 0x9a, 0x27, 0xb7, 0x42, 0x89, 0x73, + 0x74, 0x64, 0xb4, 0x55, 0x0d, 0xf1, 0x61, 0x75, 0x57, 0xcf, 0xfb, 0xa2, 0xbb, 0x40, 0x0d, 0x94, + 0x2e, 0xb4, 0x84, 0xfd, 0xf3, 0xfd, 0x7c, 0xf8, 0xc0, 0xf9, 0xdc, 0x3e, 0xe1, 0x3b, 0xe3, 0xc9, + 0x54, 0x59, 0x62, 0xc2, 0x52, 0xa0, 0xdc, 0x96, 0x42, 0x6c, 0xe3, 0xab, 0xaa, 0x41, 0xdf, 0x5d, + 0x8e, 0xac, 0xf0, 0x7a, 0xab, 0xbb, 0xf4, 0xd3, 0xf7, 0x8d, 0x2a, 0x1b, 0x86, 0x25, 0x29, 0xf2, + 0xbe, 0x77, 0x28, 0x5d, 0x46, 0x4a, 0xc7, 0xd0, 0xd1, 0x9b, 0xfe, 0xd9, 0x1c, 0x9a, 0xe3, 0x31, + 0x05, 0x6a, 0x35, 0xa5, 0x47, 0x99, 0x2b, 0x86, 0xde, 0x6e, 0xde, 0xdc, 0x93, 0x84, 0xa2, 0xb8, + 0x42, 0x0d, 0xa7, 0xf2, 0x38, 0xbe, 0x3f, 0xc5, 0x80, 0x5c, 0x8c, 0x46, 0x5c, 0x02, 0x33, 0x5a, + 0xa9, 0x3d, 0xe8, 0x25, 0x45, 0x07, 0x91, 0x77, 0xf7, 0xad, 0x7a, 0x0e, 0xfa, 0xd5, 0x19, 0x90, + 0xce, 0x0b, 0x53, 0x35, 0x63, 0xb9, 0x29, 0x26, 0x8b, 0xe7, 0x29, 0xfa, 0xa8, 0x71, 0x3c, 0x0f, + 0xcc, 0xab, 0x74, 0x49, 0x0c, 0xdb, 0x45, 0x06, 0x83, 0xaa, 0x68, 0x34, 0xc0, 0xfa, 0x11, 0xed, + 0x33, 0x77, 0xc6, 0x05, 0xf6, 0x96, 0x8c, 0xb3, 0xc0, 0xb2, 0x9d, 0x39, 0xa7, 0xe5, 0x21, 0x2b, + 0x2e, 0xbe, 0x3a, 0x86, 0x02, 0xc9, 0x01, 0xb8, 0xf7, 0xf9, 0x79, 0x85, 0x0d, 0x9d, 0x4b, 0x72, + 0x13, 0x1b, 0xad, 0xa6, 0x4f, 0xb0, 0x74, 0x98, 0x85, 0x79, 0xb3, 0x3a, 0x17, 0x12, 0x04, 0x61, + 0x9f, 0x67, 0xf1, 0x5d, 0x6b, 0xeb, 0x81, 0x9a, 0x5b, 0xc9, 0x95, 0x3e, 0x3f, 0x84, 0x9c, 0x8c, + 0x9a, 0x27, 0x71, 0x2b, 0x26, 0x23, 0x4b, 0xda, 0x1e, 0x18, 0x93, 0x79, 0x20, 0x80, 0x14, 0x5d, + 0x1d, 0x32, 0xc7, 0x25, 0x8e, 0x8a, 0xaa, 0x53, 0x61, 0x13, 0x3c, 0x0a, 0x39, 0xfc, 0x63, 0x11, + 0xd4, 0x2e, 0x7d, 0x10, 0x34, 0x28, 0x94, 0x83, 0xb1, 0x44, 0xdf, 0xaf, 0xed, 0x5c, 0x3c, 0xe4, + 0x45, 0x7a, 0x68, 0x74, 0x95, 0x25, 0x7f, 0xa6, 0xa7, 0x6f, 0x78, 0x56, 0xa0, 0x67, 0x5a, 0xe3, + 0x90, 0x72, 0x1d, 0x76, 0x06, 0xa8, 0xdf, 0x67, 0xb1, 0xbf, 0x2b, 0x87, 0xd4, 0x88, 0x55, 0xf0, + 0x1f, 0x13, 0xcc, 0x74, 0x88, 0x37, 0xf2, 0x0b, 0x36, 0x6f, 0xc4, 0xf3, 0xb4, 0xc4, 0xd7, 0x90, + 0xce, 0x8d, 0xfe, 0x08, 0xc3, 0x26, 0xbf, 0xb7, 0x50, 0xbb, 0xd6, 0x27, 0x73, 0x8c, 0xd1, 0x35, + 0x4e, 0xfa, 0xaa, 0x1b, 0x5d, 0x62, 0xfb, 0xf2, 0xbb, 0xb0, 0xf8, 0x6a, 0x51, 0x5b, 0xce, 0x4b, + 0xc8, 0x2f, 0xbe, 0xea, 0x5d, 0xcd, 0xf1, 0x9d, 0xd3, 0xae, 0x47, 0x98, 0x16, 0x02, 0x25, 0x24, + 0xd6, 0x11, 0x1b, 0xa1, 0x54, 0x4a, 0x28, 0x22, 0xa5, 0xd8, 0x92, 0xb7, 0xec, 0x19, 0xf9, 0x0a, + 0x02, 0x48, 0x87, 0xc6, 0x3e, 0xeb, 0x5b, 0x0e, 0x80, 0x15, 0x38, 0xbe, 0x2e, 0x2e, 0x09, 0x6e, + 0x9a, 0xb2, 0xc4, 0x10, 0xb8, 0xa9, 0xe5, 0xfb, 0xf8, 0x73, 0xe1, 0x85, 0x9e, 0xb7, 0x1a, 0xe8, + 0x02, 0x1a, 0xd8, 0xd2, 0xd9, 0x02, 0x82, 0xe3, 0xc8, 0x17, 0xd8, 0xc1, 0x21, 0x10, 0x74, 0x71, + 0xe7, 0x40, 0xb8, 0xb9, 0xd4, 0x91, 0xfa, 0x81, 0x3b, 0x95, 0x8d, 0x44, 0x5c, 0x51, 0x6a, 0x63, + 0xf1, 0x25, 0x19, 0xcc, 0xee, 0x3c, 0xa2, 0x09, 0xa1, 0xe3, 0xc7, 0x83, 0xd2, 0xe5, 0xdd, 0xaa, + 0xb9, 0x80, 0x50, 0xa1, 0xb2, 0x0c, 0xf3, 0xb6, 0xa3, 0x7b, 0xc3, 0x5b, 0x0c, 0x63, 0x4c, 0xf3, + 0x24, 0x1e, 0xb1, 0x50, 0x69, 0xaf, 0xef, 0x5d, 0x75, 0xcc, 0x91, 0xae, 0x50, 0x95, 0x03, 0xbb, + 0xc9, 0xb3, 0x48, 0x18, 0x88, 0x70, 0xc1, 0x6a, 0x25, 0xa6, 0x20, 0x05, 0xf8, 0x55, 0x1d, 0xf6, + 0x27, 0x5e, 0x2b, 0x15, 0xd7, 0xf2, 0x5a, 0x7c, 0xd5, 0xf8, 0xda, 0x25, 0x3a, 0x42, 0xb1, 0x4e, + 0x76, 0xb0, 0xbd, 0x14, 0xcb, 0x99, 0x2f, 0xfb, 0x54, 0xaa, 0x21, 0xf7, 0x49, 0xb0, 0x33, 0x61, + 0x91, 0xee, 0x02, 0x9a, 0xe4, 0xa0, 0xd3, 0x35, 0x0f, 0x5f, 0x39, 0xf3, 0x64, 0x91, 0x9e, 0xa8, + 0x73, 0x7a, 0x74, 0x65, 0x03, 0x16, 0x26, 0x18, 0x6c, 0xe4, 0x3b, 0x13, 0x86, 0x11, 0x27, 0x76, + 0x77, 0x33, 0x9a, 0xd3, 0xb1, 0x00, 0xb7, 0x0d, 0xd2, 0xed, 0x13, 0xdb, 0xd3, 0x43, 0xe9, 0xaa, + 0xf0, 0x1f, 0x2f, 0x64, 0xd6, 0xb3, 0xc0, 0x7a, 0xb3, 0x05, 0x26, 0x8f, 0xe6, 0x3d, 0xcb, 0x18, + 0xce, 0x7d, 0x99, 0xe3, 0x2f, 0x17, 0x0b, 0xc7, 0x98, 0xbf, 0x2f, 0x6c, 0x83, 0xa5, 0xcc, 0xd3, + 0x80, 0x5d, 0x7a, 0xf8, 0x8b, 0xfa, 0xfa, 0xfa, 0xaa, 0x45, 0x3d, 0xe7, 0x39, 0x3d, 0x43, 0x9e, + 0x63, 0x6f, 0x75, 0x0b, 0x4f, 0x9e, 0xd5, 0x3a, 0x28, 0x25, 0x62, 0x9c, 0x42, 0x13, 0xec, 0xa3, + 0xe1, 0x4e, 0x6a, 0x9f, 0x77, 0xb6, 0x7c, 0xa5, 0xb3, 0x44, 0x88, 0x60, 0x4c, 0x4b, 0xd1, 0xaa, + 0x5c, 0xbb, 0x4c, 0xfd, 0xdc, 0xe8, 0x63, 0x6b, 0x18, 0x0b, 0x5e, 0x45, 0x87, 0xa5, 0xf4, 0x55, + 0x96, 0xc1, 0xf8, 0xcc, 0x16, 0xff, 0x25, 0xc1, 0xc0, 0x01, 0xbc, 0xfe, 0x3f, 0x06, 0xef, 0xab, + 0xdc, 0x93, 0x01, 0x60, 0xfb, 0x1f, 0x04, 0x28, 0x63, 0x8f, 0x27, 0xff, 0x1c, 0xc0, 0x5e, 0x0f, + 0x01, 0xbe, 0xc4, 0x00, 0x94, 0xbe, 0x4e, 0xda, 0x8a, 0x16, 0x6d, 0xe5, 0x63, 0xd8, 0xbd, 0x5e, + 0xa5, 0x97, 0xed, 0x09, 0x32, 0x85, 0x2d, 0xa0, 0x4b, 0xf5, 0x6b, 0xa7, 0xdd, 0x6d, 0xd3, 0x76, + 0x98, 0x17, 0x63, 0x40, 0x8d, 0x18, 0xd6, 0xa8, 0xe4, 0x7b, 0x75, 0x25, 0xce, 0xbf, 0x4b, 0x9d, + 0x19, 0xc2, 0x57, 0xab, 0xdf, 0x66, 0x65, 0x5c, 0xaf, 0x86, 0xbf, 0x4c, 0x80, 0x0d, 0xc5, 0x32, + 0x10, 0x45, 0x89, 0xd1, 0x43, 0xe2, 0x5c, 0xea, 0x52, 0x9a, 0x74, 0x61, 0xf1, 0x62, 0x8f, 0xa6, + 0x03, 0x9a, 0x9b, 0x37, 0xb3, 0x5d, 0x23, 0x9b, 0xf6, 0xa9, 0x3d, 0x6a, 0xa3, 0x70, 0xe4, 0x3c, + 0xf4, 0xcb, 0x26, 0x4d, 0xac, 0x23, 0x3b, 0xc2, 0xb4, 0x72, 0x3c, 0x77, 0xe7, 0x63, 0xcc, 0x05, + 0x7e, 0x3b, 0xa1, 0x10, 0x5e, 0x93, 0x0b, 0xc1, 0xc6, 0x05, 0x3c, 0x71, 0xd2, 0x26, 0xd0, 0x28, + 0x85, 0x74, 0x0e, 0xb4, 0x16, 0x74, 0xa3, 0x48, 0xbe, 0x32, 0xef, 0xa5, 0x70, 0x6a, 0xe6, 0xb2, + 0x0a, 0xea, 0xcd, 0xcc, 0x05, 0xc8, 0x7f, 0x73, 0xe4, 0x84, 0xfa, 0x4f, 0x15, 0xa7, 0x77, 0x15, + 0x5b, 0xee, 0xec, 0x02, 0x3d, 0xba, 0xf0, 0x73, 0xee, 0x69, 0x07, 0xb8, 0x79, 0xaa, 0x40, 0x5a, + 0x87, 0x30, 0xce, 0xe3, 0x77, 0xd3, 0xfd, 0x7d, 0xb7, 0xd5, 0xc1, 0x0c, 0x21, 0x7f, 0x7a, 0x78, + 0x19, 0x5f, 0x6a, 0xb3, 0xd6, 0x33, 0x3a, 0x23, 0x3b, 0xd8, 0x7a, 0x8e, 0x29, 0x11, 0x28, 0x2d, + 0x6c, 0x67, 0xcc, 0x1a, 0xe9, 0x3a, 0x5d, 0xf8, 0xa0, 0x9d, 0xce, 0xcb, 0x9c, 0x43, 0x8e, 0x37, + 0xea, 0x23, 0x5b, 0x67, 0xdc, 0x40, 0xa2, 0x97, 0xeb, 0xe3, 0x56, 0x9c, 0xc1, 0x68, 0xd8, 0xf6, + 0x03, 0x02, 0x78, 0xfb, 0x6e, 0x59, 0x87, 0x08, 0xf9, 0xfd, 0x79, 0xbe, 0x88, 0x20, 0xb1, 0x8a, + 0xbe, 0x9c, 0x49, 0x00, 0xea, 0x70, 0x2c, 0x72, 0x18, 0x85, 0x41, 0x5f, 0xde, 0xef, 0xf5, 0xd2, + 0x58, 0xd0, 0x00, 0x19, 0x3c, 0x02, 0x06, 0xff, 0x4b, 0x7e, 0x04, 0x99, 0x76, 0xd9, 0xf3, 0xde, + 0xba, 0x06, 0x06, 0x3f, 0x98, 0xff, 0x43, 0x6a, 0xc4, 0x6a, 0xba, 0xa8, 0xa8, 0x2d, 0xbe, 0xd2, + 0x63, 0x41, 0xb6, 0xf0, 0xbb, 0xc3, 0x52, 0x09, 0x10, 0x09, 0x6c, 0x72, 0x3a, 0x0b, 0xc3, 0xd6, + 0x51, 0x36, 0xe4, 0x5c, 0xa7, 0xfa, 0xcb, 0x3b, 0x2d, 0xae, 0xa0, 0x48, 0x1c, 0x58, 0x1f, 0x0e, + 0xaf, 0xd9, 0xb9, 0x33, 0xa3, 0xe0, 0x79, 0x54, 0x07, 0xdd, 0x79, 0x8c, 0xab, 0xf3, 0x6b, 0xdb, + 0x52, 0x59, 0x71, 0x5f, 0x7f, 0xcc, 0x95, 0xca, 0xb1, 0xfa, 0x23, 0xb7, 0x25, 0xd0, 0x1e, 0x3a, + 0x50, 0x95, 0xf9, 0x86, 0x79, 0x53, 0xb2, 0x12, 0x8a, 0x36, 0xe0, 0x54, 0x54, 0x74, 0x47, 0x2c, + 0xa8, 0x3e, 0xc6, 0x1b, 0x0d, 0x7c, 0x14, 0x49, 0x21, 0xe2, 0x02, 0x0b, 0x7b, 0xc1, 0x97, 0x76, + 0xc4, 0x96, 0x66, 0x56, 0xd8, 0xdd, 0x54, 0x0c, 0x49, 0xb9, 0x8d, 0xee, 0xc8, 0x0d, 0x34, 0xc1, + 0x5d, 0x29, 0x6f, 0x2c, 0x91, 0x3d, 0xf0, 0x6c, 0xd1, 0xc6, 0xb2, 0x48, 0xf3, 0x43, 0x86, 0x96, + 0x79, 0x25, 0xdf, 0x65, 0x8c, 0xcc, 0xcc, 0xa9, 0x15, 0xf5, 0xdf, 0xad, 0x17, 0xf1, 0x3a, 0x31, + 0x93, 0xd8, 0x4f, 0x24, 0x9a, 0xa6, 0x9a, 0xb6, 0x6a, 0xaf, 0x36, 0xb2, 0xf3, 0xc9, 0xf7, 0x9c, + 0xcc, 0xae, 0x47, 0x9d, 0x2a, 0xbf, 0x1b, 0x36, 0xf3, 0x33, 0x48, 0xc1, 0x36, 0x40, 0x5c, 0x6a, + 0x2e, 0x9c, 0x8c, 0x2f, 0xde, 0x2e, 0xd9, 0x2a, 0x1c, 0x8a, 0xc9, 0xf7, 0x1c, 0x04, 0x0b, 0x06, + 0x6f, 0x1e, 0xd2, 0x4f, 0xfd, 0xcd, 0x3b, 0xc8, 0xa2, 0x3b, 0xd3, 0x5e, 0xbc, 0x87, 0xe7, 0x12, + 0xdb, 0xc8, 0x52, 0x17, 0x7d, 0xec, 0x46, 0xee, 0x8a, 0x08, 0x15, 0x84, 0xa5, 0xcf, 0xc3, 0x9e, 0x53, 0x57, 0x45, 0xaf, 0x78, 0x7c, 0x8f, 0x65, 0x3c, 0x3b, 0x27, 0x9b, 0xe3, 0xca, 0x14, 0x59, - 0x84, 0x09, 0xcd, 0x87, 0xde, 0xba, 0x5d, 0xc9, 0x7b, 0xee, 0x12, 0x8d, 0x3d, 0x4f, 0x3d, 0x1c, - 0x70, 0x7f, 0x85, 0xe3, 0x6c, 0x6e, 0xd7, 0x25, 0x1a, 0x43, 0xe2, 0x0f, 0x64, 0x07, 0xc6, 0x71, - 0xe1, 0xb5, 0xe2, 0x76, 0xc9, 0x42, 0x5b, 0x10, 0x2c, 0x7e, 0x94, 0x82, 0x7c, 0x99, 0xb3, 0x73, - 0x30, 0x79, 0x25, 0xfd, 0x0b, 0x91, 0x71, 0xf6, 0xf0, 0xcb, 0x17, 0x03, 0xbb, 0x2a, 0x8d, 0x4d, + 0x84, 0x09, 0xcd, 0x87, 0xd6, 0xba, 0x5d, 0xc9, 0x7b, 0xee, 0x12, 0x8d, 0x3d, 0x4f, 0xbd, 0x3e, + 0xe0, 0xfe, 0x0a, 0xc7, 0xd9, 0xdc, 0xae, 0x4b, 0x34, 0x86, 0xc4, 0x1f, 0xc8, 0x0e, 0x8c, 0xe3, + 0xc2, 0x83, 0xe2, 0x36, 0xc9, 0x42, 0x5b, 0x10, 0x2d, 0x7e, 0x94, 0x82, 0x7c, 0x99, 0xb3, 0x73, + 0x30, 0x79, 0x25, 0xfd, 0x0b, 0x91, 0x71, 0xf6, 0xfa, 0x97, 0x2f, 0x06, 0x76, 0x55, 0x1a, 0x41, 0x85, 0x4d, 0x20, 0xbe, 0x4a, 0x94, 0x29, 0x96, 0xd8, 0x61, 0xfe, 0xde, 0x56, 0xc6, 0x3b, 0xdc, 0xb9, 0x8a, 0xa4, 0x41, 0xe0, 0xd6, 0x64, 0xa0, 0x3a, 0x64, 0x03, 0xe4, 0x39, 0x5d, 0x7a, 0x50, 0xfc, 0x2c, 0x98, 0x16, 0xb6, 0xe4, 0x96, 0x4a, 0x43, 0x32, 0x47, 0xbc, 0xa8, 0x72, 0x54, 0x58, - 0x61, 0x56, 0x79, 0x92, 0x84, 0xb3, 0x12, 0xe8, 0x73, 0x28, 0x1a, 0xa3, 0xe2, 0xb6, 0xdf, 0xf6, - 0x0f, 0xa8, 0x46, 0x7c, 0xd4, 0xa1, 0xd2, 0xc1, 0x12, 0xc3, 0x21, 0x8d, 0x5a, 0x28, 0x53, 0x3c, + 0x61, 0x56, 0x79, 0x92, 0x84, 0xb3, 0x12, 0xe8, 0x73, 0x28, 0x1a, 0xa3, 0xe2, 0xc2, 0x6f, 0xfb, + 0x07, 0x54, 0x23, 0x3e, 0xea, 0x50, 0xe9, 0x60, 0x89, 0xe1, 0x3a, 0x8d, 0x5a, 0x28, 0x53, 0x3c, 0xe7, 0x11, 0xc9, 0xce, 0x02, 0x10, 0xe7, 0x51, 0x7f, 0xad, 0x4f, 0x82, 0x88, 0x78, 0x7b, 0x8f, 0xd4, 0x9f, 0x13, 0x7d, 0xfe, 0x52, 0xb9, 0x14, 0xeb, 0x12, 0x8a, 0x67, 0x89, 0x15, 0x8a, 0xc5, 0x7f, 0x4e, 0x28, 0xae, 0x52, 0x2e, 0xe8, 0x72, 0x16, 0x4d, 0xfc, 0xbb, 0x12, 0x34, 0x5e, 0x62, @@ -505,1887 +505,1888 @@ const uint8_t PAGE_index[] PROGMEM = { 0xd6, 0xd3, 0xbd, 0x63, 0xd4, 0x24, 0x6f, 0xf0, 0x3d, 0x73, 0x79, 0x75, 0x11, 0x77, 0xe5, 0x8e, 0xf0, 0x0f, 0x98, 0x54, 0x11, 0x2a, 0x2c, 0xd3, 0x96, 0x2b, 0x60, 0xf7, 0xc3, 0x54, 0xe2, 0x49, 0xf3, 0xd1, 0x76, 0x51, 0x8c, 0x31, 0xc3, 0x2b, 0x89, 0x3a, 0xa8, 0x3f, 0xc4, 0xfa, 0x29, 0x71, - 0x49, 0x08, 0xca, 0xcf, 0xf9, 0x27, 0xed, 0xa2, 0xcf, 0x4e, 0x90, 0x2c, 0xbf, 0x11, 0x55, 0x59, + 0x49, 0x88, 0xca, 0xcf, 0xf9, 0x27, 0xed, 0xa2, 0xcf, 0x4e, 0x90, 0x2c, 0xbf, 0x11, 0x55, 0x59, 0xd6, 0x41, 0x38, 0xb3, 0x69, 0x39, 0xdc, 0x25, 0x67, 0x6f, 0x06, 0x91, 0xab, 0x31, 0xb3, 0x00, - 0x21, 0xee, 0xa9, 0x44, 0xeb, 0x2e, 0x4d, 0x85, 0x20, 0x27, 0x2e, 0x31, 0x86, 0x10, 0x4b, 0x81, - 0x83, 0x2e, 0x7b, 0x14, 0xe5, 0xb0, 0xda, 0xce, 0x88, 0xb4, 0x3c, 0x6a, 0xcb, 0x2d, 0x32, 0xfb, - 0x67, 0x89, 0xc0, 0xae, 0x59, 0x14, 0x43, 0xe6, 0x52, 0xdc, 0x00, 0x05, 0x6a, 0xb2, 0xaa, 0xeb, - 0xb8, 0xab, 0x62, 0x82, 0x40, 0x64, 0x41, 0x33, 0xd2, 0x7b, 0xa5, 0x81, 0x6e, 0xe1, 0xd2, 0xab, - 0x4c, 0x40, 0x26, 0x6a, 0x85, 0x25, 0x14, 0x5d, 0x2f, 0x1b, 0x19, 0x2e, 0x61, 0xcf, 0xec, 0xf3, - 0x48, 0xe8, 0x88, 0xb0, 0x21, 0xa0, 0x41, 0x9e, 0x5c, 0x60, 0x11, 0x98, 0x09, 0x4a, 0x1c, 0x86, - 0xb9, 0x18, 0x46, 0x5a, 0x6e, 0x07, 0x57, 0x20, 0x7f, 0x9b, 0xa5, 0x2a, 0xc7, 0x3b, 0x76, 0x57, - 0x29, 0xee, 0xa0, 0x44, 0x05, 0x2c, 0x63, 0x11, 0xca, 0x68, 0x54, 0x2e, 0x46, 0xf8, 0x8e, 0xf3, - 0x1b, 0x2f, 0xd2, 0x8a, 0xa9, 0x22, 0x4a, 0x6e, 0x97, 0x65, 0xc0, 0xb9, 0x56, 0x63, 0xd3, 0x30, - 0x3c, 0xc5, 0x7c, 0xb8, 0x31, 0xe2, 0x8b, 0x52, 0xc1, 0xd3, 0xb7, 0xb2, 0xae, 0xbe, 0x15, 0x52, - 0xd6, 0x71, 0x9b, 0xde, 0xa7, 0x14, 0x32, 0x12, 0x9f, 0x15, 0x8e, 0xe4, 0x98, 0x2f, 0x2f, 0xdf, - 0x31, 0xdb, 0x3a, 0x9f, 0xd4, 0x72, 0xa3, 0xf1, 0x91, 0xa1, 0xa0, 0x6e, 0x9a, 0xc0, 0x39, 0x3a, - 0xcb, 0xb1, 0x7b, 0xe1, 0x2e, 0x7c, 0x34, 0x70, 0xd0, 0x07, 0x72, 0x45, 0x18, 0xa1, 0xec, 0x85, - 0x7a, 0x6f, 0xb0, 0x78, 0xcb, 0xb6, 0xbf, 0xff, 0x4f, 0x57, 0x75, 0x19, 0x37, 0x4a, 0x84, 0x9c, - 0xbc, 0x14, 0x16, 0x62, 0xf7, 0xfd, 0xc0, 0xb2, 0x70, 0x38, 0x7f, 0x04, 0x88, 0x39, 0xd5, 0x5c, - 0x58, 0x8c, 0xb2, 0xff, 0x8e, 0x91, 0xaa, 0x6a, 0xf7, 0x53, 0x01, 0x9d, 0x11, 0x97, 0xef, 0x32, - 0x59, 0xc3, 0x3c, 0x89, 0x63, 0xab, 0x93, 0x09, 0xe0, 0x3c, 0x0f, 0x87, 0x5b, 0x63, 0xb8, 0xb8, - 0x8f, 0x59, 0xc9, 0xd7, 0x3a, 0xd3, 0xd3, 0x40, 0xa3, 0xe5, 0x82, 0x46, 0x0b, 0x85, 0x90, 0x56, - 0x4c, 0x8b, 0xf9, 0xca, 0x58, 0x2d, 0x58, 0x7f, 0x90, 0x2f, 0x7c, 0xaf, 0x2b, 0xdd, 0x31, 0xe8, - 0xd8, 0xa0, 0x3e, 0x4e, 0x03, 0x4d, 0x75, 0x99, 0xc9, 0xbb, 0x7c, 0xcc, 0xb8, 0x5f, 0x1e, 0x5a, - 0x8f, 0xee, 0xc5, 0xf2, 0xc5, 0xfc, 0x20, 0x7e, 0x89, 0x2a, 0x80, 0x94, 0x0c, 0xee, 0x06, 0x3a, - 0x65, 0x5f, 0x66, 0x2a, 0x70, 0x16, 0xb0, 0x14, 0x9f, 0x4a, 0x53, 0x62, 0xcb, 0x46, 0x13, 0x61, - 0x88, 0x6c, 0xc7, 0x5e, 0x8e, 0x7a, 0x0d, 0xac, 0x68, 0x28, 0x31, 0xb1, 0x96, 0x02, 0xde, 0x97, - 0x62, 0x67, 0x15, 0xd0, 0xfa, 0x96, 0x63, 0xf6, 0xba, 0xfc, 0x79, 0x84, 0x20, 0x4e, 0xd9, 0xdf, - 0xdf, 0xe0, 0xe3, 0xa1, 0x7b, 0xd6, 0x9b, 0x1b, 0x73, 0x11, 0xbf, 0x87, 0xef, 0x71, 0x4d, 0x44, - 0x0d, 0xe4, 0x8e, 0x0a, 0xd0, 0xdd, 0x67, 0x29, 0x8d, 0x32, 0xc8, 0x58, 0x15, 0xe2, 0xe3, 0x3b, - 0x21, 0xa3, 0x08, 0x58, 0x64, 0xdc, 0x19, 0xbc, 0x68, 0x21, 0xd5, 0x15, 0xb9, 0x87, 0x46, 0x3c, - 0xbb, 0x5a, 0xae, 0xbf, 0x01, 0x10, 0xb6, 0xfd, 0x17, 0x37, 0xbb, 0xc2, 0x52, 0x7d, 0x99, 0xd5, - 0x0e, 0x02, 0xd4, 0x36, 0xdc, 0x39, 0x41, 0xa1, 0x64, 0xc2, 0xdc, 0x85, 0x95, 0xbd, 0xc4, 0x10, - 0x2a, 0x70, 0x3f, 0x46, 0x90, 0xf6, 0xf5, 0x21, 0x57, 0x41, 0x72, 0x5b, 0x85, 0x8e, 0x3c, 0xfc, - 0xf1, 0x31, 0xa6, 0x45, 0x5e, 0xe4, 0x70, 0x3e, 0x5a, 0xb6, 0xf5, 0x18, 0x8d, 0xac, 0xfd, 0x5b, - 0x86, 0x50, 0x0e, 0x86, 0x3d, 0x80, 0x20, 0x34, 0xd5, 0x79, 0xb3, 0x84, 0x0b, 0xe3, 0xce, 0x7d, - 0xe0, 0xc5, 0x5a, 0x76, 0x6c, 0x72, 0xe8, 0xce, 0x97, 0x75, 0x99, 0x45, 0x28, 0x0c, 0x81, 0xd2, - 0xf6, 0xbf, 0x97, 0xe8, 0x13, 0xce, 0x0d, 0x00, 0x7e, 0xd7, 0xbc, 0xf7, 0x1b, 0xf1, 0x62, 0x36, - 0xfc, 0x7a, 0x9f, 0x51, 0x70, 0xc3, 0xee, 0x72, 0xc6, 0x06, 0xd1, 0x26, 0xd9, 0x0c, 0xa8, 0xba, - 0x43, 0x12, 0x8c, 0x52, 0x31, 0x20, 0x5d, 0x36, 0x58, 0x6e, 0x6b, 0x51, 0xd5, 0x35, 0x1c, 0xe9, - 0x01, 0xec, 0x07, 0xc3, 0x93, 0x67, 0xf6, 0x7e, 0x7c, 0x7f, 0x80, 0x82, 0xe1, 0x14, 0x8a, 0xf3, - 0x65, 0x23, 0xc7, 0x5d, 0x39, 0x0a, 0x45, 0x8c, 0x3f, 0xa7, 0x47, 0xce, 0x56, 0xe5, 0xad, 0x48, - 0x77, 0xd9, 0x40, 0x58, 0x22, 0x92, 0xb7, 0x5d, 0xcb, 0xa1, 0xe4, 0xf1, 0x60, 0x71, 0x39, 0x8c, - 0xa5, 0xb6, 0x51, 0xfe, 0xbc, 0x97, 0x93, 0xce, 0xc4, 0x60, 0xa8, 0xe9, 0xbc, 0x0c, 0xf1, 0x22, - 0x5b, 0xff, 0x06, 0xd1, 0x03, 0x2d, 0x9f, 0x59, 0x70, 0xda, 0x9e, 0x6f, 0x91, 0xdf, 0x9f, 0x4d, - 0x9b, 0xa0, 0xc0, 0xd0, 0xd5, 0x77, 0xfe, 0x89, 0xd3, 0x17, 0xf2, 0x92, 0xad, 0xb1, 0x19, 0x39, - 0x23, 0xf3, 0xbe, 0xb2, 0x5d, 0xb4, 0xa3, 0xb6, 0x6d, 0x96, 0x1d, 0x9f, 0xe8, 0x53, 0xe4, 0x70, - 0x0b, 0x96, 0xf3, 0xcb, 0xb8, 0x60, 0x86, 0x53, 0x69, 0x69, 0x21, 0x6d, 0x33, 0x59, 0x15, 0x2b, - 0x64, 0xcb, 0xde, 0x7c, 0xad, 0x06, 0xb1, 0x6f, 0xa0, 0x57, 0x60, 0x0d, 0xc9, 0x8f, 0xf4, 0x31, - 0x68, 0x03, 0xb1, 0x4e, 0x88, 0xc0, 0xa5, 0x9a, 0x06, 0x3d, 0x6d, 0x93, 0x57, 0x34, 0x3c, 0x9f, - 0x17, 0x15, 0x8b, 0x51, 0xd4, 0x97, 0x74, 0xa2, 0x78, 0x97, 0x98, 0xc7, 0xaa, 0x0c, 0xb0, 0x5a, - 0xdf, 0x52, 0x66, 0x34, 0xf2, 0xc7, 0x0d, 0xdb, 0x88, 0x4f, 0x5e, 0xa4, 0xb5, 0xb6, 0xb6, 0xa1, - 0x7d, 0x3c, 0xee, 0x21, 0xf1, 0xcf, 0x6a, 0xd9, 0x2b, 0xd0, 0x0c, 0xa4, 0x7a, 0x29, 0xac, 0xc2, - 0xe4, 0xfd, 0x69, 0x5b, 0xa8, 0xfc, 0x2b, 0xee, 0x88, 0x95, 0xa6, 0xda, 0xce, 0xb2, 0xb9, 0xfc, - 0xe1, 0xd8, 0xbb, 0x13, 0xc2, 0x8f, 0x31, 0xa5, 0xd1, 0x74, 0x31, 0x47, 0x6d, 0x34, 0xdb, 0x39, - 0x9a, 0xc7, 0x04, 0xd6, 0xae, 0xdc, 0x95, 0x59, 0x66, 0xd8, 0xa8, 0x1a, 0xfb, 0xf9, 0x80, 0xd5, - 0x28, 0x7b, 0xc6, 0x84, 0x67, 0x6f, 0xf2, 0x11, 0xdc, 0x72, 0x9c, 0x83, 0x29, 0x14, 0xac, 0xe9, - 0xb9, 0xeb, 0x28, 0x5a, 0xe1, 0xb5, 0x94, 0x59, 0x00, 0xa4, 0x3b, 0x8f, 0xdd, 0x08, 0x5f, 0x78, - 0x21, 0xdb, 0x34, 0x0c, 0x9c, 0x49, 0x7c, 0x90, 0xbe, 0x4e, 0xe2, 0x47, 0x47, 0x53, 0x6c, 0xfb, - 0xcf, 0xba, 0x77, 0xf8, 0xe6, 0x67, 0x52, 0xa2, 0xad, 0xbf, 0x5b, 0x24, 0xae, 0x0f, 0x5c, 0x14, - 0x3c, 0x18, 0x78, 0xc1, 0xc3, 0x25, 0xfa, 0xf2, 0x87, 0x4b, 0x8c, 0x31, 0xf2, 0x63, 0x33, 0xa3, - 0xe6, 0xfe, 0xb2, 0xd7, 0x9b, 0x82, 0x1d, 0x90, 0x21, 0xb2, 0x8e, 0xbf, 0xe7, 0x47, 0x0d, 0xd7, - 0x94, 0xdc, 0x57, 0x3a, 0x8a, 0x73, 0x3e, 0x5c, 0xd2, 0x0f, 0xe1, 0x44, 0x75, 0x26, 0x26, 0x7c, - 0x73, 0xc1, 0x42, 0xe6, 0x05, 0xbf, 0xa9, 0x95, 0xe4, 0x73, 0xe3, 0xa0, 0x73, 0xde, 0xe2, 0xe6, - 0xc6, 0xe1, 0xe3, 0x64, 0x10, 0x62, 0xf0, 0xa8, 0x14, 0x96, 0xf3, 0x19, 0x78, 0x41, 0x6d, 0x8c, - 0xd9, 0x7f, 0xb7, 0x7a, 0xa4, 0x40, 0xa4, 0x3e, 0x4d, 0xf5, 0x0e, 0x64, 0x78, 0x33, 0xdf, 0x3f, - 0x7a, 0x1e, 0x67, 0xed, 0x60, 0x85, 0x77, 0x8d, 0xc1, 0x65, 0x53, 0xef, 0xef, 0xca, 0x2b, 0xe8, - 0x09, 0x16, 0x97, 0x71, 0xcc, 0x66, 0x63, 0x29, 0x56, 0x3f, 0x8e, 0x6a, 0x6f, 0x41, 0x78, 0xc7, - 0x82, 0x9e, 0xb7, 0x88, 0xc1, 0x06, 0x92, 0x97, 0xd9, 0x2d, 0xac, 0x38, 0x87, 0x0e, 0x8d, 0xc5, - 0x9d, 0x37, 0xe1, 0x0d, 0x57, 0x9c, 0xcc, 0x74, 0x07, 0x22, 0x62, 0x59, 0x79, 0xf3, 0x3e, 0x2a, - 0xf1, 0x63, 0xa4, 0x45, 0xbc, 0x4b, 0xe2, 0xbd, 0x4d, 0xa1, 0xbf, 0x49, 0xdf, 0x38, 0xdc, 0x97, - 0x1c, 0x3f, 0x4b, 0xf1, 0xdd, 0x2b, 0xea, 0xb9, 0x3b, 0x48, 0xb1, 0x79, 0x38, 0x1d, 0x6a, 0x40, - 0xd1, 0x0e, 0x19, 0x18, 0x1a, 0x8d, 0xba, 0x1d, 0x18, 0x13, 0x3d, 0xf9, 0xfe, 0xb4, 0x46, 0xb5, - 0x42, 0xa5, 0x27, 0x53, 0xb9, 0xe3, 0x2b, 0x54, 0x81, 0x8e, 0x19, 0x46, 0xba, 0x1d, 0x24, 0x79, - 0xbb, 0x17, 0xef, 0x04, 0xa9, 0xbe, 0x17, 0x14, 0xcf, 0xa2, 0x2d, 0x85, 0x60, 0x17, 0xcc, 0xed, - 0x5c, 0xf8, 0x27, 0xf6, 0xc5, 0x10, 0x1d, 0x81, 0x9f, 0x6d, 0x1e, 0x66, 0x71, 0x3a, 0x31, 0xbb, - 0xb8, 0x92, 0x3e, 0x93, 0xee, 0x7f, 0x2f, 0x6b, 0xac, 0x9e, 0x4c, 0xe1, 0x0f, 0x4f, 0x72, 0xa1, - 0x29, 0x41, 0xa2, 0x47, 0xc4, 0x20, 0xc5, 0x6e, 0xdb, 0xa1, 0x57, 0x84, 0x21, 0x64, 0x84, 0x05, - 0xdd, 0x46, 0xb4, 0x56, 0x89, 0x05, 0xc3, 0xc6, 0x69, 0x02, 0xbc, 0x72, 0xc5, 0x1d, 0xe7, 0xb4, - 0xde, 0xf8, 0xae, 0xfa, 0x2b, 0xa0, 0x4b, 0xc3, 0x02, 0x4b, 0x22, 0x20, 0x2e, 0xa7, 0x21, 0x9c, - 0x6e, 0x2a, 0xfe, 0x0d, 0x91, 0x8d, 0xef, 0x7e, 0x58, 0xf2, 0xbc, 0x17, 0x25, 0x57, 0xeb, 0x8f, - 0xdb, 0x19, 0x30, 0x8d, 0x5c, 0xa8, 0x85, 0xa8, 0x39, 0x0b, 0x16, 0xbf, 0x62, 0x79, 0x87, 0xe0, - 0x31, 0xf0, 0x2e, 0x3d, 0x00, 0xdb, 0x9c, 0x49, 0x02, 0xfe, 0x30, 0x59, 0xee, 0xbd, 0x1d, 0x9c, - 0xb6, 0xef, 0x44, 0x60, 0x06, 0x08, 0x17, 0x4c, 0xe0, 0x5d, 0x2e, 0x31, 0xf7, 0x2f, 0x9c, 0x88, - 0xcb, 0x75, 0x63, 0x2d, 0x22, 0xb1, 0x23, 0xb1, 0x05, 0x59, 0xa0, 0xc0, 0xb2, 0xe4, 0xb0, 0xdb, - 0x41, 0x00, 0x5e, 0x3a, 0xb7, 0xec, 0xa3, 0x5c, 0xdd, 0xda, 0xd2, 0x71, 0x49, 0xae, 0xcd, 0x41, - 0x72, 0xf1, 0x1f, 0x43, 0x60, 0x38, 0x45, 0x80, 0xa9, 0x2d, 0xc0, 0x02, 0x23, 0xc0, 0x30, 0x09, - 0x09, 0x4f, 0x77, 0xd0, 0x49, 0x72, 0xce, 0x05, 0x24, 0xb0, 0x96, 0x52, 0x31, 0x41, 0x42, 0xef, - 0x07, 0x08, 0x79, 0x7d, 0xf8, 0xed, 0xf3, 0x91, 0x8f, 0x39, 0x3c, 0xc7, 0x3e, 0xe7, 0x0f, 0x8e, - 0xb2, 0x9c, 0x4a, 0x10, 0x23, 0xe4, 0xde, 0x51, 0x51, 0x61, 0xc1, 0xc0, 0xac, 0xd4, 0x65, 0x67, - 0x18, 0x9e, 0x71, 0xef, 0x74, 0x92, 0x47, 0xc7, 0x87, 0x8f, 0x89, 0x0b, 0xf1, 0x67, 0x2b, 0x17, - 0xd1, 0x4d, 0x96, 0x74, 0x53, 0x7d, 0x73, 0x20, 0x5f, 0x46, 0xb7, 0xf1, 0xfc, 0x13, 0xd1, 0xab, - 0xcb, 0xe1, 0xb9, 0xde, 0xae, 0xae, 0x14, 0xdd, 0xe5, 0xe5, 0x82, 0x7f, 0x83, 0x58, 0x57, 0x29, - 0x36, 0x9a, 0x35, 0x8f, 0x1e, 0xce, 0xf7, 0xc0, 0x2e, 0x60, 0x01, 0x00, 0x90, 0x51, 0xeb, 0x9c, - 0x86, 0x5d, 0x7f, 0x16, 0xe5, 0x52, 0xbe, 0x1a, 0x3f, 0x26, 0xd9, 0x52, 0xba, 0xf4, 0xaf, 0xc8, - 0xa5, 0x1d, 0x05, 0x77, 0x54, 0xbc, 0x20, 0x14, 0x3e, 0xc0, 0x96, 0xb3, 0xe0, 0x58, 0x30, 0x0a, - 0x9d, 0xa2, 0xf1, 0x81, 0x00, 0x5c, 0x70, 0x4b, 0x44, 0x14, 0x2c, 0x43, 0x1a, 0x1c, 0x3a, 0xce, - 0x71, 0x83, 0xf3, 0x09, 0xf8, 0x0b, 0xe9, 0x5c, 0x25, 0x1e, 0x81, 0x77, 0x3a, 0x29, 0x15, 0xe2, - 0x3a, 0x29, 0x63, 0x8c, 0xcd, 0xef, 0x11, 0x38, 0x88, 0xef, 0x96, 0xe9, 0xee, 0xc5, 0xd2, 0x64, - 0xc8, 0x15, 0x28, 0xe0, 0xab, 0x0e, 0xa3, 0xda, 0xfb, 0xa0, 0x06, 0x7d, 0xe6, 0x50, 0xaa, 0x7f, - 0x38, 0x2f, 0x12, 0x5e, 0xbc, 0xe2, 0x8c, 0x2a, 0x8d, 0xce, 0x76, 0x43, 0x81, 0xb8, 0x48, 0x8c, - 0xf8, 0xf8, 0x84, 0x6c, 0x81, 0x3b, 0xfd, 0x27, 0xbc, 0x33, 0xa7, 0x96, 0x63, 0xd4, 0x43, 0xdb, - 0x37, 0x15, 0x1a, 0xaf, 0x15, 0x73, 0x7c, 0x6d, 0xee, 0xfb, 0xd2, 0x17, 0xfe, 0x7e, 0x45, 0x00, - 0x7c, 0x68, 0xeb, 0x06, 0x05, 0x43, 0x72, 0xf9, 0x66, 0x10, 0xee, 0x56, 0x90, 0xcf, 0x6c, 0x42, - 0xba, 0x5b, 0xc5, 0x92, 0xbf, 0x97, 0x14, 0x21, 0x4d, 0xcc, 0xf6, 0x9d, 0x37, 0x09, 0x57, 0x28, - 0xde, 0xfe, 0xa6, 0x6e, 0xe0, 0x8b, 0xe5, 0x46, 0xb9, 0xe2, 0x9b, 0xeb, 0xcb, 0x1a, 0xb6, 0x7f, - 0x40, 0x79, 0xca, 0xa2, 0x4f, 0xe8, 0xd5, 0xe3, 0xf4, 0x2a, 0x65, 0xff, 0x4a, 0xe5, 0x74, 0x87, - 0xdc, 0x78, 0x90, 0x06, 0xc7, 0x74, 0xfc, 0xe0, 0x3d, 0x1c, 0x5b, 0x7e, 0x27, 0x8a, 0xd7, 0xee, - 0x61, 0x9d, 0x5e, 0x7c, 0x7d, 0xe9, 0x90, 0x3d, 0x50, 0x31, 0x0c, 0x6b, 0x29, 0x8a, 0x3e, 0x76, - 0x62, 0x72, 0x00, 0x64, 0xdc, 0x0f, 0x49, 0xe0, 0x55, 0x49, 0xf0, 0x03, 0x12, 0x49, 0x50, 0xbb, - 0x75, 0xb1, 0x33, 0x16, 0x05, 0x6a, 0x23, 0xd5, 0x45, 0xf7, 0xd4, 0xad, 0xb8, 0x85, 0x37, 0x4d, - 0x03, 0x21, 0x04, 0xbc, 0x27, 0x5d, 0xb8, 0x3d, 0x4a, 0xa7, 0xd3, 0xdf, 0x33, 0x50, 0x7e, 0x4b, - 0x58, 0xfb, 0xae, 0x1b, 0xee, 0x25, 0xd1, 0xb4, 0x81, 0x48, 0x45, 0x81, 0xf6, 0x05, 0xef, 0xde, - 0xe2, 0x21, 0x6e, 0xad, 0xb5, 0x0c, 0xcb, 0x9a, 0x49, 0x5e, 0x53, 0x82, 0x4e, 0x48, 0xd7, 0x16, - 0x8e, 0x95, 0xb1, 0xd2, 0xa2, 0xed, 0x7c, 0x61, 0x2d, 0x7f, 0xcf, 0xf8, 0x0d, 0x07, 0xa0, 0xb5, - 0xfb, 0xe2, 0x96, 0xdb, 0x31, 0x4d, 0x5b, 0x73, 0xbb, 0x73, 0xef, 0xf5, 0x11, 0x69, 0x21, 0x10, - 0x13, 0xa2, 0x9b, 0xef, 0x66, 0xe3, 0x55, 0x01, 0xcb, 0xa9, 0x30, 0x0d, 0xb0, 0x1e, 0xa6, 0xb2, - 0x49, 0x2f, 0xac, 0xd1, 0x3e, 0xd8, 0x7a, 0x64, 0x4c, 0xb0, 0x3d, 0x43, 0x87, 0x61, 0xeb, 0xbc, - 0x60, 0xa3, 0xfd, 0xbe, 0x46, 0x68, 0x6a, 0x22, 0xe9, 0xd3, 0xc7, 0xe9, 0x6b, 0x00, 0x90, 0xea, - 0xbd, 0xd2, 0x5b, 0x73, 0xc4, 0xad, 0x6f, 0x5f, 0xa7, 0x44, 0xae, 0xf4, 0x36, 0x81, 0xd4, 0xea, - 0xd6, 0x77, 0x93, 0x83, 0x82, 0x9d, 0x82, 0x16, 0xb7, 0x68, 0x3b, 0xdf, 0x33, 0x26, 0x20, 0xc3, - 0xba, 0x0b, 0x60, 0x08, 0x40, 0x38, 0xd7, 0x44, 0x61, 0x2d, 0x02, 0xc0, 0xb9, 0x06, 0xbd, 0xc7, - 0xf7, 0x98, 0x53, 0x72, 0x9b, 0x2b, 0x3b, 0xc4, 0xdb, 0xbe, 0x69, 0x87, 0x6b, 0xef, 0xf5, 0xd8, - 0x9a, 0xe9, 0x9d, 0x25, 0x9c, 0x31, 0x31, 0xb6, 0xd3, 0x35, 0xec, 0x35, 0x9b, 0x2d, 0xad, 0xee, - 0x15, 0xab, 0x7e, 0x84, 0x65, 0xcb, 0x5a, 0xc6, 0xf2, 0xd4, 0x8d, 0x0c, 0x5f, 0x89, 0x6b, 0x21, - 0x2b, 0xaf, 0xee, 0xf5, 0x60, 0xff, 0x61, 0xed, 0xa3, 0x5e, 0x8f, 0x96, 0xd0, 0x3c, 0x82, 0xf5, - 0x79, 0x35, 0x9a, 0x72, 0xe9, 0x1d, 0x34, 0xb1, 0xea, 0x87, 0x83, 0x89, 0x0b, 0x4a, 0xcc, 0x78, - 0x62, 0xf2, 0xea, 0x21, 0xcd, 0x75, 0x57, 0xf7, 0x4a, 0xab, 0xae, 0x40, 0xd4, 0xeb, 0x65, 0x3d, - 0xfa, 0x4d, 0x0e, 0xf6, 0x19, 0x95, 0x8c, 0x4d, 0x1c, 0xbc, 0x32, 0xcb, 0x16, 0xd7, 0xb1, 0xe3, - 0xb5, 0x18, 0xf6, 0x7d, 0x8f, 0x99, 0x9a, 0x86, 0xde, 0x53, 0xfb, 0xf1, 0x3d, 0xf3, 0x53, 0xa8, - 0x33, 0x5c, 0x9e, 0x40, 0x9d, 0x33, 0x00, 0x3b, 0xf1, 0x45, 0x5e, 0x89, 0x72, 0xde, 0x47, 0x79, - 0x2d, 0x66, 0xde, 0x34, 0x05, 0xac, 0x1f, 0xe9, 0x9a, 0x13, 0x08, 0xb4, 0x77, 0xa6, 0xba, 0xe0, - 0xbc, 0xf6, 0xa1, 0x1f, 0x74, 0x61, 0x20, 0x77, 0x2c, 0xef, 0x3b, 0x07, 0xd8, 0x40, 0x48, 0x16, - 0xb0, 0xe5, 0xca, 0x17, 0x57, 0x9e, 0xdc, 0x77, 0x03, 0xf4, 0x61, 0x5d, 0xc0, 0xd6, 0x22, 0x94, - 0x12, 0xb8, 0x1b, 0x99, 0x78, 0x44, 0xfb, 0xda, 0x0d, 0x7e, 0x21, 0x07, 0xc5, 0xc4, 0x9a, 0xdb, - 0x5e, 0xec, 0xf5, 0x33, 0xd8, 0xac, 0x84, 0x9a, 0xac, 0x37, 0x7f, 0x19, 0x8b, 0xc5, 0xc0, 0x45, - 0x8f, 0x6b, 0xa8, 0x80, 0x3f, 0x88, 0x5b, 0xba, 0x7a, 0x51, 0x3c, 0x59, 0x1e, 0x20, 0x45, 0x3b, - 0xa7, 0x1f, 0x49, 0x80, 0x44, 0xe2, 0x40, 0x0a, 0xf6, 0x6d, 0xe8, 0xb4, 0x68, 0x5d, 0x64, 0x9f, - 0x4c, 0xb8, 0xb1, 0x14, 0x55, 0x4b, 0x38, 0x03, 0xd5, 0x86, 0x3c, 0x58, 0x29, 0xea, 0x62, 0xae, - 0x58, 0x04, 0x08, 0x41, 0x8b, 0xa9, 0x8b, 0x59, 0x51, 0xe0, 0xbf, 0x55, 0x00, 0xc6, 0xb3, 0x36, - 0x82, 0xb7, 0x6c, 0xae, 0x22, 0xc6, 0xc1, 0xe3, 0x2e, 0x2c, 0x81, 0x2c, 0xf6, 0xd6, 0x02, 0x66, - 0x4a, 0x84, 0x0b, 0x33, 0x5d, 0x02, 0xcb, 0xb2, 0xdc, 0x60, 0xc0, 0xdc, 0x1f, 0x95, 0x9e, 0x67, - 0xa2, 0x28, 0x79, 0x47, 0x42, 0x90, 0x72, 0xf8, 0x31, 0x06, 0xa5, 0x8d, 0x27, 0xd8, 0xda, 0x9a, - 0xa2, 0xbf, 0x60, 0x03, 0xac, 0xe4, 0x52, 0x03, 0x1c, 0x7c, 0xfe, 0x4d, 0x2c, 0x1e, 0xdc, 0x94, - 0x1f, 0x59, 0x2c, 0xb6, 0xc8, 0xb1, 0xb2, 0xbb, 0xc0, 0x8b, 0xfc, 0xb2, 0x87, 0x85, 0x40, 0x76, - 0xd0, 0xf5, 0xc0, 0xe2, 0x32, 0xdc, 0xaf, 0x66, 0xf8, 0x83, 0x0f, 0xeb, 0x12, 0x22, 0x16, 0x5e, - 0x89, 0xb0, 0x20, 0x3d, 0xe8, 0x22, 0x46, 0x58, 0x2a, 0xb2, 0x52, 0x45, 0x07, 0x74, 0x69, 0x3c, - 0x0f, 0xfd, 0x06, 0xbc, 0x7e, 0x82, 0x91, 0xc4, 0xa3, 0x5e, 0x87, 0x94, 0xaf, 0x42, 0x03, 0xce, - 0xbe, 0x9d, 0x21, 0x7b, 0xe3, 0x9a, 0x2f, 0x56, 0xe1, 0x09, 0x87, 0x55, 0x8e, 0x1f, 0x56, 0x19, - 0xf9, 0x9c, 0x98, 0x40, 0x5e, 0x7d, 0xe6, 0xc2, 0xb7, 0x16, 0x3f, 0xc0, 0x3e, 0x03, 0x7f, 0x78, - 0x0e, 0x08, 0x6c, 0x71, 0x21, 0x47, 0x0f, 0x18, 0xc9, 0x42, 0xb6, 0xca, 0xce, 0x42, 0x09, 0x79, - 0x76, 0x28, 0xaa, 0x27, 0x14, 0x73, 0xec, 0x30, 0x93, 0x50, 0xaa, 0x60, 0x19, 0x78, 0xa8, 0xb8, - 0xe7, 0xaf, 0x44, 0x5c, 0x91, 0x42, 0xa3, 0x89, 0xf7, 0x70, 0xf9, 0x23, 0x15, 0x1c, 0xc6, 0x16, - 0xb7, 0x0e, 0x47, 0x30, 0xf1, 0x31, 0x77, 0x79, 0xca, 0xdb, 0x8c, 0xf2, 0x6b, 0xb1, 0xa4, 0xff, - 0x2c, 0xe5, 0x5b, 0xcb, 0x94, 0x5f, 0x0b, 0x91, 0xbe, 0xc5, 0xa6, 0xd5, 0x6a, 0xca, 0x83, 0x1e, - 0xbb, 0x82, 0xf2, 0x6b, 0xde, 0x8c, 0x92, 0x63, 0x88, 0xff, 0x3f, 0xa5, 0xfd, 0x57, 0x45, 0x51, - 0x04, 0xd9, 0x25, 0x67, 0x1c, 0x35, 0xd7, 0xe2, 0xc8, 0xd9, 0x52, 0x1c, 0x37, 0xdc, 0x74, 0x15, - 0x55, 0xc7, 0xf1, 0xfc, 0xbc, 0xf6, 0x5b, 0x54, 0xbd, 0xfb, 0x88, 0xaa, 0x77, 0xff, 0x56, 0xaa, - 0x7e, 0x9e, 0x3e, 0x77, 0xd8, 0x76, 0x86, 0x5f, 0x33, 0xe2, 0xa9, 0xf4, 0xf2, 0x4f, 0xf0, 0xde, - 0xc9, 0x47, 0x54, 0x3a, 0xf9, 0x04, 0x95, 0xaa, 0x59, 0x97, 0x4e, 0xd9, 0xaa, 0xbc, 0x8a, 0x54, - 0xa5, 0x62, 0x51, 0xfe, 0x87, 0x08, 0x74, 0x42, 0xb4, 0xb1, 0xaa, 0x67, 0x6e, 0xc8, 0x10, 0x54, - 0x6f, 0x64, 0xa6, 0x95, 0xd3, 0xd3, 0x3d, 0xd8, 0x17, 0x92, 0xc9, 0xd6, 0x3b, 0xc2, 0xf2, 0xb3, - 0x54, 0xbb, 0x5e, 0x16, 0xca, 0x61, 0x61, 0x79, 0xdd, 0x6f, 0x7f, 0x44, 0x37, 0xba, 0x0a, 0x7a, - 0xdc, 0xb5, 0xf6, 0x0f, 0xac, 0x82, 0xef, 0x50, 0xec, 0x1a, 0x84, 0x24, 0x42, 0xa2, 0x13, 0x6d, - 0x15, 0xa9, 0xfa, 0xff, 0xc4, 0x9c, 0x3b, 0xf8, 0x88, 0x9b, 0x7e, 0x97, 0x2e, 0xf1, 0xb3, 0xee, - 0xef, 0xd0, 0x25, 0x8e, 0x2c, 0x6b, 0x07, 0x16, 0x21, 0xfa, 0x47, 0x94, 0x69, 0xff, 0x13, 0xab, - 0xeb, 0xce, 0x07, 0xab, 0xab, 0x4b, 0x98, 0xb5, 0xbf, 0x47, 0x99, 0x65, 0xc2, 0xac, 0xfd, 0xcf, - 0x28, 0xb3, 0x03, 0xed, 0x79, 0x74, 0x59, 0x8b, 0x12, 0x26, 0x42, 0x9f, 0xc9, 0x3b, 0xf4, 0xa1, - 0xf9, 0x03, 0xb5, 0x8d, 0xba, 0xe2, 0xa7, 0x69, 0x75, 0xff, 0x01, 0xad, 0xee, 0xff, 0x6f, 0xa2, - 0xd4, 0x3d, 0xba, 0x45, 0x56, 0x92, 0xca, 0xa7, 0x41, 0x5b, 0xd1, 0xfe, 0x8e, 0xcc, 0x59, 0xe3, - 0xc8, 0xd2, 0x88, 0x23, 0x0b, 0xaf, 0x7e, 0x2b, 0x1a, 0x86, 0x47, 0x53, 0x55, 0x3b, 0x4d, 0xf1, - 0x8c, 0x51, 0xb8, 0xe5, 0x7f, 0x44, 0xe1, 0xa6, 0xe4, 0x58, 0x7b, 0x87, 0x1e, 0x6d, 0x06, 0xcb, - 0x2a, 0x72, 0xd0, 0x13, 0x3e, 0xd1, 0x01, 0x80, 0xc4, 0xc0, 0x9a, 0x59, 0x37, 0x9b, 0x09, 0x11, - 0x95, 0x3a, 0xf8, 0x4f, 0x4c, 0xae, 0x0b, 0xf4, 0x0b, 0x79, 0x75, 0x11, 0x04, 0x99, 0x6f, 0x2b, - 0x2d, 0x1f, 0x2d, 0x25, 0x5d, 0x4e, 0xab, 0xe3, 0x70, 0x89, 0x6d, 0x59, 0x09, 0xb7, 0x7c, 0xe1, - 0x09, 0x99, 0x55, 0xad, 0x7b, 0x55, 0xb6, 0x56, 0x75, 0xb0, 0x16, 0xed, 0xa1, 0x53, 0x09, 0xf5, - 0xf0, 0x48, 0x34, 0xcd, 0x98, 0xac, 0x06, 0xdf, 0xab, 0xb1, 0xe5, 0x5b, 0x35, 0x1f, 0xa1, 0x00, - 0xd6, 0x32, 0xdf, 0xc1, 0xbd, 0x62, 0x0d, 0x05, 0x4a, 0xff, 0xf7, 0xd1, 0xa0, 0xd5, 0x3e, 0x8f, - 0x06, 0xfe, 0xc7, 0xf7, 0xc2, 0x3a, 0x78, 0xa7, 0xfd, 0x5e, 0xbc, 0xaf, 0x0c, 0x5a, 0x17, 0xf0, - 0x8c, 0x55, 0x14, 0x0f, 0x59, 0x8e, 0x0c, 0xf2, 0x8e, 0x06, 0x8d, 0xbe, 0x87, 0x02, 0x37, 0x0c, - 0x81, 0xc5, 0xf4, 0x2e, 0x0e, 0x60, 0x02, 0xf0, 0x38, 0x5c, 0xaa, 0x60, 0xd7, 0xbd, 0x83, 0x82, - 0xbc, 0x1a, 0x85, 0x38, 0xe8, 0x43, 0x6d, 0xa3, 0xe8, 0x7c, 0xa7, 0x6d, 0x19, 0xdb, 0xfe, 0x24, - 0x93, 0x62, 0xcb, 0x9d, 0x0a, 0xd7, 0x76, 0x73, 0xa6, 0xe8, 0xef, 0x13, 0x86, 0x56, 0xf8, 0xec, - 0xd8, 0xca, 0x15, 0xa4, 0x0c, 0xd7, 0x3e, 0x5d, 0x0f, 0xdf, 0x03, 0x9e, 0x55, 0xf8, 0x24, 0x87, - 0x5a, 0x7a, 0x97, 0x9f, 0xba, 0x8a, 0xde, 0x35, 0x86, 0x9f, 0xb2, 0x2e, 0x1c, 0x43, 0xa0, 0xda, - 0x2f, 0x5a, 0x16, 0x92, 0x41, 0x27, 0x26, 0x35, 0xf0, 0xa4, 0x3e, 0xc2, 0x47, 0x0d, 0x3a, 0xc9, - 0x1c, 0x59, 0xa6, 0x46, 0x56, 0x9c, 0xe1, 0xde, 0xc8, 0x66, 0xa9, 0x7b, 0x63, 0xed, 0x7a, 0xc5, - 0x9a, 0xd5, 0xb1, 0x35, 0x31, 0xec, 0x2d, 0x83, 0x14, 0x59, 0xe4, 0x3c, 0xb4, 0xc2, 0x74, 0x6a, - 0xc3, 0x2b, 0xef, 0x39, 0x63, 0xee, 0xfd, 0x96, 0x66, 0x38, 0x74, 0xa5, 0xc1, 0x8f, 0x0d, 0x6e, - 0x58, 0x54, 0xa4, 0xd2, 0xc7, 0x7e, 0xf0, 0xd8, 0x0e, 0x1e, 0x27, 0xf8, 0xb8, 0x95, 0x0d, 0xbc, - 0x46, 0x6b, 0x91, 0x5e, 0xb3, 0xb1, 0xbd, 0xc6, 0x75, 0x9a, 0x0d, 0x77, 0xba, 0xf6, 0x61, 0xaf, - 0xb9, 0x78, 0xc7, 0x20, 0x74, 0x9a, 0x0b, 0x96, 0xe3, 0x8f, 0x7a, 0xcd, 0x7d, 0x06, 0xd5, 0x35, - 0xae, 0xd7, 0xfc, 0xb2, 0x87, 0xcc, 0x77, 0x87, 0xb1, 0x8b, 0x16, 0x85, 0x81, 0xe8, 0x01, 0x72, - 0xca, 0xfc, 0x6b, 0x81, 0x5f, 0x8c, 0xea, 0xe8, 0x78, 0xb6, 0x87, 0x39, 0xbe, 0xc2, 0x7e, 0x2f, - 0xf7, 0x4e, 0xf2, 0xb0, 0xd3, 0x8b, 0xa9, 0x4e, 0x21, 0xbf, 0xa5, 0xa7, 0x53, 0x78, 0x8d, 0x75, - 0xbc, 0x55, 0x8f, 0xae, 0x51, 0x31, 0xcb, 0xe8, 0x0b, 0x99, 0x75, 0x8d, 0x89, 0x4e, 0x0b, 0xef, - 0x61, 0x44, 0x00, 0xaa, 0x18, 0xb8, 0xf3, 0xe8, 0x7d, 0x1e, 0xb3, 0x2e, 0x1a, 0x30, 0xcb, 0x61, - 0x11, 0x55, 0xa6, 0x1a, 0xd1, 0xfb, 0xce, 0xa0, 0x2e, 0x56, 0x22, 0x1c, 0x84, 0xfd, 0xe8, 0xbd, - 0xd0, 0x68, 0xb2, 0xb3, 0xbb, 0x1c, 0xb8, 0xd4, 0x91, 0x42, 0xa6, 0xae, 0xe3, 0x35, 0xec, 0xd5, - 0xf3, 0x4e, 0x43, 0x33, 0x54, 0xf2, 0x55, 0xd7, 0xd3, 0xbc, 0x44, 0xcc, 0x78, 0x9a, 0x8a, 0x0c, - 0x59, 0x0c, 0xee, 0x5a, 0xf2, 0x70, 0xae, 0x20, 0x9c, 0x0b, 0x08, 0x25, 0x5c, 0x3b, 0x4f, 0x7b, - 0x5b, 0x13, 0xa8, 0x26, 0x25, 0x40, 0x33, 0xc4, 0x71, 0x48, 0x30, 0x2c, 0x6e, 0xdb, 0x13, 0x1f, - 0x3d, 0xa6, 0xa4, 0xf0, 0x0a, 0x03, 0xbb, 0x47, 0x54, 0xe8, 0xc1, 0xac, 0x0f, 0x06, 0x80, 0x27, - 0x3b, 0x17, 0xf0, 0x53, 0x17, 0x5b, 0xf4, 0x7e, 0xf3, 0x40, 0xb3, 0x5b, 0x67, 0x17, 0x9e, 0x53, - 0xed, 0x45, 0x12, 0xdd, 0x18, 0x35, 0x14, 0x1f, 0x30, 0xff, 0x68, 0x08, 0xd2, 0xca, 0x12, 0xcb, - 0x7c, 0x12, 0x5c, 0xd0, 0xc2, 0x4f, 0x5f, 0x4c, 0xd5, 0x5d, 0x47, 0x24, 0x23, 0x71, 0xa5, 0xe7, - 0x71, 0x4b, 0x94, 0x5c, 0xfe, 0xdd, 0xeb, 0x9e, 0x57, 0x3a, 0xcb, 0x4a, 0xae, 0x45, 0x05, 0x89, - 0x07, 0x86, 0x3f, 0x18, 0xf8, 0x12, 0x26, 0x0c, 0xee, 0xeb, 0xd1, 0x6f, 0x8c, 0xe3, 0x38, 0xf9, - 0x63, 0xce, 0x02, 0x6c, 0x68, 0xcc, 0x31, 0x37, 0x2a, 0xf8, 0x85, 0xd7, 0x4b, 0x46, 0x7b, 0xea, - 0x9d, 0x5f, 0x6a, 0x88, 0xf3, 0x1f, 0x86, 0xcc, 0x3d, 0x2f, 0x08, 0x0f, 0x32, 0xdc, 0x2d, 0xb3, - 0x74, 0x3a, 0x2d, 0x2c, 0x69, 0xee, 0x14, 0x86, 0x58, 0x4d, 0x7e, 0x2d, 0xe2, 0x81, 0xf6, 0xee, - 0x68, 0x94, 0x99, 0x0b, 0xda, 0xe5, 0xf3, 0x18, 0xde, 0x66, 0x23, 0xcc, 0xf2, 0xf9, 0x15, 0x26, - 0x76, 0x07, 0x20, 0x01, 0xaf, 0xdb, 0xf4, 0xcb, 0xdd, 0xf4, 0x73, 0xdc, 0xf0, 0xa6, 0x9a, 0x35, - 0x11, 0x3f, 0xcf, 0x9d, 0xe9, 0x00, 0x29, 0xd3, 0x03, 0x67, 0x18, 0xb3, 0x35, 0x10, 0x99, 0x1a, - 0xd9, 0x8a, 0x12, 0x9d, 0x1a, 0xab, 0xc1, 0x5b, 0x5b, 0x05, 0x9f, 0xcb, 0xe2, 0xf6, 0x2e, 0x48, - 0xae, 0xba, 0x3e, 0xd2, 0x34, 0x09, 0x41, 0xd5, 0x5a, 0x0e, 0x2c, 0x38, 0x7d, 0x92, 0xb6, 0xc8, - 0xd0, 0x18, 0x93, 0x23, 0x87, 0x0c, 0x13, 0xe2, 0x44, 0x23, 0x38, 0x2a, 0x53, 0x31, 0x09, 0x2b, - 0xd2, 0xeb, 0x88, 0xd8, 0xce, 0xb1, 0x6d, 0xe8, 0x89, 0xb9, 0x35, 0x44, 0xa0, 0x6b, 0x5f, 0xe4, - 0xf0, 0x97, 0x6d, 0xf9, 0x41, 0x94, 0x72, 0x45, 0x59, 0xe2, 0x13, 0xb0, 0x3b, 0xe0, 0xd9, 0xb5, - 0x28, 0xcf, 0x85, 0x51, 0x94, 0xf3, 0xe5, 0xf7, 0x67, 0x3f, 0x3f, 0x72, 0xc8, 0x87, 0x7b, 0xf4, - 0x2e, 0xdc, 0x8f, 0x5c, 0xcd, 0xfe, 0x8d, 0xb9, 0xa2, 0xc0, 0x82, 0x98, 0x71, 0x87, 0x60, 0x44, - 0x7c, 0xcf, 0x73, 0x47, 0xd1, 0xc7, 0x8a, 0xcd, 0x8c, 0x0e, 0xf6, 0x8c, 0x1f, 0xb2, 0xe6, 0xf8, - 0xb3, 0xad, 0xf6, 0x31, 0xc5, 0xdd, 0x47, 0xc9, 0xb0, 0x32, 0xae, 0x12, 0x46, 0xff, 0x44, 0xa6, - 0x47, 0x6f, 0x4a, 0x7d, 0x08, 0x4b, 0xf2, 0xbf, 0xcb, 0x16, 0x00, 0xfc, 0x72, 0x8a, 0xbb, 0x02, - 0x30, 0x04, 0x84, 0xa1, 0xbb, 0xcb, 0xb2, 0x52, 0xb4, 0x30, 0x74, 0x7b, 0x53, 0x0c, 0x61, 0x08, - 0xe4, 0xcc, 0x87, 0x62, 0x66, 0x2d, 0x5e, 0xce, 0xb0, 0x50, 0xda, 0x77, 0xc4, 0x8c, 0x57, 0x40, - 0xea, 0x1f, 0x75, 0x13, 0x22, 0x0b, 0x9c, 0xb4, 0xc5, 0x64, 0x9a, 0x42, 0x86, 0x5f, 0x66, 0xc6, - 0xcf, 0x34, 0x43, 0x86, 0x02, 0xeb, 0x08, 0x6b, 0xa5, 0xad, 0x8d, 0xac, 0xfa, 0xfa, 0xca, 0xe2, - 0x8c, 0xaf, 0xfc, 0x1a, 0xff, 0xbb, 0xc2, 0x8b, 0x63, 0xf7, 0x95, 0x00, 0xb1, 0xfd, 0xb1, 0x84, - 0x88, 0x41, 0x74, 0x88, 0x82, 0x2b, 0x07, 0xc2, 0x81, 0xf1, 0xde, 0x6e, 0xa4, 0x27, 0x07, 0x97, - 0xc7, 0xf9, 0x9f, 0x96, 0x82, 0xfb, 0x0f, 0xff, 0x3e, 0xf9, 0x17, 0x9d, 0x4c, 0x6e, 0x30, 0x09, - 0x3f, 0x73, 0x3c, 0xca, 0x79, 0xb0, 0xb0, 0xf7, 0x00, 0xa1, 0xa0, 0xcc, 0x25, 0x5a, 0xfa, 0x1e, - 0x58, 0x2c, 0x7a, 0x93, 0x9e, 0x13, 0xa1, 0xc3, 0x96, 0xdd, 0xcf, 0x37, 0x2a, 0x9b, 0x61, 0xae, - 0xa5, 0x65, 0xda, 0xc6, 0xd4, 0x55, 0xa8, 0x7a, 0x9a, 0x53, 0x17, 0xfd, 0xa2, 0x21, 0x47, 0x07, - 0xeb, 0x60, 0x7f, 0xea, 0xf1, 0x41, 0xd8, 0x2d, 0xe1, 0x07, 0x85, 0xe2, 0xcc, 0xf4, 0xf0, 0xf6, - 0x10, 0x76, 0xc9, 0x1e, 0x80, 0x29, 0xef, 0x8a, 0xc2, 0x32, 0x90, 0x02, 0xe5, 0x02, 0x80, 0xb4, - 0x92, 0xcb, 0x95, 0x56, 0xc2, 0xb9, 0xc6, 0x03, 0x4a, 0x4b, 0xf2, 0xae, 0x88, 0xdf, 0x86, 0x72, - 0x2d, 0x0a, 0x66, 0x00, 0x65, 0x36, 0x16, 0x4a, 0x0a, 0x60, 0xb5, 0x90, 0xdb, 0x8c, 0xa8, 0x19, - 0xf1, 0x94, 0xa4, 0x25, 0x3f, 0x01, 0xe0, 0xda, 0xe7, 0xe9, 0x18, 0x00, 0x98, 0x5b, 0x01, 0x20, - 0x4c, 0x97, 0x6a, 0x29, 0xff, 0xb9, 0xa1, 0xa6, 0x05, 0xdf, 0x05, 0x70, 0xed, 0x77, 0x07, 0x3a, - 0x00, 0xf0, 0xce, 0x58, 0xcd, 0x8e, 0xd5, 0x4a, 0xbe, 0xf0, 0x39, 0x08, 0xb1, 0xe0, 0xff, 0x1a, - 0x2b, 0xee, 0xc3, 0xa2, 0xba, 0x6a, 0x98, 0xa1, 0xe7, 0xe2, 0xe7, 0xf8, 0x90, 0x96, 0xfc, 0xa7, - 0xf8, 0x30, 0xba, 0xcd, 0x47, 0x05, 0x82, 0x1c, 0xe3, 0xc1, 0x8b, 0x0a, 0x5f, 0x7e, 0x67, 0x7e, - 0x8d, 0x57, 0xb6, 0x01, 0x49, 0xf2, 0x46, 0x3c, 0x7d, 0x3b, 0x9f, 0x2b, 0x7e, 0xbc, 0xe7, 0xce, - 0x1b, 0x31, 0xee, 0x4e, 0xa1, 0x49, 0xd0, 0x01, 0xf6, 0xae, 0x1b, 0x90, 0x96, 0x71, 0x3d, 0xa4, - 0x9f, 0xd9, 0x88, 0xff, 0x47, 0xdd, 0xa4, 0x9f, 0xdc, 0x87, 0x67, 0xee, 0xc3, 0x00, 0x2f, 0xaa, - 0x03, 0x04, 0xe4, 0x0d, 0x39, 0x14, 0x5d, 0xc5, 0xc0, 0x46, 0xb4, 0xe2, 0xfc, 0x89, 0x1c, 0x79, - 0xb2, 0xbf, 0x39, 0x40, 0xfc, 0xf8, 0x50, 0x10, 0xa8, 0xce, 0x4d, 0x57, 0xba, 0x82, 0x5c, 0xfd, - 0xf4, 0x00, 0x05, 0x00, 0x1c, 0xe1, 0xe2, 0x64, 0xab, 0xce, 0x2c, 0x76, 0x7f, 0x88, 0x1b, 0x24, - 0xbf, 0xe0, 0xef, 0x06, 0x4c, 0xc8, 0xff, 0xde, 0x80, 0x89, 0x55, 0x6e, 0x6f, 0x9e, 0xea, 0x94, - 0x72, 0x59, 0x7f, 0xa0, 0x54, 0x0f, 0xb5, 0x95, 0x7b, 0xe6, 0xb4, 0x56, 0x2e, 0xba, 0x21, 0xe0, - 0x2e, 0x3d, 0xef, 0x8e, 0x58, 0x28, 0x06, 0xeb, 0x37, 0x77, 0x60, 0x9a, 0xd9, 0xd8, 0xcd, 0x29, - 0x7e, 0x13, 0x61, 0x64, 0x83, 0xc9, 0x43, 0xdd, 0x2c, 0xbf, 0x37, 0x75, 0xd6, 0xe2, 0x83, 0x1d, - 0x7e, 0xc7, 0xa1, 0xee, 0x8e, 0xc7, 0xda, 0xdf, 0x1e, 0x90, 0xc8, 0x78, 0xe4, 0x80, 0x8f, 0x19, - 0x3e, 0x42, 0xf6, 0xfd, 0x81, 0xc8, 0x47, 0x26, 0x0d, 0x37, 0x0e, 0x6b, 0xef, 0x0f, 0x84, 0x17, - 0xab, 0xf5, 0x9b, 0x42, 0xac, 0x99, 0xfb, 0x40, 0x82, 0xb9, 0xe3, 0x90, 0xfb, 0x67, 0x64, 0x98, - 0xfc, 0xbf, 0x28, 0xc1, 0x3e, 0x31, 0x10, 0x79, 0x71, 0xcb, 0x1d, 0x87, 0xdc, 0xfb, 0xe3, 0x50, - 0xf8, 0xdb, 0x13, 0x42, 0x26, 0x95, 0xbf, 0x35, 0x21, 0xf2, 0x9f, 0x9c, 0x10, 0xf9, 0xcf, 0x4c, - 0x88, 0x7c, 0xf6, 0xff, 0xea, 0xf9, 0x50, 0x08, 0xe6, 0x43, 0x7e, 0xd5, 0x38, 0xf4, 0xa6, 0x86, - 0x19, 0xd8, 0x30, 0xee, 0xa9, 0x6e, 0x6a, 0xa7, 0x85, 0xf4, 0x2a, 0xc8, 0x90, 0xa3, 0x2a, 0x95, - 0xc1, 0x29, 0xcf, 0xf1, 0xe1, 0x85, 0xae, 0x83, 0xed, 0x03, 0x89, 0x0a, 0x6d, 0xbb, 0x6b, 0xe1, - 0x56, 0x93, 0x36, 0x1c, 0x4c, 0xde, 0x60, 0xf8, 0x68, 0x97, 0x17, 0x7e, 0xe8, 0x1c, 0xa7, 0x0f, - 0x85, 0x46, 0xef, 0x82, 0x22, 0x90, 0xc8, 0x4a, 0x74, 0x43, 0xd0, 0x3d, 0xc4, 0xf5, 0x5b, 0xaa, - 0xda, 0x5a, 0x18, 0xeb, 0x6c, 0x44, 0x49, 0xfb, 0x10, 0xe9, 0x7c, 0xa1, 0xcd, 0x21, 0xbd, 0xb6, - 0x6a, 0x98, 0x3c, 0xa4, 0xb3, 0x1e, 0xd2, 0xb9, 0x95, 0x48, 0xe7, 0xc4, 0x65, 0x5d, 0x3f, 0x0e, - 0xe9, 0xdc, 0xa7, 0x91, 0x5e, 0x7b, 0x4f, 0x85, 0x06, 0xc8, 0x72, 0xbf, 0x83, 0x34, 0x33, 0x92, - 0x0b, 0x9d, 0x0f, 0x86, 0x9a, 0x47, 0x3a, 0xe7, 0x21, 0x9d, 0x8f, 0x20, 0xbd, 0x16, 0x60, 0x9d, - 0x5f, 0x1e, 0xea, 0x38, 0xa4, 0xf3, 0x2b, 0x90, 0xfe, 0x94, 0x61, 0xb3, 0xd2, 0x22, 0x46, 0x30, - 0x5a, 0xa4, 0x3f, 0xc4, 0x4b, 0xd2, 0x45, 0x3e, 0x36, 0x36, 0xc6, 0xbf, 0xc4, 0x3e, 0xc3, 0xf4, - 0xae, 0x73, 0xc9, 0xc5, 0x8b, 0x3e, 0xfb, 0xcd, 0xbe, 0xe7, 0x4a, 0x5a, 0xf2, 0x73, 0x47, 0x1c, - 0x47, 0x6b, 0x5e, 0x2b, 0x61, 0x67, 0xb5, 0x7b, 0xaa, 0x25, 0xea, 0x0f, 0x58, 0xda, 0x17, 0xe3, - 0x3c, 0x52, 0x14, 0xb2, 0xb3, 0xdd, 0xe5, 0xf8, 0x4a, 0xf7, 0x3c, 0x8c, 0xc8, 0xfb, 0xa3, 0xda, - 0x06, 0xc5, 0x3c, 0xbe, 0x64, 0x4e, 0xe4, 0xf6, 0x79, 0x22, 0x4e, 0x49, 0x17, 0x03, 0xcb, 0x86, - 0x17, 0x4e, 0x05, 0xb5, 0x00, 0x0d, 0xaa, 0x7e, 0x5e, 0x13, 0x18, 0x51, 0xc1, 0xf6, 0x91, 0x0a, - 0xf6, 0x8d, 0x3c, 0x82, 0x6c, 0xdd, 0x04, 0x97, 0x22, 0xf0, 0x53, 0xc4, 0x71, 0x3c, 0x3e, 0x61, - 0xc7, 0x4b, 0x02, 0x81, 0x4c, 0x25, 0x74, 0xa9, 0x98, 0x2e, 0xd2, 0xed, 0x37, 0x0c, 0x57, 0x93, - 0xd3, 0xd9, 0x40, 0x32, 0xa7, 0xcb, 0x30, 0x5f, 0xf5, 0xb6, 0x6d, 0x6e, 0xba, 0x44, 0x34, 0x59, - 0x50, 0x2c, 0xfd, 0x0a, 0x9c, 0x8f, 0xb5, 0xcb, 0xf3, 0xb4, 0x40, 0x54, 0xff, 0xbe, 0xb4, 0x10, - 0xea, 0x8f, 0xdc, 0x8f, 0xe6, 0xab, 0x26, 0xbe, 0xb3, 0x29, 0x84, 0xbb, 0xf7, 0x6e, 0x43, 0xef, - 0xbb, 0x00, 0x69, 0x5b, 0xf6, 0x6a, 0x0f, 0xe0, 0xda, 0xef, 0xec, 0x34, 0x50, 0x2e, 0x79, 0x67, - 0x9f, 0xc1, 0xcd, 0xff, 0xff, 0x77, 0x97, 0x81, 0x02, 0x11, 0xf5, 0xae, 0xd1, 0xc9, 0x1d, 0xde, - 0x3a, 0x60, 0xd4, 0x43, 0x36, 0x0a, 0xb8, 0x7e, 0x65, 0x50, 0x8a, 0xf9, 0x01, 0x53, 0xc7, 0x78, - 0xc7, 0xb8, 0x73, 0x2d, 0x58, 0x96, 0xc5, 0x47, 0xb1, 0x4a, 0x61, 0x6e, 0xc7, 0x83, 0x8b, 0xaa, - 0xfe, 0xc2, 0xef, 0x7d, 0x19, 0x26, 0xd1, 0x6f, 0x94, 0x76, 0x42, 0x8e, 0xd9, 0xfc, 0x8a, 0x2c, - 0x92, 0xf1, 0xc1, 0xff, 0x18, 0x4b, 0xbd, 0x22, 0xf8, 0xff, 0xe3, 0x5e, 0xb3, 0x7f, 0x2f, 0xf0, - 0xdf, 0xf5, 0xab, 0xc7, 0x77, 0xbb, 0xd4, 0xeb, 0xda, 0x52, 0xb7, 0xb9, 0xe4, 0x47, 0x6b, 0x63, - 0xec, 0xf9, 0x15, 0x77, 0xf6, 0xaf, 0x7d, 0xb2, 0xdf, 0xa5, 0x6e, 0xf3, 0xc9, 0x0f, 0x57, 0xa7, - 0xd8, 0xe3, 0x41, 0xc1, 0xec, 0x5b, 0x7d, 0xcc, 0xc1, 0xfd, 0xf0, 0x0d, 0xf3, 0x71, 0x95, 0xe9, - 0x36, 0x65, 0xb8, 0x00, 0xfd, 0xca, 0x11, 0x07, 0x14, 0x9d, 0x28, 0x7b, 0xf8, 0xd1, 0xa3, 0x1b, - 0xcc, 0xc1, 0x53, 0x77, 0xc9, 0x48, 0x7c, 0x05, 0x56, 0xf3, 0x6f, 0x7a, 0x5b, 0x3a, 0xbc, 0x11, - 0x1c, 0x56, 0x89, 0xf4, 0x84, 0x67, 0x5b, 0x7d, 0x06, 0xa6, 0x87, 0xf5, 0xdf, 0x11, 0xbc, 0x74, - 0x8f, 0xdb, 0xb0, 0xc9, 0x67, 0x4f, 0xe0, 0x08, 0xf4, 0x1a, 0x28, 0xef, 0xb8, 0xd1, 0xf2, 0x9e, - 0x93, 0x0f, 0xc4, 0xb0, 0xcf, 0x36, 0xab, 0x87, 0x7d, 0xaf, 0xfe, 0x44, 0x15, 0x05, 0x45, 0x73, - 0xdc, 0xc3, 0x04, 0xe8, 0xa5, 0xaa, 0xd1, 0xef, 0xac, 0x64, 0x4c, 0xbd, 0xbf, 0xd9, 0x56, 0x6c, - 0x52, 0x2a, 0x48, 0xea, 0xdd, 0xce, 0xc5, 0xf5, 0x44, 0x3e, 0x39, 0xe8, 0x1b, 0x0d, 0xf8, 0xef, - 0xbc, 0x75, 0x3b, 0xd8, 0xbb, 0xed, 0xc3, 0xd3, 0x8e, 0x8c, 0xef, 0xfb, 0xcd, 0xc6, 0x23, 0xfc, - 0x34, 0x8b, 0xfb, 0xa3, 0x5e, 0x11, 0x13, 0x1a, 0x0f, 0xe7, 0xad, 0x6b, 0xf9, 0xa8, 0x61, 0xd9, - 0x85, 0x4e, 0xe9, 0x0a, 0x13, 0xae, 0xf5, 0xab, 0xdb, 0xec, 0x0e, 0x94, 0x99, 0x3e, 0x4f, 0xc6, - 0x95, 0xc7, 0xab, 0x5b, 0x4c, 0x3c, 0xee, 0xec, 0x0d, 0x9e, 0x3a, 0x93, 0x46, 0x63, 0xd7, 0x3e, - 0x83, 0xd7, 0xf2, 0x6e, 0xa3, 0xd3, 0x1d, 0xbf, 0x1e, 0x60, 0x85, 0x9d, 0x76, 0xeb, 0xf6, 0x7a, - 0xe7, 0xae, 0x39, 0xb8, 0xd1, 0x1e, 0xab, 0xed, 0x5d, 0xa3, 0x31, 0xd9, 0x3d, 0x3b, 0xbf, 0x2f, - 0xeb, 0x55, 0x7d, 0xd2, 0x54, 0xcd, 0x99, 0x73, 0x75, 0x5e, 0x78, 0xaa, 0x38, 0x6d, 0xeb, 0xe6, - 0x70, 0xb8, 0x3b, 0xdc, 0x2f, 0x18, 0x97, 0x6f, 0x33, 0xad, 0x3b, 0xb9, 0x7e, 0x35, 0xb3, 0xad, - 0x56, 0x57, 0xbf, 0xcb, 0x9c, 0x8f, 0x9e, 0x46, 0x6f, 0xaf, 0xc4, 0x6a, 0xec, 0xcc, 0xa6, 0x0f, - 0x6f, 0xfa, 0xce, 0x24, 0xaf, 0xf6, 0x5f, 0xc8, 0xfe, 0x5e, 0xef, 0x61, 0x76, 0x3b, 0x1a, 0x9c, - 0x64, 0x66, 0xfb, 0x67, 0x72, 0x73, 0x7a, 0xdc, 0x9b, 0xbd, 0x3e, 0x3c, 0xed, 0x5d, 0x74, 0x4a, - 0x99, 0x96, 0x55, 0xcd, 0xb4, 0x7b, 0xe5, 0xd1, 0x51, 0xb3, 0x78, 0x3e, 0xe9, 0x96, 0x0d, 0xeb, - 0x6c, 0xdc, 0xb8, 0xa4, 0xb8, 0xec, 0x69, 0xfb, 0x37, 0x2f, 0xad, 0xd1, 0xd5, 0xb0, 0xd9, 0x04, - 0x02, 0x2f, 0x87, 0x36, 0x8f, 0x79, 0x01, 0x16, 0x89, 0xf4, 0x89, 0xdd, 0xee, 0x73, 0x8f, 0x3e, - 0xf3, 0x53, 0x90, 0xdf, 0xaa, 0xa3, 0xeb, 0x6a, 0x0f, 0xb8, 0x7b, 0xf0, 0xee, 0xa6, 0x61, 0x4c, - 0x2b, 0x11, 0x0e, 0x3c, 0xd2, 0x41, 0x4e, 0xea, 0x1d, 0x22, 0xe0, 0xde, 0xc9, 0x6f, 0xb6, 0xe5, - 0x6d, 0x89, 0xe2, 0x24, 0x4d, 0x88, 0x19, 0x66, 0x49, 0x89, 0x92, 0xf8, 0x5f, 0x36, 0xd1, 0x30, - 0x82, 0x68, 0xeb, 0x96, 0xa6, 0xd0, 0x03, 0x8a, 0xab, 0x65, 0x5c, 0xa8, 0x6d, 0xaa, 0x49, 0xe0, - 0x9c, 0x0d, 0x2b, 0x13, 0x1d, 0xbd, 0x47, 0xd5, 0x08, 0x86, 0x77, 0xdb, 0x30, 0x9c, 0x48, 0xa3, - 0x6b, 0xef, 0x01, 0x4c, 0xc3, 0x81, 0x89, 0xee, 0xaf, 0xe9, 0x7e, 0xb3, 0x41, 0x22, 0xf5, 0x93, - 0x1d, 0x10, 0x1d, 0xe3, 0xaf, 0x89, 0x60, 0xb2, 0x44, 0xe1, 0xff, 0xfd, 0x3f, 0xff, 0xcf, 0xe7, - 0x48, 0x42, 0x55, 0x25, 0x65, 0x4c, 0xdc, 0xd6, 0x0e, 0x48, 0x88, 0xe4, 0xe1, 0x1c, 0xf4, 0x90, - 0x85, 0xf5, 0xc9, 0x16, 0xe4, 0x0b, 0x7d, 0xb7, 0xf3, 0xae, 0xd7, 0x3b, 0x8f, 0x9c, 0x77, 0x02, - 0x97, 0x2d, 0x73, 0x5c, 0x27, 0xe1, 0x86, 0xbe, 0x67, 0xbc, 0x82, 0x5b, 0x21, 0x95, 0x93, 0x3e, - 0x87, 0x54, 0xe7, 0x81, 0xb8, 0x45, 0x8f, 0x8d, 0x0e, 0xc1, 0x1a, 0x14, 0x26, 0xaa, 0x33, 0x70, - 0xf3, 0x59, 0xdc, 0x87, 0x62, 0x39, 0x28, 0xd4, 0x41, 0xae, 0x55, 0x0a, 0x9b, 0x20, 0x2d, 0xf6, - 0xf7, 0xe4, 0xbd, 0x4d, 0x77, 0xd5, 0x5d, 0x13, 0xda, 0x33, 0xa1, 0xa1, 0x5a, 0x1d, 0xc3, 0x30, - 0x5e, 0x54, 0x42, 0x8f, 0x6a, 0x3b, 0x03, 0x22, 0x7c, 0x57, 0x04, 0x76, 0x26, 0x0e, 0x37, 0xc3, - 0xed, 0x5a, 0x26, 0x83, 0x9b, 0xcc, 0x69, 0x30, 0x87, 0x3b, 0xc6, 0xc8, 0xb2, 0x49, 0x1a, 0x43, - 0xa3, 0xcc, 0x0c, 0x28, 0x74, 0x8a, 0xd5, 0x27, 0x60, 0x77, 0xff, 0x97, 0x7b, 0x18, 0x69, 0x8d, - 0xc2, 0xd1, 0x31, 0x86, 0xc3, 0x91, 0x4e, 0x9d, 0x6c, 0x8a, 0xa7, 0xcc, 0x73, 0x60, 0x47, 0xa0, - 0x3e, 0x3b, 0x5b, 0x02, 0x7c, 0xed, 0x63, 0xc8, 0x11, 0xf0, 0x96, 0xd1, 0x73, 0x06, 0x4a, 0xe7, - 0x45, 0x96, 0xcb, 0xc2, 0x37, 0x61, 0x6f, 0x62, 0x4c, 0x54, 0x1e, 0x83, 0xb5, 0x30, 0x0a, 0x14, - 0x7a, 0xab, 0x9b, 0xee, 0xf7, 0x33, 0x95, 0xcb, 0xf2, 0xe4, 0x60, 0xf4, 0x7a, 0x13, 0x83, 0x01, - 0x05, 0x29, 0xb7, 0x0b, 0xed, 0x35, 0x46, 0xb8, 0xfb, 0xb7, 0x4b, 0xc6, 0x88, 0xc5, 0x1a, 0x8f, - 0x54, 0xbc, 0xc2, 0xa2, 0xb3, 0xb3, 0x8c, 0x11, 0x79, 0x1f, 0x37, 0x41, 0xde, 0x95, 0xf7, 0xab, - 0xce, 0x3e, 0x7a, 0x02, 0xdf, 0x93, 0xf7, 0x6b, 0x2b, 0x04, 0x3e, 0x7e, 0x59, 0xce, 0x45, 0x43, - 0x75, 0xc5, 0x81, 0xbd, 0x24, 0xc1, 0xf4, 0x65, 0x09, 0xe6, 0xc6, 0xcb, 0x79, 0x81, 0x16, 0x2b, - 0xbe, 0x6b, 0x2b, 0x7e, 0x56, 0x32, 0xa1, 0xc2, 0xe7, 0xa3, 0xb2, 0x2c, 0xdd, 0x56, 0x04, 0xbe, - 0xb9, 0x67, 0xb6, 0x03, 0x4b, 0xce, 0x27, 0xa3, 0x0f, 0xba, 0x5f, 0x66, 0x85, 0x0c, 0x8e, 0x2e, - 0xdc, 0xc3, 0xe0, 0x83, 0x4a, 0xcb, 0x83, 0xe3, 0xb7, 0xca, 0x17, 0xf2, 0x82, 0x4d, 0x96, 0xef, - 0x71, 0xc2, 0xe7, 0x4f, 0xf4, 0x4b, 0xe5, 0x1e, 0x9e, 0xf5, 0x8e, 0xc1, 0x23, 0x32, 0xa8, 0x83, - 0x51, 0x9f, 0x44, 0x0e, 0xef, 0x86, 0x4e, 0xd9, 0x69, 0xb0, 0xd6, 0x6c, 0x07, 0xdd, 0xac, 0xd1, - 0xdc, 0x1b, 0x43, 0x18, 0xd9, 0x44, 0x68, 0x8f, 0x54, 0x0d, 0xaf, 0xb0, 0x16, 0x58, 0xe0, 0x84, - 0x2d, 0xd1, 0x54, 0xd4, 0xba, 0xa1, 0x6b, 0x0b, 0xec, 0x21, 0xf7, 0x5a, 0x08, 0x01, 0xb4, 0x16, - 0x10, 0xec, 0xb4, 0xbe, 0xf0, 0x68, 0x8c, 0x04, 0xb0, 0x66, 0x05, 0x8b, 0x38, 0x23, 0x4b, 0x17, - 0x30, 0x98, 0x91, 0x80, 0x32, 0xa0, 0x0e, 0x09, 0x8d, 0x6e, 0xc0, 0x69, 0x85, 0x22, 0xc9, 0xc6, - 0x63, 0xed, 0x38, 0x8f, 0xf0, 0x43, 0x53, 0x30, 0xbe, 0xf4, 0x19, 0x4d, 0x1c, 0x3c, 0xf3, 0x0f, - 0x73, 0xc1, 0x02, 0xf9, 0x96, 0x5e, 0x73, 0xed, 0xe1, 0x28, 0x3f, 0x84, 0x42, 0xf5, 0x9c, 0x53, - 0xc3, 0xa2, 0xfa, 0xed, 0x85, 0x07, 0x95, 0x41, 0x63, 0xaf, 0xdf, 0x59, 0x41, 0x96, 0xeb, 0xe7, - 0xf8, 0xfa, 0x23, 0x1d, 0xef, 0x6b, 0xb0, 0xe8, 0xca, 0xe1, 0xb7, 0x13, 0x2f, 0x16, 0xd7, 0xf6, - 0x0d, 0x0b, 0xd0, 0xb7, 0x1d, 0xc1, 0x24, 0x16, 0xc6, 0x61, 0xe2, 0x74, 0x90, 0x04, 0x15, 0x4c, - 0x52, 0xfc, 0xf0, 0x25, 0xce, 0x69, 0x42, 0x6f, 0xec, 0x01, 0x3a, 0x50, 0x7a, 0x18, 0xbd, 0x9e, - 0x8b, 0x36, 0x90, 0x65, 0x88, 0x44, 0xb0, 0x41, 0xe2, 0xc1, 0x8a, 0x3a, 0x19, 0x10, 0x9d, 0x5e, - 0x1f, 0x03, 0xb4, 0x00, 0x32, 0x2f, 0xdb, 0x2d, 0x6a, 0x30, 0xec, 0x48, 0x33, 0x31, 0x66, 0x9c, - 0x97, 0xd0, 0x92, 0x93, 0xc1, 0xd8, 0xaf, 0x05, 0x83, 0xef, 0x1e, 0xf0, 0x5f, 0x1b, 0x03, 0xe9, - 0x69, 0x10, 0x92, 0x34, 0xb9, 0x97, 0xf8, 0x88, 0x20, 0x69, 0x62, 0x4b, 0x1d, 0x3c, 0x80, 0x29, - 0x51, 0x2f, 0xa6, 0x8d, 0xc1, 0x41, 0xf5, 0x2f, 0x59, 0x49, 0xb5, 0x2f, 0x74, 0xfc, 0xd5, 0xb5, - 0x06, 0x7b, 0x3d, 0x1d, 0xb3, 0x5f, 0x54, 0x22, 0xd9, 0x13, 0x9d, 0x93, 0xf8, 0x68, 0xcf, 0xf4, - 0x4e, 0x0b, 0x90, 0xf7, 0x9e, 0x6f, 0xfa, 0xda, 0x35, 0xe9, 0x40, 0x79, 0x59, 0x1a, 0x28, 0x36, - 0x8d, 0xa3, 0xc6, 0x2c, 0x78, 0xbe, 0x3e, 0xd8, 0x71, 0x9f, 0x9a, 0xcd, 0x1b, 0xd6, 0xfc, 0xee, - 0xc8, 0xaa, 0x97, 0x64, 0x78, 0xb8, 0x51, 0xac, 0x3a, 0xfe, 0xe2, 0xf9, 0x63, 0xda, 0x12, 0xe9, - 0x9f, 0xa2, 0x3d, 0x2f, 0x4b, 0xde, 0xdd, 0x6e, 0xfb, 0xfc, 0xcb, 0xa5, 0xa2, 0xc1, 0x5b, 0x07, - 0x5e, 0xf1, 0x67, 0x64, 0xe1, 0xdd, 0xb0, 0x6c, 0x31, 0xad, 0x6f, 0x64, 0x25, 0x20, 0x98, 0xc3, - 0xb4, 0x0c, 0x5a, 0xa5, 0xdf, 0x34, 0x60, 0xa8, 0xe1, 0x11, 0xd6, 0x1e, 0xff, 0xd1, 0x98, 0xc0, - 0x68, 0xde, 0xea, 0x30, 0x04, 0x5d, 0x78, 0x85, 0xae, 0xc0, 0x1a, 0xc1, 0x74, 0xf6, 0x63, 0x76, - 0x3c, 0x40, 0xd8, 0x13, 0x25, 0x03, 0x36, 0x3b, 0x81, 0x4c, 0xc7, 0xaa, 0x97, 0xa5, 0x6e, 0xbd, - 0x0b, 0x76, 0x34, 0xda, 0x2f, 0x52, 0x6f, 0x8a, 0xba, 0x6f, 0xfd, 0xc7, 0x4f, 0xc9, 0x44, 0x35, - 0xac, 0x3e, 0x5f, 0x48, 0xc4, 0x7b, 0xd0, 0xbc, 0x07, 0x33, 0x78, 0x3a, 0xaf, 0x8b, 0xa2, 0x64, - 0x1e, 0x61, 0x37, 0xe7, 0xa3, 0x21, 0xfe, 0x0c, 0x9d, 0x7a, 0x16, 0xff, 0x9e, 0xb6, 0xd8, 0xdb, - 0x29, 0xf4, 0x84, 0xc0, 0xc0, 0x0f, 0x8a, 0x44, 0xac, 0xa5, 0xda, 0x67, 0x08, 0xc3, 0x10, 0x01, - 0x18, 0x0e, 0x10, 0xeb, 0x5e, 0xbf, 0x3e, 0x77, 0xf0, 0x28, 0x74, 0x6d, 0x8e, 0xca, 0x76, 0x0d, - 0x34, 0x70, 0xeb, 0x45, 0x94, 0xda, 0xfd, 0xda, 0x7c, 0x64, 0x69, 0x35, 0x51, 0x5c, 0x48, 0x8a, - 0x66, 0x0e, 0x14, 0xc8, 0xee, 0xd7, 0xd2, 0x25, 0x09, 0x2c, 0xa0, 0x5a, 0xba, 0xb2, 0x90, 0x58, - 0x94, 0x33, 0x26, 0x42, 0x11, 0x7c, 0x1d, 0x9a, 0x35, 0x76, 0xe5, 0x93, 0x5d, 0x9b, 0xb3, 0xd3, - 0xb8, 0x35, 0x18, 0x3c, 0xab, 0xdf, 0xae, 0x41, 0x87, 0xaf, 0x23, 0x48, 0xc1, 0xf7, 0x01, 0x99, - 0xc2, 0x3b, 0x60, 0x44, 0xfd, 0x18, 0x98, 0x62, 0x76, 0x86, 0x20, 0xce, 0xb1, 0x90, 0xa9, 0x76, - 0x31, 0x01, 0x48, 0xad, 0x11, 0xbd, 0xc6, 0x86, 0xcf, 0x9c, 0x58, 0xee, 0x13, 0x99, 0x9a, 0x98, - 0xdb, 0xb1, 0x69, 0xad, 0x41, 0x57, 0x99, 0xd9, 0x98, 0x03, 0x64, 0x23, 0x3d, 0x0c, 0x2b, 0x5b, - 0x48, 0x03, 0x43, 0xab, 0xff, 0xf8, 0x21, 0x4b, 0xd9, 0xac, 0x94, 0x2b, 0x48, 0x05, 0xc9, 0x5f, - 0x6b, 0x15, 0x5f, 0xa5, 0x48, 0xf7, 0x61, 0x59, 0x1f, 0xb5, 0xd3, 0xaa, 0x91, 0x99, 0x0e, 0x15, - 0x3b, 0x0d, 0x36, 0x86, 0xf8, 0x53, 0x82, 0x3a, 0x39, 0x29, 0x5b, 0x96, 0xb2, 0x41, 0x15, 0x6a, - 0x82, 0xd8, 0x69, 0x8a, 0x7a, 0xc7, 0xc0, 0x08, 0x97, 0x34, 0xa0, 0x98, 0x29, 0x54, 0xb3, 0xf8, - 0x2f, 0x9b, 0xcb, 0xa7, 0x9f, 0x4d, 0x5a, 0x35, 0x27, 0xe7, 0x8a, 0x52, 0x5e, 0xca, 0x61, 0x13, - 0xef, 0x77, 0x48, 0x60, 0x1c, 0x40, 0x4c, 0xb9, 0x5d, 0x42, 0xbd, 0x02, 0x54, 0xc9, 0x67, 0x7f, - 0xb3, 0x9e, 0x2c, 0x95, 0x00, 0xb5, 0x8f, 0x21, 0x2d, 0x66, 0x4b, 0xf8, 0xaf, 0x5c, 0xcd, 0x79, - 0x90, 0xe2, 0x57, 0x40, 0xb2, 0x9f, 0xa8, 0x99, 0xcd, 0x56, 0xf1, 0x5f, 0xa5, 0x22, 0xcb, 0xac, - 0xea, 0x4f, 0xa9, 0xe3, 0x4c, 0xdd, 0xb0, 0x3f, 0xea, 0xe6, 0x3a, 0xb7, 0xe8, 0xfc, 0xa0, 0xcf, - 0xfb, 0x2a, 0x28, 0x09, 0xf8, 0xa9, 0x4b, 0xe0, 0xdc, 0x4d, 0x90, 0x09, 0x02, 0x55, 0x3c, 0x76, - 0x5d, 0x56, 0x56, 0xdb, 0x4e, 0x5f, 0x6b, 0x32, 0x27, 0x2b, 0xce, 0x65, 0x7b, 0xe9, 0xbd, 0x33, - 0x78, 0xf1, 0xdf, 0xb3, 0x9b, 0xbd, 0x91, 0x4e, 0x6f, 0xe4, 0x17, 0x06, 0xa0, 0x39, 0x69, 0xe4, - 0xce, 0xbf, 0xe1, 0xaa, 0x49, 0x3d, 0xb8, 0x89, 0xe4, 0xfc, 0x4b, 0x37, 0xcd, 0x14, 0xd3, 0x6f, - 0xdf, 0x74, 0x32, 0x11, 0xa0, 0x23, 0xfc, 0x88, 0xaa, 0x37, 0x53, 0xb7, 0xf2, 0x24, 0xff, 0xed, - 0x5b, 0xc8, 0x9a, 0x59, 0xf8, 0x6d, 0xda, 0x4d, 0x43, 0x4b, 0x10, 0xc9, 0x49, 0xce, 0x41, 0x79, - 0x74, 0xa7, 0xdd, 0x9e, 0x46, 0xf0, 0x27, 0x4d, 0x17, 0xd9, 0x34, 0xcc, 0xfc, 0x4b, 0x0b, 0x4c, - 0x0e, 0xcb, 0x99, 0xd1, 0x82, 0x41, 0x5d, 0x0c, 0x09, 0x23, 0xc9, 0xb9, 0xbb, 0x4e, 0x81, 0xda, - 0x46, 0xbc, 0xaa, 0x3b, 0x33, 0x9a, 0xc5, 0x15, 0xdd, 0xdb, 0x69, 0x9e, 0xaf, 0x28, 0x6c, 0xef, - 0xcc, 0x9a, 0x28, 0x88, 0x91, 0x62, 0xa1, 0x4a, 0xaa, 0xbd, 0x37, 0x34, 0xb1, 0x57, 0xbf, 0x9a, - 0x5c, 0xaf, 0xd7, 0x2f, 0xda, 0xcf, 0xf8, 0xa1, 0x90, 0x17, 0x32, 0xb3, 0x21, 0x27, 0xcd, 0xa2, - 0xa9, 0xf9, 0x4a, 0x50, 0x80, 0xab, 0x42, 0xbe, 0x7d, 0x13, 0x0d, 0x5a, 0x45, 0xac, 0xd7, 0xd1, - 0xc9, 0x67, 0xf4, 0x30, 0xed, 0x4b, 0xc3, 0xb2, 0x94, 0x59, 0x5a, 0xb5, 0xe9, 0x6f, 0xa4, 0x5b, - 0x90, 0x1d, 0xc4, 0x52, 0x3b, 0x41, 0x2b, 0x5f, 0x20, 0x4d, 0x39, 0x4f, 0x98, 0x0a, 0x68, 0xd6, - 0xfb, 0x78, 0x81, 0x14, 0x64, 0x25, 0xbf, 0x7d, 0x53, 0xd1, 0x87, 0x08, 0x52, 0x38, 0x52, 0xfd, - 0xba, 0xdf, 0xa6, 0x47, 0x50, 0xc2, 0x80, 0xd3, 0xca, 0x47, 0x3a, 0x54, 0x4d, 0x5b, 0x50, 0x37, - 0x9c, 0xd2, 0x5f, 0x4a, 0x69, 0x73, 0x4d, 0x82, 0xc0, 0x68, 0x39, 0x56, 0xd0, 0x1c, 0x9e, 0x4b, - 0x4d, 0x88, 0x29, 0x68, 0x28, 0x05, 0xe6, 0x1f, 0xfc, 0xf6, 0xdd, 0xdf, 0x76, 0x4a, 0x4c, 0x8a, - 0xa1, 0x7a, 0x78, 0xa7, 0x82, 0x5f, 0x2f, 0x9d, 0xcb, 0xe6, 0x4a, 0x7f, 0x86, 0x00, 0x49, 0xa5, - 0xcb, 0xd9, 0x62, 0xee, 0xcf, 0x10, 0x28, 0xa9, 0xb4, 0x5c, 0xce, 0x85, 0xd2, 0x78, 0x60, 0x70, - 0x5f, 0xaf, 0x75, 0x8a, 0x8d, 0x22, 0x67, 0x3b, 0x75, 0x92, 0x46, 0x19, 0x0d, 0xa9, 0xe9, 0xc9, - 0x36, 0x57, 0xc5, 0x4f, 0x4c, 0xd6, 0x80, 0xa5, 0x51, 0xf7, 0xd6, 0x89, 0xf8, 0xa5, 0x5e, 0xef, - 0xe3, 0x61, 0xbb, 0xa1, 0x39, 0x82, 0xa5, 0xa6, 0x85, 0xfc, 0x85, 0x63, 0x88, 0x56, 0x54, 0x8b, - 0xde, 0x88, 0xba, 0xc9, 0x16, 0x33, 0x18, 0x1f, 0x9e, 0x8c, 0x5e, 0x63, 0xc9, 0xed, 0x84, 0xfd, - 0xd7, 0x5f, 0xf0, 0xce, 0x38, 0x93, 0x4a, 0xd6, 0xba, 0x87, 0xa4, 0x5f, 0x68, 0x2b, 0x9b, 0x2b, - 0x6f, 0xd3, 0x83, 0x35, 0x62, 0x8d, 0x9e, 0x3f, 0x12, 0x93, 0x92, 0x57, 0x25, 0x38, 0x34, 0x52, - 0xf7, 0x96, 0xd0, 0x6f, 0xdf, 0x9c, 0x2d, 0x79, 0xfb, 0x57, 0xf4, 0x0c, 0x49, 0xb6, 0x42, 0x8f, - 0xa8, 0x0b, 0x7f, 0xcc, 0x3d, 0xea, 0xfb, 0x1d, 0x2c, 0x84, 0xbc, 0xfc, 0x2f, 0x09, 0xa9, 0x9b, - 0xf8, 0x63, 0xee, 0x2c, 0x24, 0xff, 0x4f, 0x32, 0xf9, 0xab, 0xb6, 0x54, 0x3a, 0x59, 0x4b, 0xf8, - 0x48, 0x05, 0x7d, 0x26, 0x60, 0x15, 0x8a, 0x05, 0xeb, 0x57, 0x4c, 0xb3, 0xbf, 0xa4, 0x65, 0xb4, - 0x9d, 0x18, 0x34, 0xb9, 0x51, 0x52, 0x4c, 0x53, 0x9b, 0x35, 0x7b, 0x7d, 0x90, 0x0e, 0x1d, 0x76, - 0xab, 0x87, 0xa8, 0xa1, 0x82, 0x0c, 0x93, 0xa0, 0x0e, 0xeb, 0x5b, 0x9a, 0x2e, 0x6f, 0x69, 0x5c, - 0xdd, 0x92, 0x9b, 0xa8, 0xc4, 0x10, 0x2e, 0x95, 0x76, 0x90, 0x6e, 0xf7, 0x37, 0x01, 0x4e, 0x2a, - 0x1f, 0x44, 0x7a, 0x2d, 0xad, 0x28, 0xb9, 0x65, 0x1d, 0x5a, 0x16, 0x57, 0xb7, 0x34, 0x5b, 0xb2, - 0x36, 0xbd, 0x52, 0x4e, 0xdb, 0x14, 0x25, 0x67, 0x5b, 0xc4, 0xbb, 0xb9, 0x04, 0xf6, 0x47, 0x76, - 0x9f, 0x00, 0x48, 0xfa, 0x9c, 0x73, 0x3f, 0x29, 0x4a, 0x1f, 0x60, 0x64, 0xbc, 0xaa, 0x6d, 0xb7, - 0xaa, 0x7f, 0x55, 0xac, 0x20, 0x7b, 0x55, 0xdc, 0xab, 0xd1, 0xf8, 0xc2, 0x83, 0x2e, 0x2d, 0x4c, - 0x6f, 0x86, 0x82, 0x62, 0x94, 0xb9, 0xb8, 0xec, 0xa1, 0x43, 0xb3, 0x65, 0xda, 0x6d, 0x31, 0xd4, - 0x8f, 0xb3, 0xd1, 0x16, 0xa5, 0x00, 0x57, 0x2a, 0xe8, 0xd3, 0xb0, 0x80, 0x07, 0x25, 0xec, 0xbe, - 0xc9, 0x4a, 0x50, 0x0c, 0xd9, 0x7a, 0xbb, 0xcd, 0xba, 0xa8, 0xb9, 0x3d, 0x42, 0x61, 0x15, 0x83, - 0xb1, 0xc2, 0x21, 0xdf, 0x18, 0x97, 0xe3, 0xc7, 0x7b, 0xdf, 0xaa, 0x40, 0x7d, 0x51, 0x3a, 0x6e, - 0x5d, 0x9c, 0xc3, 0xb8, 0xe1, 0xa7, 0x91, 0xd5, 0xde, 0x2c, 0x01, 0xcd, 0x26, 0x93, 0xbe, 0xf6, - 0x01, 0xc2, 0xab, 0x6b, 0x7f, 0xfb, 0xc6, 0x1c, 0x39, 0xb7, 0x47, 0xbc, 0x5c, 0xf6, 0x8e, 0x57, - 0xcc, 0x7d, 0x40, 0x98, 0x1e, 0x91, 0x06, 0x65, 0xa1, 0xfe, 0x25, 0x26, 0x51, 0x0a, 0x46, 0x3c, - 0xd4, 0x8a, 0x7b, 0xa5, 0xcb, 0x3c, 0x3c, 0xe8, 0xf5, 0x55, 0xdc, 0xb0, 0xcd, 0x74, 0x9d, 0x9a, - 0x9b, 0xbf, 0xaa, 0x55, 0x2f, 0xda, 0x69, 0x1e, 0xe1, 0x04, 0x0e, 0x34, 0x96, 0xb0, 0xaa, 0x01, - 0x7a, 0xe8, 0x66, 0x09, 0x39, 0xe0, 0xfd, 0x65, 0xe4, 0x20, 0x31, 0xb6, 0x15, 0x97, 0xaf, 0x41, - 0x10, 0x11, 0x90, 0x0b, 0x3c, 0x9f, 0x8a, 0x5f, 0x09, 0xe1, 0xf9, 0xa1, 0xb3, 0xd1, 0xc3, 0x44, - 0x7a, 0x4a, 0x90, 0x4b, 0xcc, 0x61, 0x62, 0xb7, 0xdb, 0x0d, 0x25, 0xe6, 0x31, 0xb1, 0xdd, 0x6e, - 0x87, 0x12, 0x0b, 0x98, 0xa8, 0x28, 0x4a, 0x28, 0xb1, 0x88, 0x89, 0xd5, 0x6a, 0x35, 0x94, 0x58, - 0x8a, 0x4b, 0xac, 0x60, 0x62, 0xa5, 0x52, 0x09, 0x25, 0xb6, 0x31, 0xb1, 0x50, 0x28, 0x84, 0x12, - 0x3b, 0x98, 0x98, 0xcf, 0xe7, 0x43, 0x89, 0xe8, 0xe3, 0xfb, 0x9a, 0xcd, 0x66, 0x43, 0x89, 0x5d, - 0x4c, 0xcc, 0xe5, 0x72, 0xa1, 0x44, 0x8b, 0xc2, 0x99, 0x0b, 0x97, 0xec, 0xd3, 0x92, 0x4a, 0x38, - 0x51, 0xa3, 0x89, 0xa5, 0x4e, 0x28, 0xd1, 0x80, 0x44, 0xfa, 0x7d, 0xd5, 0x9c, 0x5c, 0x90, 0x84, - 0xe0, 0x8f, 0x9c, 0xae, 0x26, 0x43, 0x05, 0xed, 0xb6, 0x4b, 0xcf, 0x7c, 0x24, 0x79, 0xe0, 0xa6, - 0x97, 0x42, 0xe9, 0x4e, 0x7b, 0x45, 0xc3, 0xec, 0x02, 0x50, 0x98, 0x92, 0xc9, 0x64, 0xa4, 0x82, - 0xe2, 0xd5, 0xc8, 0x96, 0x65, 0x49, 0x08, 0xfe, 0xac, 0xae, 0x31, 0xf8, 0x54, 0x1f, 0x34, 0x8c, - 0x9d, 0x7a, 0xdc, 0x93, 0xae, 0x38, 0x65, 0x61, 0x9e, 0xb8, 0x17, 0x80, 0x77, 0xe3, 0x27, 0xe4, - 0x74, 0x05, 0xca, 0xd5, 0xa2, 0x0c, 0x15, 0x25, 0x3f, 0x65, 0x28, 0xb6, 0xb6, 0x44, 0x18, 0x2a, - 0x3a, 0x26, 0xf9, 0xb8, 0x21, 0x2d, 0xc4, 0x0d, 0x3e, 0x65, 0xa8, 0x62, 0xb1, 0xb8, 0xcc, 0x50, - 0xa5, 0x52, 0xe9, 0x93, 0x0c, 0x15, 0xe5, 0x5c, 0xca, 0x50, 0x9d, 0x4e, 0x67, 0x99, 0xa1, 0xa2, - 0x53, 0xa4, 0x1b, 0x37, 0x1b, 0x28, 0x43, 0x91, 0x42, 0x6e, 0x99, 0xa1, 0x0a, 0x24, 0xb7, 0xcc, - 0x50, 0x85, 0x8a, 0x12, 0xcf, 0x50, 0x79, 0x18, 0x08, 0xef, 0xdf, 0x0a, 0x6e, 0x02, 0x62, 0xc6, - 0x72, 0x13, 0xa4, 0x17, 0x57, 0x70, 0x13, 0xdf, 0xea, 0x67, 0x58, 0x49, 0xce, 0x01, 0x17, 0xf9, - 0x7f, 0x3e, 0xc1, 0x4a, 0xc5, 0xac, 0x24, 0x78, 0xff, 0x3e, 0xcb, 0x47, 0x23, 0x1d, 0xd6, 0x01, - 0x91, 0x93, 0x53, 0xe8, 0x67, 0xdb, 0xe9, 0x07, 0x0a, 0x13, 0xad, 0xda, 0xee, 0x63, 0x9f, 0xf5, - 0x6e, 0xba, 0x63, 0x11, 0x10, 0xfe, 0xae, 0x2a, 0x4c, 0x9b, 0x14, 0x93, 0x9b, 0x6a, 0x2f, 0x61, - 0xa7, 0x71, 0xef, 0x87, 0x48, 0x22, 0xc8, 0x68, 0xf2, 0xd7, 0x5f, 0xbe, 0x81, 0x02, 0x66, 0xa4, - 0x3d, 0x1a, 0xa6, 0xcd, 0x81, 0xe1, 0x18, 0x76, 0x26, 0x5b, 0xcd, 0xc9, 0x99, 0xac, 0x5c, 0x91, - 0x51, 0x92, 0x43, 0x0f, 0xb8, 0x3c, 0xeb, 0x75, 0xcf, 0x08, 0xd8, 0xec, 0x19, 0x56, 0x82, 0xba, - 0x28, 0x04, 0xd0, 0x7a, 0xc1, 0x14, 0xfc, 0xeb, 0xaf, 0x1f, 0x3f, 0x59, 0x21, 0xa5, 0x0e, 0xea, - 0xa6, 0xf6, 0x43, 0xfe, 0xb9, 0xad, 0xa3, 0x2a, 0xbe, 0x0f, 0x86, 0xcc, 0x23, 0xe8, 0x3f, 0x89, - 0x64, 0x0d, 0x13, 0x25, 0xc3, 0x6f, 0x23, 0xa1, 0x48, 0xda, 0x8f, 0xec, 0x4f, 0xf8, 0x93, 0xfb, - 0x99, 0x94, 0xd4, 0x20, 0xdd, 0x00, 0x30, 0x71, 0xc9, 0xa3, 0x2f, 0x2a, 0x36, 0x42, 0x9f, 0x92, - 0x29, 0xed, 0x47, 0x1e, 0x4a, 0xea, 0x5b, 0x75, 0x03, 0xcc, 0x91, 0xef, 0x75, 0x15, 0x94, 0x1d, - 0x86, 0x8c, 0xf6, 0xa3, 0xf0, 0x33, 0xb9, 0x58, 0xd8, 0x78, 0xe4, 0x65, 0x6f, 0x0c, 0xe8, 0xe2, - 0x1e, 0x08, 0xba, 0xe1, 0x13, 0xd4, 0x17, 0x09, 0xfa, 0x45, 0x7d, 0xcb, 0xc5, 0x80, 0xd3, 0xb4, - 0xa3, 0x6b, 0x75, 0xbb, 0x0f, 0x1d, 0x53, 0x75, 0x5c, 0x07, 0xa5, 0x39, 0xa1, 0xd7, 0xd3, 0xa5, - 0xa4, 0xe4, 0x19, 0x2b, 0xee, 0x75, 0x8d, 0x75, 0xdd, 0x4f, 0x09, 0x54, 0xab, 0x23, 0x34, 0xed, - 0xea, 0xbf, 0xc0, 0x82, 0x07, 0xfd, 0x8a, 0x42, 0x44, 0x35, 0x2b, 0x66, 0xc4, 0xd1, 0x41, 0x09, - 0x76, 0x10, 0x93, 0x21, 0x5d, 0x4b, 0xf4, 0x2e, 0x2a, 0xee, 0x80, 0x76, 0x1d, 0x19, 0xd9, 0xd6, - 0x8b, 0xaa, 0x37, 0x5b, 0x2d, 0x1c, 0x5e, 0x18, 0xb5, 0x2f, 0xcc, 0x26, 0x62, 0x34, 0x76, 0xea, - 0x11, 0x33, 0xe7, 0x46, 0xe9, 0x53, 0x23, 0x07, 0x1d, 0xe7, 0x30, 0xcf, 0x90, 0xd0, 0x31, 0x2c, - 0x80, 0x7b, 0xb2, 0xc0, 0x03, 0x76, 0x5a, 0xed, 0xc2, 0xf8, 0xc3, 0xfa, 0x47, 0x34, 0xdc, 0x5d, - 0x9f, 0xe1, 0x27, 0xd0, 0x09, 0xb0, 0x16, 0x24, 0x05, 0xc1, 0x0a, 0x19, 0xb0, 0xfd, 0x31, 0xe5, - 0x9d, 0xd3, 0x71, 0x69, 0x7a, 0x3c, 0xce, 0x06, 0x38, 0xd3, 0x6e, 0x61, 0x7a, 0x1f, 0x6c, 0x5d, - 0xc4, 0xa3, 0x9e, 0x40, 0x27, 0xbc, 0x81, 0x52, 0xef, 0x36, 0x07, 0xaa, 0xd6, 0x4d, 0xd8, 0x30, - 0x3e, 0x3e, 0x7a, 0x86, 0x8e, 0x7e, 0x54, 0x58, 0xa6, 0x31, 0x14, 0x9e, 0xd4, 0x80, 0xc5, 0xa2, - 0x67, 0xf2, 0x4c, 0xcb, 0xc0, 0x23, 0xae, 0x1a, 0x8c, 0x03, 0xf5, 0x6f, 0xc9, 0x52, 0x82, 0x76, - 0x5a, 0x0f, 0xe9, 0x45, 0x7d, 0x4f, 0x2f, 0x82, 0xd4, 0x23, 0x13, 0xd4, 0x54, 0x50, 0x66, 0x59, - 0x31, 0xa8, 0x0f, 0x16, 0x5e, 0x42, 0x44, 0x83, 0x99, 0x5e, 0x90, 0x97, 0x16, 0x2e, 0x35, 0xfc, - 0x4a, 0xbc, 0x40, 0xaf, 0xd5, 0x66, 0x57, 0x6d, 0x1e, 0x5d, 0x7e, 0x11, 0x57, 0x69, 0x5a, 0xac, - 0x45, 0x89, 0xb6, 0x96, 0x4c, 0x7a, 0xaa, 0x6c, 0x7c, 0xef, 0x81, 0x56, 0x96, 0x44, 0xcd, 0x16, - 0x19, 0xab, 0x0e, 0x76, 0x5e, 0x9f, 0xec, 0x12, 0x62, 0xe2, 0x1b, 0x53, 0xd6, 0x28, 0xeb, 0xe1, - 0x18, 0xe2, 0x61, 0x3d, 0x34, 0x7e, 0x6f, 0x1d, 0x55, 0x03, 0x55, 0x2f, 0xc1, 0x36, 0x7d, 0xea, - 0x2b, 0x5a, 0x37, 0x3b, 0x43, 0x11, 0x10, 0xfb, 0x92, 0x39, 0x33, 0xda, 0x6a, 0x06, 0x4c, 0x1a, - 0xdb, 0x49, 0xe8, 0xca, 0x58, 0xed, 0x2b, 0x50, 0x32, 0x3d, 0xb2, 0x89, 0xd5, 0xe8, 0x03, 0x52, - 0xc0, 0xb2, 0xc8, 0x6f, 0xef, 0xb6, 0x02, 0x65, 0xa2, 0x97, 0x0e, 0x72, 0x0a, 0x50, 0xa0, 0x9a, - 0x52, 0x7f, 0xcf, 0x76, 0x8f, 0x38, 0x9d, 0x41, 0xe2, 0xbd, 0xa1, 0x1f, 0xe0, 0xbd, 0xf2, 0x50, - 0x34, 0xfd, 0x0c, 0xc6, 0xbf, 0x28, 0xcd, 0x87, 0xc4, 0x19, 0x18, 0xdd, 0x9a, 0x08, 0xbd, 0x02, - 0x3b, 0xe3, 0xe4, 0xd2, 0x13, 0x30, 0xf5, 0x08, 0xcd, 0x4f, 0x24, 0x83, 0x94, 0x79, 0xd4, 0x48, - 0x06, 0xaa, 0xa1, 0x43, 0x09, 0xcc, 0xdd, 0x64, 0x1a, 0x58, 0x00, 0xfa, 0xc5, 0x52, 0xe8, 0x3e, - 0x35, 0x60, 0xb2, 0x68, 0x46, 0x3f, 0x21, 0x9e, 0x1b, 0x82, 0x82, 0xa5, 0x5d, 0x89, 0x43, 0x3b, - 0x46, 0x8f, 0x6c, 0x08, 0x88, 0xb4, 0xb0, 0xcb, 0x3e, 0x2e, 0x67, 0xd3, 0x39, 0x44, 0xba, 0x00, - 0x28, 0x34, 0xd9, 0x53, 0x75, 0xe0, 0xc9, 0x59, 0x22, 0x91, 0x84, 0x56, 0x5d, 0xb1, 0xc9, 0xa9, - 0xa7, 0xfd, 0x34, 0xcc, 0x5d, 0x28, 0x57, 0x5b, 0x95, 0x15, 0x90, 0x06, 0x18, 0xfd, 0xdb, 0x37, - 0x7e, 0x7a, 0x8a, 0xc8, 0xff, 0x4d, 0x60, 0xff, 0xa4, 0x14, 0x3a, 0x86, 0x2f, 0xb9, 0xf1, 0xa8, - 0x6e, 0x28, 0x04, 0xa6, 0x30, 0x6f, 0xe1, 0x6a, 0x1e, 0xba, 0x1c, 0x3a, 0x94, 0x1f, 0xb9, 0x93, - 0xb6, 0x3e, 0xc0, 0xfb, 0x0f, 0xe8, 0xe5, 0xe1, 0xdf, 0xd9, 0x33, 0x77, 0xba, 0xd3, 0xcf, 0xe3, - 0x4f, 0x74, 0xb2, 0xd4, 0xb0, 0x8f, 0x26, 0xb9, 0x90, 0x30, 0xd2, 0x61, 0x41, 0xff, 0xc7, 0x78, - 0xd1, 0x65, 0xc5, 0x6e, 0x8c, 0x04, 0x0d, 0x2e, 0x3e, 0x67, 0x81, 0x7d, 0xa2, 0x14, 0xef, 0x2e, - 0x92, 0xbe, 0x64, 0xdd, 0xd5, 0xab, 0x33, 0xf6, 0xc5, 0x9c, 0x27, 0x36, 0xe5, 0x4d, 0x4f, 0x6e, - 0x01, 0x20, 0xd6, 0xac, 0x45, 0x29, 0x65, 0x58, 0x0d, 0x4d, 0x4b, 0xac, 0x73, 0xb7, 0x0f, 0xbb, - 0x91, 0xb9, 0x3f, 0xd7, 0x93, 0xfe, 0x0a, 0x63, 0xe3, 0x78, 0x3b, 0xc9, 0x38, 0xd9, 0xee, 0x18, - 0xa3, 0xce, 0x00, 0x1d, 0xee, 0x68, 0x94, 0x51, 0xbe, 0xde, 0xa1, 0x71, 0xb8, 0x30, 0x12, 0xab, - 0x4a, 0x83, 0x3c, 0x8a, 0x94, 0x0d, 0xa4, 0x52, 0x64, 0xc0, 0x88, 0x27, 0x6b, 0x99, 0x8b, 0x29, - 0x08, 0x6a, 0x89, 0x81, 0x6d, 0xf9, 0x14, 0xa5, 0xd2, 0xc1, 0xcf, 0x3d, 0x40, 0x59, 0xe6, 0x8c, - 0xfe, 0xeb, 0x2f, 0xe7, 0x07, 0xf9, 0x19, 0x3d, 0x9c, 0xe9, 0x15, 0xe2, 0x24, 0xa3, 0x1b, 0x26, - 0x43, 0x24, 0xa7, 0x0e, 0xf4, 0x9c, 0xb3, 0xda, 0x60, 0xe0, 0x3b, 0x20, 0xda, 0xd4, 0x16, 0x86, - 0x0d, 0x83, 0xe8, 0xfe, 0xaf, 0x66, 0xcc, 0x31, 0x49, 0x7b, 0x68, 0x18, 0x0e, 0x28, 0x18, 0x38, - 0x0c, 0x50, 0x60, 0xd9, 0xc7, 0x06, 0x3a, 0x88, 0x2a, 0x4a, 0xac, 0x91, 0x25, 0xf6, 0x04, 0xb1, - 0xb4, 0xa0, 0xe8, 0x32, 0x66, 0x0a, 0x7c, 0x83, 0xf8, 0x25, 0x05, 0x16, 0x1d, 0xe3, 0xc1, 0xe4, - 0xc0, 0x64, 0x65, 0xe3, 0xec, 0xc6, 0xdb, 0x24, 0x97, 0x56, 0xc4, 0x66, 0x78, 0x75, 0xb3, 0x40, - 0xb1, 0xa1, 0x0c, 0x60, 0x33, 0x1d, 0x85, 0xc5, 0xe1, 0xd0, 0x95, 0x08, 0x3f, 0xc2, 0x7a, 0x78, - 0x73, 0x76, 0x4a, 0x17, 0xa4, 0x30, 0x79, 0xc0, 0xce, 0x26, 0x18, 0x9b, 0x03, 0x36, 0x23, 0x02, - 0x01, 0x53, 0x83, 0xc6, 0xeb, 0x78, 0xec, 0xee, 0x42, 0x8a, 0x83, 0xcd, 0xba, 0x57, 0x74, 0x75, - 0x48, 0x57, 0x0f, 0xd7, 0x27, 0x24, 0xb9, 0x25, 0xea, 0xd1, 0x39, 0x12, 0x37, 0x5e, 0xac, 0x87, - 0x85, 0x94, 0xab, 0xc2, 0xcc, 0x90, 0x00, 0x45, 0x5e, 0xf6, 0xf0, 0x5c, 0x82, 0x05, 0xb9, 0x90, - 0xa1, 0xe4, 0x3c, 0x20, 0x90, 0xd8, 0x04, 0x82, 0x10, 0xd7, 0x12, 0x35, 0x04, 0x6a, 0xe8, 0x0a, - 0x3d, 0x05, 0x96, 0xa0, 0xee, 0x17, 0x18, 0x17, 0x99, 0x37, 0x31, 0x23, 0x91, 0x47, 0xa4, 0x5e, - 0x24, 0x79, 0x9f, 0xe1, 0x78, 0x1a, 0x39, 0x1c, 0xb0, 0xee, 0x5d, 0x9e, 0x76, 0xc2, 0x25, 0x0c, - 0x8a, 0xcd, 0x78, 0x9a, 0xac, 0x42, 0xdd, 0x59, 0x89, 0xba, 0x14, 0x97, 0xe5, 0x76, 0xb3, 0x90, - 0x08, 0xef, 0x02, 0x02, 0xa1, 0x75, 0x8d, 0x1b, 0x71, 0x43, 0xe2, 0x3a, 0x0f, 0x19, 0xd8, 0x81, - 0x8f, 0x0e, 0x15, 0xd0, 0x33, 0xc5, 0x19, 0xa4, 0x7b, 0x9a, 0x01, 0x53, 0xc5, 0xc9, 0x54, 0x4a, - 0x05, 0x24, 0xab, 0xce, 0xa7, 0x26, 0x9c, 0x0d, 0x9a, 0xfc, 0xa7, 0x9d, 0xcc, 0xe4, 0x4b, 0x98, - 0xad, 0xc5, 0x67, 0x6f, 0x60, 0xee, 0x9f, 0x7a, 0x32, 0x53, 0xc2, 0xe5, 0xaa, 0x6e, 0x6f, 0xdb, - 0x29, 0x51, 0x10, 0x53, 0x89, 0x6c, 0x1d, 0x9e, 0x45, 0x10, 0xfd, 0x22, 0xee, 0xa3, 0xcc, 0x6c, - 0x5c, 0x92, 0x24, 0x41, 0xc4, 0xef, 0xf9, 0xb9, 0xce, 0x51, 0x25, 0x55, 0xd7, 0xff, 0xfa, 0xcb, - 0xde, 0xd6, 0xfd, 0x0a, 0x3a, 0x2c, 0x65, 0xc6, 0x08, 0x59, 0x0a, 0x7f, 0xa0, 0x0a, 0x94, 0x96, - 0xbe, 0x80, 0x48, 0xd7, 0x81, 0x94, 0x50, 0x1c, 0x1b, 0x00, 0x52, 0x6c, 0x15, 0xab, 0x30, 0xe7, - 0x6c, 0x96, 0xa6, 0xa5, 0x68, 0xbc, 0x2a, 0xa6, 0x7f, 0x47, 0x50, 0xd0, 0xaf, 0x87, 0xf9, 0x5c, - 0x79, 0x37, 0x1d, 0x53, 0x9c, 0x8d, 0x92, 0xfc, 0x27, 0x56, 0xb1, 0x09, 0xda, 0x46, 0x0a, 0xe7, - 0xbf, 0xd5, 0x41, 0x6e, 0x18, 0x13, 0x9c, 0x47, 0xe8, 0xb7, 0x14, 0x3d, 0xe7, 0xe9, 0xaf, 0xef, - 0x8e, 0xb5, 0xf5, 0xdd, 0xe9, 0x7a, 0xbb, 0x86, 0x2f, 0x64, 0xe6, 0x74, 0xc5, 0xad, 0x3f, 0xe6, - 0x64, 0xf1, 0x3d, 0xe3, 0x74, 0xf9, 0xac, 0xb1, 0xa2, 0xb1, 0x2c, 0x67, 0x01, 0x9a, 0xa6, 0x9b, - 0x9d, 0x81, 0xea, 0xbf, 0x42, 0xa3, 0x73, 0xca, 0xed, 0x94, 0x5d, 0x26, 0xd8, 0xf8, 0x90, 0x7a, - 0xd6, 0x97, 0x5b, 0x74, 0x27, 0x93, 0x6e, 0x7c, 0x25, 0x1d, 0xd0, 0xee, 0xbf, 0x7d, 0x23, 0xa9, - 0x94, 0x47, 0x33, 0xb2, 0x95, 0x2b, 0x22, 0x2a, 0xa4, 0x0e, 0xbf, 0x49, 0x89, 0x70, 0x3c, 0x8b, - 0x3b, 0x07, 0xb7, 0xd0, 0x24, 0x27, 0x1a, 0x81, 0x53, 0x7f, 0x99, 0x08, 0xa9, 0xda, 0xfd, 0x95, - 0x64, 0x77, 0x7b, 0x6d, 0x7e, 0xa1, 0x2d, 0xff, 0x70, 0x7e, 0xfe, 0xf5, 0x97, 0xfc, 0x05, 0x5b, - 0xc7, 0x3e, 0xb6, 0x83, 0xa2, 0xf8, 0xbd, 0x12, 0x28, 0x1c, 0x4c, 0x7d, 0x07, 0xbb, 0xdc, 0xa6, - 0x27, 0x25, 0x2b, 0x95, 0x4d, 0xe1, 0x68, 0x57, 0x18, 0x8e, 0x6c, 0x47, 0x68, 0x13, 0x01, 0xd2, - 0x05, 0x03, 0xac, 0x0c, 0x62, 0xdb, 0x69, 0x1c, 0xd8, 0xda, 0x3b, 0xad, 0xfc, 0xf2, 0xea, 0xe3, - 0x66, 0xf1, 0xc4, 0x52, 0xf1, 0x3a, 0x67, 0xe1, 0x8f, 0xb9, 0x49, 0x15, 0x63, 0x27, 0xb9, 0xf8, - 0xc2, 0xd1, 0xc8, 0x74, 0xb7, 0x04, 0x5c, 0x34, 0xdc, 0x28, 0x61, 0xe0, 0x11, 0xe2, 0x91, 0x81, - 0xe2, 0xf0, 0xed, 0x1b, 0x43, 0x85, 0xfc, 0x0c, 0x9e, 0xd2, 0x3a, 0xf5, 0xb1, 0x06, 0xaf, 0x30, - 0xfc, 0xbc, 0x8f, 0xfe, 0x52, 0x53, 0x66, 0x18, 0x07, 0xcb, 0xf9, 0xe8, 0xfd, 0xb2, 0xa6, 0x9b, - 0xc7, 0xb5, 0xe6, 0x25, 0xa5, 0x4d, 0x9b, 0x03, 0x4f, 0x31, 0xd5, 0x3b, 0x45, 0xf3, 0x54, 0x7f, - 0x5a, 0x18, 0x34, 0x40, 0xaf, 0x52, 0xd2, 0x75, 0xd6, 0x8b, 0xee, 0xa2, 0xea, 0x6e, 0x5c, 0x00, - 0x87, 0xa8, 0x7d, 0x3d, 0x81, 0xdb, 0x95, 0x5e, 0x41, 0x0f, 0x1b, 0x27, 0x0d, 0x0a, 0xf6, 0x36, - 0xfd, 0x5b, 0x4b, 0x74, 0x09, 0xde, 0x1b, 0x03, 0x69, 0xba, 0xe4, 0x3f, 0x9a, 0xc1, 0xe3, 0xab, - 0x16, 0xf5, 0x2d, 0x3a, 0xfc, 0xe4, 0x7f, 0xd5, 0x3c, 0xda, 0x7d, 0x48, 0xa9, 0x57, 0x6d, 0x9b, - 0x7b, 0xc6, 0xad, 0xcb, 0x80, 0x97, 0xcc, 0x9d, 0xce, 0x8b, 0xcf, 0x99, 0xcc, 0x70, 0x45, 0xf7, - 0xe7, 0x26, 0x71, 0x3f, 0x0c, 0x96, 0xa0, 0x3e, 0x6c, 0xe2, 0xb4, 0xbc, 0xcf, 0x46, 0x5f, 0xd3, - 0x2d, 0x29, 0x59, 0xaa, 0xd2, 0xff, 0x50, 0x55, 0x21, 0x53, 0xd2, 0x69, 0x1a, 0xc3, 0x21, 0x68, - 0x23, 0xb8, 0x16, 0x99, 0x33, 0x54, 0xc1, 0x78, 0x61, 0x6c, 0xaa, 0x6c, 0x77, 0x1f, 0xbf, 0x33, - 0xd0, 0x36, 0x14, 0x0b, 0xa4, 0x30, 0x87, 0x08, 0x8b, 0xbe, 0xa2, 0x32, 0x38, 0xe0, 0x04, 0xdc, - 0xfd, 0x84, 0xa9, 0xb9, 0xe9, 0x58, 0xb3, 0x79, 0xc2, 0x7e, 0x4f, 0x57, 0x03, 0x6d, 0xda, 0xdd, - 0x22, 0xda, 0xca, 0xca, 0x94, 0x25, 0x50, 0xc0, 0xbb, 0xba, 0x6b, 0x72, 0xbe, 0x60, 0xe6, 0xe6, - 0x2f, 0x3e, 0x54, 0x9c, 0x7e, 0x58, 0xa9, 0x23, 0x02, 0x53, 0x92, 0xed, 0xf5, 0xf0, 0xad, 0x26, - 0xf4, 0x6b, 0x51, 0xdc, 0x97, 0x7d, 0x04, 0xfa, 0x69, 0x65, 0x71, 0xbd, 0xb6, 0xee, 0xc7, 0x0d, - 0xf8, 0x7b, 0xcc, 0x9b, 0xa1, 0x80, 0xea, 0x4d, 0x31, 0xfe, 0x62, 0x84, 0xcd, 0x0f, 0x5a, 0x5e, - 0x6c, 0xfd, 0xda, 0xd4, 0x53, 0x30, 0x31, 0x45, 0x0c, 0x0b, 0x19, 0x60, 0xe4, 0x9a, 0x6e, 0xf8, - 0x01, 0x73, 0x33, 0xe2, 0x7c, 0x81, 0x09, 0xe7, 0x7e, 0x98, 0x00, 0x74, 0x61, 0x8b, 0x08, 0x13, - 0xc5, 0xc6, 0x08, 0x13, 0xd5, 0xb6, 0x47, 0x84, 0x6a, 0xd7, 0x38, 0xc1, 0x66, 0x20, 0x46, 0xbd, - 0x5a, 0xb0, 0xc8, 0xa1, 0x6e, 0x00, 0xad, 0x8a, 0x18, 0xcc, 0x80, 0xff, 0x44, 0x89, 0xf5, 0x71, - 0x08, 0x12, 0x09, 0x3f, 0x53, 0xe5, 0x36, 0xa5, 0xda, 0x02, 0x2a, 0x0b, 0x23, 0xd3, 0xad, 0x4a, - 0xcf, 0x74, 0xa3, 0x32, 0xa5, 0x60, 0xc2, 0x58, 0x35, 0x46, 0x36, 0x8b, 0x60, 0xd2, 0x34, 0x85, - 0xed, 0x3a, 0x8c, 0x61, 0x19, 0xc5, 0x4f, 0xce, 0xd0, 0x50, 0x16, 0xe1, 0x3f, 0x75, 0x41, 0x10, - 0x12, 0x2d, 0xb0, 0x82, 0x00, 0x04, 0xc5, 0x6b, 0x64, 0xa2, 0x6a, 0xec, 0x00, 0x8c, 0x80, 0x51, - 0xee, 0x34, 0x1c, 0xcc, 0x70, 0x65, 0x01, 0xa1, 0x91, 0x1d, 0xac, 0xcf, 0x24, 0x20, 0x76, 0xe8, - 0x42, 0xa1, 0x78, 0x70, 0x18, 0x2c, 0xf6, 0x03, 0x1d, 0xe8, 0xc2, 0x8b, 0x6e, 0x4c, 0x40, 0x8e, - 0x1a, 0x46, 0x17, 0x43, 0x60, 0x1c, 0x30, 0x50, 0x11, 0x8b, 0xf5, 0x70, 0xf0, 0x1e, 0xb2, 0xeb, - 0x52, 0x9c, 0x1e, 0x85, 0xeb, 0xdd, 0xa0, 0x18, 0x97, 0xf1, 0x31, 0x6a, 0xdc, 0x9c, 0x85, 0x98, - 0xd3, 0x0f, 0x67, 0x59, 0x4f, 0x4a, 0x94, 0x84, 0x34, 0xb8, 0x44, 0x64, 0x2a, 0xb5, 0x1b, 0xec, - 0xcf, 0x89, 0x3b, 0x5d, 0xf2, 0xf5, 0x30, 0x3a, 0x73, 0x98, 0xf0, 0xad, 0xdb, 0x11, 0x2f, 0x82, - 0xc7, 0x27, 0x84, 0x7a, 0x23, 0xa8, 0x3c, 0x01, 0x89, 0x8c, 0xd1, 0x0b, 0x75, 0x6a, 0x8e, 0xd0, - 0xe7, 0x2d, 0x39, 0xe9, 0x4d, 0x66, 0xc3, 0x1c, 0xe1, 0x4d, 0x65, 0x5e, 0xb5, 0x2f, 0xae, 0xd9, - 0x82, 0x8c, 0x07, 0xbf, 0xd2, 0xd8, 0x50, 0xbb, 0x02, 0x01, 0xae, 0x4b, 0x80, 0x4a, 0x0b, 0x09, - 0x5f, 0xea, 0x6e, 0x2e, 0xa8, 0x22, 0xef, 0xd9, 0x8b, 0xd4, 0x5c, 0x74, 0xd9, 0xe4, 0x03, 0x6b, - 0x51, 0x2c, 0xc8, 0x05, 0x74, 0x4d, 0xa5, 0x91, 0xf6, 0x23, 0x7b, 0x7b, 0x2e, 0xd7, 0xe6, 0x8b, - 0x45, 0x2d, 0xc6, 0x88, 0x64, 0xa1, 0x1b, 0x24, 0x04, 0x60, 0x14, 0x81, 0xb0, 0x41, 0xc9, 0xcf, - 0x79, 0x50, 0x65, 0xa3, 0x96, 0x21, 0x6e, 0x4b, 0x05, 0x0a, 0x13, 0x01, 0x59, 0x93, 0x8c, 0x7a, - 0x65, 0x7c, 0xcb, 0xcc, 0x23, 0xe8, 0x87, 0x58, 0x23, 0xd8, 0x19, 0x2f, 0x82, 0x67, 0x35, 0xda, - 0x09, 0x30, 0x96, 0x5e, 0x40, 0x59, 0x89, 0xa8, 0x97, 0x92, 0x8f, 0x37, 0x87, 0x38, 0x8b, 0x4b, - 0x71, 0xc5, 0x3e, 0x18, 0x39, 0x96, 0x8a, 0x00, 0x25, 0x03, 0xe4, 0xfd, 0x8b, 0x9a, 0x42, 0xd8, - 0xf3, 0xaa, 0x3c, 0x0a, 0xab, 0x65, 0xec, 0x71, 0xe7, 0x89, 0xdb, 0x34, 0x8a, 0xe0, 0x0e, 0x36, - 0xe7, 0xef, 0x61, 0xed, 0x06, 0xa7, 0xfd, 0x33, 0x48, 0x93, 0x0f, 0x90, 0x76, 0x0f, 0x44, 0xfc, - 0xe3, 0x38, 0x53, 0x2b, 0xfa, 0xf7, 0xf0, 0x66, 0xd1, 0x45, 0xff, 0x0c, 0xda, 0x09, 0x37, 0x54, - 0x89, 0x50, 0x17, 0x6b, 0xda, 0x1e, 0xa8, 0x3d, 0x2c, 0xca, 0x52, 0xd3, 0x23, 0x9d, 0x25, 0x88, - 0x9b, 0x5f, 0x36, 0xc5, 0x30, 0xe6, 0x41, 0x88, 0xd3, 0xdf, 0xa0, 0x01, 0xae, 0x5e, 0x08, 0x8b, - 0x3b, 0x17, 0x24, 0xf3, 0xea, 0x14, 0x43, 0x4e, 0x82, 0xc5, 0xd3, 0x25, 0xfa, 0xd5, 0xa9, 0xbf, - 0x88, 0xc3, 0xaa, 0x09, 0xc2, 0x05, 0x0a, 0x7a, 0xcb, 0xa2, 0x0c, 0xe4, 0xf2, 0x15, 0x4e, 0x83, - 0x65, 0xc1, 0x02, 0x05, 0x96, 0x08, 0x46, 0x7b, 0xd4, 0xb7, 0xc8, 0x8f, 0xec, 0xcf, 0x2d, 0x07, - 0xfe, 0x00, 0xe2, 0x28, 0x5e, 0xe3, 0x8e, 0x5d, 0x5d, 0x61, 0x28, 0x13, 0x1d, 0x08, 0x3c, 0xfa, - 0xb1, 0x8e, 0x70, 0x50, 0x3a, 0x24, 0xa1, 0xc6, 0xaf, 0xd5, 0xc7, 0x29, 0x4c, 0xdb, 0x71, 0x4f, - 0xb3, 0x81, 0xae, 0xe8, 0xfc, 0x90, 0x7f, 0x2e, 0x5e, 0xb5, 0xb6, 0xe8, 0x5d, 0xf8, 0x88, 0x49, - 0xb9, 0x9f, 0xdb, 0xf8, 0x07, 0x95, 0x92, 0x70, 0x6c, 0x1e, 0x13, 0x1c, 0x09, 0xb7, 0x1a, 0x2c, - 0xaf, 0xa8, 0x6d, 0x03, 0x90, 0x0b, 0x5f, 0x3e, 0xff, 0xda, 0x64, 0x22, 0xf9, 0x55, 0x5b, 0xbe, - 0x6e, 0xc9, 0xfb, 0x0c, 0x20, 0x8c, 0x05, 0xa0, 0x40, 0x84, 0xd8, 0x92, 0xbe, 0x75, 0xe5, 0x17, - 0xe6, 0x5b, 0xe4, 0x4c, 0xe2, 0xc5, 0x12, 0xbd, 0x7d, 0x71, 0xee, 0x49, 0xf2, 0x04, 0x13, 0x82, - 0x9c, 0x83, 0xf1, 0x7d, 0x9d, 0x25, 0xc9, 0x94, 0xc3, 0xe4, 0xdc, 0xd5, 0xf7, 0x98, 0x82, 0x26, - 0xff, 0x74, 0x55, 0x49, 0xb0, 0x86, 0xec, 0xe8, 0x1c, 0x63, 0x15, 0xc0, 0x58, 0xa7, 0x83, 0xd7, - 0x19, 0x9a, 0x97, 0x49, 0x8f, 0x1f, 0x98, 0x92, 0x83, 0x8c, 0xc1, 0xed, 0x07, 0x24, 0xdc, 0x10, - 0x39, 0x9b, 0x8d, 0x14, 0x55, 0x61, 0x59, 0xf0, 0x0c, 0xfa, 0xfb, 0x93, 0x49, 0x5c, 0xca, 0x54, - 0x1d, 0x0c, 0x05, 0xdc, 0xb5, 0x20, 0x81, 0xd9, 0x88, 0xfb, 0x03, 0xcc, 0x4d, 0xa0, 0xd4, 0xb1, - 0x24, 0xe8, 0x8c, 0x9b, 0x0a, 0xac, 0x4f, 0xc0, 0x36, 0xe6, 0xc8, 0x1e, 0x24, 0x7e, 0x10, 0x49, - 0x91, 0x3c, 0xcd, 0x1d, 0x37, 0x02, 0x58, 0x32, 0x88, 0x00, 0x27, 0x15, 0xa3, 0x68, 0xd1, 0x7b, - 0x9d, 0x3c, 0x1e, 0x20, 0x0b, 0x43, 0xdc, 0xfa, 0x15, 0xb8, 0xf1, 0x4c, 0xb5, 0x8b, 0x3a, 0x5b, - 0xb4, 0x9e, 0xea, 0xdb, 0x5d, 0xb8, 0xf6, 0xfe, 0x8a, 0x69, 0x19, 0x3d, 0xf9, 0x82, 0x7f, 0xa7, - 0x53, 0x3c, 0xe7, 0x90, 0x45, 0x12, 0x9b, 0x09, 0xd9, 0x02, 0xdb, 0xa2, 0x1f, 0xfe, 0xbb, 0x1e, - 0xbe, 0x57, 0x6d, 0x9d, 0x85, 0x75, 0xe7, 0xd9, 0xb5, 0x1e, 0x68, 0xe5, 0x80, 0x6d, 0x97, 0x58, - 0xa1, 0x44, 0xa3, 0x21, 0x4b, 0x25, 0x8d, 0x47, 0x87, 0x05, 0xea, 0x1c, 0xd1, 0xc8, 0x62, 0xff, - 0x03, 0x9b, 0x42, 0x4f, 0xb3, 0x38, 0x1a, 0xe8, 0x98, 0x11, 0xbe, 0x5d, 0xa4, 0x45, 0xc0, 0x64, - 0x80, 0xbc, 0x54, 0x56, 0x96, 0x17, 0xde, 0x9d, 0x8b, 0x1d, 0xf7, 0xd3, 0x3e, 0x2c, 0xbc, 0x35, - 0xae, 0x83, 0x48, 0xeb, 0x18, 0x31, 0xe8, 0x35, 0xc2, 0xb5, 0xcf, 0x18, 0x3c, 0xda, 0x7c, 0xbe, - 0xea, 0x5e, 0x31, 0x83, 0x0d, 0x47, 0x46, 0x0d, 0xec, 0x52, 0xfe, 0x32, 0x2d, 0xaf, 0x71, 0xbf, - 0xed, 0x00, 0x26, 0x77, 0x88, 0x68, 0x3c, 0x66, 0x2a, 0xb5, 0x58, 0xa1, 0x25, 0x39, 0x34, 0x7f, - 0x4b, 0xde, 0x4e, 0x50, 0x6d, 0x87, 0xaa, 0x2b, 0xdf, 0xbe, 0xc9, 0xee, 0x6f, 0x62, 0x75, 0x94, - 0x05, 0xfa, 0x62, 0x51, 0xb1, 0x70, 0xe7, 0x0b, 0xb0, 0x26, 0x0d, 0x0d, 0x5d, 0x5d, 0x7e, 0x29, - 0x22, 0x83, 0x4d, 0x9b, 0xa4, 0xe7, 0xf6, 0xc5, 0xb6, 0x6a, 0x21, 0xfd, 0xc3, 0xf7, 0x11, 0x5f, - 0x36, 0x12, 0xc1, 0x32, 0x86, 0x12, 0x95, 0xc9, 0x8e, 0xe8, 0xc5, 0x7d, 0x6c, 0xea, 0xe3, 0xbd, - 0x7d, 0xbc, 0x15, 0xc3, 0x66, 0x4f, 0xcf, 0xa0, 0xdb, 0x80, 0x5e, 0xf0, 0x29, 0x71, 0xa7, 0x33, - 0x49, 0x23, 0x9b, 0x6e, 0x2e, 0xed, 0x41, 0xf1, 0x04, 0x72, 0xd2, 0x43, 0xba, 0x66, 0x64, 0x7e, - 0xfc, 0xe7, 0x28, 0x2f, 0x17, 0xe4, 0x0d, 0xfc, 0xe9, 0xf5, 0xe0, 0x6f, 0x41, 0xc6, 0x97, 0x42, - 0xb7, 0x0d, 0x2f, 0x05, 0x42, 0x5f, 0xaa, 0x3d, 0xcc, 0xe9, 0x55, 0xe9, 0x4b, 0x4f, 0xa1, 0x2f, - 0xbd, 0x52, 0x09, 0x5f, 0x7a, 0x55, 0xac, 0x93, 0xcd, 0x67, 0xe1, 0x65, 0xb7, 0x5c, 0xdd, 0xfd, - 0x99, 0xc1, 0xed, 0x98, 0x15, 0xdb, 0x5f, 0xfe, 0xe5, 0xb8, 0x18, 0x36, 0x8d, 0x3a, 0xb6, 0x1b, - 0x16, 0x85, 0x3b, 0xa0, 0xe2, 0x2e, 0x05, 0xaf, 0x8d, 0x3e, 0xbc, 0x7a, 0xbd, 0x8e, 0xe3, 0xb4, - 0x2a, 0x84, 0xf0, 0xbd, 0x66, 0x48, 0x1a, 0x03, 0xfb, 0xa9, 0x65, 0x26, 0x26, 0xf0, 0xfb, 0x59, - 0x49, 0xb0, 0xef, 0x1d, 0xba, 0xdf, 0xe3, 0x25, 0xba, 0x29, 0xdd, 0x34, 0x5b, 0x18, 0x9c, 0x20, - 0xda, 0x98, 0xd0, 0x08, 0x1a, 0x90, 0x15, 0xf0, 0x12, 0x0a, 0x91, 0x46, 0xb5, 0xd4, 0xf2, 0x62, - 0x8f, 0xdd, 0x52, 0xf0, 0x06, 0x3c, 0x4a, 0x43, 0x82, 0x49, 0xba, 0x67, 0xa7, 0x51, 0x0f, 0x65, - 0x8a, 0x39, 0xf7, 0xa1, 0x2b, 0x0f, 0x73, 0xf7, 0x5e, 0x89, 0xba, 0x1f, 0xaa, 0xa3, 0x77, 0x3b, - 0xc0, 0x9f, 0xa8, 0x5e, 0xb8, 0xe1, 0x46, 0x18, 0x30, 0xec, 0xb7, 0x0c, 0xec, 0x34, 0xdd, 0x0e, - 0xbd, 0xa5, 0x27, 0x35, 0x1a, 0x4e, 0xfc, 0x5e, 0x91, 0x01, 0x14, 0x49, 0x60, 0xf8, 0xf1, 0x70, - 0xb2, 0x05, 0xc6, 0xe9, 0x10, 0x17, 0xe3, 0xed, 0x04, 0x77, 0xd3, 0x9e, 0xbc, 0xbb, 0xbc, 0x76, - 0xb1, 0x7b, 0xf6, 0xf8, 0xfb, 0x04, 0xb3, 0xbb, 0xb1, 0xeb, 0xd6, 0x72, 0xc1, 0xdc, 0x7b, 0x05, - 0x93, 0xb5, 0x77, 0x7a, 0x5e, 0xdd, 0x66, 0xf6, 0x53, 0x20, 0xe6, 0x56, 0x96, 0x4a, 0x2e, 0xaf, - 0x9e, 0xde, 0x3c, 0xe1, 0xd6, 0x3a, 0x18, 0x30, 0x8b, 0x90, 0x01, 0x51, 0x4c, 0x49, 0xaf, 0x27, - 0x5c, 0xb7, 0x25, 0xf5, 0x61, 0x27, 0x82, 0xac, 0x0c, 0x6e, 0x97, 0xc0, 0x1f, 0xe0, 0x29, 0x07, - 0xd8, 0x4c, 0xc3, 0x34, 0x18, 0x33, 0xee, 0x2d, 0x93, 0x25, 0xf9, 0xda, 0x46, 0x16, 0x7d, 0x98, - 0x74, 0xd1, 0xed, 0x01, 0x44, 0x03, 0x4c, 0xdc, 0xd4, 0xea, 0x1a, 0x14, 0xdb, 0x57, 0xa7, 0xa4, - 0x9b, 0xc8, 0x7a, 0xcb, 0x9b, 0x3b, 0x5a, 0xe6, 0xc4, 0x92, 0x8c, 0xba, 0x78, 0x6e, 0x38, 0x02, - 0x7e, 0xf5, 0x91, 0xc2, 0xd8, 0x15, 0x37, 0x95, 0x2d, 0xa8, 0xb8, 0x6d, 0xd4, 0x13, 0x0a, 0xfc, - 0x3f, 0x53, 0x87, 0x97, 0xa4, 0xdf, 0x04, 0xe4, 0xc9, 0xdb, 0x72, 0x2d, 0x9b, 0x04, 0x65, 0x53, - 0x68, 0x88, 0x35, 0x05, 0xc7, 0x37, 0x41, 0xcb, 0x16, 0xe5, 0x3f, 0x39, 0xe8, 0x95, 0x0c, 0xc8, - 0x09, 0x2c, 0x34, 0x6c, 0xb8, 0xce, 0x77, 0xd5, 0x55, 0xd1, 0x48, 0x7a, 0x94, 0xc4, 0xf5, 0x1a, - 0x25, 0xb9, 0xf3, 0x03, 0xd8, 0xfb, 0x27, 0x18, 0xbf, 0x51, 0xbd, 0x1a, 0xca, 0x24, 0x6d, 0x58, - 0x84, 0xb7, 0xd5, 0x54, 0xdd, 0x73, 0x5c, 0x42, 0x51, 0xba, 0xb3, 0x8c, 0xab, 0x78, 0x2d, 0x9c, - 0xce, 0x7a, 0xb0, 0xea, 0xe2, 0xc9, 0x68, 0x34, 0x50, 0x5e, 0x46, 0xe2, 0x26, 0x49, 0x83, 0xe9, - 0x9d, 0xa6, 0xbb, 0x33, 0xf6, 0xbd, 0xea, 0x0c, 0x12, 0x78, 0xb2, 0xbf, 0x90, 0xa6, 0x3e, 0x6b, - 0x28, 0x77, 0x68, 0x80, 0xe2, 0x4a, 0x67, 0x69, 0x47, 0xa7, 0x29, 0xf8, 0x80, 0xaf, 0x58, 0x4b, - 0x85, 0x05, 0x64, 0x84, 0xe7, 0x87, 0x58, 0x9d, 0xac, 0x57, 0xa9, 0xa5, 0xd2, 0x8f, 0xb4, 0x09, - 0xbb, 0xa3, 0x0e, 0xee, 0xc3, 0xc4, 0x97, 0x96, 0xbd, 0xd2, 0xa7, 0x23, 0xd3, 0x58, 0x59, 0x68, - 0xa3, 0x9d, 0x2d, 0xfe, 0x5e, 0xb3, 0x1b, 0xed, 0x9c, 0x57, 0xe1, 0x06, 0xdd, 0x0b, 0xf0, 0x7f, - 0xf4, 0x18, 0x4c, 0x94, 0xd9, 0xbb, 0x9d, 0xa4, 0x73, 0xb9, 0x08, 0x40, 0xa8, 0x53, 0x8c, 0x61, - 0x45, 0xc3, 0x2a, 0x0b, 0x81, 0x5d, 0x6f, 0xf0, 0x1d, 0x56, 0xfe, 0x3f, 0xe6, 0xd6, 0x42, 0x64, - 0x27, 0xa0, 0xb7, 0x12, 0xb8, 0x41, 0x7d, 0x76, 0xf6, 0x5f, 0x7e, 0x31, 0x7c, 0xb0, 0x88, 0xb6, - 0x48, 0xb7, 0x55, 0x3d, 0x49, 0x8f, 0x41, 0xc3, 0xff, 0xc9, 0x70, 0x0b, 0x0f, 0x02, 0x75, 0x69, - 0xee, 0x58, 0xed, 0x82, 0xde, 0x02, 0x49, 0x34, 0x97, 0x7e, 0x9f, 0x17, 0xd7, 0x49, 0xd0, 0x43, - 0x16, 0xf4, 0x07, 0xe3, 0x3d, 0xea, 0xea, 0xb6, 0x28, 0xd6, 0xd6, 0x7d, 0x87, 0xb3, 0xa1, 0xe1, - 0x41, 0x96, 0x7a, 0x6e, 0xeb, 0xfb, 0xc0, 0xf2, 0xdc, 0x48, 0xde, 0x79, 0x27, 0xfc, 0x5e, 0x34, - 0xfb, 0x06, 0x33, 0x3b, 0x0c, 0x25, 0x6f, 0xb2, 0x53, 0x08, 0x2d, 0xa2, 0xd0, 0xdb, 0xd8, 0x97, - 0xbf, 0x26, 0x0d, 0x39, 0xf4, 0x1e, 0x74, 0xea, 0x17, 0x71, 0x1d, 0xd3, 0xeb, 0xac, 0xf3, 0x5c, - 0xb1, 0xf4, 0x0d, 0x77, 0x03, 0x9d, 0x6d, 0x8f, 0x69, 0xc4, 0x73, 0xd0, 0xfe, 0x2e, 0x61, 0xb1, - 0x74, 0xf0, 0x74, 0xa6, 0x28, 0xad, 0xbf, 0x73, 0x55, 0x6e, 0xec, 0xc9, 0xd9, 0xf9, 0x7f, 0xae, - 0xeb, 0xc4, 0xd9, 0x25, 0xed, 0x51, 0xff, 0x3f, 0xd7, 0x6b, 0xeb, 0xa9, 0x44, 0x36, 0x57, 0x71, - 0xfb, 0x10, 0x7b, 0x0a, 0x2c, 0xa0, 0xa0, 0x28, 0xd1, 0x8d, 0xf5, 0x64, 0x6a, 0x9d, 0xea, 0xf1, - 0x51, 0x25, 0x26, 0x5c, 0xc5, 0xd0, 0xa1, 0x3c, 0x5e, 0xa5, 0x0d, 0xc5, 0x83, 0x0f, 0x56, 0x86, - 0x0e, 0xda, 0xad, 0xe3, 0x6e, 0x01, 0xc3, 0x07, 0x57, 0x7f, 0x4b, 0x55, 0xb4, 0x0b, 0xfa, 0x21, - 0x51, 0x1f, 0xa9, 0x70, 0xb2, 0x24, 0xde, 0x3c, 0xd4, 0x31, 0x7a, 0xda, 0xbe, 0x79, 0x90, 0xc4, - 0x4d, 0xe1, 0xda, 0x7d, 0xbb, 0x7e, 0x08, 0x1a, 0x0a, 0x08, 0xf3, 0xbf, 0x38, 0x2a, 0x07, 0x4b, - 0xa3, 0xe2, 0xf7, 0xef, 0x0f, 0xc7, 0x0e, 0x32, 0x92, 0x28, 0x51, 0x3e, 0x4a, 0x46, 0xf2, 0xf6, - 0x60, 0xa9, 0x1a, 0xd2, 0x23, 0xad, 0xee, 0xb9, 0x1d, 0x51, 0x32, 0xa2, 0x65, 0x1a, 0xc0, 0xa6, - 0xa0, 0x15, 0x09, 0xfb, 0x97, 0x2d, 0x6c, 0x85, 0xca, 0xb7, 0x9e, 0x69, 0x47, 0x8b, 0xb5, 0xd4, - 0x3e, 0x98, 0x9e, 0xf4, 0x8c, 0x15, 0x1a, 0x89, 0x58, 0x74, 0xa2, 0xf6, 0xd4, 0xb4, 0x4d, 0xd3, - 0x53, 0xe2, 0xbf, 0x04, 0x1a, 0x7f, 0x4e, 0xd3, 0x2c, 0xdb, 0x56, 0x25, 0x51, 0xe8, 0xee, 0x0c, - 0x61, 0x3d, 0x8f, 0xb4, 0x73, 0x6b, 0xe2, 0xfe, 0x93, 0x28, 0x45, 0xf6, 0xa2, 0xd2, 0x23, 0x9a, - 0x9e, 0xa4, 0xc5, 0xff, 0x73, 0x9a, 0xef, 0x7c, 0xd9, 0xd8, 0x10, 0xd8, 0x5c, 0x12, 0xda, 0xf8, - 0x61, 0xf6, 0x8d, 0x0d, 0x48, 0x25, 0x02, 0x2a, 0x90, 0xff, 0x3e, 0x72, 0x87, 0x41, 0xc7, 0x98, - 0x14, 0x7b, 0x66, 0x83, 0xea, 0x88, 0xd8, 0x83, 0xbe, 0x30, 0x4a, 0x89, 0x19, 0x44, 0x1a, 0x1e, - 0x1d, 0x10, 0xd8, 0x2f, 0x3b, 0x48, 0x03, 0x4e, 0x94, 0xc3, 0xea, 0xf3, 0x27, 0x2b, 0x98, 0x61, - 0x85, 0x40, 0xac, 0xff, 0xcb, 0x27, 0x89, 0x0e, 0x2b, 0x91, 0xdf, 0xf6, 0x21, 0xac, 0x45, 0x6c, - 0x3e, 0x81, 0x95, 0x1d, 0x2c, 0x4f, 0x1b, 0xc1, 0x5a, 0x96, 0xcc, 0x84, 0xd6, 0x13, 0x39, 0x49, - 0x3b, 0xd7, 0x43, 0x09, 0x00, 0x82, 0x08, 0x84, 0x0f, 0x43, 0xb1, 0xb2, 0x3d, 0x80, 0xef, 0x4f, - 0x3d, 0xe9, 0xc2, 0xc4, 0xcd, 0x90, 0x21, 0x40, 0xe5, 0x16, 0x0a, 0x00, 0x3c, 0x53, 0xa6, 0x78, - 0x86, 0xae, 0x2b, 0x0c, 0x56, 0x42, 0xca, 0xd5, 0x8b, 0x00, 0x9b, 0xfd, 0x24, 0x6c, 0xa1, 0x16, - 0xe2, 0xc1, 0x0b, 0x46, 0x03, 0x0a, 0x52, 0x60, 0x40, 0x1b, 0x90, 0x68, 0xeb, 0x49, 0x0f, 0x01, - 0x6c, 0x03, 0x16, 0xb0, 0xce, 0xcb, 0x76, 0xb8, 0x34, 0x4d, 0x63, 0xb0, 0x73, 0x85, 0xdc, 0xca, - 0xac, 0x07, 0xc6, 0x79, 0x8c, 0xf1, 0x5c, 0x96, 0x0b, 0xf7, 0x8a, 0xfa, 0x81, 0xd0, 0x52, 0xdf, - 0x08, 0x6b, 0x47, 0xf3, 0xbb, 0x0e, 0xd7, 0xa5, 0x4e, 0xec, 0x86, 0x33, 0x30, 0x86, 0x5c, 0x2b, - 0x80, 0xac, 0x69, 0x29, 0xc3, 0x00, 0xaa, 0xcb, 0xd6, 0x75, 0xe3, 0xcc, 0x25, 0xa6, 0x9b, 0x99, - 0xc1, 0x2f, 0x70, 0xf3, 0x94, 0x0b, 0x81, 0x47, 0x1b, 0x31, 0x6d, 0x6c, 0xc4, 0x2d, 0xbf, 0xe1, - 0xbe, 0x6f, 0x65, 0x4b, 0xf9, 0x4a, 0x3e, 0x68, 0x1a, 0xf7, 0xfb, 0x04, 0xbe, 0xfd, 0x44, 0xa4, - 0x42, 0x72, 0x65, 0x4f, 0x2b, 0xdb, 0x88, 0xb4, 0x00, 0xe5, 0xa3, 0x80, 0x21, 0x87, 0x44, 0x81, - 0x73, 0xd3, 0xa2, 0x00, 0xfa, 0x0c, 0xb5, 0x12, 0x48, 0xb7, 0xe2, 0x27, 0x00, 0x8d, 0x6b, 0x2b, - 0xa6, 0xa5, 0x18, 0x80, 0x43, 0xc3, 0x41, 0x99, 0x84, 0x36, 0x41, 0xc7, 0x83, 0xe6, 0x7e, 0x38, - 0x1e, 0x01, 0x10, 0x8d, 0xa6, 0x00, 0x6a, 0x2c, 0x1e, 0xc4, 0xc5, 0xde, 0x87, 0x4a, 0x67, 0x49, - 0x1c, 0xeb, 0x63, 0xd5, 0x32, 0xf4, 0x21, 0x15, 0xc4, 0x24, 0x8d, 0x97, 0xf5, 0xd0, 0x0d, 0x6e, - 0x8c, 0x2a, 0xb4, 0x48, 0x4a, 0x64, 0x22, 0x54, 0x9b, 0xa8, 0x26, 0x9e, 0xda, 0xa1, 0xb5, 0xff, - 0xdd, 0xc2, 0x8e, 0xa4, 0x49, 0x3e, 0x87, 0x87, 0x8a, 0x35, 0x6e, 0x6d, 0xf4, 0x92, 0x00, 0x42, - 0x97, 0xb4, 0x90, 0x82, 0x20, 0xe3, 0x86, 0x3e, 0xfe, 0x26, 0xec, 0x24, 0xce, 0x6d, 0x84, 0x1e, - 0x72, 0xe8, 0xc5, 0xaa, 0x90, 0x73, 0x36, 0x78, 0x0b, 0x51, 0x1b, 0xb2, 0xa8, 0x7a, 0xbd, 0x1d, - 0x99, 0x4d, 0x6e, 0x35, 0x9a, 0x97, 0x12, 0xcf, 0x76, 0xd8, 0xa1, 0x66, 0x3e, 0x15, 0x13, 0xb8, - 0x57, 0xdc, 0xbb, 0x09, 0xc1, 0x42, 0x53, 0x69, 0xb7, 0x52, 0x6c, 0xb7, 0x78, 0x6e, 0x2f, 0xe8, - 0x15, 0xf7, 0x1c, 0x84, 0xbd, 0xd6, 0xa5, 0x70, 0x4d, 0xa8, 0x9a, 0x1b, 0x42, 0xaa, 0x4b, 0x52, - 0x3e, 0x22, 0xd8, 0xcf, 0x52, 0x4b, 0x16, 0x91, 0xc3, 0xcd, 0x35, 0x31, 0x49, 0xb0, 0xa0, 0x4d, - 0x8b, 0x28, 0xa0, 0xe0, 0x44, 0x68, 0x44, 0x4b, 0x07, 0xc4, 0xa1, 0x49, 0x2b, 0x1a, 0xce, 0x2e, - 0x37, 0x9c, 0x5d, 0xdd, 0x70, 0x76, 0xb9, 0xe1, 0x2c, 0xdf, 0x70, 0x64, 0x15, 0x25, 0x30, 0xf8, - 0xc1, 0x1a, 0x9a, 0x61, 0x7a, 0xe6, 0x2f, 0x66, 0x92, 0xbd, 0x8c, 0xc3, 0xbe, 0x05, 0xea, 0x16, - 0xa4, 0x5e, 0x3e, 0xdc, 0x5f, 0x0b, 0x8a, 0xac, 0x38, 0xa2, 0x17, 0xb9, 0x79, 0x31, 0xc9, 0x82, - 0x8a, 0xbd, 0xc3, 0x60, 0xde, 0xc6, 0xa0, 0x5b, 0xb3, 0xa5, 0x62, 0xe4, 0x52, 0x7f, 0xd3, 0xf1, - 0x8e, 0xb9, 0xb8, 0x37, 0x3f, 0xf2, 0x71, 0xa6, 0x9e, 0xdd, 0xe7, 0xdd, 0x5a, 0xc4, 0xdb, 0x7e, - 0xd4, 0xfb, 0x68, 0xfb, 0x66, 0xb8, 0xef, 0xc1, 0xc4, 0x73, 0xe0, 0x09, 0xfe, 0x00, 0x72, 0xf8, - 0xd4, 0xb1, 0x7b, 0xd8, 0xd8, 0x3f, 0x9a, 0x49, 0x35, 0x1d, 0x78, 0x8c, 0x39, 0xa0, 0x49, 0x37, - 0xb0, 0xfb, 0xae, 0x13, 0xd4, 0x6b, 0x31, 0x95, 0xa2, 0x1d, 0x6b, 0x81, 0xdb, 0x53, 0x4f, 0x83, - 0xc2, 0xb5, 0x49, 0x03, 0x37, 0x83, 0x9e, 0xa8, 0x6f, 0x8a, 0xeb, 0x58, 0x4b, 0xa1, 0x6d, 0xb9, - 0x85, 0xbd, 0x63, 0x16, 0x02, 0xa1, 0x25, 0x69, 0x4b, 0x0a, 0xdb, 0x3d, 0x87, 0xf6, 0xc5, 0x94, - 0x96, 0x04, 0x73, 0xf2, 0xcb, 0x17, 0x05, 0x23, 0x51, 0xe2, 0xc3, 0x86, 0x7c, 0x8f, 0xf3, 0x5f, - 0x7f, 0xe1, 0x91, 0x47, 0xed, 0xdb, 0x37, 0xfe, 0x3c, 0x12, 0x64, 0x63, 0xa3, 0x21, 0x44, 0x98, - 0x93, 0x15, 0xa0, 0xd4, 0xb7, 0xe1, 0x5f, 0x4d, 0xec, 0xb2, 0xf8, 0x4a, 0xdc, 0xec, 0x60, 0x1b, - 0x79, 0x0c, 0x0c, 0x35, 0x88, 0xf6, 0x6a, 0x27, 0xc5, 0x4d, 0x7b, 0xa2, 0xa2, 0x4f, 0x49, 0x47, - 0x27, 0x59, 0x72, 0xde, 0xc1, 0xc0, 0xdb, 0x6c, 0x4d, 0x0d, 0x45, 0x84, 0x6d, 0xb6, 0x81, 0x1d, - 0x5f, 0x36, 0x69, 0x5e, 0x8e, 0xcf, 0xeb, 0x87, 0xf3, 0xf2, 0x7c, 0x9e, 0x96, 0x14, 0x17, 0xd8, - 0x9d, 0xe5, 0xba, 0x65, 0x5d, 0xff, 0xa0, 0xf9, 0xc7, 0x5c, 0x5b, 0x04, 0x17, 0x86, 0xb5, 0xed, - 0x98, 0x2f, 0xcd, 0x04, 0x97, 0x93, 0x0a, 0x60, 0x77, 0x83, 0xc9, 0xa4, 0xa7, 0x0d, 0x7d, 0x1b, - 0x63, 0xf0, 0x44, 0xb6, 0x0b, 0xe0, 0xfb, 0x1a, 0xb5, 0x05, 0x14, 0x08, 0xfb, 0x76, 0x81, 0xe0, - 0x97, 0x13, 0x2b, 0x81, 0x79, 0xc9, 0x88, 0x75, 0xb0, 0xfa, 0x8a, 0x59, 0xfe, 0x62, 0x53, 0xd6, - 0x2e, 0xfd, 0xdc, 0xe0, 0xfb, 0x97, 0x64, 0x93, 0x3e, 0x1e, 0x3a, 0x64, 0x1d, 0xfd, 0xce, 0x6d, - 0xbf, 0x2b, 0x3e, 0x58, 0x8d, 0x68, 0x42, 0xaf, 0x80, 0x5e, 0x66, 0xeb, 0xc3, 0x4b, 0x4e, 0xf9, - 0xbf, 0xbf, 0xa4, 0x4e, 0x5d, 0x67, 0xf6, 0xbb, 0xd4, 0xa5, 0x4f, 0x86, 0x29, 0x99, 0x5e, 0xd2, - 0xa3, 0xd4, 0x77, 0xd3, 0x1e, 0xa5, 0x51, 0x5d, 0xb5, 0xcf, 0x80, 0x91, 0xbe, 0x0f, 0x27, 0x7f, - 0x0e, 0x07, 0x52, 0x0f, 0x86, 0x86, 0x5d, 0x54, 0x19, 0xba, 0x9e, 0x12, 0x66, 0x2f, 0xbb, 0x3a, - 0xfd, 0x1a, 0x03, 0x01, 0x60, 0x5c, 0xd1, 0x41, 0x7e, 0x86, 0xe6, 0xa8, 0xd8, 0x55, 0x2d, 0x16, - 0xe3, 0x21, 0x2e, 0x56, 0xdc, 0xa7, 0xce, 0x91, 0x10, 0xda, 0x89, 0x90, 0x0c, 0x1a, 0xf4, 0xe8, - 0x85, 0xd8, 0x42, 0x81, 0x6d, 0xd1, 0xbd, 0x6a, 0x92, 0x8e, 0xec, 0xd6, 0x07, 0xd7, 0x8a, 0x7a, - 0x57, 0x4d, 0xfe, 0x92, 0x06, 0x1f, 0x80, 0x7e, 0xa6, 0xa2, 0xe7, 0xf6, 0x63, 0x18, 0x87, 0xd1, - 0x0f, 0x90, 0x9f, 0xa9, 0x3c, 0x84, 0x43, 0xf5, 0xef, 0x02, 0x38, 0x46, 0xa7, 0xd5, 0x10, 0xa5, - 0xd7, 0x08, 0xe6, 0xf8, 0xf8, 0x73, 0x94, 0xfe, 0x04, 0x4d, 0x1f, 0x97, 0x49, 0xfa, 0x18, 0xa2, - 0xe9, 0xe3, 0xdf, 0x85, 0x78, 0xf8, 0x4f, 0x91, 0xf4, 0x71, 0x89, 0xa4, 0x21, 0x08, 0x87, 0x7f, - 0x17, 0x42, 0x26, 0xbe, 0x8e, 0xc2, 0xf2, 0x84, 0xf6, 0xa8, 0x98, 0x78, 0x23, 0x0c, 0xbd, 0xc9, - 0x1f, 0x9e, 0xeb, 0xa2, 0x9b, 0xe0, 0x6d, 0x52, 0xb6, 0xb5, 0x0d, 0xdb, 0xbd, 0x6e, 0x75, 0x8f, - 0x8a, 0x55, 0x21, 0xbb, 0x2b, 0xec, 0x3f, 0xd0, 0xc8, 0x17, 0x7e, 0xa2, 0x11, 0x6d, 0xc3, 0x84, - 0x6e, 0x59, 0x58, 0x53, 0x38, 0x35, 0xd4, 0x5d, 0x36, 0x17, 0xc5, 0x30, 0x9b, 0xf3, 0x04, 0xce, - 0x77, 0xf7, 0xce, 0xdf, 0xe0, 0x73, 0xe5, 0x7f, 0xcc, 0x41, 0x7e, 0x03, 0xda, 0xd9, 0xdc, 0x36, - 0x86, 0x1a, 0xb2, 0x2b, 0x36, 0x18, 0xe6, 0x97, 0xa0, 0x61, 0x6a, 0xf6, 0xf7, 0x0c, 0xab, 0x13, - 0xad, 0x9b, 0xc5, 0xba, 0xd9, 0x55, 0x75, 0x77, 0x14, 0x6b, 0x55, 0xc5, 0x1c, 0x56, 0xcc, 0xad, - 0xaa, 0xd8, 0xb0, 0x3a, 0xab, 0x2a, 0xe6, 0xb1, 0x62, 0x7e, 0x55, 0xc5, 0x26, 0xbd, 0x4f, 0x66, - 0x55, 0xdd, 0x02, 0xd6, 0x2d, 0xac, 0xaa, 0xfb, 0x7c, 0xc6, 0x6c, 0xc8, 0x55, 0xb5, 0x8b, 0x58, - 0xbb, 0xb8, 0xb2, 0x67, 0xd5, 0xea, 0x68, 0xe4, 0xbd, 0xfa, 0x25, 0xac, 0x5f, 0x5a, 0x49, 0x2b, - 0x3c, 0xb1, 0x1b, 0xae, 0x9e, 0x61, 0x25, 0x22, 0x82, 0xb4, 0xed, 0x32, 0x17, 0x65, 0x25, 0x5b, - 0xc7, 0x31, 0x57, 0x63, 0xf9, 0xa8, 0x85, 0xaa, 0xb5, 0x60, 0xab, 0xc3, 0xbf, 0xcb, 0x44, 0x76, - 0x54, 0xf0, 0xb4, 0xd4, 0x0f, 0x59, 0xc8, 0x56, 0x97, 0x31, 0x23, 0x0a, 0xd4, 0xd4, 0x3f, 0x66, - 0xa1, 0x98, 0xba, 0xf7, 0xe4, 0x5e, 0xd5, 0xb4, 0x6b, 0x20, 0xcd, 0xa3, 0x31, 0xfa, 0x88, 0x32, - 0xd3, 0x3a, 0x8d, 0xea, 0xc0, 0x78, 0x84, 0x2e, 0x3b, 0x29, 0x02, 0xc8, 0xd4, 0x83, 0xeb, 0x63, - 0x92, 0x74, 0xff, 0x4a, 0x9a, 0xc5, 0xed, 0xf5, 0x2f, 0xdd, 0x9e, 0xd5, 0xdc, 0x63, 0xb7, 0x43, - 0x25, 0xd6, 0x51, 0x20, 0x44, 0xd4, 0x95, 0xc5, 0x3a, 0x9e, 0xb8, 0xa7, 0x94, 0x68, 0x5c, 0xdf, - 0x1c, 0x6d, 0xec, 0x3f, 0x08, 0xac, 0x74, 0xe8, 0x6e, 0x38, 0xa4, 0xfb, 0xaf, 0xcd, 0xe8, 0xa6, - 0x2f, 0x10, 0x97, 0xee, 0x4a, 0x62, 0x03, 0x18, 0x98, 0x34, 0x44, 0x65, 0x8a, 0xf4, 0xb7, 0xc5, - 0x10, 0xe6, 0x90, 0x6b, 0x6c, 0x07, 0x1a, 0xd6, 0x92, 0x4e, 0xe1, 0x8a, 0x12, 0xbc, 0xef, 0x86, - 0xae, 0xca, 0xf0, 0x80, 0xfb, 0x99, 0x31, 0xc2, 0x91, 0x7d, 0x75, 0x68, 0xeb, 0x63, 0xa1, 0x68, - 0xbb, 0x57, 0x52, 0xfa, 0xe3, 0x8d, 0x8a, 0x21, 0x2f, 0x15, 0x21, 0xe5, 0xef, 0x89, 0xc5, 0x08, - 0xfa, 0x4b, 0x9b, 0xdd, 0xd8, 0xd1, 0xde, 0xd4, 0xe7, 0xad, 0x15, 0xdb, 0xc3, 0xd6, 0x5b, 0x08, - 0x5c, 0xfa, 0x1e, 0x6c, 0x0e, 0xe3, 0xf1, 0x0c, 0xaa, 0xd5, 0xc3, 0xaf, 0x7b, 0x6a, 0x27, 0x91, - 0xdc, 0x0c, 0xbe, 0x48, 0x42, 0x1b, 0xdf, 0xa4, 0xda, 0x16, 0xe2, 0x02, 0xb5, 0xb7, 0x6d, 0x77, - 0x4f, 0x8f, 0xfd, 0x42, 0xb3, 0xa0, 0xc2, 0x02, 0xcd, 0x0b, 0x59, 0x3c, 0xd2, 0x8f, 0xd7, 0xcd, - 0xe3, 0x4f, 0x3e, 0x57, 0x14, 0x17, 0x54, 0x37, 0xfb, 0x95, 0x0a, 0xf4, 0x56, 0xd7, 0x06, 0x10, - 0x50, 0x4b, 0x4e, 0xad, 0x87, 0xf6, 0x9d, 0x0d, 0x93, 0xcd, 0xbf, 0x0f, 0x61, 0x63, 0xc9, 0xa8, - 0xf5, 0xe0, 0xa1, 0x0a, 0xa5, 0x4f, 0x63, 0x13, 0x31, 0x04, 0x73, 0x6b, 0x3d, 0xf5, 0x2b, 0x4a, - 0x84, 0xbe, 0x7b, 0x03, 0xaf, 0x17, 0x9d, 0x49, 0x0d, 0x66, 0xf4, 0xc6, 0x6f, 0xf2, 0x9c, 0x8b, - 0xf7, 0x62, 0xeb, 0x60, 0x6d, 0x85, 0xad, 0x9a, 0xe5, 0xe3, 0x1d, 0xeb, 0x08, 0xe1, 0xba, 0x4b, - 0x8e, 0x5c, 0xb9, 0xf2, 0xc7, 0xbc, 0x45, 0x77, 0x9a, 0xd3, 0xf8, 0xe1, 0xc6, 0xe6, 0x40, 0xb1, - 0x9a, 0x78, 0xa0, 0x8b, 0x72, 0x55, 0x4a, 0x6c, 0x88, 0xe9, 0x8e, 0x9b, 0xd4, 0xc0, 0xb3, 0x48, - 0x49, 0x8f, 0x1c, 0xbf, 0x22, 0x78, 0x6f, 0x74, 0xbc, 0x0b, 0xc3, 0x29, 0x5b, 0x84, 0x40, 0xf5, - 0x54, 0xee, 0x5e, 0x72, 0x33, 0xac, 0x0b, 0x1f, 0x58, 0x26, 0x1d, 0x1b, 0x49, 0x0e, 0xc0, 0x69, - 0x78, 0x77, 0xf3, 0xbd, 0xd3, 0x90, 0xb5, 0xb2, 0xa1, 0x6c, 0xd0, 0xd0, 0xce, 0x27, 0x1a, 0xea, - 0xaf, 0x6c, 0x28, 0x17, 0x34, 0xd4, 0xfc, 0x44, 0x43, 0xda, 0xca, 0x86, 0xf2, 0x41, 0x43, 0xbb, - 0x7e, 0x43, 0x9c, 0xe8, 0x12, 0x7e, 0x2d, 0x0f, 0x78, 0x4c, 0xd4, 0x85, 0xcb, 0xf8, 0xab, 0xe3, - 0x2e, 0xb4, 0xf8, 0x98, 0x8b, 0xb8, 0xd6, 0x63, 0x43, 0x2e, 0xb4, 0xd8, 0x70, 0x0b, 0x2d, 0x1a, - 0x6a, 0x01, 0x13, 0x21, 0x7a, 0xef, 0x84, 0x45, 0xc3, 0x48, 0xa2, 0x72, 0x4e, 0xd5, 0x43, 0x80, - 0xc3, 0x2b, 0x83, 0x25, 0x6a, 0xc8, 0xf4, 0xa6, 0x21, 0x0b, 0xa3, 0x37, 0x5d, 0x78, 0xe6, 0x07, - 0xbb, 0x2f, 0x48, 0xcc, 0x70, 0xf5, 0x62, 0xbe, 0x70, 0x6a, 0x3a, 0x53, 0x27, 0xd4, 0x93, 0x13, - 0xfb, 0x55, 0xd3, 0xe0, 0xa3, 0xa6, 0xf9, 0x1c, 0xdf, 0x9f, 0x3b, 0xa7, 0x51, 0xc2, 0x86, 0x6e, - 0xd4, 0xa6, 0x5f, 0x48, 0x15, 0x50, 0x5a, 0xa5, 0xd3, 0x69, 0x80, 0x81, 0x6d, 0x83, 0xf9, 0x84, - 0x04, 0x3b, 0x9f, 0x5e, 0x60, 0xee, 0x00, 0xc3, 0xe3, 0xa1, 0x09, 0x80, 0xd0, 0xe9, 0x6e, 0xfd, - 0x31, 0x1f, 0x6d, 0x8b, 0x2d, 0xea, 0xc1, 0x79, 0xc0, 0x98, 0x67, 0xfa, 0x74, 0xba, 0xb7, 0x2b, - 0xb2, 0xf3, 0x15, 0x5c, 0x29, 0x9e, 0x86, 0x00, 0xd7, 0xb6, 0x78, 0x8f, 0x7e, 0x32, 0x5a, 0x07, - 0x64, 0x08, 0x54, 0x5e, 0x2a, 0xc0, 0xae, 0xc4, 0x04, 0xbb, 0xdf, 0x2b, 0x14, 0xdb, 0x2e, 0x1a, - 0x41, 0x17, 0xbd, 0x1e, 0x1e, 0xef, 0xe6, 0xce, 0x74, 0x70, 0x20, 0xba, 0x84, 0xe4, 0x04, 0x72, - 0x78, 0x1d, 0x78, 0xf7, 0x7a, 0xf5, 0x3f, 0xe6, 0x89, 0xd1, 0xf6, 0x70, 0x52, 0xf3, 0x82, 0x1b, - 0x92, 0x1b, 0xd9, 0x05, 0x37, 0x7a, 0x9d, 0xc5, 0x92, 0x9d, 0x79, 0x4a, 0xf4, 0xc0, 0x02, 0xf5, - 0xbf, 0x40, 0x0b, 0x9d, 0xb1, 0x2f, 0xd0, 0x7a, 0x52, 0x9f, 0xc3, 0xe2, 0x03, 0x00, 0xc9, 0x07, - 0x00, 0x86, 0xe0, 0xe3, 0x81, 0xeb, 0x6e, 0x24, 0xa2, 0x34, 0xed, 0xd4, 0xe4, 0xe4, 0x3f, 0x00, - 0xb2, 0x80, 0xbd, 0x7a, 0x51, 0xf8, 0xc8, 0x9b, 0x1b, 0x8a, 0xa6, 0xf6, 0xf5, 0x1a, 0xca, 0x7c, - 0xcb, 0xc1, 0xd0, 0x7b, 0x5c, 0x2e, 0xb1, 0xd0, 0x20, 0x45, 0xc3, 0xd9, 0xc5, 0x54, 0x0f, 0x93, - 0x96, 0x31, 0xa5, 0x2d, 0xb1, 0xa0, 0x83, 0xa5, 0x45, 0xdf, 0xe8, 0x45, 0x31, 0xe7, 0xb8, 0xd8, - 0xe8, 0xbd, 0x87, 0x07, 0xe7, 0x52, 0x85, 0xe9, 0x0b, 0x3d, 0xb8, 0x3e, 0xdc, 0x2d, 0xc6, 0xa0, - 0x8f, 0xde, 0xd9, 0x20, 0x00, 0x6c, 0x89, 0x46, 0xe2, 0x21, 0x75, 0xe9, 0x7a, 0x4c, 0xf7, 0x88, - 0x9b, 0x9a, 0x7e, 0xf9, 0x30, 0x87, 0x7d, 0x30, 0x7a, 0xeb, 0x29, 0x2d, 0xb5, 0x6e, 0x3f, 0xbe, - 0x3b, 0x7e, 0xeb, 0xa9, 0xc4, 0x70, 0xb0, 0x91, 0xc5, 0x8d, 0x53, 0x0f, 0xbd, 0xf5, 0x94, 0x89, - 0x6f, 0x31, 0xc8, 0xd1, 0x06, 0x57, 0x8c, 0x92, 0x9b, 0xb7, 0x15, 0x80, 0xfa, 0x01, 0x60, 0xe4, - 0x23, 0xc0, 0x86, 0x83, 0x10, 0x50, 0x89, 0xfe, 0x32, 0x3f, 0x99, 0x35, 0x8c, 0x93, 0xf8, 0x9f, - 0x03, 0x2b, 0xac, 0xe6, 0x25, 0x50, 0x0f, 0x86, 0x1e, 0x13, 0x8d, 0xe1, 0xc1, 0x1f, 0x00, 0x16, - 0xcb, 0xe7, 0x8f, 0xec, 0x01, 0x5e, 0xad, 0x0b, 0x8b, 0xba, 0x8f, 0x7f, 0x0b, 0x8f, 0xcf, 0x72, - 0xef, 0xe1, 0xa1, 0x13, 0x3f, 0x35, 0xf7, 0xfa, 0x96, 0x19, 0x4b, 0xa4, 0x2c, 0xef, 0x42, 0xe2, - 0xb8, 0x12, 0xca, 0xff, 0x1b, 0x24, 0x82, 0x6d, 0x76, 0xde, 0x1d, 0xba, 0x28, 0x54, 0x50, 0xfe, - 0x1f, 0x81, 0xea, 0x13, 0x41, 0x06, 0xcc, 0x0b, 0xb7, 0x4a, 0xb7, 0xf5, 0x3f, 0x87, 0xeb, 0x7f, - 0xcc, 0x83, 0xae, 0xc2, 0xf1, 0x9f, 0xc6, 0xe6, 0xc6, 0xcb, 0xf3, 0x94, 0x87, 0x97, 0xdc, 0x81, - 0xd0, 0x0e, 0x5b, 0x70, 0x1a, 0xdb, 0x4c, 0x61, 0x4a, 0x40, 0x82, 0x2e, 0x0d, 0xbd, 0x24, 0x3c, - 0x7c, 0xfb, 0xd6, 0xdf, 0x30, 0xb7, 0xb2, 0xdf, 0xbe, 0x75, 0x37, 0x3a, 0x5b, 0xd9, 0xed, 0x23, - 0xca, 0x38, 0x09, 0x92, 0xa6, 0x37, 0x15, 0x5f, 0x13, 0x76, 0x92, 0xf8, 0xdb, 0xb7, 0x48, 0x02, - 0xf5, 0x70, 0x8a, 0xb5, 0x36, 0x2b, 0x0a, 0x76, 0xcf, 0xfe, 0x03, 0x2d, 0x43, 0x9f, 0xd2, 0x78, - 0x6c, 0x6b, 0xca, 0x05, 0xad, 0xb8, 0x86, 0x91, 0x98, 0xdc, 0x9e, 0xb9, 0xca, 0xc1, 0x3b, 0x9e, - 0x9b, 0x10, 0xd0, 0x6d, 0x67, 0x28, 0xba, 0xf0, 0xd2, 0x4f, 0x80, 0x98, 0x06, 0x0d, 0xbf, 0x60, - 0xce, 0x1d, 0xf7, 0x8e, 0x5a, 0x84, 0x17, 0x24, 0xee, 0xfb, 0x56, 0x0d, 0x9d, 0x54, 0x8e, 0x19, - 0xb1, 0x62, 0x6f, 0x4c, 0x7f, 0x26, 0xae, 0xa3, 0x4a, 0xef, 0x98, 0x21, 0xab, 0x06, 0x66, 0xd0, - 0x16, 0x46, 0xb5, 0x7c, 0xdc, 0x72, 0x9c, 0x63, 0x2e, 0xd4, 0x72, 0xc4, 0x35, 0x47, 0x5b, 0x46, - 0xd9, 0xf9, 0xfb, 0x56, 0x53, 0x17, 0x3f, 0x5b, 0x80, 0x66, 0xc1, 0x6a, 0x8e, 0x73, 0x21, 0xb3, - 0x98, 0x1a, 0xe7, 0x06, 0xa7, 0x5f, 0x13, 0x13, 0xac, 0x6f, 0xf7, 0xa2, 0x5b, 0x3c, 0xae, 0xce, - 0x45, 0xbf, 0x98, 0x9f, 0x62, 0xcc, 0xd0, 0x07, 0xe7, 0x83, 0xa8, 0xf5, 0xcf, 0x80, 0xd2, 0x0d, - 0x81, 0xb2, 0x4b, 0x43, 0xc4, 0x39, 0x00, 0xba, 0xbc, 0x81, 0xb9, 0xf5, 0x9b, 0x1f, 0x8a, 0x0e, - 0x59, 0xfe, 0xcb, 0xfa, 0x28, 0xb0, 0xa9, 0x85, 0xa2, 0x90, 0x9d, 0x7a, 0x5a, 0x78, 0x9b, 0x1a, - 0xcb, 0x11, 0xbd, 0xee, 0xfe, 0x09, 0xbf, 0x3d, 0xb2, 0x55, 0x67, 0x01, 0x99, 0x9b, 0xc1, 0x5d, - 0x06, 0x9a, 0x1b, 0x25, 0x08, 0xa6, 0x2a, 0xde, 0x46, 0x92, 0xf4, 0xce, 0x4a, 0x79, 0xef, 0xde, - 0xc7, 0x88, 0xf0, 0xd4, 0x9e, 0xbf, 0xf7, 0xa3, 0xd4, 0xe5, 0x4d, 0xe5, 0x7b, 0x1d, 0x91, 0xdc, - 0x54, 0x52, 0xa9, 0x64, 0x20, 0x65, 0x14, 0x7a, 0xac, 0x9e, 0xf7, 0xc2, 0xd3, 0x93, 0xa8, 0x94, - 0xff, 0x15, 0x74, 0xeb, 0xff, 0x4a, 0xfa, 0x1d, 0xf6, 0x2d, 0x31, 0xa5, 0xac, 0x0a, 0x5d, 0xfc, - 0xc2, 0xd7, 0x03, 0x60, 0x7e, 0xf9, 0x90, 0xc0, 0x0c, 0xff, 0x1c, 0xc0, 0x59, 0x76, 0x8d, 0x8f, - 0xbb, 0xa1, 0xf4, 0x3d, 0x17, 0x94, 0xec, 0x77, 0xc1, 0xba, 0x05, 0xe0, 0x57, 0x75, 0x0e, 0x42, - 0x95, 0xbb, 0x0a, 0xd2, 0xab, 0x24, 0xe3, 0xae, 0x84, 0x7b, 0x7e, 0x2c, 0xe9, 0x43, 0xd1, 0x37, - 0xe5, 0x95, 0x91, 0x95, 0xd2, 0x17, 0xea, 0xf1, 0xff, 0xa2, 0xb1, 0xcb, 0x4e, 0xc2, 0xcb, 0x29, - 0xdf, 0x3c, 0x43, 0x14, 0x41, 0x5a, 0xd8, 0xde, 0xf9, 0xe0, 0x24, 0xac, 0xb7, 0xa9, 0x55, 0xa5, - 0x88, 0x5f, 0xea, 0xbb, 0xa7, 0x0e, 0x06, 0x10, 0x59, 0xcb, 0xd8, 0xc5, 0x85, 0x8f, 0xfa, 0x9f, - 0x3a, 0x8a, 0x86, 0xdc, 0x7a, 0x24, 0x03, 0xf9, 0x19, 0xbe, 0xe0, 0x4f, 0x0a, 0x5f, 0x47, 0x82, - 0x61, 0xb4, 0xa6, 0x9d, 0x44, 0x37, 0x03, 0x3e, 0x70, 0xe7, 0x59, 0xd8, 0x89, 0x85, 0xf5, 0x53, - 0xba, 0x45, 0x56, 0x73, 0x43, 0xf7, 0x96, 0x9d, 0x72, 0x76, 0x9f, 0x17, 0x33, 0x91, 0xa0, 0x35, - 0xb6, 0xbf, 0xf6, 0x9f, 0xeb, 0x35, 0x9f, 0x06, 0xd4, 0x09, 0xc0, 0xb0, 0xc6, 0x79, 0xb5, 0xbe, - 0xe9, 0x47, 0x67, 0xd2, 0x83, 0x33, 0x02, 0x03, 0x83, 0x6e, 0x24, 0xd2, 0x63, 0x2f, 0x61, 0x6f, - 0xdc, 0x1f, 0x73, 0x27, 0xad, 0x76, 0x17, 0xf0, 0x4b, 0x63, 0x41, 0xfd, 0x9d, 0xc9, 0x3a, 0x26, - 0x2f, 0xb9, 0xe7, 0xa8, 0xd3, 0x8f, 0xe5, 0xb8, 0x7e, 0x0d, 0xb1, 0x86, 0xaf, 0xdf, 0xb3, 0xf2, - 0xb6, 0xf7, 0x5d, 0xa5, 0x14, 0x26, 0x78, 0xdb, 0x7b, 0xb5, 0xc8, 0x7e, 0xe0, 0x0f, 0xcc, 0xdc, - 0xc8, 0xca, 0x78, 0x20, 0xc6, 0x75, 0xee, 0xfd, 0xda, 0x24, 0xf4, 0xbc, 0x62, 0xc8, 0xc5, 0xe7, - 0x1e, 0x5c, 0x74, 0x9b, 0x0c, 0x1d, 0x6b, 0x89, 0xe4, 0xac, 0x1a, 0x4d, 0xee, 0x04, 0x4d, 0x4c, - 0x59, 0x8e, 0x1f, 0x97, 0x37, 0x7c, 0xfd, 0xb3, 0x60, 0xee, 0xd9, 0x24, 0xea, 0x65, 0x94, 0xe8, - 0xb6, 0x2f, 0xf1, 0x8e, 0x50, 0xf9, 0x9b, 0xd3, 0x78, 0xa4, 0xd6, 0xf9, 0x4e, 0xdc, 0x61, 0xde, - 0x74, 0x60, 0xe2, 0x93, 0x1f, 0xce, 0xcf, 0xfa, 0x5c, 0xed, 0xd6, 0xf0, 0x01, 0x63, 0x5e, 0xd1, - 0xa4, 0x64, 0x2f, 0xd9, 0x9f, 0x0b, 0x6c, 0x83, 0x3f, 0xc7, 0x44, 0x9d, 0x94, 0xf4, 0xee, 0x22, - 0x8d, 0xe0, 0x15, 0xa4, 0x8a, 0x45, 0x12, 0x0e, 0x4d, 0x4c, 0x62, 0x64, 0xa8, 0x77, 0x46, 0x0b, - 0xdb, 0x93, 0x59, 0x4b, 0x62, 0x0b, 0x2f, 0xad, 0x11, 0x17, 0x01, 0x10, 0xf4, 0x2a, 0x11, 0xe2, - 0x71, 0x18, 0x5e, 0xd1, 0x24, 0xe9, 0xf0, 0x83, 0xa5, 0x31, 0x90, 0x40, 0xd2, 0xdc, 0xe0, 0x5d, - 0x96, 0x04, 0xd4, 0xec, 0x92, 0xe9, 0x45, 0x2f, 0x21, 0x5e, 0xb7, 0xee, 0x76, 0xc5, 0xe4, 0x77, - 0x99, 0x1e, 0xb3, 0x09, 0xb3, 0x31, 0x3b, 0x00, 0x86, 0x07, 0x33, 0xd9, 0x59, 0x31, 0x97, 0x8d, - 0xb1, 0x13, 0xbc, 0xa3, 0x8b, 0xa5, 0xe2, 0xb1, 0x12, 0x96, 0xb1, 0x2d, 0x6e, 0x6e, 0x7e, 0xd9, - 0xcc, 0x82, 0xbe, 0xe1, 0x65, 0x6c, 0x32, 0xea, 0x60, 0xe0, 0xa8, 0xb6, 0xfd, 0xe3, 0x67, 0x4d, - 0x03, 0x2d, 0x4c, 0x53, 0xf1, 0xb0, 0x19, 0xbd, 0x62, 0xcc, 0x71, 0x2b, 0x7e, 0xcf, 0xff, 0xf5, - 0x17, 0x0d, 0x2e, 0xa5, 0xa7, 0xaa, 0xa0, 0x1c, 0xfe, 0x7a, 0x45, 0x25, 0x7a, 0xcd, 0x87, 0x37, - 0x83, 0xbe, 0x7d, 0x13, 0xf1, 0xaa, 0x56, 0x0c, 0x23, 0xa6, 0x37, 0xb1, 0x7a, 0xf7, 0xe1, 0x62, - 0x42, 0xd2, 0x3d, 0x3a, 0x1c, 0x7c, 0x61, 0xdc, 0xdb, 0xe0, 0xf6, 0x3b, 0x2a, 0xf8, 0x1d, 0xe5, - 0x7f, 0x6e, 0x83, 0x02, 0x5b, 0xc3, 0x87, 0x4d, 0x99, 0x5e, 0x61, 0x90, 0x50, 0xf0, 0x4a, 0x05, - 0x49, 0xe1, 0xfa, 0x4a, 0x28, 0x7c, 0x44, 0xae, 0x18, 0x74, 0xc0, 0xbe, 0x0c, 0x8e, 0x85, 0x83, - 0xfc, 0x2c, 0x9f, 0x4f, 0x3f, 0xcc, 0x1d, 0xc9, 0x4f, 0x17, 0xbb, 0x1f, 0x14, 0xc9, 0x71, 0xf9, - 0xec, 0xd3, 0xd9, 0xe1, 0xfc, 0x31, 0x9f, 0x4f, 0x3f, 0x5c, 0x1d, 0xce, 0xef, 0x85, 0xf3, 0x8b, - 0x9b, 0x18, 0xc4, 0xee, 0xa4, 0xea, 0xde, 0x17, 0x45, 0x90, 0xef, 0xf1, 0xc4, 0xc9, 0xa1, 0x33, - 0xd4, 0xa0, 0xf4, 0x54, 0x94, 0x88, 0xa4, 0x4b, 0xa8, 0xc6, 0x80, 0xd2, 0x26, 0x89, 0xc0, 0x24, - 0xc9, 0x05, 0x5b, 0x38, 0xdd, 0xaf, 0xde, 0x87, 0xd6, 0xcd, 0x98, 0xc3, 0x64, 0xfe, 0x31, 0x51, - 0x76, 0xa2, 0xd4, 0x3f, 0x5c, 0xe8, 0xbe, 0x45, 0xce, 0xea, 0x45, 0x39, 0x9c, 0x1e, 0xe6, 0x72, - 0xcb, 0x7a, 0x3c, 0xfe, 0x43, 0x96, 0x7c, 0xb9, 0xf2, 0xd3, 0xbb, 0x35, 0x0b, 0x38, 0xd7, 0x9f, - 0x6b, 0xc8, 0xe6, 0xb4, 0x0a, 0x8a, 0xb2, 0x78, 0xc4, 0xdc, 0xb3, 0xb2, 0xa2, 0x84, 0x27, 0xf0, - 0x24, 0xec, 0x86, 0xe2, 0x78, 0xe9, 0x25, 0x87, 0x14, 0x68, 0xf4, 0xcb, 0x9b, 0x74, 0x4f, 0xd8, - 0x35, 0xbf, 0xfe, 0x98, 0xe3, 0xc7, 0x60, 0x14, 0xed, 0x12, 0x12, 0x9b, 0xb6, 0x9d, 0xc0, 0x46, - 0x92, 0xfe, 0xc1, 0xa1, 0x5f, 0x74, 0xed, 0x64, 0x87, 0x85, 0x60, 0x59, 0x8d, 0x12, 0x89, 0xe0, - 0xca, 0xc6, 0xee, 0x86, 0xf6, 0x02, 0x43, 0x60, 0x48, 0xfc, 0xa3, 0x1a, 0x1d, 0xa8, 0x43, 0xbd, - 0x39, 0x49, 0x3f, 0xb0, 0x05, 0x64, 0x07, 0xf9, 0xbe, 0x5c, 0x00, 0x24, 0x62, 0xca, 0x0b, 0x5d, - 0x59, 0xba, 0x87, 0x0d, 0x00, 0xf1, 0x8f, 0xfc, 0xf9, 0x40, 0xf0, 0x97, 0xa5, 0xe1, 0x05, 0x2e, - 0x69, 0x63, 0xe4, 0xb8, 0x50, 0x7d, 0x40, 0x26, 0x58, 0xd5, 0x37, 0x88, 0x24, 0xfe, 0xb7, 0xe0, - 0x7e, 0x46, 0x54, 0x4c, 0xa1, 0xc8, 0xf8, 0x6f, 0xf1, 0x7f, 0x42, 0x35, 0xda, 0x26, 0x4f, 0x36, - 0x2e, 0xaa, 0xc6, 0xc2, 0x20, 0xb8, 0x89, 0x5b, 0x38, 0xe1, 0x89, 0xac, 0x98, 0x9b, 0x9d, 0xc4, - 0xaf, 0x2e, 0x7a, 0x42, 0x9a, 0x1e, 0xc6, 0x4b, 0x6e, 0xf2, 0xe7, 0x41, 0x05, 0x12, 0xc4, 0xf7, - 0x10, 0x98, 0xe3, 0xa1, 0xea, 0x09, 0x31, 0xed, 0xc3, 0xc8, 0x2e, 0x55, 0x73, 0x2f, 0x29, 0xae, - 0x47, 0x46, 0xd7, 0xbf, 0x0e, 0x5a, 0xed, 0x26, 0x79, 0x20, 0xc3, 0xc5, 0xd8, 0x71, 0x49, 0xfe, - 0x33, 0x0a, 0xc1, 0xa5, 0x35, 0x41, 0x1a, 0x8a, 0x3c, 0x3c, 0xac, 0xe8, 0x78, 0x17, 0x6c, 0xb8, - 0x8a, 0x43, 0x4d, 0xa0, 0x5a, 0xc2, 0x66, 0xb6, 0xee, 0x8b, 0x22, 0x3c, 0x41, 0x04, 0x8c, 0x59, - 0xa7, 0x2c, 0x1a, 0x16, 0xbb, 0x74, 0x5e, 0xb8, 0xf9, 0x78, 0x6c, 0x0c, 0x48, 0x99, 0xf4, 0x6e, - 0x3f, 0x72, 0x4f, 0x4a, 0x06, 0x9c, 0xe3, 0xb5, 0xc7, 0xf8, 0x85, 0xad, 0xf9, 0x5a, 0xdd, 0xf1, - 0x84, 0xaf, 0x22, 0x19, 0x92, 0x2a, 0x59, 0x78, 0x59, 0xfb, 0x92, 0x78, 0xd7, 0x92, 0x49, 0x8b, - 0x3f, 0xae, 0x82, 0xc7, 0x27, 0x33, 0xd0, 0xd9, 0x9f, 0x78, 0x58, 0x45, 0x62, 0x47, 0x28, 0x25, - 0xa3, 0x8e, 0xd7, 0x2b, 0x4a, 0x6a, 0x1d, 0xef, 0x4e, 0xdc, 0xa4, 0x0b, 0x2a, 0x34, 0x24, 0x5a, - 0x28, 0xd2, 0x93, 0x0a, 0xc2, 0xe6, 0x9e, 0x19, 0x51, 0xf4, 0xae, 0x31, 0x4c, 0x60, 0xfc, 0xd0, - 0x72, 0x9a, 0xba, 0x9c, 0x46, 0x9b, 0x72, 0x87, 0x0e, 0x3b, 0xda, 0xc8, 0xba, 0x67, 0x41, 0xd9, - 0xc5, 0x50, 0x36, 0x53, 0x58, 0x81, 0x97, 0x2d, 0xa2, 0x6f, 0x2a, 0x5c, 0xb0, 0x13, 0xae, 0x37, - 0xde, 0x90, 0x59, 0xd8, 0x5d, 0x7c, 0x56, 0x1f, 0x7b, 0x8d, 0xcf, 0x6a, 0x27, 0x17, 0x5f, 0x60, - 0x24, 0xea, 0x16, 0x3d, 0x54, 0xc1, 0x9f, 0xd7, 0xc9, 0x78, 0xd4, 0xa4, 0x24, 0xc0, 0x8b, 0xa1, - 0x68, 0xec, 0x92, 0x7b, 0xf1, 0xb5, 0x82, 0x77, 0x5e, 0x1b, 0xf8, 0x47, 0x5d, 0x24, 0xf1, 0xf6, - 0xed, 0xc5, 0xbf, 0x80, 0xad, 0xdd, 0x2b, 0x78, 0x82, 0xc8, 0xc6, 0x9a, 0x10, 0xbd, 0xb0, 0x1b, - 0xbf, 0x93, 0x82, 0xde, 0x34, 0x09, 0x2f, 0x77, 0x7c, 0x36, 0x54, 0x7a, 0x85, 0xda, 0xe6, 0xaf, - 0x30, 0xb3, 0x2d, 0x4f, 0x50, 0x7a, 0xcd, 0x0f, 0xc8, 0x67, 0x5c, 0xb9, 0x25, 0x25, 0x74, 0xdf, - 0x4f, 0x64, 0x26, 0x32, 0x9d, 0x0c, 0x55, 0x35, 0xfa, 0xc1, 0x1d, 0xd7, 0x8b, 0x48, 0x77, 0x0b, - 0xd1, 0x2e, 0xc3, 0xdb, 0x7e, 0x70, 0x3b, 0x8f, 0x2e, 0x7d, 0x0a, 0x3d, 0xc0, 0x41, 0xf3, 0x40, - 0xfb, 0x42, 0x9f, 0x96, 0x82, 0xbe, 0xab, 0xf5, 0x85, 0xa1, 0x37, 0x99, 0x91, 0xf6, 0xc7, 0x5c, - 0x5f, 0xd0, 0x7b, 0xbe, 0x93, 0xfe, 0xee, 0xa2, 0x6b, 0xcf, 0xb9, 0xa9, 0x5e, 0xd7, 0x88, 0x9f, - 0xe1, 0x6e, 0x36, 0x7e, 0xb4, 0xf5, 0x15, 0xd9, 0x8d, 0xa4, 0x55, 0x39, 0xff, 0x0c, 0x02, 0x88, - 0x7a, 0x09, 0x3e, 0x93, 0x85, 0x18, 0xde, 0x65, 0xa4, 0x85, 0xc3, 0xf6, 0x72, 0x84, 0x00, 0xfe, - 0x17, 0x39, 0x43, 0xf5, 0xfc, 0x53, 0xb6, 0x5b, 0xec, 0xae, 0xa3, 0xd0, 0x26, 0x8c, 0x1b, 0xbd, - 0x01, 0xb6, 0xbb, 0x6f, 0x32, 0xfa, 0xc3, 0xd1, 0x46, 0x20, 0x71, 0xce, 0xbb, 0x51, 0x68, 0xc4, - 0x8d, 0x40, 0xcb, 0xe7, 0x6a, 0xee, 0xc4, 0xde, 0x6b, 0x5d, 0xe6, 0x73, 0xa2, 0x1b, 0x5f, 0x96, - 0x0f, 0xa5, 0x6e, 0xb4, 0xfc, 0x8c, 0x42, 0x24, 0x23, 0xef, 0x65, 0x14, 0xc3, 0x19, 0x4d, 0x2f, - 0xa3, 0xc2, 0x77, 0x50, 0xc9, 0x95, 0x4a, 0xa2, 0xcb, 0x5f, 0xe2, 0x36, 0x0f, 0x9e, 0x1e, 0xba, - 0x40, 0x47, 0xc4, 0xc0, 0x4a, 0x7a, 0xe1, 0x05, 0xa6, 0x6f, 0x83, 0x6e, 0x67, 0xd6, 0xd8, 0x33, - 0x77, 0x5d, 0x0e, 0xc8, 0x51, 0x3c, 0x46, 0xc8, 0x98, 0x2a, 0x19, 0xbe, 0x18, 0xd1, 0xcb, 0x44, - 0x75, 0x00, 0x73, 0x25, 0x76, 0x49, 0x41, 0x70, 0x3f, 0x01, 0xf1, 0xee, 0x25, 0x00, 0xcd, 0x3e, - 0xb8, 0x93, 0xe0, 0xf2, 0xa2, 0x75, 0x23, 0x4a, 0x78, 0x61, 0x28, 0xc1, 0xaf, 0x88, 0xe0, 0xe5, - 0x65, 0x38, 0x08, 0x1b, 0x37, 0x40, 0x3c, 0x60, 0x41, 0xbc, 0x17, 0x52, 0x65, 0xb7, 0x71, 0xd2, - 0xca, 0xe2, 0x42, 0x6a, 0x1b, 0xdd, 0x59, 0x2d, 0x72, 0xca, 0xd5, 0x4e, 0x72, 0xf7, 0x1a, 0x84, - 0xe1, 0xc2, 0x54, 0x58, 0x2c, 0x30, 0x8a, 0x99, 0xdd, 0x6a, 0xe8, 0x7e, 0x13, 0xea, 0xfd, 0x0a, - 0xec, 0x72, 0x10, 0x12, 0xba, 0x88, 0xa1, 0xdb, 0x35, 0x71, 0x3d, 0xa1, 0x42, 0x1c, 0x6a, 0xf4, - 0x54, 0x6b, 0x98, 0xa0, 0x77, 0x36, 0xd9, 0xc2, 0x23, 0xb1, 0x33, 0x17, 0x27, 0x20, 0xd4, 0xf0, - 0x26, 0x1a, 0x7a, 0x73, 0x8b, 0x30, 0x19, 0x28, 0x0e, 0x7d, 0x03, 0x2d, 0x45, 0xe8, 0xc2, 0x7c, - 0xed, 0x7f, 0x01, 0x45, 0xca, 0xbf, 0x8b, 0x00, 0x63, 0x51, 0x13, 0xaa, 0x4e, 0x23, 0x34, 0x69, - 0x2c, 0x5b, 0x5d, 0x96, 0x68, 0xd4, 0x33, 0x7e, 0xcc, 0xc6, 0xfb, 0x9c, 0x46, 0x32, 0x89, 0x3a, - 0x36, 0xac, 0xe8, 0xaa, 0xf9, 0x25, 0x38, 0xaa, 0xa9, 0x9a, 0x68, 0xf0, 0x86, 0x2e, 0x86, 0x93, - 0xd8, 0x07, 0xbf, 0xf1, 0x70, 0x30, 0x7b, 0x62, 0xf1, 0x71, 0x75, 0x16, 0x38, 0xe7, 0x26, 0x81, - 0x54, 0xaa, 0xbb, 0xed, 0x71, 0xc7, 0x4a, 0xdd, 0x4c, 0x53, 0xf5, 0x33, 0x55, 0xd3, 0x53, 0x9b, - 0xff, 0xbf, 0xe6, 0xbe, 0x6d, 0xb9, 0x6d, 0x24, 0x69, 0xf3, 0xfe, 0x7f, 0x0a, 0x0a, 0xdd, 0x2d, - 0x01, 0x26, 0x44, 0x91, 0x94, 0xdd, 0xe3, 0x26, 0x05, 0x32, 0x6c, 0xd9, 0xee, 0x56, 0xfc, 0xb6, - 0x5b, 0x6b, 0x79, 0xba, 0xdb, 0xa1, 0x51, 0x8c, 0x20, 0x12, 0x94, 0xf0, 0x1b, 0x02, 0xd8, 0x00, - 0x74, 0xf0, 0x50, 0x7c, 0x8d, 0x8d, 0xd8, 0xbd, 0xd9, 0xab, 0xdd, 0x8b, 0xdd, 0xb7, 0xda, 0x27, - 0xd8, 0x47, 0xd8, 0x3c, 0x54, 0x15, 0xaa, 0x70, 0x20, 0xa9, 0x76, 0xcf, 0xec, 0x4e, 0x4c, 0x5b, - 0x44, 0xa1, 0xaa, 0x50, 0x87, 0xac, 0xac, 0xac, 0xac, 0xcc, 0xfc, 0x3a, 0x96, 0xac, 0xb9, 0xc3, - 0x6d, 0xa3, 0x7f, 0xdb, 0x6d, 0x99, 0x08, 0xcb, 0x13, 0x63, 0x15, 0xc9, 0x4f, 0x7e, 0x0e, 0xe7, - 0xd8, 0x0b, 0x7e, 0xa2, 0x25, 0xfa, 0xbc, 0x5b, 0x64, 0x9d, 0x69, 0x59, 0x81, 0x17, 0xa2, 0x6f, - 0x3e, 0xf4, 0x9f, 0x99, 0x23, 0x27, 0x3b, 0x3c, 0x12, 0xed, 0x6a, 0x2b, 0x9d, 0xa1, 0xa2, 0x3d, - 0x6d, 0x18, 0x5c, 0x6b, 0x82, 0x31, 0xe8, 0x17, 0x57, 0x77, 0x03, 0xd8, 0x04, 0xa6, 0x83, 0x05, - 0xd4, 0x37, 0x80, 0xff, 0x96, 0xcb, 0xa5, 0xbe, 0x09, 0x9f, 0xdc, 0xcc, 0x83, 0xf4, 0xe4, 0x4b, - 0x3c, 0xf9, 0xba, 0xa9, 0xc3, 0x99, 0x0b, 0x61, 0xbb, 0x0c, 0x0f, 0xd4, 0xfc, 0xc8, 0x6d, 0x33, - 0x84, 0x6d, 0x53, 0x25, 0x9e, 0x86, 0x67, 0x0d, 0x93, 0x66, 0x7d, 0x01, 0x32, 0xf4, 0x84, 0xa5, - 0x6c, 0x76, 0x63, 0xb5, 0x43, 0x21, 0xf5, 0x7d, 0x0c, 0xee, 0xd1, 0xbf, 0x58, 0xf5, 0xb1, 0xae, - 0xae, 0x72, 0x67, 0x8d, 0x3c, 0xa8, 0xfe, 0xb8, 0xba, 0xc3, 0x01, 0x83, 0xae, 0xbb, 0x1b, 0xd5, - 0x43, 0x71, 0x01, 0xab, 0xb5, 0x50, 0xf2, 0xfa, 0x3a, 0x28, 0x22, 0x11, 0xd4, 0x92, 0x5e, 0x20, - 0x0e, 0x4f, 0x9d, 0x97, 0x2b, 0x2f, 0x33, 0x82, 0x5e, 0x61, 0xa9, 0x03, 0xf6, 0x9f, 0x18, 0xff, - 0x81, 0x63, 0x5f, 0x11, 0xc1, 0xc3, 0xd7, 0x38, 0x10, 0xf9, 0x0b, 0xdc, 0x0b, 0xa8, 0x8f, 0x2f, - 0x6d, 0xcb, 0x69, 0xed, 0x92, 0x39, 0xf8, 0x5d, 0xdb, 0xba, 0xc7, 0xbf, 0xec, 0x5e, 0x80, 0x70, - 0x1d, 0xe3, 0x1e, 0x6a, 0x6f, 0x10, 0xe0, 0x43, 0xfd, 0xba, 0x55, 0xbf, 0x32, 0xfa, 0xa5, 0x05, - 0xb3, 0x24, 0xce, 0xab, 0xaf, 0x70, 0x02, 0x9f, 0x91, 0xbc, 0xaa, 0xe8, 0x1f, 0x46, 0x2a, 0x63, - 0x59, 0x19, 0x04, 0x1d, 0x9a, 0xa4, 0x5b, 0x38, 0x1d, 0xb7, 0x03, 0x6d, 0x92, 0xb4, 0x09, 0xbd, - 0xa5, 0xd8, 0x0d, 0x46, 0x36, 0x23, 0xa6, 0x72, 0xc2, 0x16, 0xb0, 0x42, 0x1b, 0x84, 0x50, 0x6c, - 0x8d, 0x35, 0x05, 0xa9, 0xaa, 0x49, 0x64, 0x5b, 0x51, 0x53, 0x86, 0xa7, 0x9f, 0x5d, 0x54, 0x96, - 0x95, 0xea, 0xd3, 0x3b, 0x52, 0x4c, 0xe5, 0xa9, 0x56, 0xe0, 0x4c, 0xe9, 0xe8, 0x8c, 0x3a, 0x56, - 0x7c, 0x6c, 0x36, 0xcf, 0xd6, 0x7e, 0x86, 0xe9, 0x0e, 0xbd, 0xec, 0x64, 0xf5, 0xb2, 0x54, 0x7d, - 0xc5, 0x4d, 0x15, 0xb0, 0xd3, 0x38, 0x1e, 0x3d, 0xf5, 0x0c, 0x25, 0x46, 0x70, 0xdc, 0xdc, 0x00, - 0xe1, 0x74, 0x0e, 0xdb, 0x33, 0x48, 0x85, 0x20, 0x85, 0x76, 0xee, 0x9e, 0x6c, 0x9c, 0xf5, 0x4a, - 0x84, 0x4e, 0x13, 0x3a, 0xa1, 0xf9, 0xa4, 0xda, 0xfe, 0x14, 0xed, 0xd5, 0xf9, 0xfd, 0x75, 0x7a, - 0xdf, 0x38, 0x99, 0x86, 0x8b, 0x3c, 0x11, 0x6e, 0xed, 0x2b, 0xf3, 0x83, 0xb2, 0xc2, 0xa6, 0x0f, - 0xce, 0xe3, 0xa8, 0x5b, 0xfe, 0xa2, 0x7c, 0xf1, 0x9b, 0xf9, 0xc2, 0xa8, 0x57, 0x95, 0x5b, 0x51, - 0xf1, 0xa1, 0x59, 0x7e, 0xd4, 0x2f, 0xd7, 0x70, 0xd8, 0x50, 0x83, 0xa4, 0x47, 0x64, 0x64, 0x7a, - 0x0d, 0x28, 0x43, 0x22, 0xa3, 0x43, 0xad, 0xa6, 0x55, 0x84, 0x07, 0x93, 0xf9, 0xaa, 0x15, 0x69, - 0x71, 0x0b, 0x81, 0x5f, 0x64, 0x6e, 0xe2, 0x2c, 0x28, 0xf2, 0x18, 0xde, 0x2d, 0x1a, 0xbe, 0x1b, - 0xa7, 0x16, 0x30, 0x77, 0x60, 0x0f, 0x68, 0x17, 0xef, 0x5a, 0xe1, 0x1c, 0xfe, 0xc1, 0x5d, 0x06, - 0xa3, 0xd9, 0x07, 0x18, 0x9f, 0x1f, 0x57, 0x8f, 0x4b, 0xab, 0xd1, 0x25, 0xbd, 0x84, 0x46, 0xe7, - 0xae, 0x75, 0x39, 0x41, 0xac, 0x00, 0x24, 0x4d, 0xfa, 0x17, 0x73, 0xe2, 0x3c, 0xc3, 0xbf, 0xb7, - 0xf8, 0x2f, 0x4e, 0x81, 0xcb, 0x03, 0xe6, 0x72, 0xaf, 0x5d, 0x1e, 0x5d, 0x97, 0x5a, 0x7e, 0xe6, - 0xc4, 0xa8, 0xf3, 0xcc, 0xa7, 0x2d, 0x96, 0x85, 0x03, 0x8a, 0x7c, 0x29, 0x6f, 0xf5, 0x86, 0x1c, - 0x29, 0x0d, 0x1b, 0xcc, 0x62, 0xcf, 0x8b, 0x78, 0xfa, 0xfa, 0x3e, 0x98, 0xc0, 0xd9, 0xd9, 0x3e, - 0x17, 0x02, 0x10, 0x96, 0xd9, 0x3b, 0x77, 0x2d, 0x12, 0x81, 0xb2, 0x10, 0xfd, 0xfc, 0x6c, 0xd9, - 0x71, 0x1b, 0x24, 0x74, 0x3e, 0x82, 0x86, 0x7a, 0x0c, 0x9d, 0xd8, 0x21, 0xf2, 0x87, 0x93, 0x97, - 0x99, 0x48, 0xcc, 0xd7, 0x9d, 0xc0, 0x31, 0x90, 0x08, 0xfc, 0x34, 0x3b, 0x63, 0x03, 0xc5, 0x69, - 0xbd, 0x81, 0x22, 0x7c, 0xd9, 0xd3, 0x37, 0x22, 0x65, 0x6f, 0x50, 0x71, 0xa4, 0xc2, 0x43, 0xb5, - 0xb0, 0x39, 0x28, 0xa2, 0x14, 0x05, 0xba, 0x71, 0x8f, 0x0a, 0x8d, 0x2e, 0xc2, 0x3c, 0xee, 0x68, - 0xbd, 0xdb, 0xe1, 0x30, 0x45, 0x93, 0x4a, 0x8c, 0x22, 0x9c, 0xb5, 0x76, 0xa6, 0x6b, 0x38, 0xa6, - 0x02, 0x60, 0x60, 0x5e, 0xa4, 0x13, 0xe9, 0x08, 0xa5, 0x2c, 0x4e, 0xb0, 0x59, 0x60, 0x23, 0xbf, - 0x6c, 0xb5, 0x67, 0xfd, 0x6d, 0x67, 0xa7, 0x1d, 0x76, 0xd0, 0xf1, 0x6c, 0xc7, 0xdd, 0xa1, 0xd1, - 0xda, 0x71, 0x17, 0x3b, 0x49, 0x0c, 0x3d, 0x6b, 0xdb, 0x29, 0x5d, 0x47, 0x6e, 0xea, 0x9b, 0xcd, - 0xb9, 0x37, 0x71, 0xcb, 0xe6, 0xa6, 0x13, 0x41, 0x9a, 0x9d, 0x0a, 0xc9, 0x37, 0xce, 0x2d, 0xb6, - 0x8a, 0xd2, 0x5b, 0x48, 0xe3, 0x97, 0x48, 0xc5, 0xe5, 0x97, 0x90, 0xa6, 0xed, 0x20, 0xe5, 0x92, - 0x41, 0x2a, 0x38, 0x16, 0xd0, 0x70, 0xf9, 0xa5, 0x26, 0xe3, 0x15, 0x5c, 0xad, 0x31, 0xcf, 0xb1, - 0x62, 0xf8, 0x69, 0x7d, 0x2e, 0x78, 0x23, 0xb2, 0xdc, 0x97, 0x27, 0xad, 0xc6, 0x78, 0x36, 0xc5, - 0x8b, 0x18, 0xe4, 0xac, 0x33, 0x69, 0x3d, 0x5b, 0xf0, 0xe2, 0xec, 0xec, 0xe1, 0xc1, 0xd6, 0x1f, - 0x41, 0x6c, 0x75, 0x8c, 0xf7, 0x44, 0xf6, 0x5e, 0xe8, 0x86, 0x3a, 0xcf, 0x94, 0x8c, 0x84, 0x98, - 0x65, 0x5d, 0x0b, 0x0d, 0xae, 0x6b, 0xa6, 0x5d, 0x39, 0x6b, 0xd7, 0x25, 0x6e, 0x0f, 0x2c, 0xf5, - 0x6f, 0xb2, 0x30, 0x95, 0xfe, 0x4e, 0xdb, 0x4a, 0xcb, 0x6d, 0xaa, 0x6c, 0xbf, 0x3c, 0x7e, 0xc8, - 0x88, 0x6a, 0xf3, 0x76, 0x2e, 0x27, 0xc8, 0x17, 0x47, 0x3d, 0x6d, 0xef, 0x2d, 0xe5, 0x2b, 0xf6, - 0x5a, 0x37, 0xac, 0xec, 0x9b, 0x1a, 0xcb, 0x37, 0x8a, 0xf9, 0x76, 0xd8, 0xb4, 0xf1, 0x19, 0xdb, - 0x40, 0xfd, 0xb7, 0x8c, 0x22, 0x42, 0xe0, 0x75, 0x4d, 0x86, 0xe2, 0x48, 0xf5, 0x59, 0x57, 0xb1, - 0xeb, 0x18, 0x7e, 0xc7, 0x07, 0x11, 0x30, 0xc6, 0xb6, 0x83, 0xc1, 0x3e, 0x0e, 0x56, 0xd6, 0xb7, - 0xbd, 0x2d, 0x59, 0x59, 0x7c, 0x56, 0x16, 0x9b, 0xa5, 0xfe, 0xb2, 0xa1, 0x0f, 0xc1, 0xd9, 0x50, - 0xdb, 0x09, 0x63, 0xb3, 0xdf, 0xb9, 0x4e, 0x56, 0xb1, 0x49, 0x76, 0x71, 0x99, 0xec, 0x62, 0x12, - 0x11, 0xe0, 0xc8, 0x94, 0xde, 0x4c, 0x40, 0x1e, 0x0d, 0xa6, 0x87, 0x51, 0x12, 0x07, 0x76, 0x58, - 0xcd, 0x53, 0x6a, 0xc9, 0x85, 0x0f, 0xdb, 0xa5, 0xb8, 0x0f, 0xae, 0x50, 0xb1, 0x49, 0x9a, 0xa8, - 0xba, 0xbb, 0x6f, 0xe7, 0x9d, 0x3b, 0x44, 0x20, 0x59, 0x99, 0xf5, 0x0a, 0xb3, 0x7e, 0x81, 0xac, - 0x57, 0x48, 0x6a, 0xd1, 0xf6, 0x76, 0xe2, 0xac, 0x69, 0xc6, 0xf5, 0x7c, 0xe2, 0xf5, 0xdc, 0xb5, - 0x99, 0xae, 0x36, 0xc9, 0x74, 0xbb, 0x3e, 0x13, 0x8f, 0xbf, 0x77, 0x9a, 0x9f, 0xe9, 0x5a, 0xb8, - 0x05, 0x41, 0x7f, 0x12, 0x7e, 0xe7, 0x2d, 0x81, 0x78, 0xe2, 0x3f, 0xf7, 0x83, 0x35, 0xc3, 0xb2, - 0xdb, 0x73, 0xbf, 0xac, 0xc9, 0x73, 0x05, 0x79, 0xae, 0x06, 0x3d, 0xf7, 0x6e, 0xd0, 0x5b, 0x0e, - 0x37, 0x18, 0x89, 0xfe, 0x9f, 0x36, 0x12, 0xfd, 0x8d, 0x47, 0xc2, 0x0d, 0xce, 0x96, 0x4d, 0x79, - 0xe9, 0xa8, 0x1f, 0x6a, 0x4f, 0xb0, 0xfa, 0xce, 0xdc, 0x15, 0xb9, 0x91, 0x79, 0x4a, 0xc5, 0xc0, - 0x9a, 0x6c, 0x78, 0xb0, 0x07, 0x9a, 0x7a, 0x02, 0xc4, 0xe2, 0x06, 0xed, 0xb6, 0x1e, 0xf3, 0xaf, - 0xba, 0x2a, 0x60, 0x6f, 0x4f, 0x48, 0x5f, 0x52, 0xe6, 0x72, 0xa6, 0x36, 0x67, 0x76, 0xd9, 0xe2, - 0xb0, 0xeb, 0xc0, 0x0e, 0xe1, 0x10, 0x57, 0x92, 0x34, 0x62, 0xc7, 0xe5, 0x4a, 0xd6, 0xd5, 0x83, - 0x1c, 0x75, 0xc3, 0x8a, 0x80, 0xcc, 0x0d, 0x1c, 0x51, 0x91, 0x95, 0xd7, 0x7f, 0x06, 0x8b, 0x75, - 0xc8, 0xb7, 0x8e, 0x42, 0x45, 0xe5, 0x66, 0xc0, 0x1c, 0x50, 0x53, 0x30, 0x97, 0x39, 0x59, 0x95, - 0x90, 0x39, 0xea, 0x79, 0xf3, 0xeb, 0xd1, 0x26, 0x79, 0xf3, 0x48, 0xe0, 0x97, 0x83, 0x14, 0x78, - 0x9c, 0xdc, 0x91, 0x78, 0x79, 0x74, 0x0c, 0xff, 0x7c, 0x64, 0xb1, 0xf3, 0x43, 0x40, 0x68, 0x2e, - 0xf0, 0xeb, 0x97, 0x20, 0xcd, 0xd0, 0x75, 0xd0, 0x95, 0x11, 0x4c, 0x2c, 0xbe, 0xfc, 0xc5, 0x84, - 0x34, 0xfc, 0x0e, 0xfe, 0xfc, 0xe8, 0x5f, 0x5f, 0x23, 0x54, 0x13, 0x45, 0x26, 0xc1, 0x7f, 0x5b, - 0x1f, 0x02, 0x1f, 0xa5, 0xd6, 0xb7, 0x40, 0xe5, 0xc7, 0xdf, 0x88, 0x1f, 0xbf, 0xe0, 0x8f, 0x77, - 0x44, 0x57, 0xf8, 0x4d, 0xa4, 0xac, 0xae, 0xfc, 0x91, 0xc9, 0x1f, 0x28, 0x94, 0x9e, 0xa0, 0x42, - 0x43, 0x89, 0xa5, 0x57, 0xf2, 0x06, 0x65, 0x96, 0xc4, 0xf9, 0x2e, 0x82, 0xf7, 0x0d, 0x9e, 0x77, - 0xbf, 0x1b, 0xaa, 0xf0, 0xed, 0x57, 0x86, 0x8c, 0x2a, 0xa2, 0x24, 0x75, 0x4d, 0xc7, 0x68, 0x39, - 0xde, 0x3c, 0x52, 0x68, 0xa0, 0x45, 0x8a, 0x26, 0x84, 0x9e, 0x84, 0x31, 0x8e, 0xb4, 0x69, 0xe6, - 0x7b, 0x0c, 0xd4, 0x03, 0x19, 0x73, 0xcd, 0xb3, 0x47, 0x96, 0x0c, 0x69, 0x31, 0xd5, 0x72, 0xcb, - 0x88, 0xd4, 0xdc, 0x07, 0x3c, 0xf7, 0x8e, 0x4b, 0xd6, 0x01, 0x7a, 0x26, 0xa7, 0x7c, 0x2d, 0xa1, - 0xbf, 0xa4, 0xcb, 0x09, 0xad, 0x8e, 0x8a, 0x7a, 0x45, 0x3f, 0xed, 0x99, 0x4f, 0xc4, 0x4e, 0x4a, - 0x49, 0x40, 0xe1, 0xc0, 0x54, 0x31, 0x76, 0x21, 0x5e, 0x1f, 0x42, 0xd5, 0xcb, 0x00, 0x83, 0xa0, - 0x1d, 0x74, 0xc7, 0x19, 0x0c, 0x94, 0x9c, 0xf8, 0x16, 0x2a, 0xd3, 0x31, 0xc8, 0xd2, 0x34, 0xcc, - 0xd0, 0x72, 0x6e, 0xda, 0x41, 0x43, 0x05, 0xaa, 0x08, 0x76, 0x13, 0xcc, 0xf9, 0x3e, 0x69, 0x25, - 0x18, 0x4e, 0xba, 0xc0, 0xba, 0x6f, 0xcd, 0x50, 0xa4, 0x46, 0xdd, 0x59, 0x46, 0x93, 0x43, 0x16, - 0x77, 0xa8, 0x0f, 0x2f, 0xfc, 0xd4, 0xb3, 0x76, 0x9d, 0x44, 0xab, 0xdb, 0x38, 0x09, 0x5d, 0x23, - 0x4c, 0xe1, 0xab, 0x57, 0xc7, 0x2d, 0x10, 0x6c, 0x35, 0x41, 0x73, 0x6d, 0x69, 0x4d, 0xe3, 0x05, - 0x15, 0xa8, 0xa7, 0xb2, 0xac, 0xfa, 0x39, 0x36, 0xae, 0x1d, 0x33, 0x33, 0xe6, 0xac, 0xd0, 0x93, - 0x6e, 0x18, 0x6c, 0x96, 0x86, 0x64, 0xa3, 0x58, 0xb3, 0x2a, 0x30, 0xfa, 0x4d, 0x34, 0x25, 0x3c, - 0x73, 0xfc, 0x58, 0x0b, 0xbf, 0xd6, 0xc2, 0x5b, 0x3a, 0xc6, 0xa8, 0xa8, 0x0d, 0x42, 0x5b, 0x86, - 0xab, 0xa0, 0x2b, 0x26, 0x53, 0xdf, 0x24, 0x09, 0xc2, 0x0d, 0xd6, 0x04, 0xe0, 0xad, 0x00, 0xae, - 0x90, 0x39, 0x15, 0x53, 0x36, 0x23, 0x18, 0x05, 0xe2, 0xfe, 0x6d, 0xa8, 0x5c, 0xff, 0x7d, 0x0c, - 0x3a, 0x84, 0xdf, 0xd9, 0x34, 0x74, 0x00, 0x46, 0x34, 0x85, 0xfa, 0xe0, 0x0c, 0xdc, 0x8c, 0x0f, - 0x9b, 0x53, 0x20, 0x02, 0x09, 0x8f, 0xf2, 0x0b, 0xde, 0x65, 0x10, 0xc6, 0xe7, 0x25, 0xcc, 0x0d, - 0xb0, 0x81, 0x6b, 0xdb, 0x91, 0x0a, 0xb4, 0xa0, 0x73, 0xe5, 0x67, 0x2f, 0x72, 0x48, 0xbc, 0x40, - 0x01, 0xd6, 0xba, 0xf6, 0xef, 0x2d, 0x67, 0x1c, 0x74, 0x7c, 0x99, 0x44, 0x31, 0x00, 0xd9, 0x84, - 0x67, 0xd0, 0x7f, 0xf6, 0x4c, 0x02, 0x5d, 0xe8, 0xe1, 0x7b, 0xe8, 0xe5, 0x5e, 0xe6, 0x80, 0x70, - 0x46, 0xf8, 0x0a, 0xc0, 0x14, 0xfa, 0x7c, 0x2d, 0x18, 0x79, 0x15, 0x8c, 0xd8, 0x1f, 0x18, 0x22, - 0x96, 0xfd, 0x54, 0x2e, 0x2e, 0xf1, 0xba, 0x2a, 0x5e, 0x7e, 0x27, 0x13, 0x26, 0xbb, 0xdf, 0x8b, - 0x14, 0xe7, 0x7c, 0xd8, 0x04, 0x47, 0x16, 0x2d, 0x65, 0xa8, 0x39, 0x6d, 0xf4, 0x9a, 0x06, 0x52, - 0xe1, 0x87, 0xb1, 0x3a, 0x98, 0xc7, 0xcf, 0x17, 0x16, 0x14, 0xea, 0x72, 0x5c, 0xda, 0x28, 0x15, - 0x70, 0x9b, 0x1a, 0x90, 0x0e, 0xc1, 0x65, 0x76, 0x60, 0xdb, 0x84, 0x8a, 0xff, 0xe8, 0x27, 0xeb, - 0x50, 0x6d, 0x68, 0x5e, 0x2f, 0xe8, 0x13, 0x02, 0xa3, 0xa5, 0x44, 0x3f, 0x68, 0x9e, 0x47, 0xd0, - 0x34, 0xdd, 0x02, 0x28, 0x8d, 0x2d, 0xca, 0x02, 0x34, 0x3a, 0x93, 0xb4, 0xc4, 0x33, 0x59, 0x63, - 0x77, 0x16, 0x68, 0xa6, 0x69, 0x6e, 0x5c, 0x9f, 0xa3, 0x30, 0x4b, 0xab, 0xda, 0xda, 0x67, 0x03, - 0x82, 0x2e, 0x89, 0x77, 0x33, 0x2d, 0x1e, 0x83, 0xaa, 0xfa, 0xd3, 0x39, 0x5e, 0x72, 0x1a, 0x75, - 0x61, 0x52, 0xe8, 0x95, 0x1a, 0x00, 0x2c, 0xb9, 0xf4, 0x41, 0x77, 0x62, 0xa4, 0x24, 0x33, 0x48, - 0x9a, 0xb2, 0xf2, 0xe9, 0xfa, 0xf3, 0xc9, 0xa7, 0x9f, 0x80, 0xcb, 0xcd, 0x8b, 0xc7, 0x57, 0x0c, - 0xee, 0x17, 0x66, 0xef, 0x50, 0xea, 0xcf, 0x46, 0x1e, 0x39, 0xe3, 0x3b, 0x3c, 0x87, 0x7c, 0x4f, - 0xd7, 0x75, 0x7d, 0x24, 0x53, 0xfe, 0x1b, 0xc6, 0x08, 0x13, 0x9c, 0x60, 0xec, 0x40, 0xf1, 0xba, - 0xe7, 0x26, 0xf4, 0x9a, 0xfe, 0xf2, 0xeb, 0x90, 0x7e, 0xb0, 0x5b, 0x7f, 0x48, 0x2f, 0xa5, 0x51, - 0x1e, 0xc8, 0x84, 0x69, 0xf1, 0xb2, 0x4d, 0x4f, 0xda, 0x6b, 0x77, 0xba, 0xbd, 0x3d, 0x6d, 0x30, - 0x42, 0x84, 0xfd, 0x62, 0xde, 0xf0, 0x6a, 0xb2, 0xbd, 0x3d, 0x69, 0x34, 0x07, 0x63, 0x61, 0xb7, - 0x54, 0x71, 0xc9, 0xfe, 0xaf, 0x54, 0x77, 0xe9, 0x6d, 0xa9, 0x7a, 0xed, 0xcb, 0x82, 0xd3, 0xa8, - 0xb9, 0xf7, 0x25, 0x3d, 0x68, 0x97, 0xd0, 0x49, 0x23, 0x05, 0xe4, 0x40, 0x01, 0xc3, 0xe8, 0x89, - 0x17, 0xee, 0xb2, 0x71, 0xaa, 0x39, 0x95, 0x68, 0x1c, 0xcd, 0x66, 0x27, 0x40, 0x22, 0x68, 0xc1, - 0x0d, 0xd9, 0x46, 0x3d, 0x67, 0x91, 0x6e, 0x6f, 0xa7, 0xcd, 0x9d, 0xd5, 0x10, 0x1d, 0x95, 0x31, - 0x8f, 0x69, 0x21, 0x71, 0x4e, 0x16, 0x12, 0xa7, 0xda, 0x35, 0x71, 0xe1, 0x37, 0xbb, 0xb4, 0xce, - 0xf8, 0x93, 0xb9, 0x14, 0xe2, 0xea, 0xed, 0x2b, 0xe8, 0x7a, 0x55, 0x93, 0x51, 0xdd, 0xd8, 0x68, - 0x3a, 0x79, 0xbc, 0x43, 0x45, 0x31, 0x21, 0x2d, 0x2a, 0x9b, 0xb3, 0xff, 0xfd, 0x9f, 0xff, 0x07, - 0x9a, 0x9c, 0x8d, 0xe3, 0xc6, 0xe6, 0x0f, 0xe2, 0xa6, 0x98, 0x9c, 0x2c, 0x22, 0xd3, 0xdd, 0xfd, - 0x8a, 0xe0, 0x9e, 0xb2, 0x01, 0xf9, 0xfc, 0xdc, 0x30, 0x7c, 0x25, 0x9e, 0x76, 0xe9, 0x59, 0x02, - 0xc3, 0xc4, 0x21, 0x93, 0x38, 0x38, 0xb7, 0x8f, 0x2f, 0x09, 0xa5, 0xe7, 0xed, 0xeb, 0x57, 0x99, - 0x35, 0xe8, 0x51, 0x5c, 0x13, 0x1b, 0xb2, 0xf5, 0xc8, 0xdd, 0x0a, 0x56, 0x35, 0x6c, 0x2b, 0x5b, - 0x46, 0xcf, 0x2e, 0x53, 0xa8, 0x99, 0xd9, 0xfb, 0x4d, 0xfd, 0x92, 0xa7, 0x1c, 0x92, 0x0c, 0x66, - 0x0d, 0x8c, 0x63, 0x3e, 0x51, 0x79, 0xd0, 0x0c, 0x0d, 0x83, 0x32, 0xdc, 0x78, 0x22, 0xca, 0xe7, - 0x15, 0xef, 0x01, 0x93, 0x00, 0xad, 0x91, 0xf7, 0xec, 0x9b, 0xf6, 0xcc, 0x71, 0x86, 0x02, 0xef, - 0xfd, 0x0a, 0x0d, 0x44, 0x6e, 0x46, 0xbd, 0x87, 0x87, 0xd9, 0xa8, 0x4b, 0xa6, 0xbe, 0x20, 0xaf, - 0xb4, 0xec, 0x6f, 0x17, 0x57, 0xcb, 0xd6, 0x6d, 0x98, 0xe6, 0x37, 0x7e, 0xe4, 0x9c, 0x83, 0x60, - 0x8e, 0x56, 0xb6, 0x72, 0x2d, 0x73, 0x2e, 0xab, 0x75, 0x8a, 0x97, 0xaf, 0xf3, 0xb3, 0xd2, 0x48, - 0x01, 0x1d, 0x1a, 0x68, 0x38, 0x97, 0xa6, 0x84, 0x88, 0x16, 0x3b, 0xc2, 0x03, 0xf6, 0x97, 0x30, - 0xb8, 0x03, 0x31, 0x56, 0x31, 0x4f, 0x8b, 0xe0, 0xae, 0xe8, 0x53, 0xa5, 0x5c, 0x3a, 0x26, 0x72, - 0xe5, 0x15, 0x5b, 0x56, 0x4a, 0x1b, 0x07, 0xd7, 0x1f, 0x6a, 0xd7, 0x3e, 0x89, 0x02, 0x87, 0x09, - 0xaa, 0xe6, 0xc6, 0x56, 0x3b, 0x69, 0x5b, 0x99, 0x32, 0x38, 0x76, 0xb7, 0xb6, 0xcc, 0x37, 0x9f, - 0xc8, 0x0a, 0x2e, 0x6f, 0x2a, 0xf8, 0xa9, 0x28, 0x99, 0x35, 0xe4, 0x09, 0x64, 0x96, 0xdd, 0xa6, - 0x6f, 0xc6, 0x4d, 0x25, 0x3f, 0x35, 0x14, 0xd5, 0xbe, 0x1a, 0x79, 0xc1, 0x93, 0x99, 0xeb, 0x7b, - 0x39, 0xfc, 0x8b, 0x02, 0x0d, 0x87, 0x56, 0xed, 0xba, 0xba, 0x58, 0x8f, 0x37, 0x6d, 0xd1, 0x41, - 0xc9, 0x86, 0x5d, 0xda, 0xc3, 0x28, 0xd5, 0x4b, 0x62, 0x63, 0x0c, 0x1f, 0xd4, 0xd3, 0x30, 0xa9, - 0x00, 0x07, 0xb5, 0x43, 0x38, 0x47, 0x66, 0xb8, 0x1b, 0xa8, 0x94, 0xd4, 0xcd, 0xdb, 0xac, 0xf6, - 0x9a, 0xf8, 0xf1, 0xad, 0x9f, 0x1d, 0x07, 0xc1, 0x67, 0x61, 0x66, 0xa3, 0x9e, 0xd1, 0xb0, 0x7c, - 0x92, 0xdf, 0xf3, 0xa4, 0x4c, 0xf4, 0xb7, 0x32, 0xf4, 0x11, 0xb0, 0x14, 0xc8, 0xe0, 0x4d, 0x3a, - 0x24, 0x06, 0xc5, 0xe8, 0xa4, 0x64, 0x5b, 0x7d, 0xbc, 0x03, 0xc0, 0xf6, 0x8a, 0x7d, 0xa5, 0xc8, - 0x0c, 0x5b, 0x0b, 0x37, 0x20, 0x8c, 0xed, 0xce, 0x0f, 0xcf, 0x9f, 0x08, 0x7c, 0x4e, 0xa2, 0x2f, - 0x72, 0x7a, 0x74, 0xf7, 0xbb, 0x4f, 0x42, 0x20, 0x41, 0x2f, 0x1c, 0xe1, 0x55, 0x60, 0xb8, 0x97, - 0x62, 0xfd, 0x1d, 0xfe, 0x68, 0x87, 0xe2, 0x87, 0x79, 0xf6, 0xb4, 0x93, 0x90, 0x57, 0x23, 0x95, - 0x18, 0x3d, 0xef, 0x76, 0xc7, 0xf3, 0xc1, 0x3e, 0x88, 0x8e, 0x4f, 0x80, 0x3a, 0x8b, 0xcc, 0x1c, - 0x7e, 0xcc, 0x2b, 0x17, 0xdf, 0x0b, 0x9f, 0xa4, 0x6e, 0xd1, 0x45, 0x51, 0x67, 0x39, 0x97, 0x9e, - 0xa3, 0x5a, 0x11, 0xa7, 0xf0, 0xc7, 0x50, 0x84, 0xfd, 0x80, 0xc8, 0x42, 0x5d, 0xb7, 0xeb, 0x56, - 0xab, 0x29, 0x17, 0xe2, 0x45, 0x7c, 0x03, 0x4b, 0xbf, 0xda, 0x30, 0xf7, 0xca, 0x3b, 0x3d, 0x45, - 0x39, 0x0f, 0xaa, 0x3a, 0x73, 0x4f, 0xbb, 0x2e, 0xfd, 0xa6, 0x5f, 0xf4, 0x1b, 0x7e, 0xf1, 0xdb, - 0xe2, 0x77, 0xef, 0x7b, 0xce, 0x81, 0xbf, 0x39, 0x77, 0xd9, 0x14, 0x6c, 0x3d, 0xb5, 0x00, 0x93, - 0x21, 0x33, 0xb1, 0xd5, 0x39, 0x71, 0x8b, 0xb1, 0xb1, 0xcd, 0x28, 0x54, 0xd2, 0xc8, 0x7b, 0xfb, - 0xd4, 0x3d, 0xe0, 0x1b, 0xc9, 0xe7, 0xe0, 0x84, 0x8f, 0xab, 0x77, 0x57, 0x21, 0x5e, 0x23, 0x17, - 0xe9, 0x34, 0x34, 0xb0, 0x8e, 0xdd, 0x0c, 0xe8, 0x3a, 0x7e, 0x32, 0x13, 0x36, 0x6b, 0xb7, 0x75, - 0x2b, 0x25, 0x68, 0xa3, 0x2e, 0x5a, 0xad, 0x88, 0xeb, 0x86, 0x3c, 0xe8, 0x79, 0xa6, 0x32, 0x1d, - 0x35, 0x64, 0x42, 0x47, 0x30, 0x95, 0xe9, 0xc2, 0x33, 0xde, 0x91, 0xf5, 0x9f, 0xe4, 0xff, 0xee, - 0xe7, 0xd2, 0xcb, 0x4f, 0xda, 0xbb, 0x6f, 0xcd, 0x77, 0xd7, 0xa1, 0xf6, 0xee, 0xae, 0xf4, 0x4e, - 0x2f, 0x77, 0x62, 0xbe, 0xcb, 0xe7, 0xc5, 0xbb, 0xa1, 0x39, 0x86, 0x3d, 0xf7, 0x5b, 0x31, 0xae, - 0x14, 0x47, 0xf4, 0x18, 0x56, 0x07, 0x42, 0xa6, 0xc2, 0x33, 0x6e, 0x7c, 0x1f, 0x61, 0x2d, 0xb7, - 0xb3, 0xbd, 0x3e, 0x72, 0x06, 0x4e, 0xc5, 0x92, 0x7a, 0x6a, 0x1b, 0xc7, 0x54, 0x1b, 0x6f, 0x38, - 0x5d, 0xb8, 0x77, 0x6b, 0x6a, 0xc4, 0x52, 0x58, 0xba, 0x5c, 0x23, 0xd7, 0x57, 0xbc, 0x29, 0x6a, - 0xfc, 0xbc, 0xbe, 0x8d, 0xcf, 0x9f, 0xcc, 0xda, 0x3d, 0x90, 0x01, 0xe1, 0x9f, 0x4a, 0x4b, 0x9f, - 0xd7, 0xb6, 0xff, 0xb9, 0xd9, 0x7e, 0xf3, 0xcd, 0x2e, 0xd5, 0x15, 0xd3, 0x8f, 0x72, 0x6b, 0x2e, - 0xd6, 0xb5, 0x86, 0xcb, 0x8a, 0x26, 0x99, 0xb5, 0xcb, 0x17, 0x0d, 0x7d, 0xaf, 0x7d, 0xb3, 0x5b, - 0xd4, 0x57, 0xd3, 0x9a, 0x93, 0xb5, 0xa3, 0x5d, 0xff, 0xad, 0xca, 0x28, 0x0b, 0xe1, 0xec, 0xba, - 0x7d, 0x54, 0x6c, 0x7a, 0x6f, 0xd9, 0xe0, 0xa2, 0x80, 0x89, 0xd4, 0x10, 0xd2, 0x9e, 0x3d, 0x6b, - 0xf7, 0x9e, 0xc1, 0x19, 0x90, 0xac, 0x33, 0x73, 0x69, 0x72, 0xc8, 0x56, 0x89, 0x90, 0x8f, 0x0c, - 0x94, 0x5d, 0xfe, 0xd9, 0xc3, 0x9f, 0x2d, 0xfe, 0xdd, 0x87, 0xdf, 0xce, 0x39, 0xed, 0x2f, 0x1f, - 0xb5, 0xbd, 0x25, 0x81, 0xdf, 0xc9, 0x41, 0x3c, 0x4c, 0xda, 0x5e, 0x61, 0x87, 0xcc, 0xe6, 0x31, - 0xd9, 0x30, 0xd4, 0x13, 0xd9, 0xb1, 0xe1, 0x9a, 0x3c, 0x1a, 0x64, 0x1a, 0xee, 0x52, 0x29, 0xa4, - 0xa5, 0xd2, 0x3e, 0x79, 0xe2, 0x85, 0xed, 0x14, 0x0e, 0x16, 0x49, 0x3b, 0x27, 0x8a, 0x9f, 0x85, - 0x51, 0xc4, 0x3c, 0xe2, 0xad, 0x7d, 0x75, 0x1a, 0x7c, 0x77, 0x25, 0xd8, 0xca, 0x99, 0xfb, 0x71, - 0x2f, 0x86, 0xf3, 0xab, 0x5b, 0x37, 0x84, 0x7e, 0x3a, 0x81, 0xf1, 0x9a, 0xed, 0xf5, 0xdb, 0x13, - 0x1a, 0x33, 0xfc, 0x35, 0x85, 0x5f, 0x9d, 0xa7, 0xf0, 0x0f, 0xb0, 0x41, 0x36, 0x1e, 0x3d, 0x3e, - 0xe2, 0xdc, 0xf8, 0x09, 0x28, 0xf8, 0xb1, 0xdd, 0xd6, 0x6c, 0x85, 0x0e, 0x6d, 0x36, 0xd1, 0x2a, - 0x1a, 0xbe, 0x9e, 0x21, 0x02, 0x93, 0xce, 0xf9, 0x9a, 0x63, 0x1d, 0x4b, 0x74, 0x16, 0xf4, 0x61, - 0x78, 0xeb, 0x59, 0x4f, 0xbb, 0xf3, 0xfb, 0xd6, 0x0b, 0x0c, 0xd3, 0x6c, 0xb9, 0x66, 0x8f, 0xa5, - 0xa9, 0x84, 0x4a, 0x46, 0x99, 0xd8, 0xce, 0x5d, 0xb1, 0x88, 0x25, 0x79, 0xf5, 0x35, 0x72, 0xe5, - 0x2a, 0xfb, 0xcd, 0x55, 0x32, 0xa3, 0x1d, 0x6a, 0x7e, 0x28, 0xa5, 0x0b, 0xbb, 0x5b, 0xbe, 0xa6, - 0x1b, 0x1a, 0xdf, 0x0c, 0x5c, 0xb9, 0x38, 0x98, 0x94, 0x97, 0x4b, 0x7b, 0x03, 0xae, 0x4f, 0x59, - 0xde, 0xbd, 0x32, 0x74, 0x4b, 0x16, 0x05, 0xc6, 0x6d, 0xfd, 0xfa, 0xe4, 0x27, 0xef, 0xed, 0xe1, - 0xa0, 0x65, 0xb5, 0x43, 0x10, 0x94, 0xef, 0xe1, 0x6f, 0x0a, 0x7f, 0x3d, 0x7c, 0x7e, 0x92, 0x8a, - 0xcb, 0x28, 0x2a, 0x69, 0xba, 0x4c, 0xad, 0xfb, 0xe8, 0xd8, 0x0a, 0x29, 0xd4, 0xb5, 0xf2, 0xa4, - 0x92, 0xee, 0x47, 0x23, 0xaf, 0x0b, 0xa7, 0x2d, 0x10, 0x49, 0xc6, 0x20, 0x11, 0x23, 0x22, 0xbc, - 0x48, 0x97, 0x4e, 0x46, 0x86, 0x73, 0xd1, 0xfb, 0xd4, 0x70, 0x3f, 0x92, 0x89, 0x8d, 0x2e, 0x48, - 0x32, 0x03, 0xba, 0x21, 0x55, 0xae, 0x17, 0x57, 0x01, 0x56, 0x5b, 0xee, 0x0d, 0x1d, 0x06, 0x74, - 0x95, 0x6a, 0x61, 0x27, 0xa5, 0xdd, 0x33, 0xe2, 0xfd, 0x15, 0x5a, 0xd4, 0x55, 0x2d, 0xb6, 0x61, - 0xb8, 0x68, 0x17, 0x4e, 0x24, 0xfa, 0xcc, 0x90, 0x65, 0xae, 0x53, 0xeb, 0x4b, 0x10, 0x45, 0x09, - 0x8a, 0xd6, 0x1c, 0x04, 0xdd, 0xb5, 0x50, 0x0f, 0x13, 0x23, 0x0e, 0x94, 0xa4, 0xab, 0x33, 0x58, - 0x67, 0x8d, 0x15, 0x4e, 0xb9, 0xc2, 0xdd, 0x9e, 0xd3, 0x90, 0x81, 0xdc, 0xc0, 0x4e, 0x83, 0x33, - 0x1a, 0x5a, 0x7b, 0x7a, 0x2a, 0x9f, 0xcf, 0xbc, 0xa0, 0x5c, 0x64, 0x6a, 0x98, 0x95, 0x0b, 0x37, - 0x04, 0x61, 0xde, 0xbe, 0xdb, 0xdb, 0x02, 0x1e, 0x41, 0xf6, 0x78, 0x92, 0x7e, 0xd5, 0xce, 0x3c, - 0xdb, 0xdb, 0x87, 0x61, 0x5a, 0x43, 0xcb, 0xe2, 0x38, 0xa5, 0x34, 0xc0, 0xac, 0xc0, 0xc9, 0x78, - 0x14, 0xe7, 0xba, 0x72, 0xdb, 0x74, 0x8e, 0x10, 0xf9, 0xf4, 0xa6, 0xc5, 0x23, 0xcf, 0x9e, 0xb7, - 0x2b, 0x55, 0xa1, 0x41, 0x98, 0x60, 0xd6, 0xc5, 0xd7, 0x27, 0xc0, 0x8c, 0x26, 0x92, 0x19, 0x39, - 0xcb, 0x7b, 0x2f, 0xff, 0x2e, 0x74, 0xbf, 0x14, 0x6d, 0xcf, 0xf7, 0x42, 0xc7, 0x5c, 0xb8, 0x70, - 0x2e, 0x21, 0x4e, 0x74, 0x0f, 0x6b, 0xa8, 0xb3, 0xaf, 0x18, 0xd3, 0x17, 0x60, 0xe8, 0x43, 0x36, - 0xb5, 0x0f, 0xbc, 0x44, 0x1d, 0x6b, 0x81, 0x99, 0x04, 0xa3, 0x5d, 0x58, 0x46, 0x09, 0x19, 0x61, - 0x4e, 0xd0, 0xd8, 0x16, 0x4e, 0x9c, 0x31, 0x70, 0x29, 0xb3, 0x43, 0x89, 0xde, 0x83, 0x7b, 0x2f, - 0x81, 0xd6, 0x9a, 0x2d, 0xc1, 0x14, 0xbd, 0x31, 0x62, 0xf4, 0x2e, 0x22, 0x7f, 0xf2, 0xd9, 0x5a, - 0xc3, 0x3f, 0xef, 0xf5, 0x66, 0xae, 0xe4, 0x9f, 0xc3, 0x43, 0xdb, 0xbc, 0x03, 0x22, 0x4a, 0xae, - 0x9c, 0xfa, 0x78, 0xad, 0xf0, 0x4d, 0x50, 0x8b, 0xd6, 0x0a, 0x42, 0x1d, 0x58, 0xed, 0x9b, 0xb6, - 0x05, 0xdc, 0x00, 0x8a, 0xb8, 0x54, 0x8f, 0xe3, 0x0c, 0x0e, 0xed, 0x8a, 0x6e, 0x0d, 0x91, 0x69, - 0xf8, 0x7e, 0x71, 0x18, 0x48, 0x1c, 0x6c, 0xc4, 0xb0, 0xb1, 0x1c, 0xd3, 0xa3, 0x27, 0x70, 0x6a, - 0x81, 0x85, 0xa5, 0xe7, 0xa1, 0xa3, 0x95, 0xce, 0xf2, 0xc7, 0x97, 0x46, 0x5a, 0xe5, 0xc0, 0xf3, - 0x0c, 0x82, 0x83, 0xae, 0x98, 0x26, 0x00, 0xad, 0xf1, 0x7a, 0x99, 0x9c, 0x3b, 0x18, 0x17, 0x36, - 0x2f, 0x6b, 0x18, 0x8a, 0x2a, 0x5d, 0xbb, 0xa9, 0xec, 0xef, 0xd1, 0xc5, 0xb9, 0xe3, 0xac, 0x2c, - 0xbc, 0x2c, 0x0f, 0x13, 0x82, 0xa6, 0x2d, 0x34, 0xc4, 0x17, 0xbe, 0xb1, 0x12, 0xde, 0x8a, 0xc8, - 0xb2, 0xbc, 0x30, 0xfb, 0x99, 0x63, 0x8d, 0x22, 0xde, 0x37, 0x62, 0x0e, 0xeb, 0xf8, 0x30, 0x91, - 0x91, 0x35, 0x8e, 0x5e, 0x34, 0xe5, 0xa4, 0x9b, 0x27, 0x3d, 0x2f, 0x22, 0xd3, 0x9c, 0x04, 0xf1, - 0xd4, 0x28, 0xc0, 0x6d, 0x3a, 0x51, 0xca, 0x20, 0x85, 0xed, 0x26, 0x93, 0x84, 0x4f, 0x90, 0x9d, - 0x15, 0xcf, 0x55, 0xdf, 0x66, 0xa1, 0x79, 0x7d, 0x89, 0xbe, 0xc1, 0x8d, 0x6f, 0x4f, 0x30, 0x56, - 0xf2, 0x8a, 0xf7, 0x47, 0x68, 0x52, 0x9e, 0x85, 0xf9, 0x97, 0x15, 0x79, 0x0e, 0x7b, 0xab, 0x5e, - 0xf6, 0x57, 0xbd, 0xdc, 0xc7, 0x97, 0x57, 0x7e, 0xf6, 0xe1, 0xc7, 0x97, 0xa8, 0x4f, 0xa9, 0xcf, - 0xf5, 0x61, 0x45, 0x0d, 0x3f, 0xae, 0x78, 0xf7, 0x92, 0xd0, 0xd2, 0xa0, 0xf6, 0x5f, 0x91, 0xeb, - 0x99, 0x51, 0x86, 0xb5, 0x6c, 0xbf, 0x5a, 0x8e, 0xf4, 0x73, 0x53, 0x7a, 0x41, 0xb2, 0xe9, 0xca, - 0xd8, 0x3c, 0xe2, 0x0e, 0xc3, 0xc1, 0x56, 0xf6, 0x55, 0x59, 0x6d, 0xd9, 0x11, 0x99, 0x8b, 0x5c, - 0xf8, 0x51, 0x5d, 0x89, 0xc3, 0xc3, 0x8f, 0xb5, 0xf9, 0xaf, 0x82, 0xfb, 0xbb, 0x4a, 0xfe, 0x00, - 0xce, 0xb1, 0xf7, 0xb5, 0xd9, 0xe7, 0x21, 0x1c, 0x6f, 0xd2, 0xba, 0x0f, 0xd0, 0x38, 0x06, 0x1d, - 0xce, 0x50, 0xff, 0xa9, 0xa6, 0xde, 0x50, 0xd1, 0xad, 0x95, 0x65, 0xb3, 0xaf, 0x28, 0x7b, 0xbb, - 0xa2, 0x6c, 0x6d, 0x81, 0xcf, 0xab, 0x3f, 0xb6, 0x62, 0x34, 0x41, 0x2e, 0x5f, 0x59, 0x36, 0x40, - 0x1b, 0xfa, 0xda, 0x92, 0xbf, 0x4f, 0xb2, 0xdd, 0xbb, 0x15, 0xe5, 0x7e, 0x47, 0x30, 0xc3, 0x72, - 0x49, 0x0d, 0x02, 0x4c, 0xfc, 0x3c, 0x21, 0xba, 0xca, 0xaa, 0xdc, 0xb8, 0xbc, 0x7e, 0x0d, 0x18, - 0xee, 0xc2, 0x95, 0xd0, 0xad, 0x6a, 0x7b, 0xcf, 0xc9, 0x79, 0xe7, 0x94, 0x5d, 0x74, 0xa4, 0xe3, - 0xe0, 0xd9, 0xa9, 0xf2, 0xdf, 0x09, 0x58, 0x61, 0x9c, 0x91, 0x9e, 0x57, 0x8f, 0x8c, 0xc0, 0x4e, - 0x5d, 0x55, 0xe5, 0xb1, 0xc6, 0x9c, 0xe3, 0xed, 0xed, 0x78, 0x25, 0xfb, 0x76, 0xf3, 0xb5, 0x9a, - 0x6b, 0xfe, 0x3e, 0x32, 0xdd, 0xcd, 0x72, 0x36, 0xf3, 0x66, 0x61, 0x0d, 0x54, 0xe7, 0x86, 0x86, - 0xd6, 0x50, 0x28, 0x26, 0x07, 0x07, 0xdf, 0x3b, 0x91, 0x79, 0xdb, 0x54, 0xba, 0x28, 0x08, 0xd0, - 0x16, 0x97, 0x20, 0x08, 0x57, 0x64, 0xd9, 0xc7, 0x2c, 0xfd, 0xb3, 0xd5, 0xf7, 0x15, 0x2d, 0xe3, - 0xa2, 0x3f, 0x72, 0xac, 0x1e, 0x79, 0xfa, 0x48, 0x5f, 0x36, 0xcc, 0x89, 0x94, 0xb1, 0xc6, 0xad, - 0xbd, 0xca, 0xd1, 0x75, 0xe0, 0x6c, 0x79, 0x3f, 0xe0, 0xe2, 0x55, 0xe9, 0x8a, 0x79, 0x9f, 0xdd, - 0xeb, 0x53, 0x5e, 0xbe, 0x2c, 0x20, 0xfb, 0xe5, 0xca, 0xdc, 0x67, 0x95, 0x2a, 0x8d, 0xb9, 0x17, - 0x04, 0xb3, 0x6a, 0xf2, 0x33, 0x79, 0x3f, 0x99, 0xc0, 0x0e, 0x76, 0xcd, 0x30, 0xaa, 0x82, 0xac, - 0x82, 0x3f, 0x72, 0xa3, 0x11, 0x3b, 0x8b, 0x78, 0xc5, 0xbe, 0x8e, 0xf0, 0x7a, 0x64, 0xff, 0x71, - 0xec, 0xa7, 0xd0, 0xeb, 0x1c, 0x17, 0x92, 0x16, 0x4f, 0x54, 0x5c, 0xb8, 0x06, 0x35, 0xce, 0xaa, - 0xba, 0x8f, 0xaa, 0x90, 0x0e, 0x79, 0xce, 0x54, 0x04, 0x7a, 0x39, 0x6b, 0xc9, 0x3c, 0xd7, 0x3c, - 0xe1, 0x87, 0x81, 0xe6, 0x83, 0x4a, 0x6e, 0xe7, 0x5d, 0x0c, 0x61, 0x7a, 0xf9, 0xf6, 0xda, 0xbf, - 0x7f, 0x78, 0xe8, 0xa9, 0xdf, 0xf0, 0x62, 0x0b, 0xfd, 0xd5, 0x1f, 0x1e, 0xf0, 0xdf, 0xe2, 0x36, - 0xa5, 0x4b, 0xee, 0xfb, 0x0f, 0x0f, 0x1c, 0x53, 0x03, 0xdf, 0xf1, 0xbf, 0x45, 0x0e, 0xd8, 0x03, - 0x49, 0xe6, 0x37, 0x53, 0x7b, 0x74, 0x07, 0xd3, 0x40, 0x3b, 0x83, 0xa0, 0x19, 0x8e, 0x4d, 0x5c, - 0x0c, 0xc7, 0x9b, 0xdd, 0x08, 0x25, 0xe5, 0x33, 0x60, 0x65, 0xe4, 0x76, 0xa6, 0xe1, 0xed, 0x69, - 0x39, 0x4c, 0xf2, 0xd9, 0x4e, 0x65, 0x24, 0x13, 0xc7, 0xaf, 0xde, 0x21, 0x35, 0xb7, 0x73, 0xd0, - 0xd0, 0xb5, 0xe1, 0x63, 0x5a, 0x24, 0xa3, 0xed, 0xae, 0x6d, 0xce, 0x7f, 0xf9, 0x9f, 0xd8, 0x9c, - 0xed, 0x6d, 0x23, 0xed, 0x7f, 0xfd, 0xc1, 0x21, 0xd6, 0x04, 0x44, 0xb1, 0x0b, 0x7c, 0x40, 0x20, - 0x72, 0x96, 0xd0, 0x79, 0x93, 0xc1, 0xe7, 0x1a, 0x34, 0x44, 0x09, 0x5a, 0x48, 0x41, 0x3a, 0x40, - 0x88, 0x40, 0xe6, 0x20, 0x42, 0x9d, 0x42, 0x4b, 0x2c, 0xca, 0x88, 0x36, 0x17, 0x9f, 0xec, 0xee, - 0xfc, 0xde, 0x21, 0x2b, 0x6a, 0x95, 0xd2, 0xeb, 0x76, 0xbf, 0x73, 0x2c, 0xb5, 0x6c, 0xa3, 0x70, - 0x3e, 0xa6, 0x7f, 0x41, 0x26, 0x2c, 0x42, 0x30, 0xa0, 0x93, 0x41, 0xe6, 0x59, 0x2d, 0x0c, 0x1b, - 0xda, 0x42, 0xcb, 0x53, 0x69, 0xc6, 0x6c, 0x28, 0x0d, 0xce, 0xd1, 0x27, 0x11, 0x8d, 0x6f, 0xd2, - 0x60, 0x12, 0x84, 0x84, 0xb2, 0x8e, 0xad, 0x20, 0x9c, 0xb1, 0xe8, 0x7a, 0x49, 0xbe, 0xa9, 0x68, - 0x86, 0x2f, 0x70, 0x1f, 0xa8, 0x37, 0x68, 0x32, 0x57, 0x23, 0x85, 0x70, 0x7f, 0xa8, 0x33, 0xa5, - 0xad, 0x4f, 0x73, 0x6f, 0xbc, 0x9e, 0x1f, 0xaf, 0xd0, 0x9f, 0x05, 0x0c, 0x06, 0x3b, 0xe6, 0x88, - 0xa7, 0xb6, 0x78, 0x74, 0xe0, 0xa8, 0x3e, 0x7d, 0x1d, 0x4f, 0xed, 0x3e, 0x82, 0x57, 0x38, 0x03, - 0xeb, 0x1f, 0xff, 0x40, 0x1f, 0x25, 0x7c, 0x39, 0x17, 0xb8, 0xab, 0x63, 0xeb, 0x00, 0x3e, 0xe6, - 0xc1, 0xd1, 0x5f, 0x15, 0xed, 0x9e, 0x51, 0x39, 0x8a, 0xa1, 0x67, 0xef, 0xbb, 0xb8, 0xfa, 0x84, - 0x42, 0x8e, 0x3e, 0x59, 0x32, 0x53, 0xcb, 0xe0, 0x54, 0xa8, 0xf1, 0xe1, 0x6b, 0xff, 0x73, 0xf0, - 0xeb, 0x09, 0x70, 0xdf, 0xbb, 0xec, 0xe1, 0x41, 0x1d, 0x5a, 0xef, 0xb2, 0x83, 0xee, 0xc3, 0x83, - 0x6d, 0xdf, 0x65, 0x5e, 0x1c, 0xdc, 0xb5, 0x7e, 0x0d, 0x2e, 0x4e, 0xa0, 0x97, 0x41, 0x6e, 0xb3, - 0x0b, 0x66, 0x06, 0x2d, 0xf0, 0xc4, 0xfd, 0x89, 0x32, 0xe2, 0x9f, 0xa7, 0x09, 0x06, 0xbb, 0x8c, - 0xc6, 0xd6, 0x5d, 0x86, 0x0e, 0x1b, 0x77, 0x19, 0xea, 0x27, 0x48, 0x61, 0x41, 0xfa, 0x0b, 0xd6, - 0x5a, 0x94, 0x4b, 0x5d, 0x25, 0x59, 0x4e, 0x06, 0x5c, 0x6d, 0x6b, 0x0f, 0x4b, 0x38, 0x88, 0x06, - 0xe7, 0xa7, 0x5f, 0x3e, 0x92, 0x53, 0xae, 0x8f, 0x6e, 0xe1, 0x17, 0x37, 0xc0, 0xfd, 0x52, 0xcb, - 0xbd, 0xcb, 0x3a, 0x88, 0x10, 0x93, 0x65, 0x68, 0x0b, 0x82, 0x76, 0x38, 0x68, 0x1a, 0x61, 0x33, - 0xab, 0x52, 0x06, 0x53, 0xb0, 0x0a, 0xc8, 0x97, 0xfc, 0x25, 0x15, 0x72, 0xa4, 0x38, 0xa1, 0xe9, - 0x41, 0xb8, 0x80, 0xc3, 0x6e, 0xf1, 0x64, 0x16, 0xea, 0xb0, 0x31, 0x90, 0x44, 0x26, 0xd5, 0x40, - 0xa2, 0x1d, 0x57, 0x7b, 0x20, 0x46, 0xef, 0xe2, 0x18, 0xfd, 0x95, 0x36, 0x2f, 0x1a, 0x9a, 0x57, - 0xe4, 0x3d, 0x51, 0xb2, 0x25, 0x12, 0x14, 0x08, 0x2b, 0x33, 0x86, 0xee, 0x2a, 0x0a, 0x2a, 0xec, - 0x59, 0x0e, 0xd9, 0x63, 0x45, 0x83, 0x80, 0x10, 0x34, 0x9e, 0x93, 0x75, 0xd9, 0x30, 0x1b, 0xdb, - 0x05, 0x0a, 0x2a, 0x10, 0x74, 0x98, 0x1d, 0x91, 0xd1, 0x99, 0x81, 0xfa, 0x98, 0xc1, 0x01, 0x57, - 0x43, 0xfb, 0x90, 0x72, 0x0d, 0xb9, 0x28, 0x8c, 0xc5, 0xdf, 0x41, 0x3e, 0x34, 0x96, 0x2b, 0x1a, - 0x55, 0xba, 0x69, 0x40, 0xd4, 0x92, 0xa3, 0xed, 0xf9, 0xba, 0x3b, 0xd5, 0xbb, 0xe0, 0x22, 0xa3, - 0xa9, 0xa7, 0x73, 0x75, 0xc3, 0x95, 0xea, 0x72, 0xc9, 0x93, 0x33, 0x89, 0x92, 0x8c, 0xa7, 0xe6, - 0x71, 0xfd, 0x4f, 0x1d, 0xcb, 0xd5, 0xa0, 0x61, 0x99, 0x26, 0xdd, 0xde, 0x33, 0x34, 0xc9, 0x42, - 0x12, 0x84, 0x71, 0x17, 0x5f, 0x48, 0xe6, 0xe8, 0x77, 0x0a, 0x1f, 0x48, 0x83, 0xdf, 0xb3, 0xb7, - 0xc1, 0xa5, 0x1f, 0x79, 0xe8, 0x32, 0xa8, 0x47, 0x72, 0x90, 0x7d, 0x23, 0x03, 0x9a, 0x1e, 0x1b, - 0xd0, 0x48, 0xf3, 0x2b, 0x0e, 0x3a, 0x10, 0x74, 0xb2, 0x9b, 0xc9, 0x04, 0x08, 0x49, 0xa6, 0x76, - 0x87, 0x78, 0x98, 0xf5, 0x30, 0xb6, 0x9c, 0x5b, 0x3e, 0x28, 0x0a, 0x53, 0x92, 0x00, 0x21, 0x27, - 0x5c, 0x38, 0xc8, 0xa2, 0xc5, 0x68, 0x84, 0x19, 0xe3, 0xe8, 0xd5, 0x4d, 0xca, 0x4f, 0xd3, 0x9b, - 0x14, 0x1e, 0x3f, 0xfa, 0xe2, 0x31, 0xe7, 0xac, 0x6f, 0xfc, 0x69, 0xc0, 0x09, 0x33, 0xf8, 0xe5, - 0xca, 0x83, 0x2d, 0x24, 0xdd, 0x4c, 0xe7, 0x18, 0xd6, 0x38, 0x9e, 0xba, 0xc6, 0x41, 0x1d, 0x0d, - 0x9b, 0x22, 0xe2, 0xce, 0xb0, 0xc2, 0xf0, 0xb7, 0x9b, 0x63, 0x8d, 0xc4, 0x0f, 0x43, 0xec, 0x9d, - 0xf0, 0x0a, 0xc9, 0x55, 0xab, 0xf2, 0x14, 0x21, 0x3c, 0x6b, 0x30, 0x61, 0x04, 0x39, 0x75, 0x51, - 0xe5, 0x37, 0x64, 0x71, 0x5d, 0x1d, 0xd0, 0xc4, 0xb9, 0x0b, 0x3d, 0x68, 0xc5, 0x3e, 0xae, 0x29, - 0xb8, 0x58, 0x4f, 0x6d, 0x17, 0x38, 0x2f, 0x7a, 0x0c, 0x21, 0x18, 0x3b, 0x8c, 0xaf, 0x8e, 0x1c, - 0x1c, 0x3d, 0x32, 0xf2, 0x33, 0xd2, 0xf6, 0xaa, 0xe8, 0xe1, 0xc4, 0x87, 0xd1, 0xe0, 0xa2, 0xe7, - 0xb8, 0x2a, 0x07, 0x48, 0x2a, 0x20, 0xde, 0x1c, 0x30, 0x93, 0x26, 0x1d, 0x64, 0x5f, 0x48, 0x2c, - 0xa6, 0x2f, 0x1b, 0x1a, 0x9e, 0x4c, 0x4e, 0xb5, 0x8a, 0xcf, 0x44, 0xbb, 0x1f, 0xbc, 0xad, 0x2d, - 0xbb, 0xb7, 0x1d, 0x15, 0x07, 0x57, 0x4a, 0xe9, 0x8b, 0x14, 0xe8, 0x09, 0x3d, 0x3f, 0xdd, 0x56, - 0xe8, 0x31, 0x76, 0xf1, 0xf1, 0x3c, 0x41, 0xf0, 0x34, 0xf5, 0x04, 0x1c, 0xd2, 0x79, 0x62, 0xbe, - 0xfe, 0x34, 0x36, 0x1f, 0x4b, 0xd9, 0x3f, 0x0d, 0x7a, 0x20, 0x13, 0x8a, 0x61, 0x12, 0x7f, 0x0f, - 0xfc, 0xb1, 0x3f, 0x10, 0xbf, 0x95, 0x49, 0x1a, 0x16, 0xca, 0x48, 0x1b, 0x89, 0x61, 0xe4, 0x31, - 0x20, 0x51, 0x5d, 0xff, 0x7c, 0xad, 0x63, 0x95, 0x7e, 0x95, 0xba, 0x25, 0x7b, 0x85, 0xc6, 0xcc, - 0x5b, 0xbe, 0x23, 0x59, 0x7a, 0x61, 0xf5, 0xf8, 0x3e, 0x69, 0xc9, 0x29, 0x17, 0x86, 0x8e, 0x85, - 0xee, 0x06, 0x1e, 0x87, 0xd4, 0x28, 0x6d, 0x97, 0xac, 0x8b, 0x67, 0xd2, 0x01, 0xe2, 0x01, 0x72, - 0x82, 0xe9, 0x7f, 0xed, 0x0b, 0xf3, 0xc6, 0x15, 0x42, 0x00, 0xd3, 0x55, 0x52, 0x7b, 0x16, 0x29, - 0x34, 0x8a, 0x52, 0x9b, 0xb8, 0xdb, 0x1b, 0x06, 0x23, 0xd4, 0x2f, 0xee, 0xee, 0x3a, 0x89, 0x11, - 0x25, 0xc3, 0xf3, 0x51, 0xa1, 0x00, 0x49, 0x18, 0x6b, 0xc4, 0x78, 0x75, 0x59, 0xbc, 0xea, 0x95, - 0x5e, 0x5d, 0x14, 0xaf, 0xfa, 0x67, 0xae, 0xad, 0xa8, 0xe1, 0x61, 0x4b, 0x3f, 0x03, 0x53, 0x1a, - 0xaa, 0x5a, 0x8d, 0xb2, 0x77, 0x45, 0xd9, 0xfd, 0x33, 0x12, 0xa9, 0x0f, 0x4f, 0xde, 0x52, 0x16, - 0x11, 0x79, 0x0e, 0x87, 0xe4, 0x24, 0x4a, 0x72, 0x7b, 0x82, 0x04, 0x2b, 0xf4, 0xc1, 0x50, 0x66, - 0x92, 0xa3, 0x00, 0x05, 0x7f, 0x58, 0x45, 0xad, 0x71, 0x87, 0x17, 0x6a, 0x15, 0xd2, 0x7b, 0xc7, - 0xad, 0x2a, 0x91, 0xd4, 0xfb, 0xec, 0xde, 0xad, 0x57, 0x21, 0xa9, 0x1c, 0xa1, 0x91, 0x03, 0x15, - 0x48, 0x45, 0xe5, 0xbd, 0x31, 0xfe, 0x33, 0xe8, 0xba, 0x25, 0x2d, 0x52, 0x91, 0xa3, 0x8f, 0x39, - 0xfa, 0xa5, 0x1c, 0xfb, 0x7a, 0x8e, 0x7d, 0xcc, 0xb1, 0x2f, 0x73, 0xd0, 0x99, 0xe8, 0xe7, 0x9e, - 0x1e, 0x82, 0x6f, 0xcb, 0xef, 0x24, 0x3d, 0xfd, 0x6d, 0xbf, 0xfc, 0xb6, 0xaf, 0xbf, 0xdd, 0x2f, - 0xbf, 0xdd, 0x47, 0xf8, 0x2d, 0xdc, 0x02, 0x09, 0x8b, 0x5c, 0xfc, 0xe6, 0xed, 0x97, 0x50, 0x7a, - 0x65, 0xe0, 0x0a, 0xf9, 0x82, 0x01, 0x94, 0xba, 0x88, 0x84, 0x54, 0x58, 0xef, 0x5e, 0xa3, 0xa5, - 0x5d, 0x6b, 0xa6, 0xd0, 0x24, 0xb7, 0x0c, 0xd8, 0xa4, 0x1e, 0xe1, 0x2d, 0x21, 0xb4, 0x70, 0x10, - 0x27, 0x37, 0x97, 0x57, 0xad, 0x6c, 0xee, 0x4f, 0x82, 0x56, 0x9e, 0xb4, 0x32, 0x1f, 0x24, 0x39, - 0x46, 0x22, 0x2f, 0x15, 0x21, 0x18, 0x26, 0x66, 0xaf, 0xf4, 0x05, 0x61, 0x4e, 0x6d, 0xe4, 0x21, - 0x38, 0xa6, 0x77, 0x61, 0x96, 0xa1, 0x50, 0x18, 0xa6, 0x74, 0x43, 0x53, 0xca, 0xf2, 0x03, 0x66, - 0x79, 0xa1, 0xb5, 0x4c, 0x68, 0x9f, 0x81, 0xe0, 0x5a, 0xc9, 0x64, 0x82, 0x1e, 0x3e, 0x1d, 0x6b, - 0xa9, 0xad, 0x4d, 0x92, 0x06, 0x18, 0x80, 0x0c, 0x7f, 0x91, 0x66, 0xba, 0x1d, 0x92, 0x75, 0x8d, - 0x5c, 0xc8, 0x85, 0xea, 0x03, 0x26, 0x68, 0xee, 0x47, 0x6e, 0x71, 0xa8, 0x83, 0x84, 0xd9, 0xbd, - 0x5b, 0x8a, 0x4a, 0x64, 0xae, 0xee, 0x62, 0xcb, 0xab, 0x3b, 0x1f, 0xb2, 0xed, 0xf1, 0xd6, 0xa6, - 0xe1, 0xd3, 0x74, 0x8b, 0xd2, 0xbc, 0x12, 0x46, 0xcd, 0xcd, 0x8a, 0x24, 0x72, 0xbb, 0x87, 0x03, - 0x20, 0x06, 0x45, 0xcb, 0xf4, 0xe0, 0x69, 0x14, 0x80, 0x4d, 0xde, 0xa2, 0x71, 0x50, 0x33, 0x84, - 0x98, 0xc7, 0x7c, 0x31, 0xb9, 0x9f, 0xa8, 0xe0, 0x69, 0xae, 0xaf, 0xf2, 0x1d, 0xf4, 0x65, 0xce, - 0x9e, 0xc8, 0xd9, 0x33, 0x72, 0x26, 0x45, 0xce, 0x7d, 0x99, 0xb3, 0x2f, 0x72, 0x9a, 0x01, 0xd9, - 0x54, 0xd0, 0x39, 0xe0, 0x37, 0xd9, 0xc1, 0xb3, 0x61, 0x86, 0xb7, 0x44, 0x4c, 0x7c, 0xda, 0x9a, - 0xb0, 0xd8, 0x10, 0x49, 0x4b, 0x79, 0x4b, 0x18, 0xee, 0x90, 0x3c, 0xdc, 0x82, 0x95, 0x9e, 0xc1, - 0xce, 0x77, 0xd0, 0xeb, 0x3f, 0x1f, 0xf7, 0x07, 0xcf, 0xe0, 0xfc, 0x1a, 0xc9, 0x11, 0xca, 0x38, - 0xca, 0x5b, 0x04, 0x1c, 0x7e, 0x6c, 0x1b, 0xa9, 0x5b, 0x32, 0x39, 0xd5, 0xce, 0x1a, 0x98, 0x30, - 0xd0, 0x13, 0xf0, 0xf8, 0x3c, 0x16, 0x5e, 0x1c, 0x2d, 0x42, 0xe3, 0x23, 0x9b, 0xbe, 0x22, 0x2d, - 0x54, 0x2c, 0x61, 0x60, 0x71, 0xcc, 0x2b, 0x90, 0x9a, 0x33, 0x44, 0xdf, 0x0e, 0x57, 0x80, 0x90, - 0x87, 0x0d, 0x5a, 0x16, 0xb4, 0x20, 0x94, 0x8d, 0x7c, 0x26, 0x8e, 0x67, 0xb3, 0x7b, 0x38, 0xe3, - 0xd7, 0x86, 0x26, 0x44, 0xe9, 0xc4, 0x2a, 0x5f, 0xb7, 0xed, 0xd3, 0x55, 0xd0, 0xb3, 0x76, 0x70, - 0x10, 0xa9, 0xdb, 0x69, 0x0a, 0x74, 0x17, 0x9d, 0x42, 0xe2, 0x99, 0x40, 0x5e, 0xc7, 0x2a, 0xd1, - 0x0f, 0x7b, 0x75, 0xf4, 0x4a, 0xc8, 0x25, 0x86, 0x39, 0x30, 0xae, 0x71, 0xb7, 0x2c, 0x55, 0x9d, - 0xf5, 0x33, 0xc5, 0x5d, 0xb4, 0x06, 0xfc, 0x0c, 0x02, 0xda, 0x45, 0x96, 0xa7, 0x76, 0xd7, 0xed, - 0x7d, 0x0f, 0xfd, 0x6c, 0xf8, 0x96, 0xde, 0xe5, 0xc2, 0x4d, 0xa9, 0xda, 0x51, 0xca, 0x27, 0x7a, - 0x09, 0x8b, 0x05, 0xd9, 0x6f, 0x0a, 0x8c, 0xd1, 0xb6, 0x1d, 0xd8, 0xed, 0xb8, 0xcb, 0x85, 0x21, - 0x4f, 0xd9, 0xa4, 0x5e, 0xa3, 0x15, 0x3a, 0x9e, 0x48, 0x53, 0xaa, 0xa0, 0xed, 0x3d, 0x1b, 0xca, - 0x68, 0x68, 0x25, 0xb5, 0xc3, 0x37, 0xac, 0xbf, 0x6a, 0xe9, 0x7a, 0x25, 0x56, 0x46, 0x19, 0x8a, - 0xa3, 0x00, 0xef, 0x25, 0xa1, 0xed, 0xee, 0x5f, 0x9e, 0x75, 0xe5, 0x9d, 0xab, 0x65, 0xb9, 0x73, - 0xfc, 0x07, 0x11, 0xf9, 0x6e, 0x3c, 0xdc, 0x8c, 0xea, 0x6c, 0xaa, 0xcc, 0xad, 0xd7, 0xb8, 0x19, - 0xc5, 0x6a, 0x66, 0xc5, 0x06, 0x0d, 0x23, 0x86, 0x1b, 0x5c, 0xb1, 0xd6, 0x79, 0x1a, 0x29, 0x40, - 0x05, 0xb2, 0x88, 0x59, 0xf3, 0xdc, 0xcd, 0x0c, 0x9d, 0x1e, 0xb4, 0x87, 0x88, 0x9d, 0x4b, 0xb2, - 0x35, 0x28, 0xf1, 0x08, 0x35, 0x55, 0x7d, 0xa0, 0x21, 0x6d, 0x7a, 0xaf, 0xdc, 0x2b, 0xce, 0x8d, - 0xd7, 0x9e, 0x6d, 0x6f, 0xde, 0xbe, 0x6a, 0xc3, 0xb9, 0xb5, 0x4d, 0x4c, 0x04, 0xba, 0xe8, 0xb6, - 0xe4, 0xac, 0xcd, 0xcc, 0x85, 0x12, 0x8c, 0xad, 0x37, 0xf7, 0xb4, 0x3c, 0xe0, 0xd7, 0xcb, 0x4b, - 0x5c, 0x10, 0x99, 0x35, 0x04, 0xe1, 0xf2, 0x06, 0xb6, 0x95, 0x87, 0x07, 0x6d, 0xab, 0x0e, 0x80, - 0xbe, 0xa4, 0x87, 0x5a, 0x3e, 0x36, 0xba, 0xa2, 0x5b, 0xdf, 0x96, 0xfa, 0xd1, 0x73, 0xf5, 0x0f, - 0x5a, 0x78, 0xc0, 0x6e, 0xf7, 0x80, 0xc8, 0x1e, 0x35, 0x14, 0x75, 0x55, 0xb8, 0xcd, 0x6d, 0x74, - 0x96, 0x72, 0x42, 0x78, 0x21, 0xe8, 0xcb, 0x60, 0x22, 0x8c, 0xd2, 0xa4, 0xc6, 0xfb, 0xce, 0x42, - 0xf3, 0x33, 0xa5, 0xff, 0xe6, 0xbb, 0x42, 0x75, 0x23, 0xb4, 0x95, 0x3f, 0x3c, 0x24, 0xa5, 0xe0, - 0x93, 0x09, 0xc5, 0x9e, 0x64, 0x33, 0x5c, 0xfc, 0xed, 0x38, 0x34, 0xb5, 0xb7, 0x25, 0xc5, 0x85, - 0xb0, 0x6b, 0xd8, 0x65, 0x8d, 0x85, 0xab, 0xd7, 0x82, 0xa5, 0x0a, 0x2d, 0x91, 0x67, 0x39, 0xf2, - 0x3a, 0xf2, 0xc8, 0xab, 0xbc, 0x1a, 0x2a, 0x33, 0xce, 0xae, 0xab, 0x0c, 0x2a, 0xd1, 0xfe, 0x4f, - 0xbb, 0x2c, 0xee, 0x2a, 0xb2, 0x38, 0xc2, 0xb1, 0x75, 0x9c, 0x21, 0xa6, 0x79, 0xda, 0x0b, 0x54, - 0x5d, 0x74, 0xdd, 0x23, 0x67, 0x69, 0x74, 0x66, 0x4b, 0xf4, 0x66, 0x7c, 0xad, 0x0d, 0x10, 0x26, - 0x0c, 0xae, 0x0d, 0xff, 0xfd, 0x32, 0x10, 0x62, 0x10, 0x89, 0x00, 0xe6, 0x3a, 0x1e, 0xc9, 0x4f, - 0xc1, 0xbd, 0x2d, 0xa1, 0x48, 0x2e, 0xf6, 0xc9, 0xc1, 0xbe, 0x45, 0x07, 0xcf, 0x96, 0xb8, 0x2e, - 0xd8, 0x61, 0xd2, 0xf9, 0x67, 0x54, 0x4d, 0xb2, 0x06, 0xc6, 0x71, 0xde, 0x71, 0x2b, 0xd3, 0xc0, - 0x9a, 0x22, 0x72, 0x9b, 0x2b, 0x0e, 0xb1, 0xbd, 0xa1, 0x76, 0x84, 0x2d, 0x82, 0xeb, 0x06, 0xac, - 0x5d, 0x5e, 0x48, 0x7b, 0xa0, 0x8d, 0x8f, 0xd4, 0x5f, 0xe0, 0x48, 0xbd, 0x05, 0xa4, 0xa8, 0x3e, - 0xe1, 0x2c, 0x34, 0x55, 0xc6, 0xc3, 0x83, 0xae, 0xe5, 0xf0, 0xb4, 0xb3, 0x37, 0xf1, 0xc4, 0x3b, - 0xd8, 0xd9, 0xee, 0x50, 0x09, 0x0e, 0xc7, 0x79, 0x5b, 0x1d, 0xc1, 0x5d, 0x14, 0x6f, 0x74, 0x2d, - 0xc7, 0xd2, 0xdd, 0x0f, 0xf6, 0xc5, 0x55, 0xa1, 0xd0, 0x8e, 0x64, 0xde, 0x3a, 0xdf, 0x2e, 0x8c, - 0x56, 0x11, 0x7b, 0xe2, 0x0b, 0x78, 0x5a, 0xff, 0x42, 0xc7, 0x75, 0xcf, 0xf3, 0x94, 0x96, 0xa9, - 0xf3, 0xf3, 0xf1, 0xeb, 0xf7, 0x68, 0x94, 0x3c, 0xb6, 0xe6, 0x49, 0x86, 0x90, 0x0f, 0xe8, 0x00, - 0x46, 0x27, 0x77, 0x74, 0xc8, 0xb9, 0xc5, 0x80, 0x22, 0x70, 0x2c, 0x86, 0x16, 0xb3, 0x45, 0xef, - 0x2c, 0x4a, 0x80, 0x45, 0xa2, 0x26, 0xa6, 0x13, 0x27, 0x77, 0x36, 0x23, 0x6c, 0x0f, 0xf9, 0x60, - 0xa6, 0x4e, 0xcc, 0xcc, 0x05, 0x81, 0xed, 0x87, 0x53, 0xd8, 0x66, 0xf9, 0xc7, 0xf6, 0xb6, 0xf0, - 0xce, 0xd2, 0xce, 0xd8, 0x4c, 0xf7, 0x5a, 0x10, 0xbf, 0x5e, 0xf7, 0x89, 0xf4, 0x9d, 0x18, 0x26, - 0x5b, 0x70, 0xe4, 0xa6, 0xc8, 0x8d, 0x45, 0x01, 0x2f, 0x71, 0x96, 0xb6, 0xd0, 0x30, 0x15, 0x41, - 0xc4, 0x40, 0xa6, 0x52, 0x16, 0x45, 0xfb, 0x4f, 0xc9, 0x3b, 0x0a, 0xb5, 0x11, 0x6e, 0xae, 0xf6, - 0xe5, 0x6e, 0xb7, 0x08, 0xc3, 0x09, 0xa4, 0x1f, 0x64, 0x73, 0x0a, 0xaf, 0xa6, 0x39, 0xc3, 0x63, - 0xa4, 0x07, 0x59, 0x70, 0x19, 0x8f, 0xef, 0x32, 0xd2, 0x19, 0xd8, 0x30, 0x7b, 0x3b, 0x0b, 0xeb, - 0xd6, 0x1a, 0x60, 0xb8, 0x89, 0xe5, 0x8e, 0x33, 0x60, 0xa7, 0xba, 0x4c, 0xf9, 0xcb, 0x45, 0x35, - 0x21, 0xd0, 0xf2, 0xfa, 0x10, 0x68, 0xc3, 0x16, 0xa2, 0x2a, 0xa1, 0xee, 0xe1, 0xaf, 0x1f, 0xdf, - 0xec, 0x3e, 0x97, 0x11, 0xd1, 0x72, 0xdd, 0xdb, 0xee, 0x11, 0xca, 0xb1, 0xc2, 0x31, 0xcf, 0xd0, - 0x86, 0xd5, 0xf9, 0xdf, 0xa1, 0x8c, 0xb2, 0x81, 0x2a, 0x0d, 0x29, 0xec, 0x91, 0xda, 0xb4, 0x4b, - 0x07, 0x83, 0xad, 0xb1, 0xde, 0x47, 0x69, 0x7a, 0x16, 0xa4, 0xf7, 0xa1, 0xe8, 0xa7, 0xea, 0xf2, - 0x83, 0xd4, 0x66, 0x85, 0x9e, 0x2d, 0x2f, 0xfc, 0xff, 0x54, 0x18, 0xd9, 0xbc, 0x41, 0xf7, 0x96, - 0xa3, 0x18, 0xaf, 0x34, 0x4d, 0x42, 0xe7, 0x26, 0xfe, 0x0e, 0x02, 0xa1, 0x28, 0x63, 0x87, 0xaf, - 0xb7, 0xe1, 0x6d, 0x70, 0x4b, 0x7a, 0x32, 0x77, 0x8e, 0x6b, 0x9a, 0xa2, 0x04, 0x73, 0x40, 0x56, - 0x7a, 0x76, 0x70, 0xbf, 0x30, 0xd7, 0x1f, 0x3a, 0x31, 0xf2, 0x99, 0x25, 0x33, 0x16, 0xe4, 0x8a, - 0xe5, 0xf2, 0xf0, 0x20, 0x35, 0xb9, 0x4b, 0x58, 0x97, 0xfd, 0x67, 0xa8, 0xe5, 0xd3, 0x34, 0x64, - 0xcc, 0xe9, 0xf4, 0xf3, 0x09, 0x36, 0x00, 0x43, 0xd9, 0xcd, 0x81, 0xcb, 0x05, 0x16, 0xfb, 0x31, - 0xae, 0xf4, 0x71, 0x2c, 0xfb, 0xc8, 0x91, 0x45, 0x88, 0xba, 0xb6, 0x5b, 0x24, 0xf1, 0x80, 0x94, - 0x68, 0x5b, 0xf8, 0xef, 0x92, 0x14, 0x6a, 0x3a, 0x7d, 0x17, 0xca, 0x10, 0x52, 0x9e, 0x1b, 0x8f, - 0x59, 0x70, 0xc9, 0xa7, 0x6b, 0x56, 0xad, 0xa3, 0x62, 0x8a, 0x54, 0x17, 0x0a, 0x70, 0x18, 0xf7, - 0x0e, 0x0c, 0x35, 0x5d, 0x2e, 0xe5, 0xce, 0xd2, 0x7f, 0x0c, 0xb6, 0x7a, 0x4b, 0xea, 0x6c, 0xc1, - 0x33, 0x2b, 0xee, 0x7c, 0xef, 0x31, 0xd0, 0x5e, 0xd1, 0x23, 0x1b, 0xd5, 0x78, 0x5b, 0xf0, 0x8f, - 0x33, 0x3e, 0xc7, 0x71, 0x07, 0x3e, 0xc1, 0xd0, 0x12, 0xad, 0x4f, 0xc9, 0x4d, 0xda, 0xa2, 0xf8, - 0x19, 0xad, 0xbb, 0x30, 0x8a, 0x5a, 0x74, 0x50, 0xfb, 0x76, 0x41, 0xba, 0xbd, 0x51, 0x57, 0x0b, - 0xdd, 0xb2, 0xa4, 0xd4, 0x77, 0x08, 0x4a, 0x6d, 0xd1, 0xbd, 0x07, 0x2c, 0xad, 0x19, 0x88, 0x95, - 0xe2, 0xc5, 0xab, 0x9b, 0x74, 0x89, 0xe0, 0x1f, 0xe4, 0x47, 0x79, 0x3e, 0xb0, 0xf8, 0x2b, 0x53, - 0x86, 0xb0, 0x80, 0xe9, 0x23, 0x87, 0x5e, 0x23, 0x88, 0x7a, 0x1c, 0x0d, 0x70, 0x08, 0xa1, 0x51, - 0xcb, 0x65, 0xa5, 0xfd, 0x22, 0xde, 0x9c, 0xd6, 0x03, 0xa5, 0x4c, 0xdc, 0x92, 0xbf, 0x1c, 0x90, - 0xa1, 0xc9, 0x75, 0x98, 0x9a, 0x9f, 0xc1, 0x89, 0xa2, 0x05, 0x8f, 0xad, 0x38, 0xc8, 0xef, 0x92, - 0xf4, 0x33, 0x77, 0x07, 0xe3, 0xd1, 0x61, 0x7e, 0x3c, 0x32, 0x63, 0x84, 0x76, 0xd8, 0xd3, 0x82, - 0x0e, 0x34, 0xfd, 0x23, 0xfe, 0xe6, 0x6e, 0x23, 0xe8, 0x67, 0xb2, 0xbe, 0x9e, 0x56, 0x94, 0xc4, - 0x97, 0x90, 0x09, 0x6b, 0x83, 0xbe, 0x08, 0x6b, 0x91, 0x05, 0x2a, 0x36, 0x07, 0x0b, 0xe4, 0x52, - 0x03, 0xd9, 0xae, 0xe5, 0x72, 0x88, 0x3f, 0x3f, 0x5e, 0x46, 0x1f, 0x82, 0xc9, 0x2d, 0x4d, 0x32, - 0xa9, 0x3f, 0x53, 0x78, 0x52, 0xc6, 0x3e, 0xeb, 0x26, 0xb0, 0x58, 0x43, 0x0b, 0xe9, 0x11, 0x98, - 0xbd, 0xbd, 0x45, 0x5a, 0x7b, 0x7b, 0x2b, 0xb9, 0x03, 0xf0, 0x80, 0x1f, 0x11, 0xe9, 0xa3, 0xb4, - 0xdd, 0x62, 0x96, 0x8a, 0x49, 0x27, 0x15, 0x61, 0x0c, 0x8f, 0xc7, 0x95, 0x01, 0xa2, 0xdb, 0xb8, - 0xc0, 0x4a, 0xdf, 0x16, 0x2c, 0x01, 0x3c, 0x05, 0x1e, 0x34, 0x1f, 0x18, 0xe1, 0x10, 0x28, 0x39, - 0x8e, 0xc6, 0x44, 0x88, 0xe9, 0x60, 0x29, 0xf2, 0x4c, 0x36, 0x5e, 0x09, 0xd7, 0x6a, 0xb7, 0x18, - 0x11, 0x19, 0xa3, 0x3a, 0x12, 0xa3, 0x66, 0x91, 0xd9, 0x4e, 0x50, 0xdf, 0x68, 0xe3, 0xfe, 0x4a, - 0x6c, 0xe5, 0x2b, 0xf6, 0x70, 0x38, 0x50, 0xa8, 0xda, 0xd2, 0x09, 0xd7, 0x91, 0x03, 0xf1, 0x5f, - 0x00, 0xf3, 0x1a, 0x5c, 0x44, 0x7e, 0x0c, 0x92, 0x25, 0x86, 0x0c, 0xb0, 0x85, 0xc8, 0x2b, 0xac, - 0xbc, 0xca, 0xa6, 0x63, 0xf8, 0x65, 0xcd, 0xbe, 0x6b, 0x3d, 0x7f, 0xa3, 0xf7, 0xb4, 0xfd, 0x9d, - 0x2f, 0xf0, 0x6a, 0x0f, 0x61, 0x07, 0xa1, 0x96, 0xe5, 0xf2, 0x5c, 0x23, 0x96, 0x8b, 0xf0, 0x12, - 0x87, 0xd1, 0x0e, 0x24, 0x8f, 0x57, 0x43, 0xd0, 0x7f, 0x25, 0xe5, 0x07, 0x36, 0xa5, 0xd1, 0xd2, - 0xcd, 0xc8, 0x50, 0xe1, 0x0c, 0x75, 0x28, 0x14, 0x98, 0x4b, 0xcb, 0xd3, 0xc2, 0xbe, 0x1a, 0x9d, - 0x84, 0xa5, 0x83, 0x5c, 0x5a, 0xc0, 0x1d, 0x8a, 0x68, 0xaf, 0xbf, 0xf2, 0xe5, 0xd6, 0x34, 0x99, - 0xdc, 0xa0, 0x56, 0xb6, 0x83, 0x7b, 0x69, 0x47, 0xca, 0x8d, 0xca, 0xa8, 0xd1, 0x59, 0xc8, 0x76, - 0x52, 0xdc, 0x28, 0x67, 0x48, 0xa1, 0xbf, 0xf8, 0xc3, 0xa3, 0x1d, 0x1e, 0xb6, 0x6b, 0xa3, 0x81, - 0x95, 0x2b, 0xd5, 0x8d, 0xae, 0x4d, 0x89, 0x62, 0xf3, 0xca, 0xf5, 0x65, 0xdd, 0x94, 0x67, 0xab, - 0xa7, 0x3c, 0x1f, 0xca, 0xaa, 0x60, 0x18, 0x82, 0x71, 0x66, 0xce, 0x77, 0x79, 0xb1, 0x32, 0xad, - 0x2e, 0x14, 0xad, 0x9a, 0x64, 0x6a, 0x33, 0x75, 0x23, 0xa5, 0x1e, 0x71, 0x2c, 0x72, 0x7d, 0xe9, - 0x8b, 0xbd, 0x1e, 0x99, 0x7c, 0x4d, 0xbf, 0xb9, 0xc8, 0xe6, 0x9d, 0x17, 0xd4, 0x77, 0x54, 0x22, - 0x3e, 0xae, 0xa4, 0x20, 0xbf, 0xca, 0x76, 0x21, 0x82, 0x15, 0xc8, 0x75, 0x68, 0x2c, 0x41, 0x5b, - 0xf4, 0x0b, 0x3b, 0x40, 0x3f, 0x30, 0x9a, 0x7a, 0x11, 0xe1, 0x80, 0xbf, 0xcb, 0x01, 0x0c, 0xea, - 0x3a, 0x40, 0xd9, 0x1e, 0xdd, 0x83, 0xf7, 0xa2, 0x3e, 0xbd, 0x17, 0xa2, 0xa6, 0xba, 0x6e, 0xa0, - 0x28, 0x80, 0xa8, 0x36, 0x72, 0x73, 0xee, 0xba, 0x18, 0xf8, 0x25, 0x33, 0x00, 0x66, 0x48, 0xed, - 0x2d, 0x01, 0x40, 0x6a, 0x7d, 0xc4, 0xb3, 0xdd, 0x5e, 0xe1, 0x25, 0xee, 0xf6, 0xba, 0x35, 0x6e, - 0xc2, 0x0d, 0xa5, 0x32, 0xbd, 0x14, 0x7a, 0x12, 0x23, 0x2c, 0xba, 0xcd, 0xed, 0xb8, 0xbe, 0x83, - 0xa3, 0x76, 0xac, 0x41, 0xa1, 0xe0, 0x19, 0x07, 0x0d, 0x7d, 0x94, 0x1f, 0x76, 0xe5, 0x2b, 0x01, - 0xc2, 0x99, 0x2d, 0x75, 0x20, 0x14, 0x1c, 0xda, 0x49, 0x9a, 0x44, 0x11, 0x7c, 0x3b, 0xa1, 0x4b, - 0xc8, 0xc5, 0x45, 0x70, 0xe5, 0xdf, 0x86, 0x49, 0x3a, 0xb0, 0xb2, 0xeb, 0x04, 0x76, 0x30, 0xcb, - 0x25, 0x32, 0x1f, 0x58, 0x74, 0x8d, 0x63, 0x2d, 0xa5, 0x85, 0x4e, 0x3d, 0x0c, 0xae, 0xc2, 0xb8, - 0x1d, 0x55, 0xd1, 0x23, 0x47, 0x35, 0x98, 0x8f, 0x0a, 0x29, 0x2a, 0x7b, 0x04, 0xcc, 0x63, 0x09, - 0xd9, 0xf1, 0x3d, 0xc8, 0xbc, 0x99, 0x80, 0x70, 0xa5, 0x00, 0x80, 0x65, 0x70, 0xc7, 0x02, 0xd6, - 0x11, 0x63, 0x05, 0xb2, 0xb3, 0xa0, 0xb5, 0xff, 0xfc, 0x3b, 0x8c, 0xc4, 0x42, 0x40, 0xf3, 0xcd, - 0x08, 0x8f, 0xf5, 0x05, 0xfe, 0x54, 0xb0, 0xc7, 0x4d, 0xe1, 0xf6, 0xb0, 0x6b, 0xeb, 0xd0, 0x1c, - 0xb1, 0x71, 0xd7, 0x77, 0xbb, 0xbd, 0x41, 0xe1, 0x8c, 0xaf, 0x43, 0x26, 0x06, 0x4d, 0x38, 0x69, - 0x59, 0x33, 0x4e, 0x5a, 0xb6, 0xdc, 0x10, 0x75, 0x0f, 0xb3, 0xae, 0x03, 0x73, 0x34, 0x00, 0x1c, - 0xf3, 0xaf, 0x6f, 0xcd, 0x63, 0x20, 0xdb, 0xb2, 0xda, 0x68, 0x82, 0x17, 0xf9, 0x55, 0x05, 0xb3, - 0x2d, 0xdb, 0x00, 0xb3, 0x2d, 0x4f, 0xa9, 0x00, 0x87, 0x5b, 0x90, 0x55, 0x0a, 0x72, 0x82, 0x39, - 0x26, 0x7d, 0x17, 0xee, 0x47, 0x35, 0xa0, 0x8c, 0xdf, 0x2e, 0xd6, 0x62, 0x32, 0x2e, 0xeb, 0xbf, - 0xf4, 0x6a, 0xcd, 0x97, 0xd6, 0x51, 0xcf, 0xa7, 0x35, 0xd3, 0x83, 0x50, 0x8d, 0xc5, 0x0c, 0x75, - 0xff, 0xd9, 0xc4, 0xb2, 0xbe, 0x39, 0x3a, 0xb9, 0x10, 0x6d, 0x5f, 0x0d, 0x7a, 0x5f, 0x47, 0x35, - 0x3a, 0xe0, 0x9e, 0x81, 0xb6, 0x67, 0x34, 0x8d, 0xa0, 0xf6, 0xbe, 0x5d, 0xa8, 0x55, 0x14, 0x2c, - 0x29, 0x80, 0x80, 0x88, 0x30, 0xaf, 0x15, 0x9b, 0x58, 0x4d, 0x44, 0x38, 0xd7, 0xd1, 0xd9, 0x14, - 0xf6, 0x18, 0xb4, 0xe3, 0x10, 0xcd, 0x6b, 0xa2, 0x5a, 0xec, 0x33, 0x81, 0xa8, 0x31, 0x2c, 0xb1, - 0xe8, 0x42, 0xae, 0x8a, 0x75, 0x03, 0x0d, 0x59, 0x67, 0x40, 0xe6, 0x19, 0x8d, 0x65, 0x2a, 0x8c, - 0x5a, 0xb6, 0x30, 0x03, 0x86, 0x30, 0x86, 0x56, 0x02, 0x9b, 0x65, 0x58, 0x01, 0x11, 0xae, 0x6a, - 0xee, 0x4f, 0xa7, 0x61, 0x7c, 0x39, 0xe8, 0x0e, 0xff, 0x38, 0x06, 0x39, 0x01, 0x93, 0x55, 0xf0, - 0xc7, 0xf1, 0xa6, 0x1c, 0xe5, 0x3c, 0xc7, 0xfa, 0x2a, 0xb0, 0x71, 0x6a, 0xb7, 0x35, 0xd8, 0x51, - 0xe3, 0xab, 0xf6, 0x69, 0x6b, 0x67, 0xb9, 0x06, 0x7b, 0xae, 0xf7, 0xdc, 0xa7, 0x35, 0xfd, 0x62, - 0x3a, 0x95, 0x9b, 0x46, 0x75, 0x56, 0x1b, 0x61, 0xbf, 0xeb, 0xf0, 0xbd, 0x9b, 0xc0, 0xbd, 0xbf, - 0x12, 0xc8, 0xfb, 0xf5, 0xfe, 0xd3, 0x97, 0xcc, 0x7d, 0xbe, 0x1e, 0x97, 0x3b, 0x42, 0xf0, 0xea, - 0xaf, 0x84, 0xe4, 0xa6, 0x3a, 0xbe, 0x12, 0x8d, 0x9b, 0xea, 0xf8, 0x4a, 0x20, 0x6e, 0xaa, 0x63, - 0x1d, 0x06, 0xb7, 0x58, 0x48, 0xa6, 0x24, 0x77, 0x0c, 0x24, 0x18, 0x29, 0x73, 0x26, 0x19, 0xff, - 0x7c, 0xc8, 0xf1, 0x42, 0x5a, 0xa4, 0x43, 0xc2, 0xd8, 0x46, 0x2c, 0xde, 0xfc, 0x7c, 0xf1, 0x1f, - 0x70, 0xa8, 0xed, 0xc0, 0x74, 0xa5, 0x21, 0xc8, 0xa3, 0xac, 0x61, 0x52, 0x20, 0x35, 0x11, 0x5a, - 0x89, 0x0a, 0x15, 0x27, 0xc3, 0xa9, 0x74, 0xe2, 0x31, 0xff, 0x19, 0xc8, 0x5b, 0x72, 0x10, 0xfe, - 0xb1, 0x3a, 0xbc, 0x0e, 0x8d, 0x74, 0xcb, 0xc3, 0xd2, 0x63, 0x67, 0x2e, 0x82, 0x96, 0x55, 0xc1, - 0xdb, 0xb0, 0x3c, 0xc1, 0x7b, 0xe0, 0x0f, 0xba, 0xc6, 0x29, 0x03, 0xb6, 0xf9, 0x1a, 0xd2, 0x5a, - 0x71, 0x21, 0xae, 0x33, 0x89, 0x19, 0x34, 0xe6, 0xea, 0x38, 0x7a, 0x5d, 0xf6, 0x08, 0x88, 0x02, - 0x79, 0xa5, 0x95, 0x17, 0xf8, 0x07, 0x19, 0x1c, 0xdc, 0x34, 0x6a, 0x9b, 0x85, 0x69, 0x06, 0xec, - 0xdb, 0x1a, 0x1d, 0x8b, 0xb6, 0xb6, 0xc4, 0x70, 0xf0, 0xf0, 0xee, 0xb8, 0x1c, 0x50, 0x74, 0x4e, - 0xa0, 0x4d, 0x78, 0x85, 0xa5, 0x00, 0xf1, 0x28, 0xc4, 0x28, 0xf4, 0x89, 0x87, 0x1d, 0xd8, 0x70, - 0xfa, 0xc5, 0xc6, 0xb8, 0x82, 0x43, 0x8a, 0x92, 0xa6, 0xb3, 0xdd, 0xf4, 0x1f, 0x12, 0x48, 0x68, - 0xc7, 0xcd, 0xf5, 0xb8, 0x67, 0xc2, 0xb8, 0x29, 0x6f, 0x0c, 0xeb, 0x45, 0x4c, 0x36, 0xda, 0x45, - 0x30, 0x4d, 0x67, 0x18, 0xa9, 0x8b, 0x70, 0x10, 0x84, 0x23, 0x0e, 0xd3, 0x58, 0xbd, 0x2c, 0x30, - 0x94, 0xd9, 0xe4, 0xd8, 0x8f, 0x17, 0x4e, 0x08, 0x08, 0xd3, 0x1c, 0x3c, 0x8c, 0xaa, 0x97, 0x03, - 0x14, 0xe3, 0xbc, 0xfb, 0x4e, 0xac, 0xae, 0xb1, 0x60, 0xae, 0xe0, 0x83, 0x05, 0x1a, 0x8d, 0xfe, - 0xc2, 0x19, 0x61, 0x1c, 0x1c, 0x9e, 0x4d, 0xe3, 0xc5, 0x40, 0x1f, 0xb1, 0xd3, 0xe2, 0x15, 0xdd, - 0x0e, 0x9d, 0x69, 0xd8, 0x36, 0x42, 0x5d, 0xae, 0xeb, 0x0c, 0x81, 0x37, 0x1f, 0x47, 0x6c, 0x10, - 0x6b, 0x8c, 0xbb, 0xf0, 0x4b, 0xcc, 0xdb, 0x3d, 0x8c, 0x3c, 0xe1, 0xb8, 0xc5, 0xcb, 0xe9, 0x4d, - 0x6a, 0xbe, 0x35, 0x5e, 0x9d, 0xe6, 0x67, 0x7a, 0xe6, 0x42, 0x1d, 0xdf, 0x54, 0xa6, 0xc8, 0x41, - 0x45, 0x0d, 0x0a, 0xd3, 0x6c, 0x9b, 0x83, 0xa8, 0xb6, 0x99, 0x85, 0xb9, 0x82, 0x5d, 0xdb, 0x7c, - 0xb7, 0xd7, 0xd4, 0x74, 0xf3, 0x4d, 0x4d, 0x3b, 0x31, 0x83, 0xd1, 0x1a, 0x1d, 0xff, 0x20, 0x0a, - 0x8e, 0x33, 0x89, 0x90, 0x62, 0x8c, 0x7e, 0xae, 0x8d, 0x77, 0x56, 0x89, 0x62, 0x06, 0xe5, 0x5e, - 0xdd, 0xa4, 0xb2, 0x60, 0x56, 0xb9, 0xf6, 0xb0, 0xcb, 0x63, 0xa9, 0x5f, 0xa4, 0xf4, 0xba, 0x4f, - 0x32, 0x35, 0x83, 0x7a, 0x95, 0x1f, 0x37, 0xab, 0xd1, 0x18, 0xe9, 0x4d, 0x2a, 0xfe, 0x50, 0x2c, - 0x72, 0x55, 0xcb, 0x10, 0xad, 0xc4, 0xd8, 0x9d, 0x31, 0xc2, 0x03, 0x40, 0x9a, 0x5f, 0x6a, 0xc0, - 0xa2, 0xae, 0xfe, 0x66, 0x6e, 0xbc, 0x1a, 0xdb, 0x78, 0x7b, 0x8b, 0x80, 0xb3, 0x70, 0xdc, 0x14, - 0x3c, 0x12, 0xf9, 0xa1, 0x51, 0x26, 0xe9, 0x9d, 0x3b, 0xf5, 0x2b, 0x6d, 0x50, 0x14, 0x37, 0x0f, - 0xb7, 0xf2, 0x63, 0x45, 0x04, 0x25, 0xaa, 0xb5, 0x36, 0x17, 0x2c, 0xbe, 0xd7, 0xf1, 0xb4, 0xc8, - 0xb9, 0xe6, 0xcb, 0xac, 0x8f, 0x29, 0x19, 0x65, 0x1f, 0x9b, 0x70, 0x17, 0x82, 0xe3, 0x75, 0x3d, - 0x46, 0x06, 0x14, 0xe3, 0x84, 0x7a, 0xf1, 0x79, 0x36, 0x40, 0x53, 0x39, 0x98, 0x47, 0xf8, 0xdb, - 0x45, 0x78, 0x39, 0x35, 0xfe, 0x83, 0xd3, 0x3c, 0x3d, 0x73, 0xb9, 0x3b, 0x83, 0x2e, 0x47, 0xd2, - 0x45, 0xdd, 0x6c, 0x57, 0x9d, 0x86, 0x8b, 0x59, 0xe3, 0x5c, 0xe3, 0x72, 0x02, 0x48, 0x53, 0x99, - 0x10, 0xc5, 0x50, 0x42, 0x02, 0x2a, 0xe0, 0xe3, 0x98, 0xd8, 0xf3, 0x40, 0xf8, 0x81, 0x23, 0xf2, - 0x2e, 0x88, 0x17, 0x83, 0x5e, 0x77, 0x7e, 0x3f, 0x94, 0x4c, 0x71, 0x15, 0xcc, 0xf2, 0xe8, 0xe4, - 0xea, 0x66, 0x36, 0x83, 0x63, 0xee, 0xdf, 0xe2, 0xd6, 0x0a, 0x61, 0xac, 0x98, 0x77, 0x5d, 0x20, - 0x43, 0x6a, 0xc1, 0x74, 0x07, 0xf7, 0x17, 0xad, 0xb1, 0x0f, 0x0f, 0x31, 0x7a, 0x13, 0x68, 0x40, - 0xc7, 0xcb, 0x11, 0x7d, 0x60, 0xb5, 0xbc, 0x06, 0x59, 0xa4, 0xc8, 0x86, 0x3f, 0x57, 0xb5, 0x5a, - 0xa0, 0x18, 0x23, 0xb3, 0x9b, 0x85, 0x71, 0x98, 0x07, 0xd1, 0x97, 0xcd, 0x7a, 0x30, 0x5f, 0xd5, - 0x85, 0x18, 0xaf, 0x15, 0xa0, 0xb9, 0xb2, 0xe1, 0x7f, 0xa4, 0xd5, 0xc5, 0xe4, 0x30, 0x85, 0xa9, - 0xd9, 0x91, 0x60, 0x6f, 0xe2, 0x33, 0xa6, 0xab, 0x82, 0xa5, 0xca, 0x16, 0x67, 0x02, 0xd1, 0x47, - 0xa3, 0x4f, 0xf2, 0x90, 0xa3, 0xf7, 0x48, 0x3b, 0xca, 0x68, 0xbd, 0xa1, 0x50, 0x7b, 0xfd, 0xbf, - 0xd0, 0x71, 0xa8, 0x2b, 0xc4, 0x01, 0xfe, 0x74, 0x0c, 0xc7, 0x9f, 0x51, 0x0b, 0x6f, 0x6c, 0xc5, - 0x1e, 0x5c, 0xfa, 0x34, 0xee, 0x56, 0x23, 0x58, 0x32, 0xc2, 0x86, 0x6f, 0x80, 0xb8, 0xf2, 0xd5, - 0x2c, 0x70, 0x36, 0x19, 0xd5, 0x40, 0xd3, 0xa2, 0x4c, 0xa0, 0xb5, 0x8e, 0x17, 0x5f, 0xc3, 0x80, - 0x93, 0x07, 0x0d, 0xb4, 0xcc, 0xd3, 0x89, 0x07, 0xbd, 0x8d, 0x8d, 0x27, 0x58, 0x20, 0xf4, 0x79, - 0x53, 0xb0, 0xe9, 0x5a, 0xa3, 0xf7, 0x30, 0x72, 0x4a, 0x72, 0xa9, 0xe6, 0x40, 0x84, 0x77, 0x18, - 0x43, 0x90, 0xb6, 0x53, 0x69, 0x8e, 0xa8, 0xe7, 0x86, 0x93, 0xa1, 0x12, 0xe7, 0x56, 0x7e, 0x9d, - 0x6e, 0xdc, 0x68, 0x92, 0x0d, 0xfc, 0xd9, 0x62, 0xe8, 0xea, 0xc6, 0x70, 0xb3, 0x23, 0x5d, 0x0e, - 0xad, 0x83, 0x1d, 0x0e, 0x87, 0xc3, 0x6d, 0xc9, 0x33, 0x8d, 0x3c, 0x09, 0xec, 0x98, 0x27, 0x8f, - 0x1d, 0x3e, 0x79, 0xec, 0xff, 0x40, 0xf2, 0xfc, 0x47, 0x28, 0x59, 0x3a, 0xfd, 0x9d, 0x2f, 0x25, - 0xfc, 0x1e, 0xf2, 0x88, 0x55, 0x8b, 0xa7, 0x42, 0xd4, 0x05, 0x12, 0x1a, 0xbe, 0x3a, 0x62, 0xc0, - 0xd0, 0xd6, 0x05, 0xa1, 0xd2, 0xc5, 0x08, 0xa5, 0x84, 0x05, 0x14, 0xb5, 0xaf, 0x5c, 0x65, 0xd8, - 0x97, 0xf0, 0x82, 0x16, 0x19, 0x9c, 0xb6, 0xf1, 0xc7, 0xa1, 0xd8, 0x0a, 0xca, 0xec, 0xe0, 0x7e, - 0x7f, 0xb2, 0xb5, 0xbb, 0x8b, 0x8e, 0x40, 0xef, 0xde, 0xed, 0xee, 0xc2, 0x63, 0xf0, 0xe7, 0xb2, - 0x88, 0x35, 0xbd, 0x3c, 0x41, 0x2b, 0x55, 0xa9, 0xf1, 0xbb, 0xc0, 0x9b, 0xeb, 0xc7, 0x76, 0x33, - 0x93, 0xdd, 0xcc, 0xfe, 0x3f, 0xee, 0xa6, 0x68, 0x96, 0xec, 0x29, 0xde, 0x32, 0x0a, 0x56, 0xf9, - 0x98, 0x8e, 0xc2, 0xa7, 0xb8, 0xa3, 0xf0, 0xe3, 0x9f, 0xd5, 0xd1, 0xf3, 0x12, 0xce, 0xa5, 0xba, - 0x5f, 0x16, 0x60, 0xd9, 0xc6, 0xb3, 0x86, 0x99, 0x4d, 0xa7, 0x1e, 0x1d, 0xf0, 0xef, 0x22, 0xda, - 0x85, 0x71, 0x31, 0x31, 0xb4, 0x37, 0xe3, 0x5d, 0x5a, 0x9f, 0xa3, 0x6b, 0xcc, 0x63, 0x72, 0x14, - 0x6b, 0xf4, 0x57, 0xc1, 0xc6, 0xa6, 0x1a, 0x36, 0x75, 0x09, 0x4c, 0xdb, 0x68, 0x26, 0x39, 0x6d, - 0x64, 0xab, 0x30, 0xb5, 0x03, 0x34, 0xb5, 0x9a, 0x4b, 0x86, 0xc3, 0xc1, 0x34, 0xfe, 0xa5, 0xd0, - 0xda, 0x59, 0x15, 0x5a, 0x5b, 0x02, 0x1e, 0x4a, 0x38, 0xc9, 0xaa, 0xc6, 0x5d, 0x6a, 0x12, 0xf2, - 0x7b, 0xd4, 0x96, 0xb3, 0x9d, 0x20, 0x45, 0xcf, 0x65, 0x1d, 0x90, 0x1a, 0xc5, 0xfc, 0x7e, 0x73, - 0x85, 0x3c, 0x8d, 0xc5, 0x78, 0xfe, 0x9e, 0xc1, 0x0b, 0xb9, 0x22, 0x43, 0x45, 0x4f, 0x8a, 0x38, - 0x82, 0x81, 0xec, 0x74, 0x3a, 0xd6, 0x5e, 0x0d, 0xcb, 0xfd, 0x4f, 0xe8, 0x00, 0xcf, 0x51, 0xa7, - 0x89, 0xa6, 0x06, 0xad, 0xe6, 0xb6, 0x67, 0xd4, 0xb6, 0xa2, 0x21, 0x5a, 0x3b, 0x7e, 0x8f, 0x44, - 0x23, 0xf4, 0xae, 0xfc, 0x1e, 0xd5, 0xf5, 0x64, 0x6f, 0x54, 0xcb, 0xfe, 0xaf, 0xac, 0x91, 0x1d, - 0x05, 0xc8, 0x61, 0x02, 0x32, 0xed, 0x00, 0x1a, 0xc1, 0x7b, 0x7a, 0xad, 0x7d, 0xcc, 0xba, 0x1d, - 0xb3, 0x34, 0x90, 0x05, 0xb9, 0x66, 0xe2, 0x68, 0x92, 0xd0, 0xb0, 0x23, 0x85, 0x06, 0x94, 0x12, - 0x76, 0x94, 0x20, 0xf5, 0x35, 0x0c, 0x01, 0xbe, 0x31, 0xb6, 0x4e, 0x60, 0xae, 0x5a, 0x73, 0x75, - 0x20, 0x87, 0xb3, 0x43, 0x92, 0x5a, 0x03, 0x1c, 0x7f, 0xeb, 0xe7, 0xdb, 0x20, 0xbd, 0x4b, 0x41, - 0xa2, 0x6a, 0xdd, 0x85, 0x14, 0x7d, 0x1e, 0xe1, 0xe0, 0x06, 0xd6, 0x5f, 0x61, 0x6b, 0x11, 0xfe, - 0x51, 0x22, 0x6d, 0xf9, 0x48, 0x2e, 0x32, 0xc9, 0x4a, 0xa2, 0x17, 0x32, 0xcd, 0xac, 0x10, 0xbe, - 0xb0, 0xdf, 0x0f, 0x0f, 0xf9, 0x57, 0x8b, 0x8d, 0x75, 0xf3, 0x31, 0x4f, 0xfa, 0x5a, 0x4b, 0xe0, - 0x61, 0xf4, 0xe2, 0xf8, 0xa8, 0x05, 0x53, 0x79, 0xed, 0xc7, 0x53, 0x94, 0x6f, 0x0e, 0x90, 0x36, - 0xfc, 0x34, 0xf0, 0x65, 0x09, 0x7f, 0x1e, 0xe6, 0xf2, 0x6e, 0x89, 0x0a, 0x41, 0x02, 0xa9, 0x7f, - 0x45, 0xbe, 0x51, 0xc3, 0x77, 0x7a, 0xfa, 0x77, 0x7a, 0x12, 0x5a, 0xb4, 0x4e, 0x42, 0x68, 0x5d, - 0x7f, 0x0f, 0xd2, 0x37, 0xd2, 0x48, 0x9e, 0xb4, 0x8e, 0x5e, 0xc9, 0xf1, 0x2b, 0x76, 0xd1, 0x69, - 0x59, 0xb3, 0xad, 0xc4, 0x3c, 0x1a, 0x03, 0x98, 0x91, 0xa9, 0x2e, 0xec, 0xf5, 0x9f, 0x75, 0x49, - 0xd8, 0xeb, 0x29, 0x61, 0x0f, 0xe7, 0x33, 0x18, 0x5c, 0x06, 0xf9, 0x5b, 0xed, 0xaa, 0xf1, 0xd8, - 0x76, 0x96, 0xa3, 0x26, 0x99, 0x85, 0x46, 0x7b, 0xbd, 0xdc, 0x82, 0x1e, 0x1e, 0xc7, 0x2c, 0xb6, - 0x48, 0x20, 0xd8, 0x95, 0xfa, 0x52, 0x79, 0x07, 0x82, 0xbd, 0x55, 0x52, 0x0b, 0x13, 0x23, 0xb6, - 0x71, 0xa7, 0xf9, 0x93, 0x34, 0x1a, 0x3b, 0xed, 0xa0, 0xbd, 0x83, 0x2a, 0x1a, 0x2d, 0x8a, 0x7e, - 0x10, 0x1d, 0xdb, 0x94, 0xbe, 0xf6, 0xe3, 0xdd, 0xfd, 0xbf, 0xd0, 0xc7, 0x5f, 0xd1, 0xf1, 0x73, - 0x67, 0xb0, 0xb3, 0xa9, 0xae, 0xfd, 0xd8, 0x54, 0xb6, 0xef, 0x2c, 0xf5, 0xa6, 0xd7, 0x4f, 0xff, - 0x9d, 0x9f, 0xca, 0x4e, 0x59, 0x17, 0x73, 0xa2, 0xe0, 0xd6, 0x44, 0xa3, 0x08, 0x7c, 0x6f, 0x15, - 0xa3, 0x2f, 0xbb, 0x6f, 0x72, 0x0e, 0xa0, 0x05, 0xec, 0x99, 0xc4, 0x9d, 0xc5, 0x4a, 0xca, 0x4a, - 0x48, 0x6e, 0x99, 0x30, 0x97, 0x67, 0x5d, 0x1c, 0xab, 0xec, 0x87, 0x75, 0xfe, 0x62, 0xb0, 0x5e, - 0xbf, 0x5c, 0x24, 0x18, 0xc1, 0xa1, 0xe2, 0x6a, 0xce, 0xc1, 0x96, 0xdc, 0xa0, 0x49, 0xd5, 0x8f, - 0xef, 0xc3, 0x58, 0xbb, 0x91, 0x15, 0x62, 0xb3, 0x0d, 0x32, 0xb1, 0xbc, 0x68, 0xd0, 0x42, 0x49, - 0xcf, 0xbb, 0xb8, 0x68, 0x9c, 0x61, 0xde, 0x99, 0x25, 0x93, 0x9b, 0xcc, 0x66, 0x27, 0xc0, 0xac, - 0x36, 0x2e, 0x9d, 0x16, 0x35, 0x41, 0x20, 0x86, 0x7c, 0x65, 0x38, 0x6a, 0x8a, 0x22, 0xbd, 0x61, - 0xd8, 0x01, 0x54, 0x18, 0xf0, 0x32, 0xc9, 0xe0, 0x17, 0xd7, 0x44, 0xb6, 0x91, 0x1b, 0xdf, 0x64, - 0x4f, 0x82, 0x98, 0x4c, 0xcc, 0x24, 0xd0, 0x52, 0xf6, 0x86, 0xed, 0x21, 0xeb, 0x87, 0x3f, 0x47, - 0xc7, 0xbe, 0xb2, 0x26, 0x59, 0xaa, 0x34, 0xf3, 0x5a, 0xe4, 0x66, 0xd8, 0x65, 0xf0, 0xbd, 0x58, - 0x94, 0xf5, 0xea, 0x4e, 0x7a, 0xc5, 0xf7, 0x50, 0xfc, 0x93, 0x4e, 0x6a, 0xad, 0x96, 0x76, 0xe3, - 0xfc, 0xbc, 0xfb, 0x1d, 0xec, 0x79, 0x49, 0x84, 0xac, 0xd2, 0xeb, 0xf3, 0xeb, 0xd6, 0xa6, 0x67, - 0x39, 0xf3, 0xe0, 0x86, 0xea, 0x2f, 0xb5, 0xe8, 0x5d, 0x3e, 0xaf, 0x14, 0x87, 0x38, 0xeb, 0xdb, - 0xb2, 0x52, 0x4c, 0x81, 0x4c, 0xa3, 0x4a, 0x52, 0x5c, 0xd6, 0x8a, 0x06, 0xd4, 0x9f, 0xbe, 0xa8, - 0x14, 0x1d, 0xb6, 0xb0, 0x8d, 0xa6, 0x50, 0xc2, 0xfd, 0xc2, 0xeb, 0x37, 0xd5, 0xc3, 0xf5, 0x67, - 0xad, 0x68, 0x17, 0xa8, 0x5c, 0x5b, 0xd7, 0xac, 0xf8, 0xdc, 0x9c, 0x71, 0xc9, 0x8b, 0x1e, 0xf3, - 0xf2, 0x96, 0x37, 0x3e, 0x31, 0xd6, 0xc6, 0x98, 0x17, 0x2d, 0x7a, 0x75, 0x93, 0xd2, 0xed, 0x4e, - 0x53, 0x8b, 0x3f, 0x2a, 0xbd, 0x50, 0x53, 0x8e, 0x6f, 0xa0, 0x85, 0xed, 0xde, 0x72, 0xd3, 0x2f, - 0xca, 0xf9, 0x7e, 0x0a, 0xf3, 0x5d, 0x7b, 0x69, 0x6a, 0xee, 0x25, 0x86, 0x64, 0x25, 0x1b, 0xcb, - 0x1b, 0xc9, 0xf7, 0xcf, 0x9e, 0xed, 0x77, 0x78, 0x2f, 0xe9, 0x76, 0xfa, 0xb0, 0xdb, 0x07, 0x73, - 0xf8, 0xd1, 0xd3, 0xb5, 0x0c, 0xa4, 0xd0, 0xac, 0x90, 0x82, 0x12, 0xa0, 0xca, 0x0a, 0xcd, 0xbd, - 0x5e, 0x17, 0x66, 0x3e, 0x6b, 0xe8, 0xe9, 0xd7, 0xb4, 0xbc, 0x18, 0x46, 0xd9, 0x76, 0xd5, 0xf2, - 0x6e, 0x7d, 0xcb, 0x3f, 0x6e, 0xd6, 0x70, 0x43, 0x6f, 0xba, 0xba, 0xfd, 0x2b, 0xa8, 0xaf, 0xba, - 0x69, 0x3d, 0x86, 0xfa, 0xe4, 0xce, 0x55, 0xb9, 0xe6, 0xad, 0x50, 0xc4, 0x9e, 0xe2, 0x01, 0x0d, - 0x97, 0x56, 0x62, 0xc3, 0x98, 0xbf, 0xbf, 0xb9, 0xc6, 0xdb, 0x0d, 0xcd, 0xf6, 0xf8, 0x53, 0x72, - 0xd3, 0x8a, 0x03, 0x38, 0x21, 0xfa, 0x79, 0x0b, 0x31, 0x8f, 0xf2, 0x56, 0x5f, 0x68, 0x4b, 0x32, - 0x14, 0x4c, 0xb0, 0x78, 0xcb, 0x57, 0xb2, 0xe2, 0x96, 0x88, 0x80, 0xf4, 0xaf, 0xdd, 0x75, 0xe4, - 0xad, 0x7a, 0xaf, 0xdb, 0xd5, 0x76, 0x20, 0x52, 0xcc, 0x18, 0x57, 0x75, 0xba, 0xea, 0xbe, 0x2b, - 0x19, 0x33, 0x6f, 0x49, 0x72, 0x43, 0xfa, 0x97, 0xb1, 0x78, 0x5d, 0x84, 0x58, 0x34, 0x95, 0xe7, - 0xe8, 0x42, 0xb2, 0xf0, 0xba, 0x91, 0x55, 0xb9, 0xab, 0xc3, 0x2a, 0x1b, 0x52, 0x33, 0xb2, 0x4d, - 0xf2, 0x8e, 0x6e, 0xdf, 0xa2, 0x09, 0x15, 0x4a, 0x5f, 0x39, 0x83, 0x73, 0x4a, 0x0e, 0x47, 0xc8, - 0x59, 0x3e, 0xdc, 0x94, 0x4d, 0x1e, 0x0b, 0x2d, 0x9b, 0x24, 0xd7, 0x0d, 0x3f, 0x1c, 0xd5, 0x7e, - 0x99, 0xb4, 0x4f, 0x9b, 0x7f, 0x5a, 0x10, 0x68, 0x81, 0x84, 0xa4, 0x19, 0x12, 0xd2, 0x41, 0x23, - 0x28, 0xc7, 0x74, 0x14, 0x47, 0x92, 0xe2, 0xb6, 0x62, 0x58, 0xbc, 0xa9, 0xb9, 0x19, 0xc8, 0xeb, - 0x62, 0xb2, 0x89, 0xdc, 0xfd, 0xba, 0xdc, 0x94, 0x6b, 0x20, 0x0a, 0x19, 0xad, 0x39, 0x01, 0xb6, - 0x56, 0xd8, 0xc5, 0x92, 0x05, 0x2f, 0x1c, 0xe2, 0xbb, 0x63, 0x05, 0x4b, 0x71, 0x3e, 0xa0, 0x8a, - 0xe1, 0xac, 0xde, 0xc5, 0x33, 0x74, 0x11, 0x3e, 0xab, 0x8a, 0x5f, 0x43, 0x98, 0x35, 0xae, 0x12, - 0xb8, 0x34, 0x69, 0x06, 0xc8, 0x80, 0xec, 0x0d, 0x80, 0x26, 0xf0, 0xaf, 0xd0, 0x19, 0xd8, 0x32, - 0xb9, 0x62, 0x86, 0xa0, 0x3b, 0x31, 0x4b, 0x43, 0x0b, 0x35, 0x68, 0x20, 0x6d, 0x5d, 0x0e, 0x4e, - 0xcf, 0x96, 0x25, 0xdf, 0x5e, 0x0f, 0x33, 0x92, 0x7f, 0x6f, 0x4e, 0xf1, 0x0d, 0x28, 0xc4, 0x2c, - 0x7a, 0x07, 0x64, 0xe8, 0x40, 0x8d, 0x21, 0x8c, 0x78, 0x68, 0x97, 0xce, 0x50, 0xb7, 0x2c, 0xcd, - 0x2b, 0x1f, 0x7b, 0x7d, 0xff, 0xb5, 0xdf, 0xca, 0xe0, 0xfc, 0xb8, 0x44, 0xd1, 0x53, 0x04, 0xc0, - 0xf0, 0x02, 0x77, 0xf5, 0x27, 0x39, 0x02, 0x90, 0x66, 0xf6, 0x8f, 0x9f, 0xc5, 0xfa, 0x02, 0xaa, - 0xcf, 0x00, 0xe2, 0x08, 0x34, 0x32, 0x31, 0x7c, 0x02, 0x84, 0x2d, 0x01, 0xfa, 0x42, 0x3d, 0x6a, - 0xb0, 0x87, 0xda, 0x3d, 0xfa, 0x8a, 0x48, 0x53, 0xe7, 0x45, 0xa4, 0xa9, 0x20, 0x2f, 0xe2, 0xd3, - 0xb9, 0x59, 0x75, 0x90, 0xd8, 0x23, 0x95, 0x07, 0x89, 0xc3, 0xf9, 0x1a, 0x83, 0xc4, 0x9d, 0x42, - 0xff, 0x0c, 0xbe, 0xbd, 0x32, 0x11, 0xe2, 0x48, 0x51, 0xb5, 0x28, 0xa1, 0xd4, 0xa0, 0x9c, 0xae, - 0x79, 0x08, 0xa2, 0x77, 0x59, 0x26, 0xe2, 0x71, 0x90, 0x07, 0x48, 0xce, 0x55, 0x76, 0x97, 0xcb, - 0x4c, 0x0b, 0x6e, 0x61, 0xda, 0x10, 0x67, 0x3a, 0x4b, 0x9c, 0xe7, 0x62, 0xd8, 0xb5, 0x85, 0xa8, - 0x48, 0x5e, 0x5a, 0xa9, 0xfe, 0x09, 0x20, 0x4a, 0xd8, 0xc3, 0xee, 0x96, 0x27, 0x6c, 0x2b, 0x22, - 0xe3, 0x43, 0x30, 0x3f, 0xda, 0xd5, 0xa5, 0x89, 0xa6, 0x74, 0x1d, 0x6a, 0xaf, 0x4c, 0x54, 0x25, - 0x83, 0x02, 0x4a, 0xf0, 0x4a, 0xf3, 0xbb, 0xd4, 0x08, 0x19, 0x88, 0x93, 0x89, 0x34, 0x68, 0xa3, - 0x3d, 0x30, 0xfa, 0x96, 0x78, 0x1a, 0x69, 0xc5, 0x38, 0x6c, 0x68, 0xcc, 0x87, 0x64, 0x8b, 0x57, - 0x75, 0xb5, 0x80, 0x4f, 0xed, 0x18, 0x88, 0xf7, 0x76, 0x10, 0xb9, 0xd7, 0xe1, 0xc0, 0x77, 0xd1, - 0x9d, 0xc7, 0xbd, 0x48, 0xc3, 0x41, 0x6d, 0xbf, 0xe1, 0x45, 0x31, 0x36, 0x38, 0x23, 0xc9, 0x72, - 0x29, 0x51, 0x6c, 0x6b, 0xf0, 0x68, 0x26, 0x1b, 0xe0, 0xd1, 0x4c, 0xd7, 0xe3, 0xd1, 0xb8, 0xf3, - 0xfa, 0x3c, 0x88, 0x23, 0x25, 0xa7, 0x81, 0xb0, 0x82, 0x3b, 0x50, 0xb3, 0x37, 0x71, 0xf9, 0x37, - 0xd4, 0xe0, 0x4d, 0xc5, 0xef, 0x64, 0xe6, 0xcd, 0x97, 0xfc, 0x13, 0x28, 0x83, 0xfc, 0x08, 0x69, - 0xc3, 0x47, 0x37, 0x5d, 0x9d, 0x84, 0x52, 0xdd, 0x74, 0x41, 0x58, 0x62, 0xae, 0xa6, 0x21, 0x71, - 0xea, 0x2c, 0x43, 0x60, 0xc5, 0x65, 0x08, 0x2c, 0x61, 0x1e, 0x52, 0xb9, 0xbb, 0x07, 0xb2, 0xa8, - 0xd8, 0x4f, 0x54, 0xed, 0xad, 0x23, 0x32, 0xa6, 0x9e, 0xd9, 0xd1, 0x41, 0x86, 0x6e, 0xb7, 0x0f, - 0x0f, 0xd1, 0x88, 0x70, 0xda, 0x64, 0x70, 0x98, 0xdb, 0x24, 0x9c, 0xca, 0x2a, 0x3d, 0xca, 0xc2, - 0x7e, 0x8f, 0x07, 0x31, 0x67, 0xf7, 0x77, 0x6b, 0xab, 0x1c, 0xc5, 0x95, 0x4a, 0x0a, 0x03, 0x10, - 0x7c, 0x43, 0xe1, 0x8a, 0xcd, 0x82, 0xa4, 0x35, 0xf4, 0x1f, 0x1e, 0xb6, 0x2a, 0xe9, 0x3e, 0x70, - 0x04, 0xbd, 0x2e, 0x34, 0xaa, 0xe0, 0x01, 0x14, 0xd1, 0x63, 0x6a, 0x49, 0x33, 0x62, 0xd2, 0xf4, - 0x99, 0x90, 0xc8, 0xbf, 0x25, 0x3a, 0x60, 0xc4, 0x2f, 0x6d, 0xd3, 0x32, 0x40, 0xc8, 0xb2, 0x0a, - 0x08, 0xd9, 0x90, 0x23, 0x3e, 0x14, 0x01, 0xb4, 0xe5, 0xe8, 0xa6, 0xd5, 0x11, 0xaf, 0x8e, 0x6e, - 0x28, 0x46, 0x37, 0x3c, 0xc8, 0x79, 0xb8, 0xc2, 0x51, 0x5e, 0x19, 0x18, 0x79, 0x88, 0xcf, 0xd5, - 0xe8, 0xa6, 0x72, 0x32, 0xd2, 0xd5, 0x93, 0x81, 0xe3, 0x98, 0x30, 0x49, 0x52, 0x64, 0x21, 0x2f, - 0x74, 0xe5, 0x63, 0x32, 0xff, 0xe4, 0xa5, 0x4b, 0xc6, 0x2e, 0xa8, 0xac, 0x10, 0x1a, 0xfc, 0x0a, - 0xa7, 0x9c, 0x34, 0x40, 0x06, 0xd5, 0x2e, 0x9c, 0x78, 0xfd, 0xc2, 0x49, 0xd4, 0xc2, 0xc9, 0x65, - 0xb3, 0x60, 0xe1, 0x64, 0xe2, 0x37, 0x2c, 0x9c, 0x98, 0x9d, 0x1a, 0xcb, 0x58, 0x56, 0x04, 0xb7, - 0x86, 0x59, 0xf2, 0xb9, 0xd7, 0x84, 0x73, 0x85, 0x26, 0x5e, 0xca, 0x92, 0xd4, 0x58, 0x68, 0x89, - 0x69, 0x7b, 0x23, 0xd6, 0x19, 0x54, 0x41, 0xf6, 0xab, 0x07, 0xfd, 0x71, 0xdd, 0xb1, 0x01, 0xce, - 0x08, 0x57, 0xa8, 0xc4, 0xbc, 0x86, 0xed, 0x2e, 0x84, 0xf3, 0x55, 0x71, 0xd3, 0x04, 0x6f, 0x84, - 0xc9, 0x07, 0x08, 0x42, 0x5b, 0x68, 0xcd, 0x21, 0xab, 0xda, 0xdd, 0x75, 0x9b, 0x36, 0x5e, 0x24, - 0x3b, 0xd8, 0x50, 0x1c, 0x63, 0x8b, 0xcd, 0x3f, 0x04, 0xb7, 0x2b, 0x76, 0x6b, 0xe4, 0x94, 0x8d, - 0x2c, 0xbe, 0xb4, 0x5b, 0x63, 0x55, 0x9f, 0x56, 0xd5, 0xf5, 0xc9, 0xac, 0xea, 0x53, 0x73, 0x4d, - 0xef, 0xc2, 0x15, 0xf5, 0x00, 0xdf, 0x6e, 0xda, 0x59, 0xaa, 0xf5, 0xac, 0x6a, 0xd0, 0xb5, 0xd9, - 0xa0, 0xeb, 0x55, 0x0d, 0xea, 0xf5, 0x57, 0x55, 0xd4, 0xeb, 0x9b, 0x35, 0xf5, 0x48, 0x6a, 0x15, - 0x4a, 0xb4, 0x23, 0xd4, 0xd1, 0x94, 0x2b, 0x3c, 0x59, 0xd5, 0xc3, 0xcc, 0xec, 0x61, 0x16, 0xae, - 0xab, 0xed, 0xe3, 0x7c, 0x45, 0x6d, 0xf9, 0x7c, 0xd0, 0x44, 0xb0, 0xe5, 0x7a, 0x48, 0xde, 0x42, - 0xa5, 0xd9, 0xe3, 0x24, 0xae, 0x46, 0x92, 0x0b, 0xf2, 0x41, 0x5e, 0xe9, 0x79, 0x70, 0x79, 0x7c, - 0x97, 0xae, 0x68, 0x2f, 0x6c, 0xc9, 0x5b, 0x8f, 0x90, 0x01, 0x6a, 0xea, 0x7f, 0x99, 0xae, 0x1a, - 0xdd, 0x8d, 0x76, 0x7b, 0xd3, 0x3b, 0xf5, 0x32, 0x7a, 0x93, 0x06, 0xc1, 0x3f, 0x02, 0x15, 0xa7, - 0x40, 0x93, 0xa6, 0x17, 0xe8, 0x9c, 0x6b, 0xe5, 0x16, 0x30, 0x74, 0x8e, 0xa6, 0x45, 0x86, 0x4b, - 0x2c, 0x47, 0xc3, 0xe1, 0x3a, 0x70, 0x0b, 0xe7, 0x60, 0x1d, 0x01, 0x5e, 0xb8, 0xf6, 0x56, 0x3c, - 0x86, 0x6d, 0xa8, 0x16, 0xed, 0x6b, 0x7b, 0x08, 0xb1, 0xdb, 0x2c, 0x65, 0xe7, 0x6f, 0x7e, 0x53, - 0x8d, 0x61, 0xe7, 0x7e, 0x2f, 0x18, 0x6b, 0xf1, 0x5d, 0xca, 0xb1, 0x5a, 0x76, 0x64, 0xac, 0x96, - 0x72, 0x58, 0xe1, 0x81, 0x20, 0x85, 0x1d, 0xd9, 0xf3, 0x41, 0xb9, 0xe8, 0x79, 0x53, 0xd1, 0x72, - 0x10, 0x6a, 0x2d, 0x04, 0x71, 0x0d, 0x45, 0xcc, 0xee, 0x8b, 0x51, 0x47, 0x5c, 0xbe, 0xfb, 0x69, - 0x30, 0x2b, 0x1c, 0x71, 0xe8, 0xb1, 0x3c, 0x95, 0x2a, 0x5a, 0xf6, 0xa3, 0x3a, 0x2a, 0xa2, 0x69, - 0xb7, 0x6a, 0x03, 0x67, 0x6f, 0xd2, 0xdd, 0x95, 0x15, 0x3c, 0xae, 0xd3, 0x50, 0x6c, 0x10, 0x94, - 0xbb, 0x85, 0xe4, 0x59, 0xa2, 0xce, 0x0a, 0x4d, 0x56, 0x43, 0x33, 0x3a, 0x65, 0x3a, 0xc7, 0xf0, - 0x4a, 0x76, 0x1d, 0x95, 0x67, 0xf7, 0xb5, 0x75, 0x19, 0xc1, 0xda, 0x2a, 0xcb, 0x46, 0x05, 0x6b, - 0xab, 0xad, 0x32, 0xac, 0xaf, 0xb2, 0x12, 0xe1, 0xad, 0x52, 0x2d, 0x07, 0x79, 0x82, 0x19, 0x14, - 0x11, 0x2a, 0xf1, 0x38, 0xfe, 0xf0, 0x10, 0x8c, 0xf6, 0x1d, 0x73, 0x11, 0x2d, 0x97, 0x55, 0x4c, - 0x40, 0x0e, 0xef, 0x46, 0xc1, 0x90, 0xc4, 0xe6, 0xbd, 0x4f, 0xb3, 0xcf, 0x6b, 0x6b, 0xb2, 0xef, - 0x65, 0x83, 0xbe, 0x9e, 0xd0, 0x87, 0x04, 0xf1, 0xb3, 0x07, 0x3b, 0x7a, 0x69, 0xf1, 0x18, 0xcd, - 0xe2, 0x30, 0x4c, 0xd8, 0x2c, 0x2d, 0x7a, 0x66, 0xb9, 0x6d, 0x99, 0x6a, 0x9b, 0xf8, 0x30, 0x9f, - 0xc5, 0x92, 0x7d, 0x6f, 0x6b, 0x2b, 0x17, 0x9f, 0x16, 0x49, 0x7d, 0x4a, 0x12, 0x0f, 0x3d, 0x7c, - 0x70, 0x4b, 0x47, 0x35, 0xe3, 0xf3, 0x6f, 0x93, 0x2a, 0x03, 0xc4, 0x45, 0x1f, 0x94, 0x17, 0x00, - 0xc9, 0x13, 0xda, 0xf1, 0x1d, 0x03, 0x66, 0x2e, 0x11, 0x8a, 0x52, 0x2a, 0x65, 0x6c, 0x8c, 0x01, - 0x28, 0xe2, 0x2d, 0x48, 0x5b, 0x07, 0x0c, 0x9f, 0xa3, 0xec, 0x1e, 0xee, 0x50, 0x62, 0xd3, 0x9f, - 0x8a, 0x20, 0x37, 0xc7, 0x0c, 0xc4, 0xee, 0x1c, 0x78, 0x5d, 0xc6, 0x6d, 0x5c, 0xcc, 0x81, 0x3f, - 0x2e, 0x5d, 0x61, 0x5b, 0x0f, 0xfc, 0x36, 0xbc, 0x84, 0xa1, 0x73, 0x65, 0x69, 0xa7, 0xb0, 0x33, - 0xfd, 0x3d, 0x2a, 0x7e, 0xc7, 0xe8, 0x93, 0x6d, 0xb4, 0x07, 0xb8, 0x5f, 0x12, 0x63, 0x20, 0x72, - 0x57, 0x13, 0x6b, 0xde, 0x26, 0x3e, 0xba, 0xad, 0x08, 0x0d, 0x68, 0xcb, 0x6a, 0x4b, 0x7b, 0x84, - 0xb6, 0xd5, 0xb2, 0x09, 0xc2, 0xcd, 0xb1, 0x56, 0x70, 0x3c, 0xba, 0x17, 0xa5, 0xbd, 0x09, 0xa6, - 0x0a, 0xe6, 0x6a, 0x7e, 0x54, 0x36, 0x49, 0xe5, 0x9b, 0x5d, 0xc5, 0xc1, 0x1d, 0xe8, 0xf6, 0xd1, - 0x41, 0x0f, 0x9b, 0x03, 0x79, 0x9b, 0x2e, 0x6c, 0xe1, 0xb0, 0x75, 0x34, 0xea, 0x3f, 0xeb, 0x3a, - 0xb0, 0xbe, 0x53, 0x68, 0xa5, 0x70, 0x0e, 0x38, 0x7a, 0x05, 0x52, 0x17, 0xb0, 0x80, 0x8b, 0xa0, - 0x85, 0x97, 0xbf, 0x09, 0x9c, 0x65, 0x82, 0x2c, 0xeb, 0x48, 0x28, 0x5b, 0x8c, 0xd0, 0x66, 0xcf, - 0xdf, 0x6b, 0xfa, 0x2e, 0x52, 0x25, 0x89, 0x2f, 0xe3, 0x17, 0xdf, 0x7b, 0x76, 0x3e, 0xb6, 0x94, - 0x61, 0xbe, 0x55, 0xb8, 0x1d, 0x38, 0xed, 0xf9, 0x91, 0x8c, 0x5b, 0xba, 0x28, 0x4e, 0x93, 0x75, - 0x5a, 0x33, 0x27, 0x1f, 0x83, 0x60, 0x2d, 0x15, 0xc4, 0x85, 0x11, 0xab, 0x9b, 0xf1, 0xf8, 0xe2, - 0x5f, 0x1c, 0xe6, 0x01, 0x42, 0xbc, 0x5e, 0x68, 0xad, 0x21, 0xeb, 0x30, 0xfd, 0x50, 0xad, 0x99, - 0x51, 0x79, 0x98, 0x17, 0x63, 0xbb, 0xeb, 0x05, 0xb2, 0x52, 0x81, 0xcc, 0x2c, 0x90, 0x51, 0x81, - 0x89, 0x51, 0x60, 0x72, 0xf5, 0xd9, 0x28, 0x50, 0xd8, 0x2f, 0x61, 0x81, 0x89, 0xa6, 0xc3, 0x8b, - 0xae, 0x49, 0x7e, 0xa6, 0xb0, 0x6a, 0xa5, 0x54, 0x1e, 0x31, 0x0a, 0x45, 0x2f, 0x0c, 0x74, 0x6a, - 0x26, 0x55, 0xcb, 0x89, 0x21, 0x96, 0x68, 0x06, 0xd8, 0xac, 0xb7, 0xc8, 0xe3, 0xcf, 0xd5, 0xde, - 0x3d, 0xcc, 0xd3, 0x2f, 0x0b, 0x03, 0x12, 0x2a, 0x76, 0x96, 0x1c, 0xf1, 0x83, 0xa9, 0x07, 0xc1, - 0x20, 0x63, 0x90, 0xf3, 0x8b, 0xe8, 0x7c, 0xc6, 0x51, 0xa6, 0xa8, 0x14, 0xef, 0x94, 0x0d, 0x68, - 0x56, 0x6b, 0xfb, 0x9b, 0x1f, 0x9e, 0x3f, 0x7f, 0x3e, 0x6c, 0xf1, 0xd2, 0x69, 0x91, 0x16, 0xbb, - 0xf5, 0x05, 0xa3, 0x69, 0x68, 0x56, 0x0f, 0x2d, 0x72, 0xcc, 0xe0, 0x50, 0x3c, 0xda, 0x72, 0x5b, - 0x58, 0xce, 0x68, 0xb7, 0xf7, 0xe8, 0x4f, 0x9d, 0x7c, 0x01, 0x71, 0xe7, 0x5e, 0xc4, 0x61, 0x0c, - 0xe3, 0xd6, 0x84, 0x38, 0x6a, 0x0b, 0xbb, 0xa7, 0x7f, 0x94, 0x3f, 0x47, 0xb1, 0x09, 0x2b, 0x0b, - 0xfc, 0x8f, 0x76, 0x4f, 0xe8, 0xfc, 0x29, 0x30, 0x06, 0x48, 0x7b, 0x01, 0x2c, 0x87, 0x19, 0x9a, - 0x7c, 0x5e, 0x27, 0xd3, 0x70, 0xf6, 0x05, 0x17, 0x33, 0x45, 0xd7, 0xe0, 0x15, 0x0d, 0x92, 0x18, - 0x93, 0x23, 0xfc, 0x99, 0xe3, 0x72, 0xf5, 0xe6, 0x47, 0x40, 0x35, 0x70, 0x24, 0x7b, 0x3f, 0xd4, - 0x74, 0x45, 0xc2, 0xe2, 0xa7, 0xd0, 0x27, 0x68, 0x71, 0xb1, 0x60, 0x66, 0x7e, 0x8f, 0xe0, 0x50, - 0xad, 0xb3, 0x8d, 0x13, 0xff, 0x96, 0x51, 0x8f, 0xe6, 0xef, 0x99, 0x51, 0xcc, 0x8f, 0xaa, 0x9c, - 0x22, 0x43, 0xb0, 0x82, 0x64, 0xcc, 0x6e, 0x40, 0xa7, 0xf3, 0xa3, 0x33, 0x60, 0xff, 0x86, 0xdf, - 0x10, 0x24, 0x71, 0xa3, 0xaa, 0xc9, 0x49, 0x35, 0xe9, 0xb6, 0x9a, 0x84, 0x36, 0xbd, 0xb0, 0xce, - 0x8a, 0x0f, 0x2c, 0xe2, 0xc1, 0xfc, 0xbd, 0x0b, 0x84, 0x34, 0xb0, 0x9a, 0x46, 0x0b, 0x03, 0x76, - 0x06, 0x01, 0x8f, 0x51, 0x1c, 0xdc, 0x45, 0x5f, 0x88, 0x8b, 0x4d, 0xe5, 0x8c, 0x75, 0x2c, 0xd8, - 0xf3, 0x90, 0x14, 0x91, 0x5f, 0xa8, 0x0f, 0x21, 0x69, 0x52, 0x2a, 0x76, 0xe9, 0xf7, 0xc8, 0x78, - 0x07, 0x83, 0x83, 0x69, 0x8e, 0x16, 0xc0, 0x47, 0x44, 0xcf, 0xc1, 0xe1, 0x28, 0x2e, 0x45, 0xdc, - 0x72, 0xa0, 0x9d, 0xf9, 0x75, 0xfe, 0x16, 0x46, 0xd3, 0xeb, 0xba, 0x7a, 0xc8, 0x1d, 0x11, 0x91, - 0x4f, 0x8f, 0x78, 0xc3, 0x56, 0xb3, 0x92, 0xcd, 0xf6, 0xd0, 0x28, 0x4e, 0x7a, 0xbf, 0xe0, 0x3b, - 0x49, 0x48, 0x66, 0x2a, 0xfa, 0xbb, 0xeb, 0x54, 0xb4, 0xb9, 0x9d, 0xad, 0xe5, 0x92, 0xe2, 0x84, - 0x0e, 0x14, 0x88, 0x8b, 0x55, 0xaa, 0xb7, 0xf7, 0x98, 0x7a, 0xf7, 0x9f, 0xcf, 0xd8, 0x12, 0x06, - 0x2f, 0x7c, 0x0a, 0xfe, 0xba, 0x92, 0x7f, 0x36, 0xa9, 0x53, 0x65, 0x83, 0xcc, 0x1d, 0x5a, 0x56, - 0x84, 0x12, 0x41, 0xc9, 0x97, 0xa6, 0xee, 0x0a, 0x64, 0x8a, 0x7a, 0xcd, 0xa1, 0x31, 0x86, 0x93, - 0x78, 0x36, 0xb6, 0xcd, 0x3a, 0xa7, 0xa8, 0xcb, 0x5f, 0x3a, 0x26, 0xc5, 0x61, 0xe8, 0xc0, 0xca, - 0x0c, 0xeb, 0x97, 0x57, 0x8d, 0x57, 0x57, 0xe4, 0xd8, 0xc1, 0xf7, 0x25, 0x93, 0x6a, 0xf0, 0xf1, - 0x47, 0x0c, 0xa7, 0x69, 0xdb, 0xb3, 0x85, 0x65, 0xb5, 0x5e, 0x80, 0x38, 0x67, 0x28, 0xea, 0x8b, - 0x30, 0x80, 0x0b, 0x8c, 0xe5, 0xe8, 0x05, 0xba, 0x12, 0xbe, 0x29, 0x80, 0x32, 0xa9, 0xc7, 0x9d, - 0xba, 0xbb, 0xb6, 0xfb, 0x7b, 0x82, 0xe3, 0x19, 0xe6, 0x28, 0xb3, 0x94, 0xba, 0x2a, 0xde, 0x21, - 0x8d, 0x1f, 0x13, 0xea, 0x90, 0x9d, 0x5e, 0x5e, 0x9c, 0xe4, 0xa9, 0x9d, 0x6b, 0x81, 0x90, 0x61, - 0x89, 0x00, 0x2b, 0x9c, 0x20, 0x2c, 0x11, 0x8f, 0x83, 0xdc, 0x68, 0xca, 0x40, 0x3d, 0xae, 0x89, - 0x07, 0x25, 0xb4, 0x58, 0x85, 0x62, 0xcd, 0x08, 0xae, 0xdc, 0x08, 0x38, 0x85, 0x48, 0x52, 0xe5, - 0x30, 0xb6, 0x14, 0xf9, 0x0e, 0x0f, 0x77, 0x57, 0x18, 0x76, 0x5c, 0x79, 0x01, 0x1d, 0x8a, 0x98, - 0xb5, 0x56, 0x0a, 0x3c, 0x1b, 0x24, 0x48, 0x67, 0x01, 0x52, 0xe8, 0xe2, 0x6a, 0x00, 0x9b, 0x39, - 0xfc, 0x77, 0x3b, 0xc0, 0x7b, 0x29, 0x38, 0xed, 0xeb, 0xfe, 0x44, 0xcf, 0xba, 0x0c, 0x22, 0x97, - 0x02, 0xd3, 0x00, 0x59, 0xda, 0x69, 0x63, 0x18, 0xcd, 0x69, 0xb2, 0x08, 0x3a, 0x57, 0x7a, 0xb6, - 0xfd, 0xef, 0x4b, 0xf9, 0x9c, 0xe5, 0x1d, 0x8c, 0x79, 0x60, 0x53, 0xa2, 0x7f, 0x91, 0xd9, 0x50, - 0x60, 0x97, 0x5a, 0xe4, 0x1c, 0x60, 0x15, 0xdc, 0x38, 0x48, 0x5c, 0x16, 0x63, 0x19, 0x70, 0xd0, - 0x68, 0x1c, 0x32, 0x34, 0x44, 0x2a, 0x83, 0xca, 0xa9, 0x71, 0x13, 0x11, 0x37, 0xf4, 0x11, 0x86, - 0x69, 0x18, 0x9a, 0xe0, 0x5d, 0x2a, 0xa6, 0x7c, 0xea, 0x9a, 0xc8, 0x5d, 0xea, 0xc5, 0xa5, 0x6b, - 0xc2, 0x76, 0x15, 0x51, 0xe8, 0x99, 0x80, 0xe0, 0x50, 0xa0, 0x7f, 0xe2, 0x2a, 0xb8, 0x67, 0x38, - 0x08, 0xed, 0xee, 0xa4, 0x57, 0xc5, 0x04, 0x37, 0x09, 0xee, 0x14, 0x29, 0x52, 0x9f, 0xc5, 0x61, - 0xcc, 0x9b, 0x4d, 0x1b, 0xf6, 0xca, 0x3c, 0x11, 0xf8, 0x12, 0x18, 0x80, 0x55, 0x61, 0x72, 0x29, - 0x5c, 0x63, 0xd8, 0x47, 0x54, 0x5a, 0x3c, 0x5b, 0x1f, 0x93, 0x6d, 0xdf, 0xb1, 0x04, 0x8c, 0x91, - 0xd1, 0xec, 0x9b, 0xc0, 0xf5, 0x8d, 0x94, 0xcc, 0xcf, 0x85, 0x61, 0x88, 0x9b, 0x54, 0xc9, 0x54, - 0x1f, 0xc6, 0x9f, 0x54, 0x53, 0x22, 0x23, 0xf2, 0x76, 0x11, 0xf4, 0x5a, 0x4f, 0xfe, 0x45, 0x25, - 0x27, 0x70, 0xb0, 0x09, 0xd3, 0xa4, 0x73, 0xc8, 0x2d, 0xc8, 0x6e, 0x3f, 0x26, 0x1f, 0x2e, 0x2f, - 0x6c, 0xa0, 0xb4, 0x08, 0x28, 0x0d, 0xa8, 0x4c, 0xd2, 0x5a, 0xb9, 0xd6, 0x1a, 0x4f, 0xe8, 0x72, - 0xa7, 0x8f, 0x10, 0x1e, 0x13, 0x03, 0x07, 0xc5, 0x81, 0x9f, 0xee, 0x5e, 0xa6, 0x20, 0xd8, 0x43, - 0x6e, 0xfb, 0x87, 0xee, 0x34, 0xb8, 0x74, 0x5b, 0xdf, 0xf8, 0xbe, 0xdf, 0xda, 0xed, 0x3d, 0xfb, - 0xce, 0x6d, 0x21, 0x50, 0x2e, 0x1a, 0x4e, 0xa7, 0x6d, 0xcb, 0xc5, 0xbf, 0x97, 0xe2, 0xef, 0x05, - 0x6c, 0xe1, 0xc8, 0x8e, 0x56, 0xb4, 0xd0, 0xaf, 0x6b, 0xdf, 0x2f, 0x7f, 0x4a, 0xfb, 0xba, 0xdd, - 0xee, 0x66, 0xed, 0xd3, 0xbe, 0xfc, 0xef, 0x6a, 0x60, 0xf5, 0xd9, 0xfa, 0x1c, 0x44, 0x20, 0x9d, - 0x14, 0xab, 0x04, 0xc8, 0x84, 0x63, 0x1a, 0x38, 0x8b, 0x1e, 0x1c, 0x19, 0x59, 0x5d, 0xf6, 0x39, - 0xf8, 0x72, 0x98, 0x20, 0x58, 0x14, 0x02, 0xb7, 0x50, 0x44, 0x4d, 0x9d, 0x75, 0x8a, 0x20, 0x08, - 0x41, 0x6d, 0x09, 0x75, 0x25, 0x53, 0x94, 0x50, 0x95, 0xe8, 0x38, 0x52, 0x3a, 0xc9, 0x0e, 0x2b, - 0x57, 0x8d, 0xc5, 0x5a, 0xf9, 0xde, 0xc1, 0x40, 0xc3, 0x2c, 0x20, 0xab, 0x25, 0x6f, 0x7d, 0x83, - 0xe1, 0xbb, 0xf5, 0x70, 0xa5, 0xb0, 0x14, 0x84, 0xc0, 0x4c, 0x4a, 0xea, 0x22, 0xe3, 0x6c, 0xe6, - 0xfb, 0x5d, 0xc4, 0x5d, 0xd9, 0x60, 0x99, 0x79, 0x1c, 0xa8, 0x35, 0x77, 0xc6, 0x5d, 0xba, 0xce, - 0x14, 0x4c, 0xa5, 0x5f, 0x3a, 0xe1, 0x4a, 0xb6, 0x23, 0xb6, 0x4f, 0x0c, 0x90, 0xa8, 0x88, 0x02, - 0xaf, 0x52, 0xc4, 0x3d, 0x04, 0x1c, 0xdf, 0x8c, 0xf5, 0x03, 0xa7, 0xe2, 0xdc, 0x19, 0x94, 0x92, - 0x0e, 0xaf, 0x7c, 0xd8, 0xde, 0x22, 0x18, 0x8f, 0xec, 0x16, 0x26, 0x12, 0xfe, 0xeb, 0x36, 0xb2, - 0xec, 0xaf, 0xc1, 0x16, 0x2c, 0xcd, 0x06, 0xcc, 0xc5, 0xea, 0x86, 0x5c, 0x19, 0xa4, 0xf4, 0x53, - 0xa1, 0x2c, 0x31, 0xea, 0x39, 0x59, 0x5b, 0x4f, 0x66, 0xd5, 0xb2, 0x80, 0x52, 0x3d, 0xbf, 0xac, - 0xad, 0xe7, 0xd6, 0xaa, 0xe5, 0x19, 0xa5, 0x7a, 0xfe, 0xbd, 0x5a, 0x8f, 0xbd, 0x60, 0x8a, 0x1f, - 0xd4, 0xad, 0x8c, 0x65, 0xa9, 0x3c, 0x2e, 0x66, 0x83, 0x4a, 0x4b, 0xfb, 0x82, 0x9b, 0x7b, 0x75, - 0xbb, 0x82, 0xb8, 0xee, 0x2a, 0xef, 0x09, 0xc3, 0x82, 0x58, 0x04, 0xfe, 0xb6, 0xb4, 0x34, 0xa3, - 0xf8, 0x21, 0xe7, 0x6c, 0xe2, 0x13, 0xd7, 0x4a, 0x1c, 0x65, 0xda, 0x4c, 0xbd, 0xc0, 0x2d, 0xa7, - 0x5d, 0x22, 0xa2, 0x47, 0x29, 0xed, 0xc2, 0xcb, 0x24, 0x84, 0x82, 0x78, 0x55, 0xea, 0xe2, 0xaf, - 0xa6, 0xa5, 0xb0, 0x12, 0x06, 0xdc, 0x7a, 0xc9, 0x27, 0xaf, 0xac, 0x91, 0x40, 0xf6, 0x99, 0xbf, - 0x22, 0x32, 0x98, 0xc4, 0x17, 0x94, 0x34, 0x6a, 0x62, 0x65, 0x2c, 0x9a, 0x25, 0x2c, 0xba, 0xa3, - 0x75, 0x63, 0x37, 0x82, 0x5d, 0xa7, 0xf4, 0x4d, 0x17, 0x31, 0xc8, 0x7b, 0xa4, 0xa3, 0x0e, 0x33, - 0x98, 0xa1, 0x97, 0x88, 0x6c, 0x6b, 0x63, 0xac, 0xfc, 0xb5, 0x24, 0x83, 0x8e, 0xf8, 0x6e, 0x7f, - 0x0b, 0x8b, 0x16, 0xd0, 0x9a, 0x76, 0x52, 0xab, 0xb5, 0x53, 0xa2, 0x94, 0x23, 0xef, 0x2a, 0xcb, - 0x92, 0x82, 0x0f, 0xb3, 0x90, 0x49, 0x18, 0xc8, 0xb0, 0x93, 0x0e, 0x12, 0xd7, 0x87, 0x49, 0x88, - 0x8b, 0xa4, 0x4b, 0x4a, 0xba, 0xf0, 0xa2, 0x22, 0xe9, 0x82, 0x92, 0xee, 0x60, 0x73, 0x2b, 0x0d, - 0x18, 0x7d, 0x44, 0x1a, 0x03, 0xc0, 0x47, 0x06, 0xa7, 0xa7, 0x67, 0x2e, 0xfd, 0xff, 0x6c, 0xb9, - 0x14, 0x97, 0xe5, 0x88, 0x8b, 0x41, 0xb9, 0xbd, 0x53, 0x1e, 0x9c, 0xe4, 0xac, 0x7c, 0x19, 0x6e, - 0x68, 0x69, 0xfd, 0x08, 0x8d, 0xd3, 0xeb, 0x2f, 0x12, 0x26, 0x93, 0x5c, 0xd7, 0x66, 0xe3, 0x79, - 0x80, 0x42, 0x85, 0x4f, 0x74, 0x59, 0x0f, 0x41, 0x7c, 0x7e, 0x44, 0xee, 0x20, 0xc0, 0xa0, 0xf0, - 0x59, 0x02, 0x4b, 0xed, 0xed, 0x5d, 0x86, 0xf9, 0xd5, 0xcd, 0x05, 0x6a, 0xbf, 0xf7, 0xde, 0x25, - 0x49, 0xfc, 0x2e, 0x99, 0xde, 0x44, 0x41, 0xb6, 0x87, 0x5e, 0x5e, 0x7b, 0x77, 0xe1, 0xe7, 0x10, - 0xcf, 0xd3, 0xe5, 0x20, 0xee, 0x32, 0x52, 0x9b, 0x6d, 0x5f, 0x4d, 0xda, 0x5e, 0xef, 0xb9, 0x33, - 0xda, 0xc7, 0xf0, 0xba, 0x36, 0x7e, 0xd7, 0x71, 0xaf, 0x26, 0xa3, 0xbe, 0x7c, 0xdc, 0xef, 0x22, - 0xaf, 0x7f, 0xfa, 0xd4, 0xf3, 0xae, 0x26, 0x94, 0xd2, 0xf6, 0xf6, 0x31, 0xa5, 0xfb, 0x5c, 0x4b, - 0x81, 0x0a, 0xa4, 0x78, 0x83, 0xb1, 0xc3, 0x1c, 0xe3, 0xe0, 0x70, 0x7e, 0x95, 0xa1, 0x45, 0xe5, - 0xd5, 0x64, 0xe9, 0xb6, 0x30, 0x52, 0x9b, 0xdb, 0x7a, 0xd6, 0xfd, 0x0e, 0xd6, 0xd9, 0xd2, 0xfd, - 0xa1, 0x27, 0xc3, 0xb8, 0xc7, 0xb3, 0xd4, 0x08, 0xe9, 0x0c, 0x09, 0x1f, 0x48, 0x63, 0xc9, 0x0a, - 0x55, 0x7c, 0x6f, 0x70, 0x00, 0x3a, 0xcb, 0xc0, 0x39, 0xc3, 0x42, 0x9b, 0x25, 0x06, 0x08, 0x6b, - 0x3e, 0xac, 0xe8, 0x96, 0x76, 0x18, 0xdf, 0x77, 0x16, 0xa6, 0xd7, 0xad, 0x0f, 0xc1, 0x45, 0x92, - 0x88, 0x73, 0xa3, 0xcd, 0xdf, 0x07, 0x31, 0xb5, 0x82, 0xb6, 0x05, 0x67, 0x71, 0xcf, 0xda, 0x63, - 0xbd, 0xc4, 0x52, 0x36, 0xf5, 0xc4, 0x0c, 0x3f, 0x0d, 0x3b, 0x6b, 0x66, 0x32, 0xa8, 0x34, 0xe3, - 0xb6, 0xc9, 0xb6, 0x9f, 0x38, 0x7f, 0xb0, 0x95, 0xfc, 0xe1, 0xa2, 0x91, 0x27, 0x84, 0xca, 0x28, - 0xdb, 0xe0, 0x36, 0x54, 0x37, 0x2b, 0x57, 0x47, 0x63, 0xa9, 0x6e, 0x7d, 0x65, 0xd4, 0x4a, 0x36, - 0x4f, 0x5a, 0xb0, 0x39, 0x41, 0x97, 0xef, 0x75, 0x65, 0x24, 0x24, 0x69, 0x36, 0x74, 0x86, 0x91, - 0x69, 0xdf, 0xc9, 0x7b, 0x28, 0x8e, 0xb7, 0x91, 0xcc, 0xbd, 0xeb, 0x3b, 0x57, 0x4b, 0x80, 0xf2, - 0xbf, 0xd1, 0xd9, 0x5d, 0xcb, 0xf2, 0xc9, 0xbb, 0xbe, 0xd2, 0x31, 0x12, 0x7a, 0x86, 0xe1, 0x93, - 0x6e, 0x1d, 0x26, 0xee, 0x93, 0x9b, 0xad, 0xcf, 0x2e, 0x83, 0x58, 0x1d, 0x5e, 0xc5, 0x28, 0x5b, - 0x28, 0xf3, 0x59, 0x0b, 0xcb, 0x15, 0x7e, 0x0b, 0x20, 0xb9, 0x6b, 0x6a, 0x3a, 0x6b, 0xb1, 0x24, - 0x80, 0x8d, 0x4a, 0x92, 0x5f, 0x4d, 0x4a, 0x2a, 0x49, 0xc5, 0xcc, 0x86, 0xac, 0xc0, 0xc0, 0x63, - 0xf4, 0xc3, 0x83, 0x8d, 0x7f, 0xe0, 0xc3, 0x50, 0x0b, 0x3f, 0xfb, 0xf2, 0x39, 0xe1, 0xe7, 0x44, - 0x3e, 0x47, 0xfc, 0x1c, 0xc9, 0x67, 0x2c, 0xd8, 0xf6, 0xf0, 0xb1, 0x6d, 0x81, 0x50, 0x48, 0xe5, - 0xe5, 0x33, 0x9a, 0xcb, 0x52, 0x05, 0x32, 0xe1, 0x2f, 0x96, 0xcb, 0x05, 0x5d, 0x4b, 0x61, 0x8e, - 0x53, 0x34, 0x92, 0xcc, 0x21, 0x2d, 0x20, 0xf9, 0xd6, 0x29, 0xc5, 0xdc, 0x87, 0x93, 0x5f, 0x5e, - 0x31, 0x68, 0xe1, 0x46, 0xc0, 0x25, 0x71, 0x27, 0x9c, 0xf2, 0x46, 0xa3, 0x10, 0x4a, 0x30, 0xe9, - 0x0c, 0xc6, 0xaa, 0x1e, 0xa4, 0xc4, 0xf7, 0x54, 0xc0, 0x95, 0xa7, 0x8c, 0x27, 0x02, 0xcd, 0xdc, - 0x3f, 0x1b, 0x5b, 0x3d, 0x44, 0x9e, 0xd8, 0x3f, 0x13, 0xec, 0x92, 0xc3, 0x2d, 0x28, 0x0d, 0xdc, - 0x53, 0xb9, 0x99, 0x59, 0x04, 0x58, 0xf1, 0x94, 0x00, 0x48, 0xf0, 0x6f, 0x1d, 0x00, 0x09, 0x03, - 0x68, 0x05, 0x3a, 0x6c, 0x96, 0x68, 0x21, 0x96, 0x0e, 0x4e, 0x73, 0x2a, 0x1d, 0x10, 0xc0, 0x14, - 0x97, 0xc6, 0x98, 0xfa, 0x69, 0xdb, 0x3b, 0x77, 0xd1, 0xc1, 0x84, 0x42, 0xe7, 0x0c, 0xf0, 0x47, - 0xef, 0x6c, 0x79, 0xbe, 0x5c, 0x22, 0x8a, 0x08, 0xf9, 0x46, 0x67, 0xb0, 0x85, 0xdc, 0x5b, 0x0e, - 0x4c, 0x04, 0xe4, 0xdd, 0x71, 0xf1, 0x61, 0xd0, 0xeb, 0x3f, 0xdf, 0x81, 0xf3, 0xb5, 0x96, 0x25, - 0xd4, 0xb3, 0x84, 0xb5, 0x59, 0x26, 0x3d, 0x2d, 0x0b, 0x3c, 0xd4, 0x65, 0xe9, 0xeb, 0x59, 0xfa, - 0xb5, 0x59, 0xf6, 0xf5, 0x2c, 0xfb, 0x90, 0xe5, 0xfb, 0x52, 0x8e, 0x44, 0xff, 0x0e, 0x3c, 0x0c, - 0xba, 0xe5, 0x0c, 0xfa, 0x57, 0xe0, 0xa1, 0x9a, 0x41, 0xff, 0x06, 0x3c, 0x54, 0x32, 0xcc, 0x11, - 0x54, 0x5a, 0xe5, 0xc0, 0xa7, 0x41, 0xaf, 0x57, 0xca, 0x73, 0xdd, 0xa3, 0xcf, 0x6c, 0xf9, 0x5a, - 0x1a, 0xb5, 0xcc, 0x48, 0xe8, 0x3c, 0xab, 0x24, 0x41, 0xb1, 0xb1, 0xad, 0xd7, 0x94, 0x06, 0xb7, - 0xda, 0xd7, 0xf0, 0x69, 0x40, 0x01, 0x5c, 0xcb, 0x1f, 0x0c, 0xb5, 0x5c, 0xf0, 0x50, 0x9b, 0x29, - 0xfd, 0xa4, 0x57, 0xf5, 0xa9, 0xa1, 0x26, 0x3d, 0xd3, 0x75, 0x91, 0xc9, 0x19, 0x68, 0x4d, 0xc0, - 0x20, 0xf0, 0xfc, 0x1d, 0xfe, 0x85, 0x95, 0x89, 0xb4, 0xe2, 0x17, 0x74, 0x66, 0xd0, 0xdf, 0x71, - 0x03, 0xa0, 0x32, 0x72, 0x89, 0xf9, 0x76, 0x11, 0x93, 0x33, 0xf0, 0x60, 0x61, 0x61, 0x44, 0x6b, - 0x7c, 0xc4, 0x85, 0xb8, 0x04, 0x4a, 0x16, 0xa6, 0xac, 0x30, 0xd8, 0x2e, 0x85, 0x1a, 0x02, 0x8e, - 0x6a, 0x85, 0x53, 0x7a, 0x9c, 0xdd, 0x23, 0x65, 0x52, 0xc9, 0x6f, 0x17, 0xe9, 0x12, 0x98, 0xe9, - 0x39, 0xb2, 0xad, 0xbf, 0xc5, 0xae, 0xe5, 0x86, 0xb6, 0xef, 0xd2, 0x72, 0x84, 0x5f, 0xd6, 0x8b, - 0x28, 0xb2, 0xc4, 0x53, 0x69, 0xd8, 0x41, 0xba, 0xa2, 0xd7, 0xbd, 0xba, 0xf7, 0xfd, 0xe2, 0x7d, - 0x5f, 0xbc, 0xe7, 0x3d, 0xca, 0xeb, 0xef, 0x77, 0x0d, 0xa7, 0xe7, 0x30, 0xc6, 0x28, 0x56, 0xd8, - 0x1d, 0xfc, 0xf8, 0xb7, 0x8b, 0x89, 0xd6, 0x95, 0x7c, 0xf9, 0xaa, 0x25, 0xef, 0x97, 0xa0, 0x3f, - 0xbf, 0x47, 0x94, 0x3a, 0xc1, 0xbe, 0xa1, 0x83, 0x32, 0x8f, 0x88, 0x54, 0x59, 0x62, 0xb1, 0x79, - 0x06, 0x9d, 0x84, 0x7e, 0xa1, 0xfb, 0xd0, 0x99, 0x6b, 0x4d, 0x6f, 0x52, 0x7a, 0xf6, 0xc5, 0x73, - 0xe1, 0x96, 0x41, 0xc9, 0x89, 0x48, 0xe6, 0xf0, 0x28, 0x34, 0x2e, 0x41, 0xcc, 0xe3, 0x03, 0xe5, - 0x7a, 0x4b, 0x18, 0x93, 0x09, 0x82, 0x92, 0xb4, 0x3d, 0x6b, 0x29, 0x8e, 0x13, 0x05, 0xc3, 0x07, - 0x51, 0xe2, 0x2a, 0x9c, 0x4e, 0x03, 0x52, 0xb2, 0xb2, 0x58, 0x88, 0xf7, 0x77, 0xfc, 0xf2, 0xc7, - 0x20, 0xd6, 0xde, 0x0b, 0x2c, 0xae, 0xf9, 0xa6, 0xef, 0x84, 0x82, 0x48, 0x93, 0xc3, 0x11, 0x15, - 0xe0, 0x45, 0x3c, 0x7d, 0x7d, 0x1f, 0x4c, 0x6e, 0x18, 0x0f, 0xd1, 0x25, 0xf9, 0x4e, 0x18, 0x0d, - 0x30, 0x56, 0x1e, 0xee, 0xfc, 0x04, 0x1f, 0x10, 0x00, 0x27, 0x97, 0x00, 0x02, 0x84, 0xb7, 0xa0, - 0x41, 0x00, 0x60, 0x58, 0xff, 0x71, 0xd0, 0x41, 0x47, 0x54, 0xdb, 0x19, 0xd8, 0x5b, 0xfe, 0xf6, - 0x76, 0x04, 0xff, 0xb7, 0x33, 0xd7, 0x42, 0x4f, 0xef, 0x16, 0xec, 0x02, 0x6d, 0xab, 0x80, 0xd7, - 0x22, 0x46, 0x0b, 0x1d, 0xb4, 0x2c, 0x3d, 0xe0, 0x7f, 0x0c, 0xd9, 0x83, 0x22, 0xc8, 0xbc, 0xad, - 0xe2, 0x21, 0x83, 0x20, 0xa9, 0xd7, 0xc8, 0xc8, 0x59, 0xd0, 0x82, 0x9c, 0xef, 0x37, 0x72, 0x51, - 0x9b, 0x0e, 0x54, 0x89, 0xf5, 0x38, 0xe8, 0xdc, 0xe7, 0x47, 0xd1, 0x17, 0x16, 0x01, 0x97, 0x86, - 0x52, 0x0e, 0xd5, 0xf9, 0xd8, 0xb4, 0x5f, 0x41, 0x98, 0x44, 0xe7, 0x3b, 0x3d, 0x98, 0x0e, 0x1e, - 0xa5, 0x7f, 0x7b, 0xf7, 0xf6, 0x27, 0x90, 0x37, 0x3f, 0xf0, 0x16, 0x3d, 0xcc, 0x50, 0x85, 0xfa, - 0x1a, 0x75, 0x0c, 0xa8, 0x4f, 0x0d, 0x62, 0x3c, 0xd4, 0x63, 0x15, 0x96, 0x6b, 0x6b, 0x61, 0x9b, - 0x8b, 0xdb, 0x17, 0x0a, 0x8d, 0x27, 0x83, 0xe7, 0x13, 0xa6, 0x30, 0xa5, 0xa0, 0x97, 0xf2, 0x4d, - 0x36, 0xf2, 0x9e, 0x76, 0x31, 0x62, 0x3e, 0x5e, 0x54, 0x54, 0xab, 0xa5, 0xfb, 0x2a, 0xbd, 0xde, - 0x40, 0xaf, 0x98, 0x20, 0x04, 0x26, 0x9f, 0x39, 0xe4, 0x3e, 0x5d, 0xde, 0x90, 0x6c, 0x7c, 0xfc, - 0xf3, 0xc9, 0x47, 0xa0, 0xdf, 0x3d, 0xee, 0x98, 0x25, 0xa3, 0xf7, 0x60, 0x4f, 0xde, 0x24, 0xe9, - 0xf5, 0x2b, 0xd8, 0xf9, 0x70, 0x5e, 0xe1, 0xf1, 0x65, 0x94, 0x5c, 0xd8, 0x40, 0xa2, 0xee, 0x02, - 0x5d, 0x98, 0x4c, 0xc0, 0x07, 0x72, 0x46, 0x5f, 0x12, 0xfe, 0x16, 0x16, 0x44, 0x15, 0xe8, 0x69, - 0x74, 0x06, 0x93, 0x32, 0x8c, 0x3b, 0x90, 0x0f, 0x83, 0x6b, 0x5b, 0xe2, 0x0b, 0xae, 0x4f, 0x30, - 0xd7, 0x98, 0x14, 0x97, 0x6f, 0x9b, 0x15, 0xd5, 0xe1, 0x39, 0x98, 0x05, 0x3b, 0x58, 0xb3, 0x69, - 0x80, 0xf7, 0x7d, 0xad, 0xec, 0x26, 0xa5, 0x0b, 0x1e, 0x1b, 0xa3, 0xe2, 0x3b, 0xec, 0xd5, 0x2d, - 0xe8, 0x94, 0x22, 0x04, 0x8c, 0x71, 0x8d, 0xd7, 0xcc, 0x8f, 0xb5, 0xa7, 0xe7, 0xb2, 0x9a, 0x08, - 0x5c, 0x6b, 0x0b, 0xdd, 0xd8, 0x08, 0x9c, 0x06, 0x1c, 0x00, 0x1d, 0x2b, 0x65, 0xae, 0xa5, 0x9b, - 0xd8, 0x66, 0x04, 0x86, 0x7b, 0x92, 0x27, 0xa9, 0x7f, 0x19, 0x60, 0xf0, 0xb4, 0xa3, 0x3c, 0x80, - 0xd6, 0xdf, 0x45, 0x84, 0xc3, 0x76, 0x6f, 0x09, 0x4b, 0x75, 0x54, 0x04, 0x31, 0xb1, 0x68, 0xd2, - 0x54, 0xce, 0x50, 0x81, 0xdb, 0xdb, 0x59, 0xe7, 0x96, 0xbc, 0x49, 0xf1, 0x8f, 0x94, 0x84, 0xf5, - 0x2f, 0xc2, 0x9b, 0x39, 0xcb, 0xb8, 0x88, 0x84, 0x6e, 0xeb, 0x4a, 0xa3, 0xa5, 0x91, 0x6f, 0xb1, - 0x74, 0x2f, 0x95, 0x35, 0x0f, 0x77, 0xa2, 0xeb, 0x0a, 0x04, 0x08, 0xad, 0x99, 0x59, 0xa5, 0x99, - 0x6e, 0x09, 0x6d, 0x64, 0x31, 0x1f, 0xe8, 0x15, 0xbb, 0xb7, 0x3a, 0x58, 0x02, 0x3c, 0x2c, 0xab, - 0x6a, 0x78, 0x97, 0xd5, 0x68, 0xf2, 0x3a, 0x2c, 0x70, 0x7f, 0xf8, 0xc1, 0xb0, 0xa4, 0x29, 0x37, - 0x8c, 0xb1, 0x8c, 0x89, 0x55, 0xac, 0x83, 0x78, 0x81, 0xa6, 0xdc, 0x8f, 0xe7, 0xa4, 0x6a, 0x6c, - 0x07, 0x26, 0x53, 0xf9, 0x0a, 0x64, 0x12, 0x1d, 0x92, 0x64, 0x43, 0x9c, 0x91, 0x0c, 0xaf, 0xf8, - 0xf4, 0x01, 0x37, 0x2d, 0x38, 0x60, 0xf8, 0x8d, 0x51, 0x83, 0x69, 0x83, 0x3a, 0xd0, 0x9a, 0x77, - 0x5c, 0xbe, 0x28, 0xac, 0x8c, 0x46, 0xbb, 0x07, 0xe3, 0xb1, 0x74, 0x9f, 0x75, 0x9d, 0x01, 0x22, - 0xe1, 0xac, 0x86, 0xce, 0xd0, 0x8e, 0xcf, 0x88, 0xe9, 0x42, 0xb1, 0x1c, 0x15, 0xad, 0x06, 0xcd, - 0x9a, 0x5b, 0x15, 0x21, 0x0c, 0x2d, 0x04, 0x84, 0x4a, 0xa4, 0xec, 0x12, 0xa4, 0xd8, 0x9a, 0x08, - 0xd1, 0xbe, 0x1a, 0x05, 0x3e, 0xf4, 0xac, 0x39, 0x39, 0x7e, 0x80, 0xe4, 0x9b, 0x8f, 0xbb, 0x83, - 0xde, 0x30, 0x3c, 0x50, 0xc1, 0x0f, 0x43, 0x89, 0x1f, 0x16, 0x7b, 0xd9, 0x69, 0x88, 0x52, 0xf4, - 0x66, 0x9e, 0xcd, 0x9d, 0x3c, 0xf9, 0x2b, 0xb0, 0x8f, 0xf4, 0xd0, 0x47, 0xb8, 0x20, 0x60, 0x26, - 0x66, 0xeb, 0x23, 0x25, 0xdf, 0x8b, 0x2e, 0x98, 0xf9, 0x11, 0x8f, 0x5c, 0x3a, 0x2e, 0xc1, 0x2c, - 0x6b, 0x10, 0xda, 0x51, 0xe0, 0xc7, 0x0c, 0xf9, 0x53, 0x17, 0xaa, 0x4d, 0x2c, 0xe8, 0x80, 0xac, - 0x31, 0xc3, 0xe4, 0x26, 0x33, 0x87, 0x50, 0x2a, 0x48, 0xe9, 0x6c, 0xa5, 0xb9, 0x2a, 0x61, 0x25, - 0x38, 0x55, 0xc4, 0x96, 0x6d, 0x64, 0x84, 0xfc, 0xcb, 0x22, 0xab, 0x36, 0x54, 0x70, 0x82, 0x9c, - 0x43, 0x5e, 0x73, 0x78, 0x41, 0x89, 0x90, 0xd9, 0xb1, 0x9c, 0x9c, 0x0e, 0x06, 0xba, 0x63, 0x87, - 0xf1, 0x30, 0xca, 0x09, 0x0f, 0xae, 0x66, 0xb8, 0xd9, 0x3a, 0x8e, 0x1c, 0x48, 0x65, 0x48, 0x8a, - 0xb3, 0x2a, 0xc2, 0xaa, 0x34, 0x8e, 0xeb, 0x19, 0xda, 0x41, 0xaa, 0xf6, 0xcd, 0xbd, 0x84, 0x6f, - 0x94, 0xb0, 0xc5, 0xba, 0xbf, 0xbb, 0x68, 0x9c, 0xa6, 0x5f, 0xee, 0x9e, 0xa9, 0xbe, 0xaa, 0x8a, - 0xc7, 0x81, 0x52, 0xa6, 0xcd, 0xa2, 0x7c, 0xf0, 0xe8, 0x31, 0xf8, 0xda, 0x5e, 0xe6, 0xd0, 0xcb, - 0x5c, 0x99, 0x7c, 0x16, 0xbd, 0x35, 0x56, 0x03, 0x86, 0xc4, 0xf7, 0x73, 0x38, 0xe1, 0x29, 0xad, - 0x1d, 0x9e, 0x7f, 0xb5, 0x68, 0x9c, 0x38, 0x06, 0xe6, 0x41, 0x30, 0x40, 0xf7, 0x5e, 0x47, 0x52, - 0x29, 0x3d, 0x0d, 0x59, 0x9f, 0x1e, 0x3b, 0x04, 0x95, 0x44, 0xca, 0x38, 0x4a, 0xf7, 0x4e, 0xe3, - 0x33, 0x44, 0x42, 0xb4, 0x73, 0xce, 0x27, 0x2a, 0x75, 0x0e, 0x32, 0x47, 0x85, 0x43, 0x85, 0xb3, - 0x5a, 0x74, 0x90, 0xed, 0xe6, 0xc3, 0x08, 0x48, 0x9f, 0x73, 0xd1, 0x21, 0x3e, 0x60, 0x2f, 0xe2, - 0xdd, 0x1e, 0xc3, 0xc3, 0x56, 0x1a, 0xa1, 0xc1, 0x45, 0xc1, 0x79, 0xda, 0xc0, 0x8f, 0x32, 0x9b, - 0x93, 0xa7, 0xd8, 0x1a, 0x0d, 0x2c, 0x4a, 0x6f, 0x94, 0x16, 0x0c, 0xd2, 0x6c, 0x5b, 0xb9, 0x5d, - 0x5a, 0x46, 0xd1, 0x3c, 0xdd, 0x57, 0x18, 0x5b, 0x59, 0x0c, 0xaa, 0x72, 0x68, 0xd1, 0xf4, 0xa0, - 0xec, 0xea, 0xc7, 0x91, 0x43, 0x03, 0xcd, 0xcf, 0x2f, 0x39, 0x77, 0x34, 0xbf, 0x15, 0xc1, 0x19, - 0x34, 0x7d, 0x29, 0x72, 0xa7, 0x11, 0x8e, 0xa8, 0x71, 0x35, 0x9d, 0xd5, 0x5e, 0x4d, 0x17, 0x50, - 0x87, 0x6e, 0x00, 0x13, 0x9f, 0x23, 0x48, 0x74, 0x35, 0x97, 0xf2, 0xaf, 0xe5, 0x8d, 0xb6, 0xc6, - 0xbb, 0xb0, 0xc8, 0xe1, 0x06, 0x23, 0x9a, 0x4e, 0x39, 0xd9, 0xd8, 0xe4, 0x72, 0xa9, 0xc2, 0xe6, - 0xb9, 0x28, 0x87, 0xc0, 0x0d, 0xca, 0xec, 0x2e, 0x86, 0x43, 0x9c, 0xb0, 0x6f, 0x88, 0xcf, 0xbc, - 0xb9, 0xf8, 0xa1, 0x6c, 0x1f, 0xdc, 0x82, 0x06, 0x55, 0x2e, 0x82, 0x59, 0x81, 0x29, 0x54, 0x09, - 0x22, 0x14, 0xa2, 0x53, 0xc4, 0x5d, 0x54, 0x69, 0x5e, 0x11, 0xb2, 0x34, 0xa6, 0x28, 0x84, 0x7a, - 0x0e, 0x02, 0xfc, 0x2a, 0xd7, 0x85, 0x68, 0x37, 0x46, 0x45, 0x18, 0x44, 0x52, 0x7a, 0x0e, 0xf3, - 0x0c, 0xe9, 0xa6, 0x47, 0xec, 0x78, 0x1c, 0x13, 0xba, 0xb3, 0xe6, 0x6a, 0x1c, 0x4b, 0x54, 0xcc, - 0xc6, 0x12, 0x85, 0xa7, 0xd1, 0x3c, 0xfc, 0xc5, 0x8f, 0x30, 0x41, 0x9a, 0x60, 0xc4, 0xba, 0x55, - 0x98, 0x17, 0xa1, 0x45, 0x40, 0x54, 0x35, 0x8e, 0x12, 0x68, 0xc7, 0x5c, 0xa0, 0x64, 0x80, 0xc7, - 0x50, 0x66, 0xe4, 0xe3, 0x1a, 0x37, 0x1a, 0x60, 0x54, 0xbc, 0xb2, 0x39, 0x5a, 0x9c, 0xb8, 0x31, - 0x7f, 0x61, 0x37, 0xf6, 0xd9, 0xb2, 0x36, 0xb3, 0xe9, 0x58, 0xe6, 0x7f, 0xc0, 0xb1, 0x5a, 0x3b, - 0x25, 0xc4, 0xc4, 0x11, 0x8b, 0xab, 0xfb, 0x8a, 0x7d, 0xf1, 0x45, 0x74, 0x93, 0xda, 0xb5, 0xc0, - 0xce, 0xd5, 0x37, 0xba, 0xc9, 0x2f, 0xbf, 0x5d, 0xf2, 0x69, 0xf5, 0xef, 0x87, 0x55, 0x80, 0x50, - 0x49, 0xb7, 0xd0, 0x22, 0xc7, 0x7d, 0xef, 0x3d, 0xa5, 0x55, 0x18, 0x52, 0x4b, 0xbc, 0xae, 0x7b, - 0xdf, 0x15, 0x60, 0x7a, 0xd4, 0xb9, 0x13, 0xb2, 0x4e, 0x12, 0xa3, 0x3e, 0xd4, 0x5a, 0xcf, 0x30, - 0x73, 0x0b, 0xa5, 0x8a, 0x15, 0x71, 0xc2, 0x3e, 0x26, 0x37, 0x30, 0x4b, 0xd9, 0xb8, 0x9c, 0x80, - 0x28, 0x8a, 0xda, 0xf1, 0xf0, 0xca, 0xcf, 0x8e, 0xd2, 0x84, 0x22, 0x06, 0x63, 0x2d, 0x92, 0x25, - 0xd6, 0xa9, 0xaf, 0x90, 0x0d, 0x28, 0x40, 0xf4, 0x0c, 0x45, 0x76, 0xdb, 0x82, 0xb2, 0xca, 0x7e, - 0x6e, 0xab, 0x2b, 0xe2, 0x76, 0xc1, 0x6e, 0xa6, 0x89, 0xe7, 0x93, 0xcf, 0x72, 0x1f, 0x9b, 0x4f, - 0x10, 0x29, 0x4b, 0x72, 0x24, 0xe0, 0x5e, 0x7e, 0x7a, 0x19, 0x68, 0xcb, 0x98, 0xd8, 0xbe, 0x48, - 0x34, 0x77, 0x5c, 0x95, 0x65, 0xa8, 0xaf, 0xf5, 0x38, 0xa1, 0x31, 0x47, 0xed, 0x88, 0xde, 0x8d, - 0xbc, 0xf4, 0x9c, 0xa1, 0xf6, 0x04, 0x06, 0x53, 0x0e, 0x15, 0xd4, 0x86, 0xf7, 0xdd, 0xbf, 0xa9, - 0x81, 0xbd, 0x7c, 0xfd, 0xf2, 0xf0, 0xbd, 0x6d, 0xe5, 0xfe, 0x85, 0x00, 0xf0, 0xb1, 0x9c, 0x53, - 0x9e, 0x85, 0x33, 0x41, 0x59, 0x1f, 0x93, 0xb9, 0xfb, 0xf7, 0xc3, 0x3a, 0x27, 0x68, 0x41, 0x5e, - 0x5b, 0xb6, 0x9c, 0x9b, 0xae, 0x63, 0x04, 0x3c, 0x26, 0xda, 0xe7, 0xfe, 0x73, 0x8e, 0xed, 0xed, - 0xd2, 0x38, 0x54, 0x9b, 0xe5, 0xe5, 0xbb, 0xf7, 0x5d, 0x37, 0x66, 0xe3, 0x15, 0x12, 0x51, 0x33, - 0xd4, 0xfb, 0xb6, 0xed, 0xf8, 0x49, 0xb6, 0x77, 0xf7, 0x2b, 0x48, 0xb5, 0xc9, 0x9b, 0xf0, 0x3e, - 0x98, 0x62, 0x2c, 0xf2, 0xee, 0x16, 0xf2, 0x58, 0x9b, 0x9b, 0x3b, 0xea, 0x52, 0xfc, 0x53, 0x47, - 0x25, 0x20, 0x5c, 0x72, 0x3c, 0xc2, 0x84, 0x68, 0xd4, 0xe9, 0xf5, 0x41, 0x6c, 0xd9, 0xa4, 0xab, - 0x70, 0xa6, 0xe1, 0x91, 0x81, 0x7a, 0xa0, 0xd7, 0x2c, 0x75, 0x91, 0xb9, 0x35, 0x1c, 0x43, 0xd3, - 0xfc, 0x8b, 0x6d, 0xed, 0xee, 0x86, 0x96, 0xcb, 0xe5, 0x76, 0x11, 0xb6, 0x25, 0xf2, 0x7a, 0xbb, - 0x91, 0xbc, 0x95, 0xf3, 0x51, 0xf0, 0xfa, 0x9c, 0x89, 0x26, 0x80, 0x14, 0xd1, 0x54, 0xc7, 0xcc, - 0x72, 0x23, 0x67, 0xd3, 0x71, 0xed, 0x41, 0x45, 0x62, 0x45, 0xe8, 0xc6, 0xe2, 0x84, 0x31, 0xb5, - 0xb8, 0xfb, 0xd5, 0x13, 0x77, 0x1c, 0xc4, 0x3e, 0x08, 0xcf, 0x64, 0xa8, 0xdd, 0x5c, 0x50, 0x90, - 0x03, 0x31, 0xc0, 0x0c, 0x56, 0x31, 0xcc, 0x0e, 0x93, 0x08, 0x1b, 0x81, 0x5f, 0x11, 0x08, 0xbc, - 0xae, 0x4c, 0xbb, 0x90, 0x37, 0xd2, 0xc4, 0x5f, 0x8c, 0x72, 0x22, 0x27, 0xe3, 0x76, 0x6d, 0xf1, - 0x25, 0x02, 0x8c, 0xc1, 0xd3, 0xa2, 0x70, 0x3e, 0x2f, 0x2a, 0x14, 0x10, 0x79, 0x34, 0xdf, 0xc0, - 0x27, 0xf0, 0x2c, 0x76, 0xe7, 0xdd, 0xfd, 0x5a, 0xc1, 0xd0, 0xe3, 0x0c, 0x8c, 0x84, 0x40, 0x71, - 0x7d, 0x29, 0xe1, 0x85, 0x27, 0x48, 0xe5, 0x85, 0x5b, 0x7f, 0x10, 0x9c, 0x4f, 0xae, 0x2d, 0x57, - 0x64, 0x41, 0xab, 0x47, 0xfa, 0x05, 0xf5, 0xe3, 0x86, 0xd9, 0x7f, 0xba, 0xbd, 0x2d, 0x4b, 0xd3, - 0xe5, 0xa2, 0xbc, 0xc2, 0xc4, 0x08, 0x17, 0x30, 0x68, 0xfc, 0x6e, 0x7b, 0x1b, 0x72, 0x43, 0xe6, - 0x7d, 0xfc, 0x71, 0xd0, 0xeb, 0x3f, 0xeb, 0x8e, 0xfb, 0xfb, 0xdd, 0x41, 0xff, 0x7b, 0xd8, 0x67, - 0xb6, 0xb0, 0x25, 0x98, 0x4a, 0x75, 0x51, 0xdb, 0xe9, 0xf7, 0xc3, 0x43, 0xf1, 0x05, 0x4a, 0xe5, - 0x07, 0x5c, 0x65, 0xa8, 0xa6, 0x80, 0xf9, 0xe7, 0x08, 0x19, 0x65, 0x7a, 0x90, 0xbb, 0x1b, 0x87, - 0x49, 0x38, 0x86, 0xb6, 0xeb, 0x48, 0x46, 0xdc, 0x1e, 0x03, 0x0e, 0x4c, 0x9b, 0x02, 0xa6, 0x1f, - 0x06, 0x5d, 0xf6, 0x64, 0xd3, 0x0b, 0x9f, 0x53, 0x18, 0x08, 0xc8, 0x37, 0xb6, 0xba, 0x78, 0x82, - 0xbc, 0xc9, 0x13, 0xeb, 0x11, 0x53, 0xa9, 0xa8, 0x93, 0x83, 0xc1, 0xc8, 0x76, 0xe0, 0x9d, 0x1e, - 0xd4, 0xf6, 0x14, 0xff, 0x18, 0x4a, 0x27, 0x0b, 0xcf, 0xcf, 0x27, 0x7c, 0xe9, 0x84, 0xbb, 0x8d, - 0xe5, 0x5a, 0x62, 0x16, 0x0f, 0xb1, 0xa4, 0x25, 0x50, 0x1f, 0x4b, 0xb9, 0x6c, 0xdd, 0x2c, 0xe2, - 0x3a, 0x00, 0x1e, 0xf7, 0x2a, 0x08, 0xd0, 0x9b, 0xac, 0xd3, 0xe9, 0xb0, 0x35, 0xe9, 0x96, 0xc4, - 0x04, 0x55, 0xb7, 0x6a, 0x43, 0xde, 0x39, 0x80, 0x1f, 0x74, 0xb2, 0xab, 0x70, 0x06, 0x07, 0x4c, - 0xf6, 0x89, 0x85, 0xe3, 0x2b, 0xf9, 0x11, 0xf0, 0xaf, 0xcc, 0x71, 0x4a, 0x3a, 0xd1, 0xcc, 0x11, - 0x6f, 0x30, 0xa6, 0xd1, 0x98, 0x98, 0xf6, 0xc3, 0x83, 0x79, 0xe6, 0x85, 0xf3, 0x38, 0xa4, 0x92, - 0xa5, 0xa6, 0xab, 0xb5, 0x06, 0x35, 0x46, 0x54, 0xca, 0x19, 0xd4, 0xe6, 0xa7, 0xd8, 0x4a, 0xea, - 0x72, 0xb2, 0xd2, 0x8d, 0x25, 0x2f, 0xc7, 0xc6, 0x05, 0x1f, 0x5b, 0x2e, 0x2c, 0x14, 0xb1, 0x52, - 0xab, 0x3a, 0x31, 0xa6, 0x4c, 0x06, 0x8e, 0x23, 0x02, 0x82, 0x7a, 0xaa, 0xb9, 0xae, 0x13, 0xf4, - 0x4d, 0x48, 0xee, 0xa0, 0x32, 0xe4, 0x0d, 0x2e, 0xca, 0x20, 0xb5, 0x19, 0x73, 0xdc, 0xf0, 0x18, - 0xf6, 0x69, 0x4d, 0x4e, 0xaa, 0x12, 0x0e, 0xf9, 0x96, 0x8b, 0xec, 0x7a, 0x4d, 0xbe, 0x9b, 0xf9, - 0xba, 0x6c, 0xf4, 0x61, 0xd4, 0x06, 0xab, 0x7c, 0xff, 0x76, 0xb0, 0x07, 0x2c, 0x35, 0x9c, 0xe7, - 0xa3, 0xd6, 0x81, 0xf8, 0xf1, 0x6f, 0x74, 0xef, 0x9f, 0x1d, 0xbe, 0x7e, 0x4d, 0x31, 0x10, 0x8d, - 0x4d, 0x9d, 0xe9, 0x49, 0xbe, 0x12, 0xf6, 0xc6, 0x75, 0x28, 0x64, 0xcd, 0xe0, 0x6a, 0x45, 0xbd, - 0xc5, 0x6f, 0xa7, 0x40, 0x2f, 0x35, 0xea, 0x76, 0xa7, 0x1a, 0x7e, 0xc0, 0xcb, 0x2f, 0x64, 0x31, - 0x11, 0xf0, 0xfb, 0x5a, 0xf0, 0x32, 0x59, 0x78, 0x23, 0xfc, 0x32, 0x53, 0x53, 0xf7, 0x36, 0xb9, - 0x24, 0x85, 0xa3, 0xd2, 0xc3, 0x26, 0x5e, 0xdd, 0xc7, 0x21, 0xdb, 0x8b, 0x34, 0xf0, 0x51, 0x5b, - 0x51, 0x52, 0x5f, 0xd7, 0x2b, 0x9d, 0x3a, 0x8c, 0x50, 0xe7, 0x06, 0x2e, 0x49, 0x4c, 0x85, 0x56, - 0x35, 0x76, 0x7d, 0x87, 0xdc, 0x51, 0xfc, 0x71, 0x8e, 0xd1, 0x4a, 0xed, 0x44, 0xaa, 0x03, 0x3a, - 0xc5, 0xff, 0x2c, 0xc3, 0xba, 0x2b, 0x47, 0x0c, 0xef, 0x3a, 0x28, 0x56, 0xad, 0xed, 0x90, 0x65, - 0xe9, 0x22, 0xbc, 0xb0, 0x33, 0x50, 0x15, 0x02, 0x6f, 0x28, 0x74, 0xdf, 0x2d, 0x82, 0x01, 0x6d, - 0xf5, 0xba, 0xad, 0x2c, 0x80, 0x95, 0x39, 0xcd, 0x2c, 0x95, 0xd1, 0x87, 0x25, 0xa7, 0xa9, 0x7d, - 0x71, 0x20, 0x34, 0x8d, 0xb2, 0x63, 0xf0, 0x9a, 0xdc, 0x31, 0xfc, 0x91, 0x57, 0x29, 0xb4, 0x93, - 0x3a, 0x85, 0x76, 0xf2, 0xcf, 0x51, 0x68, 0x27, 0x5f, 0xab, 0xd0, 0x4e, 0x1e, 0xa1, 0xd0, 0xf6, - 0x37, 0x56, 0x68, 0x47, 0x9a, 0x42, 0xdb, 0x6f, 0x50, 0x68, 0x47, 0x0e, 0xb9, 0xb2, 0xd7, 0x28, - 0xb4, 0x0f, 0x5f, 0x97, 0x27, 0xa3, 0x70, 0xae, 0x80, 0xfd, 0xbc, 0x83, 0x5a, 0x57, 0x4b, 0xc6, - 0x2e, 0xa8, 0x23, 0x5a, 0xe0, 0x74, 0x97, 0xa9, 0x7f, 0x2d, 0x08, 0xb7, 0x56, 0xb9, 0xad, 0xd5, - 0xe4, 0x26, 0x2a, 0x28, 0x41, 0x9d, 0x1f, 0x6e, 0xce, 0x1e, 0x0b, 0x14, 0xe3, 0xa4, 0x7e, 0x81, - 0xaa, 0x35, 0xa2, 0x28, 0xda, 0x5a, 0x4d, 0xb6, 0xf0, 0x65, 0xa0, 0x29, 0xcb, 0x95, 0xb4, 0xab, - 0x61, 0x2f, 0xd4, 0x71, 0x85, 0xc5, 0x23, 0x97, 0x9e, 0xea, 0x58, 0x69, 0x09, 0x26, 0xae, 0x42, - 0x9a, 0x39, 0x7f, 0xf1, 0xe1, 0xe3, 0xd1, 0xee, 0x9b, 0xdf, 0x5a, 0xfc, 0x19, 0x11, 0xde, 0xbd, - 0xa5, 0xfd, 0xef, 0x20, 0x1c, 0xa1, 0xe5, 0x1a, 0xd5, 0x44, 0x01, 0xc8, 0x6a, 0xb2, 0x94, 0x03, - 0xa6, 0x4e, 0x88, 0x52, 0x31, 0x85, 0xc3, 0x75, 0x99, 0x33, 0x31, 0xc2, 0x73, 0xab, 0x1e, 0x3d, - 0xb5, 0xa6, 0xc6, 0x6a, 0xb4, 0x28, 0xd4, 0x98, 0xa3, 0xb1, 0x8b, 0x16, 0x31, 0xdd, 0xe4, 0xc9, - 0x18, 0x9c, 0x13, 0x71, 0xd1, 0x8d, 0xa0, 0xa2, 0x8f, 0xad, 0x53, 0x90, 0xdd, 0x0e, 0x76, 0x79, - 0xc7, 0x6d, 0x89, 0xd0, 0x6c, 0x14, 0x99, 0x15, 0xfd, 0xa4, 0x3e, 0xdc, 0xc4, 0x5a, 0x44, 0xab, - 0x3f, 0xd6, 0x6c, 0xdc, 0x28, 0x91, 0x0a, 0x7e, 0xfc, 0x89, 0x88, 0x60, 0xe7, 0xf0, 0xf5, 0x8e, - 0xbb, 0xa3, 0x86, 0x18, 0x63, 0x98, 0xbe, 0x12, 0x39, 0x5a, 0xda, 0xc0, 0x7f, 0x45, 0x9f, 0xb0, - 0xaa, 0xc3, 0xd7, 0x1f, 0x83, 0xeb, 0x39, 0x52, 0x94, 0xe8, 0x1b, 0x7c, 0x06, 0xfd, 0x1b, 0x5b, - 0xb9, 0x48, 0xfe, 0xe7, 0x74, 0x0b, 0xdb, 0x7e, 0xdb, 0xdd, 0xdf, 0x27, 0xf5, 0xff, 0x8e, 0x4b, - 0x57, 0xbc, 0xf8, 0x8f, 0xde, 0x49, 0xcc, 0xd3, 0xc2, 0xf7, 0x5f, 0xd5, 0xc9, 0xda, 0xcf, 0xeb, - 0x37, 0x57, 0x0d, 0x5f, 0xd7, 0xb3, 0x7c, 0xf5, 0x18, 0x98, 0xe6, 0x5c, 0x3b, 0x1b, 0x18, 0xce, - 0xed, 0xbe, 0x26, 0xac, 0xe3, 0x6c, 0x2f, 0x4f, 0x83, 0x60, 0xef, 0x1a, 0x78, 0x5c, 0x90, 0xee, - 0xe1, 0x9a, 0x7c, 0xf3, 0xdb, 0x1e, 0x91, 0x83, 0x8c, 0x78, 0xc8, 0x9f, 0xb7, 0x46, 0x72, 0xbd, - 0xbe, 0x0d, 0x2f, 0x52, 0x3f, 0xfd, 0xf2, 0xf8, 0x31, 0xab, 0x02, 0x1a, 0x36, 0xb4, 0xfa, 0xfa, - 0xba, 0xf3, 0x39, 0x4e, 0x88, 0xfc, 0x80, 0xd7, 0xed, 0xc1, 0xf1, 0x2f, 0xbe, 0x16, 0x2d, 0x07, - 0x01, 0x2e, 0xdc, 0x9d, 0xdd, 0x57, 0x1a, 0x37, 0x5e, 0x3d, 0x82, 0xe9, 0x08, 0x98, 0xc9, 0x21, - 0x9c, 0x0e, 0xf0, 0x6a, 0x5a, 0x2c, 0xa7, 0x16, 0x30, 0xc3, 0x3f, 0xce, 0x56, 0x24, 0xc7, 0x1d, - 0xad, 0x61, 0x27, 0xe1, 0x08, 0x3f, 0x85, 0xf2, 0xc0, 0xa8, 0xb5, 0x2f, 0x05, 0x00, 0x90, 0xf5, - 0x5a, 0xb8, 0xef, 0xe0, 0xad, 0xe8, 0x49, 0x90, 0x86, 0x7e, 0xd4, 0xfa, 0xf9, 0x66, 0x7e, 0x93, - 0x77, 0x9a, 0xda, 0xe3, 0xb7, 0xd8, 0x4c, 0xef, 0x9b, 0x15, 0x74, 0xf7, 0xd3, 0xcb, 0x97, 0x2b, - 0x08, 0x4f, 0xca, 0xe9, 0x64, 0x2f, 0x32, 0x84, 0xe1, 0x0b, 0x73, 0x0c, 0x72, 0xa7, 0xa8, 0xf1, - 0xa7, 0x97, 0xbe, 0x9f, 0xb5, 0x5e, 0xa2, 0x73, 0x9e, 0xa8, 0xc2, 0x1a, 0xfd, 0x9f, 0xff, 0xf6, - 0xdf, 0xff, 0xeb, 0xc1, 0x9e, 0xff, 0x07, 0x5b, 0xf3, 0xfa, 0xab, 0x5b, 0x23, 0x28, 0xf4, 0xcf, - 0x69, 0xd0, 0xdb, 0x77, 0x5f, 0xd1, 0x1e, 0x0e, 0xe3, 0x5f, 0x6d, 0xc8, 0xf9, 0xb0, 0xba, 0x1b, - 0x7f, 0xd6, 0xe4, 0xe5, 0x42, 0x81, 0xe9, 0x6f, 0xbc, 0x6f, 0x37, 0xed, 0xd3, 0x7f, 0x58, 0x52, - 0x2c, 0x8d, 0x04, 0x1a, 0x7d, 0x24, 0x68, 0x30, 0x12, 0x93, 0x8a, 0xc1, 0x3a, 0x7c, 0x6d, 0xf1, - 0xa5, 0x0c, 0x7c, 0x5e, 0xae, 0x40, 0x38, 0xaf, 0x76, 0x98, 0x77, 0xc0, 0x21, 0x27, 0x15, 0xea, - 0xa1, 0xd5, 0x6c, 0xa4, 0xca, 0x41, 0xf6, 0xe0, 0xf8, 0x6b, 0x01, 0x55, 0xfe, 0x99, 0xd5, 0x0b, - 0x4b, 0x83, 0xbd, 0x9f, 0x5e, 0xfe, 0x9d, 0x7f, 0x1e, 0x83, 0x24, 0xd9, 0xef, 0x75, 0x9f, 0x77, - 0x9f, 0xff, 0x7d, 0xbf, 0x7f, 0xbf, 0xdf, 0xff, 0x7b, 0xef, 0x7b, 0x10, 0x9b, 0xf6, 0x90, 0x90, - 0xbf, 0xeb, 0x77, 0xe7, 0xf0, 0x56, 0x34, 0xe3, 0xf5, 0xff, 0x8b, 0x66, 0x88, 0x62, 0x7a, 0x4b, - 0xde, 0xbe, 0xfb, 0x33, 0x1b, 0xc2, 0x84, 0x99, 0x61, 0xcd, 0x75, 0xc6, 0x3d, 0x25, 0xf1, 0x2b, - 0xc0, 0x13, 0x50, 0x38, 0xb3, 0x13, 0xfa, 0x37, 0x46, 0xad, 0x49, 0x93, 0xb1, 0x86, 0x24, 0x9a, - 0xbd, 0x44, 0x45, 0xe2, 0x27, 0x93, 0x9e, 0xb1, 0x52, 0xf1, 0x36, 0x49, 0xb5, 0x39, 0x7c, 0x84, - 0xd4, 0xfa, 0x8b, 0xb5, 0x82, 0xb1, 0x3a, 0x05, 0x19, 0xc4, 0x4d, 0x42, 0x62, 0x41, 0xdc, 0xb1, - 0x49, 0xdc, 0x68, 0x94, 0x14, 0x9b, 0x04, 0x5e, 0x12, 0x33, 0xe0, 0xb0, 0xb1, 0xe9, 0x97, 0xcf, - 0xf7, 0x9e, 0x08, 0x5e, 0xc2, 0x74, 0xdb, 0x92, 0x95, 0x50, 0xea, 0x93, 0x3d, 0xfa, 0x33, 0xe7, - 0x82, 0x24, 0x13, 0x51, 0xc2, 0x42, 0x94, 0xd1, 0xa2, 0xac, 0xc6, 0xd3, 0x20, 0x7d, 0x83, 0x68, - 0xed, 0xb6, 0x23, 0x5e, 0x2e, 0x14, 0x93, 0x22, 0x6f, 0x8c, 0xfb, 0x20, 0x62, 0x6f, 0x04, 0x82, - 0x4e, 0x0e, 0x52, 0xb7, 0x45, 0x16, 0xcd, 0x6f, 0xd2, 0xe4, 0x5a, 0x86, 0x6e, 0xd1, 0xde, 0xd0, - 0x0f, 0x47, 0x56, 0xc5, 0x5f, 0x5d, 0x9e, 0x2f, 0x75, 0xd5, 0xc1, 0x1e, 0x22, 0xc9, 0xe3, 0xdf, - 0xab, 0xfc, 0x3a, 0x1a, 0xb5, 0xfe, 0x2f, 0xd2, 0x63, 0x6d, 0x35, 0x3e, 0xdc, 0x01, 0x00 + 0x31, 0xee, 0xa9, 0x44, 0xeb, 0x2e, 0x4d, 0x85, 0x20, 0x27, 0x2e, 0x31, 0x86, 0x10, 0x4b, 0x81, + 0x83, 0x2e, 0x7b, 0x14, 0xe5, 0xb0, 0xda, 0xce, 0x88, 0xb4, 0x3c, 0x6a, 0xcb, 0x10, 0x99, 0xfd, + 0xb3, 0x44, 0x60, 0xd7, 0x2c, 0x8a, 0x21, 0x73, 0x29, 0x6e, 0x80, 0x02, 0x35, 0x59, 0xd5, 0x75, + 0xdc, 0x55, 0x31, 0x41, 0x20, 0xb2, 0xa0, 0x19, 0xe9, 0xbd, 0xd2, 0x40, 0xb7, 0x70, 0xe9, 0x55, + 0x26, 0x20, 0x13, 0xb5, 0xc2, 0x52, 0x17, 0x5d, 0x2f, 0x1b, 0x19, 0x2e, 0xf5, 0x9e, 0xd9, 0xe7, + 0x91, 0xd0, 0x11, 0x61, 0x43, 0x40, 0x83, 0x3c, 0xb9, 0xc0, 0x22, 0x30, 0x13, 0x94, 0xb8, 0x1e, + 0xe6, 0x62, 0x18, 0x69, 0x19, 0x0e, 0xae, 0x40, 0xfe, 0x36, 0x4b, 0x55, 0x8e, 0x77, 0xec, 0xae, + 0x52, 0xdc, 0x41, 0x89, 0x0a, 0x58, 0xc6, 0x22, 0x94, 0xd1, 0xa8, 0x5c, 0x8c, 0xf0, 0x1d, 0xe7, + 0x37, 0x5e, 0xa4, 0x15, 0x53, 0xc5, 0x2e, 0xb9, 0x4d, 0x96, 0xa1, 0xcf, 0xb5, 0x1a, 0x9b, 0x86, + 0xe1, 0x29, 0xe6, 0xe3, 0x8d, 0x11, 0x5f, 0x94, 0x0a, 0x9e, 0xbe, 0x95, 0x75, 0xf5, 0xad, 0x90, + 0xb2, 0x8e, 0xdb, 0xf4, 0x3e, 0xa5, 0x90, 0x91, 0xf8, 0xac, 0x70, 0x24, 0xc7, 0x7c, 0x79, 0xf9, + 0x8e, 0xd9, 0xd6, 0xf9, 0xa4, 0x96, 0x1b, 0x8d, 0x8f, 0x0c, 0x05, 0x75, 0xd3, 0x04, 0xce, 0xd1, + 0x59, 0x8e, 0xdd, 0x0b, 0x77, 0xf1, 0xa3, 0x81, 0x83, 0x3e, 0x92, 0x2b, 0xc2, 0x08, 0x65, 0x2f, + 0xd4, 0x7b, 0x83, 0xc5, 0x5b, 0xb6, 0xfd, 0xfd, 0x7f, 0xba, 0xaa, 0xcb, 0xb8, 0x51, 0x22, 0xe4, + 0xe4, 0xa5, 0xb0, 0x10, 0xbb, 0xef, 0x07, 0x96, 0x85, 0xc3, 0xf9, 0x23, 0x48, 0xcc, 0xa9, 0xe6, + 0xc2, 0x62, 0x94, 0xfd, 0x77, 0x8c, 0x54, 0x55, 0xbb, 0x9f, 0x0a, 0xe8, 0x8c, 0xb8, 0x7c, 0x97, + 0xc9, 0x1a, 0xe6, 0x49, 0x1c, 0x5b, 0x9d, 0x4c, 0xa0, 0xcf, 0xf3, 0x70, 0xb8, 0x35, 0x86, 0x8b, + 0xfb, 0x3d, 0x2b, 0xf9, 0x5a, 0x67, 0x7a, 0x1a, 0x68, 0xb4, 0x5c, 0xd0, 0x68, 0xa1, 0x10, 0xd2, + 0x8a, 0x69, 0x31, 0x5f, 0x19, 0xab, 0x05, 0xeb, 0x0f, 0xf2, 0x85, 0xef, 0x75, 0xa5, 0x3b, 0x06, + 0x1d, 0x1b, 0xd4, 0xc7, 0x69, 0xa0, 0xa9, 0x2e, 0x33, 0x79, 0x97, 0x8f, 0x19, 0xf7, 0xcb, 0x03, + 0xf4, 0xe8, 0x5e, 0x2c, 0x5f, 0xcc, 0x0f, 0xe2, 0x97, 0xa8, 0x02, 0x48, 0xc9, 0xe0, 0x6e, 0xa0, + 0x53, 0xf6, 0x65, 0xa6, 0x02, 0x67, 0x01, 0x4b, 0xf1, 0xa9, 0x34, 0x25, 0xb6, 0x6c, 0x34, 0x11, + 0x86, 0xc8, 0x76, 0xec, 0xe5, 0xa8, 0xd7, 0xc0, 0x8a, 0x86, 0x12, 0x13, 0x6b, 0x29, 0xe0, 0x7d, + 0x29, 0x76, 0x56, 0x01, 0xad, 0x6f, 0x39, 0x66, 0xaf, 0xcb, 0x9f, 0x47, 0x08, 0xe2, 0x94, 0xfd, + 0xfd, 0x0d, 0x3e, 0x1e, 0xba, 0x67, 0xbd, 0xb9, 0x31, 0x17, 0xf1, 0x7b, 0xf8, 0x1e, 0xd7, 0x44, + 0xd4, 0x40, 0xee, 0xa8, 0x00, 0xdd, 0x7d, 0x96, 0xd2, 0x28, 0x83, 0x8c, 0x55, 0x21, 0x3e, 0xbe, + 0x13, 0x32, 0xda, 0x01, 0x8b, 0x8c, 0x3b, 0x83, 0x17, 0x2d, 0xa4, 0xba, 0x22, 0xf7, 0xd0, 0x88, + 0x67, 0x57, 0xcb, 0xf5, 0x37, 0x00, 0xc2, 0xb6, 0xff, 0xe2, 0x66, 0x57, 0x58, 0xaa, 0x2f, 0xb3, + 0xda, 0x41, 0x80, 0xda, 0x86, 0x3b, 0x27, 0x28, 0x96, 0x4c, 0x98, 0xbb, 0xb8, 0xb2, 0x97, 0x18, + 0x42, 0x05, 0xee, 0xc7, 0x48, 0xa7, 0x7d, 0x7d, 0xc8, 0x55, 0x90, 0x5c, 0xa8, 0xd0, 0x90, 0xd7, + 0x7f, 0x7c, 0x8c, 0x81, 0xc8, 0x8b, 0x1c, 0xce, 0x47, 0xcb, 0xb6, 0x1e, 0xa3, 0x91, 0xb5, 0x7f, + 0xcb, 0x10, 0xca, 0xc1, 0xb0, 0x07, 0x18, 0x84, 0xa6, 0x3a, 0x6f, 0x96, 0x70, 0x61, 0xdc, 0xb9, + 0x0f, 0xbc, 0x58, 0xcb, 0x8e, 0x4d, 0xae, 0xbb, 0xf3, 0x65, 0x5d, 0x66, 0x11, 0x0a, 0x43, 0xa0, + 0xb4, 0xfd, 0xef, 0x25, 0xfa, 0x84, 0x73, 0x03, 0x84, 0xdf, 0x35, 0xef, 0x7d, 0x20, 0x5e, 0xcc, + 0x86, 0x5f, 0xef, 0x33, 0x0a, 0x6e, 0xd8, 0x5d, 0xce, 0xd8, 0x20, 0x0a, 0x92, 0xcd, 0x80, 0xaa, + 0x3b, 0x24, 0xc1, 0x28, 0x15, 0x03, 0xd2, 0x65, 0x83, 0xe5, 0xb6, 0x16, 0x55, 0x5d, 0xc3, 0x91, + 0x1e, 0xc0, 0x7e, 0x30, 0x3c, 0x79, 0x66, 0xef, 0xc7, 0xb7, 0x07, 0x5d, 0x30, 0x9c, 0x42, 0x71, + 0xbe, 0x6c, 0xe4, 0xb8, 0x2b, 0x47, 0xa1, 0x88, 0xf1, 0xe7, 0xf4, 0xc8, 0xd9, 0xaa, 0xbc, 0x15, + 0xe9, 0x2e, 0x1b, 0x08, 0x4b, 0x44, 0xf2, 0xb6, 0x6b, 0xb9, 0x2e, 0x79, 0x3c, 0x58, 0x5c, 0x0e, + 0x63, 0xa9, 0x6d, 0x94, 0x3f, 0xef, 0xe5, 0xa4, 0x33, 0x31, 0x18, 0x6a, 0x3a, 0x2f, 0x43, 0xbc, + 0xc8, 0xd6, 0xbf, 0x41, 0xf4, 0x40, 0xcb, 0x67, 0x16, 0x9c, 0xb6, 0xe7, 0x5b, 0xe4, 0xf7, 0x67, + 0xd3, 0x26, 0x28, 0x30, 0x74, 0xf5, 0x9d, 0x7f, 0xe2, 0xf4, 0x85, 0xbc, 0x64, 0x6b, 0x6c, 0x46, + 0xce, 0xc8, 0xbc, 0xaf, 0x6c, 0x17, 0xed, 0xa8, 0x6d, 0x9b, 0x65, 0xc7, 0x27, 0xfa, 0xb4, 0x73, + 0xb8, 0x05, 0xcb, 0xf9, 0x65, 0x5c, 0x34, 0xc3, 0xa9, 0xb4, 0xb4, 0x90, 0xb6, 0x99, 0xac, 0x8a, + 0x15, 0xb2, 0x65, 0x6f, 0xbe, 0x56, 0x83, 0xd8, 0x37, 0xd0, 0x2b, 0xb0, 0x86, 0xe4, 0x47, 0xfa, + 0x18, 0x14, 0x40, 0xac, 0x13, 0x22, 0x70, 0xa9, 0xa6, 0x41, 0x4f, 0xdb, 0xe4, 0x15, 0x0d, 0xcf, + 0xe7, 0x45, 0xc5, 0x62, 0xb4, 0xeb, 0x4b, 0x3a, 0x51, 0xbc, 0x4b, 0xcc, 0x63, 0x55, 0x86, 0x58, + 0xad, 0x6f, 0x29, 0x33, 0x1a, 0xf9, 0xe3, 0x86, 0x6d, 0xc4, 0x27, 0x2f, 0xd2, 0x5a, 0x5b, 0xdb, + 0xd0, 0x3e, 0x1e, 0xf7, 0x90, 0xf8, 0x67, 0xb5, 0xec, 0x15, 0xdd, 0x0c, 0xa4, 0x7a, 0x29, 0xac, + 0xc2, 0xe4, 0xfd, 0x69, 0x5b, 0xa8, 0xfc, 0x2b, 0xee, 0x88, 0x95, 0xa6, 0xda, 0xce, 0xb2, 0xb9, + 0xfc, 0xe1, 0xd8, 0xbb, 0x13, 0xc2, 0x8f, 0x31, 0xa5, 0xd1, 0x74, 0x31, 0x47, 0x6d, 0x34, 0xdb, + 0x39, 0x9a, 0xc7, 0x04, 0xd6, 0xae, 0xdc, 0x95, 0x59, 0x66, 0xd8, 0xa8, 0x1a, 0xfb, 0xf9, 0x80, + 0xd5, 0x28, 0x7b, 0xc6, 0x84, 0x67, 0x6f, 0xf2, 0x11, 0xdc, 0x72, 0x9c, 0x83, 0x29, 0x14, 0xac, + 0xe9, 0xb9, 0xeb, 0x68, 0xb7, 0xc2, 0x6b, 0x29, 0xb3, 0x00, 0x48, 0x77, 0x1e, 0xbb, 0x11, 0xbe, + 0xf0, 0x42, 0xb6, 0x69, 0x18, 0x38, 0x93, 0xf8, 0x20, 0x7d, 0x9d, 0xc4, 0x8f, 0x8e, 0xa6, 0xd8, + 0xf6, 0x9f, 0x75, 0xef, 0xf0, 0xcd, 0xcf, 0xa4, 0x44, 0xa1, 0xbf, 0x5b, 0x24, 0xae, 0x0d, 0x5c, + 0x14, 0x3c, 0x1c, 0x78, 0xc1, 0xc3, 0x25, 0xfa, 0xf2, 0x87, 0x4b, 0x8c, 0x31, 0xf2, 0x63, 0x33, + 0xa3, 0xe6, 0xfe, 0xb2, 0xd7, 0x9b, 0xa2, 0x1d, 0x90, 0x21, 0xb2, 0x8e, 0xbf, 0xe7, 0x47, 0x0d, + 0xd7, 0x94, 0xdc, 0x57, 0x3a, 0x8a, 0x73, 0x3e, 0x5c, 0xd2, 0x0f, 0xe1, 0x44, 0x75, 0x26, 0x26, + 0x7c, 0x73, 0xc1, 0x42, 0xe6, 0x05, 0x1f, 0xd4, 0x4a, 0xf2, 0xb9, 0x71, 0xd0, 0x39, 0x6f, 0x71, + 0x73, 0xe3, 0xf0, 0x71, 0x32, 0x08, 0x31, 0xfd, 0xa8, 0x14, 0x96, 0xf3, 0x19, 0x7a, 0x41, 0x6d, + 0x8c, 0xd9, 0x7f, 0xb7, 0x7a, 0xa4, 0x40, 0xa4, 0x3e, 0x4d, 0xf5, 0x0e, 0x64, 0x78, 0x33, 0xdf, + 0x3f, 0x7a, 0x1e, 0x67, 0xed, 0x60, 0x85, 0x77, 0x8d, 0xc1, 0x65, 0x53, 0xef, 0xef, 0xca, 0x2b, + 0x68, 0x09, 0x16, 0x97, 0x71, 0xcc, 0x66, 0x63, 0x29, 0x56, 0x3f, 0x8e, 0x6a, 0x6f, 0x41, 0x78, + 0xc7, 0x82, 0x9e, 0xb7, 0x88, 0xe9, 0x0d, 0x24, 0x2f, 0xb3, 0x5b, 0x58, 0x71, 0x0e, 0x1d, 0x1a, + 0x8b, 0x3b, 0x6f, 0xc2, 0x1b, 0xae, 0x38, 0x99, 0xe9, 0x0e, 0x44, 0xc4, 0xb2, 0xf2, 0xe6, 0x7d, + 0x54, 0xe2, 0xc7, 0x48, 0x8b, 0x78, 0x97, 0xc4, 0x7b, 0x9b, 0x42, 0x7f, 0x93, 0xbe, 0x71, 0x7d, + 0x5f, 0x72, 0xfc, 0x2c, 0xc5, 0x77, 0xaf, 0xa8, 0xe7, 0xee, 0x20, 0xc5, 0xe6, 0xe1, 0x74, 0xa8, + 0x01, 0x45, 0x3b, 0x64, 0x60, 0x68, 0x34, 0xea, 0x76, 0x60, 0x4c, 0xf4, 0xe4, 0xfb, 0xd3, 0x1a, + 0xd5, 0x0a, 0x95, 0x9e, 0x4c, 0xe5, 0x8e, 0xaf, 0x50, 0x05, 0x3a, 0x66, 0x18, 0xe9, 0x76, 0x90, + 0xe4, 0xed, 0x5e, 0xbc, 0x13, 0xa4, 0xfa, 0x5e, 0x50, 0x3c, 0x8b, 0xb6, 0x14, 0x82, 0x5d, 0x30, + 0xb7, 0x71, 0xe1, 0x9f, 0xd8, 0x17, 0xc3, 0xee, 0x08, 0xfc, 0x6c, 0xf3, 0x7a, 0x16, 0xa7, 0x13, + 0xb3, 0x8b, 0x2b, 0xe9, 0x33, 0xe9, 0xfe, 0xf7, 0xb2, 0xc6, 0xea, 0xc9, 0x14, 0xfe, 0xf0, 0x24, + 0x17, 0x9a, 0x12, 0x24, 0x7a, 0x44, 0x0c, 0x52, 0xec, 0xb6, 0x1d, 0x7a, 0x45, 0x1c, 0x42, 0x46, + 0x58, 0xd0, 0x6c, 0x44, 0x6b, 0x95, 0x58, 0x30, 0x6c, 0x9c, 0x26, 0xc0, 0x2b, 0x57, 0xdc, 0x71, + 0x4e, 0xeb, 0x8d, 0x6f, 0xaa, 0xbf, 0x02, 0xbb, 0x34, 0x2c, 0xb0, 0x24, 0x82, 0xe2, 0x72, 0x1a, + 0xe2, 0xe9, 0xa6, 0xe2, 0xdf, 0x10, 0xd9, 0xf8, 0xe6, 0x87, 0x25, 0xcf, 0x7b, 0x51, 0x72, 0xb5, + 0xfe, 0xb8, 0x9d, 0x01, 0xd3, 0xc8, 0x85, 0x20, 0x44, 0xcd, 0x59, 0xb0, 0xf8, 0x15, 0xcb, 0x3b, + 0x04, 0x8f, 0x81, 0x77, 0xe9, 0x01, 0xd8, 0xe6, 0x4c, 0x12, 0xf0, 0x87, 0xc9, 0x72, 0xef, 0xed, + 0xe0, 0xb4, 0x7d, 0x27, 0x02, 0x33, 0x40, 0xb8, 0x60, 0x02, 0xef, 0x72, 0x89, 0xb9, 0x7f, 0xe1, + 0x44, 0x5c, 0xae, 0x1b, 0x6b, 0x11, 0x89, 0x1d, 0x89, 0x2d, 0xc8, 0x02, 0x05, 0x96, 0x25, 0x87, + 0xdd, 0x0e, 0x02, 0xf0, 0xd2, 0xb9, 0x65, 0x1f, 0xe5, 0x6a, 0x68, 0x4b, 0xc7, 0x25, 0x39, 0x98, + 0x83, 0xe4, 0xe2, 0x3f, 0x86, 0xc0, 0x70, 0x8a, 0x00, 0x53, 0x5b, 0x80, 0x05, 0x46, 0x80, 0x61, + 0x12, 0x12, 0x9e, 0xee, 0xa0, 0x93, 0xe4, 0x9c, 0x0b, 0x48, 0x60, 0x90, 0x52, 0x31, 0x41, 0x42, + 0xef, 0x07, 0x08, 0x79, 0x6d, 0xf8, 0xf0, 0xf9, 0xc8, 0xc7, 0x1c, 0x9e, 0x63, 0x9f, 0xf3, 0x07, + 0x47, 0x59, 0x4e, 0x25, 0x88, 0x11, 0x72, 0xef, 0xa8, 0xa8, 0xb0, 0x60, 0x60, 0x56, 0xea, 0xb2, + 0x33, 0x0c, 0xcf, 0xb8, 0x77, 0x1a, 0xc9, 0xa3, 0xe3, 0xc3, 0xef, 0x89, 0x8b, 0xf1, 0x67, 0x2b, + 0x17, 0xd1, 0x4d, 0x96, 0x74, 0x53, 0x7d, 0x73, 0x20, 0x5f, 0x46, 0xb7, 0xf1, 0xfc, 0x13, 0xd1, + 0xab, 0xcb, 0xe1, 0xb9, 0xde, 0xae, 0xae, 0x14, 0xdd, 0xe5, 0xe5, 0x82, 0x7f, 0x83, 0x58, 0x57, + 0x29, 0x36, 0x9a, 0x35, 0x8f, 0x1e, 0xce, 0xf7, 0xd0, 0x2e, 0x60, 0x01, 0x40, 0x90, 0x51, 0xeb, + 0x9c, 0x86, 0x5d, 0x7f, 0xb6, 0xcb, 0xa5, 0x7c, 0x35, 0x7e, 0x4c, 0xb2, 0xa5, 0x74, 0xe9, 0x5f, + 0x91, 0x4b, 0x3b, 0x0a, 0xee, 0xa8, 0x78, 0x41, 0x28, 0x7c, 0x80, 0x2d, 0x67, 0xc1, 0xb1, 0x60, + 0x14, 0x3a, 0x45, 0xe3, 0x03, 0x01, 0xb8, 0xe0, 0x96, 0x88, 0x28, 0x58, 0xc6, 0x34, 0x38, 0x74, + 0x9c, 0xe3, 0x06, 0xe7, 0x13, 0xf8, 0x17, 0xd2, 0xb9, 0x4a, 0x7c, 0x07, 0xde, 0x69, 0xa4, 0x54, + 0x88, 0x6b, 0xa4, 0x8c, 0x31, 0x36, 0xbf, 0x47, 0xe0, 0x20, 0xbe, 0x5b, 0xa6, 0xbb, 0x17, 0x4b, + 0x93, 0x21, 0x57, 0xa0, 0x88, 0xaf, 0x3a, 0x8c, 0x6a, 0xef, 0x83, 0x1a, 0xf4, 0x99, 0x43, 0xa9, + 0xfe, 0xe1, 0xbc, 0x48, 0x78, 0xf1, 0x8a, 0x33, 0xaa, 0x34, 0x3a, 0xdb, 0x0d, 0x05, 0xe2, 0x22, + 0x31, 0xe2, 0xe3, 0x13, 0xb2, 0x05, 0xee, 0xf4, 0x9f, 0xf0, 0xce, 0x9c, 0x5a, 0x8e, 0x51, 0x0f, + 0x6d, 0xdf, 0x54, 0x68, 0xbc, 0x56, 0xcc, 0xf1, 0xb5, 0xb9, 0xef, 0x4b, 0x5f, 0xf8, 0xfb, 0x15, + 0x01, 0xf2, 0xa1, 0xad, 0x1b, 0x14, 0x0c, 0xc9, 0xe5, 0x9b, 0x41, 0xb8, 0x5b, 0x41, 0x3e, 0xb3, + 0x09, 0xe9, 0x6e, 0x15, 0x4b, 0xfe, 0x5e, 0x52, 0x84, 0x34, 0x31, 0xdb, 0x77, 0xde, 0x24, 0x5c, + 0xa1, 0x78, 0xfb, 0x9b, 0xba, 0x81, 0x2f, 0x96, 0x1b, 0xe5, 0x8a, 0x6f, 0xae, 0x2f, 0x6b, 0xd8, + 0xfe, 0x01, 0xe5, 0x29, 0x8b, 0x3e, 0xa1, 0x57, 0x8f, 0xd3, 0xab, 0x94, 0xfd, 0x2b, 0x95, 0xd3, + 0x1d, 0x72, 0xe3, 0x61, 0x1a, 0x1c, 0xd3, 0xf1, 0x83, 0xf7, 0x70, 0x6c, 0xf9, 0x9d, 0x28, 0x5e, + 0xbb, 0x87, 0x75, 0x7a, 0xf1, 0xf5, 0xa5, 0x43, 0xf6, 0x40, 0xc5, 0x30, 0xac, 0xa5, 0x28, 0xfa, + 0xd8, 0x89, 0xc9, 0x21, 0x90, 0x71, 0x3f, 0x24, 0x81, 0x57, 0x25, 0xc1, 0x0f, 0x48, 0x24, 0x41, + 0xed, 0xd6, 0xc5, 0xce, 0x58, 0x14, 0xa8, 0x8d, 0x54, 0x17, 0xdd, 0x53, 0xb7, 0xe2, 0x16, 0xde, + 0x34, 0x0d, 0x84, 0x10, 0xf0, 0x9e, 0x74, 0xe1, 0xf6, 0x28, 0x9d, 0x4e, 0x7f, 0xcf, 0x40, 0xf9, + 0x2d, 0x61, 0xed, 0xbb, 0x6e, 0xb8, 0x97, 0x44, 0x53, 0x00, 0x91, 0x8a, 0x02, 0x6d, 0x0b, 0xde, + 0xbd, 0xc5, 0x43, 0xdc, 0x5a, 0x6b, 0x19, 0x96, 0x35, 0x93, 0x3c, 0x50, 0x82, 0x4e, 0x48, 0xd7, + 0x16, 0x8e, 0x95, 0xb1, 0xd2, 0xa2, 0x70, 0xbe, 0x30, 0xc8, 0xdf, 0x33, 0x3e, 0xe0, 0x00, 0xb5, + 0x76, 0x5f, 0xdc, 0x72, 0x1b, 0xa6, 0x69, 0x6b, 0x6e, 0x73, 0xee, 0xbd, 0x3e, 0x22, 0x2d, 0x04, + 0x62, 0x42, 0x74, 0xf3, 0xdd, 0x6c, 0xbc, 0x2a, 0x60, 0x39, 0x15, 0xa6, 0x01, 0xd6, 0xc3, 0x54, + 0x36, 0xe9, 0x85, 0x35, 0xda, 0x06, 0x5b, 0x8f, 0x8c, 0x09, 0xc2, 0x33, 0x74, 0x18, 0xb6, 0xce, + 0x0b, 0x02, 0xed, 0xf7, 0x35, 0x42, 0x53, 0x13, 0x49, 0x9f, 0x3e, 0x4e, 0x5f, 0x03, 0x84, 0x54, + 0xef, 0x95, 0xde, 0x9a, 0x23, 0x6e, 0x7d, 0xfb, 0x3a, 0x25, 0x72, 0xa5, 0xb7, 0x09, 0xa4, 0x56, + 0xb7, 0xbe, 0x9b, 0x1c, 0x16, 0xec, 0x14, 0xb4, 0xb8, 0x45, 0xe1, 0x7c, 0xcf, 0x98, 0xd0, 0x19, + 0xd6, 0x5c, 0x80, 0x43, 0x80, 0xc2, 0xb9, 0x26, 0x0a, 0x6b, 0x11, 0x04, 0xce, 0x35, 0x68, 0x3d, + 0xbe, 0xc5, 0x9c, 0x92, 0xdb, 0x5c, 0xd9, 0x20, 0xde, 0xf6, 0x4d, 0x1b, 0x5c, 0x7b, 0xaf, 0xc5, + 0xd6, 0x4c, 0xef, 0x2c, 0xf5, 0x19, 0x13, 0x63, 0x1b, 0x5d, 0xc3, 0x56, 0xb3, 0xd9, 0xd2, 0xea, + 0x56, 0xb1, 0xea, 0x47, 0xbd, 0x6c, 0x59, 0xcb, 0xbd, 0x3c, 0x75, 0x23, 0xc3, 0x57, 0xf6, 0xb5, + 0x90, 0x95, 0x57, 0xb7, 0x7a, 0xb0, 0xff, 0xb0, 0xf6, 0x51, 0xab, 0x47, 0x4b, 0xdd, 0x3c, 0x82, + 0xf5, 0x79, 0x75, 0x37, 0xe5, 0xd2, 0x3b, 0xdd, 0xc4, 0xaa, 0x1f, 0x0e, 0x26, 0x2e, 0x28, 0x31, + 0xe3, 0x89, 0xc9, 0xab, 0x87, 0x34, 0xd7, 0x5d, 0xdd, 0x2a, 0xad, 0xba, 0xa2, 0xa3, 0x5e, 0x2b, + 0xeb, 0xd1, 0x6f, 0x72, 0xb0, 0xcf, 0xa8, 0x64, 0x6c, 0xe2, 0xe0, 0x95, 0x59, 0xb6, 0xb8, 0x8e, + 0x0d, 0xaf, 0xc5, 0xb0, 0xef, 0x7b, 0xcc, 0xd4, 0x34, 0xf4, 0x9e, 0xda, 0x8f, 0x6f, 0x99, 0x9f, + 0x42, 0x9d, 0xe1, 0xf2, 0x04, 0xea, 0x9c, 0x01, 0xda, 0x89, 0x2f, 0xf2, 0xca, 0x2e, 0xe7, 0xfd, + 0x2e, 0xaf, 0xc5, 0xcc, 0x9b, 0xa6, 0x80, 0xf5, 0x23, 0x4d, 0x73, 0x02, 0x81, 0xb6, 0xce, 0x54, + 0x17, 0x9c, 0xd7, 0x3e, 0xf6, 0x83, 0x2e, 0x0c, 0xe4, 0x8e, 0xe5, 0x7d, 0xe7, 0x00, 0x01, 0x84, + 0x64, 0x01, 0x5b, 0xae, 0x7c, 0x71, 0xe5, 0xc9, 0x7d, 0x37, 0x40, 0x1f, 0xd6, 0x05, 0x84, 0x16, + 0xa1, 0x94, 0xc0, 0xdd, 0xc8, 0xc4, 0x77, 0xb4, 0xaf, 0xdd, 0xe0, 0x17, 0x72, 0x50, 0x4c, 0xac, + 0xb9, 0xf0, 0x62, 0xaf, 0x9f, 0x41, 0xb0, 0x12, 0x6a, 0xb2, 0xde, 0xfc, 0x65, 0x2c, 0x16, 0x83, + 0x17, 0x3d, 0xae, 0xa1, 0x42, 0xff, 0x41, 0xdc, 0xd2, 0xd5, 0x8b, 0xf6, 0x93, 0xe5, 0x41, 0xa7, + 0x68, 0xe3, 0xf4, 0x23, 0x09, 0x90, 0x48, 0x1c, 0x48, 0xc1, 0xb6, 0x0d, 0x9d, 0x16, 0xad, 0x8b, + 0xec, 0x93, 0x09, 0x37, 0x96, 0xa2, 0x6a, 0x09, 0x67, 0xa0, 0xda, 0x90, 0x07, 0x2b, 0x45, 0x5d, + 0xcc, 0x15, 0x8b, 0x80, 0x21, 0x68, 0x31, 0x75, 0x31, 0x2b, 0x0a, 0xfc, 0xb7, 0x0a, 0xc0, 0x78, + 0xd6, 0x46, 0xf0, 0x96, 0xcd, 0x55, 0xc4, 0x38, 0x7c, 0xdc, 0x85, 0x25, 0x90, 0xc5, 0xde, 0x5a, + 0xc0, 0x4c, 0x89, 0x70, 0x61, 0xa6, 0x4b, 0x60, 0x59, 0x96, 0x1b, 0x0c, 0x98, 0xfb, 0xa3, 0xd2, + 0xf3, 0x4c, 0xb4, 0x4b, 0xde, 0x91, 0x10, 0xa4, 0x1c, 0x7e, 0x8c, 0x41, 0x69, 0xe3, 0x09, 0xb6, + 0xb6, 0xa6, 0xe8, 0x2f, 0x08, 0x80, 0x95, 0x5c, 0x02, 0xc0, 0xe1, 0xe7, 0xdf, 0xc4, 0xe2, 0xe1, + 0x4d, 0xf9, 0x91, 0xc5, 0x62, 0x8b, 0x1c, 0x2b, 0xbb, 0x0b, 0xbc, 0xc8, 0x2f, 0x7b, 0x58, 0x08, + 0x64, 0x07, 0x5d, 0x0f, 0x2c, 0x2e, 0xc3, 0xfd, 0x6a, 0x86, 0x3f, 0xf8, 0xb0, 0x2e, 0x61, 0xc7, + 0xc2, 0x2b, 0x11, 0x16, 0xa4, 0x07, 0x5d, 0xc4, 0x08, 0x4b, 0x45, 0x56, 0xaa, 0xe8, 0x80, 0x2e, + 0x8d, 0xe7, 0xa1, 0x0f, 0xc0, 0x6b, 0x27, 0x18, 0x49, 0x3c, 0xea, 0x75, 0x48, 0xf9, 0x2a, 0x34, + 0xe0, 0xec, 0xdb, 0x19, 0xb2, 0x37, 0xae, 0xf9, 0x62, 0x15, 0x9e, 0x70, 0x58, 0xe5, 0xf8, 0x61, + 0x95, 0x91, 0xcf, 0x89, 0x09, 0xe4, 0xd5, 0x67, 0x2e, 0x7e, 0x6b, 0xf1, 0x03, 0xec, 0x33, 0xf0, + 0x87, 0xe7, 0x80, 0xc0, 0x16, 0x17, 0x72, 0xf4, 0x80, 0x91, 0x2c, 0x64, 0xab, 0xec, 0x2c, 0x94, + 0x90, 0x67, 0x87, 0xa2, 0x7a, 0x42, 0x31, 0xc7, 0x0e, 0x33, 0x09, 0xa5, 0x0a, 0x96, 0x81, 0x87, + 0x8a, 0x7b, 0xfe, 0x4a, 0xc4, 0x15, 0x29, 0x34, 0x9a, 0x78, 0x0f, 0x97, 0x3f, 0x52, 0xc1, 0x61, + 0x6c, 0x71, 0xeb, 0x70, 0x04, 0x13, 0x1f, 0x73, 0x97, 0xa7, 0xbc, 0xcd, 0x28, 0xbf, 0x16, 0x4b, + 0xfa, 0xcf, 0x52, 0xbe, 0xb5, 0x4c, 0xf9, 0xb5, 0x10, 0xe9, 0x5b, 0x6c, 0x5a, 0xad, 0xa6, 0x3c, + 0xe8, 0xb1, 0x2b, 0x28, 0xbf, 0xe6, 0xcd, 0x28, 0x39, 0x86, 0xf8, 0xff, 0x53, 0xda, 0x7f, 0x55, + 0x14, 0x45, 0x90, 0x5d, 0x72, 0xc6, 0x51, 0x73, 0x2d, 0x8e, 0x9c, 0x2d, 0xc5, 0x71, 0xc3, 0x4d, + 0x57, 0x51, 0x75, 0x1c, 0xcf, 0xcf, 0x6b, 0xbf, 0x45, 0xd5, 0xbb, 0x8f, 0xa8, 0x7a, 0xf7, 0x6f, + 0xa5, 0xea, 0xe7, 0xe9, 0x73, 0x87, 0xb0, 0x33, 0xfc, 0x9a, 0x11, 0x4f, 0xa5, 0x97, 0x7f, 0x82, + 0xf7, 0x4e, 0x3e, 0xa2, 0xd2, 0xc9, 0x27, 0xa8, 0x54, 0xcd, 0xba, 0x74, 0xca, 0x56, 0xe5, 0x55, + 0xa4, 0x2a, 0x15, 0x8b, 0xf2, 0x3f, 0x44, 0xa0, 0x13, 0xa2, 0x8d, 0x55, 0x3d, 0x73, 0x43, 0x86, + 0xa0, 0x7a, 0x23, 0x33, 0xad, 0x9c, 0x9e, 0xee, 0xc1, 0xbe, 0x90, 0x4c, 0xb6, 0xde, 0x11, 0x96, + 0x9f, 0xa5, 0xda, 0xf5, 0xb2, 0x50, 0x0e, 0x0b, 0xcb, 0xeb, 0x7e, 0xfb, 0x23, 0xba, 0xd1, 0x55, + 0xd0, 0xe3, 0xae, 0xb5, 0x7f, 0x60, 0x15, 0x7c, 0x87, 0x62, 0xd7, 0x20, 0x24, 0x11, 0x13, 0x9d, + 0x68, 0xab, 0x48, 0xd5, 0xff, 0x27, 0xe6, 0xdc, 0xc1, 0x47, 0xdc, 0xf4, 0xbb, 0x74, 0x89, 0x9f, + 0x75, 0x7f, 0x87, 0x2e, 0x71, 0x64, 0x59, 0x3b, 0xb0, 0x08, 0xd1, 0x3f, 0xa2, 0x4c, 0xfb, 0x9f, + 0x58, 0x5d, 0x77, 0x3e, 0x58, 0x5d, 0x5d, 0xc2, 0xac, 0xfd, 0x3d, 0xca, 0x2c, 0x13, 0x66, 0xed, + 0x7f, 0x46, 0x99, 0x1d, 0x80, 0xe7, 0xd1, 0x65, 0x2d, 0x4a, 0x98, 0x08, 0x7d, 0x26, 0xef, 0xd0, + 0x87, 0xe6, 0x0f, 0xd4, 0x36, 0xea, 0x8a, 0x9f, 0xa6, 0xd5, 0xfd, 0x07, 0xb4, 0xba, 0xff, 0xbf, + 0x89, 0x52, 0xf7, 0xe8, 0x16, 0x59, 0x49, 0x2a, 0x9f, 0x06, 0x6d, 0x45, 0xfb, 0x3b, 0x32, 0x67, + 0x8d, 0x23, 0x4b, 0x23, 0x8e, 0x2c, 0xbc, 0xfa, 0xad, 0x68, 0x18, 0x1e, 0x4d, 0x55, 0xed, 0x34, + 0xed, 0x67, 0x8c, 0xc2, 0x2d, 0xff, 0x23, 0x0a, 0x37, 0x25, 0xc7, 0xda, 0x3b, 0xf4, 0x68, 0x33, + 0x5c, 0x56, 0x91, 0x83, 0x9e, 0xf0, 0x89, 0x0e, 0x00, 0x24, 0x06, 0xd6, 0xcc, 0xba, 0xd9, 0x4c, + 0x88, 0xa8, 0xd4, 0xc1, 0x7f, 0x62, 0x72, 0x5d, 0xa0, 0x5f, 0xc8, 0xab, 0x8b, 0x20, 0xc8, 0x7c, + 0x5b, 0x69, 0xf9, 0x68, 0x29, 0xe9, 0x72, 0x5a, 0x1d, 0xd7, 0x97, 0x58, 0xc8, 0x4a, 0x18, 0xf2, + 0x85, 0x27, 0x64, 0x56, 0x41, 0xf7, 0xaa, 0x6c, 0xad, 0x6a, 0x60, 0x2d, 0xda, 0x42, 0xa7, 0x12, + 0x6a, 0xe1, 0x91, 0x68, 0x9a, 0x31, 0x59, 0x8d, 0xbe, 0x57, 0x63, 0xcb, 0xb7, 0x6a, 0x3e, 0xea, + 0x02, 0x58, 0xcb, 0x7c, 0x03, 0xf7, 0x8a, 0x35, 0x14, 0x28, 0xfd, 0xdf, 0xef, 0x06, 0xad, 0xf6, + 0xf9, 0x6e, 0xe0, 0x7f, 0x7c, 0x2b, 0xac, 0x81, 0x77, 0xe0, 0xf7, 0xe2, 0x7d, 0x65, 0x00, 0x5d, + 0xc0, 0x33, 0x56, 0xd1, 0x7e, 0xc8, 0x72, 0x64, 0x90, 0x77, 0x34, 0x00, 0xfa, 0x5e, 0x17, 0xb8, + 0x61, 0x08, 0x2c, 0xa6, 0x77, 0xfb, 0x00, 0x26, 0x00, 0xdf, 0x87, 0x4b, 0x15, 0xec, 0xba, 0x77, + 0xba, 0x20, 0xaf, 0xee, 0x42, 0x1c, 0xf6, 0x21, 0xd8, 0x28, 0x3a, 0xdf, 0x81, 0x2d, 0x23, 0xec, + 0x4f, 0x32, 0x29, 0x42, 0xee, 0x54, 0x38, 0xd8, 0xcd, 0x99, 0xa2, 0xbf, 0x4f, 0x18, 0x5a, 0xe1, + 0xb3, 0x63, 0x2b, 0x57, 0x90, 0x32, 0x1c, 0x7c, 0xba, 0x1e, 0xbe, 0x87, 0x3c, 0xab, 0xf0, 0x49, + 0x0e, 0xb5, 0xf4, 0x2e, 0x3f, 0x75, 0x15, 0xbd, 0x6b, 0x0c, 0x3f, 0x65, 0x5d, 0x38, 0x86, 0x40, + 0xb5, 0x5f, 0xb4, 0x2c, 0x24, 0x83, 0x4e, 0x4c, 0x6a, 0xe0, 0x49, 0x7d, 0xc4, 0x8f, 0x1a, 0x74, + 0x92, 0x39, 0xb2, 0x4c, 0x8d, 0xac, 0x38, 0xc3, 0xbd, 0x91, 0xcd, 0x52, 0xf7, 0xc6, 0xda, 0xf5, + 0x8a, 0x35, 0xab, 0x63, 0x6b, 0x62, 0xd8, 0x5b, 0x06, 0x29, 0xb2, 0xc8, 0x79, 0x68, 0x85, 0xe9, + 0xd4, 0x86, 0x57, 0xde, 0x73, 0xc6, 0xdc, 0xfb, 0x2d, 0xcd, 0x70, 0xe8, 0x4a, 0x83, 0x1f, 0x1b, + 0xdc, 0xb0, 0xa8, 0x48, 0xa5, 0x8f, 0xfd, 0xe0, 0xb1, 0x1d, 0x3c, 0x4e, 0xf0, 0x71, 0x2b, 0x1b, + 0x78, 0x8d, 0xd6, 0x22, 0xad, 0x66, 0x63, 0x5b, 0x8d, 0x6b, 0x34, 0x1b, 0x6e, 0x74, 0xed, 0xc3, + 0x56, 0x73, 0xf1, 0x8e, 0x41, 0x68, 0x34, 0x17, 0x2c, 0xc7, 0x1f, 0xb5, 0x9a, 0xfb, 0x4c, 0x57, + 0xd7, 0xb8, 0x56, 0xf3, 0xcb, 0x1e, 0x32, 0xdf, 0x1d, 0xc6, 0x2e, 0x5a, 0x14, 0x06, 0xa2, 0x87, + 0xc8, 0x29, 0xf3, 0xaf, 0x05, 0x7e, 0x31, 0xaa, 0xa3, 0xe3, 0xd9, 0x1e, 0xe6, 0xf8, 0x0a, 0xfb, + 0xbd, 0xdc, 0x3b, 0xc9, 0xc3, 0x4e, 0x2f, 0xa6, 0x3a, 0x85, 0xfc, 0x96, 0x9e, 0x4e, 0xe1, 0x01, + 0xeb, 0x78, 0xab, 0x1e, 0x5d, 0xa3, 0x62, 0x96, 0xd1, 0x17, 0x32, 0xeb, 0x1a, 0x13, 0x9d, 0x16, + 0xde, 0xc3, 0x88, 0x00, 0x54, 0x31, 0x70, 0xe7, 0xd1, 0xfb, 0x3c, 0x66, 0x5d, 0x34, 0x60, 0x96, + 0xc3, 0x22, 0xaa, 0x4c, 0x35, 0xa2, 0xf7, 0x9d, 0x41, 0x5d, 0xac, 0x44, 0x38, 0x08, 0xdb, 0xd1, + 0x7b, 0xa1, 0xd1, 0x64, 0x67, 0x77, 0x39, 0x74, 0xa9, 0x23, 0x85, 0x4c, 0x5d, 0xc7, 0x6b, 0xd8, + 0xab, 0xe7, 0x9d, 0x86, 0x66, 0x5d, 0xc9, 0x57, 0x5d, 0x4f, 0xf3, 0x12, 0x31, 0xe3, 0x69, 0x2a, + 0xb2, 0xce, 0x62, 0x70, 0xd7, 0x92, 0x87, 0x73, 0x05, 0xe1, 0x5c, 0x44, 0x28, 0xe1, 0xda, 0x79, + 0xda, 0xda, 0x9a, 0x40, 0x35, 0x29, 0x01, 0xc0, 0x10, 0xc7, 0x21, 0xc1, 0xb0, 0xb8, 0xb0, 0x27, + 0x7e, 0xf7, 0x98, 0x92, 0xc2, 0x2b, 0x0c, 0xec, 0x1e, 0x51, 0xa1, 0x07, 0xb3, 0x3e, 0x18, 0x00, + 0x9e, 0xec, 0x5c, 0xc0, 0x4f, 0x5d, 0x6c, 0xd1, 0xfb, 0xcd, 0x03, 0xcd, 0x6e, 0x9d, 0x5d, 0x78, + 0x4e, 0xb5, 0x17, 0x49, 0x74, 0x63, 0xd4, 0x50, 0x7c, 0xc0, 0xfc, 0xa3, 0x21, 0x48, 0x2b, 0x4b, + 0x2c, 0xf3, 0x49, 0x70, 0x41, 0x0b, 0x3f, 0x7d, 0x31, 0x55, 0x77, 0x1d, 0x91, 0x8c, 0xc4, 0x95, + 0x9e, 0xc7, 0x2d, 0x51, 0x72, 0xf9, 0x77, 0xaf, 0x7b, 0x5e, 0xe9, 0x2c, 0x2b, 0xb9, 0x16, 0x15, + 0x24, 0x1e, 0x1a, 0xfe, 0x60, 0xe0, 0x4b, 0x98, 0x30, 0xb8, 0xaf, 0x47, 0xbf, 0x31, 0x8e, 0xe3, + 0xe4, 0x8f, 0x39, 0x0b, 0xb0, 0xa1, 0x31, 0xc7, 0xdc, 0xa8, 0xe0, 0x17, 0x5e, 0x2f, 0x19, 0xed, + 0xa9, 0x77, 0x7e, 0x09, 0x10, 0xe7, 0x3f, 0x0c, 0x99, 0x7b, 0x5e, 0x10, 0x1e, 0x64, 0xb8, 0x5b, + 0x66, 0xe9, 0x74, 0x5a, 0x58, 0xd2, 0xdc, 0x29, 0x0e, 0xb1, 0x9a, 0xfc, 0x5a, 0xc4, 0x03, 0xed, + 0xdd, 0xd1, 0x28, 0x33, 0x17, 0xb4, 0xcb, 0xe7, 0x31, 0xbc, 0xcd, 0x46, 0x98, 0xe5, 0xf3, 0x2b, + 0x4c, 0xec, 0x0e, 0x40, 0x02, 0x5e, 0xb7, 0xe9, 0x97, 0xbb, 0xe9, 0xe7, 0xb8, 0xe1, 0x4d, 0x35, + 0x6b, 0x22, 0x7e, 0x9e, 0x3b, 0xd3, 0x01, 0x52, 0xa6, 0x07, 0xce, 0x30, 0x66, 0x6b, 0x20, 0x32, + 0x35, 0xb2, 0x15, 0x25, 0x3a, 0x35, 0x56, 0xa3, 0xb7, 0xb6, 0x0a, 0x3f, 0x97, 0xc5, 0xed, 0x5d, + 0x90, 0x5c, 0x75, 0x7d, 0xa4, 0x69, 0x12, 0xa2, 0xaa, 0xb5, 0x1c, 0x58, 0x70, 0xfa, 0x24, 0x6d, + 0x91, 0xa1, 0x31, 0x26, 0x47, 0x0e, 0x19, 0x26, 0xc4, 0x89, 0x46, 0x70, 0x54, 0xa6, 0x62, 0x12, + 0x56, 0xa4, 0xd7, 0x11, 0xb1, 0x9d, 0x63, 0xdb, 0xd0, 0x13, 0x73, 0x6b, 0x88, 0x48, 0xd7, 0xbe, + 0xc8, 0xe1, 0x2f, 0xdb, 0xf2, 0x83, 0x28, 0xe5, 0x8a, 0xb2, 0xc4, 0x27, 0x60, 0x73, 0xc0, 0xb3, + 0x6b, 0x51, 0x9e, 0x0b, 0x77, 0x51, 0xce, 0x97, 0xdf, 0x9f, 0xfd, 0xfc, 0xc8, 0x21, 0x1f, 0xee, + 0xd1, 0xbb, 0x70, 0x3f, 0x72, 0x35, 0xfb, 0x37, 0xe6, 0x8a, 0x02, 0x0b, 0x62, 0xc6, 0x1d, 0x82, + 0x11, 0xf1, 0x3d, 0xcf, 0x1d, 0x45, 0x1f, 0x2b, 0x36, 0x33, 0x3a, 0xd8, 0x33, 0x7e, 0xc8, 0x9a, + 0xe3, 0xcf, 0xb6, 0xda, 0xc7, 0x14, 0x77, 0x1f, 0x25, 0xc3, 0xca, 0xb8, 0x4a, 0x18, 0xfd, 0x13, + 0x99, 0x1e, 0xbd, 0x29, 0xf5, 0x21, 0x2c, 0xc9, 0xff, 0x2e, 0x5b, 0x00, 0xf0, 0xcb, 0x29, 0xee, + 0x0a, 0xc0, 0x3a, 0x20, 0x0c, 0xdd, 0x5d, 0x96, 0x95, 0xa2, 0x85, 0x75, 0xb7, 0x37, 0xc5, 0x10, + 0x86, 0x40, 0xce, 0x7c, 0x28, 0x66, 0xd6, 0xe2, 0xe5, 0x0c, 0x0b, 0xa5, 0x7d, 0x47, 0xcc, 0x78, + 0x05, 0xa4, 0xfe, 0x51, 0x37, 0x21, 0xb2, 0xc0, 0x49, 0x5b, 0x4c, 0xa6, 0x29, 0x66, 0xf8, 0x65, + 0x66, 0xfc, 0x4c, 0x33, 0x64, 0x28, 0xb0, 0x8e, 0x30, 0x28, 0x6d, 0x6d, 0x64, 0xd5, 0xd7, 0x57, + 0x16, 0x67, 0x7c, 0xe5, 0xd7, 0xf8, 0xdf, 0x15, 0x5e, 0x1c, 0xbb, 0xaf, 0x44, 0x88, 0xed, 0x8f, + 0x25, 0x44, 0x0c, 0xa2, 0xc3, 0x2e, 0xb8, 0x72, 0x20, 0x1c, 0x18, 0xef, 0xed, 0x46, 0x7a, 0x72, + 0x70, 0x79, 0x9c, 0xff, 0x69, 0x29, 0xb8, 0xff, 0xf0, 0xef, 0x93, 0x7f, 0xd1, 0xc9, 0xe4, 0x06, + 0x93, 0xf0, 0x33, 0xc7, 0xa3, 0x9c, 0x87, 0x0b, 0x7b, 0x0f, 0x3a, 0x14, 0x94, 0xb9, 0x44, 0x4b, + 0xdf, 0x43, 0x8b, 0x45, 0x6f, 0xd2, 0x73, 0x22, 0x74, 0xd8, 0xb2, 0xfb, 0xf9, 0x46, 0x65, 0x33, + 0xcc, 0xb5, 0xb4, 0x4c, 0xdb, 0x98, 0xba, 0x0a, 0x55, 0x4f, 0x73, 0xea, 0xa2, 0x5f, 0x34, 0xe4, + 0xe8, 0x60, 0x0d, 0xec, 0x4f, 0x3d, 0x3e, 0x08, 0xbb, 0x25, 0xfc, 0xa0, 0x50, 0x9c, 0x99, 0x5e, + 0xbf, 0xbd, 0x0e, 0xbb, 0x64, 0x0f, 0xd0, 0x94, 0x77, 0x45, 0x61, 0x19, 0x49, 0x81, 0x72, 0x01, + 0x60, 0x5a, 0xc9, 0xe5, 0x4a, 0x2b, 0xf1, 0x5c, 0xe3, 0x11, 0xa5, 0x25, 0x79, 0x57, 0xc4, 0x6f, + 0x63, 0xb9, 0x16, 0x45, 0x33, 0xc0, 0x32, 0x1b, 0x8b, 0x25, 0x45, 0xb0, 0x5a, 0xc8, 0x6d, 0x46, + 0xd4, 0x8c, 0x78, 0x4a, 0xd2, 0x92, 0x9f, 0x40, 0x70, 0xed, 0xf3, 0x74, 0x0c, 0x10, 0xcc, 0xad, + 0x40, 0x10, 0xa6, 0x4b, 0xb5, 0x94, 0xff, 0xdc, 0x50, 0xd3, 0x82, 0xef, 0x22, 0xb8, 0xf6, 0xbb, + 0x03, 0x1d, 0x20, 0x78, 0x67, 0xac, 0x66, 0xc7, 0x6a, 0x25, 0x5f, 0xf8, 0x1c, 0x86, 0x58, 0xf0, + 0x7f, 0x8d, 0x15, 0xf7, 0x61, 0x51, 0x5d, 0x35, 0xcc, 0xd0, 0x72, 0xf1, 0x73, 0x7c, 0x48, 0x4b, + 0xfe, 0x53, 0x7c, 0x18, 0xdd, 0xe6, 0xa3, 0x02, 0x41, 0x8e, 0xf1, 0xe0, 0x45, 0x85, 0x2f, 0xbf, + 0x33, 0xbf, 0xc6, 0x2b, 0xdb, 0xd0, 0x49, 0xf2, 0x46, 0x3c, 0x7d, 0x3b, 0x9f, 0x2b, 0x7e, 0xbc, + 0xe7, 0xce, 0x1b, 0x31, 0xee, 0x4e, 0xa1, 0x49, 0xd0, 0x01, 0xf6, 0xae, 0x1b, 0x90, 0x96, 0x71, + 0x3d, 0xa4, 0x9f, 0xd9, 0x88, 0xff, 0x47, 0xdd, 0xa4, 0x9f, 0xdc, 0x87, 0x67, 0xee, 0xc3, 0xa0, + 0x5f, 0x54, 0x07, 0x08, 0xc8, 0x1b, 0x72, 0x28, 0xba, 0x8a, 0x81, 0x8d, 0xdd, 0x8a, 0xf3, 0x27, + 0x72, 0xe4, 0xc9, 0xfe, 0xe6, 0x00, 0xf1, 0xe3, 0x43, 0x51, 0xa0, 0x3a, 0x37, 0x5d, 0xe9, 0x0a, + 0x72, 0xf5, 0xd3, 0x03, 0x14, 0x20, 0x70, 0x84, 0x8b, 0x93, 0xad, 0x3a, 0xb3, 0xd8, 0xfd, 0x21, + 0x6e, 0x90, 0xfc, 0x82, 0xbf, 0x1b, 0x30, 0x21, 0xff, 0x7b, 0x03, 0x26, 0x56, 0xb9, 0xbd, 0x79, + 0xaa, 0x53, 0xca, 0x65, 0xfd, 0x81, 0x52, 0xbd, 0xae, 0xad, 0xdc, 0x33, 0xa7, 0xb5, 0x72, 0xd1, + 0x0d, 0x01, 0x77, 0xe9, 0x79, 0x77, 0xc4, 0x42, 0x31, 0x58, 0xbf, 0xb9, 0x03, 0xd3, 0xcc, 0xc6, + 0x6e, 0x4e, 0xf1, 0x9b, 0x08, 0x23, 0x1b, 0x4c, 0x1e, 0xea, 0x66, 0xf9, 0xbd, 0xa9, 0xb3, 0x16, + 0x1f, 0xec, 0xf0, 0x3b, 0x0e, 0x75, 0x77, 0x3c, 0xd6, 0xfe, 0xf6, 0x80, 0x44, 0xc6, 0x23, 0x07, + 0x7c, 0xcc, 0xfa, 0x23, 0x64, 0xdf, 0x1f, 0x88, 0x7c, 0x64, 0xd2, 0x70, 0xe3, 0xb0, 0xf6, 0xfe, + 0x40, 0x78, 0xb1, 0x5a, 0xbf, 0x29, 0xc4, 0x9a, 0xb9, 0x0f, 0x24, 0x98, 0x3b, 0x0e, 0xb9, 0x7f, + 0x46, 0x86, 0xc9, 0xff, 0x8b, 0x12, 0xec, 0x13, 0x03, 0x91, 0x17, 0xb7, 0xdc, 0x71, 0xc8, 0xbd, + 0x3f, 0x0e, 0x85, 0xbf, 0x3d, 0x21, 0x64, 0x52, 0xf9, 0x5b, 0x13, 0x22, 0xff, 0xc9, 0x09, 0x91, + 0xff, 0xcc, 0x84, 0xc8, 0x67, 0xff, 0xaf, 0x9e, 0x0f, 0x85, 0x60, 0x3e, 0xe4, 0x57, 0x8d, 0x43, + 0x6f, 0x6a, 0x98, 0x81, 0x0d, 0xe3, 0x9e, 0xea, 0xa6, 0x76, 0x5a, 0x48, 0xaf, 0x82, 0x0c, 0x39, + 0xaa, 0x52, 0x19, 0x9c, 0xf2, 0x1c, 0x1f, 0x5e, 0xe8, 0x3a, 0xd8, 0x3e, 0x90, 0xa8, 0x00, 0xdb, + 0x5d, 0x0b, 0xb7, 0x9a, 0x14, 0x70, 0x30, 0x79, 0x83, 0xe1, 0xa3, 0x4d, 0x5e, 0xf8, 0xa1, 0x73, + 0x9c, 0x3e, 0x14, 0x1a, 0xbd, 0x0b, 0xda, 0x81, 0x44, 0x56, 0xa2, 0x1b, 0x82, 0xee, 0x21, 0xae, + 0xdf, 0x52, 0xd5, 0xd6, 0xc2, 0xbd, 0xce, 0x46, 0x94, 0xb4, 0x0f, 0x3b, 0x9d, 0x2f, 0xb4, 0xb9, + 0x4e, 0xaf, 0xad, 0x1a, 0x26, 0xaf, 0xd3, 0x59, 0xaf, 0xd3, 0xb9, 0x95, 0x9d, 0xce, 0x89, 0xcb, + 0xba, 0x7e, 0x5c, 0xa7, 0x73, 0x9f, 0xee, 0xf4, 0xda, 0x7b, 0x2a, 0x34, 0x60, 0x96, 0xfb, 0x9d, + 0x4e, 0x33, 0x23, 0xb9, 0xd0, 0xf9, 0x60, 0xa8, 0xf9, 0x4e, 0xe7, 0xbc, 0x4e, 0xe7, 0x23, 0x9d, + 0x5e, 0x0b, 0x7a, 0x9d, 0x5f, 0x1e, 0xea, 0xb8, 0x4e, 0xe7, 0x57, 0x74, 0xfa, 0x53, 0x86, 0xcd, + 0x4a, 0x8b, 0x18, 0xd1, 0x68, 0x91, 0xfe, 0x10, 0x2f, 0x49, 0x17, 0xf9, 0xd8, 0xd8, 0x18, 0xff, + 0x12, 0xfb, 0x0c, 0xd3, 0xbb, 0xce, 0x25, 0xb7, 0x5f, 0xf4, 0xd9, 0x07, 0xfb, 0x9e, 0x2b, 0x69, + 0xc9, 0xcf, 0x1d, 0x71, 0x1c, 0xad, 0x79, 0x50, 0xc2, 0xce, 0x6a, 0xf7, 0x54, 0x4b, 0xd4, 0x1f, + 0xb0, 0xb4, 0x2f, 0xc6, 0x79, 0xa4, 0x28, 0x66, 0x67, 0xbb, 0xcb, 0xf1, 0x95, 0xee, 0x79, 0x18, + 0x91, 0xf7, 0x47, 0xb5, 0x0d, 0xda, 0xf3, 0xf8, 0x92, 0x39, 0x91, 0xdb, 0xe7, 0x89, 0x38, 0x25, + 0xdd, 0x1e, 0x58, 0x36, 0xbc, 0x70, 0x2a, 0xa8, 0x05, 0xdd, 0xa0, 0xea, 0xe7, 0x35, 0x81, 0x11, + 0x15, 0x6c, 0xbf, 0x53, 0xc1, 0xbe, 0x91, 0x47, 0x90, 0xad, 0x9b, 0xe0, 0x52, 0x04, 0x7e, 0x8a, + 0x38, 0x8e, 0xc7, 0x27, 0xec, 0x78, 0x49, 0x20, 0x90, 0xa9, 0x84, 0x2e, 0x15, 0xd3, 0x45, 0xba, + 0xfd, 0x86, 0xe1, 0x6a, 0x72, 0x3a, 0x1b, 0x48, 0xe6, 0x74, 0x19, 0xe6, 0xab, 0xde, 0xb6, 0xcd, + 0x4d, 0x97, 0x88, 0x26, 0x0b, 0x8a, 0xa5, 0x5f, 0x81, 0xf3, 0x7b, 0xed, 0xf2, 0x3c, 0x2d, 0x10, + 0xd5, 0xbf, 0x2f, 0x2d, 0xc4, 0xfa, 0x23, 0xf7, 0xa3, 0xf9, 0xaa, 0x89, 0xef, 0x6c, 0x0a, 0xe1, + 0xee, 0xbd, 0x0b, 0xe8, 0x7d, 0x17, 0x20, 0x85, 0x65, 0xaf, 0xf6, 0x00, 0xae, 0xfd, 0xce, 0x4e, + 0x03, 0xe5, 0x92, 0x77, 0xf6, 0x19, 0xdc, 0xfc, 0xff, 0x7f, 0x77, 0x19, 0x28, 0x12, 0x51, 0xef, + 0x1a, 0x9d, 0xdc, 0xe1, 0xad, 0x03, 0x46, 0x3d, 0x64, 0xa3, 0x80, 0xeb, 0x57, 0x06, 0xa5, 0x98, + 0x1f, 0x30, 0x75, 0x8c, 0x77, 0x8c, 0x3b, 0xd7, 0x82, 0x65, 0x59, 0x7c, 0x14, 0xab, 0x14, 0xe6, + 0x76, 0x3c, 0xb8, 0xa8, 0xea, 0x2f, 0xfc, 0xde, 0x97, 0x61, 0x12, 0xfd, 0x46, 0x69, 0x27, 0xe4, + 0x98, 0xcd, 0xaf, 0xc8, 0x22, 0x19, 0x1f, 0xfc, 0x8f, 0xb1, 0xd4, 0x2b, 0x82, 0xff, 0x3f, 0x6e, + 0x35, 0xfb, 0xf7, 0x02, 0xff, 0x5d, 0xbf, 0x7a, 0x7c, 0xb3, 0x4b, 0xad, 0xae, 0x2d, 0x35, 0x9b, + 0x4b, 0x7e, 0xb4, 0x36, 0xc6, 0x9e, 0x5f, 0x71, 0x67, 0xff, 0xda, 0x27, 0xdb, 0x5d, 0x6a, 0x36, + 0x9f, 0xfc, 0x70, 0x75, 0x8a, 0x3d, 0x1e, 0x14, 0xcc, 0xbe, 0xd5, 0xc7, 0x1c, 0xdc, 0x0f, 0xdf, + 0x30, 0x1f, 0x57, 0x99, 0x6e, 0x53, 0x86, 0x0b, 0xd0, 0xaf, 0x1c, 0x71, 0x48, 0xd1, 0x89, 0xb2, + 0x87, 0x1f, 0x3d, 0xba, 0xc1, 0x1c, 0x3c, 0x75, 0x97, 0x8c, 0xc4, 0x57, 0x60, 0x35, 0xff, 0xa6, + 0xb7, 0xa5, 0xc3, 0x1b, 0xc1, 0x61, 0x95, 0x48, 0x4b, 0x78, 0xb6, 0xd5, 0x67, 0x60, 0x7a, 0x58, + 0xff, 0x1d, 0xc1, 0x4b, 0xf7, 0xb8, 0x0d, 0x9b, 0x7c, 0xf6, 0x04, 0x8e, 0x40, 0xaf, 0x81, 0xf2, + 0x8e, 0x1b, 0x2d, 0xef, 0x39, 0xf9, 0x48, 0x0c, 0xfb, 0x6c, 0xb3, 0x7a, 0xd8, 0xf7, 0xea, 0x4f, + 0x54, 0x51, 0x50, 0x34, 0xc7, 0x3d, 0x4c, 0x80, 0x5e, 0xaa, 0x1a, 0xfd, 0xce, 0x4a, 0xc6, 0xd4, + 0xfb, 0x9b, 0x6d, 0xc5, 0x26, 0xa5, 0x82, 0xa4, 0xde, 0xed, 0x5c, 0x5c, 0x4f, 0xe4, 0x93, 0x83, + 0xbe, 0xd1, 0x80, 0xff, 0xce, 0x5b, 0xb7, 0x83, 0xbd, 0xdb, 0x3e, 0x3c, 0xed, 0xc8, 0xf8, 0xbe, + 0xdf, 0x6c, 0x3c, 0xc2, 0x4f, 0xb3, 0xb8, 0x3f, 0xea, 0x15, 0x31, 0xa1, 0xf1, 0x70, 0xde, 0xba, + 0x96, 0x8f, 0x1a, 0x96, 0x5d, 0xe8, 0x94, 0xae, 0x30, 0xe1, 0x5a, 0xbf, 0xba, 0xcd, 0xee, 0x40, + 0x99, 0xe9, 0xf3, 0x64, 0x5c, 0x79, 0xbc, 0xba, 0xc5, 0xc4, 0xe3, 0xce, 0xde, 0xe0, 0xa9, 0x33, + 0x69, 0x34, 0x76, 0xed, 0x33, 0x78, 0x2d, 0xef, 0x36, 0x3a, 0xdd, 0xf1, 0xeb, 0x01, 0x56, 0xd8, + 0x69, 0xb7, 0x6e, 0xaf, 0x77, 0xee, 0x9a, 0x83, 0x1b, 0xed, 0xb1, 0xda, 0xde, 0x35, 0x1a, 0x93, + 0xdd, 0xb3, 0xf3, 0xfb, 0xb2, 0x5e, 0xd5, 0x27, 0x4d, 0xd5, 0x9c, 0x39, 0x57, 0xe7, 0x85, 0xa7, + 0x8a, 0xd3, 0xb6, 0x6e, 0x0e, 0x87, 0xbb, 0xc3, 0xfd, 0x82, 0x71, 0xf9, 0x36, 0xd3, 0xba, 0x93, + 0xeb, 0x57, 0x33, 0xdb, 0x6a, 0x75, 0xf5, 0xbb, 0xcc, 0xf9, 0xe8, 0x69, 0xf4, 0xf6, 0x4a, 0xac, + 0xc6, 0xce, 0x6c, 0xfa, 0xf0, 0xa6, 0xef, 0x4c, 0xf2, 0x6a, 0xff, 0x85, 0xec, 0xef, 0xf5, 0x1e, + 0x66, 0xb7, 0xa3, 0xc1, 0x49, 0x66, 0xb6, 0x7f, 0x26, 0x37, 0xa7, 0xc7, 0xbd, 0xd9, 0xeb, 0xc3, + 0xd3, 0xde, 0x45, 0xa7, 0x94, 0x69, 0x59, 0xd5, 0x4c, 0xbb, 0x57, 0x1e, 0x1d, 0x35, 0x8b, 0xe7, + 0x93, 0x6e, 0xd9, 0xb0, 0xce, 0xc6, 0x8d, 0x4b, 0xda, 0x97, 0x3d, 0x6d, 0xff, 0xe6, 0xa5, 0x35, + 0xba, 0x1a, 0x36, 0x9b, 0x40, 0xe0, 0xe5, 0xd0, 0xe6, 0x31, 0x2f, 0xc0, 0x22, 0x91, 0x3e, 0xb1, + 0xdb, 0x7d, 0xee, 0xd1, 0x67, 0x7e, 0x0a, 0xf2, 0x5b, 0x75, 0x74, 0x5d, 0xed, 0x01, 0x77, 0x0f, + 0xde, 0xdd, 0x34, 0x8c, 0x81, 0x12, 0xe1, 0xc0, 0x23, 0x1d, 0xe4, 0xa4, 0xde, 0x21, 0x02, 0xee, + 0x9d, 0xfc, 0x26, 0x2c, 0x6f, 0x4b, 0x14, 0x27, 0x69, 0x42, 0xcc, 0x30, 0x4b, 0x4a, 0x94, 0xc4, + 0xff, 0xb2, 0x89, 0x86, 0x11, 0x44, 0x5b, 0xb7, 0x34, 0x85, 0x1e, 0x50, 0x5c, 0x2d, 0xe3, 0x42, + 0xb0, 0xa9, 0x26, 0x81, 0x73, 0x36, 0xac, 0x4c, 0x74, 0xf4, 0x1e, 0x55, 0x23, 0x58, 0xbf, 0xdb, + 0x86, 0xe1, 0x44, 0x80, 0xae, 0xbd, 0x87, 0x30, 0x0d, 0x07, 0x26, 0xba, 0xbf, 0xa6, 0xfb, 0x60, + 0x83, 0x44, 0xea, 0x27, 0x3b, 0x20, 0x3a, 0xc6, 0x5f, 0x13, 0xc1, 0x64, 0x89, 0xc2, 0xff, 0xfb, + 0x7f, 0xfe, 0x9f, 0xcf, 0x91, 0x84, 0xaa, 0x4a, 0xca, 0x98, 0xb8, 0xd0, 0x0e, 0x48, 0x88, 0xe4, + 0xe1, 0x1c, 0xf4, 0x90, 0x85, 0xf5, 0xc9, 0x16, 0xe4, 0x0b, 0x7d, 0xb7, 0xf1, 0xae, 0xd7, 0x3a, + 0xdf, 0x39, 0xef, 0x04, 0x2e, 0x5b, 0xe6, 0xb8, 0x46, 0xc2, 0x80, 0xbe, 0x67, 0xbc, 0x82, 0x5b, + 0x21, 0x95, 0x93, 0x3e, 0x87, 0x54, 0xe7, 0x81, 0xb8, 0x45, 0x8f, 0x8d, 0x0e, 0xc1, 0x1a, 0x14, + 0x26, 0xaa, 0x33, 0x70, 0xf3, 0x59, 0xdc, 0x87, 0x62, 0x39, 0x28, 0xd4, 0x41, 0xae, 0x55, 0x0a, + 0x9b, 0x20, 0x2d, 0xf6, 0xf7, 0xe4, 0xbd, 0x4d, 0x77, 0xd5, 0x5d, 0x13, 0xda, 0x33, 0xa1, 0xa1, + 0x5a, 0x1d, 0xc3, 0x30, 0x5e, 0x54, 0x42, 0x8f, 0x6a, 0x3b, 0x03, 0x22, 0x7c, 0x57, 0x04, 0x76, + 0x26, 0x0e, 0x37, 0xc3, 0xed, 0x5a, 0x26, 0x83, 0x9b, 0xcc, 0x69, 0x30, 0x87, 0x3b, 0xc6, 0xc8, + 0xb2, 0x49, 0x1a, 0x43, 0xa3, 0xcc, 0x0c, 0x28, 0x74, 0x8a, 0xd5, 0x27, 0x60, 0x77, 0xff, 0x97, + 0x7b, 0x18, 0x69, 0x8d, 0xe2, 0xd1, 0x31, 0x86, 0xc3, 0x91, 0x4e, 0x9d, 0x6c, 0x8a, 0xa7, 0xcc, + 0x73, 0x68, 0x47, 0xb0, 0x3e, 0x3b, 0x5b, 0x42, 0x7c, 0xed, 0x63, 0xcc, 0x11, 0xf1, 0x96, 0xd1, + 0x73, 0x06, 0x4a, 0xe7, 0x45, 0x96, 0xcb, 0xc2, 0x37, 0x61, 0x6f, 0x62, 0x4c, 0x54, 0xbe, 0x07, + 0x6b, 0xe1, 0x2e, 0x50, 0xec, 0xad, 0x6e, 0xba, 0xdf, 0xcf, 0x54, 0x2e, 0xcb, 0x93, 0x83, 0xd1, + 0xeb, 0x4d, 0x4c, 0x0f, 0x28, 0x4a, 0xb9, 0x5d, 0x80, 0xd7, 0x18, 0xe1, 0xee, 0xdf, 0x2e, 0x19, + 0x63, 0x2f, 0xd6, 0xf8, 0x4e, 0xc5, 0x2b, 0x2c, 0x3a, 0x3b, 0xcb, 0x18, 0x91, 0xf7, 0x71, 0x13, + 0xe4, 0x5d, 0x79, 0xbf, 0xea, 0xec, 0xa3, 0x27, 0xf0, 0x3d, 0x79, 0xbf, 0xb6, 0x42, 0xe0, 0xe3, + 0x97, 0xe5, 0xdc, 0x6e, 0xa8, 0xae, 0x38, 0xb0, 0x97, 0x24, 0x98, 0xbe, 0x2c, 0xc1, 0xdc, 0x78, + 0x39, 0x2f, 0xd0, 0x62, 0xc5, 0x77, 0x6d, 0xc5, 0xcf, 0x4a, 0x26, 0x54, 0xf8, 0xfc, 0xae, 0x2c, + 0x4b, 0xb7, 0x15, 0x81, 0x6f, 0xee, 0x99, 0xed, 0xc0, 0x92, 0xf3, 0xc9, 0xe8, 0xa3, 0xee, 0x97, + 0x59, 0x21, 0x83, 0xa3, 0x0b, 0xf7, 0x30, 0xf8, 0xa0, 0xd2, 0xf2, 0xe0, 0xf8, 0x50, 0xf9, 0x42, + 0x5e, 0xb0, 0xc9, 0xf2, 0x3d, 0x4e, 0xf8, 0xfc, 0x89, 0x76, 0xa9, 0xdc, 0xc3, 0xb3, 0xde, 0x31, + 0xfd, 0x88, 0x0c, 0xea, 0x60, 0xd4, 0x27, 0x91, 0xc3, 0xbb, 0xa1, 0x53, 0x76, 0x1a, 0xac, 0x35, + 0xdb, 0x41, 0x33, 0x6b, 0x34, 0xf7, 0xc6, 0x10, 0x46, 0x36, 0x11, 0xda, 0x23, 0x55, 0xc3, 0x2b, + 0xac, 0x05, 0x16, 0x38, 0x61, 0x4b, 0x34, 0x15, 0xb5, 0x6e, 0x68, 0xda, 0x02, 0x7b, 0xc8, 0xbd, + 0x16, 0x42, 0x00, 0xad, 0x05, 0x04, 0x3b, 0xad, 0x2f, 0x3c, 0x1a, 0x23, 0x01, 0xac, 0x59, 0xc1, + 0x22, 0xce, 0xc8, 0xd2, 0x05, 0x0c, 0x66, 0x24, 0xa0, 0x0c, 0xa8, 0x43, 0x42, 0xa3, 0x1b, 0x70, + 0x5a, 0xa1, 0x48, 0xb2, 0xf1, 0x58, 0x3b, 0xce, 0x23, 0xfc, 0xd0, 0x14, 0x8c, 0x2f, 0x7d, 0x46, + 0x13, 0x07, 0xcf, 0xfc, 0xc3, 0x5c, 0xb0, 0x40, 0xbe, 0xa5, 0xd7, 0x5c, 0x7b, 0x38, 0xca, 0x0f, + 0xa1, 0x50, 0x3d, 0xe7, 0xd4, 0xb0, 0xa8, 0x7e, 0x7b, 0xe1, 0x61, 0x65, 0xd0, 0xd8, 0xeb, 0x77, + 0x56, 0x90, 0xe5, 0xfa, 0x39, 0xbe, 0xfe, 0x48, 0xc7, 0xfb, 0x1a, 0x2c, 0xba, 0x72, 0xf8, 0x70, + 0xe2, 0xc5, 0xe2, 0xda, 0xbe, 0x61, 0x41, 0xf7, 0x6d, 0x47, 0x30, 0x89, 0x85, 0x71, 0x98, 0x38, + 0x1d, 0x24, 0x41, 0x05, 0x93, 0x14, 0x3f, 0x7c, 0x89, 0x73, 0x9a, 0xd0, 0x1b, 0x7b, 0x80, 0x0e, + 0x94, 0x1e, 0x46, 0xaf, 0xe7, 0x76, 0x1b, 0xc8, 0x32, 0x44, 0x22, 0xd8, 0x20, 0xf1, 0x60, 0x45, + 0x9d, 0x0c, 0x88, 0x4e, 0xaf, 0x8f, 0x01, 0x5a, 0x00, 0x99, 0x97, 0xed, 0x16, 0x35, 0x18, 0x76, + 0xa4, 0x99, 0x18, 0x33, 0xce, 0x4b, 0xdd, 0x92, 0x93, 0xc1, 0xd8, 0xaf, 0x05, 0x83, 0xef, 0x1e, + 0xf0, 0x5f, 0x1b, 0x03, 0xe9, 0x69, 0x10, 0x92, 0x34, 0xb9, 0x97, 0xf8, 0x88, 0x20, 0x69, 0x62, + 0x4b, 0x1d, 0x3c, 0x80, 0x29, 0x51, 0x2f, 0xa6, 0x8d, 0xc1, 0x41, 0xf5, 0x2f, 0x59, 0x49, 0xb5, + 0x2f, 0x74, 0xfc, 0xd5, 0xb5, 0x06, 0x7b, 0x3d, 0x1d, 0xb3, 0x5f, 0x54, 0x22, 0xd9, 0x13, 0x9d, + 0x93, 0xf8, 0x68, 0xcf, 0xf4, 0x4e, 0x0b, 0x3a, 0xef, 0x3d, 0xdf, 0xf4, 0xb5, 0x6b, 0xd2, 0x81, + 0xf2, 0xb2, 0x34, 0x50, 0x6c, 0x1a, 0x47, 0x8d, 0x59, 0xf0, 0x7c, 0x7d, 0xb0, 0xe3, 0x3e, 0x35, + 0x9b, 0x37, 0x0c, 0xfc, 0xee, 0xc8, 0xaa, 0x97, 0x64, 0x78, 0xb8, 0x51, 0xac, 0x3a, 0xfe, 0xe2, + 0xf9, 0x63, 0x0a, 0x89, 0xf4, 0x4f, 0xd1, 0x9e, 0x97, 0x25, 0xef, 0x6e, 0xb7, 0x7d, 0xfe, 0xe5, + 0x52, 0xd1, 0xe0, 0xad, 0x03, 0xaf, 0xf8, 0x33, 0xb2, 0xf0, 0x6e, 0x58, 0xb6, 0x98, 0xd6, 0x37, + 0xb2, 0x12, 0x10, 0xcc, 0x61, 0x5a, 0x06, 0xad, 0xd2, 0x6f, 0x1a, 0x30, 0xd4, 0xf0, 0x08, 0x6b, + 0x8f, 0xff, 0x68, 0x4c, 0x60, 0x34, 0x6f, 0x75, 0x18, 0x82, 0x2e, 0xbc, 0x42, 0x53, 0x60, 0x8d, + 0x60, 0x3a, 0xfb, 0x31, 0x3b, 0x1e, 0x22, 0xec, 0x89, 0x92, 0x01, 0xc1, 0x4e, 0x20, 0xd3, 0xb1, + 0xea, 0x65, 0xa9, 0x5b, 0xef, 0x82, 0x1d, 0x8d, 0xf6, 0x8b, 0xd4, 0x9b, 0xa2, 0xee, 0x5b, 0xff, + 0xf1, 0x53, 0x32, 0x51, 0x0d, 0xab, 0xcf, 0x17, 0x12, 0xf1, 0x1e, 0x34, 0xef, 0xc1, 0x0c, 0x9e, + 0xce, 0xeb, 0xa2, 0x28, 0x99, 0x47, 0xd8, 0xcc, 0xf9, 0x68, 0x88, 0x3f, 0x43, 0xa7, 0x9e, 0xc5, + 0xbf, 0xa7, 0x2d, 0xf6, 0x76, 0x0a, 0x2d, 0x21, 0x32, 0xf0, 0x83, 0x22, 0x11, 0x6b, 0xa9, 0xf6, + 0x19, 0xe2, 0x30, 0x44, 0x04, 0x86, 0x03, 0xec, 0x75, 0xaf, 0x5f, 0x9f, 0x3b, 0x78, 0x14, 0xba, + 0x36, 0x47, 0x65, 0xbb, 0x06, 0x1a, 0xb8, 0xf5, 0x22, 0x4a, 0xed, 0x7e, 0x6d, 0x3e, 0xb2, 0xb4, + 0x9a, 0x28, 0x2e, 0x24, 0x45, 0x33, 0x07, 0x0a, 0x64, 0xf7, 0x6b, 0xe9, 0x92, 0x04, 0x16, 0x50, + 0x2d, 0x5d, 0x59, 0x48, 0x2c, 0xca, 0x19, 0x13, 0xa1, 0x08, 0xbe, 0x0e, 0xcd, 0x1a, 0xbb, 0xf2, + 0xc9, 0xae, 0xcd, 0xd9, 0x69, 0xdc, 0x1a, 0x0c, 0x9e, 0xd5, 0x6f, 0xd7, 0xa0, 0xc1, 0xd7, 0x11, + 0xa4, 0xe0, 0xfb, 0x80, 0x4c, 0xe1, 0x1d, 0x7a, 0x44, 0xfd, 0x18, 0x98, 0x62, 0x76, 0x86, 0x20, + 0xce, 0xb1, 0x90, 0xa9, 0x76, 0x31, 0x01, 0x48, 0xad, 0x11, 0xbd, 0xc6, 0x86, 0xcf, 0x9c, 0x58, + 0xee, 0x13, 0x99, 0x9a, 0x98, 0xdb, 0xb1, 0x69, 0xad, 0x41, 0x57, 0x99, 0xd9, 0x98, 0x03, 0x64, + 0x23, 0x3d, 0x0c, 0x2b, 0x5b, 0x48, 0x03, 0x43, 0xab, 0xff, 0xf8, 0x21, 0x4b, 0xd9, 0xac, 0x94, + 0x2b, 0x48, 0x05, 0xc9, 0x5f, 0x6b, 0x15, 0x5f, 0xa5, 0x48, 0xf7, 0x61, 0x59, 0x1f, 0xb5, 0xd3, + 0xaa, 0x91, 0x99, 0x0e, 0x15, 0x3b, 0x0d, 0x36, 0x86, 0xf8, 0x53, 0x82, 0x3a, 0x39, 0x29, 0x5b, + 0x96, 0xb2, 0x41, 0x15, 0x6a, 0x82, 0xd8, 0x69, 0xda, 0xf5, 0x8e, 0x81, 0x11, 0x2e, 0x69, 0xe8, + 0x62, 0xa6, 0x50, 0xcd, 0xe2, 0xbf, 0x6c, 0x2e, 0x9f, 0x7e, 0x36, 0x69, 0xd5, 0x9c, 0x9c, 0x2b, + 0x4a, 0x79, 0x29, 0x87, 0x20, 0xde, 0x6f, 0x90, 0xc0, 0x38, 0x80, 0x98, 0x72, 0x9b, 0x84, 0x7a, + 0x05, 0xa8, 0x92, 0xcf, 0xfe, 0x66, 0x3d, 0x59, 0x2a, 0x41, 0xd7, 0x3e, 0xc6, 0xb4, 0x98, 0x2d, + 0xe1, 0xbf, 0x72, 0x35, 0xe7, 0x61, 0x8a, 0x5f, 0x01, 0xc9, 0x7e, 0xa2, 0x66, 0x36, 0x5b, 0xc5, + 0x7f, 0x95, 0x8a, 0x2c, 0xb3, 0xaa, 0x3f, 0xa5, 0x8e, 0x33, 0x75, 0xc3, 0xfe, 0xa8, 0x9b, 0xeb, + 0xdc, 0xa2, 0xf3, 0x83, 0x3e, 0xef, 0xab, 0xa0, 0x24, 0xe0, 0xa7, 0x2e, 0x81, 0x73, 0x37, 0x41, + 0x26, 0x08, 0x54, 0xf1, 0xd8, 0x75, 0x59, 0x59, 0x6d, 0x3b, 0x7d, 0xad, 0xc9, 0x9c, 0xac, 0x38, + 0x97, 0xed, 0xa5, 0xf7, 0xce, 0xe0, 0xc5, 0x7f, 0xcf, 0x6e, 0xf6, 0x46, 0x3a, 0xbd, 0x91, 0x5f, + 0x18, 0x80, 0xe6, 0xa4, 0x91, 0x3b, 0xff, 0x86, 0xab, 0x26, 0xf5, 0xe0, 0x26, 0x92, 0xf3, 0x2f, + 0xdd, 0x34, 0x53, 0x4c, 0xbf, 0x7d, 0xd3, 0xc9, 0x44, 0x80, 0x86, 0xf0, 0x23, 0xaa, 0xde, 0x4c, + 0xdd, 0xca, 0x93, 0xfc, 0xb7, 0x6f, 0x21, 0x6b, 0x66, 0xe1, 0xc3, 0xb4, 0x9b, 0x86, 0x96, 0x20, + 0x92, 0x93, 0x9c, 0x83, 0xf2, 0xe8, 0x4e, 0xbb, 0x3d, 0x8d, 0xe0, 0x4f, 0x9a, 0x2e, 0xb2, 0x69, + 0x98, 0xf9, 0x97, 0x16, 0x98, 0x1c, 0x96, 0x33, 0xa3, 0x05, 0x83, 0xba, 0x18, 0x12, 0x46, 0x92, + 0x73, 0x77, 0x9d, 0x02, 0xb5, 0x8d, 0x78, 0x55, 0x77, 0x66, 0x34, 0x8b, 0x2b, 0xba, 0xb7, 0xd3, + 0x3c, 0x5f, 0x51, 0xd8, 0xde, 0x99, 0x35, 0x51, 0x10, 0x23, 0xc5, 0x42, 0x95, 0x54, 0x7b, 0x6f, + 0x68, 0x62, 0xab, 0x7e, 0x35, 0xb9, 0x5e, 0xaf, 0x5f, 0xb4, 0x9f, 0xf1, 0x43, 0x21, 0x2f, 0x64, + 0x66, 0x43, 0x4e, 0x9a, 0x45, 0x53, 0xf3, 0x95, 0xa0, 0x00, 0x57, 0x85, 0x7c, 0xfb, 0x26, 0x1a, + 0xb4, 0x8a, 0x58, 0xaf, 0xa3, 0x93, 0xcf, 0xe8, 0x61, 0xda, 0x97, 0x86, 0x65, 0x29, 0xb3, 0xb4, + 0x6a, 0xd3, 0xdf, 0x48, 0xb3, 0x20, 0x3b, 0x88, 0xa5, 0x76, 0x02, 0x28, 0x5f, 0x20, 0x4d, 0x39, + 0x4f, 0x98, 0x0a, 0x68, 0xd6, 0xfb, 0x78, 0x81, 0x14, 0x64, 0x25, 0xbf, 0x7d, 0x53, 0xd1, 0x87, + 0x08, 0x52, 0x38, 0x52, 0xfd, 0xba, 0xdf, 0xa6, 0x47, 0x50, 0xc2, 0x88, 0xd3, 0xca, 0x47, 0x3a, + 0x54, 0x4d, 0x5b, 0x50, 0x37, 0x9c, 0xd2, 0x5f, 0x4a, 0x69, 0x73, 0x20, 0x41, 0x60, 0xb4, 0x1c, + 0x2b, 0x00, 0x87, 0xe7, 0x52, 0x13, 0x62, 0x0a, 0x00, 0xa5, 0xc0, 0xfc, 0x83, 0xdf, 0xbe, 0xfb, + 0xdb, 0x4e, 0x89, 0x49, 0x31, 0x54, 0x0f, 0xef, 0x54, 0xf0, 0xeb, 0xa5, 0x73, 0xd9, 0x5c, 0xe9, + 0xcf, 0x10, 0x22, 0xa9, 0x74, 0x39, 0x5b, 0xcc, 0xfd, 0x19, 0x42, 0x25, 0x95, 0x96, 0xcb, 0xb9, + 0x50, 0x1a, 0x8f, 0x0c, 0xee, 0xeb, 0xb5, 0x4e, 0x11, 0x28, 0x72, 0xb6, 0x53, 0x27, 0x69, 0x94, + 0xd1, 0x90, 0x9a, 0x9e, 0x6c, 0x73, 0x55, 0xfc, 0xc4, 0x64, 0x0d, 0x58, 0x1a, 0x75, 0x6f, 0x9d, + 0x88, 0x5f, 0xea, 0xf5, 0x3e, 0x1e, 0xb6, 0x1b, 0x9a, 0x23, 0x58, 0x6a, 0x5a, 0xc8, 0x5f, 0x38, + 0x86, 0x68, 0x45, 0xb5, 0xe8, 0x8d, 0xa8, 0x9b, 0x6c, 0x31, 0x83, 0xf1, 0xe1, 0xc9, 0xe8, 0x01, + 0x4b, 0x6e, 0x27, 0xec, 0xbf, 0xfe, 0x82, 0x77, 0xc6, 0x99, 0x54, 0xb2, 0xd6, 0xbd, 0x4e, 0xfa, + 0x85, 0xb6, 0xb2, 0xb9, 0xf2, 0x36, 0x3d, 0x58, 0x23, 0xd6, 0xe8, 0xf9, 0x23, 0x31, 0x29, 0x79, + 0x55, 0x82, 0x43, 0x23, 0x75, 0x6f, 0x09, 0xfd, 0xf6, 0xcd, 0xd9, 0x92, 0xb7, 0x7f, 0x45, 0xcf, + 0x90, 0x64, 0x2b, 0xf4, 0x88, 0xba, 0xf0, 0xc7, 0xdc, 0xa3, 0xbe, 0xdf, 0xc0, 0x42, 0xc8, 0xcb, + 0xff, 0x92, 0x90, 0xba, 0x89, 0x3f, 0xe6, 0xce, 0x42, 0xf2, 0xff, 0x24, 0x93, 0xbf, 0x6a, 0x4b, + 0xa5, 0x93, 0xb5, 0x84, 0xdf, 0xa9, 0xa0, 0xcd, 0x04, 0xac, 0x42, 0xb1, 0x68, 0xfd, 0x8a, 0x01, + 0xfb, 0x4b, 0x5a, 0xee, 0xb6, 0x13, 0xd3, 0x4d, 0x6e, 0x94, 0x14, 0xd3, 0xd4, 0x66, 0xcd, 0x5e, + 0x1f, 0xa4, 0x43, 0x87, 0xdd, 0xea, 0x21, 0x6a, 0xa8, 0x20, 0xc3, 0x24, 0xa8, 0xc3, 0xfa, 0x96, + 0xa6, 0xcb, 0x5b, 0x1a, 0x57, 0xb7, 0xe4, 0x26, 0x2a, 0x31, 0x84, 0x4b, 0xa5, 0x0d, 0xa4, 0xdb, + 0xfd, 0x4d, 0xc0, 0x93, 0xca, 0x07, 0x91, 0x5e, 0x4b, 0x2b, 0x4a, 0x6e, 0x59, 0x87, 0x96, 0xc5, + 0xd5, 0x2d, 0xcd, 0x96, 0xac, 0x4d, 0xaf, 0x94, 0xd3, 0x36, 0x45, 0xc9, 0xd9, 0x16, 0xf1, 0x6e, + 0x2e, 0x81, 0xfd, 0x91, 0xdd, 0x27, 0x40, 0x92, 0x3e, 0xe7, 0xdc, 0x4f, 0x8a, 0xd2, 0x07, 0x18, + 0x19, 0xaf, 0x6a, 0xdb, 0xad, 0xea, 0x5f, 0x15, 0x2b, 0xc8, 0x5e, 0x15, 0xf7, 0x6a, 0x34, 0xbe, + 0xf0, 0xa0, 0x4b, 0x0b, 0xd3, 0x9b, 0xa1, 0xa0, 0x18, 0x65, 0x2e, 0x2e, 0x7b, 0xe8, 0xd0, 0x6c, + 0x99, 0x36, 0x5b, 0x0c, 0xb5, 0xe3, 0x6c, 0xb4, 0x45, 0x29, 0xe8, 0x2b, 0x15, 0xf4, 0x69, 0x58, + 0xc0, 0x83, 0x12, 0x76, 0xdf, 0x64, 0x25, 0x68, 0x0f, 0xd9, 0x7a, 0xbb, 0xcd, 0x9a, 0xa8, 0xb9, + 0x2d, 0x42, 0x61, 0x15, 0x83, 0xb1, 0xc2, 0x21, 0xdf, 0x18, 0x97, 0xe3, 0xc7, 0x7b, 0xdf, 0xaa, + 0x40, 0x7d, 0x51, 0x3a, 0x6e, 0x5d, 0x9c, 0xc3, 0xb8, 0xe1, 0xa7, 0x91, 0xd5, 0xde, 0x2c, 0x01, + 0x60, 0x93, 0x49, 0x5f, 0xfb, 0x00, 0xe1, 0xd5, 0xb5, 0xbf, 0x7d, 0x63, 0x8e, 0x9c, 0xdb, 0x23, + 0x5e, 0x2e, 0x7b, 0xc7, 0x2b, 0xe6, 0x3e, 0x22, 0x4c, 0x8f, 0x48, 0x83, 0xb2, 0x50, 0xff, 0x12, + 0x93, 0x28, 0x05, 0x23, 0x1e, 0x82, 0xe2, 0x5e, 0xe9, 0x32, 0x0f, 0x0f, 0x7a, 0x7d, 0x15, 0x37, + 0x6c, 0x33, 0x5d, 0xa7, 0xe6, 0xe6, 0xaf, 0x82, 0xea, 0x45, 0x3b, 0xcd, 0x23, 0x9c, 0xc0, 0xa1, + 0xc6, 0x12, 0x56, 0x01, 0xa0, 0x87, 0x6e, 0x96, 0x3a, 0x07, 0xbc, 0xbf, 0xdc, 0x39, 0x48, 0x8c, + 0x85, 0xe2, 0xf2, 0x35, 0x08, 0x22, 0x02, 0x72, 0x81, 0xe7, 0x53, 0xf1, 0x2b, 0x21, 0x3c, 0x3f, + 0x74, 0x36, 0x7a, 0x98, 0x48, 0x4f, 0x09, 0x72, 0x89, 0x39, 0x4c, 0xec, 0x76, 0xbb, 0xa1, 0xc4, + 0x3c, 0x26, 0xb6, 0xdb, 0xed, 0x50, 0x62, 0x01, 0x13, 0x15, 0x45, 0x09, 0x25, 0x16, 0x31, 0xb1, + 0x5a, 0xad, 0x86, 0x12, 0x4b, 0x71, 0x89, 0x15, 0x4c, 0xac, 0x54, 0x2a, 0xa1, 0xc4, 0x36, 0x26, + 0x16, 0x0a, 0x85, 0x50, 0x62, 0x07, 0x13, 0xf3, 0xf9, 0x7c, 0x28, 0x11, 0x7d, 0x7c, 0x5f, 0xb3, + 0xd9, 0x6c, 0x28, 0xb1, 0x8b, 0x89, 0xb9, 0x5c, 0x2e, 0x94, 0x68, 0x51, 0x3c, 0x73, 0xe1, 0x92, + 0x7d, 0x5a, 0x52, 0x09, 0x27, 0x6a, 0x34, 0xb1, 0xd4, 0x09, 0x25, 0x1a, 0x90, 0x48, 0xbf, 0xaf, + 0x9a, 0x93, 0x0b, 0x92, 0x10, 0xfc, 0x91, 0xd3, 0xd5, 0x64, 0xa8, 0xa0, 0xdd, 0x76, 0xe9, 0x99, + 0x8f, 0x24, 0x0f, 0xdc, 0xf4, 0x52, 0x28, 0xdd, 0x69, 0xaf, 0x00, 0xcc, 0x2e, 0x00, 0x85, 0x29, + 0x99, 0x4c, 0x46, 0x2a, 0x28, 0x5e, 0x8d, 0x6c, 0x59, 0x96, 0x84, 0xe0, 0xcf, 0xea, 0x1a, 0x83, + 0x4f, 0xb5, 0x41, 0xc3, 0xd8, 0xa9, 0xc7, 0x3d, 0xe9, 0x8a, 0x53, 0x16, 0xe6, 0x89, 0x7b, 0x01, + 0x78, 0x37, 0x7e, 0x42, 0x4e, 0x57, 0xa0, 0x5c, 0x2d, 0xca, 0x50, 0x51, 0xf2, 0x53, 0x86, 0x62, + 0x6b, 0x4b, 0x84, 0xa1, 0xa2, 0x63, 0x92, 0x8f, 0x1b, 0xd2, 0x42, 0xdc, 0xe0, 0x53, 0x86, 0x2a, + 0x16, 0x8b, 0xcb, 0x0c, 0x55, 0x2a, 0x95, 0x3e, 0xc9, 0x50, 0x51, 0xce, 0xa5, 0x0c, 0xd5, 0xe9, + 0x74, 0x96, 0x19, 0x2a, 0x3a, 0x45, 0xba, 0x71, 0xb3, 0x81, 0x32, 0x14, 0x29, 0xe4, 0x96, 0x19, + 0xaa, 0x40, 0x72, 0xcb, 0x0c, 0x55, 0xa8, 0x28, 0xf1, 0x0c, 0x95, 0x87, 0x81, 0xf0, 0xfe, 0xad, + 0xe0, 0x26, 0x20, 0x66, 0x2c, 0x37, 0x41, 0x7a, 0x71, 0x05, 0x37, 0xf1, 0x50, 0x3f, 0xc3, 0x4a, + 0x72, 0x0e, 0xb8, 0xc8, 0xff, 0xf3, 0x09, 0x56, 0x2a, 0x66, 0x25, 0xc1, 0xfb, 0xf7, 0x59, 0x3e, + 0x1a, 0xe9, 0xb0, 0x0e, 0x88, 0x9c, 0x9c, 0x42, 0x3f, 0xdb, 0x4e, 0x3f, 0x50, 0x98, 0x68, 0xd5, + 0x76, 0x1f, 0xdb, 0xac, 0x77, 0xd3, 0x1d, 0x8b, 0x80, 0xf0, 0x77, 0x55, 0x61, 0x0a, 0x52, 0x4c, + 0x6e, 0xaa, 0xbd, 0x84, 0x9d, 0xc6, 0xbd, 0x1f, 0x22, 0x89, 0x20, 0xa3, 0xc9, 0x5f, 0x7f, 0xf9, + 0x06, 0x0a, 0x98, 0x91, 0xf6, 0x68, 0x98, 0x36, 0x07, 0x86, 0x63, 0xd8, 0x99, 0x6c, 0x35, 0x27, + 0x67, 0xb2, 0x72, 0x45, 0x46, 0x49, 0x0e, 0x2d, 0xe0, 0xf2, 0xac, 0xd7, 0x3d, 0x23, 0x60, 0xb3, + 0x67, 0x58, 0x09, 0xea, 0xa2, 0x10, 0x40, 0xeb, 0x05, 0x53, 0xf0, 0xaf, 0xbf, 0x7e, 0xfc, 0x64, + 0x85, 0x94, 0x3a, 0xa8, 0x9b, 0xda, 0x0f, 0xf9, 0xe7, 0xb6, 0x8e, 0xaa, 0xf8, 0x3e, 0x18, 0x32, + 0x8f, 0xa0, 0xff, 0x24, 0x92, 0x35, 0x4c, 0x94, 0x0c, 0x1f, 0x46, 0x42, 0x91, 0xb4, 0x1f, 0xd9, + 0x9f, 0xf0, 0x27, 0xf7, 0x33, 0x29, 0xa9, 0x41, 0xba, 0x01, 0x68, 0xe2, 0x92, 0x47, 0x5f, 0x54, + 0x04, 0x42, 0x9f, 0x92, 0x29, 0xed, 0x47, 0x1e, 0x4a, 0xea, 0x5b, 0x75, 0x03, 0xcc, 0x91, 0xef, + 0x75, 0x15, 0x94, 0x1d, 0xd6, 0x19, 0xed, 0x47, 0xe1, 0x67, 0x72, 0xb1, 0xb0, 0xf1, 0xc8, 0xcb, + 0xde, 0x18, 0xba, 0x8b, 0x7b, 0x20, 0xe8, 0x86, 0x4f, 0x50, 0x5f, 0x24, 0xe8, 0x17, 0xf5, 0x2d, + 0xb7, 0x07, 0x9c, 0xa6, 0x1d, 0x5d, 0xab, 0xdb, 0x7d, 0x68, 0x98, 0xaa, 0xe3, 0x3a, 0x28, 0xcd, + 0x09, 0xbd, 0x9e, 0x2e, 0x25, 0x25, 0xcf, 0x58, 0x71, 0xaf, 0x6b, 0xac, 0xeb, 0x7e, 0x4a, 0xa0, + 0x5a, 0x1d, 0xa1, 0x69, 0x57, 0xff, 0x05, 0x16, 0x3c, 0xe8, 0x57, 0x14, 0x23, 0xaa, 0x59, 0x31, + 0x23, 0x8e, 0x0e, 0x4a, 0xb0, 0x83, 0x98, 0x0c, 0xe9, 0x5a, 0xa2, 0x77, 0x51, 0x71, 0x07, 0xb4, + 0xeb, 0xc8, 0xc8, 0xb6, 0x5e, 0x54, 0xbd, 0xd9, 0x6a, 0xe1, 0xf0, 0xc2, 0xa8, 0x7d, 0x61, 0x36, + 0x11, 0xa3, 0xb1, 0x53, 0x8f, 0x98, 0x39, 0x37, 0x4a, 0x9f, 0x1a, 0x39, 0xe8, 0x38, 0x87, 0x79, + 0x86, 0x84, 0x8e, 0x61, 0x01, 0xdc, 0x93, 0x05, 0x1e, 0xb0, 0xd3, 0x6a, 0x17, 0xc6, 0x1f, 0xd6, + 0x3f, 0xa2, 0xe1, 0xee, 0xfa, 0x0c, 0x3f, 0x81, 0x4e, 0x80, 0xb5, 0x20, 0x29, 0x08, 0x56, 0xc8, + 0x80, 0xed, 0x8f, 0x29, 0xef, 0x9c, 0x8e, 0x4b, 0xd3, 0xe3, 0x71, 0x36, 0xe0, 0x99, 0x76, 0x0b, + 0xd3, 0xfb, 0x60, 0xeb, 0x22, 0x1e, 0xf5, 0x04, 0x3a, 0xe1, 0x0d, 0x94, 0x7a, 0xb7, 0x39, 0x50, + 0xb5, 0x6e, 0xc2, 0x86, 0xf1, 0xf1, 0xbb, 0x67, 0xe8, 0xe8, 0x47, 0x85, 0x65, 0x1a, 0x43, 0xe1, + 0x49, 0x0d, 0x58, 0x2c, 0x7a, 0x26, 0xcf, 0xb4, 0x0c, 0x3c, 0xe2, 0xaa, 0xc1, 0x38, 0x50, 0xff, + 0x96, 0x2c, 0x25, 0x68, 0xa3, 0xf5, 0x90, 0x5e, 0xd4, 0xf7, 0xf4, 0x22, 0x48, 0x3d, 0x32, 0x41, + 0x4d, 0x05, 0x65, 0x96, 0x15, 0x83, 0xfa, 0x60, 0xe1, 0x25, 0x44, 0x34, 0x98, 0xe9, 0x05, 0x79, + 0x69, 0xe1, 0x52, 0xc3, 0xaf, 0xc4, 0x0b, 0xf4, 0x5a, 0x6d, 0x76, 0xd5, 0xe6, 0xd1, 0xe5, 0x17, + 0x71, 0x95, 0xa6, 0xc5, 0x20, 0x4a, 0x14, 0x5a, 0x32, 0xe9, 0xa9, 0xb2, 0xf1, 0xad, 0x07, 0x5a, + 0x59, 0x12, 0x35, 0x5b, 0x64, 0xac, 0x3a, 0xd8, 0x79, 0x7d, 0xb2, 0x4b, 0x88, 0x89, 0x6f, 0x4c, + 0x59, 0xa3, 0xac, 0x87, 0x63, 0x88, 0x87, 0xf5, 0xd0, 0xf8, 0xbd, 0x75, 0x54, 0x0d, 0x54, 0xbd, + 0x04, 0xdb, 0xf4, 0xa9, 0xaf, 0x80, 0x6e, 0x76, 0x86, 0x22, 0x74, 0xec, 0x4b, 0xe6, 0xcc, 0x68, + 0xab, 0x19, 0x30, 0x69, 0x6c, 0x27, 0xa1, 0x2b, 0x63, 0xb5, 0xaf, 0x40, 0xc9, 0xf4, 0xc8, 0x26, + 0x56, 0xa3, 0x0f, 0x9d, 0x02, 0x96, 0x45, 0x7e, 0x7b, 0x17, 0x0a, 0x94, 0x89, 0x5e, 0x3a, 0xc8, + 0x29, 0x40, 0x81, 0x6a, 0x4a, 0xfd, 0x3d, 0xdb, 0x3d, 0xe2, 0x74, 0x06, 0x89, 0xf7, 0x86, 0x7e, + 0x80, 0xf7, 0xca, 0x43, 0xd1, 0xf4, 0x33, 0x18, 0xff, 0xa2, 0x34, 0x1f, 0x12, 0x67, 0x60, 0x74, + 0x6b, 0x22, 0xb4, 0x0a, 0xec, 0x8c, 0x93, 0x4b, 0x4f, 0xc0, 0xd4, 0x23, 0x34, 0x3f, 0x91, 0x0c, + 0x52, 0xe6, 0x51, 0x23, 0x19, 0xa8, 0x86, 0x0e, 0x25, 0x30, 0x77, 0x93, 0x69, 0x60, 0x01, 0x68, + 0x17, 0x4b, 0xa1, 0xfb, 0xd4, 0x80, 0xc9, 0xa2, 0x19, 0xfd, 0x84, 0x78, 0x6e, 0x08, 0x0a, 0x96, + 0x76, 0x25, 0x0e, 0x6d, 0x18, 0x3d, 0xb2, 0x21, 0x24, 0xd2, 0xc2, 0x2e, 0xfb, 0xb8, 0x9c, 0x4d, + 0xe7, 0x10, 0xe9, 0x02, 0xa2, 0x00, 0xb2, 0xa7, 0xea, 0xc0, 0x93, 0xb3, 0x44, 0x22, 0x09, 0x50, + 0x5d, 0xb1, 0xc9, 0xa9, 0xa7, 0xfd, 0x34, 0xcc, 0x5d, 0x28, 0x57, 0x5b, 0x95, 0x15, 0x90, 0x06, + 0x18, 0xfd, 0xdb, 0x37, 0x7e, 0x7a, 0x8a, 0xc8, 0xff, 0x4d, 0x60, 0xff, 0xa4, 0x14, 0x3a, 0x86, + 0x2f, 0xb9, 0xf1, 0xa8, 0x6e, 0x28, 0x04, 0xa6, 0x30, 0x6f, 0xe1, 0x6a, 0x1e, 0xba, 0x1c, 0x3a, + 0x94, 0x1f, 0xb9, 0x93, 0xb6, 0x3e, 0xc2, 0xfb, 0x0f, 0xe8, 0xe5, 0xe1, 0xdf, 0xd9, 0x33, 0x77, + 0xba, 0xd3, 0xcf, 0xe3, 0x4f, 0x74, 0xb2, 0xd4, 0xb0, 0x8f, 0x26, 0xb9, 0x90, 0x30, 0xd2, 0x61, + 0x41, 0xff, 0xc7, 0x78, 0xd1, 0x65, 0xc5, 0x6e, 0x8c, 0x04, 0x0d, 0x2e, 0x3e, 0x67, 0x81, 0x7d, + 0xa2, 0x14, 0xef, 0x2e, 0x92, 0xbe, 0x64, 0xdd, 0xd5, 0xab, 0x33, 0xf6, 0xc5, 0x9c, 0x27, 0x36, + 0xe5, 0x4d, 0x4f, 0x6e, 0x01, 0x22, 0xd6, 0xac, 0x45, 0x29, 0x65, 0x58, 0x0d, 0x4d, 0x4b, 0xac, + 0x73, 0xb7, 0x0f, 0xbb, 0x91, 0xb9, 0x3f, 0xd7, 0x93, 0xfe, 0x0a, 0x63, 0xe3, 0x78, 0x3b, 0xc9, + 0x38, 0xd9, 0xee, 0x18, 0xa3, 0xce, 0x00, 0x1d, 0xee, 0x68, 0x94, 0x51, 0xbe, 0xde, 0xa1, 0x71, + 0xb8, 0x30, 0x12, 0xab, 0x4a, 0x83, 0x3c, 0x8a, 0x94, 0x0d, 0xa4, 0x52, 0x64, 0xc0, 0x88, 0x27, + 0x6b, 0x99, 0x8b, 0x29, 0x08, 0x6a, 0x89, 0xc1, 0x6d, 0xf9, 0x14, 0xa5, 0xd2, 0xc1, 0xcf, 0x3d, + 0x40, 0x59, 0xe6, 0x8c, 0xfe, 0xeb, 0x2f, 0xe7, 0x07, 0xf9, 0x19, 0x3d, 0x9c, 0xe9, 0x15, 0xe2, + 0x24, 0xa3, 0x1b, 0x26, 0x43, 0x24, 0xa7, 0x0e, 0xf4, 0x9c, 0xb3, 0xda, 0x60, 0xe0, 0x3b, 0x20, + 0xda, 0xd4, 0x16, 0x86, 0x0d, 0x83, 0xe8, 0xfe, 0xaf, 0x66, 0xcc, 0x31, 0x49, 0x7b, 0x68, 0x18, + 0x0e, 0x28, 0x18, 0x38, 0x0c, 0x50, 0x60, 0xd9, 0xc7, 0x06, 0x3a, 0x88, 0x2a, 0x4a, 0x0c, 0xc8, + 0x12, 0x7b, 0x82, 0x58, 0x5a, 0xd0, 0xee, 0x32, 0x66, 0x0a, 0x7c, 0x83, 0xf8, 0x25, 0x05, 0x16, + 0x1d, 0xe3, 0xe1, 0xe4, 0xc0, 0x64, 0x65, 0xe3, 0xec, 0xc6, 0xdb, 0x24, 0x97, 0x56, 0xc4, 0x66, + 0x78, 0x75, 0xb3, 0x40, 0xb1, 0xa1, 0x0c, 0x60, 0x33, 0x1d, 0x85, 0xc5, 0xe1, 0xd0, 0x95, 0x08, + 0x3f, 0xc2, 0x7a, 0x78, 0x73, 0x76, 0x4a, 0x17, 0xa4, 0x30, 0x79, 0xc0, 0xce, 0x26, 0x18, 0x9b, + 0x03, 0x36, 0x23, 0x22, 0x01, 0x53, 0x83, 0xc6, 0xeb, 0x78, 0xec, 0xee, 0x62, 0x8a, 0x83, 0xcd, + 0x9a, 0x57, 0x74, 0x75, 0x48, 0x57, 0x0f, 0xd7, 0x27, 0x24, 0xb9, 0x25, 0xea, 0xd1, 0x39, 0x12, + 0x37, 0x5e, 0xac, 0x85, 0x85, 0x94, 0xab, 0xc2, 0xcc, 0x90, 0xa0, 0x8b, 0xbc, 0xec, 0xe1, 0xb9, + 0x04, 0x0b, 0x72, 0x21, 0x43, 0xc9, 0x79, 0x40, 0x20, 0xb1, 0x09, 0x04, 0x21, 0xae, 0x25, 0x6a, + 0x08, 0xd4, 0xd0, 0x15, 0x7a, 0x0a, 0x2c, 0x41, 0xdd, 0x2f, 0x30, 0x2e, 0x32, 0x6f, 0x62, 0x46, + 0x22, 0x8f, 0x48, 0xbd, 0x48, 0xf2, 0x3e, 0xc3, 0xf1, 0x34, 0x72, 0x38, 0x64, 0xdd, 0xbb, 0x3c, + 0xed, 0x84, 0x4b, 0x18, 0x14, 0x9b, 0xf1, 0x34, 0x59, 0xd5, 0x75, 0x67, 0x65, 0xd7, 0xa5, 0xb8, + 0x2c, 0xb7, 0x99, 0x85, 0x44, 0x78, 0x17, 0x10, 0x08, 0xad, 0x6b, 0xdc, 0x88, 0x1b, 0x12, 0xd7, + 0x79, 0xc8, 0xd0, 0x0e, 0x7c, 0x74, 0xa8, 0x80, 0x9e, 0x29, 0xce, 0x20, 0xdd, 0xd3, 0x0c, 0x98, + 0x2a, 0x4e, 0xa6, 0x52, 0x2a, 0x20, 0x59, 0x75, 0x3e, 0x35, 0xe1, 0x6c, 0xd0, 0xe4, 0x3f, 0xed, + 0x64, 0x26, 0x5f, 0xc2, 0x6c, 0x2d, 0x3e, 0x7b, 0x03, 0x73, 0xff, 0xd4, 0x93, 0x99, 0x12, 0x2e, + 0x57, 0x75, 0x7b, 0xdb, 0x4e, 0x89, 0x82, 0x98, 0x4a, 0x64, 0xeb, 0xf0, 0x2c, 0x82, 0xe8, 0x17, + 0x71, 0x1f, 0x65, 0x66, 0xe3, 0x92, 0x24, 0x09, 0x22, 0x7e, 0xcf, 0xcf, 0x75, 0x8e, 0x2a, 0xa9, + 0xba, 0xfe, 0xd7, 0x5f, 0xf6, 0xb6, 0xee, 0x57, 0xd0, 0x61, 0x29, 0x33, 0x46, 0xc8, 0x52, 0xf8, + 0x03, 0x55, 0xa0, 0xb4, 0xf4, 0x05, 0x44, 0xba, 0x0e, 0xa4, 0x84, 0xe2, 0x08, 0x00, 0x48, 0xb1, + 0x55, 0xac, 0xc2, 0x9c, 0xb3, 0x59, 0x9a, 0x96, 0xa2, 0xf1, 0xaa, 0x98, 0xfe, 0x1d, 0x51, 0x41, + 0xbf, 0x1e, 0xe6, 0x73, 0xe5, 0xdd, 0x74, 0x4c, 0x71, 0x36, 0x4a, 0xf2, 0x9f, 0x58, 0xc5, 0x26, + 0x68, 0x1b, 0x29, 0x9c, 0xff, 0x56, 0x07, 0xb9, 0x61, 0x4c, 0x70, 0x1e, 0xa1, 0xdf, 0x52, 0xf4, + 0x9c, 0xa7, 0xbf, 0xbe, 0x3b, 0xd6, 0xd6, 0x77, 0xa7, 0xeb, 0xed, 0x1a, 0xbe, 0x90, 0x99, 0xd3, + 0x15, 0xb7, 0xfe, 0x98, 0x93, 0xc5, 0xf7, 0x8c, 0xd3, 0xe5, 0xb3, 0xc6, 0x8a, 0xc6, 0xb2, 0x9c, + 0x05, 0x68, 0x9a, 0x6e, 0x76, 0x06, 0xaa, 0xff, 0x0a, 0x8d, 0xce, 0x29, 0xb7, 0x53, 0x76, 0x99, + 0x60, 0xe3, 0x43, 0xea, 0x59, 0x5f, 0x6e, 0xd1, 0x9d, 0x4c, 0xba, 0xf1, 0x95, 0x74, 0x40, 0xbb, + 0xff, 0xf6, 0x8d, 0xa4, 0x52, 0x1e, 0xcd, 0xc8, 0x56, 0xae, 0x88, 0x5d, 0x21, 0x75, 0xf8, 0x4d, + 0x4a, 0x84, 0xe3, 0x59, 0xdc, 0x39, 0xb8, 0x05, 0x90, 0x9c, 0x68, 0x04, 0x4e, 0xfd, 0x65, 0x22, + 0xa6, 0x6a, 0xf7, 0x57, 0x92, 0xdd, 0xed, 0xb5, 0xf9, 0x85, 0x42, 0xfe, 0xe1, 0xfc, 0xfc, 0xeb, + 0x2f, 0xf9, 0x0b, 0x42, 0xc7, 0x36, 0xb6, 0x83, 0xa2, 0xf8, 0xbd, 0x12, 0x28, 0x1c, 0x4c, 0x7d, + 0x07, 0x9b, 0xdc, 0xa6, 0x27, 0x25, 0x2b, 0x95, 0x4d, 0xe1, 0x68, 0x57, 0x18, 0x8e, 0x6c, 0x47, + 0x68, 0x13, 0x01, 0xd2, 0x05, 0x03, 0xac, 0x0c, 0x62, 0xdb, 0x69, 0x1c, 0xd8, 0xda, 0x3b, 0x50, + 0x7e, 0x79, 0xf5, 0x71, 0xb3, 0x78, 0x62, 0xa9, 0x78, 0x9d, 0xb3, 0xf0, 0xc7, 0xdc, 0xa4, 0x8a, + 0xb1, 0x93, 0x5c, 0x7c, 0xe1, 0x68, 0x64, 0xba, 0x5b, 0x02, 0x6e, 0x37, 0xdc, 0x28, 0x61, 0xe0, + 0x11, 0xe2, 0x91, 0x81, 0xf6, 0xe1, 0xdb, 0x37, 0xd6, 0x15, 0xf2, 0x33, 0x78, 0x4a, 0xeb, 0xd4, + 0xc7, 0x1a, 0xbc, 0xc2, 0xf0, 0xf3, 0x3e, 0xfa, 0x4b, 0x4d, 0x99, 0x61, 0x1c, 0x2c, 0xe7, 0xa3, + 0xf7, 0xcb, 0x9a, 0x6e, 0x1e, 0x07, 0xcd, 0x4b, 0x4a, 0x9b, 0x36, 0x87, 0x9e, 0x62, 0xaa, 0x77, + 0x8a, 0xe6, 0xa9, 0xfe, 0xb4, 0x30, 0x68, 0x80, 0x5e, 0xa5, 0xa4, 0xeb, 0xac, 0x17, 0xdd, 0x45, + 0xd5, 0xdd, 0xb8, 0x00, 0x0e, 0x51, 0xfb, 0x7a, 0x02, 0xb7, 0x2b, 0xbd, 0x82, 0x5e, 0x6f, 0x9c, + 0x34, 0x28, 0xd8, 0xdb, 0xf4, 0x6f, 0x2d, 0xd1, 0x25, 0x78, 0x6f, 0x0c, 0xa4, 0xe9, 0x92, 0xff, + 0x68, 0x06, 0x8f, 0xaf, 0x5a, 0xd4, 0xb7, 0xe8, 0xf0, 0x93, 0xff, 0x55, 0xf3, 0x68, 0xf7, 0x21, + 0xa5, 0x5e, 0xb5, 0x6d, 0xee, 0x19, 0xb7, 0x2e, 0x03, 0x5e, 0x32, 0x77, 0x3a, 0x2f, 0x3e, 0x67, + 0x32, 0xc3, 0x15, 0xdd, 0x9f, 0x9b, 0xc4, 0xfd, 0x30, 0x58, 0x82, 0xfa, 0xb0, 0x89, 0xd3, 0xf2, + 0x3e, 0x1b, 0x7d, 0x4d, 0xb7, 0xa4, 0x64, 0xa9, 0x4a, 0xff, 0x43, 0x55, 0x85, 0x4c, 0x49, 0xa7, + 0x69, 0x0c, 0x87, 0xa0, 0x8d, 0xe0, 0x5a, 0x64, 0xce, 0x50, 0x05, 0xe3, 0x85, 0xb1, 0xa9, 0xb2, + 0xdd, 0x7d, 0xfc, 0xce, 0x40, 0xdb, 0x50, 0x2c, 0x90, 0xc2, 0x5c, 0x47, 0x58, 0xf4, 0x15, 0x95, + 0xc1, 0x01, 0x27, 0xe0, 0xee, 0x27, 0x4c, 0xcd, 0x4d, 0xc7, 0x9a, 0xcd, 0x13, 0xf6, 0x7b, 0xba, + 0x1a, 0x68, 0xd3, 0xee, 0x16, 0xd1, 0x56, 0x56, 0xa6, 0x2c, 0x81, 0x02, 0xde, 0xd5, 0x5d, 0x93, + 0xf3, 0x05, 0x33, 0x37, 0x7f, 0xf1, 0xa1, 0xe2, 0xf4, 0xc3, 0x4a, 0x1d, 0x11, 0x98, 0x92, 0x6c, + 0xaf, 0x87, 0x6f, 0x35, 0xa1, 0x5f, 0x8b, 0xe2, 0xbe, 0xec, 0x23, 0xd0, 0x4f, 0x2b, 0x8b, 0xeb, + 0xb5, 0x75, 0x3f, 0x6e, 0xc0, 0xdf, 0x63, 0xde, 0x0c, 0x05, 0x54, 0x6f, 0x8a, 0xf1, 0x17, 0x23, + 0x6c, 0x7e, 0x00, 0x79, 0xb1, 0xf5, 0x6b, 0x53, 0x4f, 0xc1, 0xc4, 0x14, 0x31, 0x2c, 0x64, 0x80, + 0x91, 0x6b, 0xba, 0xe1, 0x07, 0xcc, 0xcd, 0x88, 0xf3, 0x05, 0x26, 0x9c, 0xfb, 0x61, 0x02, 0xd0, + 0x85, 0x2d, 0x22, 0x4c, 0x14, 0x1b, 0x23, 0x4c, 0x54, 0xdb, 0x1e, 0x11, 0xaa, 0x5d, 0xe3, 0x04, + 0x9b, 0x81, 0x18, 0xf5, 0x6a, 0xc1, 0x22, 0x87, 0xba, 0x01, 0x40, 0x15, 0x31, 0x98, 0x01, 0xff, + 0x89, 0x12, 0x6b, 0xe3, 0x10, 0x24, 0x12, 0x7e, 0xa6, 0xca, 0x05, 0xa5, 0xda, 0x02, 0x2a, 0x0b, + 0x23, 0xd3, 0xad, 0x4a, 0xcf, 0x74, 0xa3, 0x32, 0xa5, 0x60, 0xc2, 0x58, 0x35, 0x46, 0x36, 0x8b, + 0x60, 0xd2, 0x34, 0x85, 0xed, 0x3a, 0x8c, 0x61, 0x19, 0xc5, 0x4f, 0xce, 0xd0, 0x50, 0x16, 0xe1, + 0x3f, 0x75, 0x41, 0x10, 0x12, 0x2d, 0xb0, 0x82, 0x00, 0x05, 0xc5, 0x03, 0x32, 0x51, 0x35, 0x76, + 0x00, 0x46, 0xc0, 0x28, 0x77, 0x1a, 0x0e, 0x66, 0xb8, 0xb2, 0x80, 0xd0, 0xc8, 0x0e, 0xd6, 0x66, + 0x12, 0x3a, 0x76, 0xe8, 0x62, 0xa1, 0x78, 0x78, 0x18, 0x2c, 0xf6, 0x03, 0x1d, 0xe8, 0xc2, 0x8b, + 0x6e, 0x4c, 0x40, 0x8e, 0x1a, 0x46, 0x17, 0x43, 0x60, 0x1c, 0x30, 0x50, 0xb1, 0x17, 0xeb, 0xe1, + 0xe0, 0x3d, 0x64, 0xd7, 0xa5, 0x38, 0x3d, 0x8a, 0xd7, 0xbb, 0x41, 0x31, 0x2e, 0xe3, 0x63, 0xd4, + 0xb8, 0x39, 0x0b, 0x31, 0xa7, 0x1f, 0xce, 0xb2, 0x9e, 0x94, 0x28, 0x09, 0x69, 0x70, 0x89, 0xc8, + 0x54, 0x6a, 0x37, 0xd8, 0x9f, 0x13, 0x77, 0xba, 0xe4, 0xeb, 0x61, 0x74, 0xe6, 0x30, 0xe1, 0x5b, + 0xb7, 0x23, 0x5e, 0x04, 0x8f, 0x4f, 0x08, 0xf5, 0x46, 0x50, 0x79, 0x02, 0x12, 0x19, 0xa3, 0x17, + 0xea, 0xd4, 0x1c, 0xa1, 0xcf, 0x5b, 0x72, 0xd2, 0x9b, 0xcc, 0x86, 0x39, 0xc2, 0x9b, 0xca, 0xbc, + 0x6a, 0x5f, 0x5c, 0xb3, 0x05, 0x19, 0x0f, 0x7e, 0xa5, 0xb1, 0xa1, 0x76, 0x05, 0x02, 0x5c, 0x97, + 0x00, 0x95, 0x16, 0x12, 0xbe, 0xd4, 0xdd, 0x5c, 0x50, 0x45, 0xde, 0xb3, 0x17, 0xa9, 0xb9, 0xe8, + 0xb2, 0xc9, 0x07, 0xd6, 0xa2, 0x58, 0x90, 0x0b, 0xe8, 0x9a, 0x4a, 0x23, 0xed, 0x47, 0xf6, 0xf6, + 0x5c, 0xae, 0xcd, 0x17, 0x8b, 0x5a, 0x8c, 0x11, 0xc9, 0x42, 0x37, 0x48, 0x08, 0xc1, 0x68, 0x07, + 0xc2, 0x06, 0x25, 0x3f, 0xe7, 0x41, 0x95, 0x8d, 0x5a, 0x86, 0xb8, 0x2d, 0x15, 0x28, 0x4c, 0x04, + 0x64, 0x4d, 0x32, 0xea, 0x95, 0xf1, 0x2d, 0x33, 0x8f, 0xa0, 0x1f, 0xf6, 0x1a, 0xd1, 0xce, 0x78, + 0x11, 0x3c, 0xab, 0xbb, 0x9d, 0x00, 0x63, 0xe9, 0x05, 0x94, 0x95, 0x88, 0x7a, 0x29, 0xf9, 0xfd, + 0xe6, 0x3a, 0xce, 0xe2, 0x52, 0x5c, 0xb1, 0x0f, 0x46, 0x8e, 0xa5, 0x22, 0x42, 0xc9, 0xa0, 0xf3, + 0xfe, 0x45, 0x4d, 0xa1, 0xde, 0xf3, 0xaa, 0x3c, 0x0a, 0xab, 0xe5, 0xde, 0xe3, 0xce, 0x13, 0xb7, + 0x69, 0x14, 0xe9, 0x3b, 0xd8, 0x9c, 0xbf, 0xd7, 0x6b, 0x37, 0x38, 0xed, 0x9f, 0xe9, 0x34, 0xf9, + 0xa0, 0xd3, 0xee, 0x81, 0x88, 0x7f, 0xbc, 0xcf, 0xd4, 0x8a, 0xfe, 0xbd, 0x7e, 0xb3, 0xe8, 0xa2, + 0x7f, 0xa6, 0xdb, 0x09, 0x37, 0x54, 0x89, 0x50, 0x17, 0x6b, 0xda, 0x1e, 0xa8, 0x3d, 0x2c, 0xca, + 0x52, 0xd3, 0x23, 0x9d, 0x25, 0x88, 0x9b, 0x5f, 0x36, 0xc5, 0x70, 0xcf, 0x83, 0x10, 0xa7, 0xbf, + 0x41, 0x03, 0x5c, 0xbd, 0x10, 0x17, 0x77, 0x2e, 0x48, 0xe6, 0xd5, 0x29, 0x86, 0x9c, 0x04, 0x8b, + 0xa7, 0x4b, 0xf4, 0xab, 0x53, 0x7f, 0x11, 0x87, 0x55, 0x13, 0x84, 0x0b, 0x14, 0xf4, 0x96, 0x45, + 0x19, 0xc8, 0xe5, 0x2b, 0x9c, 0x06, 0xcb, 0x82, 0x05, 0x0a, 0x2c, 0x11, 0x8c, 0xf6, 0xa8, 0x6f, + 0x91, 0x1f, 0xd9, 0x9f, 0x5b, 0x0e, 0xfc, 0x81, 0x8e, 0xa3, 0x78, 0x8d, 0x3b, 0x76, 0x75, 0x85, + 0xa1, 0x4c, 0x74, 0x20, 0xf0, 0xe8, 0xc7, 0x3a, 0xe2, 0x41, 0xe9, 0x90, 0x84, 0x1a, 0xbf, 0x56, + 0x1f, 0xa7, 0x30, 0x6d, 0xc7, 0x3d, 0xcd, 0x06, 0xba, 0xa2, 0xf3, 0x43, 0xfe, 0xb9, 0x78, 0xd5, + 0xda, 0xa2, 0x77, 0xe1, 0x23, 0x26, 0xe5, 0x7e, 0x6e, 0xe3, 0x1f, 0x54, 0x4a, 0xc2, 0xb1, 0x79, + 0x4c, 0x70, 0x24, 0xdc, 0x6a, 0xb0, 0xbc, 0xa2, 0xb6, 0x0d, 0x48, 0x2e, 0x7c, 0xf9, 0xfc, 0x6b, + 0x93, 0x89, 0xe4, 0x57, 0x6d, 0xf9, 0xba, 0x25, 0xef, 0x33, 0x80, 0x30, 0x16, 0xd0, 0x05, 0x22, + 0xc4, 0x96, 0xf4, 0xad, 0x2b, 0xbf, 0x30, 0x0f, 0x91, 0x33, 0x89, 0x17, 0x4b, 0xf4, 0xf6, 0xc5, + 0xb9, 0x27, 0xc9, 0x13, 0x4c, 0x08, 0x72, 0x0e, 0xc6, 0xf7, 0x75, 0x96, 0x24, 0x53, 0x0e, 0x93, + 0x73, 0x57, 0xdf, 0x63, 0x0a, 0x9a, 0xfc, 0xd3, 0x55, 0x25, 0xc1, 0x1a, 0xb2, 0xa3, 0x73, 0x8c, + 0x55, 0x00, 0x63, 0x9d, 0x0e, 0x5e, 0x67, 0x68, 0x5e, 0x26, 0x3d, 0x7e, 0x60, 0x4a, 0x0e, 0x32, + 0x06, 0xb7, 0x1f, 0x90, 0x70, 0x43, 0xe4, 0x6c, 0x36, 0x52, 0x54, 0x85, 0x65, 0xc1, 0x33, 0xe8, + 0xef, 0x4f, 0x26, 0x71, 0x29, 0x53, 0x75, 0x30, 0x14, 0x70, 0xd7, 0x82, 0x04, 0x66, 0x23, 0xee, + 0x0f, 0x30, 0x37, 0x81, 0x52, 0xc7, 0x92, 0xa0, 0x33, 0x6e, 0x2a, 0xb0, 0x3e, 0x01, 0xdb, 0x98, + 0x23, 0x7b, 0x90, 0xf8, 0x41, 0x24, 0x45, 0xf2, 0x34, 0x77, 0xdc, 0x08, 0x60, 0xc9, 0x20, 0x02, + 0x9c, 0x54, 0x8c, 0xa2, 0x45, 0xef, 0x75, 0xf2, 0x78, 0x80, 0x2c, 0x0c, 0x71, 0xeb, 0x57, 0xe0, + 0xc6, 0x33, 0xd5, 0x2e, 0xea, 0x6c, 0xd1, 0x7a, 0xaa, 0x6f, 0x77, 0xe1, 0xda, 0xfb, 0x2b, 0x06, + 0x32, 0x7a, 0xf2, 0x05, 0xff, 0x4e, 0xa7, 0x78, 0xce, 0x21, 0x8b, 0x24, 0x82, 0x09, 0xd9, 0x02, + 0xdb, 0xa2, 0x1f, 0xfe, 0xbb, 0x1e, 0xbe, 0x57, 0x6d, 0x9d, 0x85, 0x75, 0xe7, 0xd9, 0xb5, 0x1e, + 0x68, 0xe5, 0x80, 0x6d, 0x97, 0x58, 0xa1, 0x44, 0xa3, 0x21, 0x4b, 0x25, 0x8d, 0x47, 0x87, 0x05, + 0xea, 0x1c, 0xd1, 0xc8, 0x62, 0xff, 0x03, 0x9b, 0x42, 0x4f, 0xb3, 0x38, 0x1a, 0xe8, 0x98, 0x11, + 0xbe, 0x5d, 0xa4, 0x45, 0xc0, 0x64, 0x80, 0xbc, 0x54, 0x56, 0x96, 0x17, 0xde, 0x9d, 0x8b, 0x1d, + 0xf7, 0xd3, 0x3e, 0x2c, 0xbc, 0x35, 0xae, 0x81, 0x08, 0x74, 0x8c, 0x18, 0xf4, 0x80, 0x70, 0xf0, + 0x19, 0x83, 0x47, 0xc1, 0xe7, 0xab, 0xee, 0x15, 0x33, 0x08, 0x38, 0x32, 0x6a, 0x60, 0x97, 0xf2, + 0x97, 0x69, 0x79, 0xc0, 0x7d, 0xd8, 0x01, 0x4e, 0xee, 0x10, 0xd1, 0x78, 0xcc, 0x54, 0x6a, 0xb1, + 0x42, 0x4b, 0x72, 0x68, 0xfe, 0x96, 0xbc, 0x9d, 0xa0, 0xda, 0x0e, 0x55, 0x57, 0xbe, 0x7d, 0x93, + 0xdd, 0xdf, 0xc4, 0xea, 0x28, 0x0b, 0xf4, 0xc5, 0xa2, 0x62, 0xe1, 0xce, 0x17, 0x60, 0x4d, 0x1a, + 0x1a, 0xba, 0xba, 0xfc, 0x52, 0x44, 0x06, 0x9b, 0x36, 0x49, 0xcf, 0xed, 0x8b, 0xb0, 0x6a, 0x21, + 0xfd, 0xc3, 0xf7, 0x11, 0x5f, 0x36, 0x12, 0xc1, 0x32, 0x86, 0x12, 0x95, 0xc9, 0x8e, 0xe8, 0xc5, + 0x7d, 0x6c, 0xea, 0xe3, 0xbd, 0x7d, 0xbc, 0x15, 0xc3, 0x66, 0x4f, 0xcf, 0xa0, 0xdb, 0x80, 0x5e, + 0xf0, 0x29, 0x71, 0xa7, 0x33, 0x49, 0x23, 0x9b, 0x6e, 0x2e, 0xed, 0x41, 0xf1, 0x04, 0x72, 0xd2, + 0x43, 0xba, 0x66, 0x64, 0x7e, 0xfc, 0xe7, 0x28, 0x2f, 0x17, 0xe4, 0x0d, 0xfc, 0xe9, 0xf5, 0xe0, + 0x6f, 0x41, 0xc6, 0x97, 0x42, 0xb7, 0x0d, 0x2f, 0x05, 0x42, 0x5f, 0xaa, 0x3d, 0xcc, 0xe9, 0x55, + 0xe9, 0x4b, 0x4f, 0xa1, 0x2f, 0xbd, 0x52, 0x09, 0x5f, 0x7a, 0x55, 0xac, 0x93, 0xcd, 0x67, 0xe1, + 0x65, 0xb7, 0x5c, 0xdd, 0xfd, 0x99, 0xc1, 0xed, 0x98, 0x15, 0xdb, 0x5f, 0xfe, 0xe5, 0xb8, 0x18, + 0x36, 0x8d, 0x3a, 0xb6, 0x1b, 0x16, 0x85, 0x3b, 0xa0, 0xe2, 0x2e, 0x45, 0xaf, 0x8d, 0x3e, 0xbc, + 0x7a, 0xbd, 0x8e, 0xe3, 0xb4, 0x2a, 0x84, 0xf0, 0x3d, 0x30, 0x24, 0x8d, 0x81, 0xfd, 0xd4, 0x32, + 0x13, 0x13, 0xf8, 0xfd, 0xac, 0x24, 0xd8, 0xf7, 0x0e, 0xdd, 0xef, 0xf1, 0x12, 0xdd, 0x94, 0x6e, + 0x9a, 0x2d, 0x0c, 0x4e, 0x10, 0x6d, 0x4c, 0x68, 0x04, 0x0d, 0xc8, 0x0a, 0x78, 0x09, 0x85, 0x48, + 0xa3, 0x5a, 0x6a, 0x79, 0xb1, 0xc7, 0x6e, 0x29, 0x78, 0x03, 0x1e, 0xa5, 0x21, 0xc1, 0x24, 0xdd, + 0xb3, 0xd3, 0xa8, 0x87, 0x32, 0xc5, 0x9c, 0xfb, 0xd0, 0x95, 0xd7, 0x73, 0xf7, 0x5e, 0x89, 0xba, + 0x1f, 0xaa, 0xa3, 0x77, 0x3b, 0xc0, 0x9f, 0xa8, 0x5e, 0xb8, 0xe1, 0x46, 0x18, 0x30, 0xec, 0x43, + 0x06, 0x76, 0x9a, 0x6e, 0x87, 0xde, 0xd2, 0x93, 0x1a, 0x0d, 0x27, 0x7e, 0xaf, 0xc8, 0x00, 0x8a, + 0x24, 0x30, 0xfc, 0x78, 0x38, 0xd9, 0x02, 0xe3, 0x74, 0x88, 0x8b, 0xf1, 0x76, 0x82, 0xbb, 0x69, + 0x4f, 0xde, 0x5d, 0x5e, 0xbb, 0xd8, 0x3d, 0x7b, 0xfc, 0x7d, 0x82, 0xd9, 0xdd, 0xd8, 0x75, 0x6b, + 0xb9, 0x60, 0xee, 0xbd, 0x82, 0xc9, 0xda, 0x3b, 0x2d, 0xaf, 0x86, 0x99, 0xfd, 0x14, 0x8a, 0xb9, + 0x95, 0xa5, 0x92, 0xcb, 0xab, 0xa7, 0x37, 0x4f, 0xb8, 0xb5, 0x0e, 0x06, 0xcc, 0x22, 0x64, 0x40, + 0x14, 0x53, 0xd2, 0xeb, 0x09, 0xd7, 0x6d, 0x49, 0x7d, 0xd8, 0x89, 0x20, 0x2b, 0x83, 0xdb, 0x25, + 0xf0, 0x07, 0x78, 0xca, 0x01, 0x36, 0xd3, 0x30, 0x0d, 0xc6, 0x8c, 0x7b, 0xcb, 0x64, 0x49, 0xbe, + 0xb6, 0x91, 0x45, 0x1f, 0x26, 0x5d, 0x74, 0x7b, 0x80, 0xd1, 0x00, 0x13, 0x37, 0xb5, 0xba, 0x06, + 0xc5, 0xf6, 0xd5, 0x29, 0xe9, 0x26, 0xb2, 0xde, 0xf2, 0xe6, 0x8e, 0x96, 0x39, 0xb1, 0x24, 0xa3, + 0x2e, 0x9e, 0x1b, 0x8e, 0x80, 0x5f, 0x7d, 0xa4, 0x38, 0x76, 0xc5, 0x4d, 0x65, 0x0b, 0x2a, 0x6e, + 0x1b, 0xf5, 0x84, 0x02, 0xff, 0xcf, 0xd4, 0xe1, 0x25, 0xe9, 0x83, 0x80, 0x3c, 0x79, 0x5b, 0xae, + 0x65, 0x93, 0xa0, 0x6c, 0x0a, 0x0d, 0xb1, 0xa6, 0xe0, 0xf8, 0x26, 0x68, 0xd9, 0xa2, 0xfc, 0x27, + 0x87, 0xbd, 0x92, 0x01, 0x39, 0x81, 0x85, 0x86, 0x0d, 0xd7, 0xf9, 0xae, 0xba, 0x2a, 0x1a, 0x49, + 0x8f, 0x92, 0xb8, 0x5e, 0xa3, 0x24, 0x77, 0x7e, 0x00, 0x7b, 0xff, 0x04, 0xe3, 0x37, 0xaa, 0x57, + 0x43, 0x99, 0xa4, 0x0d, 0x8b, 0xf0, 0xb6, 0x9a, 0xaa, 0x7b, 0x8e, 0x4b, 0x28, 0x4a, 0x77, 0x96, + 0x71, 0x15, 0xaf, 0x85, 0xd3, 0x59, 0x0b, 0x56, 0x5d, 0x3c, 0x19, 0x8d, 0x06, 0xca, 0xcb, 0x48, + 0xdc, 0x24, 0x69, 0x30, 0xbd, 0xd3, 0x74, 0x77, 0xc6, 0xbe, 0x57, 0x9d, 0x41, 0x02, 0x4f, 0xf6, + 0x17, 0xd2, 0xd4, 0x67, 0x0d, 0xe5, 0x0e, 0x0d, 0x50, 0x5c, 0xe9, 0x2c, 0xed, 0xe8, 0x34, 0x05, + 0x1f, 0xf0, 0x15, 0x6b, 0xa9, 0xb0, 0x80, 0x8c, 0xf0, 0xfc, 0x10, 0xab, 0x93, 0xf5, 0x2a, 0xb5, + 0x54, 0xfa, 0x91, 0x36, 0x61, 0x77, 0xd4, 0xc1, 0x7d, 0x98, 0xf8, 0xd2, 0xb2, 0x57, 0xfa, 0x74, + 0x64, 0x1a, 0x2b, 0x0b, 0x6d, 0xb4, 0xb3, 0xc5, 0xdf, 0x03, 0xbb, 0xd1, 0xce, 0x79, 0x15, 0x6e, + 0xd0, 0xbd, 0x00, 0xff, 0x47, 0x8f, 0xc1, 0x44, 0x99, 0xbd, 0xdb, 0x48, 0x3a, 0x97, 0x8b, 0x20, + 0x84, 0x3a, 0xc5, 0x18, 0x56, 0x34, 0xac, 0xb2, 0x10, 0xd8, 0xf5, 0x06, 0xdf, 0x61, 0xe5, 0xff, + 0x63, 0x6e, 0x2d, 0x44, 0x76, 0x02, 0x7a, 0x2b, 0x81, 0x1b, 0xd4, 0x67, 0x67, 0xff, 0xe5, 0x17, + 0xc3, 0x07, 0x8b, 0x68, 0x8b, 0x74, 0x5b, 0xd5, 0x93, 0xf4, 0x18, 0x34, 0xfc, 0x9f, 0x0c, 0xb7, + 0xf0, 0x20, 0x50, 0x97, 0xe6, 0x8e, 0xd5, 0x2e, 0xe8, 0x2d, 0x90, 0x44, 0x73, 0xe9, 0xf7, 0x79, + 0x71, 0x9d, 0x04, 0x3d, 0x64, 0x41, 0x7f, 0x30, 0xde, 0xa3, 0xae, 0x6e, 0x8b, 0x62, 0x6d, 0xdd, + 0x77, 0x38, 0x1b, 0x1a, 0x1e, 0x64, 0xa9, 0xe7, 0xb6, 0xbe, 0x0f, 0x2c, 0xcf, 0x8d, 0xe4, 0x9d, + 0x77, 0xc2, 0xef, 0x45, 0xb3, 0x6f, 0x30, 0xb3, 0xc3, 0x50, 0xf2, 0x26, 0x3b, 0x85, 0xd0, 0x22, + 0x0a, 0xbd, 0x8d, 0x7d, 0xf9, 0x6b, 0xd2, 0x90, 0x43, 0xef, 0x41, 0xa7, 0x7e, 0x11, 0xd7, 0x31, + 0xbd, 0xce, 0x1a, 0xcf, 0x15, 0x4b, 0xdf, 0x70, 0x37, 0xd0, 0xd9, 0xf6, 0x98, 0x46, 0x3c, 0x07, + 0xed, 0xef, 0x12, 0x16, 0x4b, 0x07, 0x4f, 0x67, 0x8a, 0xd2, 0xfa, 0x3b, 0x57, 0xe5, 0xc6, 0x9e, + 0x9c, 0x9d, 0xff, 0xe7, 0xba, 0x4e, 0x9c, 0x5d, 0xd2, 0x1e, 0xf5, 0xff, 0x73, 0xbd, 0xb6, 0x9e, + 0x4a, 0x64, 0x73, 0x15, 0xb7, 0x0d, 0xb1, 0xa7, 0xc0, 0x02, 0x0a, 0x8a, 0x12, 0xdd, 0x58, 0x4f, + 0xa6, 0xd6, 0xa9, 0x1e, 0x1f, 0x55, 0x62, 0xc2, 0x55, 0x0c, 0x1d, 0xca, 0xe3, 0x55, 0xda, 0x50, + 0x3c, 0xf8, 0x60, 0x65, 0xe8, 0xa0, 0xdd, 0x3a, 0xee, 0x16, 0xb0, 0xfe, 0xe0, 0xea, 0x6f, 0xa9, + 0x8a, 0x76, 0x41, 0x3f, 0x24, 0xea, 0x77, 0x2a, 0x9c, 0x2c, 0x89, 0x37, 0x0f, 0x75, 0x8c, 0x9e, + 0xb6, 0x6f, 0x1e, 0x24, 0x71, 0x53, 0xb8, 0x76, 0xdf, 0xae, 0x1f, 0x02, 0x40, 0x01, 0x61, 0xfe, + 0x17, 0x47, 0xe5, 0x60, 0x69, 0x54, 0xfc, 0xf6, 0xfd, 0xe1, 0xd8, 0x41, 0x46, 0x12, 0x25, 0xca, + 0x47, 0xc9, 0x48, 0xde, 0x1e, 0x2c, 0x55, 0x43, 0x7a, 0xa4, 0xd5, 0x3d, 0xb7, 0x23, 0x4a, 0x46, + 0xb4, 0x4c, 0x03, 0xd8, 0x14, 0xb4, 0x22, 0x61, 0xff, 0xb2, 0x85, 0x50, 0xa8, 0x7c, 0xeb, 0x99, + 0x76, 0xb4, 0x58, 0x4b, 0xed, 0x83, 0xe9, 0x49, 0xcf, 0x58, 0xa1, 0x91, 0x88, 0x45, 0x27, 0x6a, + 0x4f, 0x4d, 0xdb, 0x34, 0x3d, 0x25, 0xfe, 0x4b, 0xa0, 0xf1, 0xe7, 0x34, 0xcd, 0xb2, 0x6d, 0x55, + 0x12, 0x85, 0xee, 0xce, 0x10, 0xd6, 0xf3, 0x08, 0x9c, 0x5b, 0x13, 0xf7, 0x9f, 0x44, 0x29, 0xb2, + 0x17, 0x95, 0x1e, 0xd1, 0xf4, 0x24, 0x2d, 0xfe, 0x9f, 0xd3, 0x7c, 0xe7, 0xcb, 0xc6, 0x86, 0xc0, + 0xe6, 0x92, 0xd0, 0xc6, 0x0f, 0xb3, 0x6f, 0x6c, 0x40, 0x2a, 0x11, 0x50, 0x81, 0xfc, 0xf7, 0x91, + 0x3b, 0x8c, 0x3a, 0xc6, 0xa4, 0xd8, 0x33, 0x1b, 0x54, 0x47, 0xec, 0x3d, 0xe8, 0x0b, 0xa3, 0x94, + 0x98, 0xc1, 0x4e, 0xc3, 0xa3, 0x03, 0x02, 0xfb, 0x65, 0x07, 0x69, 0xc0, 0x89, 0x72, 0x58, 0x7d, + 0xfe, 0x64, 0x05, 0x33, 0xac, 0x10, 0x88, 0xf5, 0x7f, 0xf9, 0x24, 0xd1, 0x61, 0x25, 0xf2, 0x61, + 0x1f, 0xc2, 0x5a, 0xc4, 0xe6, 0x13, 0x58, 0xd9, 0xc1, 0xf2, 0xb4, 0x11, 0xac, 0x65, 0xc9, 0x4c, + 0x68, 0x3d, 0x91, 0x93, 0xb4, 0x71, 0x3d, 0x94, 0x00, 0x28, 0x88, 0x40, 0xf8, 0x30, 0x16, 0x2b, + 0xe1, 0x01, 0x7e, 0x7f, 0xea, 0x49, 0x17, 0x27, 0x6e, 0x86, 0x0c, 0x01, 0x2b, 0xb7, 0x50, 0x80, + 0xe0, 0x99, 0x32, 0xc5, 0x33, 0x74, 0x5d, 0x61, 0xb0, 0x12, 0x53, 0xae, 0x5e, 0x04, 0xd9, 0xec, + 0x27, 0x71, 0x0b, 0x41, 0x88, 0x47, 0x2f, 0x18, 0x0d, 0x28, 0x48, 0x91, 0x01, 0x6d, 0x40, 0xa2, + 0xd0, 0x93, 0x5e, 0x07, 0x10, 0x06, 0x2c, 0x60, 0x9d, 0x97, 0xed, 0x70, 0x69, 0x9a, 0xe6, 0xe2, + 0xce, 0x95, 0xca, 0xe0, 0x47, 0xaf, 0x03, 0x64, 0xf3, 0x49, 0x17, 0x1c, 0x6b, 0x93, 0xf1, 0x22, + 0x63, 0x45, 0x97, 0x09, 0xc3, 0x78, 0xa0, 0xc6, 0x20, 0xb4, 0xd4, 0x37, 0xc2, 0x20, 0x6b, 0x3e, + 0x32, 0xe1, 0xba, 0xd4, 0xad, 0xdd, 0x70, 0x06, 0xc6, 0x90, 0x83, 0x02, 0xdd, 0x37, 0x2d, 0x65, + 0x18, 0xe0, 0x79, 0xd9, 0xba, 0x6e, 0x9c, 0xf9, 0x28, 0xd2, 0xcc, 0x08, 0x7a, 0xd9, 0x30, 0x7a, + 0x14, 0x88, 0x69, 0x23, 0x10, 0xb7, 0xfc, 0x86, 0xfb, 0xbe, 0x95, 0x2d, 0xe5, 0x2b, 0xf9, 0x00, + 0x34, 0xee, 0x00, 0x0a, 0x3c, 0xfc, 0x44, 0xa4, 0x42, 0x72, 0x65, 0x4b, 0x2b, 0x61, 0x44, 0x20, + 0x40, 0xf9, 0x28, 0x62, 0xc8, 0x33, 0x51, 0xe4, 0xdc, 0xb4, 0x28, 0x82, 0x3e, 0x8b, 0xad, 0x44, + 0xd2, 0xad, 0xf8, 0x09, 0x44, 0xe3, 0x60, 0xc5, 0x40, 0x8a, 0x41, 0x38, 0x34, 0x1c, 0x94, 0x6d, + 0x28, 0x08, 0x3a, 0x1e, 0x34, 0xf7, 0xc3, 0xf1, 0x08, 0x90, 0x68, 0x34, 0x05, 0x50, 0x6c, 0xf1, + 0x68, 0x2e, 0xb6, 0x3e, 0x54, 0x3a, 0x4b, 0x02, 0x5a, 0x1f, 0xab, 0x96, 0xa1, 0x0f, 0xa9, 0x68, + 0x26, 0x69, 0xbc, 0xbe, 0x87, 0x6e, 0x79, 0x63, 0x9c, 0xa1, 0x45, 0x52, 0x22, 0x13, 0xaa, 0xda, + 0x44, 0x35, 0xf1, 0x1c, 0x0f, 0xad, 0xfd, 0xef, 0x16, 0x7f, 0x24, 0x4d, 0xf2, 0x39, 0x3c, 0x66, + 0xac, 0x71, 0xab, 0xa5, 0x97, 0x04, 0x18, 0xba, 0xa4, 0x85, 0x14, 0x44, 0x19, 0xb7, 0xf8, 0xf1, + 0x37, 0x61, 0x27, 0x71, 0xb6, 0x23, 0xf6, 0x90, 0x43, 0xaf, 0x5a, 0x85, 0x9c, 0xb3, 0xc1, 0x5b, + 0x88, 0xda, 0x90, 0x45, 0x15, 0xee, 0xed, 0xc8, 0x6c, 0x72, 0xab, 0xd1, 0xbc, 0x94, 0x78, 0xb6, + 0xc3, 0x8e, 0x39, 0xf3, 0xa9, 0x98, 0xc0, 0xbd, 0xe2, 0x6e, 0x4e, 0x08, 0x17, 0x9a, 0x4a, 0x9b, + 0x95, 0x62, 0x9b, 0xc5, 0x93, 0x7c, 0x41, 0xab, 0xb8, 0x0b, 0x21, 0xec, 0xb5, 0x2e, 0x85, 0x6b, + 0x42, 0x15, 0xdf, 0x50, 0xa7, 0xba, 0x24, 0xe5, 0x77, 0x04, 0xdb, 0x59, 0x82, 0x64, 0x11, 0x39, + 0x0c, 0xae, 0x89, 0x49, 0x82, 0x05, 0x30, 0x2d, 0xa2, 0x80, 0xca, 0x13, 0xa1, 0x11, 0x2d, 0x1d, + 0x10, 0x87, 0x26, 0xad, 0x00, 0x9c, 0x5d, 0x06, 0x9c, 0x5d, 0x0d, 0x38, 0xbb, 0x0c, 0x38, 0xcb, + 0x03, 0x8e, 0xac, 0xab, 0x04, 0x06, 0x3f, 0x58, 0x55, 0x33, 0x4c, 0xf3, 0xfc, 0xc5, 0x8c, 0xb4, + 0x97, 0x71, 0xd8, 0xdb, 0x40, 0x1d, 0x85, 0xd4, 0xef, 0x87, 0x3b, 0x6e, 0x41, 0x91, 0x15, 0x87, + 0xf6, 0x22, 0x77, 0x31, 0x26, 0x59, 0x98, 0xb1, 0x77, 0x3c, 0xcc, 0xdb, 0x2a, 0x74, 0x6b, 0xb6, + 0x54, 0x8c, 0x65, 0xea, 0x6f, 0x3a, 0xde, 0xc1, 0x17, 0xf7, 0x2e, 0x48, 0x3e, 0xf2, 0xd4, 0xb3, + 0x04, 0xbd, 0x7b, 0x8c, 0x78, 0x6b, 0x90, 0xfa, 0x23, 0x6d, 0xdf, 0x30, 0xf7, 0x7d, 0x9a, 0x78, + 0x32, 0x3c, 0xc1, 0x1f, 0x49, 0x0e, 0x9f, 0x43, 0x76, 0x8f, 0x1f, 0xfb, 0x87, 0x35, 0xa9, 0xee, + 0x03, 0x8f, 0x31, 0x47, 0x36, 0xe9, 0x96, 0x76, 0xdf, 0x75, 0x8b, 0x7a, 0x10, 0x53, 0x29, 0xda, + 0xb0, 0x16, 0x38, 0x42, 0xf5, 0x34, 0xa8, 0x60, 0x9b, 0x34, 0x94, 0x33, 0x68, 0x89, 0x7a, 0xab, + 0xb8, 0x86, 0xb5, 0x14, 0x5a, 0x9b, 0x5b, 0xd8, 0x3a, 0x66, 0x21, 0x12, 0x5a, 0x92, 0x42, 0x52, + 0xd8, 0x7e, 0x3a, 0xc0, 0x17, 0x53, 0x5a, 0x12, 0x0c, 0xcc, 0x2f, 0x5f, 0x14, 0x8c, 0x4d, 0x89, + 0x0f, 0x24, 0xf2, 0x7d, 0xd0, 0x7f, 0xfd, 0x85, 0x87, 0x20, 0xb5, 0x6f, 0xdf, 0xf8, 0x13, 0x4a, + 0x90, 0x8d, 0x40, 0x43, 0x1d, 0x61, 0x6e, 0x57, 0xc0, 0x52, 0xdf, 0x86, 0x7f, 0x35, 0xb1, 0xcb, + 0x22, 0x2e, 0x71, 0xfb, 0x83, 0x6d, 0xed, 0x31, 0x34, 0xd4, 0x20, 0xfe, 0xab, 0x9d, 0x14, 0x37, + 0xed, 0x89, 0x8a, 0x5e, 0x26, 0x1d, 0xdd, 0x66, 0xc9, 0x79, 0x07, 0x43, 0x71, 0xb3, 0x35, 0x35, + 0x14, 0x23, 0xb6, 0xd9, 0x06, 0x76, 0x7c, 0xd9, 0xa4, 0x79, 0x39, 0x3e, 0xaf, 0x1f, 0xce, 0xcb, + 0xf3, 0x79, 0x5a, 0x52, 0x5c, 0x60, 0x73, 0x96, 0xeb, 0xa8, 0x75, 0x3d, 0x86, 0xe6, 0x1f, 0x73, + 0x6d, 0x11, 0x5c, 0x21, 0xd6, 0xb6, 0x63, 0xbe, 0x3d, 0x13, 0x5c, 0x57, 0x2a, 0x80, 0x25, 0x0e, + 0x46, 0x94, 0x9e, 0x36, 0xf4, 0x6d, 0x8c, 0xca, 0x13, 0xd9, 0xbe, 0x80, 0xef, 0x7d, 0xd4, 0x16, + 0x50, 0x20, 0xec, 0xed, 0x05, 0x82, 0x5f, 0x4e, 0xac, 0x04, 0xe6, 0x25, 0x23, 0xf6, 0xc2, 0xea, + 0x4b, 0x67, 0xf9, 0xab, 0x4e, 0x19, 0x5c, 0xfa, 0x01, 0xc2, 0xf7, 0xaf, 0xcd, 0x26, 0x7d, 0x3c, + 0x86, 0xc8, 0x1a, 0xfa, 0x9d, 0xfb, 0x7f, 0x57, 0x7c, 0xc2, 0x1a, 0xbb, 0x09, 0xad, 0x42, 0xf7, + 0x32, 0x5b, 0x1f, 0x5e, 0x7b, 0xca, 0xff, 0xfd, 0x25, 0x75, 0xea, 0x3a, 0xb3, 0xe8, 0xa5, 0x2e, + 0x7d, 0x32, 0x4c, 0xc9, 0xf4, 0x92, 0x1e, 0xa5, 0xbe, 0x9b, 0xf6, 0x28, 0x8d, 0xea, 0xaa, 0x7d, + 0x06, 0x8c, 0xf4, 0x7d, 0x38, 0xf9, 0x73, 0x38, 0x90, 0x7a, 0x30, 0x34, 0xec, 0xea, 0xca, 0xd0, + 0x85, 0x95, 0x30, 0x7b, 0xd9, 0x65, 0xea, 0xd7, 0x18, 0x1a, 0x00, 0xe3, 0x8a, 0x2e, 0xf3, 0x33, + 0x34, 0x50, 0xc5, 0xae, 0x6a, 0xb1, 0xa8, 0x0f, 0x71, 0xb1, 0xe2, 0x86, 0x75, 0x8e, 0x84, 0x00, + 0x27, 0x42, 0x32, 0x00, 0xe8, 0xd1, 0x0b, 0x7b, 0x0b, 0x05, 0xb6, 0x45, 0xf7, 0xf2, 0x49, 0x3a, + 0xb2, 0x5b, 0x1f, 0x5c, 0x34, 0xea, 0x5d, 0x3e, 0xf9, 0x4b, 0x1a, 0x7c, 0x80, 0xfa, 0x99, 0x8a, + 0xbe, 0xdc, 0x8f, 0x71, 0x1c, 0x46, 0x3f, 0x49, 0x7e, 0xa6, 0xf2, 0x18, 0x0e, 0xd5, 0xbf, 0x8b, + 0xe0, 0x18, 0xdd, 0x58, 0x43, 0x94, 0x5e, 0x23, 0x98, 0xe3, 0xe3, 0xcf, 0x51, 0xfa, 0x13, 0x34, + 0x7d, 0x5c, 0x26, 0xe9, 0x63, 0x88, 0xa6, 0x8f, 0x7f, 0x17, 0xe3, 0xe1, 0x3f, 0x45, 0xd2, 0xc7, + 0x25, 0x92, 0x86, 0x30, 0x1c, 0xfe, 0x5d, 0x0c, 0x99, 0xf8, 0x3a, 0x0a, 0xcb, 0x13, 0xda, 0xa2, + 0x62, 0xe2, 0x1d, 0x31, 0xf4, 0x6e, 0x7f, 0x78, 0xae, 0x8b, 0x6e, 0x82, 0xb7, 0x6d, 0xd9, 0xd6, + 0x36, 0x6c, 0xf7, 0x02, 0xd6, 0x3d, 0x2a, 0x56, 0x85, 0xec, 0xae, 0xb0, 0xff, 0x40, 0x63, 0x61, + 0xf8, 0x89, 0x46, 0xb4, 0x0d, 0x13, 0x9a, 0x65, 0x81, 0x4e, 0xe1, 0xd4, 0x50, 0x73, 0xd9, 0x5c, + 0xb4, 0x87, 0xd9, 0x9c, 0x27, 0x70, 0xbe, 0xbb, 0xb7, 0x00, 0x07, 0x1f, 0x30, 0xff, 0x63, 0x0e, + 0xf2, 0x1b, 0xba, 0x9d, 0xcd, 0x6d, 0x63, 0xf0, 0x21, 0xbb, 0x74, 0x83, 0xf5, 0xfc, 0x12, 0x34, + 0x4c, 0xcd, 0xfe, 0x9e, 0x61, 0x75, 0xa2, 0x75, 0xb3, 0x58, 0x37, 0xbb, 0xaa, 0xee, 0x8e, 0x62, + 0xad, 0xaa, 0x98, 0xc3, 0x8a, 0xb9, 0x55, 0x15, 0x1b, 0x56, 0x67, 0x55, 0xc5, 0x3c, 0x56, 0xcc, + 0xaf, 0xaa, 0xd8, 0xa4, 0x37, 0xcc, 0xac, 0xaa, 0x5b, 0xc0, 0xba, 0x85, 0x55, 0x75, 0x9f, 0xcf, + 0x98, 0x55, 0xb9, 0xaa, 0x76, 0x11, 0x6b, 0x17, 0x57, 0xb6, 0xac, 0x5a, 0x1d, 0x8d, 0xbc, 0x57, + 0xbf, 0x84, 0xf5, 0x4b, 0x2b, 0x69, 0x85, 0x67, 0x78, 0xc3, 0xd5, 0x33, 0xac, 0x44, 0x44, 0x90, + 0xb6, 0x5d, 0xe6, 0xa2, 0xac, 0x64, 0xeb, 0x38, 0xe6, 0x6a, 0x2c, 0x1f, 0xb5, 0x50, 0xb5, 0x16, + 0x6c, 0x75, 0xf8, 0x77, 0x99, 0xc8, 0x8e, 0x0a, 0x9e, 0x96, 0xfa, 0x21, 0x0b, 0xd9, 0xea, 0x72, + 0xcf, 0x88, 0x02, 0x35, 0xf5, 0x8f, 0x59, 0x28, 0xa6, 0xee, 0x3d, 0xb9, 0x57, 0x35, 0xed, 0x1a, + 0x48, 0xf3, 0x68, 0x8c, 0x3e, 0xa2, 0xcc, 0xb4, 0x4e, 0xe3, 0x3c, 0x30, 0x42, 0xa1, 0xcb, 0xce, + 0x8e, 0x40, 0x67, 0xea, 0xc1, 0x85, 0x32, 0x49, 0xba, 0xa3, 0x25, 0xcd, 0xe2, 0x76, 0xff, 0x97, + 0xee, 0xd3, 0x6a, 0xee, 0xb1, 0xfb, 0xa2, 0x12, 0xeb, 0x28, 0x10, 0x22, 0xea, 0xca, 0x62, 0x1d, + 0xcf, 0xe0, 0x53, 0x4a, 0x34, 0xae, 0x6f, 0x8e, 0x36, 0xf6, 0x1f, 0x04, 0x56, 0x3a, 0x74, 0x5b, + 0x1c, 0xd2, 0xfd, 0xd7, 0x66, 0x74, 0x1b, 0x18, 0x88, 0x4b, 0xf7, 0x29, 0x11, 0x00, 0x86, 0x2a, + 0x0d, 0x51, 0x99, 0x22, 0xfd, 0x6d, 0x31, 0xd4, 0x73, 0xc8, 0x35, 0xb6, 0x03, 0x0d, 0x6b, 0x49, + 0xa7, 0x70, 0x45, 0x09, 0xde, 0x80, 0x43, 0x57, 0x65, 0x78, 0xc0, 0x1d, 0xce, 0x18, 0xe1, 0xc8, + 0xbe, 0x43, 0xb4, 0xf5, 0xb1, 0x50, 0xb4, 0xdd, 0x4b, 0x2a, 0xfd, 0xf1, 0x46, 0xc5, 0x90, 0x97, + 0x8a, 0x90, 0xf2, 0xf7, 0xc4, 0x62, 0xa4, 0xfb, 0x4b, 0xdb, 0xdf, 0xd8, 0xd0, 0xde, 0xd4, 0xe7, + 0xad, 0x15, 0x1b, 0xc6, 0xd6, 0x5b, 0x08, 0x5d, 0xfa, 0x1e, 0x6c, 0x17, 0xe3, 0x81, 0x0d, 0xaa, + 0xd5, 0xc3, 0xaf, 0x7b, 0x8e, 0x27, 0x91, 0xdc, 0x0c, 0xbe, 0x51, 0x42, 0x81, 0x6f, 0x52, 0x6d, + 0x0b, 0xfb, 0x02, 0xb5, 0xb7, 0x6d, 0x77, 0x97, 0x8f, 0xfd, 0x02, 0x58, 0x50, 0x61, 0x81, 0xe6, + 0x85, 0x2c, 0x1e, 0xf2, 0xc7, 0x0b, 0xe8, 0xf1, 0x27, 0x9f, 0x2b, 0x8a, 0x0b, 0xaa, 0x9b, 0xfd, + 0x4a, 0x05, 0x7a, 0xab, 0x6b, 0x03, 0x08, 0xa8, 0x25, 0xa7, 0xd6, 0x43, 0x3b, 0xd1, 0x86, 0xc9, + 0xe6, 0xdf, 0x87, 0xb8, 0xb1, 0x64, 0xd4, 0x7a, 0xf0, 0x98, 0x85, 0xd2, 0xa7, 0xd1, 0x8a, 0x18, + 0x94, 0xb9, 0xb5, 0x9e, 0xfa, 0x15, 0x25, 0x42, 0xdf, 0xbd, 0x93, 0xd7, 0x8b, 0xd7, 0xa4, 0x06, + 0x33, 0xfa, 0xe7, 0x37, 0x79, 0xce, 0xc5, 0x9b, 0xb2, 0x75, 0xb0, 0xb6, 0xc2, 0x56, 0xcd, 0xf2, + 0x81, 0x8f, 0x75, 0xc4, 0x70, 0xdd, 0x25, 0x47, 0xae, 0x5c, 0xf9, 0x63, 0xde, 0xa2, 0x7b, 0xcf, + 0x69, 0xfc, 0x94, 0x63, 0x73, 0xa0, 0x58, 0x4d, 0x3c, 0xe2, 0x45, 0xb9, 0x2a, 0x25, 0x36, 0xc4, + 0x74, 0xc7, 0x4d, 0x6a, 0xe0, 0xe9, 0xa4, 0xa4, 0x47, 0x8e, 0x5f, 0x91, 0x7e, 0x6f, 0x74, 0xbc, + 0x2b, 0xc4, 0x29, 0x5b, 0x84, 0x50, 0xf5, 0x54, 0xee, 0x5e, 0x72, 0x33, 0xac, 0x0b, 0x1f, 0x58, + 0x26, 0x1d, 0x1b, 0x49, 0x0e, 0xd0, 0x69, 0x78, 0xb7, 0xf5, 0xbd, 0x03, 0xc8, 0x5a, 0x09, 0x28, + 0x1b, 0x00, 0xda, 0xf9, 0x04, 0xa0, 0xfe, 0x4a, 0x40, 0xb9, 0x00, 0x50, 0xf3, 0x13, 0x80, 0xb4, + 0x95, 0x80, 0xf2, 0x01, 0xa0, 0x5d, 0x1f, 0x10, 0x27, 0xba, 0x84, 0x5f, 0xcb, 0x03, 0x1e, 0x13, + 0x87, 0xe1, 0x32, 0xfe, 0xea, 0x48, 0x0c, 0x2d, 0x3e, 0x0a, 0x23, 0x0e, 0x7a, 0x6c, 0x10, 0x86, + 0x16, 0x1b, 0x80, 0xa1, 0x45, 0x83, 0x2f, 0x60, 0x22, 0x44, 0x6f, 0xa2, 0xb0, 0x68, 0x60, 0x49, + 0x54, 0xce, 0xa9, 0x7a, 0x08, 0x71, 0x78, 0x65, 0xb8, 0x44, 0x0d, 0x99, 0xde, 0x34, 0x64, 0x61, + 0xf4, 0xa6, 0x0b, 0xcf, 0xfc, 0x60, 0x37, 0x08, 0x89, 0x19, 0xae, 0x5e, 0xcc, 0x37, 0x4f, 0x4d, + 0x67, 0xea, 0x84, 0x5a, 0x72, 0x62, 0xbf, 0x73, 0x1a, 0x7c, 0xe6, 0x34, 0x9f, 0xe3, 0xdb, 0x73, + 0xe7, 0x34, 0x4a, 0xd8, 0xd0, 0x1d, 0xdb, 0xf4, 0x9b, 0xa9, 0x02, 0x4a, 0xab, 0x74, 0x3a, 0x0d, + 0x38, 0xb0, 0x8d, 0x31, 0x9f, 0x90, 0x60, 0xe7, 0xd3, 0x2b, 0xcd, 0x1d, 0x60, 0x78, 0x3c, 0x46, + 0x01, 0x18, 0x3a, 0xdd, 0xad, 0x3f, 0xe6, 0xa3, 0x6d, 0xb1, 0x45, 0x3d, 0x38, 0x0f, 0x18, 0x05, + 0x4d, 0x9f, 0x4e, 0xf7, 0x76, 0x45, 0x76, 0xe2, 0x82, 0x2b, 0xc5, 0xd3, 0x10, 0xf0, 0xda, 0x16, + 0xef, 0xd1, 0x4f, 0x46, 0xeb, 0x80, 0x0c, 0x81, 0xca, 0x4b, 0x05, 0xd8, 0x25, 0x99, 0x60, 0xf7, + 0x7b, 0x85, 0x62, 0xe1, 0xa2, 0x11, 0x74, 0xd1, 0xeb, 0xe1, 0x81, 0x6f, 0xee, 0x94, 0x07, 0x87, + 0xa2, 0x4b, 0x48, 0x4e, 0x20, 0x87, 0xd7, 0x81, 0x77, 0x2f, 0x5c, 0xff, 0x63, 0x9e, 0x18, 0x6d, + 0x0f, 0x27, 0x35, 0x2f, 0xdc, 0x21, 0xb9, 0x91, 0x5d, 0x70, 0xa3, 0xd7, 0x59, 0x2c, 0xd9, 0x99, + 0xa7, 0x44, 0x0f, 0x2c, 0x50, 0xff, 0x9b, 0xb4, 0xd0, 0x18, 0xfb, 0x26, 0xad, 0x27, 0xf5, 0xb9, + 0x5e, 0x7c, 0x80, 0x20, 0xf9, 0x00, 0xc1, 0x10, 0x7e, 0x3c, 0x72, 0xdd, 0x8d, 0x44, 0x94, 0xa6, + 0x9d, 0x9a, 0x9c, 0xfc, 0x07, 0x50, 0x16, 0xb0, 0x55, 0x2f, 0x2e, 0x1f, 0x79, 0x73, 0x43, 0xd1, + 0xd4, 0xbe, 0x5e, 0x43, 0x99, 0x6f, 0x39, 0x18, 0x8c, 0x8f, 0xcb, 0x25, 0x16, 0x1a, 0xa4, 0x68, + 0x80, 0xbb, 0x98, 0xea, 0x61, 0xd2, 0x72, 0x4f, 0x29, 0x24, 0x16, 0x86, 0xb0, 0xb4, 0xe8, 0x1b, + 0xbd, 0x68, 0xcf, 0x39, 0x2e, 0x36, 0x7a, 0xef, 0xf5, 0x83, 0x73, 0xa9, 0xc2, 0xf4, 0x85, 0x16, + 0x5c, 0x1f, 0xee, 0x16, 0x63, 0xd0, 0x47, 0xef, 0xb4, 0x10, 0x20, 0xb6, 0x44, 0x23, 0xf1, 0x90, + 0xba, 0x74, 0x3d, 0xa6, 0x7b, 0xc4, 0x6d, 0x4e, 0xbf, 0x7c, 0x98, 0xc3, 0x3e, 0x18, 0xbd, 0xf5, + 0x94, 0x96, 0x5a, 0xb7, 0x1f, 0xdf, 0x1d, 0xbf, 0xf5, 0x54, 0x62, 0x38, 0xd8, 0xc8, 0xe2, 0x56, + 0xaa, 0xd7, 0xbd, 0xf5, 0x94, 0x89, 0x6f, 0x31, 0x9d, 0xa3, 0x00, 0x57, 0x8c, 0x92, 0x9b, 0xb7, + 0x15, 0xa0, 0xfa, 0x01, 0x62, 0xe4, 0x23, 0xc4, 0x86, 0x83, 0x10, 0x52, 0x89, 0xfe, 0x32, 0x3f, + 0x99, 0x35, 0x8c, 0x9c, 0xf8, 0x9f, 0x23, 0x2b, 0xac, 0xe6, 0x25, 0x50, 0x0f, 0x86, 0x1e, 0x13, + 0x8d, 0xe1, 0xc1, 0x1f, 0x00, 0x16, 0xdd, 0xe7, 0x8f, 0xec, 0x01, 0x5e, 0xb6, 0x0b, 0x8b, 0xba, + 0xdf, 0xff, 0x16, 0x1e, 0xa8, 0xe5, 0xde, 0xc3, 0x43, 0x27, 0x7e, 0x6a, 0xee, 0xf5, 0x2d, 0x33, + 0x96, 0x48, 0x59, 0xde, 0x85, 0xc4, 0x71, 0x25, 0x94, 0xff, 0x37, 0x48, 0x04, 0xdb, 0xec, 0xbc, + 0x3b, 0x74, 0x51, 0xac, 0xa0, 0xfc, 0x3f, 0x82, 0xd5, 0x27, 0xc2, 0x0e, 0x98, 0x17, 0x6e, 0x95, + 0x6e, 0xeb, 0x7f, 0x20, 0xd7, 0xff, 0xbc, 0x07, 0x5d, 0x85, 0xe3, 0x3f, 0x96, 0xcd, 0x8d, 0x97, + 0xe7, 0x29, 0x0f, 0x2f, 0xb9, 0x03, 0xa1, 0x1d, 0xb6, 0xe0, 0x34, 0xb6, 0x99, 0xc2, 0x94, 0x80, + 0x04, 0x5d, 0x1a, 0x7a, 0x49, 0x78, 0xf8, 0xf6, 0xad, 0xbf, 0x61, 0x6e, 0x65, 0xbf, 0x7d, 0xeb, + 0x6e, 0x74, 0xb6, 0xb2, 0xdb, 0x47, 0x94, 0x71, 0x12, 0x24, 0x4d, 0xef, 0x2e, 0xbe, 0x26, 0xec, + 0x6c, 0xf1, 0xb7, 0x6f, 0x91, 0x04, 0xea, 0xe1, 0x14, 0x6b, 0x6d, 0x56, 0x14, 0xec, 0x9e, 0xfd, + 0x07, 0x5a, 0x86, 0x3e, 0xa5, 0xf1, 0x20, 0xd7, 0x94, 0x0b, 0x63, 0x71, 0x0d, 0x23, 0x31, 0xb9, + 0x3d, 0x73, 0x95, 0x83, 0x77, 0x3c, 0x37, 0x21, 0xa4, 0xdb, 0xce, 0x50, 0x74, 0xf1, 0xa5, 0x1f, + 0x05, 0x31, 0x0d, 0x1a, 0x90, 0xc1, 0x9c, 0x3b, 0xee, 0xad, 0xb5, 0x88, 0x2f, 0x48, 0xdc, 0xf7, + 0xad, 0x1a, 0x3a, 0xa9, 0x1c, 0x33, 0x62, 0xc5, 0xde, 0x98, 0xfe, 0x4c, 0x5c, 0x47, 0x95, 0xde, + 0x31, 0x43, 0x56, 0x0d, 0xcc, 0xa0, 0x2d, 0x8c, 0x73, 0xf9, 0x18, 0x72, 0x9c, 0x63, 0x2e, 0x04, + 0x39, 0xe2, 0x9a, 0xa3, 0x90, 0x51, 0x76, 0xfe, 0xbe, 0xd5, 0xd4, 0xc5, 0x0f, 0x19, 0xa0, 0x59, + 0xb0, 0x9a, 0xe3, 0x5c, 0xcc, 0x2c, 0xa6, 0xc6, 0xb9, 0xe1, 0xea, 0xd7, 0xc4, 0x04, 0xeb, 0xdb, + 0xbd, 0xfa, 0x16, 0x0f, 0xb0, 0x73, 0xf1, 0x30, 0xe6, 0xa7, 0x18, 0x33, 0xf4, 0x09, 0xfa, 0x20, + 0x8e, 0xfd, 0x33, 0xa8, 0x74, 0x43, 0xa8, 0xec, 0xd2, 0xa0, 0x71, 0x0e, 0x81, 0x2e, 0x6f, 0x60, + 0x6e, 0xfd, 0xe6, 0xa7, 0xa3, 0x43, 0x96, 0xff, 0xb2, 0x3e, 0x0a, 0x6c, 0x6a, 0xa1, 0x28, 0x64, + 0xe7, 0xa0, 0x16, 0xde, 0xa6, 0xc6, 0x72, 0x8c, 0xaf, 0xbb, 0x7f, 0xc2, 0x6f, 0x8f, 0x6c, 0xd5, + 0x59, 0x88, 0xe6, 0x66, 0x70, 0xbb, 0x81, 0xe6, 0xc6, 0x0d, 0x82, 0xa9, 0x8a, 0xf7, 0x93, 0x24, + 0xbd, 0xd3, 0x53, 0xde, 0xbb, 0xf7, 0x79, 0x22, 0x3c, 0xc7, 0xe7, 0xef, 0xfd, 0x28, 0x75, 0x79, + 0x53, 0xf9, 0x5e, 0xc7, 0x4e, 0x6e, 0x2a, 0xa9, 0x54, 0x32, 0x90, 0x32, 0x0a, 0x3d, 0x68, 0xcf, + 0x7b, 0xe1, 0xe9, 0xd9, 0x54, 0xca, 0xff, 0x0a, 0xba, 0xf5, 0x7f, 0x25, 0xfd, 0x06, 0xfb, 0x96, + 0x98, 0x52, 0x56, 0x05, 0x33, 0x7e, 0xe1, 0xeb, 0x01, 0x32, 0xbf, 0x7c, 0x4c, 0x60, 0x86, 0x7f, + 0x0e, 0xe1, 0x2c, 0xbb, 0xd8, 0xc7, 0xdd, 0x50, 0xfa, 0x9e, 0x0b, 0x4a, 0xf6, 0xbb, 0x60, 0xdd, + 0x02, 0xf2, 0xab, 0x1a, 0x07, 0xa1, 0xca, 0x5d, 0x0e, 0xe9, 0x55, 0x92, 0x71, 0x57, 0xc2, 0x3d, + 0x51, 0x96, 0xf4, 0xb1, 0xe8, 0x9b, 0xf2, 0xca, 0x58, 0x4b, 0xe9, 0x0b, 0xf5, 0xf8, 0x7f, 0xd1, + 0xd8, 0xf5, 0x27, 0xe1, 0xe5, 0x94, 0x07, 0xcf, 0x3a, 0x8a, 0x28, 0x2d, 0x6c, 0xef, 0xc4, 0x70, + 0x12, 0xd6, 0xdb, 0xd4, 0xaa, 0x52, 0xc4, 0x2f, 0xf5, 0xdd, 0x53, 0x07, 0x03, 0x8c, 0xac, 0xe5, + 0xde, 0xc5, 0x05, 0x94, 0xfa, 0x1f, 0x3f, 0x8a, 0x06, 0xe1, 0x7a, 0x24, 0x03, 0xf9, 0x19, 0xbe, + 0xf2, 0x4f, 0x0a, 0x5f, 0x50, 0x82, 0x81, 0xb5, 0xa6, 0x9d, 0x44, 0x37, 0x03, 0x3e, 0x70, 0x27, + 0x5c, 0xd8, 0x19, 0x86, 0xf5, 0x53, 0xba, 0x45, 0x56, 0x73, 0x83, 0xf9, 0x96, 0x9d, 0x72, 0x76, + 0x9f, 0x17, 0x33, 0x91, 0x30, 0x36, 0xb6, 0xbf, 0xf6, 0x9f, 0xeb, 0x35, 0x9f, 0x06, 0xd4, 0x09, + 0xc0, 0x7a, 0x8d, 0xf3, 0x6a, 0x7d, 0xd3, 0x8f, 0xd7, 0xa4, 0x47, 0x69, 0x04, 0x86, 0x06, 0xdd, + 0x48, 0xa4, 0x07, 0x61, 0xc2, 0xde, 0xb8, 0x3f, 0xe6, 0x4e, 0x5a, 0xed, 0x2e, 0xe0, 0x97, 0x46, + 0x87, 0xfa, 0x3b, 0x93, 0x75, 0x4c, 0x5e, 0x72, 0xcf, 0x51, 0xa7, 0x1f, 0xcb, 0x71, 0xfd, 0x1a, + 0x62, 0x0d, 0x5f, 0xbf, 0x67, 0xe5, 0x6d, 0xef, 0x4b, 0x4b, 0x29, 0x4c, 0xf0, 0xb6, 0xf7, 0x6a, + 0x91, 0xfd, 0xc0, 0x1f, 0x98, 0xb9, 0x91, 0x95, 0xf1, 0x88, 0x8c, 0xeb, 0xdc, 0xfb, 0xb5, 0x49, + 0xe8, 0x09, 0xc6, 0x90, 0x8b, 0xcf, 0x3d, 0xca, 0xe8, 0x82, 0x0c, 0x1d, 0x74, 0x89, 0xe4, 0xac, + 0x1a, 0x4d, 0xee, 0x4c, 0x4d, 0x4c, 0x59, 0x8e, 0x1f, 0x97, 0x37, 0x7c, 0xfd, 0xd3, 0x61, 0xee, + 0x69, 0x25, 0xea, 0x65, 0x94, 0xe8, 0xb6, 0x2f, 0xf1, 0x0e, 0x55, 0xf9, 0x9b, 0xd3, 0x78, 0xc8, + 0xd6, 0xf9, 0x4e, 0xdc, 0x61, 0xde, 0x74, 0x60, 0xe2, 0x93, 0x1f, 0xce, 0xcf, 0xfa, 0x5c, 0xed, + 0xd6, 0xf0, 0x01, 0xa3, 0x60, 0xd1, 0xa4, 0x64, 0x2f, 0xd9, 0x9f, 0x0b, 0x84, 0xc1, 0x9f, 0x6c, + 0xa2, 0x4e, 0x4a, 0x7a, 0x9b, 0x91, 0x46, 0xf0, 0x52, 0x52, 0xc5, 0x22, 0x09, 0x87, 0x26, 0x26, + 0x31, 0x56, 0xd4, 0x3b, 0xb5, 0x85, 0xf0, 0x64, 0x06, 0x49, 0x6c, 0xe1, 0x35, 0x36, 0xe2, 0x22, + 0x40, 0x82, 0x5e, 0x2e, 0x42, 0x3c, 0x0e, 0xc3, 0x4b, 0x9b, 0x24, 0x1d, 0x7e, 0xb0, 0x34, 0x06, + 0x12, 0x48, 0x9a, 0x1b, 0xce, 0xcb, 0x92, 0x80, 0x9a, 0x5d, 0x32, 0xbd, 0xe8, 0x25, 0xc4, 0xeb, + 0xd6, 0xdd, 0xae, 0x98, 0xfc, 0x2e, 0xd3, 0x83, 0x37, 0x61, 0x36, 0x66, 0x47, 0xc2, 0xf0, 0xa8, + 0x26, 0x3b, 0x3d, 0xe6, 0xb2, 0x31, 0x36, 0x82, 0xb7, 0x76, 0xb1, 0x54, 0x3c, 0x68, 0xc2, 0x32, + 0xb6, 0xc5, 0xcd, 0xcd, 0x2f, 0x9b, 0x59, 0xd0, 0x37, 0xbc, 0x8c, 0x4d, 0x46, 0x1d, 0x0c, 0x25, + 0xd5, 0xb6, 0x7f, 0xfc, 0xac, 0x69, 0xa0, 0x85, 0x69, 0x2a, 0x1e, 0x3f, 0xa3, 0x97, 0x8e, 0x39, + 0x6e, 0xc5, 0xef, 0xf9, 0xbf, 0xfe, 0xa2, 0xe1, 0xa6, 0xf4, 0x9c, 0x15, 0x94, 0xc3, 0x5f, 0xaf, + 0xa8, 0x44, 0x2f, 0xfe, 0xf0, 0x66, 0xd0, 0xb7, 0x6f, 0x22, 0x5e, 0xde, 0x8a, 0x81, 0xc5, 0xf4, + 0x6e, 0x56, 0xef, 0x86, 0x5c, 0x4c, 0x48, 0xba, 0x87, 0x89, 0x83, 0x6f, 0x8e, 0x7b, 0x1b, 0xdc, + 0x7e, 0x43, 0x05, 0xbf, 0xa1, 0xfc, 0xcf, 0x6d, 0x50, 0x60, 0x6b, 0xf8, 0xb0, 0x29, 0xd3, 0x4b, + 0x0d, 0x12, 0x0a, 0x5e, 0xb2, 0x20, 0x29, 0x5c, 0x5b, 0x09, 0x85, 0x8f, 0xd1, 0x15, 0x83, 0x06, + 0xd8, 0xb7, 0xc2, 0xb1, 0x70, 0x90, 0x9f, 0xe5, 0xf3, 0xe9, 0xa7, 0xba, 0x23, 0xf9, 0xe9, 0x62, + 0xf7, 0x83, 0x22, 0x39, 0x2e, 0x9f, 0x7d, 0x4c, 0x3b, 0x9c, 0x3f, 0xe6, 0xf3, 0xe9, 0xa7, 0xac, + 0xc3, 0xf9, 0xbd, 0x70, 0x7e, 0x71, 0x13, 0xc3, 0xda, 0x9d, 0x54, 0xdd, 0xfb, 0xc6, 0x08, 0xf2, + 0x3d, 0x9e, 0x41, 0x39, 0x74, 0x86, 0x1a, 0x94, 0x9e, 0x8a, 0x12, 0x91, 0x74, 0x09, 0xd5, 0x18, + 0x50, 0xda, 0x24, 0x11, 0x98, 0x24, 0xb9, 0x60, 0x0b, 0x67, 0x6f, 0x4a, 0x3f, 0xce, 0x15, 0x5a, + 0x37, 0x63, 0x8e, 0x97, 0xf9, 0x07, 0x47, 0xd9, 0x19, 0x53, 0xff, 0xb8, 0xa1, 0xfb, 0x16, 0x39, + 0xbd, 0x17, 0xe5, 0x70, 0x7a, 0xbc, 0xcb, 0x2d, 0xeb, 0xf1, 0xf8, 0x0f, 0x59, 0xf2, 0xe5, 0xca, + 0x4f, 0xef, 0x1e, 0x2d, 0xe0, 0x5c, 0x7f, 0xae, 0x21, 0x9b, 0xd3, 0x2a, 0x28, 0xca, 0xe2, 0x3b, + 0xe6, 0x9e, 0x9e, 0x15, 0x25, 0x3c, 0x93, 0x27, 0x61, 0x33, 0xb4, 0x8f, 0x97, 0x5e, 0x72, 0x48, + 0x81, 0x46, 0xbf, 0xbc, 0x49, 0xf7, 0x84, 0x5d, 0xf3, 0xeb, 0x8f, 0x39, 0x7e, 0x1e, 0x46, 0xd1, + 0x2e, 0x21, 0xb1, 0x69, 0xdb, 0x09, 0x04, 0x92, 0xf4, 0x8f, 0x12, 0xfd, 0xa2, 0x6b, 0x27, 0x3b, + 0x3e, 0x04, 0xcb, 0x6a, 0x94, 0x48, 0x04, 0x57, 0x36, 0x76, 0x5b, 0xb4, 0x17, 0x18, 0x02, 0x43, + 0xe2, 0x1f, 0xde, 0xe8, 0x40, 0x1d, 0xea, 0xcd, 0x49, 0xfa, 0x81, 0x2d, 0x20, 0x3b, 0xc8, 0xf7, + 0xe5, 0x02, 0x20, 0x11, 0x53, 0x5e, 0xe8, 0xca, 0xd2, 0xcd, 0x6c, 0x80, 0x88, 0x7f, 0x08, 0xd0, + 0x47, 0x82, 0xbf, 0x3e, 0x0d, 0xaf, 0x74, 0x49, 0x1b, 0x23, 0xc7, 0xc5, 0xea, 0x03, 0x32, 0xc1, + 0xaa, 0xbe, 0x41, 0x24, 0xf1, 0xbf, 0x05, 0xf7, 0xc3, 0xa2, 0x62, 0x0a, 0x45, 0xc6, 0x7f, 0x8b, + 0xff, 0x13, 0xaa, 0x51, 0x98, 0x3c, 0xd9, 0xb8, 0xa8, 0x1a, 0x0b, 0x83, 0xe0, 0x26, 0x6e, 0xe1, + 0x84, 0x27, 0xb2, 0x62, 0xee, 0x7a, 0x12, 0xbf, 0xba, 0xdd, 0x13, 0xd2, 0xf4, 0x78, 0x5e, 0x72, + 0x93, 0x3f, 0x21, 0x2a, 0x90, 0x20, 0xbe, 0x87, 0xc0, 0x1c, 0x0f, 0x55, 0x4f, 0x88, 0x69, 0x1f, + 0x47, 0x76, 0xcd, 0x9a, 0x7b, 0x6d, 0x71, 0x3d, 0x32, 0xba, 0xfe, 0x05, 0xd1, 0x6a, 0x37, 0xc9, + 0x23, 0x19, 0x2e, 0xc6, 0x0e, 0x50, 0xf2, 0x1f, 0x56, 0x08, 0xae, 0xb1, 0x09, 0xd2, 0x50, 0xe4, + 0xe1, 0xf1, 0x45, 0xc7, 0xbb, 0x72, 0xc3, 0x55, 0x1c, 0x6a, 0x02, 0xd5, 0x12, 0x36, 0xb3, 0x75, + 0x5f, 0x14, 0xe1, 0x99, 0x22, 0x60, 0xcc, 0x3a, 0x65, 0xd1, 0xb0, 0xd8, 0xa5, 0xf3, 0xc2, 0xcd, + 0xc7, 0x83, 0x64, 0x40, 0xca, 0xa4, 0x77, 0x1f, 0x92, 0x7b, 0x76, 0x32, 0xe0, 0x1c, 0x0f, 0x1e, + 0xe3, 0x17, 0xb6, 0xe6, 0x6b, 0x75, 0xc7, 0x13, 0xbe, 0x8a, 0x64, 0x48, 0xaa, 0x64, 0xe1, 0xf5, + 0xed, 0x4b, 0xe2, 0x5d, 0x4b, 0x26, 0x2d, 0xfe, 0x00, 0x0b, 0x1e, 0xa8, 0xcc, 0x40, 0x63, 0x7f, + 0xe2, 0xf1, 0x15, 0x89, 0x1d, 0xaa, 0x94, 0x8c, 0x3a, 0x5e, 0xb8, 0x28, 0xa9, 0x75, 0xbc, 0x4d, + 0x71, 0x93, 0x2e, 0xa8, 0x00, 0x48, 0xb4, 0x50, 0xa4, 0x27, 0x15, 0xc4, 0xcd, 0x3d, 0x45, 0xa2, + 0xe8, 0x5d, 0x63, 0x98, 0xc0, 0xf8, 0xa1, 0xe5, 0x34, 0x75, 0x39, 0x8d, 0x82, 0x72, 0x87, 0x0e, + 0x1b, 0xda, 0xc8, 0xba, 0xa7, 0x43, 0xd9, 0x55, 0x51, 0x36, 0x53, 0x58, 0x81, 0x97, 0x2d, 0xa2, + 0x6f, 0x2a, 0x5c, 0xb0, 0x13, 0xae, 0x37, 0xde, 0x90, 0x59, 0xd8, 0x5c, 0x7c, 0x56, 0x1f, 0x5b, + 0x8d, 0xcf, 0x6a, 0x27, 0x17, 0x5f, 0x60, 0x24, 0xea, 0x16, 0x3d, 0x66, 0xc1, 0x9f, 0xe0, 0xc9, + 0x78, 0xd4, 0xa4, 0x24, 0xc0, 0xab, 0xa2, 0x68, 0xec, 0x92, 0x7b, 0x15, 0xb6, 0x82, 0xb7, 0x60, + 0x1b, 0xf8, 0x47, 0x5d, 0x24, 0xf1, 0x3e, 0xee, 0xc5, 0xbf, 0x80, 0xad, 0xdd, 0x4b, 0x79, 0x82, + 0xc8, 0xc6, 0x9a, 0x10, 0xbd, 0xc2, 0x1b, 0xbf, 0x9c, 0x82, 0xde, 0x34, 0x09, 0xaf, 0x7b, 0x7c, + 0x36, 0x54, 0x7a, 0xa9, 0xda, 0xe6, 0xaf, 0x30, 0xb3, 0x2d, 0x4f, 0x50, 0x7a, 0xf1, 0x0f, 0xc8, + 0x67, 0x5c, 0xb9, 0x25, 0x25, 0x74, 0x03, 0x50, 0x64, 0x26, 0x32, 0x9d, 0x0c, 0x55, 0x35, 0xfa, + 0x09, 0x1e, 0xd7, 0x8b, 0x48, 0x77, 0x0b, 0xd1, 0x2e, 0xc3, 0xfb, 0x7f, 0x70, 0x3b, 0x8f, 0x2e, + 0x7d, 0x0a, 0x3d, 0xd2, 0x41, 0xf3, 0x40, 0xfb, 0x42, 0x9f, 0x96, 0x82, 0xbe, 0xab, 0xf5, 0x85, + 0xa1, 0x37, 0x99, 0x91, 0xf6, 0xc7, 0x5c, 0x5f, 0xd0, 0x9b, 0xbf, 0x93, 0xfe, 0xee, 0xa2, 0x6b, + 0xcf, 0xb9, 0xa9, 0x5e, 0xd3, 0xd8, 0x3f, 0xc3, 0xdd, 0x6c, 0xfc, 0x68, 0xeb, 0x2b, 0xb2, 0x1b, + 0x49, 0xab, 0x72, 0xfe, 0x19, 0x44, 0x10, 0xf5, 0x12, 0x7c, 0x26, 0x0b, 0x31, 0xbc, 0xcb, 0x48, + 0x0b, 0x87, 0xed, 0xe5, 0x08, 0x01, 0xfc, 0x6f, 0x74, 0x86, 0xea, 0xf9, 0xe7, 0x6e, 0xb7, 0xd8, + 0xed, 0x47, 0xa1, 0x4d, 0x18, 0x37, 0x7a, 0x03, 0x6c, 0x77, 0xdf, 0x64, 0xf4, 0x87, 0xa3, 0x8d, + 0x48, 0xe2, 0x9c, 0x77, 0xa3, 0xd0, 0x88, 0x1b, 0x81, 0x96, 0xcf, 0xd5, 0xdc, 0x89, 0xbd, 0xd7, + 0xba, 0xcc, 0xe7, 0x44, 0x37, 0xbe, 0x2c, 0x1f, 0x4a, 0xdd, 0x68, 0xf9, 0x19, 0x85, 0x48, 0x46, + 0xde, 0xcb, 0x28, 0x86, 0x33, 0x9a, 0x5e, 0x46, 0x85, 0x6f, 0xa0, 0x92, 0x2b, 0x95, 0x44, 0x97, + 0xbf, 0xc4, 0x6d, 0x1e, 0x3d, 0x3d, 0x74, 0xa5, 0x8e, 0x88, 0x81, 0x95, 0xf4, 0x0a, 0x0c, 0x4c, + 0xdf, 0x06, 0xdd, 0xce, 0xac, 0xb1, 0x67, 0xee, 0x02, 0x1d, 0x90, 0xa3, 0x78, 0xb0, 0x90, 0x31, + 0x55, 0x32, 0x7c, 0x55, 0xa2, 0x97, 0x89, 0xea, 0x00, 0xe6, 0x4a, 0xec, 0xda, 0x82, 0xe0, 0xc6, + 0x02, 0xe2, 0xdd, 0x54, 0x00, 0x9a, 0x7d, 0x70, 0x4b, 0xc1, 0xe5, 0x45, 0xeb, 0x46, 0x94, 0xf0, + 0x0a, 0x51, 0x82, 0xdf, 0x15, 0xc1, 0xeb, 0xcc, 0x70, 0x10, 0x36, 0x6e, 0x80, 0x78, 0xc0, 0x82, + 0x78, 0x53, 0xa4, 0xca, 0xee, 0xe7, 0xa4, 0x95, 0xc5, 0x85, 0xd4, 0x36, 0xba, 0xb3, 0x5a, 0xe4, + 0xdc, 0xab, 0x9d, 0xe4, 0x6e, 0x3a, 0x08, 0xe3, 0x85, 0xa9, 0xb0, 0x58, 0x60, 0x14, 0x33, 0xbb, + 0xe7, 0xd0, 0xfd, 0x4a, 0xd4, 0xfb, 0x15, 0xd8, 0x75, 0x21, 0x24, 0x74, 0x35, 0x43, 0xb7, 0x6b, + 0xe2, 0x7a, 0x42, 0x85, 0x38, 0xd4, 0xe8, 0xa9, 0xd6, 0x30, 0x41, 0x6f, 0x71, 0xb2, 0x85, 0x47, + 0x62, 0x67, 0x2e, 0x4e, 0x40, 0xa8, 0xe1, 0xdd, 0x34, 0xf4, 0x2e, 0x17, 0x61, 0x32, 0x50, 0x1c, + 0xfa, 0x06, 0x5a, 0x8a, 0xd0, 0x85, 0xf9, 0xda, 0xff, 0x02, 0x8a, 0x94, 0x7f, 0x3b, 0x01, 0xc6, + 0xa2, 0x26, 0x54, 0x9d, 0x46, 0x68, 0xd2, 0x58, 0xb6, 0xba, 0x2c, 0xd1, 0xa8, 0x67, 0xfc, 0xbc, + 0x8d, 0xf7, 0x81, 0x8d, 0x64, 0x12, 0x75, 0x6c, 0x58, 0xd1, 0x55, 0xf3, 0x4b, 0x70, 0x78, 0x53, + 0x35, 0xd1, 0xe0, 0x0d, 0x5d, 0x15, 0x27, 0xb1, 0x4f, 0x80, 0xe3, 0x71, 0x61, 0xf6, 0xc4, 0xe2, + 0xe3, 0xea, 0x2c, 0x70, 0xce, 0x4d, 0x02, 0xa9, 0x54, 0x77, 0xe1, 0x71, 0x07, 0x4d, 0xdd, 0xcc, + 0xff, 0xaf, 0xb9, 0x6f, 0x5b, 0x6e, 0x1b, 0x49, 0xda, 0xbc, 0xff, 0x9f, 0x82, 0x42, 0x77, 0x4b, + 0x80, 0x09, 0x51, 0x24, 0x65, 0xf7, 0xb8, 0x49, 0x81, 0x0c, 0x5b, 0xb6, 0xbb, 0x15, 0xbf, 0xed, + 0xd6, 0x5a, 0x9e, 0xee, 0x76, 0x68, 0x14, 0x23, 0x88, 0x04, 0x25, 0xfc, 0x86, 0x00, 0x36, 0x00, + 0x1d, 0x3c, 0x14, 0x5f, 0x63, 0x23, 0x76, 0x6f, 0xf6, 0x6a, 0xf7, 0x62, 0xf7, 0xad, 0xf6, 0x09, + 0xf6, 0x11, 0x36, 0x0f, 0x55, 0x85, 0x2a, 0x1c, 0x48, 0xaa, 0xdd, 0x33, 0xbb, 0x13, 0xd3, 0x16, + 0x51, 0xa8, 0x2a, 0xd4, 0x21, 0x2b, 0x2b, 0x2b, 0x2b, 0x33, 0xbf, 0x79, 0xa8, 0x5e, 0x86, 0x73, + 0x29, 0x36, 0x77, 0x2c, 0x59, 0x73, 0x87, 0xdb, 0x46, 0xff, 0xb6, 0xdb, 0x32, 0x11, 0x96, 0x27, + 0x46, 0x2f, 0x92, 0x9f, 0xfc, 0x1c, 0xce, 0xb1, 0x17, 0xfc, 0x44, 0x4b, 0xf4, 0x79, 0xb7, 0xc8, + 0x3a, 0xd3, 0xb2, 0x02, 0x2f, 0x44, 0x6f, 0x7d, 0xe8, 0x3f, 0x33, 0x47, 0x4e, 0x76, 0x78, 0x24, + 0xda, 0xd5, 0x56, 0x3a, 0x43, 0x45, 0x7b, 0xda, 0x30, 0xb8, 0xd6, 0x04, 0xa3, 0xd2, 0x2f, 0xae, + 0xee, 0x06, 0xb0, 0x09, 0x4c, 0x07, 0x0b, 0xa8, 0x6f, 0x00, 0xff, 0x2d, 0x97, 0x4b, 0x7d, 0x13, + 0x3e, 0xb9, 0x99, 0x07, 0xe9, 0xc9, 0x97, 0x78, 0xf2, 0x75, 0x53, 0x87, 0x33, 0x17, 0xc2, 0x76, + 0x19, 0x1e, 0xa8, 0xf9, 0x91, 0xdb, 0x66, 0x08, 0xdb, 0xa6, 0x4a, 0x3c, 0x0d, 0xcf, 0x1a, 0x26, + 0xcd, 0xfa, 0x02, 0x64, 0xe8, 0x09, 0x4b, 0xd9, 0xec, 0xc6, 0x6a, 0x87, 0x42, 0xea, 0xfb, 0x18, + 0xdc, 0xa3, 0xc7, 0xb1, 0xea, 0x63, 0x5d, 0x5d, 0xe5, 0xce, 0x1a, 0x79, 0x50, 0xfd, 0x71, 0x75, + 0x87, 0x03, 0x06, 0x5d, 0x77, 0x37, 0xaa, 0x87, 0x22, 0x05, 0x56, 0x6b, 0xa1, 0xe4, 0xf5, 0x75, + 0x50, 0x8c, 0x22, 0xa8, 0x25, 0xbd, 0x40, 0x64, 0x9e, 0x3a, 0xbf, 0x57, 0x5e, 0x66, 0x04, 0xc6, + 0xc2, 0x52, 0x07, 0xec, 0x3f, 0x31, 0xfe, 0x03, 0xc7, 0xbe, 0x22, 0xa6, 0x87, 0xaf, 0x71, 0x20, + 0xf2, 0x17, 0xb8, 0x17, 0xe0, 0x1f, 0x5f, 0xda, 0x96, 0xd3, 0xda, 0x25, 0x73, 0xf0, 0xbb, 0xb6, + 0x75, 0x8f, 0x7f, 0xd9, 0xbd, 0x00, 0x01, 0x3c, 0xc6, 0x3d, 0xd4, 0xde, 0x20, 0xe4, 0x87, 0xfa, + 0x75, 0xab, 0x7e, 0x65, 0xf4, 0x4b, 0x0b, 0x6f, 0x49, 0x9c, 0x57, 0x5f, 0xe1, 0x04, 0x47, 0x23, + 0x79, 0x55, 0xd1, 0x3f, 0x8c, 0x5d, 0xc6, 0xb2, 0x32, 0x08, 0x3a, 0x34, 0x49, 0xb7, 0x70, 0x3a, + 0x6e, 0x07, 0xda, 0x24, 0x69, 0x13, 0x7a, 0x4b, 0xd1, 0x1c, 0x8c, 0x6c, 0x46, 0x94, 0xe5, 0x84, + 0x2d, 0x60, 0x85, 0x36, 0x08, 0xc1, 0xd9, 0x1a, 0x6b, 0x0a, 0x52, 0x55, 0x93, 0xc8, 0xb6, 0xa2, + 0xa6, 0x0c, 0x4f, 0x3f, 0xbb, 0xa8, 0x2c, 0x2b, 0xd5, 0xa7, 0x77, 0xa4, 0x98, 0xca, 0x53, 0xad, + 0xc0, 0x99, 0xd2, 0xd1, 0x19, 0x75, 0xac, 0xf8, 0xd8, 0x6c, 0x9e, 0xad, 0xfd, 0x0c, 0xd3, 0x1d, + 0xfa, 0xdd, 0xc9, 0xea, 0x65, 0xa9, 0xfa, 0x8a, 0x9b, 0x2a, 0x60, 0x37, 0x72, 0x3c, 0x7a, 0xea, + 0x19, 0x4a, 0x8c, 0xe0, 0xb8, 0xb9, 0x01, 0xc2, 0x0d, 0x1d, 0xb6, 0x67, 0x90, 0x0a, 0x41, 0x0a, + 0xed, 0xdc, 0x3d, 0xd9, 0x38, 0xeb, 0x95, 0x08, 0xa6, 0x26, 0x74, 0x42, 0xf3, 0x49, 0xb5, 0xfd, + 0x29, 0xda, 0xab, 0xf3, 0xfb, 0xeb, 0xf4, 0xbe, 0x71, 0x32, 0x0d, 0xa7, 0x79, 0x22, 0xdc, 0xda, + 0x57, 0xe6, 0x07, 0x65, 0x85, 0x4d, 0x1f, 0x9c, 0xc7, 0x51, 0xb7, 0xfc, 0x45, 0xf9, 0xe2, 0x37, + 0xf3, 0x85, 0x51, 0xaf, 0x2a, 0xb7, 0xa2, 0xe2, 0x43, 0xb3, 0xfc, 0xa8, 0x5f, 0xae, 0xe1, 0xb0, + 0xa1, 0x06, 0x49, 0x8f, 0xc8, 0xc8, 0xf4, 0x1a, 0x50, 0x86, 0x44, 0x46, 0x87, 0x5a, 0x4d, 0xab, + 0x08, 0x18, 0x26, 0xf3, 0x55, 0x2b, 0xd2, 0x22, 0x19, 0x02, 0xbf, 0xc8, 0xdc, 0xc4, 0x59, 0x50, + 0x2c, 0x32, 0xbc, 0x5b, 0x34, 0x7c, 0x37, 0x4e, 0x2d, 0x60, 0xee, 0xc0, 0x1e, 0xd0, 0x2e, 0xde, + 0xb5, 0xc2, 0x39, 0xfc, 0x83, 0xbb, 0x0c, 0xc6, 0xb7, 0x0f, 0x30, 0x62, 0x3f, 0xae, 0x1e, 0x97, + 0x56, 0xa3, 0x4b, 0x7a, 0x09, 0x8d, 0xce, 0x5d, 0xeb, 0x72, 0x82, 0xe8, 0x01, 0x48, 0x9a, 0xf4, + 0x2f, 0xe6, 0xc4, 0x79, 0x86, 0x7f, 0x6f, 0xf1, 0x5f, 0x9c, 0x02, 0x97, 0x07, 0xcc, 0xe5, 0x5e, + 0xbb, 0x3c, 0xba, 0x2e, 0xb5, 0xfc, 0xcc, 0x89, 0x51, 0xe7, 0x99, 0x4f, 0x5b, 0x2c, 0x0b, 0x07, + 0x14, 0x0b, 0x53, 0xde, 0xea, 0x0d, 0x39, 0x76, 0x1a, 0x36, 0x98, 0xc5, 0x9e, 0x17, 0xf1, 0xf4, + 0xf5, 0x7d, 0x30, 0x81, 0xb3, 0xb3, 0x7d, 0x2e, 0x04, 0x20, 0x2c, 0xb3, 0x77, 0xee, 0x5a, 0x24, + 0x02, 0x65, 0x21, 0x7a, 0xfe, 0xd9, 0xb2, 0xe3, 0x36, 0x48, 0xe8, 0x7c, 0x04, 0x0d, 0xf5, 0xa8, + 0x3a, 0xb1, 0x43, 0xe4, 0x0f, 0x27, 0x2f, 0x33, 0x91, 0x98, 0xaf, 0x3b, 0x81, 0x63, 0x20, 0x11, + 0xf8, 0x69, 0x76, 0xc6, 0x06, 0x8a, 0xd3, 0x7a, 0x03, 0x45, 0xf8, 0xb2, 0xa7, 0x6f, 0x44, 0xca, + 0xde, 0xa0, 0xe2, 0x48, 0x85, 0x87, 0x6a, 0x61, 0x73, 0x50, 0xc4, 0x2d, 0x0a, 0x74, 0xe3, 0x1e, + 0x15, 0x2c, 0x5d, 0x04, 0x7e, 0xdc, 0xd1, 0x7a, 0xb7, 0xc3, 0x81, 0x8b, 0x26, 0x95, 0xa8, 0x45, + 0x38, 0x6b, 0xed, 0x4c, 0xd7, 0x70, 0x4c, 0x05, 0xe4, 0xc0, 0xbc, 0x48, 0x27, 0xd2, 0x11, 0x4a, + 0x59, 0x9c, 0x60, 0xb3, 0xc0, 0x46, 0x9e, 0xda, 0x6a, 0xcf, 0xfa, 0xdb, 0xce, 0x4e, 0x3b, 0xec, + 0xa0, 0xe3, 0xd9, 0x8e, 0xbb, 0x43, 0xa3, 0xb5, 0xe3, 0x2e, 0x76, 0x92, 0x18, 0x7a, 0xd6, 0xb6, + 0x53, 0xba, 0x8e, 0xdc, 0xd4, 0x5b, 0x9b, 0x73, 0x6f, 0xe2, 0xa8, 0xcd, 0x4d, 0x27, 0x82, 0x34, + 0x3b, 0x15, 0x92, 0x6f, 0x9c, 0x5b, 0x6c, 0x15, 0xa5, 0xb7, 0x90, 0xc6, 0x2f, 0x91, 0x8a, 0xcb, + 0x2f, 0x21, 0x4d, 0xdb, 0x41, 0xca, 0x25, 0x83, 0x54, 0x70, 0x2c, 0xa0, 0xe1, 0xf2, 0x4b, 0x4d, + 0xc6, 0x2b, 0xb8, 0x5a, 0x63, 0x9e, 0x63, 0xc5, 0xf0, 0xd3, 0xfa, 0x5c, 0xf0, 0x46, 0x64, 0xb9, + 0x2f, 0x4f, 0x5a, 0x8d, 0xf1, 0x6c, 0x8a, 0x17, 0x31, 0xc8, 0x59, 0x67, 0xd2, 0x7a, 0xb6, 0xe0, + 0xc5, 0xd9, 0xd9, 0xc3, 0x83, 0xad, 0x3f, 0x82, 0xd8, 0xea, 0x18, 0xef, 0x89, 0xec, 0xbd, 0xd0, + 0x0d, 0x75, 0x9e, 0x29, 0x19, 0x09, 0x31, 0xcb, 0xba, 0x16, 0x1a, 0x5c, 0xd7, 0x4c, 0xbb, 0x72, + 0xd6, 0xae, 0x4b, 0xdc, 0x1e, 0x58, 0xea, 0xdf, 0x64, 0x61, 0x2a, 0xfd, 0x9d, 0xb6, 0x95, 0x96, + 0xdb, 0x54, 0xd9, 0x7e, 0x79, 0xfc, 0x90, 0x11, 0xd5, 0xe6, 0xed, 0x5c, 0x4e, 0x90, 0x2f, 0x8e, + 0x7a, 0xda, 0xde, 0x5b, 0xca, 0x57, 0xec, 0xb5, 0x6e, 0x58, 0xd9, 0x37, 0x35, 0x96, 0x6f, 0x14, + 0xf3, 0xed, 0xb0, 0x69, 0xe3, 0x33, 0xb6, 0x81, 0xfa, 0x6f, 0x19, 0x45, 0x84, 0xc0, 0xeb, 0x9a, + 0x0c, 0xc5, 0x91, 0xea, 0xb3, 0xae, 0x62, 0xd7, 0x31, 0xfc, 0x8e, 0x0f, 0x22, 0x60, 0x8c, 0x6d, + 0x07, 0xc3, 0x7f, 0x1c, 0xac, 0xac, 0x6f, 0x7b, 0x5b, 0xb2, 0xb2, 0xf8, 0xac, 0x2c, 0x36, 0x4b, + 0xfd, 0x65, 0x43, 0x1f, 0x82, 0xb3, 0xa1, 0xb6, 0x13, 0xc6, 0x66, 0xbf, 0x73, 0x9d, 0xac, 0x62, + 0x93, 0xec, 0xe2, 0x32, 0xd9, 0xc5, 0x24, 0x22, 0xc0, 0x91, 0x29, 0xbd, 0x99, 0x80, 0x3c, 0x1a, + 0x4c, 0x0f, 0xa3, 0x24, 0x0e, 0xec, 0xb0, 0x9a, 0xa7, 0xd4, 0x92, 0x0b, 0x1f, 0xb6, 0x4b, 0x71, + 0x1f, 0x5c, 0xa1, 0x62, 0x93, 0x34, 0x51, 0x75, 0x77, 0xdf, 0xce, 0x3b, 0x77, 0x88, 0x49, 0xb2, + 0x32, 0xeb, 0x15, 0x66, 0xfd, 0x02, 0x59, 0xaf, 0x90, 0xd4, 0xa2, 0xed, 0xed, 0xc4, 0x59, 0xd3, + 0x8c, 0xeb, 0xf9, 0xc4, 0xeb, 0xb9, 0x6b, 0x33, 0x5d, 0x6d, 0x92, 0xe9, 0x76, 0x7d, 0x26, 0x1e, + 0x7f, 0xef, 0x34, 0x3f, 0xd3, 0xb5, 0x70, 0x0b, 0x02, 0x03, 0x25, 0x44, 0xcf, 0x5b, 0x82, 0xf5, + 0xc4, 0x7f, 0xee, 0x07, 0x6b, 0x86, 0x65, 0xb7, 0xe7, 0x7e, 0x59, 0x93, 0xe7, 0x0a, 0xf2, 0x5c, + 0x0d, 0x7a, 0xee, 0xdd, 0xa0, 0xb7, 0x1c, 0x6e, 0x30, 0x12, 0xfd, 0x3f, 0x6d, 0x24, 0xfa, 0x1b, + 0x8f, 0x84, 0x1b, 0x9c, 0x2d, 0x9b, 0xf2, 0xd2, 0x51, 0x3f, 0xd4, 0x9e, 0x60, 0xf5, 0x9d, 0xb9, + 0x2b, 0x72, 0x23, 0xf3, 0x94, 0x8a, 0x81, 0x35, 0xd9, 0xf0, 0x60, 0x0f, 0x34, 0xf5, 0x04, 0x88, + 0xc5, 0x0d, 0xda, 0x6d, 0x3d, 0x0a, 0x60, 0x75, 0x55, 0xc0, 0xde, 0x9e, 0x90, 0xbe, 0xa4, 0xcc, + 0xe5, 0x4c, 0x6d, 0xce, 0xec, 0xb2, 0xc5, 0x81, 0xd8, 0x81, 0x1d, 0xc2, 0x21, 0xae, 0x24, 0x69, + 0xc4, 0x8e, 0xcb, 0x95, 0xac, 0xab, 0x07, 0x39, 0xea, 0x86, 0x15, 0x01, 0x99, 0x1b, 0xc8, 0xa2, + 0x22, 0x2b, 0xaf, 0xff, 0x0c, 0x16, 0xeb, 0x90, 0x6f, 0x1d, 0x85, 0x8a, 0xca, 0xcd, 0x80, 0x39, + 0xa0, 0xa6, 0x60, 0x2e, 0x73, 0xb2, 0x2a, 0x21, 0x73, 0xd4, 0xf3, 0xe6, 0xd7, 0xa3, 0x4d, 0xf2, + 0xe6, 0x91, 0x40, 0x34, 0x07, 0x29, 0xf0, 0x38, 0xb9, 0x23, 0xf1, 0xf2, 0xe8, 0x18, 0xfe, 0xf9, + 0xc8, 0x62, 0xe7, 0x87, 0x80, 0xf0, 0x5d, 0xe0, 0xd7, 0x2f, 0x41, 0x9a, 0xa1, 0xeb, 0xa0, 0x2b, + 0x63, 0x9a, 0x58, 0x7c, 0xf9, 0x8b, 0x09, 0x69, 0xf8, 0x1d, 0xfc, 0xf9, 0xd1, 0xbf, 0xbe, 0x46, + 0xf0, 0x26, 0x8a, 0x55, 0x82, 0xff, 0xb6, 0x3e, 0x04, 0x3e, 0x4a, 0xad, 0x6f, 0x81, 0xca, 0x8f, + 0xbf, 0x11, 0x3f, 0x7e, 0xc1, 0x1f, 0xef, 0x88, 0xae, 0xf0, 0x9b, 0x48, 0x59, 0x5d, 0xf9, 0x23, + 0x93, 0x3f, 0x50, 0x28, 0x3d, 0x41, 0x85, 0x86, 0x12, 0x4b, 0xaf, 0xe4, 0x0d, 0xca, 0x2c, 0x89, + 0xf3, 0x5d, 0x84, 0xf3, 0x1b, 0x3c, 0xef, 0x7e, 0x37, 0x54, 0x01, 0xdd, 0xaf, 0x0c, 0x19, 0x55, + 0xc4, 0x4d, 0xea, 0x9a, 0x8e, 0xd1, 0x72, 0xbc, 0x79, 0xa4, 0xd0, 0x40, 0x8b, 0x14, 0x4d, 0x08, + 0x46, 0x09, 0x63, 0x1c, 0x69, 0xd3, 0xcc, 0xf7, 0x18, 0xa8, 0x07, 0x32, 0xe6, 0x9a, 0x67, 0x8f, + 0x2c, 0x19, 0xd2, 0x62, 0xaa, 0xe5, 0x96, 0x11, 0xa9, 0xb9, 0x0f, 0x78, 0xee, 0x1d, 0x97, 0xac, + 0x03, 0xf4, 0x4c, 0x4e, 0xf9, 0x5a, 0x42, 0x7f, 0x49, 0x97, 0x13, 0x5a, 0x1d, 0x15, 0xf5, 0x8a, + 0x7e, 0xda, 0x33, 0x9f, 0x88, 0x9d, 0x94, 0x92, 0x80, 0xc2, 0x81, 0xa9, 0x62, 0x34, 0x43, 0xbc, + 0x3e, 0x84, 0xaa, 0x97, 0x01, 0x86, 0x45, 0x3b, 0xe8, 0x8e, 0x33, 0x18, 0x28, 0x39, 0xf1, 0x2d, + 0x54, 0xa6, 0x63, 0xd8, 0xa5, 0x69, 0x98, 0xa1, 0xe5, 0xdc, 0xb4, 0x83, 0x86, 0x0a, 0x54, 0x11, + 0xec, 0x26, 0x98, 0xf3, 0x7d, 0xd2, 0x4a, 0x30, 0xc0, 0x34, 0xc7, 0x8e, 0x86, 0x22, 0x59, 0x6b, + 0x86, 0x22, 0x35, 0xea, 0xce, 0x32, 0x9a, 0x1c, 0xb2, 0xb8, 0x43, 0x7d, 0x78, 0xe1, 0xa7, 0x9e, + 0xb5, 0xeb, 0x24, 0x5a, 0xdd, 0xc6, 0x49, 0xe8, 0x1a, 0x61, 0x0a, 0x5f, 0xbd, 0x3a, 0x6e, 0x81, + 0x60, 0xab, 0x09, 0x9a, 0x6b, 0x4b, 0x6b, 0x1a, 0x2f, 0xa8, 0x40, 0x3d, 0x95, 0x65, 0xd5, 0xcf, + 0xb1, 0x71, 0xed, 0x98, 0x99, 0x51, 0x68, 0x85, 0x9e, 0x74, 0xc3, 0xf0, 0xb3, 0x34, 0x24, 0x1b, + 0x45, 0x9f, 0x55, 0xa1, 0xd2, 0x6f, 0xa2, 0x29, 0x21, 0x9c, 0xe3, 0xc7, 0x5a, 0xf8, 0xb5, 0x16, + 0xde, 0xd2, 0x31, 0x6a, 0x45, 0x6d, 0x58, 0xda, 0x32, 0x80, 0x05, 0x5d, 0x31, 0x99, 0xfa, 0x26, + 0x49, 0x10, 0x6e, 0xb0, 0x26, 0x24, 0x6f, 0x05, 0x82, 0x85, 0xcc, 0xa9, 0x98, 0xb2, 0x19, 0xd3, + 0x28, 0x10, 0xf7, 0x6f, 0x43, 0xe5, 0xfa, 0xef, 0x63, 0x18, 0x22, 0xfc, 0xce, 0xa6, 0xa1, 0x03, + 0x30, 0xc6, 0x29, 0xd4, 0x07, 0x67, 0xe0, 0x66, 0xc4, 0xd8, 0x9c, 0x02, 0x11, 0x48, 0xc0, 0x94, + 0x5f, 0xf0, 0x2e, 0x83, 0x50, 0x3f, 0x2f, 0x61, 0x6e, 0x80, 0x0d, 0x5c, 0xdb, 0x8e, 0x54, 0xa0, + 0x05, 0x9d, 0x2b, 0x3f, 0x7b, 0x91, 0x43, 0xe2, 0x05, 0x0a, 0xb0, 0xd6, 0xb5, 0x7f, 0x6f, 0x39, + 0xe3, 0xa0, 0xe3, 0xcb, 0x24, 0x8a, 0x0a, 0xc8, 0x26, 0x3c, 0x83, 0xfe, 0xb3, 0x67, 0x12, 0xfa, + 0x42, 0x0f, 0xe8, 0x43, 0x2f, 0xf7, 0x32, 0x07, 0x84, 0x33, 0x42, 0x5c, 0x00, 0xa6, 0xd0, 0xe7, + 0x6b, 0xc1, 0xc8, 0xab, 0xa0, 0xc6, 0xfe, 0xc0, 0xa0, 0xb1, 0xec, 0xa7, 0x72, 0x71, 0x89, 0xd7, + 0x55, 0xf1, 0xf2, 0x3b, 0x99, 0x30, 0xd9, 0xfd, 0x5e, 0xa4, 0x38, 0xe7, 0xc3, 0x26, 0x80, 0xb2, + 0x68, 0x29, 0x83, 0xcf, 0x69, 0xa3, 0xd7, 0x34, 0x90, 0x0a, 0x51, 0x8c, 0xd5, 0xc1, 0x3c, 0x7e, + 0xbe, 0xb0, 0xa0, 0x50, 0x97, 0xe3, 0xd2, 0x46, 0xa9, 0x00, 0xe0, 0xd4, 0xa0, 0x75, 0x08, 0x40, + 0xb3, 0x03, 0xdb, 0x26, 0x54, 0xfc, 0x47, 0x3f, 0x59, 0x87, 0x73, 0x43, 0xf3, 0x7a, 0x41, 0x9f, + 0x10, 0xa8, 0x2d, 0x25, 0xfa, 0x41, 0xf3, 0x3c, 0x02, 0xab, 0xe9, 0x16, 0xd0, 0x69, 0x6c, 0x51, + 0x16, 0xa0, 0xd1, 0x99, 0xa4, 0x25, 0x9e, 0xc9, 0x1a, 0xbb, 0xb3, 0x40, 0x33, 0x4d, 0x73, 0xe3, + 0xfa, 0x1c, 0x85, 0x59, 0x5a, 0xd5, 0xd6, 0x3e, 0x1b, 0x10, 0x98, 0x49, 0xbc, 0x9b, 0x69, 0xf1, + 0x18, 0x54, 0xd5, 0x9f, 0xce, 0xf1, 0x92, 0xd3, 0xa8, 0x0b, 0x93, 0x42, 0xaf, 0xd4, 0x00, 0x60, + 0xc9, 0xa5, 0x0f, 0xba, 0x13, 0x23, 0x25, 0x99, 0x41, 0xd2, 0x94, 0x95, 0x4f, 0xd7, 0x9f, 0x4f, + 0x3e, 0xfd, 0x04, 0x5c, 0x6e, 0x5e, 0x3c, 0xbe, 0x62, 0xb8, 0xbf, 0x30, 0x7b, 0x87, 0x52, 0x7f, + 0x36, 0xf2, 0xc8, 0x19, 0xdf, 0xe1, 0x39, 0xe4, 0x7b, 0xba, 0xae, 0xeb, 0x23, 0x99, 0xf2, 0xdf, + 0x30, 0x46, 0xe0, 0xe0, 0x04, 0xa3, 0x09, 0x8a, 0xd7, 0x3d, 0x37, 0xa1, 0xd7, 0xf4, 0x97, 0x5f, + 0x87, 0xf4, 0x83, 0xdd, 0xfa, 0x43, 0x7a, 0x29, 0x8d, 0xf2, 0x40, 0x26, 0x4c, 0x8b, 0x97, 0x6d, + 0x7a, 0xd2, 0x5e, 0xbb, 0xd3, 0xed, 0xed, 0x69, 0x83, 0x11, 0x22, 0xec, 0x17, 0xf3, 0x86, 0x57, + 0x93, 0xed, 0xed, 0x49, 0xa3, 0x39, 0x18, 0x0b, 0xbb, 0xa5, 0x8a, 0x4b, 0xf6, 0x7f, 0xa5, 0xba, + 0x4b, 0x6f, 0x4b, 0xd5, 0x6b, 0x5f, 0x16, 0x9c, 0x46, 0xcd, 0xbd, 0x2f, 0xe9, 0x41, 0xbb, 0x84, + 0x4e, 0x1a, 0x29, 0x20, 0x07, 0x0a, 0x18, 0x46, 0x4f, 0xbc, 0x70, 0x97, 0x8d, 0x53, 0xcd, 0xa9, + 0x44, 0xe3, 0x68, 0x36, 0x3b, 0x01, 0x12, 0x41, 0x0b, 0x6e, 0xc8, 0x36, 0xea, 0x39, 0x8b, 0x74, + 0x7b, 0x3b, 0x6d, 0xee, 0xac, 0x86, 0xf1, 0xa8, 0x8c, 0x79, 0x4c, 0x0b, 0x89, 0x73, 0xb2, 0x90, + 0x38, 0xd5, 0xae, 0x89, 0x0b, 0xbf, 0xd9, 0xa5, 0x75, 0xc6, 0x9f, 0xcc, 0xa5, 0x10, 0x57, 0x6f, + 0x5f, 0x41, 0xd7, 0xab, 0x9a, 0x8c, 0xea, 0xc6, 0x46, 0xd3, 0xc9, 0xe3, 0x1d, 0x2a, 0x8a, 0x09, + 0x7b, 0x51, 0xd9, 0x9c, 0xfd, 0xef, 0xff, 0xfc, 0x3f, 0xd0, 0xe4, 0x6c, 0x1c, 0x37, 0x36, 0x7f, + 0x10, 0x37, 0x45, 0xe9, 0x64, 0x11, 0x99, 0xee, 0xee, 0x57, 0x84, 0xfb, 0x94, 0x0d, 0xc8, 0xe7, + 0xe7, 0x86, 0xe1, 0x2b, 0xf1, 0xb4, 0x4b, 0xcf, 0x12, 0xa8, 0x26, 0x0e, 0x99, 0xc4, 0xc1, 0xb9, + 0x7d, 0x7c, 0x49, 0xb8, 0x3d, 0x6f, 0x5f, 0xbf, 0xca, 0xac, 0x41, 0x8f, 0xe2, 0x9a, 0xd8, 0x90, + 0xad, 0x47, 0xee, 0x56, 0xb0, 0xaa, 0x61, 0x5b, 0xd9, 0x32, 0x7a, 0x76, 0x99, 0x42, 0xcd, 0xcc, + 0xde, 0x6f, 0xea, 0x97, 0x3c, 0xe5, 0x90, 0x64, 0x30, 0x6b, 0x60, 0x1c, 0xf3, 0x89, 0xca, 0x83, + 0x66, 0x68, 0x18, 0x94, 0xe1, 0xc6, 0x13, 0x71, 0x3f, 0xaf, 0x78, 0x0f, 0x98, 0x04, 0x68, 0x8d, + 0xbc, 0x67, 0xdf, 0xb4, 0x67, 0x8e, 0x33, 0x14, 0x08, 0xf0, 0x57, 0x68, 0x20, 0x72, 0x33, 0xea, + 0x3d, 0x3c, 0xcc, 0x46, 0x5d, 0x32, 0xf5, 0x05, 0x79, 0xa5, 0x65, 0x7f, 0xbb, 0xb8, 0x5a, 0xb6, + 0x6e, 0xc3, 0x34, 0xbf, 0xf1, 0x23, 0xe7, 0x1c, 0x04, 0x73, 0xb4, 0xb2, 0x95, 0x6b, 0x99, 0x73, + 0x59, 0xad, 0x53, 0xbc, 0x7c, 0x9d, 0x9f, 0x95, 0x46, 0x0a, 0xe8, 0xd0, 0xc0, 0xc7, 0xb9, 0x34, + 0x25, 0x44, 0xb4, 0xd8, 0x11, 0x1e, 0xb0, 0xbf, 0x84, 0xc1, 0x1d, 0x88, 0xb1, 0x8a, 0x79, 0x5a, + 0x04, 0x80, 0x45, 0x9f, 0x2a, 0xe5, 0xd2, 0x51, 0x92, 0x2b, 0xaf, 0xd8, 0xb2, 0x52, 0xda, 0x38, + 0xb8, 0xfe, 0x50, 0xbb, 0xf6, 0x49, 0x14, 0x5c, 0x4c, 0x50, 0x35, 0x37, 0xb6, 0xda, 0x49, 0xdb, + 0xca, 0x94, 0xc1, 0xb1, 0xbb, 0xb5, 0x65, 0xbe, 0xf9, 0x44, 0x56, 0x70, 0x79, 0x53, 0xc1, 0x4f, + 0x45, 0xc9, 0xac, 0x21, 0x4f, 0x20, 0xb3, 0xec, 0x36, 0x7d, 0x33, 0x6e, 0x2a, 0xf9, 0xa9, 0xa1, + 0xa8, 0xf6, 0xd5, 0xc8, 0x0b, 0x9e, 0xcc, 0x5c, 0xdf, 0xcb, 0xe1, 0x5f, 0x14, 0x68, 0x38, 0xd8, + 0x6a, 0xd7, 0xd5, 0xc5, 0x7a, 0xbc, 0x69, 0x8b, 0x0e, 0x4a, 0x36, 0xec, 0xd2, 0x1e, 0x46, 0xa9, + 0x5e, 0x12, 0x1b, 0x63, 0xf8, 0xa0, 0x9e, 0x86, 0x49, 0x05, 0x38, 0xa8, 0x1d, 0xc2, 0x39, 0x32, + 0xc3, 0xdd, 0x40, 0xa5, 0xa4, 0x6e, 0xde, 0x66, 0xb5, 0xd7, 0xc4, 0x8f, 0x6f, 0xfd, 0xec, 0x38, + 0x08, 0x3e, 0x0b, 0x33, 0x1b, 0xf5, 0x8c, 0x86, 0xe5, 0x93, 0xfc, 0x9e, 0x27, 0x65, 0xa2, 0xbf, + 0x95, 0xa1, 0x8f, 0x80, 0xa5, 0x40, 0x06, 0x6f, 0xd2, 0x21, 0x31, 0x28, 0x46, 0x27, 0x25, 0xdb, + 0xea, 0xe3, 0x1d, 0x00, 0xb6, 0x57, 0xec, 0x2b, 0x45, 0x66, 0xd8, 0x5a, 0xb8, 0x01, 0x61, 0x6c, + 0x77, 0x7e, 0x78, 0xfe, 0x44, 0x20, 0x76, 0x12, 0x7d, 0x91, 0xd3, 0xa3, 0xbb, 0xdf, 0x7d, 0x12, + 0x02, 0x09, 0x7a, 0xe1, 0x08, 0xaf, 0x02, 0xc3, 0xbd, 0x14, 0xeb, 0xef, 0xf0, 0x47, 0x3b, 0x14, + 0x3f, 0xcc, 0xb3, 0xa7, 0x9d, 0x84, 0xbc, 0x1a, 0xa9, 0xc4, 0xe8, 0x79, 0xb7, 0x3b, 0x9e, 0x0f, + 0xf6, 0x41, 0x74, 0x7c, 0x02, 0xd4, 0x59, 0x64, 0xe6, 0xf0, 0x63, 0x5e, 0xb9, 0xf8, 0x5e, 0xf8, + 0x24, 0x75, 0x8b, 0x2e, 0x8a, 0x3a, 0xcb, 0xb9, 0xf4, 0x1c, 0xd5, 0x8a, 0x38, 0x85, 0x3f, 0x86, + 0x22, 0xec, 0x07, 0xc4, 0x1a, 0xea, 0xba, 0x5d, 0xb7, 0x5a, 0x4d, 0xb9, 0x10, 0x2f, 0xe2, 0x1b, + 0x58, 0xfa, 0xd5, 0x86, 0xb9, 0x57, 0xde, 0xe9, 0x29, 0xca, 0x79, 0x50, 0xd5, 0x99, 0x7b, 0xda, + 0x75, 0xe9, 0x37, 0xfd, 0xa2, 0xdf, 0xf0, 0x8b, 0xdf, 0x16, 0xbf, 0x7b, 0xdf, 0x73, 0x0e, 0xfc, + 0xcd, 0xb9, 0xcb, 0xa6, 0x60, 0xeb, 0xa9, 0x05, 0x98, 0x0c, 0x99, 0x89, 0xad, 0xce, 0x89, 0x5b, + 0x8c, 0x8d, 0x6d, 0x46, 0xa1, 0x92, 0x46, 0xde, 0xdb, 0xa7, 0xee, 0x01, 0xdf, 0x48, 0x3e, 0x07, + 0x27, 0x7c, 0x5c, 0xbd, 0xbb, 0x0a, 0xf1, 0x1a, 0xb9, 0x48, 0xa7, 0xa1, 0x81, 0x75, 0xec, 0x66, + 0x40, 0xd7, 0xf1, 0x93, 0x99, 0xb0, 0x59, 0xbb, 0xad, 0x5b, 0x29, 0x41, 0x1b, 0x75, 0xd1, 0x6a, + 0x45, 0x5c, 0x37, 0xe4, 0x41, 0xcf, 0x33, 0x95, 0xe9, 0xa8, 0x21, 0x13, 0x3a, 0x82, 0xa9, 0x4c, + 0x17, 0x9e, 0xf1, 0x8e, 0xac, 0xff, 0x24, 0xff, 0x77, 0x3f, 0x97, 0x5e, 0x7e, 0xd2, 0xde, 0x7d, + 0x6b, 0xbe, 0xbb, 0x0e, 0xb5, 0x77, 0x77, 0xa5, 0x77, 0x7a, 0xb9, 0x13, 0xf3, 0x5d, 0x3e, 0x2f, + 0xde, 0x0d, 0xcd, 0x31, 0xec, 0xb9, 0xdf, 0x8a, 0x71, 0xa5, 0xc8, 0xa2, 0xc7, 0xb0, 0x3a, 0x10, + 0x44, 0x15, 0x9e, 0x71, 0xe3, 0xfb, 0x08, 0x6b, 0xb9, 0x9d, 0xed, 0xf5, 0x91, 0x33, 0x70, 0x2a, + 0x96, 0xd4, 0x53, 0xdb, 0x38, 0xa6, 0xda, 0x78, 0xc3, 0xe9, 0xc2, 0xbd, 0x5b, 0x53, 0x23, 0x96, + 0xc2, 0xd2, 0xe5, 0x1a, 0xb9, 0xbe, 0xe2, 0x4d, 0x51, 0xe3, 0xe7, 0xf5, 0x6d, 0x7c, 0xfe, 0x64, + 0xd6, 0xee, 0x81, 0x0c, 0x08, 0xff, 0x54, 0x5a, 0xfa, 0xbc, 0xb6, 0xfd, 0xcf, 0xcd, 0xf6, 0x9b, + 0x6f, 0x76, 0xa9, 0xae, 0x98, 0x7e, 0x94, 0x5b, 0x73, 0xb1, 0xae, 0x35, 0x5c, 0x56, 0x34, 0xc9, + 0xac, 0x5d, 0xbe, 0x68, 0xe8, 0x7b, 0xed, 0x9b, 0xdd, 0xa2, 0xbe, 0x9a, 0xd6, 0x9c, 0xac, 0x1d, + 0xed, 0xfa, 0x6f, 0x55, 0x46, 0x59, 0x08, 0x67, 0xd7, 0xed, 0xa3, 0x62, 0xd3, 0x7b, 0xcb, 0x06, + 0x17, 0x05, 0x70, 0xa4, 0x86, 0x99, 0xf6, 0xec, 0x59, 0xbb, 0xf7, 0x0c, 0xce, 0x80, 0x64, 0x9d, + 0x99, 0x4b, 0x93, 0x43, 0xb6, 0x4a, 0x84, 0x7c, 0x64, 0xa0, 0xec, 0xf2, 0xcf, 0x1e, 0xfe, 0x6c, + 0xf1, 0xef, 0x3e, 0xfc, 0x76, 0xce, 0x69, 0x7f, 0xf9, 0xa8, 0xed, 0x2d, 0x09, 0xfc, 0x4e, 0x0e, + 0xe2, 0x61, 0xd2, 0xf6, 0x0a, 0x3b, 0x64, 0x36, 0x8f, 0xc9, 0x86, 0xa1, 0x9e, 0xc8, 0x8e, 0x0d, + 0xd7, 0xe4, 0xd1, 0x20, 0xd3, 0x70, 0x97, 0x4a, 0x21, 0x2d, 0x95, 0xf6, 0xc9, 0x13, 0x2f, 0x6c, + 0xa7, 0x70, 0xb0, 0x48, 0xda, 0x39, 0x51, 0xfc, 0x2c, 0x8c, 0x22, 0xe6, 0x11, 0x6f, 0xed, 0xab, + 0xd3, 0xe0, 0xbb, 0x2b, 0xc1, 0x56, 0xce, 0xdc, 0x8f, 0x7b, 0x31, 0x9c, 0x5f, 0xdd, 0xba, 0x21, + 0xf4, 0xd3, 0x09, 0x8c, 0xd7, 0x6c, 0xaf, 0xdf, 0x9e, 0xd0, 0x98, 0xe1, 0xaf, 0x29, 0xfc, 0xea, + 0x3c, 0x85, 0x7f, 0x80, 0x0d, 0xb2, 0xf1, 0xe8, 0xf1, 0x11, 0xe7, 0xc6, 0x4f, 0x40, 0xc1, 0x8f, + 0xed, 0xb6, 0x66, 0x2b, 0x74, 0x68, 0xb3, 0x89, 0x56, 0xd1, 0xf0, 0xf5, 0x0c, 0x11, 0x98, 0x74, + 0xce, 0xd7, 0x1c, 0xeb, 0x58, 0xa2, 0xb3, 0xa0, 0x0f, 0xc3, 0x5b, 0xcf, 0x7a, 0xda, 0x9d, 0xdf, + 0xb7, 0x5e, 0x60, 0xe0, 0x66, 0xcb, 0x35, 0x7b, 0x2c, 0x4d, 0x25, 0x54, 0x32, 0xca, 0xc4, 0x76, + 0xee, 0x8a, 0x45, 0x2c, 0xc9, 0xab, 0xaf, 0x91, 0x2b, 0x57, 0xd9, 0x6f, 0xae, 0x92, 0x19, 0xed, + 0x50, 0xf3, 0x43, 0x29, 0x5d, 0xd8, 0xdd, 0xf2, 0x35, 0xdd, 0xd0, 0xf8, 0x66, 0xe0, 0xca, 0xc5, + 0xc1, 0xa4, 0xbc, 0x5c, 0xda, 0x1b, 0x70, 0x7d, 0xca, 0xf2, 0xee, 0x95, 0xa1, 0x5b, 0xb2, 0x28, + 0x54, 0x6e, 0xeb, 0xd7, 0x27, 0x3f, 0x79, 0x6f, 0x0f, 0x07, 0x2d, 0xab, 0x1d, 0x82, 0xa0, 0x7c, + 0x0f, 0x7f, 0x53, 0xf8, 0xeb, 0xe1, 0xf3, 0x93, 0x54, 0x5c, 0x46, 0x51, 0x49, 0xd3, 0x65, 0x6a, + 0xdd, 0x47, 0xc7, 0x56, 0x48, 0xc1, 0xaf, 0x95, 0x27, 0x95, 0x74, 0x3f, 0x1a, 0x79, 0x5d, 0x38, + 0x6d, 0x81, 0x48, 0x32, 0x06, 0x89, 0x18, 0x31, 0xe2, 0x45, 0xba, 0x74, 0x32, 0x32, 0x9c, 0x8b, + 0xde, 0xa7, 0x86, 0xfb, 0x91, 0x4c, 0x6c, 0x74, 0x41, 0x92, 0x19, 0xd0, 0x0d, 0xa9, 0x72, 0xbd, + 0xb8, 0x0a, 0xc2, 0xda, 0x72, 0x6f, 0xe8, 0x30, 0xa0, 0xab, 0x54, 0x0b, 0x3b, 0x29, 0xed, 0x9e, + 0x11, 0xef, 0xaf, 0xd0, 0xa2, 0xae, 0x6a, 0xb1, 0x0d, 0xc3, 0x45, 0xbb, 0x70, 0x22, 0xf1, 0x68, + 0x86, 0x2c, 0x73, 0x9d, 0x5a, 0x5f, 0x82, 0x28, 0x4a, 0x50, 0xb4, 0xe6, 0xb0, 0xe8, 0xae, 0x85, + 0x7a, 0x98, 0x18, 0x91, 0xa1, 0x24, 0x5d, 0x9d, 0xc1, 0x3a, 0x6b, 0xac, 0x70, 0xca, 0x15, 0xee, + 0xf6, 0x9c, 0x86, 0x0c, 0xe4, 0x06, 0x76, 0x1a, 0x9c, 0xd1, 0xd0, 0xda, 0xd3, 0x53, 0xf9, 0x7c, + 0xe6, 0x05, 0xe5, 0x22, 0x53, 0xc3, 0xac, 0x5c, 0xb8, 0x21, 0x08, 0xf3, 0xf6, 0xdd, 0xde, 0x16, + 0xf0, 0x08, 0xb2, 0xc7, 0x93, 0xf4, 0xab, 0x76, 0xe6, 0xd9, 0xde, 0x3e, 0x0c, 0xd3, 0x1a, 0x5a, + 0x16, 0xc7, 0x29, 0xa5, 0x01, 0x66, 0x05, 0x4e, 0xc6, 0xa3, 0x38, 0xd7, 0x95, 0xdb, 0xa6, 0x73, + 0x84, 0xc8, 0xa7, 0x37, 0x2d, 0x1e, 0x79, 0xf6, 0xbc, 0x5d, 0xa9, 0x0a, 0x0d, 0xc2, 0x04, 0xb3, + 0x2e, 0xbe, 0x3e, 0x01, 0x66, 0x34, 0x91, 0xcc, 0xc8, 0x59, 0xde, 0x7b, 0xf9, 0x77, 0xa1, 0xfb, + 0xa5, 0x68, 0x7b, 0xbe, 0x17, 0x3a, 0xe6, 0xc2, 0x85, 0x73, 0x09, 0x71, 0xa2, 0x7b, 0x58, 0x43, + 0x9d, 0x7d, 0xc5, 0x98, 0xbe, 0x00, 0x43, 0x1f, 0xb2, 0xa9, 0x7d, 0xe0, 0x25, 0xea, 0x58, 0x0b, + 0xcc, 0x24, 0x18, 0xed, 0xc2, 0x32, 0x4a, 0xc8, 0x08, 0x73, 0x82, 0xc6, 0xb6, 0x70, 0xe2, 0x8c, + 0x81, 0x4b, 0x99, 0x1d, 0x4a, 0xf4, 0x1e, 0xdc, 0x7b, 0x09, 0xb4, 0xd6, 0x6c, 0x09, 0xa6, 0xe8, + 0x8d, 0x11, 0xa3, 0x77, 0x11, 0xf9, 0x93, 0xcf, 0xd6, 0x1a, 0xfe, 0x79, 0xaf, 0x37, 0x73, 0x25, + 0xff, 0x1c, 0x1e, 0xda, 0xe6, 0x1d, 0x10, 0x51, 0x72, 0xe5, 0xd4, 0xc7, 0x6b, 0x85, 0x6f, 0x82, + 0x5a, 0xb4, 0x56, 0x10, 0xfc, 0xc0, 0x6a, 0xdf, 0xb4, 0x2d, 0xe0, 0x06, 0x50, 0xc4, 0xa5, 0x7a, + 0x1c, 0x67, 0x70, 0x68, 0x57, 0x74, 0x6b, 0x88, 0x55, 0xc3, 0xf7, 0x8b, 0xc3, 0x40, 0x22, 0x63, + 0x23, 0xaa, 0x8d, 0xe5, 0x98, 0x1e, 0x3d, 0x81, 0x53, 0x0b, 0x35, 0x2c, 0x3d, 0x0f, 0x1d, 0xad, + 0x74, 0x96, 0x3f, 0xbe, 0x34, 0xd2, 0x2a, 0x87, 0xa2, 0x67, 0x58, 0x1c, 0x74, 0xc5, 0x34, 0x21, + 0x69, 0x8d, 0xd7, 0xcb, 0xe4, 0xdc, 0xc1, 0xb8, 0xb0, 0x79, 0x59, 0xc3, 0x50, 0x54, 0xe9, 0xda, + 0x4d, 0x65, 0x7f, 0x8f, 0x2e, 0xce, 0x1d, 0x67, 0x65, 0xe1, 0x65, 0x79, 0x98, 0x10, 0x46, 0x6d, + 0xa1, 0x61, 0xc0, 0xf0, 0x8d, 0x95, 0xf0, 0x56, 0x44, 0x96, 0xe5, 0x85, 0xd9, 0xcf, 0x1c, 0x6b, + 0x14, 0x11, 0xc0, 0x11, 0x85, 0x58, 0x47, 0x8c, 0x89, 0x8c, 0xac, 0x71, 0xf4, 0xa2, 0x29, 0x27, + 0xdd, 0x3c, 0xe9, 0x79, 0x11, 0xab, 0xe6, 0x24, 0x88, 0xa7, 0x46, 0x01, 0x6e, 0xd3, 0x89, 0x52, + 0x06, 0x29, 0xb4, 0x37, 0x99, 0x24, 0x7c, 0x82, 0xec, 0xac, 0x78, 0xae, 0xfa, 0x36, 0x0b, 0xcd, + 0xeb, 0x4b, 0xf4, 0x0d, 0x6e, 0x7c, 0x7b, 0x82, 0xb1, 0x92, 0x57, 0xbc, 0x3f, 0x42, 0x93, 0xf2, + 0x2c, 0xcc, 0xbf, 0xac, 0xc8, 0x73, 0xd8, 0x5b, 0xf5, 0xb2, 0xbf, 0xea, 0xe5, 0x3e, 0xbe, 0xbc, + 0xf2, 0xb3, 0x0f, 0x3f, 0xbe, 0x44, 0x7d, 0x4a, 0x7d, 0xae, 0x0f, 0x2b, 0x6a, 0xf8, 0x71, 0xc5, + 0xbb, 0x97, 0x84, 0x9f, 0x06, 0xb5, 0xff, 0x8a, 0x5c, 0xcf, 0x8c, 0x32, 0xac, 0x65, 0xfb, 0xd5, + 0x72, 0xa4, 0x9f, 0x9b, 0xd2, 0x0b, 0x92, 0x4d, 0x57, 0xc6, 0xe6, 0x11, 0x77, 0x18, 0x0e, 0xb6, + 0xb2, 0xaf, 0xca, 0x6a, 0xcb, 0x8e, 0xc8, 0x5c, 0xe4, 0xc2, 0x8f, 0xea, 0x4a, 0x1c, 0x1e, 0x7e, + 0xac, 0xcd, 0x7f, 0x15, 0xdc, 0xdf, 0x55, 0xf2, 0x07, 0x70, 0x8e, 0xbd, 0xaf, 0xcd, 0x3e, 0x0f, + 0xe1, 0x78, 0x93, 0xd6, 0x7d, 0x80, 0xc6, 0x31, 0xe8, 0x70, 0x86, 0xfa, 0x4f, 0x35, 0xf5, 0x86, + 0x8a, 0x6e, 0xad, 0x2c, 0x9b, 0x7d, 0x45, 0xd9, 0xdb, 0x15, 0x65, 0x6b, 0x0b, 0x7c, 0x5e, 0xfd, + 0xb1, 0x15, 0xa3, 0x09, 0x72, 0xf9, 0xca, 0xb2, 0x01, 0xda, 0xd0, 0xd7, 0x96, 0xfc, 0x7d, 0x92, + 0xed, 0xde, 0xad, 0x28, 0xf7, 0x3b, 0xc2, 0x1b, 0x96, 0x4b, 0x6a, 0xa0, 0x60, 0xe2, 0xe7, 0x09, + 0xd1, 0x55, 0x56, 0xe5, 0xc6, 0xe5, 0xf5, 0x6b, 0x00, 0x73, 0x17, 0xae, 0x84, 0x6e, 0x55, 0xdb, + 0x7b, 0x4e, 0xce, 0x3b, 0xa7, 0xec, 0xa2, 0x23, 0x1d, 0x07, 0xcf, 0x4e, 0x95, 0xff, 0x4e, 0xc0, + 0x0a, 0xe3, 0x8c, 0xf4, 0xbc, 0x7a, 0x64, 0x04, 0x76, 0xea, 0xaa, 0x2a, 0x8f, 0x35, 0xe6, 0x1c, + 0x6f, 0x6f, 0xc7, 0x2b, 0xd9, 0xb7, 0x9b, 0xaf, 0xd5, 0x5c, 0xf3, 0xf7, 0x91, 0xe9, 0x6e, 0x96, + 0xb3, 0x99, 0x37, 0x0b, 0x6b, 0xa0, 0x3a, 0x37, 0x34, 0xb4, 0x86, 0x42, 0x31, 0x39, 0x38, 0xf8, + 0xde, 0x89, 0xcc, 0xdb, 0xa6, 0xd2, 0x45, 0x41, 0x80, 0xb6, 0xb8, 0x04, 0x4a, 0xb8, 0x22, 0xcb, + 0x3e, 0x66, 0xe9, 0x9f, 0xad, 0xbe, 0xaf, 0x68, 0x19, 0x17, 0xfd, 0x91, 0x63, 0xf5, 0xc8, 0xd3, + 0x47, 0xfa, 0xb2, 0x61, 0x4e, 0xa4, 0x8c, 0x35, 0x6e, 0xed, 0x55, 0x8e, 0xae, 0x43, 0x69, 0xcb, + 0xfb, 0x01, 0x17, 0xaf, 0x4a, 0x57, 0xcc, 0xfb, 0xec, 0x5e, 0x9f, 0xf2, 0xf2, 0x65, 0x01, 0xd9, + 0x2f, 0x57, 0xe6, 0x3e, 0xab, 0x54, 0x69, 0xcc, 0xbd, 0x20, 0x98, 0x55, 0x93, 0x9f, 0xc9, 0xfb, + 0xc9, 0x04, 0x76, 0xb0, 0x6b, 0x06, 0x56, 0x15, 0x64, 0x15, 0xfc, 0x91, 0x1b, 0x8d, 0xd8, 0x59, + 0xc4, 0x2b, 0xf6, 0x75, 0x04, 0xdc, 0x23, 0xfb, 0x8f, 0x63, 0x3f, 0x85, 0x5e, 0xe7, 0xb8, 0x90, + 0xb4, 0x78, 0xa2, 0xe2, 0xc2, 0x35, 0xa8, 0x71, 0x56, 0xd5, 0x7d, 0x54, 0x85, 0x74, 0xc8, 0x73, + 0xa6, 0x22, 0xd0, 0xcb, 0x59, 0x4b, 0xe6, 0xb9, 0xe6, 0x09, 0x3f, 0x0c, 0x34, 0x1f, 0x54, 0x72, + 0x3b, 0xef, 0x62, 0x08, 0xd3, 0xcb, 0xb7, 0xd7, 0xfe, 0xfd, 0xc3, 0x43, 0x4f, 0xfd, 0x86, 0x17, + 0x5b, 0xe8, 0xaf, 0xfe, 0xf0, 0x80, 0xff, 0x16, 0xb7, 0x29, 0x5d, 0x72, 0xdf, 0x7f, 0x78, 0xe0, + 0x98, 0x1a, 0xf8, 0x8e, 0xff, 0x2d, 0x72, 0xc0, 0x1e, 0x48, 0x32, 0xbf, 0x99, 0xda, 0xa3, 0x3b, + 0x98, 0x06, 0xda, 0x19, 0x04, 0xcd, 0x00, 0x6d, 0xe2, 0x62, 0x38, 0xde, 0xec, 0x46, 0x28, 0x29, + 0x9f, 0x01, 0x2b, 0x23, 0xb7, 0x33, 0x0d, 0x6f, 0x4f, 0xcb, 0x61, 0x92, 0xcf, 0x76, 0x2a, 0x23, + 0x99, 0x38, 0x7e, 0xf5, 0x0e, 0xa9, 0xb9, 0x9d, 0x83, 0x86, 0xae, 0x0d, 0x1f, 0xd3, 0x22, 0x19, + 0x6d, 0x77, 0x6d, 0x73, 0xfe, 0xcb, 0xff, 0xc4, 0xe6, 0x6c, 0x6f, 0x1b, 0x69, 0xff, 0xeb, 0x0f, + 0x0e, 0xb1, 0x26, 0x20, 0x8a, 0x5d, 0xe0, 0x03, 0x42, 0x93, 0xb3, 0x84, 0xce, 0x9b, 0x0c, 0x3e, + 0xd7, 0xe0, 0x23, 0x4a, 0x18, 0x43, 0x0a, 0xd2, 0x01, 0x42, 0x04, 0x32, 0x07, 0x11, 0xea, 0x14, + 0x5a, 0x62, 0x51, 0x46, 0xb4, 0xb9, 0xf8, 0x64, 0x77, 0xe7, 0xf7, 0x0e, 0x59, 0x51, 0xab, 0x94, + 0x5e, 0xb7, 0xfb, 0x9d, 0x63, 0xa9, 0x65, 0x1b, 0x85, 0xf3, 0x31, 0xfd, 0x0b, 0x32, 0x61, 0x11, + 0x82, 0x01, 0x9d, 0x0c, 0x32, 0xcf, 0x6a, 0x61, 0xd8, 0xd0, 0x16, 0x5a, 0x9e, 0x4a, 0x33, 0x66, + 0x43, 0x69, 0x70, 0x8e, 0x3e, 0x89, 0x68, 0x7c, 0x93, 0x06, 0x93, 0x20, 0x24, 0xdc, 0x75, 0x6c, + 0x05, 0x21, 0x8f, 0x45, 0xd7, 0x4b, 0xf2, 0x4d, 0x45, 0x33, 0x7c, 0x81, 0xfb, 0x40, 0xbd, 0x41, + 0x93, 0xb9, 0x1a, 0x29, 0x84, 0xfb, 0x43, 0x9d, 0x29, 0x6d, 0x7d, 0x9a, 0x7b, 0xe3, 0xf5, 0xfc, + 0x78, 0x85, 0xfe, 0x2c, 0x60, 0x78, 0xd8, 0x31, 0x47, 0x3c, 0xb5, 0xc5, 0xa3, 0x03, 0x47, 0xf5, + 0xe9, 0xeb, 0x78, 0x6a, 0xf7, 0x11, 0xbc, 0xc2, 0x19, 0x58, 0xff, 0xf8, 0x07, 0xfa, 0x28, 0xe1, + 0xcb, 0xb9, 0x40, 0x62, 0x1d, 0x5b, 0x07, 0xf0, 0x31, 0x0f, 0x8e, 0xfe, 0xaa, 0x68, 0xf7, 0x8c, + 0xca, 0x51, 0x0c, 0x3d, 0x7b, 0xdf, 0xc5, 0xd5, 0x27, 0x14, 0x72, 0xf4, 0xc9, 0x92, 0x99, 0x5a, + 0x06, 0xa7, 0x42, 0x8d, 0x0f, 0x5f, 0xfb, 0x9f, 0x83, 0x5f, 0x4f, 0x80, 0xfb, 0xde, 0x65, 0x0f, + 0x0f, 0xea, 0xd0, 0x7a, 0x97, 0x1d, 0x74, 0x1f, 0x1e, 0x6c, 0xfb, 0x2e, 0xf3, 0xe2, 0xe0, 0xae, + 0xf5, 0x6b, 0x70, 0x71, 0x02, 0xbd, 0x0c, 0x72, 0x9b, 0x5d, 0x30, 0x33, 0x68, 0x81, 0x27, 0xee, + 0x4f, 0x94, 0x11, 0xff, 0x3c, 0x4d, 0x30, 0xd8, 0x65, 0x34, 0xb6, 0xee, 0x32, 0x74, 0xd8, 0xb8, + 0xcb, 0x50, 0x3f, 0x41, 0x0a, 0x0b, 0xd2, 0x5f, 0xb0, 0xd6, 0xa2, 0x5c, 0xea, 0x2a, 0xc9, 0x72, + 0x32, 0xe0, 0x6a, 0x5b, 0x7b, 0x58, 0xc2, 0x41, 0x7c, 0x38, 0x3f, 0xfd, 0xf2, 0x91, 0x9c, 0x72, + 0x7d, 0x74, 0x0b, 0xbf, 0xb8, 0x01, 0xee, 0x97, 0x5a, 0xee, 0x5d, 0xd6, 0x41, 0x84, 0x98, 0x2c, + 0x43, 0x5b, 0x10, 0xb4, 0xc3, 0x41, 0xd3, 0x08, 0x9b, 0x59, 0x95, 0x32, 0x98, 0x82, 0x55, 0x40, + 0xbe, 0xe4, 0x2f, 0xa9, 0x90, 0x23, 0xc5, 0x09, 0x4d, 0x0f, 0xc2, 0x05, 0x1c, 0x76, 0x8b, 0x27, + 0xb3, 0x50, 0x87, 0x8d, 0x81, 0x24, 0x56, 0xa9, 0x06, 0x1b, 0xed, 0xb8, 0xda, 0x03, 0x31, 0x7a, + 0x17, 0xc7, 0xe8, 0xaf, 0xb4, 0x79, 0xd1, 0xd0, 0xbc, 0x22, 0xef, 0x89, 0x92, 0x2d, 0x91, 0xa0, + 0x40, 0x58, 0x99, 0x31, 0x74, 0x57, 0x51, 0x50, 0x61, 0xcf, 0x72, 0xc8, 0x1e, 0x2b, 0x1a, 0x04, + 0x84, 0xa0, 0xf1, 0x9c, 0xac, 0xcb, 0x86, 0xd9, 0xd8, 0x2e, 0x70, 0x51, 0x81, 0xa0, 0xc3, 0xec, + 0x88, 0x8c, 0xce, 0x0c, 0x1c, 0xc8, 0x0c, 0x0e, 0xb8, 0x1a, 0xda, 0x87, 0x94, 0x6b, 0xc8, 0x45, + 0x61, 0x2c, 0xfe, 0x0e, 0xf2, 0xa1, 0xb1, 0x5c, 0xd1, 0xa8, 0xd2, 0x4d, 0x03, 0xa2, 0x96, 0x1c, + 0x6d, 0xcf, 0xd7, 0xdd, 0xa9, 0xde, 0x05, 0x17, 0x19, 0x4d, 0x3d, 0x9d, 0xab, 0x1b, 0xae, 0x54, + 0x97, 0x4b, 0x9e, 0x9c, 0x49, 0x94, 0x64, 0x3c, 0x35, 0x8f, 0xeb, 0x7f, 0xea, 0x58, 0xae, 0x06, + 0x16, 0xcb, 0x34, 0xe9, 0xf6, 0x9e, 0xa1, 0x49, 0x16, 0x92, 0x20, 0x8c, 0xbb, 0xf8, 0x42, 0x32, + 0x47, 0xbf, 0x53, 0xf8, 0x40, 0x1a, 0xfc, 0x9e, 0xbd, 0x0d, 0x2e, 0xfd, 0xc8, 0x43, 0x97, 0x41, + 0x3d, 0x92, 0x83, 0xec, 0x1b, 0x19, 0xd0, 0xf4, 0xd8, 0x80, 0x46, 0x9a, 0x5f, 0x71, 0xd0, 0x81, + 0xa0, 0x93, 0xdd, 0x4c, 0x26, 0x40, 0x48, 0x32, 0xb5, 0x3b, 0xc4, 0xc3, 0xac, 0x87, 0xb1, 0xe5, + 0xdc, 0xf2, 0x41, 0x51, 0x98, 0x92, 0x04, 0x08, 0x39, 0xe1, 0xc2, 0x41, 0x16, 0x2d, 0x46, 0x23, + 0xcc, 0x18, 0x47, 0xaf, 0x6e, 0x52, 0x7e, 0x9a, 0xde, 0xa4, 0xf0, 0xf8, 0xd1, 0x17, 0x8f, 0x39, + 0x67, 0x7d, 0xe3, 0x4f, 0x03, 0x4e, 0x98, 0xc1, 0x2f, 0x57, 0x1e, 0x6c, 0x21, 0xe9, 0x66, 0x3a, + 0xc7, 0xb0, 0xc6, 0xf1, 0xd4, 0x35, 0x0e, 0xea, 0x68, 0xd8, 0x14, 0x11, 0x77, 0x86, 0x15, 0x86, + 0xbf, 0xdd, 0x1c, 0x6b, 0x24, 0x7e, 0x18, 0x62, 0xef, 0x84, 0x57, 0x48, 0xae, 0x5a, 0x95, 0xa7, + 0x08, 0xea, 0x59, 0x83, 0x09, 0x23, 0xc8, 0xa9, 0x8b, 0x2a, 0xbf, 0x21, 0x8b, 0xeb, 0xea, 0x80, + 0x26, 0xce, 0x5d, 0xe8, 0x41, 0x2b, 0xf6, 0x71, 0x4d, 0xc1, 0xc5, 0x7a, 0x6a, 0xbb, 0xc0, 0x79, + 0xd1, 0x63, 0x08, 0xc1, 0xd8, 0x61, 0x7c, 0x75, 0xe4, 0xe0, 0xe8, 0x91, 0x91, 0x9f, 0x91, 0xb6, + 0x57, 0x45, 0x0f, 0x27, 0x3e, 0x8c, 0x06, 0x17, 0x3d, 0xc7, 0x55, 0x39, 0x40, 0x52, 0x01, 0xf1, + 0xe6, 0x80, 0x99, 0x34, 0xe9, 0x20, 0xfb, 0x42, 0x62, 0x31, 0x7d, 0xd9, 0xd0, 0xf0, 0x64, 0x72, + 0xaa, 0x55, 0x7c, 0x26, 0xda, 0xfd, 0xe0, 0x6d, 0x6d, 0xd9, 0xbd, 0xed, 0xa8, 0x38, 0xb8, 0x52, + 0x4a, 0x5f, 0xa4, 0x40, 0x4f, 0xe8, 0xf9, 0xe9, 0xb6, 0x42, 0x8f, 0xb1, 0x8b, 0x8f, 0xe7, 0x09, + 0xc2, 0xa9, 0xa9, 0x27, 0xe0, 0x90, 0xce, 0x13, 0xf3, 0xf5, 0xa7, 0xb1, 0xf9, 0x58, 0xca, 0xfe, + 0x69, 0xd0, 0x03, 0x99, 0x50, 0x0c, 0x93, 0xf8, 0x7b, 0xe0, 0x8f, 0xfd, 0x81, 0xf8, 0xad, 0x4c, + 0xd2, 0xb0, 0x50, 0x46, 0xda, 0x48, 0x0c, 0x23, 0x8f, 0x01, 0x89, 0xea, 0xfa, 0xe7, 0x6b, 0x1d, + 0xab, 0xf4, 0xab, 0xd4, 0x2d, 0xd9, 0x2b, 0x34, 0x66, 0xde, 0xf2, 0x1d, 0xc9, 0xd2, 0x0b, 0xab, + 0xc7, 0xf7, 0x49, 0x4b, 0x4e, 0xb9, 0x30, 0x74, 0x2c, 0x74, 0x37, 0xf0, 0x38, 0xa4, 0x46, 0x69, + 0xbb, 0x64, 0x5d, 0x3c, 0x93, 0x0e, 0x10, 0x0f, 0x90, 0x13, 0x4c, 0xff, 0x6b, 0x5f, 0x98, 0x37, + 0xae, 0x10, 0x02, 0x98, 0xae, 0x92, 0xda, 0xb3, 0x48, 0xa1, 0x51, 0x94, 0xda, 0xc4, 0xdd, 0xde, + 0x30, 0x18, 0xa1, 0x7e, 0x71, 0x77, 0xd7, 0x49, 0x8c, 0x28, 0x19, 0x9e, 0x8f, 0x0a, 0x05, 0x48, + 0xc2, 0x58, 0x23, 0xc6, 0xab, 0xcb, 0xe2, 0x55, 0xaf, 0xf4, 0xea, 0xa2, 0x78, 0xd5, 0x3f, 0x73, + 0x6d, 0x45, 0x0d, 0x0f, 0x5b, 0xfa, 0x19, 0x98, 0xd2, 0x50, 0xd5, 0x6a, 0x94, 0xbd, 0x2b, 0xca, + 0xee, 0x9f, 0x91, 0x48, 0x7d, 0x78, 0xf2, 0x96, 0xb2, 0x88, 0xc8, 0x73, 0x38, 0x24, 0x27, 0x51, + 0x92, 0xdb, 0x13, 0x24, 0x58, 0xa1, 0x0f, 0x86, 0x32, 0x93, 0x1c, 0x05, 0x28, 0xf8, 0xc3, 0x2a, + 0x6a, 0x8d, 0x3b, 0xbc, 0x50, 0xab, 0x90, 0xde, 0x3b, 0x6e, 0x55, 0x89, 0xa4, 0xde, 0x67, 0xf7, + 0x6e, 0xbd, 0x0a, 0x49, 0xe5, 0x08, 0x8d, 0x1c, 0xa8, 0x40, 0x2a, 0x2a, 0xef, 0x8d, 0xf1, 0x9f, + 0x41, 0xd7, 0x2d, 0x69, 0x91, 0x8a, 0x1c, 0x7d, 0xcc, 0xd1, 0x2f, 0xe5, 0xd8, 0xd7, 0x73, 0xec, + 0x63, 0x8e, 0x7d, 0x99, 0x83, 0xce, 0x44, 0x3f, 0xf7, 0xf4, 0x10, 0x7c, 0x5b, 0x7e, 0x27, 0xe9, + 0xe9, 0x6f, 0xfb, 0xe5, 0xb7, 0x7d, 0xfd, 0xed, 0x7e, 0xf9, 0xed, 0x3e, 0xc2, 0x6f, 0xe1, 0x16, + 0x48, 0xe8, 0xe4, 0xe2, 0x37, 0x6f, 0xbf, 0x84, 0xdb, 0x2b, 0x03, 0x57, 0xc8, 0x17, 0x0c, 0xa0, + 0xd4, 0x45, 0x24, 0xa4, 0xc2, 0x7a, 0xf7, 0x1a, 0x2d, 0xed, 0x5a, 0x33, 0x85, 0x2f, 0xb9, 0x65, + 0xc0, 0x26, 0xf5, 0x08, 0x6f, 0x09, 0xc1, 0x86, 0x83, 0x38, 0xb9, 0xb9, 0xbc, 0x6a, 0x65, 0x73, + 0x7f, 0x12, 0xb4, 0xf2, 0xa4, 0x95, 0xf9, 0x20, 0xc9, 0x31, 0x36, 0x79, 0xa9, 0x08, 0xc1, 0x30, + 0x31, 0x7b, 0xa5, 0x2f, 0x08, 0x73, 0x6a, 0x23, 0x0f, 0xc1, 0x31, 0xbd, 0x0b, 0xb3, 0x0c, 0x85, + 0xc2, 0x30, 0xa5, 0x1b, 0x9a, 0x52, 0x96, 0x1f, 0x30, 0xcb, 0x0b, 0xad, 0x65, 0x42, 0xfb, 0x0c, + 0x04, 0xd7, 0x4a, 0x26, 0x13, 0xf4, 0xf0, 0xe9, 0x58, 0x4b, 0x6d, 0x6d, 0x92, 0x34, 0xc0, 0x00, + 0x64, 0xf8, 0x8b, 0x34, 0xd3, 0xed, 0x90, 0xac, 0x6b, 0xe4, 0x42, 0x2e, 0x54, 0x1f, 0x30, 0x41, + 0x73, 0x3f, 0x72, 0x8b, 0x43, 0x1d, 0x24, 0xcc, 0xee, 0xdd, 0x52, 0x54, 0x22, 0x73, 0x75, 0x17, + 0x5b, 0x5e, 0xdd, 0xf9, 0x90, 0x6d, 0x8f, 0xb7, 0x36, 0x0d, 0x9f, 0xa6, 0x5b, 0x94, 0xe6, 0x95, + 0x30, 0x6a, 0x6e, 0x56, 0x24, 0x91, 0xdb, 0x3d, 0x1c, 0x00, 0x31, 0x28, 0x5a, 0xa6, 0x07, 0x4f, + 0xa3, 0x00, 0x6c, 0xf2, 0x16, 0x8d, 0x83, 0x9a, 0x21, 0xe8, 0x3c, 0xe6, 0x8b, 0xc9, 0xfd, 0x44, + 0x05, 0x4f, 0x73, 0x7d, 0x95, 0xef, 0xa0, 0x2f, 0x73, 0xf6, 0x44, 0xce, 0x9e, 0x91, 0x33, 0x29, + 0x72, 0xee, 0xcb, 0x9c, 0x7d, 0x91, 0xd3, 0x0c, 0xc8, 0xa6, 0x82, 0xce, 0x01, 0xbf, 0xc9, 0x0e, + 0x9e, 0x0d, 0x33, 0xbc, 0x25, 0x62, 0xe2, 0xd3, 0xd6, 0x84, 0xc5, 0x86, 0x48, 0x5a, 0xca, 0x5b, + 0x42, 0x75, 0x87, 0xe4, 0xe1, 0x16, 0xac, 0xf4, 0x0c, 0x76, 0xbe, 0x83, 0x5e, 0xff, 0xf9, 0xb8, + 0x3f, 0x78, 0x06, 0xe7, 0xd7, 0x48, 0x8e, 0x50, 0xc6, 0x51, 0xde, 0x22, 0xe0, 0xf0, 0x63, 0xdb, + 0x48, 0xdd, 0x92, 0xc9, 0xa9, 0x76, 0xd6, 0xc0, 0x84, 0x81, 0x9e, 0x80, 0xc7, 0xe7, 0xb1, 0xf0, + 0xe2, 0x68, 0x11, 0x1a, 0x1f, 0xd9, 0xf4, 0x15, 0x69, 0xa1, 0x62, 0x09, 0x03, 0x8b, 0x63, 0x5e, + 0x81, 0xd4, 0x9c, 0x21, 0x1e, 0x77, 0xb8, 0x02, 0x96, 0x3c, 0x6c, 0xd0, 0xb2, 0xa0, 0x05, 0xa1, + 0x6c, 0xe4, 0x33, 0x71, 0x3c, 0x9b, 0xdd, 0xc3, 0x19, 0xbf, 0x36, 0x34, 0x21, 0x4a, 0x27, 0x56, + 0xf9, 0xba, 0x6d, 0x9f, 0xae, 0x82, 0x9e, 0xb5, 0x83, 0x83, 0x48, 0xdd, 0x4e, 0x53, 0xa0, 0xbb, + 0xe8, 0x14, 0x12, 0xcf, 0x04, 0x16, 0x3b, 0x56, 0x89, 0x7e, 0xd8, 0xab, 0xa3, 0x57, 0x42, 0x2e, + 0x31, 0xcc, 0x81, 0x71, 0x8d, 0xbb, 0x65, 0xa9, 0xea, 0xac, 0x9f, 0x29, 0xee, 0xa2, 0x35, 0xe0, + 0x67, 0x10, 0xd0, 0x2e, 0xb2, 0x3c, 0xb5, 0xbb, 0x6e, 0xef, 0x7b, 0xe8, 0x67, 0xc3, 0xb7, 0xf4, + 0x2e, 0x17, 0x6e, 0x4a, 0xd5, 0x8e, 0x52, 0x3e, 0xd1, 0x4b, 0x58, 0x2c, 0xc8, 0x7e, 0x53, 0x60, + 0x8c, 0xb6, 0xed, 0xc0, 0x6e, 0xc7, 0x5d, 0x2e, 0x0c, 0x79, 0xca, 0x26, 0xf5, 0x1a, 0xad, 0xd0, + 0xf1, 0x44, 0x9a, 0x52, 0x05, 0x6d, 0xef, 0xd9, 0x50, 0x46, 0x43, 0x2b, 0xa9, 0x1d, 0xbe, 0x61, + 0xfd, 0x55, 0x4b, 0xd7, 0x2b, 0xb1, 0x32, 0xca, 0x50, 0x1c, 0x05, 0x78, 0x2f, 0x09, 0x6d, 0x77, + 0xff, 0xf2, 0xac, 0x2b, 0xef, 0x5c, 0x2d, 0xcb, 0x9d, 0xe3, 0x3f, 0x88, 0xc8, 0x77, 0xe3, 0xe1, + 0x66, 0x54, 0x67, 0x53, 0x65, 0x6e, 0xbd, 0xc6, 0xcd, 0x28, 0x56, 0x33, 0x2b, 0x36, 0x68, 0x18, + 0x31, 0xdc, 0xe0, 0x8a, 0xb5, 0xce, 0xd3, 0x48, 0x01, 0x2a, 0x90, 0x45, 0xcc, 0x9a, 0xe7, 0x6e, + 0x66, 0xe8, 0xf4, 0xa0, 0x3d, 0x44, 0xec, 0x5c, 0x92, 0xad, 0x41, 0x89, 0x47, 0xa8, 0xa9, 0xea, + 0x03, 0x0d, 0x69, 0xd3, 0x7b, 0xe5, 0x5e, 0x71, 0x6e, 0xbc, 0xf6, 0x6c, 0x7b, 0xf3, 0xf6, 0x55, + 0x1b, 0xce, 0xad, 0x6d, 0x62, 0x22, 0xd0, 0x45, 0xb7, 0x25, 0x67, 0x6d, 0x66, 0x2e, 0x94, 0x60, + 0x6c, 0xbd, 0xb9, 0xa7, 0xe5, 0x01, 0xbf, 0x5e, 0x5e, 0xe2, 0x82, 0xc8, 0xac, 0x21, 0x08, 0x97, + 0x37, 0xb0, 0xad, 0x3c, 0x3c, 0x68, 0x5b, 0x75, 0x00, 0xf4, 0x25, 0x3d, 0xd4, 0xf2, 0xb1, 0xd1, + 0x15, 0xdd, 0xfa, 0xb6, 0xd4, 0x8f, 0x9e, 0xab, 0x7f, 0xd0, 0xc2, 0x03, 0x76, 0xbb, 0x07, 0x44, + 0xf6, 0xa8, 0xa1, 0xa8, 0xab, 0xc2, 0x6d, 0x6e, 0xa3, 0xb3, 0x94, 0x13, 0xc2, 0x0b, 0x41, 0x5f, + 0x06, 0x13, 0x61, 0x94, 0x26, 0x35, 0xde, 0x77, 0x16, 0x9a, 0x9f, 0x29, 0xfd, 0x37, 0xdf, 0x15, + 0xaa, 0x1b, 0xa1, 0xad, 0xfc, 0xe1, 0x21, 0x29, 0x05, 0x9f, 0x4c, 0x28, 0xf6, 0x24, 0x9b, 0xe1, + 0xe2, 0x6f, 0xc7, 0xa1, 0xa9, 0xbd, 0x2d, 0x29, 0x2e, 0x84, 0x5d, 0xc3, 0x2e, 0x6b, 0x2c, 0x5c, + 0xbd, 0x16, 0x2c, 0x55, 0x68, 0x89, 0x3c, 0xcb, 0x91, 0xd7, 0x91, 0x47, 0x5e, 0xe5, 0xd5, 0x50, + 0x99, 0x71, 0x76, 0x5d, 0x65, 0x50, 0x89, 0xf6, 0x7f, 0xda, 0x65, 0x71, 0x57, 0x91, 0xc5, 0x11, + 0x8e, 0xad, 0xe3, 0x0c, 0x31, 0xcd, 0xd3, 0x5e, 0xa0, 0xea, 0xa2, 0xeb, 0x1e, 0x39, 0x4b, 0xa3, + 0x33, 0x5b, 0xa2, 0x37, 0xe3, 0x6b, 0x6d, 0x80, 0x30, 0x61, 0x70, 0x6d, 0xf8, 0xef, 0x97, 0x81, + 0x10, 0x83, 0x48, 0x04, 0x30, 0xd7, 0xf1, 0x48, 0x7e, 0x0a, 0xee, 0x6d, 0x09, 0x45, 0x72, 0xb1, + 0x4f, 0x0e, 0xf6, 0x2d, 0x3a, 0x78, 0xb6, 0xc4, 0x75, 0xc1, 0x0e, 0x93, 0xce, 0x3f, 0xa3, 0x6a, + 0x92, 0x35, 0x30, 0x8e, 0xf3, 0x8e, 0x5b, 0x99, 0x06, 0xd6, 0x14, 0x91, 0xdb, 0x5c, 0x71, 0x88, + 0xed, 0x0d, 0xb5, 0x23, 0x6c, 0x11, 0x5c, 0x37, 0x60, 0xed, 0xf2, 0x42, 0xda, 0x03, 0x6d, 0x7c, + 0xa4, 0xfe, 0x02, 0x47, 0xea, 0x2d, 0x20, 0x45, 0xf5, 0x09, 0x67, 0xa1, 0xa9, 0x32, 0x1e, 0x1e, + 0x74, 0x2d, 0x87, 0xa7, 0x9d, 0xbd, 0x89, 0x27, 0xde, 0xc1, 0xce, 0x76, 0x87, 0x4a, 0x70, 0x38, + 0xce, 0xdb, 0xea, 0x08, 0xee, 0xa2, 0x78, 0xa3, 0x6b, 0x39, 0x96, 0xee, 0x7e, 0xb0, 0x2f, 0xae, + 0x0a, 0x85, 0x76, 0x24, 0xf3, 0xd6, 0xf9, 0x76, 0x61, 0xb4, 0x8a, 0xd8, 0x13, 0x5f, 0xc0, 0xd3, + 0xfa, 0x17, 0x3a, 0xae, 0x7b, 0x9e, 0xa7, 0xb4, 0x4c, 0x9d, 0x9f, 0x8f, 0x5f, 0xbf, 0x47, 0xa3, + 0xe4, 0xb1, 0x35, 0x4f, 0x32, 0x84, 0x7c, 0x40, 0x07, 0x30, 0x3a, 0xb9, 0xa3, 0x43, 0xce, 0x2d, + 0x06, 0x14, 0x81, 0x63, 0x31, 0xb4, 0x98, 0x2d, 0x7a, 0x67, 0x51, 0x02, 0x2c, 0x12, 0x35, 0x31, + 0x9d, 0x38, 0xb9, 0xb3, 0x19, 0x73, 0x7b, 0xc8, 0x07, 0x33, 0x75, 0x62, 0x66, 0x2e, 0x08, 0x6c, + 0x3f, 0x9c, 0xc2, 0x36, 0xcb, 0x3f, 0xb6, 0xb7, 0x85, 0x77, 0x96, 0x76, 0xc6, 0x66, 0xba, 0xd7, + 0x82, 0xf8, 0xf5, 0xba, 0x4f, 0xa4, 0xef, 0xc4, 0x30, 0xd9, 0x82, 0x23, 0x37, 0x45, 0x6e, 0x2c, + 0x0a, 0x78, 0x89, 0xb3, 0xb4, 0x85, 0x86, 0xa9, 0x08, 0x22, 0x06, 0x32, 0x95, 0xb2, 0x28, 0xda, + 0x7f, 0x4a, 0xde, 0x51, 0xa8, 0x8d, 0x70, 0x73, 0xb5, 0x2f, 0x77, 0xbb, 0x45, 0x18, 0x4e, 0x20, + 0xfd, 0x20, 0x9b, 0x53, 0x78, 0x35, 0xcd, 0x19, 0x1e, 0x23, 0x3d, 0xc8, 0x82, 0xcb, 0x78, 0x7c, + 0x97, 0x91, 0xce, 0xc0, 0x86, 0xd9, 0xdb, 0x59, 0x58, 0xb7, 0xd6, 0x00, 0xc3, 0x4d, 0x2c, 0x77, + 0x9c, 0x01, 0x3b, 0xd5, 0x65, 0xca, 0x5f, 0x2e, 0xaa, 0x09, 0x81, 0x96, 0xd7, 0x87, 0x40, 0x1b, + 0xb6, 0x10, 0x55, 0x09, 0x75, 0x0f, 0x7f, 0xfd, 0xf8, 0x66, 0xf7, 0xb9, 0x8c, 0x88, 0x96, 0xeb, + 0xde, 0x76, 0x8f, 0x50, 0x8e, 0x15, 0x8e, 0x79, 0x86, 0x36, 0xac, 0xce, 0xff, 0x0e, 0x65, 0x94, + 0x0d, 0x54, 0x69, 0x48, 0x61, 0x8f, 0xd4, 0xa6, 0x5d, 0x3a, 0x18, 0x6c, 0x8d, 0xf5, 0x3e, 0x4a, + 0xd3, 0xb3, 0x20, 0xbd, 0x0f, 0x45, 0x3f, 0x55, 0x97, 0x1f, 0xa4, 0x36, 0x2b, 0xf4, 0x6c, 0x79, + 0xe1, 0xff, 0xa7, 0xc2, 0xc8, 0xe6, 0x0d, 0xba, 0xb7, 0x1c, 0xc5, 0x78, 0xa5, 0x69, 0x12, 0x3a, + 0x37, 0xf1, 0x77, 0x10, 0x08, 0x45, 0x19, 0x3b, 0x7c, 0xbd, 0x0d, 0x6f, 0x83, 0x5b, 0xd2, 0x93, + 0xb9, 0x73, 0x5c, 0xd3, 0x14, 0x25, 0x98, 0x03, 0xb2, 0xd2, 0xb3, 0x83, 0xfb, 0x85, 0xb9, 0xfe, + 0xd0, 0x89, 0x91, 0xcf, 0x2c, 0x99, 0xb1, 0x20, 0x57, 0x2c, 0x97, 0x87, 0x07, 0xa9, 0xc9, 0x5d, + 0xc2, 0xba, 0xec, 0x3f, 0x43, 0x2d, 0x9f, 0xa6, 0x21, 0x63, 0x4e, 0xa7, 0x9f, 0x4f, 0xb0, 0x01, + 0x18, 0xca, 0x6e, 0x0e, 0x5c, 0x2e, 0xb0, 0xd8, 0x8f, 0x71, 0xa5, 0x8f, 0x63, 0xd9, 0x47, 0x8e, + 0x2c, 0x42, 0xd4, 0xb5, 0xdd, 0x22, 0x89, 0x07, 0xa4, 0x44, 0xdb, 0xc2, 0x7f, 0x97, 0xa4, 0x50, + 0xd3, 0xe9, 0xbb, 0x50, 0x86, 0x90, 0xf2, 0xdc, 0x78, 0xcc, 0x82, 0x4b, 0x3e, 0x5d, 0xb3, 0x6a, + 0x1d, 0x15, 0x53, 0xa4, 0xba, 0x50, 0x80, 0xc3, 0xb8, 0x77, 0x60, 0xa8, 0xe9, 0x72, 0x29, 0x77, + 0x96, 0xfe, 0x63, 0xb0, 0xd5, 0x5b, 0x52, 0x67, 0x0b, 0x9e, 0x59, 0x71, 0xe7, 0x7b, 0x8f, 0x81, + 0xf6, 0x8a, 0x1e, 0xd9, 0xa8, 0xc6, 0xdb, 0x82, 0x7f, 0x9c, 0xf1, 0x39, 0x8e, 0x3b, 0xf0, 0x09, + 0x86, 0x96, 0x68, 0x7d, 0x4a, 0x6e, 0xd2, 0x16, 0xc5, 0xcf, 0x68, 0xdd, 0x85, 0x51, 0xd4, 0xa2, + 0x83, 0xda, 0xb7, 0x0b, 0xd2, 0xed, 0x8d, 0xba, 0x5a, 0xe8, 0x96, 0x25, 0xa5, 0xbe, 0x43, 0x50, + 0x6a, 0x8b, 0xee, 0x3d, 0x60, 0x69, 0xcd, 0x40, 0xac, 0x14, 0x2f, 0x5e, 0xdd, 0xa4, 0x4b, 0x04, + 0xff, 0x20, 0x3f, 0xca, 0xf3, 0x81, 0xc5, 0x5f, 0x99, 0x32, 0x84, 0x05, 0x4c, 0x1f, 0x39, 0xf4, + 0x1a, 0x41, 0xd4, 0xe3, 0x68, 0x80, 0x43, 0x08, 0x8d, 0x5a, 0x2e, 0x2b, 0xed, 0x17, 0xf1, 0xe6, + 0xb4, 0x1e, 0x28, 0x65, 0xe2, 0x96, 0xfc, 0xe5, 0x80, 0x0c, 0x4d, 0xae, 0xc3, 0xd4, 0xfc, 0x0c, + 0x4e, 0x14, 0x2d, 0x78, 0x6c, 0xc5, 0x41, 0x7e, 0x97, 0xa4, 0x9f, 0xb9, 0x3b, 0x18, 0x8f, 0x0e, + 0xf3, 0xe3, 0x91, 0x19, 0x23, 0xb4, 0xc3, 0x9e, 0x16, 0x74, 0xa0, 0xe9, 0x1f, 0xf1, 0x37, 0x77, + 0x1b, 0x41, 0x3f, 0x93, 0xf5, 0xf5, 0xb4, 0xa2, 0x24, 0xbe, 0x84, 0x4c, 0x58, 0x1b, 0xf4, 0x45, + 0x58, 0x8b, 0x2c, 0x50, 0xb1, 0x39, 0x58, 0x20, 0x97, 0x1a, 0xc8, 0x76, 0x2d, 0x97, 0x43, 0xfc, + 0xf9, 0xf1, 0x32, 0xfa, 0x10, 0x4c, 0x6e, 0x69, 0x92, 0x49, 0xfd, 0x99, 0xc2, 0x93, 0x32, 0xf6, + 0x59, 0x37, 0x81, 0xc5, 0x1a, 0x5a, 0x48, 0x8f, 0xc0, 0xec, 0xed, 0x2d, 0xd2, 0xda, 0xdb, 0x5b, + 0xc9, 0x1d, 0x80, 0x07, 0xfc, 0x88, 0x48, 0x1f, 0xa5, 0xed, 0x16, 0xb3, 0x54, 0x4c, 0x3a, 0xa9, + 0x08, 0x63, 0x78, 0x3c, 0xae, 0x0c, 0x10, 0xdd, 0xc6, 0x05, 0x56, 0xfa, 0xb6, 0x60, 0x09, 0xe0, + 0x29, 0xf0, 0xa0, 0xf9, 0xc0, 0x08, 0x87, 0x40, 0xc9, 0x71, 0x34, 0x26, 0x42, 0x4c, 0x07, 0x4b, + 0x91, 0x67, 0xb2, 0xf1, 0x4a, 0xb8, 0x56, 0xbb, 0xc5, 0x88, 0xc8, 0x18, 0xd5, 0x91, 0x18, 0x35, + 0x8b, 0xcc, 0x76, 0x82, 0xfa, 0x46, 0x1b, 0xf7, 0x57, 0x62, 0x2b, 0x5f, 0xb1, 0x87, 0xc3, 0x81, + 0x42, 0xd5, 0x96, 0x4e, 0xb8, 0x8e, 0x1c, 0x88, 0xff, 0x02, 0x98, 0xd7, 0xe0, 0x22, 0xf2, 0x63, + 0x90, 0x2c, 0x31, 0x64, 0x80, 0x2d, 0x44, 0x5e, 0x61, 0xe5, 0x55, 0x36, 0x1d, 0xc3, 0x2f, 0x6b, + 0xf6, 0x5d, 0xeb, 0xf9, 0x1b, 0xbd, 0xa7, 0xed, 0xef, 0x7c, 0x81, 0x57, 0x7b, 0x08, 0x3b, 0x08, + 0xb5, 0x2c, 0x97, 0xe7, 0x1a, 0xb1, 0x5c, 0x84, 0x97, 0x38, 0x8c, 0x76, 0x20, 0x79, 0xbc, 0x1a, + 0x82, 0xfe, 0x2b, 0x29, 0x3f, 0xb0, 0x29, 0x8d, 0x96, 0x6e, 0x46, 0x86, 0x0a, 0x67, 0xa8, 0x43, + 0xa1, 0xc0, 0x5c, 0x5a, 0x9e, 0x16, 0xf6, 0xd5, 0xe8, 0x24, 0x2c, 0x1d, 0xe4, 0xd2, 0x02, 0xee, + 0x50, 0x44, 0x7b, 0xfd, 0x95, 0x2f, 0xb7, 0xa6, 0xc9, 0xe4, 0x06, 0xb5, 0xb2, 0x1d, 0xdc, 0x4b, + 0x3b, 0x52, 0x6e, 0x54, 0x46, 0x8d, 0xce, 0x42, 0xb6, 0x93, 0xe2, 0x46, 0x39, 0x43, 0x0a, 0xfd, + 0xc5, 0x1f, 0x1e, 0xed, 0xf0, 0xb0, 0x5d, 0x1b, 0x0d, 0xac, 0x5c, 0xa9, 0x6e, 0x74, 0x6d, 0x4a, + 0x14, 0x9b, 0x57, 0xae, 0x2f, 0xeb, 0xa6, 0x3c, 0x5b, 0x3d, 0xe5, 0xf9, 0x50, 0x56, 0x05, 0xc3, + 0x10, 0x8c, 0x33, 0x73, 0xbe, 0xcb, 0x8b, 0x95, 0x69, 0x75, 0xa1, 0x68, 0xd5, 0x24, 0x53, 0x9b, + 0xa9, 0x1b, 0x29, 0xf5, 0x88, 0x63, 0x91, 0xeb, 0x4b, 0x5f, 0xec, 0xf5, 0xc8, 0xe4, 0x6b, 0xfa, + 0xcd, 0x45, 0x36, 0xef, 0xbc, 0xa0, 0xbe, 0xa3, 0x12, 0xf1, 0x71, 0x25, 0x05, 0xf9, 0x55, 0xb6, + 0x0b, 0x11, 0xac, 0x40, 0xae, 0x43, 0x63, 0x09, 0xda, 0xa2, 0x5f, 0xd8, 0x01, 0xfa, 0x81, 0xd1, + 0xd4, 0x8b, 0x08, 0x07, 0xfc, 0x5d, 0x0e, 0x60, 0x50, 0xd7, 0x01, 0xca, 0xf6, 0xe8, 0x1e, 0xbc, + 0x17, 0xf5, 0xe9, 0xbd, 0x10, 0x35, 0xd5, 0x75, 0x03, 0x45, 0x01, 0x44, 0xb5, 0x91, 0x9b, 0x73, + 0xd7, 0xc5, 0xc0, 0x2f, 0x99, 0x01, 0x30, 0x43, 0x6a, 0x6f, 0x09, 0x00, 0x52, 0xeb, 0x23, 0x9e, + 0xed, 0xf6, 0x0a, 0x2f, 0x71, 0xb7, 0xd7, 0xad, 0x71, 0x13, 0x6e, 0x28, 0x95, 0xe9, 0xa5, 0xd0, + 0x93, 0x18, 0x61, 0xd1, 0x6d, 0x6e, 0xc7, 0xf5, 0x1d, 0x1c, 0xb5, 0x63, 0x0d, 0x0a, 0x05, 0xcf, + 0x38, 0x68, 0xe8, 0xa3, 0xfc, 0xb0, 0x2b, 0x5f, 0x09, 0x10, 0xce, 0x6c, 0xa9, 0x03, 0xa1, 0xe0, + 0xd0, 0x4e, 0xd2, 0x24, 0x8a, 0xe0, 0xdb, 0x09, 0x5d, 0x42, 0x2e, 0x2e, 0x82, 0x2b, 0xff, 0x36, + 0x4c, 0xd2, 0x81, 0x95, 0x5d, 0x27, 0xb0, 0x83, 0x59, 0x2e, 0x91, 0xf9, 0xc0, 0xa2, 0x6b, 0x1c, + 0x6b, 0x29, 0x2d, 0x74, 0xea, 0x61, 0x70, 0x15, 0xc6, 0xed, 0xa8, 0x8a, 0x1e, 0x39, 0xaa, 0xc1, + 0x7c, 0x54, 0x48, 0x51, 0xd9, 0x23, 0x60, 0x1e, 0x4b, 0xc8, 0x8e, 0xef, 0x41, 0xe6, 0xcd, 0x04, + 0x84, 0x2b, 0x05, 0x00, 0x2c, 0x83, 0x3b, 0x16, 0xb0, 0x8e, 0x18, 0x2b, 0x90, 0x9d, 0x05, 0xad, + 0xfd, 0xe7, 0xdf, 0x61, 0x24, 0x16, 0x02, 0x9a, 0x6f, 0x46, 0x78, 0xac, 0x2f, 0xf0, 0xa7, 0x82, + 0x3d, 0x6e, 0x0a, 0xb7, 0x87, 0x5d, 0x5b, 0x87, 0xe6, 0x88, 0x8d, 0xbb, 0xbe, 0xdb, 0xed, 0x0d, + 0x0a, 0x67, 0x7c, 0x1d, 0x32, 0x31, 0x68, 0xc2, 0x49, 0xcb, 0x9a, 0x71, 0xd2, 0xb2, 0xe5, 0x86, + 0xa8, 0x7b, 0x98, 0x75, 0x1d, 0x98, 0xa3, 0x01, 0xe0, 0x98, 0x7f, 0x7d, 0x6b, 0x1e, 0x03, 0xd9, + 0x96, 0xd5, 0x46, 0x13, 0xbc, 0xc8, 0xaf, 0x2a, 0x98, 0x6d, 0xd9, 0x06, 0x98, 0x6d, 0x79, 0x4a, + 0x05, 0x38, 0xdc, 0x82, 0xac, 0x52, 0x90, 0x13, 0xcc, 0x31, 0xe9, 0xbb, 0x70, 0x3f, 0xaa, 0x01, + 0x65, 0xfc, 0x76, 0xb1, 0x16, 0x93, 0x71, 0x59, 0xff, 0xa5, 0x57, 0x6b, 0xbe, 0xb4, 0x8e, 0x7a, + 0x3e, 0xad, 0x99, 0x1e, 0x84, 0x6a, 0x2c, 0x66, 0xa8, 0xfb, 0xcf, 0x26, 0x96, 0xf5, 0xcd, 0xd1, + 0xc9, 0x85, 0x68, 0xfb, 0x6a, 0xd0, 0xfb, 0x3a, 0xaa, 0xd1, 0x01, 0xf7, 0x0c, 0xb4, 0x3d, 0xa3, + 0x69, 0x04, 0xb5, 0xf7, 0xed, 0x42, 0xad, 0xa2, 0x60, 0x49, 0x01, 0x04, 0x44, 0x84, 0x79, 0xad, + 0xd8, 0xc4, 0x6a, 0x22, 0xc2, 0xb9, 0x8e, 0xce, 0xa6, 0xb0, 0xc7, 0xa0, 0x1d, 0x87, 0x68, 0x5e, + 0x13, 0xd5, 0x62, 0x9f, 0x09, 0x44, 0x8d, 0x61, 0x89, 0x45, 0x17, 0x72, 0x55, 0xac, 0x1b, 0x68, + 0xc8, 0x3a, 0x03, 0x32, 0xcf, 0x68, 0x2c, 0x53, 0x61, 0xd4, 0xb2, 0x85, 0x19, 0x30, 0x84, 0x31, + 0xb4, 0x12, 0xd8, 0x2c, 0xc3, 0x0a, 0x88, 0x70, 0x55, 0x73, 0x7f, 0x3a, 0x0d, 0xe3, 0xcb, 0x41, + 0x77, 0xf8, 0xc7, 0x31, 0xc8, 0x09, 0x98, 0xac, 0x82, 0x3f, 0x8e, 0x37, 0xe5, 0x28, 0xe7, 0x39, + 0xd6, 0x57, 0x81, 0x8d, 0x53, 0xbb, 0xad, 0xc1, 0x8e, 0x1a, 0x5f, 0xb5, 0x4f, 0x5b, 0x3b, 0xcb, + 0x35, 0xd8, 0x73, 0xbd, 0xe7, 0x3e, 0xad, 0xe9, 0x17, 0xd3, 0xa9, 0xdc, 0x34, 0xaa, 0xb3, 0xda, + 0x08, 0xfb, 0x5d, 0x87, 0xef, 0xdd, 0x04, 0xee, 0xfd, 0x95, 0x40, 0xde, 0xaf, 0xf7, 0x9f, 0xbe, + 0x64, 0xee, 0xf3, 0xf5, 0xb8, 0xdc, 0x11, 0x82, 0x57, 0x7f, 0x25, 0x24, 0x37, 0xd5, 0xf1, 0x95, + 0x68, 0xdc, 0x54, 0xc7, 0x57, 0x02, 0x71, 0x53, 0x1d, 0xeb, 0x30, 0xb8, 0xc5, 0x42, 0x32, 0x25, + 0xb9, 0x63, 0x20, 0xc1, 0x48, 0x99, 0x33, 0xc9, 0xf8, 0xe7, 0x43, 0x8e, 0x17, 0xd2, 0x22, 0x1d, + 0x12, 0xc6, 0x36, 0x62, 0xf1, 0xe6, 0xe7, 0x8b, 0xff, 0x80, 0x43, 0x6d, 0x07, 0xa6, 0x2b, 0x0d, + 0x41, 0x1e, 0x65, 0x0d, 0x93, 0x02, 0xa9, 0x89, 0xd0, 0x4a, 0x54, 0xa8, 0x38, 0x19, 0x4e, 0xa5, + 0x13, 0x8f, 0xf9, 0xcf, 0x40, 0xde, 0x92, 0x83, 0xf0, 0x8f, 0xd5, 0xe1, 0x75, 0x68, 0xa4, 0x5b, + 0x1e, 0x96, 0x1e, 0x3b, 0x73, 0x11, 0xb4, 0xac, 0x0a, 0xde, 0x86, 0xe5, 0x09, 0xde, 0x03, 0x7f, + 0xd0, 0x35, 0x4e, 0x19, 0xb0, 0xcd, 0xd7, 0x90, 0xd6, 0x8a, 0x0b, 0x71, 0x9d, 0x49, 0xcc, 0xa0, + 0x31, 0x57, 0xc7, 0xd1, 0xeb, 0xb2, 0x47, 0x40, 0x14, 0xc8, 0x2b, 0xad, 0xbc, 0xc0, 0x3f, 0xc8, + 0xe0, 0xe0, 0xa6, 0x51, 0xdb, 0x2c, 0x4c, 0x33, 0x60, 0xdf, 0xd6, 0xe8, 0x58, 0xb4, 0xb5, 0x25, + 0x86, 0x83, 0x87, 0x77, 0xc7, 0xe5, 0x80, 0xa2, 0x73, 0x02, 0x6d, 0xc2, 0x2b, 0x2c, 0x05, 0x88, + 0x47, 0x21, 0x46, 0xa1, 0x4f, 0x3c, 0xec, 0xc0, 0x86, 0xd3, 0x2f, 0x36, 0xc6, 0x15, 0x1c, 0x52, + 0x94, 0x34, 0x9d, 0xed, 0xa6, 0xff, 0x90, 0x40, 0x42, 0x3b, 0x6e, 0xae, 0xc7, 0x3d, 0x13, 0xc6, + 0x4d, 0x79, 0x63, 0x58, 0x2f, 0x62, 0xb2, 0xd1, 0x2e, 0x82, 0x69, 0x3a, 0xc3, 0x48, 0x5d, 0x84, + 0x83, 0x20, 0x1c, 0x71, 0x98, 0xc6, 0xea, 0x65, 0x81, 0xa1, 0xcc, 0x26, 0xc7, 0x7e, 0xbc, 0x70, + 0x42, 0x40, 0x98, 0xe6, 0xe0, 0x61, 0x54, 0xbd, 0x1c, 0xa0, 0x18, 0xe7, 0xdd, 0x77, 0x62, 0x75, + 0x8d, 0x05, 0x73, 0x05, 0x1f, 0x2c, 0xd0, 0x68, 0xf4, 0x17, 0xce, 0x08, 0xe3, 0xe0, 0xf0, 0x6c, + 0x1a, 0x2f, 0x06, 0xfa, 0x88, 0x9d, 0x16, 0xaf, 0xe8, 0x76, 0xe8, 0x4c, 0xc3, 0xb6, 0x11, 0xea, + 0x72, 0x5d, 0x67, 0x08, 0xbc, 0xf9, 0x38, 0x62, 0x83, 0x58, 0x63, 0xdc, 0x85, 0x5f, 0x62, 0xde, + 0xee, 0x61, 0xe4, 0x09, 0xc7, 0x2d, 0x5e, 0x4e, 0x6f, 0x52, 0xf3, 0xad, 0xf1, 0xea, 0x34, 0x3f, + 0xd3, 0x33, 0x17, 0xea, 0xf8, 0xa6, 0x32, 0x45, 0x0e, 0x2a, 0x6a, 0x50, 0x98, 0x66, 0xdb, 0x1c, + 0x44, 0xb5, 0xcd, 0x2c, 0xcc, 0x15, 0xec, 0xda, 0xe6, 0xbb, 0xbd, 0xa6, 0xa6, 0x9b, 0x6f, 0x6a, + 0xda, 0x89, 0x19, 0x8c, 0xd6, 0xe8, 0xf8, 0x07, 0x51, 0x70, 0x9c, 0x49, 0x84, 0x14, 0x63, 0xf4, + 0x73, 0x6d, 0xbc, 0xb3, 0x4a, 0x14, 0x33, 0x28, 0xf7, 0xea, 0x26, 0x95, 0x05, 0xb3, 0xca, 0xb5, + 0x87, 0x5d, 0x1e, 0x4b, 0xfd, 0x22, 0xa5, 0xd7, 0x7d, 0x92, 0xa9, 0x19, 0xd4, 0xab, 0xfc, 0xb8, + 0x59, 0x8d, 0xc6, 0x48, 0x6f, 0x52, 0xf1, 0x87, 0x62, 0x91, 0xab, 0x5a, 0x86, 0x68, 0x25, 0xc6, + 0xee, 0x8c, 0x11, 0x1e, 0x00, 0xd2, 0xfc, 0x52, 0x03, 0x16, 0x75, 0xf5, 0x37, 0x73, 0xe3, 0xd5, + 0xd8, 0xc6, 0xdb, 0x5b, 0x04, 0x9c, 0x85, 0xe3, 0xa6, 0xe0, 0x91, 0xc8, 0x0f, 0x8d, 0x32, 0x49, + 0xef, 0xdc, 0xa9, 0x5f, 0x69, 0x83, 0xa2, 0xb8, 0x79, 0xb8, 0x95, 0x1f, 0x2b, 0x22, 0x28, 0x51, + 0xad, 0xb5, 0xb9, 0x60, 0xf1, 0xbd, 0x8e, 0xa7, 0x45, 0xce, 0x35, 0x5f, 0x66, 0x7d, 0x4c, 0xc9, + 0x28, 0xfb, 0xd8, 0x84, 0xbb, 0x10, 0x1c, 0xaf, 0xeb, 0x31, 0x32, 0xa0, 0x18, 0x27, 0xd4, 0x8b, + 0xcf, 0xb3, 0x01, 0x9a, 0xca, 0xc1, 0x3c, 0xc2, 0xdf, 0x2e, 0xc2, 0xcb, 0xa9, 0xf1, 0x1f, 0x9c, + 0xe6, 0xe9, 0x99, 0xcb, 0xdd, 0x19, 0x74, 0x39, 0x92, 0x2e, 0xea, 0x66, 0xbb, 0xea, 0x34, 0x5c, + 0xcc, 0x1a, 0xe7, 0x1a, 0x97, 0x13, 0x40, 0x9a, 0xca, 0x84, 0x28, 0x86, 0x12, 0x12, 0x50, 0x01, + 0x1f, 0xc7, 0xc4, 0x9e, 0x07, 0xc2, 0x0f, 0x1c, 0x91, 0x77, 0x41, 0xbc, 0x18, 0xf4, 0xba, 0xf3, + 0xfb, 0xa1, 0x64, 0x8a, 0xab, 0x60, 0x96, 0x47, 0x27, 0x57, 0x37, 0xb3, 0x19, 0x1c, 0x73, 0xff, + 0x16, 0xb7, 0x56, 0x08, 0x63, 0xc5, 0xbc, 0xeb, 0x02, 0x19, 0x52, 0x0b, 0xa6, 0x3b, 0xb8, 0xbf, + 0x68, 0x8d, 0x7d, 0x78, 0x88, 0xd1, 0x9b, 0x40, 0x03, 0x3a, 0x5e, 0x8e, 0xe8, 0x03, 0xab, 0xe5, + 0x35, 0xc8, 0x22, 0x45, 0x36, 0xfc, 0xb9, 0xaa, 0xd5, 0x02, 0xc5, 0x18, 0x99, 0xdd, 0x2c, 0x8c, + 0xc3, 0x3c, 0x88, 0xbe, 0x6c, 0xd6, 0x83, 0xf9, 0xaa, 0x2e, 0xc4, 0x78, 0xad, 0x00, 0xcd, 0x95, + 0x0d, 0xff, 0x23, 0xad, 0x2e, 0x26, 0x87, 0x29, 0x4c, 0xcd, 0x8e, 0x04, 0x7b, 0x13, 0x9f, 0x31, + 0x5d, 0x15, 0x2c, 0x55, 0xb6, 0x38, 0x13, 0x88, 0x3e, 0x1a, 0x7d, 0x92, 0x87, 0x1c, 0xbd, 0x47, + 0xda, 0x51, 0x46, 0xeb, 0x0d, 0x85, 0xda, 0xeb, 0xff, 0x85, 0x8e, 0x43, 0x5d, 0x21, 0x0e, 0xf0, + 0xa7, 0x63, 0x38, 0xfe, 0x8c, 0x5a, 0x78, 0x63, 0x2b, 0xf6, 0xe0, 0xd2, 0xa7, 0x71, 0xb7, 0x1a, + 0xc1, 0x92, 0x11, 0x36, 0x7c, 0x03, 0xc4, 0x95, 0xaf, 0x66, 0x81, 0xb3, 0xc9, 0xa8, 0x06, 0x9a, + 0x16, 0x65, 0x02, 0xad, 0x75, 0xbc, 0xf8, 0x1a, 0x06, 0x9c, 0x3c, 0x68, 0xa0, 0x65, 0x9e, 0x4e, + 0x3c, 0xe8, 0x6d, 0x6c, 0x3c, 0xc1, 0x02, 0xa1, 0xcf, 0x9b, 0x82, 0x4d, 0xd7, 0x1a, 0xbd, 0x87, + 0x91, 0x53, 0x92, 0x4b, 0x35, 0x07, 0x22, 0xbc, 0xc3, 0x18, 0x82, 0xb4, 0x9d, 0x4a, 0x73, 0x44, + 0x3d, 0x37, 0x9c, 0x0c, 0x95, 0x38, 0xb7, 0xf2, 0xeb, 0x74, 0xe3, 0x46, 0x93, 0x6c, 0xe0, 0xcf, + 0x16, 0x43, 0x57, 0x37, 0x86, 0x9b, 0x1d, 0xe9, 0x72, 0x68, 0x1d, 0xec, 0x70, 0x38, 0x1c, 0x6e, + 0x4b, 0x9e, 0x69, 0xe4, 0x49, 0x60, 0xc7, 0x3c, 0x79, 0xec, 0xf0, 0xc9, 0x63, 0xff, 0x07, 0x92, + 0xe7, 0x3f, 0x42, 0xc9, 0xd2, 0xe9, 0xef, 0x7c, 0x29, 0xe1, 0xf7, 0x90, 0x47, 0xac, 0x5a, 0x3c, + 0x15, 0xa2, 0x2e, 0x90, 0xd0, 0xf0, 0xd5, 0x11, 0x03, 0x86, 0xb6, 0x2e, 0x08, 0x95, 0x2e, 0x46, + 0x28, 0x25, 0x2c, 0xa0, 0xa8, 0x7d, 0xe5, 0x2a, 0xc3, 0xbe, 0x84, 0x17, 0xb4, 0xc8, 0xe0, 0xb4, + 0x8d, 0x3f, 0x0e, 0xc5, 0x56, 0x50, 0x66, 0x07, 0xf7, 0xfb, 0x93, 0xad, 0xdd, 0x5d, 0x74, 0x04, + 0x7a, 0xf7, 0x6e, 0x77, 0x17, 0x1e, 0x83, 0x3f, 0x97, 0x45, 0xac, 0xe9, 0xe5, 0x09, 0x5a, 0xa9, + 0x4a, 0x8d, 0xdf, 0x05, 0xde, 0x5c, 0x3f, 0xb6, 0x9b, 0x99, 0xec, 0x66, 0xf6, 0xff, 0x71, 0x37, + 0x45, 0xb3, 0x64, 0x4f, 0xf1, 0x96, 0x51, 0xb0, 0xca, 0xc7, 0x74, 0x14, 0x3e, 0xc5, 0x1d, 0x85, + 0x1f, 0xff, 0xac, 0x8e, 0x9e, 0x97, 0x70, 0x2e, 0xd5, 0xfd, 0xb2, 0x00, 0xcb, 0x36, 0x9e, 0x35, + 0xcc, 0x6c, 0x3a, 0xf5, 0xe8, 0x80, 0x7f, 0x17, 0xd1, 0x2e, 0x8c, 0x8b, 0x89, 0xa1, 0xbd, 0x19, + 0xef, 0xd2, 0xfa, 0x1c, 0x5d, 0x63, 0x1e, 0x93, 0xa3, 0x58, 0xa3, 0xbf, 0x0a, 0x36, 0x36, 0xd5, + 0xb0, 0xa9, 0x4b, 0x60, 0xda, 0x46, 0x33, 0xc9, 0x69, 0x23, 0x5b, 0x85, 0xa9, 0x1d, 0xa0, 0xa9, + 0xd5, 0x5c, 0x32, 0x1c, 0x0e, 0xa6, 0xf1, 0x2f, 0x85, 0xd6, 0xce, 0xaa, 0xd0, 0xda, 0x12, 0xf0, + 0x50, 0xc2, 0x49, 0x56, 0x35, 0xee, 0x52, 0x93, 0x90, 0xdf, 0xa3, 0xb6, 0x9c, 0xed, 0x04, 0x29, + 0x7a, 0x2e, 0xeb, 0x80, 0xd4, 0x28, 0xe6, 0xf7, 0x9b, 0x2b, 0xe4, 0x69, 0x2c, 0xc6, 0xf3, 0xf7, + 0x0c, 0x5e, 0xc8, 0x15, 0x19, 0x2a, 0x7a, 0x52, 0xc4, 0x11, 0x0c, 0x64, 0xa7, 0xd3, 0xb1, 0xf6, + 0x6a, 0x58, 0xee, 0x7f, 0x42, 0x07, 0x78, 0x8e, 0x3a, 0x4d, 0x34, 0x35, 0x68, 0x35, 0xb7, 0x3d, + 0xa3, 0xb6, 0x15, 0x0d, 0xd1, 0xda, 0xf1, 0x7b, 0x24, 0x1a, 0xa1, 0x77, 0xe5, 0xf7, 0xa8, 0xae, + 0x27, 0x7b, 0xa3, 0x5a, 0xf6, 0x7f, 0x65, 0x8d, 0xec, 0x28, 0x40, 0x0e, 0x13, 0x90, 0x69, 0x07, + 0xd0, 0x08, 0xde, 0xd3, 0x6b, 0xed, 0x63, 0xd6, 0xed, 0x98, 0xa5, 0x81, 0x2c, 0xc8, 0x35, 0x13, + 0x47, 0x93, 0x84, 0x86, 0x1d, 0x29, 0x34, 0xa0, 0x94, 0xb0, 0xa3, 0x04, 0xa9, 0xaf, 0x61, 0x08, + 0xf0, 0x8d, 0xb1, 0x75, 0x02, 0x73, 0xd5, 0x9a, 0xab, 0x03, 0x39, 0x9c, 0x1d, 0x92, 0xd4, 0x1a, + 0xe0, 0xf8, 0x5b, 0x3f, 0xdf, 0x06, 0xe9, 0x5d, 0x0a, 0x12, 0x55, 0xeb, 0x2e, 0xa4, 0xe8, 0xf3, + 0x08, 0x07, 0x37, 0xb0, 0xfe, 0x0a, 0x5b, 0x8b, 0xf0, 0x8f, 0x12, 0x69, 0xcb, 0x47, 0x72, 0x91, + 0x49, 0x56, 0x12, 0xbd, 0x90, 0x69, 0x66, 0x85, 0xf0, 0x85, 0xfd, 0x7e, 0x78, 0xc8, 0xbf, 0x5a, + 0x6c, 0xac, 0x9b, 0x8f, 0x79, 0xd2, 0xd7, 0x5a, 0x02, 0x0f, 0xa3, 0x17, 0xc7, 0x47, 0x2d, 0x98, + 0xca, 0x6b, 0x3f, 0x9e, 0xa2, 0x7c, 0x73, 0x80, 0xb4, 0xe1, 0xa7, 0x81, 0x2f, 0x4b, 0xf8, 0xf3, + 0x30, 0x97, 0x77, 0x4b, 0x54, 0x08, 0x12, 0x48, 0xfd, 0x2b, 0xf2, 0x8d, 0x1a, 0xbe, 0xd3, 0xd3, + 0xbf, 0xd3, 0x93, 0xd0, 0xa2, 0x75, 0x12, 0x42, 0xeb, 0xfa, 0x7b, 0x90, 0xbe, 0x91, 0x46, 0xf2, + 0xa4, 0x75, 0xf4, 0x4a, 0x8e, 0x5f, 0xb1, 0x8b, 0x4e, 0xcb, 0x9a, 0x6d, 0x25, 0xe6, 0xd1, 0x18, + 0xc0, 0x8c, 0x4c, 0x75, 0x61, 0xaf, 0xff, 0xac, 0x4b, 0xc2, 0x5e, 0x4f, 0x09, 0x7b, 0x38, 0x9f, + 0xc1, 0xe0, 0x32, 0xc8, 0xdf, 0x6a, 0x57, 0x8d, 0xc7, 0xb6, 0xb3, 0x1c, 0x35, 0xc9, 0x2c, 0x34, + 0xda, 0xeb, 0xe5, 0x16, 0xf4, 0xf0, 0x38, 0x66, 0xb1, 0x45, 0x02, 0xc1, 0xae, 0xd4, 0x97, 0xca, + 0x3b, 0x10, 0xec, 0xad, 0x92, 0x5a, 0x98, 0x18, 0xb1, 0x8d, 0x3b, 0xcd, 0x9f, 0xa4, 0xd1, 0xd8, + 0x69, 0x07, 0xed, 0x1d, 0x54, 0xd1, 0x68, 0x51, 0xf4, 0x83, 0xe8, 0xd8, 0xa6, 0xf4, 0xb5, 0x1f, + 0xef, 0xee, 0xff, 0x85, 0x3e, 0xfe, 0x8a, 0x8e, 0x9f, 0x3b, 0x83, 0x9d, 0x4d, 0x75, 0xed, 0xc7, + 0xa6, 0xb2, 0x7d, 0x67, 0xa9, 0x37, 0xbd, 0x7e, 0xfa, 0xef, 0xfc, 0x54, 0x76, 0xca, 0xba, 0x98, + 0x13, 0x05, 0xb7, 0x26, 0x1a, 0x45, 0xe0, 0x7b, 0xab, 0x18, 0x7d, 0xd9, 0x7d, 0x93, 0x73, 0x00, + 0x2d, 0x60, 0xcf, 0x24, 0xee, 0x2c, 0x56, 0x52, 0x56, 0x42, 0x72, 0xcb, 0x84, 0xb9, 0x3c, 0xeb, + 0xe2, 0x58, 0x65, 0x3f, 0xac, 0xf3, 0x17, 0x83, 0xf5, 0xfa, 0xe5, 0x22, 0xc1, 0x08, 0x0e, 0x15, + 0x57, 0x73, 0x0e, 0xb6, 0xe4, 0x06, 0x4d, 0xaa, 0x7e, 0x7c, 0x1f, 0xc6, 0xda, 0x8d, 0xac, 0x10, + 0x9b, 0x6d, 0x90, 0x89, 0xe5, 0x45, 0x83, 0x16, 0x4a, 0x7a, 0xde, 0xc5, 0x45, 0xe3, 0x0c, 0xf3, + 0xce, 0x2c, 0x99, 0xdc, 0x64, 0x36, 0x3b, 0x01, 0x66, 0xb5, 0x71, 0xe9, 0xb4, 0xa8, 0x09, 0x02, + 0x31, 0xe4, 0x2b, 0xc3, 0x51, 0x53, 0x14, 0xe9, 0x0d, 0xc3, 0x0e, 0xa0, 0xc2, 0x80, 0x97, 0x49, + 0x06, 0xbf, 0xb8, 0x26, 0xb2, 0x8d, 0xdc, 0xf8, 0x26, 0x7b, 0x12, 0xc4, 0x64, 0x62, 0x26, 0x81, + 0x96, 0xb2, 0x37, 0x6c, 0x0f, 0x59, 0x3f, 0xfc, 0x39, 0x3a, 0xf6, 0x95, 0x35, 0xc9, 0x52, 0xa5, + 0x99, 0xd7, 0x22, 0x37, 0xc3, 0x2e, 0x83, 0xef, 0xc5, 0xa2, 0xac, 0x57, 0x77, 0xd2, 0x2b, 0xbe, + 0x87, 0xe2, 0x9f, 0x74, 0x52, 0x6b, 0xb5, 0xb4, 0x1b, 0xe7, 0xe7, 0xdd, 0xef, 0x60, 0xcf, 0x4b, + 0x22, 0x64, 0x95, 0x5e, 0x9f, 0x5f, 0xb7, 0x36, 0x3d, 0xcb, 0x99, 0x07, 0x37, 0x54, 0x7f, 0xa9, + 0x45, 0xef, 0xf2, 0x79, 0xa5, 0x38, 0xc4, 0x59, 0xdf, 0x96, 0x95, 0x62, 0x0a, 0x64, 0x1a, 0x55, + 0x92, 0xe2, 0xb2, 0x56, 0x34, 0xa0, 0xfe, 0xf4, 0x45, 0xa5, 0xe8, 0xb0, 0x85, 0x6d, 0x34, 0x85, + 0x12, 0xee, 0x17, 0x5e, 0xbf, 0xa9, 0x1e, 0xae, 0x3f, 0x6b, 0x45, 0xbb, 0x40, 0xe5, 0xda, 0xba, + 0x66, 0xc5, 0xe7, 0xe6, 0x8c, 0x4b, 0x5e, 0xf4, 0x98, 0x97, 0xb7, 0xbc, 0xf1, 0x89, 0xb1, 0x36, + 0xc6, 0xbc, 0x68, 0xd1, 0xab, 0x9b, 0x94, 0x6e, 0x77, 0x9a, 0x5a, 0xfc, 0x51, 0xe9, 0x85, 0x9a, + 0x72, 0x7c, 0x03, 0x2d, 0x6c, 0xf7, 0x96, 0x9b, 0x7e, 0x51, 0xce, 0xf7, 0x53, 0x98, 0xef, 0xda, + 0x4b, 0x53, 0x73, 0x2f, 0x31, 0x24, 0x2b, 0xd9, 0x58, 0xde, 0x48, 0xbe, 0x7f, 0xf6, 0x6c, 0xbf, + 0xc3, 0x7b, 0x49, 0xb7, 0xd3, 0x87, 0xdd, 0x3e, 0x98, 0xc3, 0x8f, 0x9e, 0xae, 0x65, 0x20, 0x85, + 0x66, 0x85, 0x14, 0x94, 0x00, 0x55, 0x56, 0x68, 0xee, 0xf5, 0xba, 0x30, 0xf3, 0x59, 0x43, 0x4f, + 0xbf, 0xa6, 0xe5, 0xc5, 0x30, 0xca, 0xb6, 0xab, 0x96, 0x77, 0xeb, 0x5b, 0xfe, 0x71, 0xb3, 0x86, + 0x1b, 0x7a, 0xd3, 0xd5, 0xed, 0x5f, 0x41, 0x7d, 0xd5, 0x4d, 0xeb, 0x31, 0xd4, 0x27, 0x77, 0xae, + 0xca, 0x35, 0x6f, 0x85, 0x22, 0xf6, 0x14, 0x0f, 0x68, 0xb8, 0xb4, 0x12, 0x1b, 0xc6, 0xfc, 0xfd, + 0xcd, 0x35, 0xde, 0x6e, 0x68, 0xb6, 0xc7, 0x9f, 0x92, 0x9b, 0x56, 0x1c, 0xc0, 0x09, 0xd1, 0xcf, + 0x5b, 0x88, 0x79, 0x94, 0xb7, 0xfa, 0x42, 0x5b, 0x92, 0xa1, 0x60, 0x82, 0xc5, 0x5b, 0xbe, 0x92, + 0x15, 0xb7, 0x44, 0x04, 0xa4, 0x7f, 0xed, 0xae, 0x23, 0x6f, 0xd5, 0x7b, 0xdd, 0xae, 0xb6, 0x03, + 0x91, 0x62, 0xc6, 0xb8, 0xaa, 0xd3, 0x55, 0xf7, 0x5d, 0xc9, 0x98, 0x79, 0x4b, 0x92, 0x1b, 0xd2, + 0xbf, 0x8c, 0xc5, 0xeb, 0x22, 0xc4, 0xa2, 0xa9, 0x3c, 0x47, 0x17, 0x92, 0x85, 0xd7, 0x8d, 0xac, + 0xca, 0x5d, 0x1d, 0x56, 0xd9, 0x90, 0x9a, 0x91, 0x6d, 0x92, 0x77, 0x74, 0xfb, 0x16, 0x4d, 0xa8, + 0x50, 0xfa, 0xca, 0x19, 0x9c, 0x53, 0x72, 0x38, 0x42, 0xce, 0xf2, 0xe1, 0xa6, 0x6c, 0xf2, 0x58, + 0x68, 0xd9, 0x24, 0xb9, 0x6e, 0xf8, 0xe1, 0xa8, 0xf6, 0xcb, 0xa4, 0x7d, 0xda, 0xfc, 0xd3, 0x82, + 0x40, 0x0b, 0x24, 0x24, 0xcd, 0x90, 0x90, 0x0e, 0x1a, 0x41, 0x39, 0xa6, 0xa3, 0x38, 0x92, 0x14, + 0xb7, 0x15, 0xc3, 0xe2, 0x4d, 0xcd, 0xcd, 0x40, 0x5e, 0x17, 0x93, 0x4d, 0xe4, 0xee, 0xd7, 0xe5, + 0xa6, 0x5c, 0x03, 0x51, 0xc8, 0x68, 0xcd, 0x09, 0xb0, 0xb5, 0xc2, 0x2e, 0x96, 0x2c, 0x78, 0xe1, + 0x10, 0xdf, 0x1d, 0x2b, 0x58, 0x8a, 0xf3, 0x01, 0x55, 0x0c, 0x67, 0xf5, 0x2e, 0x9e, 0xa1, 0x8b, + 0xf0, 0x59, 0x55, 0xfc, 0x1a, 0xc2, 0xac, 0x71, 0x95, 0xc0, 0xa5, 0x49, 0x33, 0x40, 0x06, 0x64, + 0x6f, 0x00, 0x34, 0x81, 0x7f, 0x85, 0xce, 0xc0, 0x96, 0xc9, 0x15, 0x33, 0x04, 0xdd, 0x89, 0x59, + 0x1a, 0x5a, 0xa8, 0x41, 0x03, 0x69, 0xeb, 0x72, 0x70, 0x7a, 0xb6, 0x2c, 0xf9, 0xf6, 0x7a, 0x98, + 0x91, 0xfc, 0x7b, 0x73, 0x8a, 0x6f, 0x40, 0x21, 0x66, 0xd1, 0x3b, 0x20, 0x43, 0x07, 0x6a, 0x0c, + 0x61, 0xc4, 0x43, 0xbb, 0x74, 0x86, 0xba, 0x65, 0x69, 0x5e, 0xf9, 0xd8, 0xeb, 0xfb, 0xaf, 0xfd, + 0x56, 0x06, 0xe7, 0xc7, 0x25, 0x8a, 0x9e, 0x22, 0x00, 0x86, 0x17, 0xb8, 0xab, 0x3f, 0xc9, 0x11, + 0x80, 0x34, 0xb3, 0x7f, 0xfc, 0x2c, 0xd6, 0x17, 0x50, 0x7d, 0x06, 0x10, 0x47, 0xa0, 0x91, 0x89, + 0xe1, 0x13, 0x20, 0x6c, 0x09, 0xd0, 0x17, 0xea, 0x51, 0x83, 0x3d, 0xd4, 0xee, 0xd1, 0x57, 0x44, + 0x9a, 0x3a, 0x2f, 0x22, 0x4d, 0x05, 0x79, 0x11, 0x9f, 0xce, 0xcd, 0xaa, 0x83, 0xc4, 0x1e, 0xa9, + 0x3c, 0x48, 0x1c, 0xce, 0xd7, 0x18, 0x24, 0xee, 0x14, 0xfa, 0x67, 0xf0, 0xed, 0x95, 0x89, 0x10, + 0x47, 0x8a, 0xaa, 0x45, 0x09, 0xa5, 0x06, 0xe5, 0x74, 0xcd, 0x43, 0x10, 0xbd, 0xcb, 0x32, 0x11, + 0x8f, 0x83, 0x3c, 0x40, 0x72, 0xae, 0xb2, 0xbb, 0x5c, 0x66, 0x5a, 0x70, 0x0b, 0xd3, 0x86, 0x38, + 0xd3, 0x59, 0xe2, 0x3c, 0x17, 0xc3, 0xae, 0x2d, 0x44, 0x45, 0xf2, 0xd2, 0x4a, 0xf5, 0x4f, 0x00, + 0x51, 0xc2, 0x1e, 0x76, 0xb7, 0x3c, 0x61, 0x5b, 0x11, 0x19, 0x1f, 0x82, 0xf9, 0xd1, 0xae, 0x2e, + 0x4d, 0x34, 0xa5, 0xeb, 0x50, 0x7b, 0x65, 0xa2, 0x2a, 0x19, 0x14, 0x50, 0x82, 0x57, 0x9a, 0xdf, + 0xa5, 0x46, 0xc8, 0x40, 0x9c, 0x4c, 0xa4, 0x41, 0x1b, 0xed, 0x81, 0xd1, 0xb7, 0xc4, 0xd3, 0x48, + 0x2b, 0xc6, 0x61, 0x43, 0x63, 0x3e, 0x24, 0x5b, 0xbc, 0xaa, 0xab, 0x05, 0x7c, 0x6a, 0xc7, 0x40, + 0xbc, 0xb7, 0x83, 0xc8, 0xbd, 0x0e, 0x07, 0xbe, 0x8b, 0xee, 0x3c, 0xee, 0x45, 0x1a, 0x0e, 0x6a, + 0xfb, 0x0d, 0x2f, 0x8a, 0xb1, 0xc1, 0x19, 0x49, 0x96, 0x4b, 0x89, 0x62, 0x5b, 0x83, 0x47, 0x33, + 0xd9, 0x00, 0x8f, 0x66, 0xba, 0x1e, 0x8f, 0xc6, 0x9d, 0xd7, 0xe7, 0x41, 0x1c, 0x29, 0x39, 0x0d, + 0x84, 0x15, 0xdc, 0x81, 0x9a, 0xbd, 0x89, 0xcb, 0xbf, 0xa1, 0x06, 0x6f, 0x2a, 0x7e, 0x27, 0x33, + 0x6f, 0xbe, 0xe4, 0x9f, 0x40, 0x19, 0xe4, 0x47, 0x48, 0x1b, 0x3e, 0xba, 0xe9, 0xea, 0x24, 0x94, + 0xea, 0xa6, 0x0b, 0xc2, 0x12, 0x73, 0x35, 0x0d, 0x89, 0x53, 0x67, 0x19, 0x02, 0x2b, 0x2e, 0x43, + 0x60, 0x09, 0xf3, 0x90, 0xca, 0xdd, 0x3d, 0x90, 0x45, 0xc5, 0x7e, 0xa2, 0x6a, 0x6f, 0x1d, 0x91, + 0x31, 0xf5, 0xcc, 0x8e, 0x0e, 0x32, 0x74, 0xbb, 0x7d, 0x78, 0x88, 0x46, 0x84, 0xd3, 0x26, 0x83, + 0xc3, 0xdc, 0x26, 0xe1, 0x54, 0x56, 0xe9, 0x51, 0x16, 0xf6, 0x7b, 0x3c, 0x88, 0x39, 0xbb, 0xbf, + 0x5b, 0x5b, 0xe5, 0x28, 0xae, 0x54, 0x52, 0x18, 0x80, 0xe0, 0x1b, 0x0a, 0x57, 0x6c, 0x16, 0x24, + 0xad, 0xa1, 0xff, 0xf0, 0xb0, 0x55, 0x49, 0xf7, 0x81, 0x23, 0xe8, 0x75, 0xa1, 0x51, 0x05, 0x0f, + 0xa0, 0x88, 0x1e, 0x53, 0x4b, 0x9a, 0x11, 0x93, 0xa6, 0xcf, 0x84, 0x44, 0xfe, 0x2d, 0xd1, 0x01, + 0x23, 0x7e, 0x69, 0x9b, 0x96, 0x01, 0x42, 0x96, 0x55, 0x40, 0xc8, 0x86, 0x1c, 0xf1, 0xa1, 0x08, + 0xa0, 0x2d, 0x47, 0x37, 0xad, 0x8e, 0x78, 0x75, 0x74, 0x43, 0x31, 0xba, 0xe1, 0x41, 0xce, 0xc3, + 0x15, 0x8e, 0xf2, 0xca, 0xc0, 0xc8, 0x43, 0x7c, 0xae, 0x46, 0x37, 0x95, 0x93, 0x91, 0xae, 0x9e, + 0x0c, 0x1c, 0xc7, 0x84, 0x49, 0x92, 0x22, 0x0b, 0x79, 0xa1, 0x2b, 0x1f, 0x93, 0xf9, 0x27, 0x2f, + 0x5d, 0x32, 0x76, 0x41, 0x65, 0x85, 0xd0, 0xe0, 0x57, 0x38, 0xe5, 0xa4, 0x01, 0x32, 0xa8, 0x76, + 0xe1, 0xc4, 0xeb, 0x17, 0x4e, 0xa2, 0x16, 0x4e, 0x2e, 0x9b, 0x05, 0x0b, 0x27, 0x13, 0xbf, 0x61, + 0xe1, 0xc4, 0xec, 0xd4, 0x58, 0xc6, 0xb2, 0x22, 0xb8, 0x35, 0xcc, 0x92, 0xcf, 0xbd, 0x26, 0x9c, + 0x2b, 0x34, 0xf1, 0x52, 0x96, 0xa4, 0xc6, 0x42, 0x4b, 0x4c, 0xdb, 0x1b, 0xb1, 0xce, 0xa0, 0x0a, + 0xb2, 0x5f, 0x3d, 0xe8, 0x8f, 0xeb, 0x8e, 0x0d, 0x70, 0x46, 0xb8, 0x42, 0x25, 0xe6, 0x35, 0x6c, + 0x77, 0x21, 0x9c, 0xaf, 0x8a, 0x9b, 0x26, 0x78, 0x23, 0x4c, 0x3e, 0x40, 0x10, 0xda, 0x42, 0x6b, + 0x0e, 0x59, 0xd5, 0xee, 0xae, 0xdb, 0xb4, 0xf1, 0x22, 0xd9, 0xc1, 0x86, 0xe2, 0x18, 0x5b, 0x6c, + 0xfe, 0x21, 0xb8, 0x5d, 0xb1, 0x5b, 0x23, 0xa7, 0x6c, 0x64, 0xf1, 0xa5, 0xdd, 0x1a, 0xab, 0xfa, + 0xb4, 0xaa, 0xae, 0x4f, 0x66, 0x55, 0x9f, 0x9a, 0x6b, 0x7a, 0x17, 0xae, 0xa8, 0x07, 0xf8, 0x76, + 0xd3, 0xce, 0x52, 0xad, 0x67, 0x55, 0x83, 0xae, 0xcd, 0x06, 0x5d, 0xaf, 0x6a, 0x50, 0xaf, 0xbf, + 0xaa, 0xa2, 0x5e, 0xdf, 0xac, 0xa9, 0x47, 0x52, 0xab, 0x50, 0xa2, 0x1d, 0xa1, 0x8e, 0xa6, 0x5c, + 0xe1, 0xc9, 0xaa, 0x1e, 0x66, 0x66, 0x0f, 0xb3, 0x70, 0x5d, 0x6d, 0x1f, 0xe7, 0x2b, 0x6a, 0xcb, + 0xe7, 0x83, 0x26, 0x82, 0x2d, 0xd7, 0x43, 0xf2, 0x16, 0x2a, 0xcd, 0x1e, 0x27, 0x71, 0x35, 0x92, + 0x5c, 0x90, 0x0f, 0xf2, 0x4a, 0xcf, 0x83, 0xcb, 0xe3, 0xbb, 0x74, 0x45, 0x7b, 0x61, 0x4b, 0xde, + 0x7a, 0x84, 0x0c, 0x50, 0x53, 0xff, 0xcb, 0x74, 0xd5, 0xe8, 0x6e, 0xb4, 0xdb, 0x9b, 0xde, 0xa9, + 0x97, 0xd1, 0x9b, 0x34, 0x08, 0xfe, 0x11, 0xa8, 0x38, 0x05, 0x9a, 0x34, 0xbd, 0x40, 0xe7, 0x5c, + 0x2b, 0xb7, 0x80, 0xa1, 0x73, 0x34, 0x2d, 0x32, 0x5c, 0x62, 0x39, 0x1a, 0x0e, 0xd7, 0x81, 0x5b, + 0x38, 0x07, 0xeb, 0x08, 0xf0, 0xc2, 0xb5, 0xb7, 0xe2, 0x31, 0x6c, 0x43, 0xb5, 0x68, 0x5f, 0xdb, + 0x43, 0x88, 0xdd, 0x66, 0x29, 0x3b, 0x7f, 0xf3, 0x9b, 0x6a, 0x0c, 0x3b, 0xf7, 0x7b, 0xc1, 0x58, + 0x8b, 0xef, 0x52, 0x8e, 0xd5, 0xb2, 0x23, 0x63, 0xb5, 0x94, 0xc3, 0x0a, 0x0f, 0x04, 0x29, 0xec, + 0xc8, 0x9e, 0x0f, 0xca, 0x45, 0xcf, 0x9b, 0x8a, 0x96, 0x83, 0x50, 0x6b, 0x21, 0x88, 0x6b, 0x28, + 0x62, 0x76, 0x5f, 0x8c, 0x3a, 0xe2, 0xf2, 0xdd, 0x4f, 0x83, 0x59, 0xe1, 0x88, 0x43, 0x8f, 0xe5, + 0xa9, 0x54, 0xd1, 0xb2, 0x1f, 0xd5, 0x51, 0x11, 0x4d, 0xbb, 0x55, 0x1b, 0x38, 0x7b, 0x93, 0xee, + 0xae, 0xac, 0xe0, 0x71, 0x9d, 0x86, 0x62, 0x83, 0xa0, 0xdc, 0x2d, 0x24, 0xcf, 0x12, 0x75, 0x56, + 0x68, 0xb2, 0x1a, 0x9a, 0xd1, 0x29, 0xd3, 0x39, 0x86, 0x57, 0xb2, 0xeb, 0xa8, 0x3c, 0xbb, 0xaf, + 0xad, 0xcb, 0x08, 0xd6, 0x56, 0x59, 0x36, 0x2a, 0x58, 0x5b, 0x6d, 0x95, 0x61, 0x7d, 0x95, 0x95, + 0x08, 0x6f, 0x95, 0x6a, 0x39, 0xc8, 0x13, 0xcc, 0xa0, 0x88, 0x50, 0x89, 0xc7, 0xf1, 0x87, 0x87, + 0x60, 0xb4, 0xef, 0x98, 0x8b, 0x68, 0xb9, 0xac, 0x62, 0x02, 0x72, 0x78, 0x37, 0x0a, 0x86, 0x24, + 0x36, 0xef, 0x7d, 0x9a, 0x7d, 0x5e, 0x5b, 0x93, 0x7d, 0x2f, 0x1b, 0xf4, 0xf5, 0x84, 0x3e, 0x24, + 0x88, 0x9f, 0x3d, 0xd8, 0xd1, 0x4b, 0x8b, 0xc7, 0x68, 0x16, 0x87, 0x61, 0xc2, 0x66, 0x69, 0xd1, + 0x33, 0xcb, 0x6d, 0xcb, 0x54, 0xdb, 0xc4, 0x87, 0xf9, 0x2c, 0x96, 0xec, 0x7b, 0x5b, 0x5b, 0xb9, + 0xf8, 0xb4, 0x48, 0xea, 0x53, 0x92, 0x78, 0xe8, 0xe1, 0x83, 0x5b, 0x3a, 0xaa, 0x19, 0x9f, 0x7f, + 0x9b, 0x54, 0x19, 0x20, 0x2e, 0xfa, 0xa0, 0xbc, 0x00, 0x48, 0x9e, 0xd0, 0x8e, 0xef, 0x18, 0x30, + 0x73, 0x89, 0x50, 0x94, 0x52, 0x29, 0x63, 0x63, 0x0c, 0x40, 0x11, 0x6f, 0x41, 0xda, 0x3a, 0x60, + 0xf8, 0x1c, 0x65, 0xf7, 0x70, 0x87, 0x12, 0x9b, 0xfe, 0x54, 0x04, 0xb9, 0x39, 0x66, 0x20, 0x76, + 0xe7, 0xc0, 0xeb, 0x32, 0x6e, 0xe3, 0x62, 0x0e, 0xfc, 0x71, 0xe9, 0x0a, 0xdb, 0x7a, 0xe0, 0xb7, + 0xe1, 0x25, 0x0c, 0x9d, 0x2b, 0x4b, 0x3b, 0x85, 0x9d, 0xe9, 0xef, 0x51, 0xf1, 0x3b, 0x46, 0x9f, + 0x6c, 0xa3, 0x3d, 0xc0, 0xfd, 0x92, 0x18, 0x03, 0x91, 0xbb, 0x9a, 0x58, 0xf3, 0x36, 0xf1, 0xd1, + 0x6d, 0x45, 0x68, 0x40, 0x5b, 0x56, 0x5b, 0xda, 0x23, 0xb4, 0xad, 0x96, 0x4d, 0x10, 0x6e, 0x8e, + 0xb5, 0x82, 0xe3, 0xd1, 0xbd, 0x28, 0xed, 0x4d, 0x30, 0x55, 0x30, 0x57, 0xf3, 0xa3, 0xb2, 0x49, + 0x2a, 0xdf, 0xec, 0x2a, 0x0e, 0xee, 0x40, 0xb7, 0x8f, 0x0e, 0x7a, 0xd8, 0x1c, 0xc8, 0xdb, 0x74, + 0x61, 0x0b, 0x87, 0xad, 0xa3, 0x51, 0xff, 0x59, 0xd7, 0x81, 0xf5, 0x9d, 0x42, 0x2b, 0x85, 0x73, + 0xc0, 0xd1, 0x2b, 0x90, 0xba, 0x80, 0x05, 0x5c, 0x04, 0x2d, 0xbc, 0xfc, 0x4d, 0xe0, 0x2c, 0x13, + 0x64, 0x59, 0x47, 0x42, 0xd9, 0x62, 0x84, 0x36, 0x7b, 0xfe, 0x5e, 0xd3, 0x77, 0x91, 0x2a, 0x49, + 0x7c, 0x19, 0xbf, 0xf8, 0xde, 0xb3, 0xf3, 0xb1, 0xa5, 0x0c, 0xf3, 0xad, 0xc2, 0xed, 0xc0, 0x69, + 0xcf, 0x8f, 0x64, 0xdc, 0xd2, 0x45, 0x71, 0x9a, 0xac, 0xd3, 0x9a, 0x39, 0xf9, 0x18, 0x04, 0x6b, + 0xa9, 0x20, 0x2e, 0x8c, 0x58, 0xdd, 0x8c, 0xc7, 0x17, 0xff, 0xe2, 0x30, 0x0f, 0x10, 0xe2, 0xf5, + 0x42, 0x6b, 0x0d, 0x59, 0x87, 0xe9, 0x87, 0x6a, 0xcd, 0x8c, 0xca, 0xc3, 0xbc, 0x18, 0xdb, 0x5d, + 0x2f, 0x90, 0x95, 0x0a, 0x64, 0x66, 0x81, 0x8c, 0x0a, 0x4c, 0x8c, 0x02, 0x93, 0xab, 0xcf, 0x46, + 0x81, 0xc2, 0x7e, 0x09, 0x0b, 0x4c, 0x34, 0x1d, 0x5e, 0x74, 0x4d, 0xf2, 0x33, 0x85, 0x55, 0x2b, + 0xa5, 0xf2, 0x88, 0x51, 0x28, 0x7a, 0x61, 0xa0, 0x53, 0x33, 0xa9, 0x5a, 0x4e, 0x0c, 0xb1, 0x44, + 0x33, 0xc0, 0x66, 0xbd, 0x45, 0x1e, 0x7f, 0xae, 0xf6, 0xee, 0x61, 0x9e, 0x7e, 0x59, 0x18, 0x90, + 0x50, 0xb1, 0xb3, 0xe4, 0x88, 0x1f, 0x4c, 0x3d, 0x08, 0x06, 0x19, 0x83, 0x9c, 0x5f, 0x44, 0xe7, + 0x33, 0x8e, 0x32, 0x45, 0xa5, 0x78, 0xa7, 0x6c, 0x40, 0xb3, 0x5a, 0xdb, 0xdf, 0xfc, 0xf0, 0xfc, + 0xf9, 0xf3, 0x61, 0x8b, 0x97, 0x4e, 0x8b, 0xb4, 0xd8, 0xad, 0x2f, 0x18, 0x4d, 0x43, 0xb3, 0x7a, + 0x68, 0x91, 0x63, 0x06, 0x87, 0xe2, 0xd1, 0x96, 0xdb, 0xc2, 0x72, 0x46, 0xbb, 0xbd, 0x47, 0x7f, + 0xea, 0xe4, 0x0b, 0x88, 0x3b, 0xf7, 0x22, 0x0e, 0x63, 0x18, 0xb7, 0x26, 0xc4, 0x51, 0x5b, 0xd8, + 0x3d, 0xfd, 0xa3, 0xfc, 0x39, 0x8a, 0x4d, 0x58, 0x59, 0xe0, 0x7f, 0xb4, 0x7b, 0x42, 0xe7, 0x4f, + 0x81, 0x31, 0x40, 0xda, 0x0b, 0x60, 0x39, 0xcc, 0xd0, 0xe4, 0xf3, 0x3a, 0x99, 0x86, 0xb3, 0x2f, + 0xb8, 0x98, 0x29, 0xba, 0x06, 0xaf, 0x68, 0x90, 0xc4, 0x98, 0x1c, 0xe1, 0xcf, 0x1c, 0x97, 0xab, + 0x37, 0x3f, 0x02, 0xaa, 0x81, 0x23, 0xd9, 0xfb, 0xa1, 0xa6, 0x2b, 0x12, 0x16, 0x3f, 0x85, 0x3e, + 0x41, 0x8b, 0x8b, 0x05, 0x33, 0xf3, 0x7b, 0x04, 0x87, 0x6a, 0x9d, 0x6d, 0x9c, 0xf8, 0xb7, 0x8c, + 0x7a, 0x34, 0x7f, 0xcf, 0x8c, 0x62, 0x7e, 0x54, 0xe5, 0x14, 0x19, 0x82, 0x15, 0x24, 0x63, 0x76, + 0x03, 0x3a, 0x9d, 0x1f, 0x9d, 0x01, 0xfb, 0x37, 0xfc, 0x86, 0x20, 0x89, 0x1b, 0x55, 0x4d, 0x4e, + 0xaa, 0x49, 0xb7, 0xd5, 0x24, 0xb4, 0xe9, 0x85, 0x75, 0x56, 0x7c, 0x60, 0x11, 0x0f, 0xe6, 0xef, + 0x5d, 0x20, 0xa4, 0x81, 0xd5, 0x34, 0x5a, 0x18, 0xb0, 0x33, 0x08, 0x78, 0x8c, 0xe2, 0xe0, 0x2e, + 0xfa, 0x42, 0x5c, 0x6c, 0x2a, 0x67, 0xac, 0x63, 0xc1, 0x9e, 0x87, 0xa4, 0x88, 0xfc, 0x42, 0x7d, + 0x08, 0x49, 0x93, 0x52, 0xb1, 0x4b, 0xbf, 0x47, 0xc6, 0x3b, 0x18, 0x1c, 0x4c, 0x73, 0xb4, 0x00, + 0x3e, 0x22, 0x7a, 0x0e, 0x0e, 0x47, 0x71, 0x29, 0xe2, 0x96, 0x03, 0xed, 0xcc, 0xaf, 0xf3, 0xb7, + 0x30, 0x9a, 0x5e, 0xd7, 0xd5, 0x43, 0xee, 0x88, 0x88, 0x7c, 0x7a, 0xc4, 0x1b, 0xb6, 0x9a, 0x95, + 0x6c, 0xb6, 0x87, 0x46, 0x71, 0xd2, 0xfb, 0x05, 0xdf, 0x49, 0x42, 0x32, 0x53, 0xd1, 0xdf, 0x5d, + 0xa7, 0xa2, 0xcd, 0xed, 0x6c, 0x2d, 0x97, 0x14, 0x27, 0x74, 0xa0, 0x40, 0x5c, 0xac, 0x52, 0xbd, + 0xbd, 0xc7, 0xd4, 0xbb, 0xff, 0x7c, 0xc6, 0x96, 0x30, 0x78, 0xe1, 0x53, 0xf0, 0xd7, 0x95, 0xfc, + 0xb3, 0x49, 0x9d, 0x2a, 0x1b, 0x64, 0xee, 0xd0, 0xb2, 0x22, 0x94, 0x08, 0x4a, 0xbe, 0x34, 0x75, + 0x57, 0x20, 0x53, 0xd4, 0x6b, 0x0e, 0x8d, 0x31, 0x9c, 0xc4, 0xb3, 0xb1, 0x6d, 0xd6, 0x39, 0x45, + 0x5d, 0xfe, 0xd2, 0x31, 0x29, 0x0e, 0x43, 0x07, 0x56, 0x66, 0x58, 0xbf, 0xbc, 0x6a, 0xbc, 0xba, + 0x22, 0xc7, 0x0e, 0xbe, 0x2f, 0x99, 0x54, 0x83, 0x8f, 0x3f, 0x62, 0x38, 0x4d, 0xdb, 0x9e, 0x2d, + 0x2c, 0xab, 0xf5, 0x02, 0xc4, 0x39, 0x43, 0x51, 0x5f, 0x84, 0x01, 0x5c, 0x60, 0x2c, 0x47, 0x2f, + 0xd0, 0x95, 0xf0, 0x4d, 0x01, 0x94, 0x49, 0x3d, 0xee, 0xd4, 0xdd, 0xb5, 0xdd, 0xdf, 0x13, 0x1c, + 0xcf, 0x30, 0x47, 0x99, 0xa5, 0xd4, 0x55, 0xf1, 0x0e, 0x69, 0xfc, 0x98, 0x50, 0x87, 0xec, 0xf4, + 0xf2, 0xe2, 0x24, 0x4f, 0xed, 0x5c, 0x0b, 0x84, 0x0c, 0x4b, 0x04, 0x58, 0xe1, 0x04, 0x61, 0x89, + 0x78, 0x1c, 0xe4, 0x46, 0x53, 0x06, 0xea, 0x71, 0x4d, 0x3c, 0x28, 0xa1, 0xc5, 0x2a, 0x14, 0x6b, + 0x46, 0x70, 0xe5, 0x46, 0xc0, 0x29, 0x44, 0x92, 0x2a, 0x87, 0xb1, 0xa5, 0xc8, 0x77, 0x78, 0xb8, + 0xbb, 0xc2, 0xb0, 0xe3, 0xca, 0x0b, 0xe8, 0x50, 0xc4, 0xac, 0xb5, 0x52, 0xe0, 0xd9, 0x20, 0x41, + 0x3a, 0x0b, 0x90, 0x42, 0x17, 0x57, 0x03, 0xd8, 0xcc, 0xe1, 0xbf, 0xdb, 0x01, 0xde, 0x4b, 0xc1, + 0x69, 0x5f, 0xf7, 0x27, 0x7a, 0xd6, 0x65, 0x10, 0xb9, 0x14, 0x98, 0x06, 0xc8, 0xd2, 0x4e, 0x1b, + 0xc3, 0x68, 0x4e, 0x93, 0x45, 0xd0, 0xb9, 0xd2, 0xb3, 0xed, 0x7f, 0x5f, 0xca, 0xe7, 0x2c, 0xef, + 0x60, 0xcc, 0x03, 0x9b, 0x12, 0xfd, 0x8b, 0xcc, 0x86, 0x02, 0xbb, 0xd4, 0x22, 0xe7, 0x00, 0xab, + 0xe0, 0xc6, 0x41, 0xe2, 0xb2, 0x18, 0xcb, 0x80, 0x83, 0x46, 0xe3, 0x90, 0xa1, 0x21, 0x52, 0x19, + 0x54, 0x4e, 0x8d, 0x9b, 0x88, 0xb8, 0xa1, 0x8f, 0x30, 0x4c, 0xc3, 0xd0, 0x04, 0xef, 0x52, 0x31, + 0xe5, 0x53, 0xd7, 0x44, 0xee, 0x52, 0x2f, 0x2e, 0x5d, 0x13, 0xb6, 0xab, 0x88, 0x42, 0xcf, 0x04, + 0x04, 0x87, 0x02, 0xfd, 0x13, 0x57, 0xc1, 0x3d, 0xc3, 0x41, 0x68, 0x77, 0x27, 0xbd, 0x2a, 0x26, + 0xb8, 0x49, 0x70, 0xa7, 0x48, 0x91, 0xfa, 0x2c, 0x0e, 0x63, 0xde, 0x6c, 0xda, 0xb0, 0x57, 0xe6, + 0x89, 0xc0, 0x97, 0xc0, 0x00, 0xac, 0x0a, 0x93, 0x4b, 0xe1, 0x1a, 0xc3, 0x3e, 0xa2, 0xd2, 0xe2, + 0xd9, 0xfa, 0x98, 0x6c, 0xfb, 0x8e, 0x25, 0x60, 0x8c, 0x8c, 0x66, 0xdf, 0x04, 0xae, 0x6f, 0xa4, + 0x64, 0x7e, 0x2e, 0x0c, 0x43, 0xdc, 0xa4, 0x4a, 0xa6, 0xfa, 0x30, 0xfe, 0xa4, 0x9a, 0x12, 0x19, + 0x91, 0xb7, 0x8b, 0xa0, 0xd7, 0x7a, 0xf2, 0x2f, 0x2a, 0x39, 0x81, 0x83, 0x4d, 0x98, 0x26, 0x9d, + 0x43, 0x6e, 0x41, 0x76, 0xfb, 0x31, 0xf9, 0x70, 0x79, 0x61, 0x03, 0xa5, 0x45, 0x40, 0x69, 0x40, + 0x65, 0x92, 0xd6, 0xca, 0xb5, 0xd6, 0x78, 0x42, 0x97, 0x3b, 0x7d, 0x84, 0xf0, 0x98, 0x18, 0x38, + 0x28, 0x0e, 0xfc, 0x74, 0xf7, 0x32, 0x05, 0xc1, 0x1e, 0x72, 0xdb, 0x3f, 0x74, 0xa7, 0xc1, 0xa5, + 0xdb, 0xfa, 0xc6, 0xf7, 0xfd, 0xd6, 0x6e, 0xef, 0xd9, 0x77, 0x6e, 0x0b, 0x81, 0x72, 0xd1, 0x70, + 0x3a, 0x6d, 0x5b, 0x2e, 0xfe, 0xbd, 0x14, 0x7f, 0x2f, 0x60, 0x0b, 0x47, 0x76, 0xb4, 0xa2, 0x85, + 0x7e, 0x5d, 0xfb, 0x7e, 0xf9, 0x53, 0xda, 0xd7, 0xed, 0x76, 0x37, 0x6b, 0x9f, 0xf6, 0xe5, 0x7f, + 0x57, 0x03, 0xab, 0xcf, 0xd6, 0xe7, 0x20, 0x02, 0xe9, 0xa4, 0x58, 0x25, 0x40, 0x26, 0x1c, 0xd3, + 0xc0, 0x59, 0xf4, 0xe0, 0xc8, 0xc8, 0xea, 0xb2, 0xcf, 0xc1, 0x97, 0xc3, 0x04, 0xc1, 0xa2, 0x10, + 0xb8, 0x85, 0x22, 0x6a, 0xea, 0xac, 0x53, 0x04, 0x41, 0x08, 0x6a, 0x4b, 0xa8, 0x2b, 0x99, 0xa2, + 0x84, 0xaa, 0x44, 0xc7, 0x91, 0xd2, 0x49, 0x76, 0x58, 0xb9, 0x6a, 0x2c, 0xd6, 0xca, 0xf7, 0x0e, + 0x06, 0x1a, 0x66, 0x01, 0x59, 0x2d, 0x79, 0xeb, 0x1b, 0x0c, 0xdf, 0xad, 0x87, 0x2b, 0x85, 0xa5, + 0x20, 0x04, 0x66, 0x52, 0x52, 0x17, 0x19, 0x67, 0x33, 0xdf, 0xef, 0x22, 0xee, 0xca, 0x06, 0xcb, + 0xcc, 0xe3, 0x40, 0xad, 0xb9, 0x33, 0xee, 0xd2, 0x75, 0xa6, 0x60, 0x2a, 0xfd, 0xd2, 0x09, 0x57, + 0xb2, 0x1d, 0xb1, 0x7d, 0x62, 0x80, 0x44, 0x45, 0x14, 0x78, 0x95, 0x22, 0xee, 0x21, 0xe0, 0xf8, + 0x66, 0xac, 0x1f, 0x38, 0x15, 0xe7, 0xce, 0xa0, 0x94, 0x74, 0x78, 0xe5, 0xc3, 0xf6, 0x16, 0xc1, + 0x78, 0x64, 0xb7, 0x30, 0x91, 0xf0, 0x5f, 0xb7, 0x91, 0x65, 0x7f, 0x0d, 0xb6, 0x60, 0x69, 0x36, + 0x60, 0x2e, 0x56, 0x37, 0xe4, 0xca, 0x20, 0xa5, 0x9f, 0x0a, 0x65, 0x89, 0x51, 0xcf, 0xc9, 0xda, + 0x7a, 0x32, 0xab, 0x96, 0x05, 0x94, 0xea, 0xf9, 0x65, 0x6d, 0x3d, 0xb7, 0x56, 0x2d, 0xcf, 0x28, + 0xd5, 0xf3, 0xef, 0xd5, 0x7a, 0xec, 0x05, 0x53, 0xfc, 0xa0, 0x6e, 0x65, 0x2c, 0x4b, 0xe5, 0x71, + 0x31, 0x1b, 0x54, 0x5a, 0xda, 0x17, 0xdc, 0xdc, 0xab, 0xdb, 0x15, 0xc4, 0x75, 0x57, 0x79, 0x4f, + 0x18, 0x16, 0xc4, 0x22, 0xf0, 0xb7, 0xa5, 0xa5, 0x19, 0xc5, 0x0f, 0x39, 0x67, 0x13, 0x9f, 0xb8, + 0x56, 0xe2, 0x28, 0xd3, 0x66, 0xea, 0x05, 0x6e, 0x39, 0xed, 0x12, 0x11, 0x3d, 0x4a, 0x69, 0x17, + 0x5e, 0x26, 0x21, 0x14, 0xc4, 0xab, 0x52, 0x17, 0x7f, 0x35, 0x2d, 0x85, 0x95, 0x30, 0xe0, 0xd6, + 0x4b, 0x3e, 0x79, 0x65, 0x8d, 0x04, 0xb2, 0xcf, 0xfc, 0x15, 0x91, 0xc1, 0x24, 0xbe, 0xa0, 0xa4, + 0x51, 0x13, 0x2b, 0x63, 0xd1, 0x2c, 0x61, 0xd1, 0x1d, 0xad, 0x1b, 0xbb, 0x11, 0xec, 0x3a, 0xa5, + 0x6f, 0xba, 0x88, 0x41, 0xde, 0x23, 0x1d, 0x75, 0x98, 0xc1, 0x0c, 0xbd, 0x44, 0x64, 0x5b, 0x1b, + 0x63, 0xe5, 0xaf, 0x25, 0x19, 0x74, 0xc4, 0x77, 0xfb, 0x5b, 0x58, 0xb4, 0x80, 0xd6, 0xb4, 0x93, + 0x5a, 0xad, 0x9d, 0x12, 0xa5, 0x1c, 0x79, 0x57, 0x59, 0x96, 0x14, 0x7c, 0x98, 0x85, 0x4c, 0xc2, + 0x40, 0x86, 0x9d, 0x74, 0x90, 0xb8, 0x3e, 0x4c, 0x42, 0x5c, 0x24, 0x5d, 0x52, 0xd2, 0x85, 0x17, + 0x15, 0x49, 0x17, 0x94, 0x74, 0x07, 0x9b, 0x5b, 0x69, 0xc0, 0xe8, 0x23, 0xd2, 0x18, 0x00, 0x3e, + 0x32, 0x38, 0x3d, 0x3d, 0x73, 0xe9, 0xff, 0x67, 0xcb, 0xa5, 0xb8, 0x2c, 0x47, 0x5c, 0x0c, 0xca, + 0xed, 0x9d, 0xf2, 0xe0, 0x24, 0x67, 0xe5, 0xcb, 0x70, 0x43, 0x4b, 0xeb, 0x47, 0x68, 0x9c, 0x5e, + 0x7f, 0x91, 0x30, 0x99, 0xe4, 0xba, 0x36, 0x1b, 0xcf, 0x03, 0x14, 0x2a, 0x7c, 0xa2, 0xcb, 0x7a, + 0x08, 0xe2, 0xf3, 0x23, 0x72, 0x07, 0x01, 0x06, 0x85, 0xcf, 0x12, 0x58, 0x6a, 0x6f, 0xef, 0x32, + 0xcc, 0xaf, 0x6e, 0x2e, 0x50, 0xfb, 0xbd, 0xf7, 0x2e, 0x49, 0xe2, 0x77, 0xc9, 0xf4, 0x26, 0x0a, + 0xb2, 0x3d, 0xf4, 0xf2, 0xda, 0xbb, 0x0b, 0x3f, 0x87, 0x78, 0x9e, 0x2e, 0x07, 0x71, 0x97, 0x91, + 0xda, 0x6c, 0xfb, 0x6a, 0xd2, 0xf6, 0x7a, 0xcf, 0x9d, 0xd1, 0x3e, 0x86, 0xd7, 0xb5, 0xf1, 0xbb, + 0x8e, 0x7b, 0x35, 0x19, 0xf5, 0xe5, 0xe3, 0x7e, 0x17, 0x79, 0xfd, 0xd3, 0xa7, 0x9e, 0x77, 0x35, + 0xa1, 0x94, 0xb6, 0xb7, 0x8f, 0x29, 0xdd, 0xe7, 0x5a, 0x0a, 0x54, 0x20, 0xc5, 0x1b, 0x8c, 0x1d, + 0xe6, 0x18, 0x07, 0x87, 0xf3, 0xab, 0x0c, 0x2d, 0x2a, 0xaf, 0x26, 0x4b, 0xb7, 0x85, 0x91, 0xda, + 0xdc, 0xd6, 0xb3, 0xee, 0x77, 0xb0, 0xce, 0x96, 0xee, 0x0f, 0x3d, 0x19, 0xc6, 0x3d, 0x9e, 0xa5, + 0x46, 0x48, 0x67, 0x48, 0xf8, 0x40, 0x1a, 0x4b, 0x56, 0xa8, 0xe2, 0x7b, 0x83, 0x03, 0xd0, 0x59, + 0x06, 0xce, 0x19, 0x16, 0xda, 0x2c, 0x31, 0x40, 0x58, 0xf3, 0x61, 0x45, 0xb7, 0xb4, 0xc3, 0xf8, + 0xbe, 0xb3, 0x30, 0xbd, 0x6e, 0x7d, 0x08, 0x2e, 0x92, 0x44, 0x9c, 0x1b, 0x6d, 0xfe, 0x3e, 0x88, + 0xa9, 0x15, 0xb4, 0x2d, 0x38, 0x8b, 0x7b, 0xd6, 0x1e, 0xeb, 0x25, 0x96, 0xb2, 0xa9, 0x27, 0x66, + 0xf8, 0x69, 0xd8, 0x59, 0x33, 0x93, 0x41, 0xa5, 0x19, 0xb7, 0x4d, 0xb6, 0xfd, 0xc4, 0xf9, 0x83, + 0xad, 0xe4, 0x0f, 0x17, 0x8d, 0x3c, 0x21, 0x54, 0x46, 0xd9, 0x06, 0xb7, 0xa1, 0xba, 0x59, 0xb9, + 0x3a, 0x1a, 0x4b, 0x75, 0xeb, 0x2b, 0xa3, 0x56, 0xb2, 0x79, 0xd2, 0x82, 0xcd, 0x09, 0xba, 0x7c, + 0xaf, 0x2b, 0x23, 0x21, 0x49, 0xb3, 0xa1, 0x33, 0x8c, 0x4c, 0xfb, 0x4e, 0xde, 0x43, 0x71, 0xbc, + 0x8d, 0x64, 0xee, 0x5d, 0xdf, 0xb9, 0x5a, 0x02, 0x94, 0xff, 0x8d, 0xce, 0xee, 0x5a, 0x96, 0x4f, + 0xde, 0xf5, 0x95, 0x8e, 0x91, 0xd0, 0x33, 0x0c, 0x9f, 0x74, 0xeb, 0x30, 0x71, 0x9f, 0xdc, 0x6c, + 0x7d, 0x76, 0x19, 0xc4, 0xea, 0xf0, 0x2a, 0x46, 0xd9, 0x42, 0x99, 0xcf, 0x5a, 0x58, 0xae, 0xf0, + 0x5b, 0x00, 0xc9, 0x5d, 0x53, 0xd3, 0x59, 0x8b, 0x25, 0x01, 0x6c, 0x54, 0x92, 0xfc, 0x6a, 0x52, + 0x52, 0x49, 0x2a, 0x66, 0x36, 0x64, 0x05, 0x06, 0x1e, 0xa3, 0x1f, 0x1e, 0x6c, 0xfc, 0x03, 0x1f, + 0x86, 0x5a, 0xf8, 0xd9, 0x97, 0xcf, 0x09, 0x3f, 0x27, 0xf2, 0x39, 0xe2, 0xe7, 0x48, 0x3e, 0x63, + 0xc1, 0xb6, 0x87, 0x8f, 0x6d, 0x0b, 0x84, 0x42, 0x2a, 0x2f, 0x9f, 0xd1, 0x5c, 0x96, 0x2a, 0x90, + 0x09, 0x7f, 0xb1, 0x5c, 0x2e, 0xe8, 0x5a, 0x0a, 0x73, 0x9c, 0xa2, 0x91, 0x64, 0x0e, 0x69, 0x01, + 0xc9, 0xb7, 0x4e, 0x29, 0xe6, 0x3e, 0x9c, 0xfc, 0xf2, 0x8a, 0x41, 0x0b, 0x37, 0x02, 0x2e, 0x89, + 0x3b, 0xe1, 0x94, 0x37, 0x1a, 0x85, 0x50, 0x82, 0x49, 0x67, 0x30, 0x56, 0xf5, 0x20, 0x25, 0xbe, + 0xa7, 0x02, 0xae, 0x3c, 0x65, 0x3c, 0x11, 0x68, 0xe6, 0xfe, 0xd9, 0xd8, 0xea, 0x21, 0xf2, 0xc4, + 0xfe, 0x99, 0x60, 0x97, 0x1c, 0x6e, 0x41, 0x69, 0xe0, 0x9e, 0xca, 0xcd, 0xcc, 0x22, 0xc0, 0x8a, + 0xa7, 0x04, 0x40, 0x82, 0x7f, 0xeb, 0x00, 0x48, 0x18, 0x40, 0x2b, 0xd0, 0x61, 0xb3, 0x44, 0x0b, + 0xb1, 0x74, 0x70, 0x9a, 0x53, 0xe9, 0x80, 0x00, 0xa6, 0xb8, 0x34, 0xc6, 0xd4, 0x4f, 0xdb, 0xde, + 0xb9, 0x8b, 0x0e, 0x26, 0x14, 0x3a, 0x67, 0x80, 0x3f, 0x7a, 0x67, 0xcb, 0xf3, 0xe5, 0x12, 0x51, + 0x44, 0xc8, 0x37, 0x3a, 0x83, 0x2d, 0xe4, 0xde, 0x72, 0x60, 0x22, 0x20, 0xef, 0x8e, 0x8b, 0x0f, + 0x83, 0x5e, 0xff, 0xf9, 0x0e, 0x9c, 0xaf, 0xb5, 0x2c, 0xa1, 0x9e, 0x25, 0xac, 0xcd, 0x32, 0xe9, + 0x69, 0x59, 0xe0, 0xa1, 0x2e, 0x4b, 0x5f, 0xcf, 0xd2, 0xaf, 0xcd, 0xb2, 0xaf, 0x67, 0xd9, 0x87, + 0x2c, 0xdf, 0x97, 0x72, 0x24, 0xfa, 0x77, 0xe0, 0x61, 0xd0, 0x2d, 0x67, 0xd0, 0xbf, 0x02, 0x0f, + 0xd5, 0x0c, 0xfa, 0x37, 0xe0, 0xa1, 0x92, 0x61, 0x8e, 0xa0, 0xd2, 0x2a, 0x07, 0x3e, 0x0d, 0x7a, + 0xbd, 0x52, 0x9e, 0xeb, 0x1e, 0x7d, 0x66, 0xcb, 0xd7, 0xd2, 0xa8, 0x65, 0x46, 0x42, 0xe7, 0x59, + 0x25, 0x09, 0x8a, 0x8d, 0x6d, 0xbd, 0xa6, 0x34, 0xb8, 0xd5, 0xbe, 0x86, 0x4f, 0x03, 0x0a, 0xe0, + 0x5a, 0xfe, 0x60, 0xa8, 0xe5, 0x82, 0x87, 0xda, 0x4c, 0xe9, 0x27, 0xbd, 0xaa, 0x4f, 0x0d, 0x35, + 0xe9, 0x99, 0xae, 0x8b, 0x4c, 0xce, 0x40, 0x6b, 0x02, 0x06, 0x81, 0xe7, 0xef, 0xf0, 0x2f, 0xac, + 0x4c, 0xa4, 0x15, 0xbf, 0xa0, 0x33, 0x83, 0xfe, 0x8e, 0x1b, 0x00, 0x95, 0x91, 0x4b, 0xcc, 0xb7, + 0x8b, 0x98, 0x9c, 0x81, 0x07, 0x0b, 0x0b, 0x23, 0x5a, 0xe3, 0x23, 0x2e, 0xc4, 0x25, 0x50, 0xb2, + 0x30, 0x65, 0x85, 0xc1, 0x76, 0x29, 0xd4, 0x10, 0x70, 0x54, 0x2b, 0x9c, 0xd2, 0xe3, 0xec, 0x1e, + 0x29, 0x93, 0x4a, 0x7e, 0xbb, 0x48, 0x97, 0xc0, 0x4c, 0xcf, 0x91, 0x6d, 0xfd, 0x2d, 0x76, 0x2d, + 0x37, 0xb4, 0x7d, 0x97, 0x96, 0x23, 0xfc, 0xb2, 0x5e, 0x44, 0x91, 0x25, 0x9e, 0x4a, 0xc3, 0x0e, + 0xd2, 0x15, 0xbd, 0xee, 0xd5, 0xbd, 0xef, 0x17, 0xef, 0xfb, 0xe2, 0x3d, 0xef, 0x51, 0x5e, 0x7f, + 0xbf, 0x6b, 0x38, 0x3d, 0x87, 0x31, 0x46, 0xb1, 0xc2, 0xee, 0xe0, 0xc7, 0xbf, 0x5d, 0x4c, 0xb4, + 0xae, 0xe4, 0xcb, 0x57, 0x2d, 0x79, 0xbf, 0x04, 0xfd, 0xf9, 0x3d, 0xa2, 0xd4, 0x09, 0xf6, 0x0d, + 0x1d, 0x94, 0x79, 0x44, 0xa4, 0xca, 0x12, 0x8b, 0xcd, 0x33, 0xe8, 0x24, 0xf4, 0x0b, 0xdd, 0x87, + 0xce, 0x5c, 0x6b, 0x7a, 0x93, 0xd2, 0xb3, 0x2f, 0x9e, 0x0b, 0xb7, 0x0c, 0x4a, 0x4e, 0x44, 0x32, + 0x87, 0x47, 0xa1, 0x71, 0x09, 0x62, 0x1e, 0x1f, 0x28, 0xd7, 0x5b, 0xc2, 0x98, 0x4c, 0x10, 0x94, + 0xa4, 0xed, 0x59, 0x4b, 0x71, 0x9c, 0x28, 0x18, 0x3e, 0x88, 0x12, 0x57, 0xe1, 0x74, 0x1a, 0x90, + 0x92, 0x95, 0xc5, 0x42, 0xbc, 0xbf, 0xe3, 0x97, 0x3f, 0x06, 0xb1, 0xf6, 0x5e, 0x60, 0x71, 0xcd, + 0x37, 0x7d, 0x27, 0x14, 0x44, 0x9a, 0x1c, 0x8e, 0xa8, 0x00, 0x2f, 0xe2, 0xe9, 0xeb, 0xfb, 0x60, + 0x72, 0xc3, 0x78, 0x88, 0x2e, 0xc9, 0x77, 0xc2, 0x68, 0x80, 0xb1, 0xf2, 0x70, 0xe7, 0x27, 0xf8, + 0x80, 0x00, 0x38, 0xb9, 0x04, 0x10, 0x20, 0xbc, 0x05, 0x0d, 0x02, 0x00, 0xc3, 0xfa, 0x8f, 0x83, + 0x0e, 0x3a, 0xa2, 0xda, 0xce, 0xc0, 0xde, 0xf2, 0xb7, 0xb7, 0x23, 0xf8, 0xbf, 0x9d, 0xb9, 0x16, + 0x7a, 0x7a, 0xb7, 0x60, 0x17, 0x68, 0x5b, 0x05, 0xbc, 0x16, 0x31, 0x5a, 0xe8, 0xa0, 0x65, 0xe9, + 0x01, 0xff, 0x63, 0xc8, 0x1e, 0x14, 0x41, 0xe6, 0x6d, 0x15, 0x0f, 0x19, 0x04, 0x49, 0xbd, 0x46, + 0x46, 0xce, 0x82, 0x16, 0xe4, 0x7c, 0xbf, 0x91, 0x8b, 0xda, 0x74, 0xa0, 0x4a, 0xac, 0xc7, 0x41, + 0xe7, 0x3e, 0x3f, 0x8a, 0xbe, 0xb0, 0x08, 0xb8, 0x34, 0x94, 0x72, 0xa8, 0xce, 0xc7, 0xa6, 0xfd, + 0x0a, 0xc2, 0x24, 0x3a, 0xdf, 0xe9, 0xc1, 0x74, 0xf0, 0x28, 0xfd, 0xdb, 0xbb, 0xb7, 0x3f, 0x81, + 0xbc, 0xf9, 0x81, 0xb7, 0xe8, 0x61, 0x86, 0x2a, 0xd4, 0xd7, 0xa8, 0x63, 0x40, 0x7d, 0x6a, 0x10, + 0xe3, 0xa1, 0x1e, 0xab, 0xb0, 0x5c, 0x5b, 0x0b, 0xdb, 0x5c, 0xdc, 0xbe, 0x50, 0x68, 0x3c, 0x19, + 0x3c, 0x9f, 0x30, 0x85, 0x29, 0x05, 0xbd, 0x94, 0x6f, 0xb2, 0x91, 0xf7, 0xb4, 0x8b, 0x11, 0xf3, + 0xf1, 0xa2, 0xa2, 0x5a, 0x2d, 0xdd, 0x57, 0xe9, 0xf5, 0x06, 0x7a, 0xc5, 0x04, 0x21, 0x30, 0xf9, + 0xcc, 0x21, 0xf7, 0xe9, 0xf2, 0x86, 0x64, 0xe3, 0xe3, 0x9f, 0x4f, 0x3e, 0x02, 0xfd, 0xee, 0x71, + 0xc7, 0x2c, 0x19, 0xbd, 0x07, 0x7b, 0xf2, 0x26, 0x49, 0xaf, 0x5f, 0xc1, 0xce, 0x87, 0xf3, 0x0a, + 0x8f, 0x2f, 0xa3, 0xe4, 0xc2, 0x06, 0x12, 0x75, 0x17, 0xe8, 0xc2, 0x64, 0x02, 0x3e, 0x90, 0x33, + 0xfa, 0x92, 0xf0, 0xb7, 0xb0, 0x20, 0xaa, 0x40, 0x4f, 0xa3, 0x33, 0x98, 0x94, 0x61, 0xdc, 0x81, + 0x7c, 0x18, 0x5c, 0xdb, 0x12, 0x5f, 0x70, 0x7d, 0x82, 0xb9, 0xc6, 0xa4, 0xb8, 0x7c, 0xdb, 0xac, + 0xa8, 0x0e, 0xcf, 0xc1, 0x2c, 0xd8, 0xc1, 0x9a, 0x4d, 0x03, 0xbc, 0xef, 0x6b, 0x65, 0x37, 0x29, + 0x5d, 0xf0, 0xd8, 0x18, 0x15, 0xdf, 0x61, 0xaf, 0x6e, 0x41, 0xa7, 0x14, 0x21, 0x60, 0x8c, 0x6b, + 0xbc, 0x66, 0x7e, 0xac, 0x3d, 0x3d, 0x97, 0xd5, 0x44, 0xe0, 0x5a, 0x5b, 0xe8, 0xc6, 0x46, 0xe0, + 0x34, 0xe0, 0x00, 0xe8, 0x58, 0x29, 0x73, 0x2d, 0xdd, 0xc4, 0x36, 0x23, 0x30, 0xdc, 0x93, 0x3c, + 0x49, 0xfd, 0xcb, 0x00, 0x83, 0xa7, 0x1d, 0xe5, 0x01, 0xb4, 0xfe, 0x2e, 0x22, 0x1c, 0xb6, 0x7b, + 0x4b, 0x58, 0xaa, 0xa3, 0x22, 0x88, 0x89, 0x45, 0x93, 0xa6, 0x72, 0x86, 0x0a, 0xdc, 0xde, 0xce, + 0x3a, 0xb7, 0xe4, 0x4d, 0x8a, 0x7f, 0xa4, 0x24, 0xac, 0x7f, 0x11, 0xde, 0xcc, 0x59, 0xc6, 0x45, + 0x24, 0x74, 0x5b, 0x57, 0x1a, 0x2d, 0x8d, 0x7c, 0x8b, 0xa5, 0x7b, 0xa9, 0xac, 0x79, 0xb8, 0x13, + 0x5d, 0x57, 0x20, 0x40, 0x68, 0xcd, 0xcc, 0x2a, 0xcd, 0x74, 0x4b, 0x68, 0x23, 0x8b, 0xf9, 0x40, + 0xaf, 0xd8, 0xbd, 0xd5, 0xc1, 0x12, 0xe0, 0x61, 0x59, 0x55, 0xc3, 0xbb, 0xac, 0x46, 0x93, 0xd7, + 0x61, 0x81, 0xfb, 0xc3, 0x0f, 0x86, 0x25, 0x4d, 0xb9, 0x61, 0x8c, 0x65, 0x4c, 0xac, 0x62, 0x1d, + 0xc4, 0x0b, 0x34, 0xe5, 0x7e, 0x3c, 0x27, 0x55, 0x63, 0x3b, 0x30, 0x99, 0xca, 0x57, 0x20, 0x93, + 0xe8, 0x90, 0x24, 0x1b, 0xe2, 0x8c, 0x64, 0x78, 0xc5, 0xa7, 0x0f, 0xb8, 0x69, 0xc1, 0x01, 0xc3, + 0x6f, 0x8c, 0x1a, 0x4c, 0x1b, 0xd4, 0x81, 0xd6, 0xbc, 0xe3, 0xf2, 0x45, 0x61, 0x65, 0x34, 0xda, + 0x3d, 0x18, 0x8f, 0xa5, 0xfb, 0xac, 0xeb, 0x0c, 0x10, 0x09, 0x67, 0x35, 0x74, 0x86, 0x76, 0x7c, + 0x46, 0x4c, 0x17, 0x8a, 0xe5, 0xa8, 0x68, 0x35, 0x68, 0xd6, 0xdc, 0xaa, 0x08, 0x61, 0x68, 0x21, + 0x20, 0x54, 0x22, 0x65, 0x97, 0x20, 0xc5, 0xd6, 0x44, 0x88, 0xf6, 0xd5, 0x28, 0xf0, 0xa1, 0x67, + 0xcd, 0xc9, 0xf1, 0x03, 0x24, 0xdf, 0x7c, 0xdc, 0x1d, 0xf4, 0x86, 0xe1, 0x81, 0x0a, 0x7e, 0x18, + 0x4a, 0xfc, 0xb0, 0xd8, 0xcb, 0x4e, 0x43, 0x94, 0xa2, 0x37, 0xf3, 0x6c, 0xee, 0xe4, 0xc9, 0x5f, + 0x81, 0x7d, 0xa4, 0x87, 0x3e, 0xc2, 0x05, 0x01, 0x33, 0x31, 0x5b, 0x1f, 0x29, 0xf9, 0x5e, 0x74, + 0xc1, 0xcc, 0x8f, 0x78, 0xe4, 0xd2, 0x71, 0x09, 0x66, 0x59, 0x83, 0xd0, 0x8e, 0x02, 0x3f, 0x66, + 0xc8, 0x9f, 0xba, 0x50, 0x6d, 0x62, 0x41, 0x07, 0x64, 0x8d, 0x19, 0x26, 0x37, 0x99, 0x39, 0x84, + 0x52, 0x41, 0x4a, 0x67, 0x2b, 0xcd, 0x55, 0x09, 0x2b, 0xc1, 0xa9, 0x22, 0xb6, 0x6c, 0x23, 0x23, + 0xe4, 0x5f, 0x16, 0x59, 0xb5, 0xa1, 0x82, 0x13, 0xe4, 0x1c, 0xf2, 0x9a, 0xc3, 0x0b, 0x4a, 0x84, + 0xcc, 0x8e, 0xe5, 0xe4, 0x74, 0x30, 0xd0, 0x1d, 0x3b, 0x8c, 0x87, 0x51, 0x4e, 0x78, 0x70, 0x35, + 0xc3, 0xcd, 0xd6, 0x71, 0xe4, 0x40, 0x2a, 0x43, 0x52, 0x9c, 0x55, 0x11, 0x56, 0xa5, 0x71, 0x5c, + 0xcf, 0xd0, 0x0e, 0x52, 0xb5, 0x6f, 0xee, 0x25, 0x7c, 0xa3, 0x84, 0x2d, 0xd6, 0xfd, 0xdd, 0x45, + 0xe3, 0x34, 0xfd, 0x72, 0xf7, 0x4c, 0xf5, 0x55, 0x55, 0x3c, 0x0e, 0x94, 0x32, 0x6d, 0x16, 0xe5, + 0x83, 0x47, 0x8f, 0xc1, 0xd7, 0xf6, 0x32, 0x87, 0x5e, 0xe6, 0xca, 0xe4, 0xb3, 0xe8, 0xad, 0xb1, + 0x1a, 0x30, 0x24, 0xbe, 0x9f, 0xc3, 0x09, 0x4f, 0x69, 0xed, 0xf0, 0xfc, 0xab, 0x45, 0xe3, 0xc4, + 0x31, 0x30, 0x0f, 0x82, 0x01, 0xba, 0xf7, 0x3a, 0x92, 0x4a, 0xe9, 0x69, 0xc8, 0xfa, 0xf4, 0xd8, + 0x21, 0xa8, 0x24, 0x52, 0xc6, 0x51, 0xba, 0x77, 0x1a, 0x9f, 0x21, 0x12, 0xa2, 0x9d, 0x73, 0x3e, + 0x51, 0xa9, 0x73, 0x90, 0x39, 0x2a, 0x1c, 0x2a, 0x9c, 0xd5, 0xa2, 0x83, 0x6c, 0x37, 0x1f, 0x46, + 0x40, 0xfa, 0x9c, 0x8b, 0x0e, 0xf1, 0x01, 0x7b, 0x11, 0xef, 0xf6, 0x18, 0x1e, 0xb6, 0xd2, 0x08, + 0x0d, 0x2e, 0x0a, 0xce, 0xd3, 0x06, 0x7e, 0x94, 0xd9, 0x9c, 0x3c, 0xc5, 0xd6, 0x68, 0x60, 0x51, + 0x7a, 0xa3, 0xb4, 0x60, 0x90, 0x66, 0xdb, 0xca, 0xed, 0xd2, 0x32, 0x8a, 0xe6, 0xe9, 0xbe, 0xc2, + 0xd8, 0xca, 0x62, 0x50, 0x95, 0x43, 0x8b, 0xa6, 0x07, 0x65, 0x57, 0x3f, 0x8e, 0x1c, 0x1a, 0x68, + 0x7e, 0x7e, 0xc9, 0xb9, 0xa3, 0xf9, 0xad, 0x08, 0xce, 0xa0, 0xe9, 0x4b, 0x91, 0x3b, 0x8d, 0x70, + 0x44, 0x8d, 0xab, 0xe9, 0xac, 0xf6, 0x6a, 0xba, 0x80, 0x3a, 0x74, 0x03, 0x98, 0xf8, 0x1c, 0x41, + 0xa2, 0xab, 0xb9, 0x94, 0x7f, 0x2d, 0x6f, 0xb4, 0x35, 0xde, 0x85, 0x45, 0x0e, 0x37, 0x18, 0xd1, + 0x74, 0xca, 0xc9, 0xc6, 0x26, 0x97, 0x4b, 0x15, 0x36, 0xcf, 0x45, 0x39, 0x04, 0x6e, 0x50, 0x66, + 0x77, 0x31, 0x1c, 0xe2, 0x84, 0x7d, 0x43, 0x7c, 0xe6, 0xcd, 0xc5, 0x0f, 0x65, 0xfb, 0xe0, 0x16, + 0x34, 0xa8, 0x72, 0x11, 0xcc, 0x0a, 0x4c, 0xa1, 0x4a, 0x10, 0xa1, 0x10, 0x9d, 0x22, 0xee, 0xa2, + 0x4a, 0xf3, 0x8a, 0x90, 0xa5, 0x31, 0x45, 0x21, 0xd4, 0x73, 0x10, 0xe0, 0x57, 0xb9, 0x2e, 0x44, + 0xbb, 0x31, 0x2a, 0xc2, 0x20, 0x92, 0xd2, 0x73, 0x98, 0x67, 0x48, 0x37, 0x3d, 0x62, 0xc7, 0xe3, + 0x98, 0xd0, 0x9d, 0x35, 0x57, 0xe3, 0x58, 0xa2, 0x62, 0x36, 0x96, 0x28, 0x3c, 0x8d, 0xe6, 0xe1, + 0x2f, 0x7e, 0x84, 0x09, 0xd2, 0x04, 0x23, 0xd6, 0xad, 0xc2, 0xbc, 0x08, 0x2d, 0x02, 0xa2, 0xaa, + 0x71, 0x94, 0x40, 0x3b, 0xe6, 0x02, 0x25, 0x03, 0x3c, 0x86, 0x32, 0x23, 0x1f, 0xd7, 0xb8, 0xd1, + 0x00, 0xa3, 0xe2, 0x95, 0xcd, 0xd1, 0xe2, 0xc4, 0x8d, 0xf9, 0x0b, 0xbb, 0xb1, 0xcf, 0x96, 0xb5, + 0x99, 0x4d, 0xc7, 0x32, 0xff, 0x03, 0x8e, 0xd5, 0xda, 0x29, 0x21, 0x26, 0x8e, 0x58, 0x5c, 0xdd, + 0x57, 0xec, 0x8b, 0x2f, 0xa2, 0x9b, 0xd4, 0xae, 0x05, 0x76, 0xae, 0xbe, 0xd1, 0x4d, 0x7e, 0xf9, + 0xed, 0x92, 0x4f, 0xab, 0x7f, 0x3f, 0xac, 0x02, 0x84, 0x4a, 0xba, 0x85, 0x16, 0x39, 0xee, 0x7b, + 0xef, 0x29, 0xad, 0xc2, 0x90, 0x5a, 0xe2, 0x75, 0xdd, 0xfb, 0xae, 0x00, 0xd3, 0xa3, 0xce, 0x9d, + 0x90, 0x75, 0x92, 0x18, 0xf5, 0xa1, 0xd6, 0x7a, 0x86, 0x99, 0x5b, 0x28, 0x55, 0xac, 0x88, 0x13, + 0xf6, 0x31, 0xb9, 0x81, 0x59, 0xca, 0xc6, 0xe5, 0x04, 0x44, 0x51, 0xd4, 0x8e, 0x87, 0x57, 0x7e, + 0x76, 0x94, 0x26, 0x14, 0x31, 0x18, 0x6b, 0x91, 0x2c, 0xb1, 0x4e, 0x7d, 0x85, 0x6c, 0x40, 0x01, + 0xa2, 0x67, 0x28, 0xb2, 0xdb, 0x16, 0x94, 0x55, 0xf6, 0x73, 0x5b, 0x5d, 0x11, 0xb7, 0x0b, 0x76, + 0x33, 0x4d, 0x3c, 0x9f, 0x7c, 0x96, 0xfb, 0xd8, 0x7c, 0x82, 0x48, 0x59, 0x92, 0x23, 0x01, 0xf7, + 0xf2, 0xd3, 0xcb, 0x40, 0x5b, 0xc6, 0xc4, 0xf6, 0x45, 0xa2, 0xb9, 0xe3, 0xaa, 0x2c, 0x43, 0x7d, + 0xad, 0xc7, 0x09, 0x8d, 0x39, 0x6a, 0x47, 0xf4, 0x6e, 0xe4, 0xa5, 0xe7, 0x0c, 0xb5, 0x27, 0x30, + 0x98, 0x72, 0xa8, 0xa0, 0x36, 0xbc, 0xef, 0xfe, 0x4d, 0x0d, 0xec, 0xe5, 0xeb, 0x97, 0x87, 0xef, + 0x6d, 0x2b, 0xf7, 0x2f, 0x04, 0x80, 0x8f, 0xe5, 0x9c, 0xf2, 0x2c, 0x9c, 0x09, 0xca, 0xfa, 0x98, + 0xcc, 0xdd, 0xbf, 0x1f, 0xd6, 0x39, 0x41, 0x0b, 0xf2, 0xda, 0xb2, 0xe5, 0xdc, 0x74, 0x1d, 0x23, + 0xe0, 0x31, 0xd1, 0x3e, 0xf7, 0x9f, 0x73, 0x6c, 0x6f, 0x97, 0xc6, 0xa1, 0xda, 0x2c, 0x2f, 0xdf, + 0xbd, 0xef, 0xba, 0x31, 0x1b, 0xaf, 0x90, 0x88, 0x9a, 0xa1, 0xde, 0xb7, 0x6d, 0xc7, 0x4f, 0xb2, + 0xbd, 0xbb, 0x5f, 0x41, 0xaa, 0x4d, 0xde, 0x84, 0xf7, 0xc1, 0x14, 0x63, 0x91, 0x77, 0xb7, 0x90, + 0xc7, 0xda, 0xdc, 0xdc, 0x51, 0x97, 0xe2, 0x9f, 0x3a, 0x2a, 0x01, 0xe1, 0x92, 0xe3, 0x11, 0x26, + 0x44, 0xa3, 0x4e, 0xaf, 0x0f, 0x62, 0xcb, 0x26, 0x5d, 0x85, 0x33, 0x0d, 0x8f, 0x0c, 0xd4, 0x03, + 0xbd, 0x66, 0xa9, 0x8b, 0xcc, 0xad, 0xe1, 0x18, 0x9a, 0xe6, 0x5f, 0x6c, 0x6b, 0x77, 0x37, 0xb4, + 0x5c, 0x2e, 0xb7, 0x8b, 0xb0, 0x2d, 0x91, 0xd7, 0xdb, 0x8d, 0xe4, 0xad, 0x9c, 0x8f, 0x82, 0xd7, + 0xe7, 0x4c, 0x34, 0x01, 0xa4, 0x88, 0xa6, 0x3a, 0x66, 0x96, 0x1b, 0x39, 0x9b, 0x8e, 0x6b, 0x0f, + 0x2a, 0x12, 0x2b, 0x42, 0x37, 0x16, 0x27, 0x8c, 0xa9, 0xc5, 0xdd, 0xaf, 0x9e, 0xb8, 0xe3, 0x20, + 0xf6, 0x41, 0x78, 0x26, 0x43, 0xed, 0xe6, 0x82, 0x82, 0x1c, 0x88, 0x01, 0x66, 0xb0, 0x8a, 0x61, + 0x76, 0x98, 0x44, 0xd8, 0x08, 0xfc, 0x8a, 0x40, 0xe0, 0x75, 0x65, 0xda, 0x85, 0xbc, 0x91, 0x26, + 0xfe, 0x62, 0x94, 0x13, 0x39, 0x19, 0xb7, 0x6b, 0x8b, 0x2f, 0x11, 0x60, 0x0c, 0x9e, 0x16, 0x85, + 0xf3, 0x79, 0x51, 0xa1, 0x80, 0xc8, 0xa3, 0xf9, 0x06, 0x3e, 0x81, 0x67, 0xb1, 0x3b, 0xef, 0xee, + 0xd7, 0x0a, 0x86, 0x1e, 0x67, 0x60, 0x24, 0x04, 0x8a, 0xeb, 0x4b, 0x09, 0x2f, 0x3c, 0x41, 0x2a, + 0x2f, 0xdc, 0xfa, 0x83, 0xe0, 0x7c, 0x72, 0x6d, 0xb9, 0x22, 0x0b, 0x5a, 0x3d, 0xd2, 0x2f, 0xa8, + 0x1f, 0x37, 0xcc, 0xfe, 0xd3, 0xed, 0x6d, 0x59, 0x9a, 0x2e, 0x17, 0xe5, 0x15, 0x26, 0x46, 0xb8, + 0x80, 0x41, 0xe3, 0x77, 0xdb, 0xdb, 0x90, 0x1b, 0x32, 0xef, 0xe3, 0x8f, 0x83, 0x5e, 0xff, 0x59, + 0x77, 0xdc, 0xdf, 0xef, 0x0e, 0xfa, 0xdf, 0xc3, 0x3e, 0xb3, 0x85, 0x2d, 0xc1, 0x54, 0xaa, 0x8b, + 0xda, 0x4e, 0xbf, 0x1f, 0x1e, 0x8a, 0x2f, 0x50, 0x2a, 0x3f, 0xe0, 0x2a, 0x43, 0x35, 0x05, 0xcc, + 0x3f, 0x47, 0xc8, 0x28, 0xd3, 0x83, 0xdc, 0xdd, 0x38, 0x4c, 0xc2, 0x31, 0xb4, 0x5d, 0x47, 0x32, + 0xe2, 0xf6, 0x18, 0x70, 0x60, 0xda, 0x14, 0x30, 0xfd, 0x30, 0xe8, 0xb2, 0x27, 0x9b, 0x5e, 0xf8, + 0x9c, 0xc2, 0x40, 0x40, 0xbe, 0xb1, 0xd5, 0xc5, 0x13, 0xe4, 0x4d, 0x9e, 0x58, 0x8f, 0x98, 0x4a, + 0x45, 0x9d, 0x1c, 0x0c, 0x46, 0xb6, 0x03, 0xef, 0xf4, 0xa0, 0xb6, 0xa7, 0xf8, 0xc7, 0x50, 0x3a, + 0x59, 0x78, 0x7e, 0x3e, 0xe1, 0x4b, 0x27, 0xdc, 0x6d, 0x2c, 0xd7, 0x12, 0xb3, 0x78, 0x88, 0x25, + 0x2d, 0x81, 0xfa, 0x58, 0xca, 0x65, 0xeb, 0x66, 0x11, 0xd7, 0x01, 0xf0, 0xb8, 0x57, 0x41, 0x80, + 0xde, 0x64, 0x9d, 0x4e, 0x87, 0xad, 0x49, 0xb7, 0x24, 0x26, 0xa8, 0xba, 0x55, 0x1b, 0xf2, 0xce, + 0x01, 0xfc, 0xa0, 0x93, 0x5d, 0x85, 0x33, 0x38, 0x60, 0xb2, 0x4f, 0x2c, 0x1c, 0x5f, 0xc9, 0x8f, + 0x80, 0x7f, 0x65, 0x8e, 0x53, 0xd2, 0x89, 0x66, 0x8e, 0x78, 0x83, 0x31, 0x8d, 0xc6, 0xc4, 0xb4, + 0x1f, 0x1e, 0xcc, 0x33, 0x2f, 0x9c, 0xc7, 0x21, 0x95, 0x2c, 0x35, 0x5d, 0xad, 0x35, 0xa8, 0x31, + 0xa2, 0x52, 0xce, 0xa0, 0x36, 0x3f, 0xc5, 0x56, 0x52, 0x97, 0x93, 0x95, 0x6e, 0x2c, 0x79, 0x39, + 0x36, 0x2e, 0xf8, 0xd8, 0x72, 0x61, 0xa1, 0x88, 0x95, 0x5a, 0xd5, 0x89, 0x31, 0x65, 0x32, 0x70, + 0x1c, 0x11, 0x10, 0xd4, 0x53, 0xcd, 0x75, 0x9d, 0xa0, 0x6f, 0x42, 0x72, 0x07, 0x95, 0x21, 0x6f, + 0x70, 0x51, 0x06, 0xa9, 0xcd, 0x98, 0xe3, 0x86, 0xc7, 0xb0, 0x4f, 0x6b, 0x72, 0x52, 0x95, 0x70, + 0xc8, 0xb7, 0x5c, 0x64, 0xd7, 0x6b, 0xf2, 0xdd, 0xcc, 0xd7, 0x65, 0xa3, 0x0f, 0xa3, 0x36, 0x58, + 0xe5, 0xfb, 0xb7, 0x83, 0x3d, 0x60, 0xa9, 0xe1, 0x3c, 0x1f, 0xb5, 0x0e, 0xc4, 0x8f, 0x7f, 0xa3, + 0x7b, 0xff, 0xec, 0xf0, 0xf5, 0x6b, 0x8a, 0x81, 0x68, 0x6c, 0xea, 0x4c, 0x4f, 0xf2, 0x95, 0xb0, + 0x37, 0xae, 0x43, 0x21, 0x6b, 0x06, 0x57, 0x2b, 0xea, 0x2d, 0x7e, 0x3b, 0x05, 0x7a, 0xa9, 0x51, + 0xb7, 0x3b, 0xd5, 0xf0, 0x03, 0x5e, 0x7e, 0x21, 0x8b, 0x89, 0x80, 0xdf, 0xd7, 0x82, 0x97, 0xc9, + 0xc2, 0x1b, 0xe1, 0x97, 0x99, 0x9a, 0xba, 0xb7, 0xc9, 0x25, 0x29, 0x1c, 0x95, 0x1e, 0x36, 0xf1, + 0xea, 0x3e, 0x0e, 0xd9, 0x5e, 0xa4, 0x81, 0x8f, 0xda, 0x8a, 0x92, 0xfa, 0xba, 0x5e, 0xe9, 0xd4, + 0x61, 0x84, 0x3a, 0x37, 0x70, 0x49, 0x62, 0x2a, 0xb4, 0xaa, 0xb1, 0xeb, 0x3b, 0xe4, 0x8e, 0xe2, + 0x8f, 0x73, 0x8c, 0x56, 0x6a, 0x27, 0x52, 0x1d, 0xd0, 0x29, 0xfe, 0x67, 0x19, 0xd6, 0x5d, 0x39, + 0x62, 0x78, 0xd7, 0x41, 0xb1, 0x6a, 0x6d, 0x87, 0x2c, 0x4b, 0x17, 0xe1, 0x85, 0x9d, 0x81, 0xaa, + 0x10, 0x78, 0x43, 0xa1, 0xfb, 0x6e, 0x11, 0x0c, 0x68, 0xab, 0xd7, 0x6d, 0x65, 0x01, 0xac, 0xcc, + 0x69, 0x66, 0xa9, 0x8c, 0x3e, 0x2c, 0x39, 0x4d, 0xed, 0x8b, 0x03, 0xa1, 0x69, 0x94, 0x1d, 0x83, + 0xd7, 0xe4, 0x8e, 0xe1, 0x8f, 0xbc, 0x4a, 0xa1, 0x9d, 0xd4, 0x29, 0xb4, 0x93, 0x7f, 0x8e, 0x42, + 0x3b, 0xf9, 0x5a, 0x85, 0x76, 0xf2, 0x08, 0x85, 0xb6, 0xbf, 0xb1, 0x42, 0x3b, 0xd2, 0x14, 0xda, + 0x7e, 0x83, 0x42, 0x3b, 0x72, 0xc8, 0x95, 0xbd, 0x46, 0xa1, 0x7d, 0xf8, 0xba, 0x3c, 0x19, 0x85, + 0x73, 0x05, 0xec, 0xe7, 0x1d, 0xd4, 0xba, 0x5a, 0x32, 0x76, 0x41, 0x1d, 0xd1, 0x02, 0xa7, 0xbb, + 0x4c, 0xfd, 0x6b, 0x41, 0xb8, 0xb5, 0xca, 0x6d, 0xad, 0x26, 0x37, 0x51, 0x41, 0x09, 0xea, 0xfc, + 0x70, 0x73, 0xf6, 0x58, 0xa0, 0x18, 0x27, 0xf5, 0x0b, 0x54, 0xad, 0x11, 0x45, 0xd1, 0xd6, 0x6a, + 0xb2, 0x85, 0x2f, 0x03, 0x4d, 0x59, 0xae, 0xa4, 0x5d, 0x0d, 0x7b, 0xa1, 0x8e, 0x2b, 0x2c, 0x1e, + 0xb9, 0xf4, 0x54, 0xc7, 0x4a, 0x4b, 0x30, 0x71, 0x15, 0xd2, 0xcc, 0xf9, 0x8b, 0x0f, 0x1f, 0x8f, + 0x76, 0xdf, 0xfc, 0xd6, 0xe2, 0xcf, 0x88, 0xf0, 0xee, 0x2d, 0xed, 0x7f, 0x07, 0xe1, 0x08, 0x2d, + 0xd7, 0xa8, 0x26, 0x0a, 0x40, 0x56, 0x93, 0xa5, 0x1c, 0x30, 0x75, 0x42, 0x94, 0x8a, 0x29, 0x1c, + 0xae, 0xcb, 0x9c, 0x89, 0x11, 0x9e, 0x5b, 0xf5, 0xe8, 0xa9, 0x35, 0x35, 0x56, 0xa3, 0x45, 0xa1, + 0xc6, 0x1c, 0x8d, 0x5d, 0xb4, 0x88, 0xe9, 0x26, 0x4f, 0xc6, 0xe0, 0x9c, 0x88, 0x8b, 0x6e, 0x04, + 0x15, 0x7d, 0x6c, 0x9d, 0x82, 0xec, 0x76, 0xb0, 0xcb, 0x3b, 0x6e, 0x4b, 0x84, 0x66, 0xa3, 0xc8, + 0xac, 0xe8, 0x27, 0xf5, 0xe1, 0x26, 0xd6, 0x22, 0x5a, 0xfd, 0xb1, 0x66, 0xe3, 0x46, 0x89, 0x54, + 0xf0, 0xe3, 0x4f, 0x44, 0x04, 0x3b, 0x87, 0xaf, 0x77, 0xdc, 0x1d, 0x35, 0xc4, 0x18, 0xc3, 0xf4, + 0x95, 0xc8, 0xd1, 0xd2, 0x06, 0xfe, 0x2b, 0xfa, 0x84, 0x55, 0x1d, 0xbe, 0xfe, 0x18, 0x5c, 0xcf, + 0x91, 0xa2, 0x44, 0xdf, 0xe0, 0x33, 0xe8, 0xdf, 0xd8, 0xca, 0x45, 0xf2, 0x3f, 0xa7, 0x5b, 0xd8, + 0xf6, 0xdb, 0xee, 0xfe, 0x3e, 0xa9, 0xff, 0x77, 0x5c, 0xba, 0xe2, 0xc5, 0x7f, 0xf4, 0x4e, 0x62, + 0x9e, 0x16, 0xbe, 0xff, 0xaa, 0x4e, 0xd6, 0x7e, 0x5e, 0xbf, 0xb9, 0x6a, 0xf8, 0xba, 0x9e, 0xe5, + 0xab, 0xc7, 0xc0, 0x34, 0xe7, 0xda, 0xd9, 0xc0, 0x70, 0x6e, 0xf7, 0x35, 0x61, 0x1d, 0x67, 0x7b, + 0x79, 0x1a, 0x04, 0x7b, 0xd7, 0xc0, 0xe3, 0x82, 0x74, 0x0f, 0xd7, 0xe4, 0x9b, 0xdf, 0xf6, 0x88, + 0x1c, 0x64, 0xc4, 0x43, 0xfe, 0xbc, 0x35, 0x92, 0xeb, 0xf5, 0x6d, 0x78, 0x91, 0xfa, 0xe9, 0x97, + 0xc7, 0x8f, 0x59, 0x15, 0xd0, 0xb0, 0xa1, 0xd5, 0xd7, 0xd7, 0x9d, 0xcf, 0x71, 0x42, 0xe4, 0x07, + 0xbc, 0x6e, 0x0f, 0x8e, 0x7f, 0xf1, 0xb5, 0x68, 0x39, 0x08, 0x70, 0xe1, 0xee, 0xec, 0xbe, 0xd2, + 0xb8, 0xf1, 0xea, 0x11, 0x4c, 0x47, 0xc0, 0x4c, 0x0e, 0xe1, 0x74, 0x80, 0x57, 0xd3, 0x62, 0x39, + 0xb5, 0x80, 0x19, 0xfe, 0x71, 0xb6, 0x22, 0x39, 0xee, 0x68, 0x0d, 0x3b, 0x09, 0x47, 0xf8, 0x29, + 0x94, 0x07, 0x46, 0xad, 0x7d, 0x29, 0x00, 0x80, 0xac, 0xd7, 0xc2, 0x7d, 0x07, 0x6f, 0x45, 0x4f, + 0x82, 0x34, 0xf4, 0xa3, 0xd6, 0xcf, 0x37, 0xf3, 0x9b, 0xbc, 0xd3, 0xd4, 0x1e, 0xbf, 0xc5, 0x66, + 0x7a, 0xdf, 0xac, 0xa0, 0xbb, 0x9f, 0x5e, 0xbe, 0x5c, 0x41, 0x78, 0x52, 0x4e, 0x27, 0x7b, 0x91, + 0x21, 0x0c, 0x5f, 0x98, 0x63, 0x90, 0x3b, 0x45, 0x8d, 0x3f, 0xbd, 0xf4, 0xfd, 0xac, 0xf5, 0x12, + 0x9d, 0xf3, 0x44, 0x15, 0xd6, 0xe8, 0xff, 0xfc, 0xb7, 0xff, 0xfe, 0x5f, 0x0f, 0xf6, 0xfc, 0x3f, + 0xd8, 0x9a, 0xd7, 0x5f, 0xdd, 0x1a, 0x41, 0xa1, 0x7f, 0x4e, 0x83, 0xde, 0xbe, 0xfb, 0x8a, 0xf6, + 0x70, 0x18, 0xff, 0x6a, 0x43, 0xce, 0x87, 0xd5, 0xdd, 0xf8, 0xb3, 0x26, 0x2f, 0x17, 0x0a, 0x4c, + 0x7f, 0xe3, 0x7d, 0xbb, 0x69, 0x9f, 0xfe, 0xc3, 0x92, 0x62, 0x69, 0x24, 0xd0, 0xe8, 0x23, 0x41, + 0x83, 0x91, 0x98, 0x54, 0x0c, 0xd6, 0xe1, 0x6b, 0x8b, 0x2f, 0x65, 0xe0, 0xf3, 0x72, 0x05, 0xc2, + 0x79, 0xb5, 0xc3, 0xbc, 0x03, 0x0e, 0x39, 0xa9, 0x50, 0x0f, 0xad, 0x66, 0x23, 0x55, 0x0e, 0xb2, + 0x07, 0xc7, 0x5f, 0x0b, 0xa8, 0xf2, 0xcf, 0xac, 0x5e, 0x58, 0x1a, 0xec, 0xfd, 0xf4, 0xf2, 0xef, + 0xfc, 0xf3, 0x18, 0x24, 0xc9, 0x7e, 0xaf, 0xfb, 0xbc, 0xfb, 0xfc, 0xef, 0xfb, 0xfd, 0xfb, 0xfd, + 0xfe, 0xdf, 0x7b, 0xdf, 0x83, 0xd8, 0xb4, 0x87, 0x84, 0xfc, 0x5d, 0xbf, 0x3b, 0x87, 0xb7, 0xa2, + 0x19, 0xaf, 0xff, 0x5f, 0x34, 0x43, 0x14, 0xd3, 0x5b, 0xf2, 0xf6, 0xdd, 0x9f, 0xd9, 0x10, 0x26, + 0xcc, 0x0c, 0x6b, 0xae, 0x33, 0xee, 0x29, 0x89, 0x5f, 0x01, 0x9e, 0x80, 0xc2, 0x99, 0x9d, 0xd0, + 0xbf, 0x31, 0x6a, 0x4d, 0x9a, 0x8c, 0x35, 0x24, 0xd1, 0xec, 0x25, 0x2a, 0x12, 0x3f, 0x99, 0xf4, + 0x8c, 0x95, 0x8a, 0xb7, 0x49, 0xaa, 0xcd, 0xe1, 0x23, 0xa4, 0xd6, 0x5f, 0xac, 0x15, 0x8c, 0xd5, + 0x29, 0xc8, 0x20, 0x6e, 0x12, 0x12, 0x0b, 0xe2, 0x8e, 0x4d, 0xe2, 0x46, 0xa3, 0xa4, 0xd8, 0x24, + 0xf0, 0x92, 0x98, 0x01, 0x87, 0x8d, 0x4d, 0xbf, 0x7c, 0xbe, 0xf7, 0x44, 0xf0, 0x12, 0xa6, 0xdb, + 0x96, 0xac, 0x84, 0x52, 0x9f, 0xec, 0xd1, 0x9f, 0x39, 0x17, 0x24, 0x99, 0x88, 0x12, 0x16, 0xa2, + 0x8c, 0x16, 0x65, 0x35, 0x9e, 0x06, 0xe9, 0x1b, 0x44, 0x6b, 0xb7, 0x1d, 0xf1, 0x72, 0xa1, 0x98, + 0x14, 0x79, 0x63, 0xdc, 0x07, 0x11, 0x7b, 0x23, 0x10, 0x74, 0x72, 0x90, 0xba, 0x2d, 0xb2, 0x68, + 0x7e, 0x93, 0x26, 0xd7, 0x32, 0x74, 0x8b, 0xf6, 0x86, 0x7e, 0x38, 0xb2, 0x2a, 0xfe, 0xea, 0xf2, + 0x7c, 0xa9, 0xab, 0x0e, 0xf6, 0x10, 0x49, 0x1e, 0xff, 0x5e, 0xe5, 0xd7, 0xd1, 0xa8, 0xf5, 0x7f, + 0x01, 0x78, 0x06, 0xe4, 0x5a, 0x50, 0xdc, 0x01, 0x00 }; From 1fb1e674f40d96583a1c00ed4bea8bf9477560fa Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 12 Dec 2023 00:57:21 +0100 Subject: [PATCH 028/108] fix for build errors with older frameworks hrmpf --- wled00/wled.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 196ff7ab..2a00457b 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -64,7 +64,7 @@ // WLEDMM end -#if defined(ARDUINO_ARCH_ESP32) && (defined(WLED_DEBUG) || defined(WLED_DEBUG_HEAP)) +#if INCLUDE_xTaskGetHandle && defined(ARDUINO_ARCH_ESP32) && (defined(WLED_DEBUG) || defined(WLED_DEBUG_HEAP)) // WLEDMM stack debug tool - find async_tcp task, and queries it's free stack static int wledmm_get_tcp_stacksize(void) { static TaskHandle_t tcp_taskHandle = NULL; // to store the task handle for later calls @@ -364,7 +364,9 @@ void WLED::loop() DEBUG_PRINT(F("*** Free heap: ")); DEBUG_PRINT(heap_caps_get_free_size(0x1800)); DEBUG_PRINT(F("\tLargest free block: ")); DEBUG_PRINT(heap_caps_get_largest_free_block(0x1800)); DEBUG_PRINT(F(" *** \t\tArduino min free stack: ")); DEBUG_PRINT(uxTaskGetStackHighWaterMark(NULL)); +#if INCLUDE_xTaskGetHandle DEBUG_PRINT(F(" TCP min free stack: ")); DEBUG_PRINT(wledmm_get_tcp_stacksize()); +#endif DEBUG_PRINTLN(F(" ***")); debugTime = millis(); } From a430e8b969b9e73fc571e167510f463d20611036 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 12 Dec 2023 01:08:21 +0100 Subject: [PATCH 029/108] staircase quickfix something still missing in line 378 --- usermods/Animated_Staircase/Animated_Staircase.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index 97bee1bd..7d656509 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -131,7 +131,7 @@ class Animated_Staircase : public Usermod { * received within this time, an object is detected * and the function will return true. * - * The speed of sound is 343 meters per second at 20 degress Celcius. + * The speed of sound is 343 meters per second at 20 degrees Celsius. * Since the sound has to travel back and forth, the detection * distance for the sensor in cm is (0.0343 * maxTimeUs) / 2. * @@ -191,7 +191,7 @@ class Animated_Staircase : public Usermod { sensorChanged = true; #ifndef WLED_DISABLE_MQTT publishMqtt(false, topSensorState ? "on" : "off"); - #endif#endif + #endif DEBUG_PRINTLN(F("Top sensor changed.")); } @@ -268,7 +268,7 @@ class Animated_Staircase : public Usermod { } } - // send sesnor values to JSON API + // send sensor values to JSON API void writeSensorsToJson(JsonObject& staircase) { staircase[F("top-sensor")] = topSensorRead; staircase[F("bottom-sensor")] = bottomSensorRead; @@ -375,7 +375,7 @@ class Animated_Staircase : public Usermod { bottomSensorWrite = true; return true; } else if (action == "down") { - = true; + // = true; // ????? return true; } else if (action == "on") { enable(true); From a01101c417e1f07240921dfad2e7c8177829c4fb Mon Sep 17 00:00:00 2001 From: Troy <5659019+troyhacks@users.noreply.github.com> Date: Mon, 11 Dec 2023 22:03:09 -0500 Subject: [PATCH 030/108] Update Animated_Staircase.h The string "topSensorWrite" seems to have been deleted from the file in some accidental editing mishap. --- usermods/Animated_Staircase/Animated_Staircase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index 7d656509..dd282f16 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -375,7 +375,7 @@ class Animated_Staircase : public Usermod { bottomSensorWrite = true; return true; } else if (action == "down") { - // = true; // ????? + topSensorWrite = true; return true; } else if (action == "on") { enable(true); From cc760e98a076ac1e8e5aadacd3cae180fd1799d5 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 27 Nov 2023 20:58:21 +0100 Subject: [PATCH 031/108] Fix for #3514 --- wled00/FX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index a5926f4b..e162e345 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -86,7 +86,7 @@ static float mapf(float x, float in_min, float in_max, float out_min, float out_ */ uint16_t mode_static(void) { SEGMENT.fill(SEGCOLOR(0)); - return FRAMETIME_FIXED_SLOW; // WLEDMM to ensure smooth color changes from DMX (PR #73) + return strip.isOffRefreshRequired() ? FRAMETIME : FRAMETIME_FIXED_SLOW; // WLEDMM to ensure smooth color changes from DMX (PR #73) } static const char _data_FX_MODE_STATIC[] PROGMEM = "Solid"; From 45dc9aa62d1df92964adc7d0295739de476e0722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Wed, 29 Nov 2023 13:42:43 +0100 Subject: [PATCH 032/108] Merge pull request #3555 from srg74/patch-1 Update readme.md --- usermods/sd_card/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/sd_card/readme.md b/usermods/sd_card/readme.md index 299b68eb..96390c05 100644 --- a/usermods/sd_card/readme.md +++ b/usermods/sd_card/readme.md @@ -20,7 +20,7 @@ | `pinSourceSelect` | GPIO that is connected to SD's `SS`(source select) / `CS`(chip select) | 16 | | `pinSourceClock` | GPIO that is connected to SD's `SCLK` (source clock) / `CLK`(clock) | 14 | | `pinPoci` | GPIO that is connected to SD's `POCI` (Peripheral-Out-Ctrl-In) / `MISO` (deprecated) | 36 | - | `pinPico` | GPIO that is connected to SD's `PICO` (Peripheral-In-Ctrl-Out) / `MOSI` (deprecated) | 14 | + | `pinPico` | GPIO that is connected to SD's `PICO` (Peripheral-In-Ctrl-Out) / `MOSI` (deprecated) | 15 | | `sdEnable` | Enable to read data from the SD-card | true | Following new naming convention of [OSHWA](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/) @@ -31,4 +31,4 @@ - checks if the specified file is available on the SD card ```cpp bool file_onSD(const char *filepath) {...} - ``` \ No newline at end of file + ``` From 1ac02bcd53c41a8ac30e16ec6003a8740e2aa191 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 2 Dec 2023 00:39:43 +0100 Subject: [PATCH 033/108] Bugfix #3561 --- wled00/set.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/set.cpp b/wled00/set.cpp index cc68bf45..9b5c6359 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -131,7 +131,6 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) pins[i] = (request->arg(lp).length() > 0) ? request->arg(lp).toInt() : 255; } type = request->arg(lt).toInt(); - type |= request->hasArg(rf) << 7; // off refresh override skip = request->arg(sl).toInt(); colorOrder = request->arg(co).toInt(); start = (request->hasArg(ls)) ? request->arg(ls).toInt() : t; @@ -164,6 +163,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) freqHz = 0; } channelSwap = (type == TYPE_SK6812_RGBW || type == TYPE_TM1814) ? request->arg(wo).toInt() : 0; + type |= request->hasArg(rf) << 7; // off refresh override // actual finalization is done in WLED::loop() (removing old busses and adding new) // this may happen even before this loop is finished so we do "doInitBusses" after the loop if (busConfigs[s] != nullptr) delete busConfigs[s]; From 68dc4d11a9189d6e804bac106c6631905d371c90 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 9 Dec 2023 18:58:45 +0100 Subject: [PATCH 034/108] Autowhite cleanup Fix for UCS8904 hasWhite(). --- wled00/bus_manager.cpp | 2 +- wled00/bus_manager.h | 4 ++-- wled00/cfg.cpp | 7 +++---- wled00/set.cpp | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/wled00/bus_manager.cpp b/wled00/bus_manager.cpp index 2f330b75..6ff75762 100644 --- a/wled00/bus_manager.cpp +++ b/wled00/bus_manager.cpp @@ -83,7 +83,7 @@ uint8_t IRAM_ATTR ColorOrderMap::getPixelColorOrder(uint16_t pix, uint8_t defaul uint32_t Bus::autoWhiteCalc(uint32_t c) { uint8_t aWM = _autoWhiteMode; - if (_gAWM < 255) aWM = _gAWM; + if (_gAWM != AW_GLOBAL_DISABLED) aWM = _gAWM; if (aWM == RGBW_MODE_MANUAL_ONLY) return c; uint8_t w = W(c); //ignore auto-white calculation if w>0 and mode DUAL (DUAL behaves as BRIGHTER if w==0) diff --git a/wled00/bus_manager.h b/wled00/bus_manager.h index 220fd930..2f860ae1 100644 --- a/wled00/bus_manager.h +++ b/wled00/bus_manager.h @@ -98,7 +98,7 @@ class Bus { { _type = type; _start = start; - _autoWhiteMode = Bus::hasWhite(_type) ? aw : RGBW_MODE_MANUAL_ONLY; + _autoWhiteMode = Bus::hasWhite(type) ? aw : RGBW_MODE_MANUAL_ONLY; }; virtual ~Bus() {} //throw the bus under the bus @@ -129,7 +129,7 @@ class Bus { } virtual bool hasWhite() { return Bus::hasWhite(_type); } static bool hasWhite(uint8_t type) { - if ((type >= TYPE_WS2812_1CH && type <= TYPE_WS2812_WWA) || type == TYPE_SK6812_RGBW || type == TYPE_TM1814) return true; // digital types with white channel + if ((type >= TYPE_WS2812_1CH && type <= TYPE_WS2812_WWA) || type == TYPE_SK6812_RGBW || type == TYPE_TM1814 || type == TYPE_UCS8904) return true; // digital types with white channel if (type > TYPE_ONOFF && type <= TYPE_ANALOG_5CH && type != TYPE_ANALOG_3CH) return true; // analog types with white channel if (type == TYPE_NET_DDP_RGBW) return true; // network types with white channel return false; diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 07a06945..62755905 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -103,10 +103,9 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { } #endif - uint8_t autoWhiteMode = RGBW_MODE_MANUAL_ONLY; CJSON(strip.ablMilliampsMax, hw_led[F("maxpwr")]); CJSON(strip.milliampsPerLed, hw_led[F("ledma")]); - Bus::setGlobalAWMode(hw_led[F("rgbwm")] | 255); + Bus::setGlobalAWMode(hw_led[F("rgbwm")] | AW_GLOBAL_DISABLED); CJSON(correctWB, hw_led["cct"]); CJSON(cctFromRgb, hw_led[F("cr")]); CJSON(strip.cctBlending, hw_led[F("cb")]); @@ -185,7 +184,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { } uint16_t length = elm["len"] | 1; - uint8_t colorOrder = (int)elm[F("order")]; + uint8_t colorOrder = (int)elm[F("order")]; // contains white channel swap option in upper nibble uint8_t skipFirst = elm[F("skip")]; uint16_t start = elm["start"] | 0; if (length==0 || start + length > MAX_LEDS) continue; // zero length or we reached max. number of LEDs, just stop @@ -194,7 +193,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { bool refresh = elm["ref"] | false; uint16_t freqkHz = elm[F("freq")] | 0; // will be in kHz for DotStar and Hz for PWM (not yet implemented fully) ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh - uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode; + uint8_t AWmode = elm[F("rgbwm")] | RGBW_MODE_MANUAL_ONLY; if (fromFS) { BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode, freqkHz); mem += BusManager::memUsage(bc); diff --git a/wled00/set.cpp b/wled00/set.cpp index 9b5c6359..55def478 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -162,7 +162,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) } else { freqHz = 0; } - channelSwap = (type == TYPE_SK6812_RGBW || type == TYPE_TM1814) ? request->arg(wo).toInt() : 0; + channelSwap = Bus::hasWhite(type) ? request->arg(wo).toInt() : 0; type |= request->hasArg(rf) << 7; // off refresh override // actual finalization is done in WLED::loop() (removing old busses and adding new) // this may happen even before this loop is finished so we do "doInitBusses" after the loop From 451243c78d3da723e9f38ceea15c903da937a898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Wed, 29 Nov 2023 13:30:06 +0100 Subject: [PATCH 035/108] Merge pull request #3552 from TripleWhy/seedRandom16 Seed FastLED's RNG --- wled00/FX.cpp | 24 ++++++++++++------------ wled00/wled.cpp | 13 +++++++++++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index e162e345..c26cf3b8 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1722,7 +1722,7 @@ uint16_t mode_multi_comet(void) { } comets[i]++; } else { - if(!random(SEGLEN)) { + if(!random16(SEGLEN)) { comets[i] = 0; } } @@ -2074,7 +2074,7 @@ uint16_t mode_fire_2012() { // Step 1. Cool down every cell a little for (int i = 0; i < SEGLEN; i++) { - uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random(4); + uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random8(4); uint8_t minTemp = (i(SEGENV.data); for (int i = 0; i < SEGENV.aux1; i++) { - waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random(0, 3)))); + waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random8(0, 3)))); } } else { waves = reinterpret_cast(SEGENV.data); @@ -4685,7 +4685,7 @@ uint16_t mode_aurora(void) { if(!(waves[i].stillAlive())) { //If a wave dies, reinitialize it starts over. - waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random(0, 3)))); + waves[i].init(SEGLEN, CRGB(SEGMENT.color_from_palette(random8(), false, false, random8(0, 3)))); } } @@ -5993,7 +5993,7 @@ uint16_t mode_2Dghostrider(void) { if (lighter->reg[i]) { lighter->lightersPosY[i] = lighter->gPosY; lighter->lightersPosX[i] = lighter->gPosX; - lighter->Angle[i] = lighter->gAngle + random(-10, 10); + lighter->Angle[i] = lighter->gAngle + ((int)random8(20) - 10); lighter->time[i] = 0; lighter->reg[i] = false; } else { @@ -6928,7 +6928,7 @@ uint16_t mode_puddlepeak(void) { // Puddlepeak. By Andrew Tuline. uint16_t size = 0; uint8_t fadeVal = map(SEGMENT.speed,0,255, 224, 254); - uint16_t pos = random(SEGLEN); // Set a random starting position. + uint16_t pos = random16(SEGLEN); // Set a random starting position. um_data_t *um_data; if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 2a00457b..4491c8d1 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -735,7 +735,20 @@ void WLED::setup() DEBUG_PRINT(pcTaskGetTaskName(NULL)); DEBUG_PRINT(F(" free stack ")); DEBUG_PRINTLN(uxTaskGetStackHighWaterMark(NULL)); #endif + // Seed FastLED random functions with an esp random value, which already works properly at this point. +#if defined(ARDUINO_ARCH_ESP32) + uint32_t seed32 = esp_random(); + seed32 ^= random(); // WLEDMM some extra entropy (for older frameworks where esp_ramdom alone might be too predictable after startup) +#elif defined(ARDUINO_ARCH_ESP8266) + const uint32_t seed32 = RANDOM_REG32; +#else + const uint32_t seed32 = random(std::numeric_limits::max()); +#endif + random16_set_seed((uint16_t)((seed32 & 0xFFFF) ^ (seed32 >> 16))); + + #if WLED_WATCHDOG_TIMEOUT > 0 enableWatchdog(); + #endif #if defined(ARDUINO_ARCH_ESP32) && defined(WLED_DISABLE_BROWNOUT_DET) WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 1); //enable brownout detector From fa6e2175fe059a2dd4a32d2e7b99a3b4fe054ea8 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Wed, 29 Nov 2023 13:33:10 +0100 Subject: [PATCH 036/108] Remove re-seeding FastLED random8/random16 in FX --- wled00/FX.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index c26cf3b8..940fae6e 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -4087,6 +4087,7 @@ static const char _data_FX_MODE_PHASEDNOISE[] PROGMEM = "Phased Noise@!,!;!,!;!" uint16_t mode_twinkleup(void) { // A very short twinkle routine with fade-in and dual controls. By Andrew Tuline. + uint16_t prevSeed = random16_get_seed(); // save seed so we can restore it at the end of the function random16_set_seed(535); // The randomizer needs to be re-set each time through the loop in order for the same 'random' numbers to be the same each time through. for (int i = 0; i < SEGLEN; i++) { @@ -4096,6 +4097,7 @@ uint16_t mode_twinkleup(void) { // A very short twinkle routine SEGMENT.setPixelColor(i, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(random8()+strip.now/100, false, PALETTE_SOLID_WRAP, 0), pixBri)); } + random16_set_seed(prevSeed); // restore original seed so other effects can use "random" PRNG return FRAMETIME; } static const char _data_FX_MODE_TWINKLEUP[] PROGMEM = "Twinkleup@!,Intensity;!,!;!;;m12=0"; From 88f67cbd24e00f5058720fb1fe22c68c31227f84 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 2 Dec 2023 00:47:16 +0100 Subject: [PATCH 037/108] FX: - Matrix bugfix - Lissajous metadata fix --- wled00/FX.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 940fae6e..a738178c 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -5333,7 +5333,7 @@ uint16_t mode_2DLissajous(void) { // By: Andrew Tuline return FRAMETIME; } // mode_2DLissajous() -static const char _data_FX_MODE_2DLISSAJOUS[] PROGMEM = "Lissajous ☾@X frequency,Fade rate,,,Speed,,,☾ Smooth Style;!;!;2;;sx=64,c3=15"; +static const char _data_FX_MODE_2DLISSAJOUS[] PROGMEM = "Lissajous ☾@X frequency,Fade rate,,,Speed,,,☾ Smooth Style;!;!;2;sx=64,c3=15"; /////////////////////// From 0a70f97780a461a76286a6a45d549b67dbe6c5c3 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 12 Dec 2023 15:36:31 +0100 Subject: [PATCH 038/108] random seed bugfix (compile errors on older platforms) --- wled00/wled.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 4491c8d1..648b03cc 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -738,7 +738,7 @@ void WLED::setup() // Seed FastLED random functions with an esp random value, which already works properly at this point. #if defined(ARDUINO_ARCH_ESP32) uint32_t seed32 = esp_random(); - seed32 ^= random(); // WLEDMM some extra entropy (for older frameworks where esp_ramdom alone might be too predictable after startup) + seed32 ^= random(0, INT32_MAX); // WLEDMM some extra entropy (for older frameworks where esp_ramdom alone might be too predictable after startup) #elif defined(ARDUINO_ARCH_ESP8266) const uint32_t seed32 = RANDOM_REG32; #else From 176158c5bae60db08b214e9145906bb3db93f182 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 13 Dec 2023 23:33:58 +0100 Subject: [PATCH 039/108] chores npm run build --- wled00/wled.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/wled.h b/wled00/wled.h index 17d36c45..6e9545be 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312120 +#define VERSION 2312130 //WLEDMM + Moustachauve/Wled-Native // You can define custom product info from build flags. From ced03f1f08e83d290f684500c447d4b42ef54552 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 14 Dec 2023 03:49:54 +0100 Subject: [PATCH 040/108] code spell checking - part1 (core) I've found a code spellchecker, so this is what can be corrected easily. Changes are only affecting comments, readme and a few user-visible strings. So no functional impact expected. --- CHANGELOG.md | 6 ++--- platformio.ini | 2 +- wled00/FX.cpp | 36 ++++++++++++++-------------- wled00/FX.h | 4 ++-- wled00/FX_fcn.cpp | 7 +++--- wled00/bus_manager.cpp | 2 +- wled00/bus_wrapper.h | 8 +++---- wled00/button.cpp | 4 ++-- wled00/cfg.cpp | 2 +- wled00/const.h | 16 ++++++------- wled00/data/cpal/cpal.htm | 4 ++-- wled00/data/index.js | 4 ++-- wled00/data/pixart/getPixelValues.js | 4 ++-- wled00/data/settings_wifi.htm | 2 +- wled00/data/simple.js | 2 +- wled00/json.cpp | 4 ++-- wled00/remote.cpp | 4 ++-- wled00/set.cpp | 6 ++--- wled00/udp.cpp | 4 ++-- wled00/um_manager.cpp | 2 +- wled00/util.cpp | 2 +- wled00/wled.h | 6 ++--- wled00/ws.cpp | 2 +- 23 files changed, 66 insertions(+), 67 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebb620ba..96ca8523 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -389,7 +389,7 @@ - Added application level pong websockets reply (#2139) - Use AsyncTCP 1.0.3 as it mitigates the flickering issue from 0.13.0-b2 -- Fixed transition manually updated in preset overriden by field value +- Fixed transition manually updated in preset overridden by field value #### Build 2108050 @@ -918,7 +918,7 @@ #### Build 2011040 -- Inversed Rain direction (fixes #1147) +- Inverted Rain direction (fixes #1147) #### Build 2011010 @@ -1129,7 +1129,7 @@ - Added module info page to web UI - Added realtime override functionality to web UI -- Added individial segment power and brightness to web UI +- Added individual segment power and brightness to web UI - Added feature to one-click select single segment only by tapping segment name - Removed palette jumping to default if color is changed diff --git a/platformio.ini b/platformio.ini index 10af99f4..2180882f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -763,7 +763,7 @@ board_build.flash_mode = dio ; -D RLYPIN=19 ; -D BTNPIN=17 ; -D IRPIN=18 -; -D UWLED_USE_MY_CONFIG +; -U WLED_USE_MY_CONFIG ; -D USERMOD_DALLASTEMPERATURE ; -D USERMOD_FOUR_LINE_DISPLAY ; -D TEMPERATURE_PIN=23 diff --git a/wled00/FX.cpp b/wled00/FX.cpp index a738178c..cdec4358 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -51,7 +51,7 @@ static uint16_t triwave16(uint16_t in) { * Generates a tristate square wave w/ attac & decay * @param x input value 0-255 * @param pulsewidth 0-127 - * @param attdec attac & decay, max. pulsewidth / 2 + * @param attdec attack & decay, max. pulsewidth / 2 * @returns signed waveform value */ static int8_t tristate_square8(uint8_t x, uint8_t pulsewidth, uint8_t attdec) { @@ -1241,7 +1241,7 @@ uint16_t mode_fireworks() { if (SEGMENT.is2D()) SEGMENT.setPixelColorXY(j, k, col); else SEGMENT.setPixelColor(index, col); SEGENV.aux1 = SEGENV.aux0; // old spark - SEGENV.aux0 = index; // remember where spark occured + SEGENV.aux0 = index; // remember where spark occurred } } return FRAMETIME; @@ -1278,8 +1278,8 @@ uint16_t mode_rain() { SEGENV.aux0++; // increase spark index SEGENV.aux1++; } - if (SEGENV.aux0 == 0) SEGENV.aux0 = UINT16_MAX; // reset previous spark positiom - if (SEGENV.aux1 == 0) SEGENV.aux0 = UINT16_MAX; // reset previous spark positiom + if (SEGENV.aux0 == 0) SEGENV.aux0 = UINT16_MAX; // reset previous spark position + if (SEGENV.aux1 == 0) SEGENV.aux0 = UINT16_MAX; // reset previous spark position if (SEGENV.aux0 >= width*height) SEGENV.aux0 = 0; // ignore if (SEGENV.aux1 >= width*height) SEGENV.aux1 = 0; } @@ -3707,7 +3707,7 @@ uint16_t mode_tetrix(void) { } if (drop->step == 0) { // init brick - // speed calcualtion: a single brick should reach bottom of strip in X seconds + // speed calculation: a single brick should reach bottom of strip in X seconds // if the speed is set to 1 this should take 5s and at 255 it should take 0.25s // as this is dependant on SEGLEN it should be taken into account and the fact that effect runs every FRAMETIME s int speed = SEGMENT.speed ? SEGMENT.speed : random8(1,255); @@ -3790,7 +3790,7 @@ static const char _data_FX_MODE_PLASMA[] PROGMEM = "Plasma@Phase,!;!;!"; /* * Percentage display - * Intesity values from 0-100 turn on the leds. + * Intensity values from 0-100 turn on the leds. */ uint16_t mode_percent(void) { @@ -3843,7 +3843,7 @@ static const char _data_FX_MODE_PERCENT[] PROGMEM = "Percent@,% of fill,,,,One c /* * Modulates the brightness similar to a heartbeat - * (unimplemented?) tries to draw an ECG aproximation on a 2D matrix + * (unimplemented?) tries to draw an ECG approximation on a 2D matrix */ uint16_t mode_heartbeat(void) { uint8_t bpm = 40 + (SEGMENT.speed >> 3); @@ -4525,7 +4525,7 @@ uint16_t mode_tv_simulator(void) { // how much time is elapsed ? tvSimulator->elapsed = strip.now - tvSimulator->startTime; - // fade from prev volor to next color + // fade from prev color to next color if (tvSimulator->elapsed < tvSimulator->fadeTime) { r = map(tvSimulator->elapsed, 0, tvSimulator->fadeTime, tvSimulator->pr, nr); g = map(tvSimulator->elapsed, 0, tvSimulator->fadeTime, tvSimulator->pg, ng); @@ -6487,7 +6487,7 @@ uint16_t mode_gravcenter(void) { // Gravcenter. By Andrew Tuline. SEGMENT.fade_out(251); // 30% float segmentSampleAvg = volumeSmth * (float)SEGMENT.intensity / 255.0f; - segmentSampleAvg *= 0.125; // divide by 8, to compensate for later "sensitivty" upscaling + segmentSampleAvg *= 0.125; // divide by 8, to compensate for later "sensitivity" upscaling float mySampleAvg = mapf(segmentSampleAvg*2.0, 0, 32, 0, (float)SEGLEN/2.0); // map to pixels available in current segment uint16_t tempsamp = constrain(mySampleAvg, 0, SEGLEN/2); // Keep the sample from overflowing. @@ -6542,7 +6542,7 @@ uint16_t mode_gravcentric(void) { // Gravcentric. By Andrew SEGMENT.fade_out(253); // 50% float segmentSampleAvg = volumeSmth * (float)SEGMENT.intensity / 255.0; - segmentSampleAvg *= 0.125f; // divide by 8, to compensate for later "sensitivty" upscaling + segmentSampleAvg *= 0.125f; // divide by 8, to compensate for later "sensitivity" upscaling float mySampleAvg = mapf(segmentSampleAvg*2.0, 0.0f, 32.0f, 0.0f, (float)SEGLEN/2.0); // map to pixels availeable in current segment int tempsamp = constrain(mySampleAvg, 0, SEGLEN/2); // Keep the sample from overflowing. @@ -6609,7 +6609,7 @@ uint16_t mode_gravimeter(void) { // Gravmeter. By Andrew Tuline. float segmentSampleAvg = (volumeSmth * sensGain) - sensOffset; if (segmentSampleAvg < 0) segmentSampleAvg = 0; // could be <0 due to sensOffset - segmentSampleAvg *= 0.25f; // divide by 4, to compensate for later "sensitivty" upscaling + segmentSampleAvg *= 0.25f; // divide by 4, to compensate for later "sensitivity" upscaling float mySampleAvg = mapf(segmentSampleAvg*2.0f, 0, 64, 0, (SEGLEN-1)); // map to pixels availeable in current segment int tempsamp = constrain(mySampleAvg,0,SEGLEN-1); // Keep the sample from overflowing. uint8_t gravity = 8 - SEGMENT.speed/32; @@ -6753,7 +6753,7 @@ uint16_t mode_midnoise(void) { // Midnoise. By Andrew Tuline. //SEGMENT.fade_out(SEGMENT.speed); float tmpSound2 = volumeSmth * (float)SEGMENT.intensity / 256.0; // Too sensitive. - tmpSound2 *= (float)SEGMENT.intensity / 128.0; // Reduce sensitity/length. + tmpSound2 *= (float)SEGMENT.intensity / 128.0; // Reduce sensitivity/length. int maxLen = mapf(tmpSound2, 0, 127, 0, SEGLEN/2); if (maxLen >SEGLEN/2) maxLen = SEGLEN/2; @@ -7269,7 +7269,7 @@ uint16_t mode_freqmatrix(void) { // Freqmatrix. By Andreas Plesch if (FFT_MajorPeak > MAX_FREQUENCY) FFT_MajorPeak = 1; // MajorPeak holds the freq. value which is most abundant in the last sample. - // With our sampling rate of 10240Hz we have a usable freq range from roughtly 80Hz to 10240/2 Hz + // With our sampling rate of 10240Hz we have a usable freq range from roughly 80Hz to 10240/2 Hz // we will treat everything with less than 65Hz as 0 if ((FFT_MajorPeak > 80.0f) && (volumeSmth > 0.25f)) { // WLEDMM @@ -7290,7 +7290,7 @@ uint16_t mode_freqmatrix(void) { // Freqmatrix. By Andreas Plesch return FRAMETIME; } // mode_freqmatrix() -static const char _data_FX_MODE_FREQMATRIX[] PROGMEM = "Freqmatrix@Speed,Sound effect,Low bin,High bin,Sensivity;;;1f;c1=18,c2=48,c3=6,m12=3,si=0"; // Corner, Beatsin; notes range C3 to C7 +static const char _data_FX_MODE_FREQMATRIX[] PROGMEM = "Freqmatrix@Speed,Sound effect,Low bin,High bin,Sensitivity;;;1f;c1=18,c2=48,c3=6,m12=3,si=0"; // Corner, Beatsin; notes range C3 to C7 ////////////////////// @@ -7374,7 +7374,7 @@ uint16_t mode_freqwave(void) { // Freqwave. By Andreas Pleschun if (FFT_MajorPeak > MAX_FREQUENCY) FFT_MajorPeak = 1.0f; // MajorPeak holds the freq. value which is most abundant in the last sample. - // With our sampling rate of 10240Hz we have a usable freq range from roughtly 80Hz to 10240/2 Hz + // With our sampling rate of 10240Hz we have a usable freq range from roughly 80Hz to 10240/2 Hz // we will treat everything with less than 65Hz as 0 if ((FFT_MajorPeak < 80) || (volumeSmth < 1.0f) || (FFT_MajorPeak > 10800)) { // silence or out-of-range --> black @@ -7437,7 +7437,7 @@ uint16_t mode_gravfreq(void) { // Gravfreq. By Andrew Tuline. SEGMENT.fadeToBlackBy(96); float segmentSampleAvg = volumeSmth * (float)SEGMENT.intensity / 255.0f; - segmentSampleAvg *= 0.125; // divide by 8, to compensate for later "sensitivty" upscaling + segmentSampleAvg *= 0.125f; // divide by 8, to compensate for later "sensitivity" upscaling float mySampleAvg = mapf(segmentSampleAvg*2.0f, 0,32, 0, (float)SEGLEN/2.0); // map to pixels availeable in current segment int tempsamp = constrain(mySampleAvg,0,SEGLEN/2); // Keep the sample from overflowing. @@ -7466,7 +7466,7 @@ uint16_t mode_gravfreq(void) { // Gravfreq. By Andrew Tuline. SEGENV.aux0 = indexNew; return FRAMETIME; } // mode_gravfreq() -static const char _data_FX_MODE_GRAVFREQ[] PROGMEM = "Gravfreq ☾@Rate of fall,Sensivity;!,!;!;1f;ix=128,m12=0,si=0"; // Pixels, Beatsin +static const char _data_FX_MODE_GRAVFREQ[] PROGMEM = "Gravfreq ☾@Rate of fall,Sensitivity;!,!;!;1f;ix=128,m12=0,si=0"; // Pixels, Beatsin ////////////////////// @@ -8152,7 +8152,7 @@ static const char _data_FX_MODE_2DWAVINGCELL[] PROGMEM = "Waving Cell@!,,Amplitu static const char _data_RESERVED[] PROGMEM = "RSVD"; // add (or replace reserved) effect mode and data into vector -// use id==255 to find unallocatd gaps (with "Reserved" data string) +// use id==255 to find unallocated gaps (with "Reserved" data string) // if vector size() is smaller than id (single) data is appended at the end (regardless of id) void WS2812FX::addEffect(uint8_t id, mode_ptr mode_fn, const char *mode_name) { if (id == 255) { // find empty slot diff --git a/wled00/FX.h b/wled00/FX.h index 3e4df0e7..3b412387 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -424,12 +424,12 @@ typedef struct Segment { uint8_t _briT; // temporary brightness uint8_t _cctT; // temporary CCT CRGBPalette16 _palT; // temporary palette - uint8_t _prevPaletteBlends; // number of previous palette blends (there are max 255 belnds possible) + uint8_t _prevPaletteBlends; // number of previous palette blends (there are max 255 blends possible) uint8_t _modeP; // previous mode/effect //uint16_t _aux0, _aux1; // previous mode/effect runtime data //uint32_t _step, _call; // previous mode/effect runtime data //byte *_data; // previous mode/effect runtime data - unsigned long _start; // must accommodate millis() + unsigned long _start; // must accommodate millis() uint16_t _dur; Transition(uint16_t dur=750) : _briT(255) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index baed4c15..0b870534 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -349,7 +349,7 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) { CRGB sec = gamma32(colors[1]); CRGB ter = gamma32(colors[2]); targetPalette = CRGBPalette16(ter,sec,prim); break;} - case 5: {//primary + secondary (+tert if not off), more distinct + case 5: {//primary + secondary (+tertiary if not off), more distinct CRGB prim = gamma32(colors[0]); CRGB sec = gamma32(colors[1]); if (colors[2]) { @@ -1768,8 +1768,7 @@ void WS2812FX::estimateCurrentAndLimitBri() { } void WS2812FX::show(void) { - - // avoid race condition, caputre _callback value + // avoid race condition, capture _callback value show_callback callback = _callback; if (callback) callback(); @@ -1815,7 +1814,7 @@ bool WS2812FX::isUpdating() { /** * Returns the refresh rate of the LED strip. Useful for finding out whether a given setup is fast enough. - * Only updates on show() or is set to 0 fps if last show is more than 2 secs ago, so accurary varies + * Only updates on show() or is set to 0 fps if last show is more than 2 secs ago, so accuracy varies */ uint16_t WS2812FX::getFps() { if (millis() - _lastShow > 2000) return 0; diff --git a/wled00/bus_manager.cpp b/wled00/bus_manager.cpp index 6ff75762..14e0888a 100644 --- a/wled00/bus_manager.cpp +++ b/wled00/bus_manager.cpp @@ -70,7 +70,7 @@ void ColorOrderMap::add(uint16_t start, uint16_t len, uint8_t colorOrder) { uint8_t IRAM_ATTR ColorOrderMap::getPixelColorOrder(uint16_t pix, uint8_t defaultColorOrder) const { if (_count == 0) return defaultColorOrder; - // upper nibble containd W swap information + // upper nibble contains W swap information uint8_t swapW = defaultColorOrder >> 4; for (uint8_t i = 0; i < _count; i++) { if (pix >= _mappings[i].start && pix < (_mappings[i].start + _mappings[i].len)) { diff --git a/wled00/bus_wrapper.h b/wled00/bus_wrapper.h index 8473938e..a5b9d7a7 100644 --- a/wled00/bus_wrapper.h +++ b/wled00/bus_wrapper.h @@ -69,17 +69,17 @@ #define I_32_RN_NEO_3 21 #define I_32_I0_NEO_3 22 #define I_32_I1_NEO_3 23 -#define I_32_BB_NEO_3 24 // bitbangging on ESP32 not recommended +#define I_32_BB_NEO_3 24 // bitbanging on ESP32 not recommended //RGBW #define I_32_RN_NEO_4 25 #define I_32_I0_NEO_4 26 #define I_32_I1_NEO_4 27 -#define I_32_BB_NEO_4 28 // bitbangging on ESP32 not recommended +#define I_32_BB_NEO_4 28 // bitbanging on ESP32 not recommended //400Kbps #define I_32_RN_400_3 29 #define I_32_I0_400_3 30 #define I_32_I1_400_3 31 -#define I_32_BB_400_3 32 // bitbangging on ESP32 not recommended +#define I_32_BB_400_3 32 // bitbanging on ESP32 not recommended //TM1814 (RGBW) #define I_32_RN_TM1_4 33 #define I_32_I0_TM1_4 34 @@ -374,7 +374,7 @@ class PolyBus { case I_32_I1_UCS_4: (static_cast(busPtr))->Begin(); break; #endif // case I_32_BB_UCS_4: (static_cast(busPtr))->Begin(); break; - // ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin() + // ESP32 can (and should, to avoid inadvertently driving the chip select signal) specify the pins used for SPI, but only in begin() case I_HS_DOT_3: beginDotStar(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break; case I_HS_LPD_3: beginDotStar(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break; case I_HS_LPO_3: beginDotStar(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break; diff --git a/wled00/button.cpp b/wled00/button.cpp index 053d59dd..89b8a91d 100644 --- a/wled00/button.cpp +++ b/wled00/button.cpp @@ -171,7 +171,7 @@ void handleAnalog(uint8_t b) // remove noise & reduce frequency of UI updates if (abs(int(aRead) - int(oldRead[b])) <= POT_SENSITIVITY) return; // no significant change in reading - // Unomment the next lines if you still see flickering related to potentiometer + // Un-Comment the next lines if you still see flickering related to potentiometer // This waits until strip finishes updating (why: strip was not updating at the start of handleButton() but may have started during analogRead()?) //unsigned long wait_started = millis(); //while(strip.isUpdating() && (millis() - wait_started < STRIP_WAIT_TIME)) { @@ -375,7 +375,7 @@ void handleIO() if (!offMode) { #ifdef ESP8266 // turn off built-in LED if strip is turned off - // this will break digital bus so will need to be reinitialised on On + // this will break digital bus so will need to be re-initialised on On PinOwner ledPinOwner = pinManager.getPinOwner(LED_BUILTIN); if (!strip.isOffRefreshRequired() && (ledPinOwner == PinOwner::None || ledPinOwner == PinOwner::BusDigital)) { pinMode(LED_BUILTIN, OUTPUT); diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 62755905..3d0c2acf 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -337,7 +337,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { PinManagerPinType i2c[2] = { { i2c_sda, true }, { i2c_scl, true } }; if (i2c_scl >= 0 && i2c_sda >= 0 && pinManager.allocateMultiplePins(i2c, 2, PinOwner::HW_I2C)) { #ifdef ESP32 - Wire.setPins(i2c_sda, i2c_scl); // this will fail if Wire is initilised (Wire.begin() called prior) + Wire.setPins(i2c_sda, i2c_scl); // this will fail if Wire is initialised (Wire.begin() called prior) #endif // Wire.begin(); // WLEDMM moved into pinManager DEBUG_PRINTF("pinmgr success for global i2c %d %d\n", i2c_sda, i2c_scl); diff --git a/wled00/const.h b/wled00/const.h index 521dc931..ae8ecb92 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -199,8 +199,8 @@ #define DMX_MODE_MULTIPLE_RGB 4 //every LED is addressed with its own RGB (ledCount * 3 channels) #define DMX_MODE_MULTIPLE_DRGB 5 //every LED is addressed with its own RGB and share a master dimmer (ledCount * 3 + 1 channels) #define DMX_MODE_MULTIPLE_RGBW 6 //every LED is addressed with its own RGBW (ledCount * 4 channels) -#define DMX_MODE_EFFECT_SEGMENT 8 //trigger standalone effects of WLED (15 channels per segement) -#define DMX_MODE_EFFECT_SEGMENT_W 9 //trigger standalone effects of WLED (18 channels per segement) +#define DMX_MODE_EFFECT_SEGMENT 8 //trigger standalone effects of WLED (15 channels per segment) +#define DMX_MODE_EFFECT_SEGMENT_W 9 //trigger standalone effects of WLED (18 channels per segment) #define DMX_MODE_PRESET 10 //apply presets (1 channel) //Light capability byte (unused) 0bRCCCTTTT @@ -317,7 +317,7 @@ #define SEG_DIFFERS_OPT 0x02 // all segment options except: selected, reset & transitional #define SEG_DIFFERS_COL 0x04 // colors #define SEG_DIFFERS_FX 0x08 // effect/mode parameters -#define SEG_DIFFERS_BOUNDS 0x10 // segment start/stop ounds +#define SEG_DIFFERS_BOUNDS 0x10 // segment start/stop bounds #define SEG_DIFFERS_GSO 0x20 // grouping, spacing & offset #define SEG_DIFFERS_SEL 0x80 // selected @@ -340,7 +340,7 @@ #define ERR_FS_PLOAD 12 // It was attempted to load a preset that does not exist #define ERR_FS_IRLOAD 13 // It was attempted to load an IR JSON cmd, but the "ir.json" file does not exist #define ERR_FS_RMLOAD 14 // It was attempted to load an remote JSON cmd, but the "remote.json" file does not exist -#define ERR_FS_GENERAL 19 // A general unspecified filesystem error occured +#define ERR_FS_GENERAL 19 // A general unspecified filesystem error occurred #define ERR_OVERTEMP 30 // An attached temperature sensor has measured above threshold temperature (not implemented) #define ERR_OVERCURRENT 31 // An attached current sensor has measured a current above the threshold (not implemented) #define ERR_UNDERVOLT 32 // An attached voltmeter has measured a voltage below the threshold (not implemented) @@ -369,7 +369,7 @@ #define SUBPAGE_JS 254 #define SUBPAGE_WELCOME 255 -#define NTP_PACKET_SIZE 48 // size of NTP recive buffer +#define NTP_PACKET_SIZE 48 // size of NTP receive buffer #define NTP_MIN_PACKET_SIZE 48 // min expected size - NTP v4 allows for "extended information" appended to the standard fields //maximum number of rendered LEDs - this does not have to match max. physical LEDs, e.g. if there are virtual busses @@ -471,7 +471,7 @@ //this is merely a default now and can be changed at runtime #ifndef LEDPIN #if defined(ESP8266) || (defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)) || defined(CONFIG_IDF_TARGET_ESP32C3) - #define LEDPIN 2 // GPIO2 (D4) on Wemod D1 mini compatible boards + #define LEDPIN 2 // GPIO2 (D4) on Wemos D1 mini compatible boards #else #define LEDPIN 16 // aligns with GPIO2 (D4) on Wemos D1 mini32 compatible boards #endif @@ -492,7 +492,7 @@ #define INTERFACE_UPDATE_COOLDOWN 2000 //time in ms to wait between websockets, alexa, and MQTT updates // HW_PIN_SCL & HW_PIN_SDA are used for information in usermods settings page and usermods themselves -// which GPIO pins are actually used in a hardwarea layout (controller board) +// which GPIO pins are actually used in a hardware layout (controller board) //WLEDMM: unchangeable pins are not treated here by undef them, but elsewhere in the code // defaults for 1st I2C on ESP32 (Wire global) #ifndef HW_PIN_SCL @@ -503,7 +503,7 @@ #endif // HW_PIN_SCLKSPI & HW_PIN_MOSISPI & HW_PIN_MISOSPI are used for information in usermods settings page and usermods themselves -// which GPIO pins are actually used in a hardwarea layout (controller board) +// which GPIO pins are actually used in a hardware layout (controller board) //WLEDMM: unchangeable pins are not treated here by undef them, but elsewhere in the code // defaults for VSPI on ESP32 (SPI global, SPI.cpp) as HSPI is used by WLED (bus_wrapper.h) #ifndef HW_PIN_CLOCKSPI diff --git a/wled00/data/cpal/cpal.htm b/wled00/data/cpal/cpal.htm index 5a8c801e..e9a3799c 100644 --- a/wled00/data/cpal/cpal.htm +++ b/wled00/data/cpal/cpal.htm @@ -485,7 +485,7 @@ console.log('Error: ', e); console.log(' Status: ', this.status); //Show some error notification for some time setTimeout(()=>{ - //Remove it when time has pased + //Remove it when time has passed }, 1000); }); req.open("POST", "/upload"); @@ -530,7 +530,7 @@ paletteArray.push({"palette":[0,70,70,70,255,70,70,70]}); } - //Get static palettes from localStorage and do some magic to reformat them into the same format as the pallete JSONs + //Get static palettes from localStorage and do some magic to reformat them into the same format as the palette JSONs //This code excludes any objects with "non valid integer colors", i.e. r, c1, c2, c3 and such //This code also fixes potentially broken palettes which doesn't end on 255 //The code finally also removes any representations of the custom palettes, since we read them from file diff --git a/wled00/data/index.js b/wled00/data/index.js index d4109554..c50fc89e 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -1978,9 +1978,9 @@ function readState(s,command=false) // - For AC effects (id<128) 2 sliders and 3 colors and the palette will be shown // - For SR effects (id>128) 5 sliders and 3 colors and the palette will be shown // If effective (@) -// - a ; seperates slider controls (left) from color controls (middle) and palette control (right) +// - a ; separates slider controls (left) from color controls (middle) and palette control (right) // - if left, middle or right is empty no controls are shown -// - a , seperates slider controls (max 5) or color controls (max 3). Palette has only one value +// - a , separates slider controls (max 5) or color controls (max 3). Palette has only one value // - a ! means that the default is used. // - For sliders: Effect speeds, Effect intensity, Custom 1, Custom 2, Custom 3 // - For colors: Fx color, Background color, Custom diff --git a/wled00/data/pixart/getPixelValues.js b/wled00/data/pixart/getPixelValues.js index 6f68f2d2..7f4265fd 100644 --- a/wled00/data/pixart/getPixelValues.js +++ b/wled00/data/pixart/getPixelValues.js @@ -69,7 +69,7 @@ function getPixelRGBValues(base64Image) { let sizeY = szY.value; if (color != accentColor || sizeX < 1 || sizeY < 1){ - //image will not be rezised Set desitred size to original size + //image will not be resized Set desired size to original size sizeX = image.width; sizeY = image.height; //failsafe for not generating huge images automatically @@ -153,7 +153,7 @@ function getPixelRGBValues(base64Image) { let curentColorIndex = 0 let commandArray = []; - //For evry pixel in the LED array + //For every pixel in the LED array for (let i = 0; i < maxi; i++) { let pixel = ledRGBValues[i]; let r = pixel[0]; diff --git a/wled00/data/settings_wifi.htm b/wled00/data/settings_wifi.htm index 8d4aebe1..b66a1b09 100644 --- a/wled00/data/settings_wifi.htm +++ b/wled00/data/settings_wifi.htm @@ -34,7 +34,7 @@ ).reduce( // Filter out duplicate SSIDs. Since it is sorted by signal // strength, the strongest signal will be kept in the - // order it orginally appeared in the array. + // order it as originally appeared in the array. (unique, other) => { if(!unique.some(obj => obj.ssid === other.ssid)) { unique.push(other); diff --git a/wled00/data/simple.js b/wled00/data/simple.js index 42c76266..8e3d2914 100644 --- a/wled00/data/simple.js +++ b/wled00/data/simple.js @@ -965,7 +965,7 @@ function readState(s,command=false) errstr = "Missing IR.json."; break; case 19: - errstr = "A filesystem error has occured."; + errstr = "A filesystem error has occurred."; break; } showToast('Error ' + s.error + ": " + errstr, true); diff --git a/wled00/json.cpp b/wled00/json.cpp index 4c049889..6cf4e7fb 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -309,7 +309,7 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId) getVal(elem["c1"], &seg.custom1); getVal(elem["c2"], &seg.custom2); uint8_t cust3 = seg.custom3; - getVal(elem["c3"], &cust3); // we can't pass reference to bifield + getVal(elem["c3"], &cust3); // we can't pass reference to bitfield seg.custom3 = constrain(cust3, 0, 31); seg.check1 = elem["o1"] | seg.check1; @@ -1206,7 +1206,7 @@ void serializePalettes(JsonObject root, AsyncWebServerRequest* request) curPalette.add("c2"); curPalette.add("c1"); break; - case 5: //primary + secondary (+tert if not off), more distinct + case 5: //primary + secondary (+tertiary if not off), more distinct curPalette.add("c1"); curPalette.add("c1"); curPalette.add("c1"); diff --git a/wled00/remote.cpp b/wled00/remote.cpp index b79066ed..e878f8eb 100644 --- a/wled00/remote.cpp +++ b/wled00/remote.cpp @@ -30,11 +30,11 @@ void handleRemote(){} // since it's broadly commercially available and works out of the box as a drop-in typedef struct message_structure { uint8_t program; // 0x91 for ON button, 0x81 for all others - uint8_t seq[4]; // Incremetal sequence number 32 bit unsigned integer LSB first + uint8_t seq[4]; // Incremental sequence number 32 bit unsigned integer LSB first uint8_t byte5 = 32; // Unknown uint8_t button; // Identifies which button is being pressed uint8_t byte8 = 1; // Unknown, but always 0x01 - uint8_t byte9 = 100; // Unnkown, but always 0x64 + uint8_t byte9 = 100; // Unknown, but always 0x64 uint8_t byte10; // Unknown, maybe checksum uint8_t byte11; // Unknown, maybe checksum diff --git a/wled00/set.cpp b/wled00/set.cpp index 55def478..4b76f3c5 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -186,7 +186,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) } busses.updateColorOrderMap(com); - // upate other pins + // update other pins int hw_ir_pin = request->arg(F("IR")).toInt(); if (pinManager.allocatePin(hw_ir_pin,false, PinOwner::IR)) { irPin = hw_ir_pin; @@ -710,10 +710,10 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) DEBUG_PRINTLN(value); } else { // we are using a hidden field with the same name as our parameter (!before the actual parameter!) - // to describe the type of parameter (text,float,int), for boolean patameters the first field contains "off" + // to describe the type of parameter (text,float,int), for boolean parameters the first field contains "off" // so checkboxes have one or two fields (first is always "false", existence of second depends on checkmark and may be "true") if (subObj[name].isNull()) { - // the first occurence of the field describes the parameter type (used in next loop) + // the first occurrence of the field describes the parameter type (used in next loop) if (value == "false") subObj[name] = false; // checkboxes may have only one field else subObj[name] = value; } else { diff --git a/wled00/udp.cpp b/wled00/udp.cpp index 0ea6d23d..e5d6ecf7 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -45,7 +45,7 @@ void notify(byte callMode, bool followUp) //3: supports FX intensity, 24 byte packet 4: supports transitionDelay 5: sup palette //6: supports timebase syncing, 29 byte packet 7: supports tertiary color 8: supports sys time sync, 36 byte packet //9: supports sync groups, 37 byte packet 10: supports CCT, 39 byte packet 11: per segment options, variable packet length (40+MAX_NUM_SEGMENTS*3) - //12: enhanced effct sliders, 2D & mapping options + //12: enhanced effect sliders, 2D & mapping options udpOut[11] = 12; col = mainseg.colors[1]; udpOut[12] = R(col); @@ -365,7 +365,7 @@ void handleNotifications() //apply colors from notification to main segment, only if not syncing full segments if ((receiveNotificationColor || !someSel) && (version < 11 || !receiveSegmentOptions)) { - // primary color, only apply white if intented (version > 0) + // primary color, only apply white if intended (version > 0) strip.setColor(0, RGBW32(udpIn[3], udpIn[4], udpIn[5], (version > 0) ? udpIn[10] : 0)); if (version > 1) { strip.setColor(1, RGBW32(udpIn[12], udpIn[13], udpIn[14], udpIn[15])); // secondary color diff --git a/wled00/um_manager.cpp b/wled00/um_manager.cpp index b410891c..2fe44db9 100644 --- a/wled00/um_manager.cpp +++ b/wled00/um_manager.cpp @@ -19,7 +19,7 @@ bool UsermodManager::handleButton(uint8_t b) { bool UsermodManager::getUMData(um_data_t **data, uint8_t mod_id) { for (byte i = 0; i < numMods; i++) { if (mod_id > 0 && ums[i]->getId() != mod_id) continue; // only get data form requested usermod if provided - if (ums[i]->getUMData(data)) return true; // if usermod does provide data return immediately (only one usermod can povide data at one time) + if (ums[i]->getUMData(data)) return true; // if usermod does provide data return immediately (only one usermod can provide data at one time) } return false; } diff --git a/wled00/util.cpp b/wled00/util.cpp index 7fe3d504..fb8b5e59 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -231,7 +231,7 @@ void releaseJSONBufferLock() // extracts effect mode (or palette) name from names serialized string -// caller must provide large enough buffer for name (incluing SR extensions)! +// caller must provide large enough buffer for name (including SR extensions)! uint8_t extractModeName(uint8_t mode, const char *src, char *dest, uint8_t maxLen) { if (src == JSON_mode_names || src == nullptr) { diff --git a/wled00/wled.h b/wled00/wled.h index 6e9545be..8d0a99c7 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -174,7 +174,7 @@ // ESP32-WROVER features SPI RAM (aka PSRAM) which can be allocated using ps_malloc() // we can create custom PSRAMDynamicJsonDocument to use such feature (replacing DynamicJsonDocument) // The following is a construct to enable code to compile without it. -// There is a code thet will still not use PSRAM though: +// There is a code that will still not use PSRAM though: // AsyncJsonResponse is a derived class that implements DynamicJsonDocument (AsyncJson-v6.h) #if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) // WLEDMM struct PSRAM_Allocator { @@ -443,7 +443,7 @@ WLED_GLOBAL uint16_t e131ProxyUniverse _INIT(0); // output this WLED_GLOBAL int dmxEnablePin _INIT(0); #endif -WLED_GLOBAL uint16_t e131Universe _INIT(1); // settings for E1.31 (sACN) protocol (only DMX_MODE_MULTIPLE_* can span over consequtive universes) +WLED_GLOBAL uint16_t e131Universe _INIT(1); // settings for E1.31 (sACN) protocol (only DMX_MODE_MULTIPLE_* can span over consecutive universes) WLED_GLOBAL uint16_t e131Port _INIT(5568); // DMX in port. E1.31 default is 5568, Art-Net is 6454 WLED_GLOBAL byte e131Priority _INIT(0); // E1.31 port priority (if != 0 priority handling is active) WLED_GLOBAL E131Priority highPriority _INIT(3); // E1.31 highest priority tracking, init = timeout in seconds @@ -575,7 +575,7 @@ WLED_GLOBAL byte colNlT[] _INIT_N(({ 0, 0, 0, 0 })); // current nightligh WLED_GLOBAL unsigned long lastOnTime _INIT(0); WLED_GLOBAL bool offMode _INIT(!turnOnAtBoot); WLED_GLOBAL byte bri _INIT(briS); // global brightness (set) -WLED_GLOBAL byte briOld _INIT(0); // global brightnes while in transition loop (previous iteration) +WLED_GLOBAL byte briOld _INIT(0); // global brightness while in transition loop (previous iteration) WLED_GLOBAL byte briT _INIT(0); // global brightness during transition WLED_GLOBAL byte briLast _INIT(128); // brightness before turned off. Used for toggle function WLED_GLOBAL byte whiteLast _INIT(128); // white channel before turned off. Used for toggle function diff --git a/wled00/ws.cpp b/wled00/ws.cpp index d6acc533..5f5bfd9e 100644 --- a/wled00/ws.cpp +++ b/wled00/ws.cpp @@ -35,7 +35,7 @@ void wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventTyp { if (len > 0 && len < 10 && data[0] == 'p') { // application layer ping/pong heartbeat. - // client-side socket layer ping packets are unresponded (investigate) + // client-side socket layer ping packets are unanswered (investigate) client->text(F("pong")); return; } From 4995faf5942ca7ca15c67dce9e6fe08cc2c8d902 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 14 Dec 2023 03:50:22 +0100 Subject: [PATCH 041/108] code spell checking - part2 (dependencies) --- wled00/src/dependencies/dmx/ESPDMX.cpp | 2 +- wled00/src/dependencies/time/DS1307RTC.cpp | 4 ++-- wled00/src/dependencies/time/Time.cpp | 6 +++--- wled00/src/dependencies/timezone/Timezone.cpp | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/wled00/src/dependencies/dmx/ESPDMX.cpp b/wled00/src/dependencies/dmx/ESPDMX.cpp index 9f7c6e56..d0d652c8 100644 --- a/wled00/src/dependencies/dmx/ESPDMX.cpp +++ b/wled00/src/dependencies/dmx/ESPDMX.cpp @@ -28,7 +28,7 @@ #define BREAKFORMAT SERIAL_8N1 bool dmxStarted = false; -int sendPin = 2; //dafault on ESP8266 +int sendPin = 2; //default on ESP8266 //DMX value array and size. Entry 0 will hold startbyte uint8_t dmxDataStore[dmxMaxChannel] = {}; diff --git a/wled00/src/dependencies/time/DS1307RTC.cpp b/wled00/src/dependencies/time/DS1307RTC.cpp index ff5a0a67..a52f2931 100644 --- a/wled00/src/dependencies/time/DS1307RTC.cpp +++ b/wled00/src/dependencies/time/DS1307RTC.cpp @@ -35,7 +35,7 @@ #define DS1307_CTRL_ID 0x68 // PUBLIC FUNCTIONS -time_t DS1307RTC::get() // Aquire data from buffer and convert to time_t +time_t DS1307RTC::get() // Acquire data from buffer and convert to time_t { tmElements_t tm; if (read(tm) == false) return 0; @@ -49,7 +49,7 @@ bool DS1307RTC::set(time_t t) return write(tm); } -// Aquire data from the RTC chip in BCD format +// Acquire data from the RTC chip in BCD format bool DS1307RTC::read(tmElements_t &tm) { uint8_t sec; diff --git a/wled00/src/dependencies/time/Time.cpp b/wled00/src/dependencies/time/Time.cpp index 21f2e989..2dadb90c 100644 --- a/wled00/src/dependencies/time/Time.cpp +++ b/wled00/src/dependencies/time/Time.cpp @@ -101,9 +101,9 @@ int year(time_t t) { // the year for the given time /*============================================================================*/ /* functions to convert to and from system time */ -/* These are for interfacing with time serivces and are not normally needed in a sketch */ +/* These are for interfacing with time services and are not normally needed in a sketch */ -// leap year calulator expects year argument as years offset from 1970 +// leap year calculator expects year argument as years offset from 1970 #define LEAP_YEAR(Y) ( ((1970+Y)>0) && !((1970+Y)%4) && ( ((1970+Y)%100) || !((1970+Y)%400) ) ) static const uint8_t monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31}; // API starts months from 1, this array starts from 0 @@ -193,7 +193,7 @@ time_t makeTime(tmElements_t &tm){ } time_t getUnixTime(int hr,int min,int sec,int dy, int mnth, int yr){ - // year can be given as full four digit year or two digts (2010 or 10 for 2010); + // year can be given as full four digit year or two digits (2010 or 10 for 2010); //it is converted to years since 1970 if( yr > 99) yr = yr - 1970; diff --git a/wled00/src/dependencies/timezone/Timezone.cpp b/wled00/src/dependencies/timezone/Timezone.cpp index 1606fd8f..b114e391 100644 --- a/wled00/src/dependencies/timezone/Timezone.cpp +++ b/wled00/src/dependencies/timezone/Timezone.cpp @@ -11,7 +11,7 @@ #include "Timezone.h" -//THIS LINE WAS ADDED FOR COMPATIBILY WITH THE WLED DEPENDENCY STRUCTURE. REMOVE IF YOU USE IT OUTSIDE OF WLED! +//THIS LINE WAS ADDED FOR COMPATIBILITY WITH THE WLED DEPENDENCY STRUCTURE. REMOVE IF YOU USE IT OUTSIDE OF WLED! #include "../time/TimeLib.h" #ifdef __AVR__ From 47448b8d00c49b756e443b3f2868329de43ed542 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 14 Dec 2023 13:53:56 +0100 Subject: [PATCH 042/108] comment clean-up (cosmetic) --- wled00/button.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/wled00/button.cpp b/wled00/button.cpp index 89b8a91d..60df15eb 100644 --- a/wled00/button.cpp +++ b/wled00/button.cpp @@ -171,13 +171,12 @@ void handleAnalog(uint8_t b) // remove noise & reduce frequency of UI updates if (abs(int(aRead) - int(oldRead[b])) <= POT_SENSITIVITY) return; // no significant change in reading - // Un-Comment the next lines if you still see flickering related to potentiometer + // Un-comment the next lines if you still see flickering related to potentiometer // This waits until strip finishes updating (why: strip was not updating at the start of handleButton() but may have started during analogRead()?) //unsigned long wait_started = millis(); //while(strip.isUpdating() && (millis() - wait_started < STRIP_WAIT_TIME)) { // delay(1); //} - //if (strip.isUpdating()) return; // give up oldRead[b] = aRead; @@ -392,4 +391,4 @@ void handleIO() } offMode = true; } -} \ No newline at end of file +} From 9f71f47e6f214b4451ab56fc31954d6a755a362d Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 14 Dec 2023 15:58:45 +0100 Subject: [PATCH 043/108] oappend robustness improvement obuf is reset to nullptr in some cases --- wled00/util.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/wled00/util.cpp b/wled00/util.cpp index fb8b5e59..520f4bb4 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -148,11 +148,14 @@ bool oappendi(int i) bool oappend(const char* txt) { uint16_t len = strlen(txt); - if (olen + len >= SETTINGS_STACK_BUF_SIZE) { - USER_PRINT(F("oappend() error: buffer full. Increase SETTINGS_STACK_BUF_SIZE for ")); - USER_PRINTF("%2u bytes \t\"", len /*1 + olen + len - SETTINGS_STACK_BUF_SIZE*/); - USER_PRINT(txt); - USER_PRINTLN(F("\"")); + if ((obuf == nullptr) || (olen + len >= SETTINGS_STACK_BUF_SIZE)) { // sanity checks + if (obuf == nullptr) { USER_PRINTLN(F("oappend() error: obuf == nullptr.")); + } else { + USER_PRINT(F("oappend() error: buffer full. Increase SETTINGS_STACK_BUF_SIZE for ")); + USER_PRINTF("%2u bytes \t\"", len /*1 + olen + len - SETTINGS_STACK_BUF_SIZE*/); + USER_PRINT(txt); + USER_PRINTLN(F("\"")); + } return false; // buffer full } strcpy(obuf + olen, txt); From 627e00236a557957ca27d908a61bd77f9648d7ff Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 14 Dec 2023 19:44:36 +0100 Subject: [PATCH 044/108] Manila Time is the same as CST (solves #3517) PHST abbreviation added for clarity. --- wled00/data/settings_time.htm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wled00/data/settings_time.htm b/wled00/data/settings_time.htm index 7be6ec84..52f3385e 100644 --- a/wled00/data/settings_time.htm +++ b/wled00/data/settings_time.htm @@ -168,8 +168,8 @@ - - + + From d00b32e6dea2683e27795541f5ccb4e4164db051 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 14 Dec 2023 20:36:05 +0100 Subject: [PATCH 045/108] bugfix - unusable pins on pico32 boards (#3573) According to the technical manual, GPIO 16 + 17 are used for onboard flash, so cannot be used by WLED. example buildenv: [env:esp32_pico] extends = env:esp32dev_qio80 board = pico32 --- wled00/const.h | 5 +++-- wled00/wled.cpp | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/wled00/const.h b/wled00/const.h index ae8ecb92..90ba726b 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -470,8 +470,9 @@ //this is merely a default now and can be changed at runtime #ifndef LEDPIN -#if defined(ESP8266) || (defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)) || defined(CONFIG_IDF_TARGET_ESP32C3) - #define LEDPIN 2 // GPIO2 (D4) on Wemos D1 mini compatible boards + +#if defined(ESP8266) || (defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32_PICO) + #define LEDPIN 2 // GPIO2 (D4) on Wemos D1 mini compatible boards, and on boards where GPIO16 is not available #else #define LEDPIN 16 // aligns with GPIO2 (D4) on Wemos D1 mini32 compatible boards #endif diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 648b03cc..56d3ba50 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -584,6 +584,11 @@ void WLED::setup() #else DEBUG_PRINTLN(F("PSRAM not used.")); #endif +#endif +#if defined(ARDUINO_ESP32_PICO) +// special handling for PICO-D4: gpio16+17 are in use for onboard SPI FLASH (not PSRAM) +managed_pin_type pins[] = { {16, true}, {17, true} }; +pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM); #endif //DEBUG_PRINT(F("LEDs inited. heap usage ~")); From 9024872f636c0d5fad8581379a05deb4ebf49fae Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 14 Dec 2023 03:52:06 +0100 Subject: [PATCH 046/108] code spell checking - part3 (usermods) if you can spell Fahrenheit, you can't spell Celsius. And vice versa :-) --- .../Animated_Staircase/Animated_Staircase.h | 4 ++-- usermods/Animated_Staircase/README.md | 4 ++-- usermods/BH1750_v2/readme.md | 2 +- usermods/BH1750_v2/usermod_bh1750.h | 2 +- usermods/BME280_v2/usermod_bme280.h | 4 ++-- usermods/Battery/readme.md | 4 ++-- usermods/DHT/usermod_dht.h | 2 +- usermods/EXAMPLE_v2/usermod_v2_example.h | 2 +- .../usermod.cpp | 14 ++++++------- .../usermod_bme280.cpp | 14 ++++++------- .../Fix_unreachable_netservices_v2/readme.md | 4 ++-- usermods/PIR_sensor_switch/readme.md | 6 +++--- .../usermod_PIR_sensor_switch.h | 2 +- usermods/PWM_fan/readme.md | 4 ++-- .../usermod_sn_photoresistor.h | 2 +- usermods/TTGO-T-Display/usermod.cpp | 4 ++-- usermods/Temperature/readme.md | 2 +- .../usermod.cpp | 20 +++++++++---------- .../usermod_bme280.cpp | 16 +++++++-------- usermods/audioreactive/readme.md | 8 ++++---- usermods/mqtt_switch_v2/README.md | 2 +- usermods/multi_relay/readme.md | 2 +- usermods/multi_relay/usermod_multi_relay.h | 2 +- usermods/seven_segment_display/readme.md | 2 +- .../usermod_v2_seven_segment_display.h | 4 ++-- .../usermod_seven_segment_reloaded.h | 4 ++-- usermods/sht/usermod_sht.h | 2 +- .../usermod_rotary_brightness_color.h | 4 ++-- .../usermod_v2_auto_save.h | 4 ++-- .../usermod_v2_four_line_display/readme.md | 2 +- .../usermod_v2_four_line_display.h | 4 ++-- .../usermod_v2_four_line_display_ALT.h | 4 ++-- .../usermod_v2_klipper_percentage/readme.md | 4 ++-- .../usermod_v2_klipper_percentage.h | 2 +- usermods/usermod_v2_ping_pong_clock/readme.md | 2 +- .../usermod_v2_ping_pong_clock.h | 14 ++++++------- .../usermod_v2_rotary_encoder_ui.h | 2 +- .../usermod_v2_rotary_encoder_ui_ALT.h | 6 +++--- usermods/usermod_v2_word_clock/readme.md | 2 +- .../usermod_v2_word_clock.h | 4 ++-- usermods/wizlights/readme.md | 4 ++-- 41 files changed, 98 insertions(+), 98 deletions(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index dd282f16..9365a17e 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -317,7 +317,7 @@ class Animated_Staircase : public Usermod { seg.setOption(SEG_OPTION_ON, true); } strip.trigger(); // force strip update - stateChanged = true; // inform external dvices/UI of change + stateChanged = true; // inform external devices/UI of change colorUpdated(CALL_MODE_DIRECT_CHANGE); DEBUG_PRINTLN(F("Animated Staircase disabled.")); } @@ -501,7 +501,7 @@ class Animated_Staircase : public Usermod { bottomEchoPin = top[FPSTR(_bottomEcho_pin)] | bottomEchoPin; topMaxDist = top[FPSTR(_topEchoCm)] | topMaxDist; - topMaxDist = min(150,max(30,(int)topMaxDist)); // max distnace ~1.5m (a lag of 9ms may be expected) + topMaxDist = min(150,max(30,(int)topMaxDist)); // max distance ~1.5m (a lag of 9ms may be expected) bottomMaxDist = top[FPSTR(_bottomEchoCm)] | bottomMaxDist; bottomMaxDist = min(150,max(30,(int)bottomMaxDist)); // max distance ~1.5m (a lag of 9ms may be expected) diff --git a/usermods/Animated_Staircase/README.md b/usermods/Animated_Staircase/README.md index 61c1cb2d..618a1f7c 100644 --- a/usermods/Animated_Staircase/README.md +++ b/usermods/Animated_Staircase/README.md @@ -38,7 +38,7 @@ Maximum distance for ultrasonic sensor can be configured as the time needed for You _may_ need to use 10k pull-down resistors on the selected PIR pins, depending on the sensor. ## WLED configuration -1. In the WLED UI, confgure a segment for each step. The lowest step of the stairs is the +1. In the WLED UI, configure a segment for each step. The lowest step of the stairs is the lowest segment id. 2. Save your segments into a preset. 3. Ideally, add the preset in the config > LED setup menu to the "apply @@ -91,7 +91,7 @@ To enable the usermod again, use `"enabled":true`. Alternatively you can use _Usermod_ Settings page where you can change other parameters as well. ### Changing animation parameters and detection range of the ultrasonic HC-SR04 sensor -Using _Usermod_ Settings page you can define different usermod parameters, includng sensor pins, delay between segment activation etc. +Using _Usermod_ Settings page you can define different usermod parameters, including sensor pins, delay between segment activation etc. When an ultrasonic sensor is enabled you can enter maximum detection distance in centimeters separately for top and bottom sensors. diff --git a/usermods/BH1750_v2/readme.md b/usermods/BH1750_v2/readme.md index 05a033cf..6e6c693d 100644 --- a/usermods/BH1750_v2/readme.md +++ b/usermods/BH1750_v2/readme.md @@ -9,7 +9,7 @@ The luminance is displayed in both the Info section of the web UI, as well as pu - This must be added under `lib_deps` in your `platformio.ini` (or `platformio_override.ini`). - Data is published over MQTT - make sure you've enabled the MQTT sync interface. -## Compiliation +## Compilation To enable, compile with `USERMOD_BH1750` defined (e.g. in `platformio_override.ini`) ```ini diff --git a/usermods/BH1750_v2/usermod_bh1750.h b/usermods/BH1750_v2/usermod_bh1750.h index 1903240f..5b5fa25f 100644 --- a/usermods/BH1750_v2/usermod_bh1750.h +++ b/usermods/BH1750_v2/usermod_bh1750.h @@ -28,7 +28,7 @@ #define USERMOD_BH1750_FIRST_MEASUREMENT_AT 10000 #endif -// only report if differance grater than offset value +// only report if difference grater than offset value #ifndef USERMOD_BH1750_OFFSET_VALUE #define USERMOD_BH1750_OFFSET_VALUE 2 // WLEDMM this makes more sense #endif diff --git a/usermods/BME280_v2/usermod_bme280.h b/usermods/BME280_v2/usermod_bme280.h index 6fe5dba9..d9351ffa 100644 --- a/usermods/BME280_v2/usermod_bme280.h +++ b/usermods/BME280_v2/usermod_bme280.h @@ -32,7 +32,7 @@ private: // set the default pins based on the architecture, these get overridden by Usermod menu settings #ifdef ESP8266 - //uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8 + //uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8 #endif int8_t ioPin[2] = {i2c_scl, i2c_sda}; // I2C pins: SCL, SDA...defaults to Arch hardware pins but overridden at setup() bool initDone = false; @@ -80,7 +80,7 @@ private: static const char _name[]; static const char _enabled[]; - // Read the BME280/BMP280 Sensor (which one runs depends on whether Celsius or Farenheit being set in Usermod Menu) + // Read the BME280/BMP280 Sensor (which one runs depends on whether Celsius or Fahrenheit being set in Usermod Menu) void UpdateBME280Data(int SensorType) { float _temperature, _humidity, _pressure; diff --git a/usermods/Battery/readme.md b/usermods/Battery/readme.md index d55573ab..999c0a54 100644 --- a/usermods/Battery/readme.md +++ b/usermods/Battery/readme.md @@ -19,7 +19,7 @@ If you have an ESP32 board, connect the positive side of the battery to ADC1 (GP - 💯 Displays current battery voltage - 🚥 Displays battery level - 🚫 Auto-off with configurable Threshold -- 🚨 Low power indicator with many configuration posibilities +- 🚨 Low power indicator with many configuration possibilities ## 🎈 Installation @@ -41,7 +41,7 @@ define `USERMOD_BATTERY` in `wled00/my_config.h` | `USERMOD_BATTERY_MEASUREMENT_INTERVAL` | ms | battery check interval. defaults to 30 seconds | | `USERMOD_BATTERY_MIN_VOLTAGE` | v | minimum battery voltage. default is 2.6 (18650 battery standard) | | `USERMOD_BATTERY_MAX_VOLTAGE` | v | maximum battery voltage. default is 4.2 (18650 battery standard) | -| `USERMOD_BATTERY_TOTAL_CAPACITY` | mAh | the capacity of all cells in parralel sumed up | +| `USERMOD_BATTERY_TOTAL_CAPACITY` | mAh | the capacity of all cells in parallel summed up | | `USERMOD_BATTERY_CALIBRATION` | | offset / calibration number, fine tune the measured voltage by the microcontroller | | Auto-Off | --- | --- | | `USERMOD_BATTERY_AUTO_OFF_ENABLED` | true/false | enables auto-off | diff --git a/usermods/DHT/usermod_dht.h b/usermods/DHT/usermod_dht.h index b6142f43..05a7267b 100644 --- a/usermods/DHT/usermod_dht.h +++ b/usermods/DHT/usermod_dht.h @@ -49,7 +49,7 @@ #endif // how many seconds after boot to take first measurement, 90 seconds -// 90 gives enough time to OTA update firmware if this crashses +// 90 gives enough time to OTA update firmware if this crashes #ifndef USERMOD_DHT_FIRST_MEASUREMENT_AT #define USERMOD_DHT_FIRST_MEASUREMENT_AT 90000 #endif diff --git a/usermods/EXAMPLE_v2/usermod_v2_example.h b/usermods/EXAMPLE_v2/usermod_v2_example.h index ba2ffc4e..b2a257f0 100644 --- a/usermods/EXAMPLE_v2/usermod_v2_example.h +++ b/usermods/EXAMPLE_v2/usermod_v2_example.h @@ -58,7 +58,7 @@ class MyExampleUsermod : public Usermod { long testLong; int8_t testPins[2]; - // any private methods should go here (non-inline methosd should be defined out of class) + // any private methods should go here (non-inline method should be defined out of class) void publishMqtt(const char* state, bool retain = false); // example for publishing MQTT message diff --git a/usermods/Enclosure_with_OLED_temp_ESP07/usermod.cpp b/usermods/Enclosure_with_OLED_temp_ESP07/usermod.cpp index 1ca16050..823ad747 100644 --- a/usermods/Enclosure_with_OLED_temp_ESP07/usermod.cpp +++ b/usermods/Enclosure_with_OLED_temp_ESP07/usermod.cpp @@ -15,23 +15,23 @@ OneWire oneWire(13); DallasTemperature sensor(&oneWire); long temptimer = millis(); long lastMeasure = 0; -#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit +#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit // If display does not work or looks corrupted check the // constructor reference: // https://github.com/olikraus/u8g2/wiki/u8x8setupcpp // or check the gallery: // https://github.com/olikraus/u8g2/wiki/gallery -// --> First choise of cheap I2C OLED 128X32 0.91" +// --> First choice of cheap I2C OLED 128X32 0.91" U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA -// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3" +// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3" //U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA // gets called once at boot. Do all initialization that doesn't depend on // network here void userSetup() { sensor.begin(); //Start Dallas temperature sensor u8x8.begin(); - //u8x8.setFlipMode(1); //Uncoment if using WLED Wemos shield + //u8x8.setFlipMode(1); //Un-comment if using WLED Wemos shield u8x8.setPowerSave(0); u8x8.setContrast(10); //Contrast setup will help to preserve OLED lifetime. In case OLED need to be brighter increase number up to 255 u8x8.setFont(u8x8_font_chroma48medium8_r); @@ -71,7 +71,7 @@ void userLoop() { if (mqtt != nullptr) { sensor.requestTemperatures(); -//Gets prefered temperature scale based on selection in definitions section +//Gets preferred temperature scale based on selection in definitions section #ifdef Celsius float board_temperature = sensor.getTempCByIndex(0); #else @@ -138,11 +138,11 @@ void userLoop() { // First row with Wifi name u8x8.setCursor(1, 0); u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0)); - // Print `~` char to indicate that SSID is longer, than owr dicplay + // Print `~` char to indicate that SSID is longer than our display if (knownSsid.length() > u8x8.getCols()) u8x8.print("~"); - // Second row with IP or Psssword + // Second row with IP or Password u8x8.setCursor(1, 1); // Print password in AP mode and if led is OFF. if (apActive && bri == 0) diff --git a/usermods/Enclosure_with_OLED_temp_ESP07/usermod_bme280.cpp b/usermods/Enclosure_with_OLED_temp_ESP07/usermod_bme280.cpp index d5fd4a0c..29a4332d 100644 --- a/usermods/Enclosure_with_OLED_temp_ESP07/usermod_bme280.cpp +++ b/usermods/Enclosure_with_OLED_temp_ESP07/usermod_bme280.cpp @@ -10,7 +10,7 @@ void UpdateBME280Data(); -#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit +#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit BME280I2C bme; // Default : forced mode, standby time = 1000 ms // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off, @@ -20,14 +20,14 @@ uint8_t SDA_PIN = 21; #else //ESP8266 boards uint8_t SCL_PIN = 5; uint8_t SDA_PIN = 4; -// uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8 +// uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8 #endif //The SCL and SDA pins are defined here. //ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21 #define U8X8_PIN_SCL SCL_PIN #define U8X8_PIN_SDA SDA_PIN -//#define U8X8_PIN_RESET RST_PIN // Uncoment for Heltec WiFi-Kit-8 +//#define U8X8_PIN_RESET RST_PIN // Un-comment for Heltec WiFi-Kit-8 // If display does not work or looks corrupted check the // constructor reference: @@ -36,9 +36,9 @@ uint8_t SDA_PIN = 4; // https://github.com/olikraus/u8g2/wiki/gallery // --> First choise of cheap I2C OLED 128X32 0.91" U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA -// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3" +// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3" //U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA -// --> Third choise of Heltec WiFi-Kit-8 OLED 128X32 0.91" +// --> Third choice of Heltec WiFi-Kit-8 OLED 128X32 0.91" //U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8 // gets called once at boot. Do all initialization that doesn't depend on network here @@ -181,11 +181,11 @@ void userLoop() { // First row with Wifi name u8x8.setCursor(1, 0); u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0)); - // Print `~` char to indicate that SSID is longer, than owr dicplay + // Print `~` char to indicate that SSID is longer than our display if (knownSsid.length() > u8x8.getCols()) u8x8.print("~"); - // Second row with IP or Psssword + // Second row with IP or Password u8x8.setCursor(1, 1); // Print password in AP mode and if led is OFF. if (apActive && bri == 0) diff --git a/usermods/Fix_unreachable_netservices_v2/readme.md b/usermods/Fix_unreachable_netservices_v2/readme.md index 24d5ff5a..006eaf9f 100644 --- a/usermods/Fix_unreachable_netservices_v2/readme.md +++ b/usermods/Fix_unreachable_netservices_v2/readme.md @@ -2,7 +2,7 @@ **Attention: This usermod compiles only for ESP8266** -This usermod-v2 modification performs a ping request to a local IP address every 60 seconds. This ensures WLED net services remain accessible in some problematic WLAN environments. +This usermod-v2 modification performs a ping request to a local IP address every 60 seconds. This ensures WLED net services remain accessible in some problematic WiFi environments. The modification works with static or DHCP IP address configuration. @@ -24,7 +24,7 @@ The usermod supports the following state changes: | JSON key | Value range | Description | |-------------|------------------|---------------------------------| -| PingDelayMs | 5000 to 18000000 | Deactivdate/activate the sensor | +| PingDelayMs | 5000 to 18000000 | Deactivate/activate the sensor | Changes also persist after a reboot. diff --git a/usermods/PIR_sensor_switch/readme.md b/usermods/PIR_sensor_switch/readme.md index 574bd06d..85a5a74c 100644 --- a/usermods/PIR_sensor_switch/readme.md +++ b/usermods/PIR_sensor_switch/readme.md @@ -23,7 +23,7 @@ You can also use usermod's off timer instead of sensor's. In such case rotate th ## Usermod installation -**NOTE:** Usermod has been included in master branch of WLED so it can be compiled in directly just by defining `-D USERMOD_PIRSWITCH` and optionaly `-D PIR_SENSOR_PIN=16` to override default pin. You can also change the default off time by adding `-D PIR_SENSOR_OFF_SEC=30`. +**NOTE:** Usermod has been included in master branch of WLED so it can be compiled in directly just by defining `-D USERMOD_PIRSWITCH` and optionally `-D PIR_SENSOR_PIN=16` to override default pin. You can also change the default off time by adding `-D PIR_SENSOR_OFF_SEC=30`. ## API to enable/disable the PIR sensor from outside. For example from another usermod: @@ -31,7 +31,7 @@ To query or change the PIR sensor state the methods `bool PIRsensorEnabled()` an When the PIR sensor state changes an MQTT message is broadcasted with topic `wled/deviceMAC/motion` and message `on` or `off`. Usermod can also be configured to send just the MQTT message but not change WLED state using settings page as well as responding to motion only at night -(assuming NTP and lattitude/longitude are set to determine sunrise/sunset times). +(assuming NTP and latitude/longitude are set to determine sunrise/sunset times). ### There are two options to get access to the usermod instance: @@ -85,7 +85,7 @@ Have fun - @gegu & @blazoncek 2021-11 * Added information about dynamic configuration options -* Added option to temporary enable/disble usermod from WLED UI (Info dialog) +* Added option to temporary enable/disable usermod from WLED UI (Info dialog) 2022-11 * Added compile time option for off timer. diff --git a/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h b/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h index 3d69c208..1bf7b0d1 100644 --- a/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h +++ b/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h @@ -205,7 +205,7 @@ private: /** * Read and update PIR sensor state. - * Initilize/reset switch off timer + * Initialize/reset switch off timer */ bool updatePIRsensorState() { diff --git a/usermods/PWM_fan/readme.md b/usermods/PWM_fan/readme.md index 1fbfe0e6..6a44acf3 100644 --- a/usermods/PWM_fan/readme.md +++ b/usermods/PWM_fan/readme.md @@ -5,7 +5,7 @@ v2 Usermod to to control PWM fan with RPM feedback and temperature control This usermod requires the Dallas Temperature usermod to obtain temperature information. If it's not available, the fan will run at 100% speed. If the fan does not have _tachometer_ (RPM) output you can set the _tachometer-pin_ to -1 to disable that feature. -You can also set the thershold temperature at which fan runs at lowest speed. If the measured temperature is 3°C greater than the threshold temperature, the fan will run at 100%. +You can also set the threshold temperature at which fan runs at lowest speed. If the measured temperature is 3°C greater than the threshold temperature, the fan will run at 100%. If the _tachometer_ is supported, the current speed (in RPM) will be displayed on the WLED Info page. @@ -22,7 +22,7 @@ This includes: * PWM output pin (can be configured at compile time `-D PWM_PIN=xx`) * tachometer input pin (can be configured at compile time `-D TACHO_PIN=xx`) * sampling frequency in seconds -* threshold temperature in degees C +* threshold temperature in degrees Celsius _NOTE:_ You may also need to tweak Dallas Temperature usermod sampling frequency to match PWM fan sampling frequency. diff --git a/usermods/SN_Photoresistor/usermod_sn_photoresistor.h b/usermods/SN_Photoresistor/usermod_sn_photoresistor.h index 60861e4c..1e92d7d7 100644 --- a/usermods/SN_Photoresistor/usermod_sn_photoresistor.h +++ b/usermods/SN_Photoresistor/usermod_sn_photoresistor.h @@ -30,7 +30,7 @@ #define USERMOD_SN_PHOTORESISTOR_RESISTOR_VALUE 10000.0f #endif -// only report if differance grater than offset value +// only report if difference grater than offset value #ifndef USERMOD_SN_PHOTORESISTOR_OFFSET_VALUE #define USERMOD_SN_PHOTORESISTOR_OFFSET_VALUE 5 #endif diff --git a/usermods/TTGO-T-Display/usermod.cpp b/usermods/TTGO-T-Display/usermod.cpp index b126d40a..cbba0777 100644 --- a/usermods/TTGO-T-Display/usermod.cpp +++ b/usermods/TTGO-T-Display/usermod.cpp @@ -3,7 +3,7 @@ * This file allows you to add own functionality to WLED more easily * See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality * EEPROM bytes 2750+ are reserved for your custom use case. (if you extend #define EEPSIZE in const.h) - * bytes 2400+ are currently ununsed, but might be used for future wled features + * bytes 2400+ are currently unused, but might be used for future wled features */ /* @@ -144,7 +144,7 @@ void userLoop() { // First row with Wifi name tft.setCursor(1, 1); tft.print(knownSsid.substring(0, tftcharwidth > 1 ? tftcharwidth - 1 : 0)); - // Print `~` char to indicate that SSID is longer, than our dicplay + // Print `~` char to indicate that SSID is longer than our display if (knownSsid.length() > tftcharwidth) tft.print("~"); diff --git a/usermods/Temperature/readme.md b/usermods/Temperature/readme.md index 2657c6c8..b41e3e11 100644 --- a/usermods/Temperature/readme.md +++ b/usermods/Temperature/readme.md @@ -18,7 +18,7 @@ Copy the example `platformio_override.ini` to the root directory. This file sho * `USERMOD_DALLASTEMPERATURE` - enables this user mod wled00/usermods_list.cpp * `USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL` - number of milliseconds between measurements, defaults to 60000 ms (60s) -All parameters can be configured at runtime via the Usermods settings page, including pin, temperature in degrees Celsius or Farenheit and measurement interval. +All parameters can be configured at runtime via the Usermods settings page, including pin, temperature in degrees Celsius or Fahrenheit and measurement interval. ## Project link diff --git a/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod.cpp b/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod.cpp index 78cc32a8..e7d1212a 100644 --- a/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod.cpp +++ b/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod.cpp @@ -34,30 +34,30 @@ uint8_t DALLAS_PIN =23; uint8_t SCL_PIN = 5; uint8_t SDA_PIN = 4; uint8_t DALLAS_PIN =13; -// uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8 +// uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8 #endif //The SCL and SDA pins are defined here. //ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21 #define U8X8_PIN_SCL SCL_PIN #define U8X8_PIN_SDA SDA_PIN -//#define U8X8_PIN_RESET RST_PIN // Uncoment for Heltec WiFi-Kit-8 +//#define U8X8_PIN_RESET RST_PIN // Un-comment for Heltec WiFi-Kit-8 // Dallas sensor reading timer long temptimer = millis(); long lastMeasure = 0; -#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit +#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit // If display does not work or looks corrupted check the // constructor reference: // https://github.com/olikraus/u8g2/wiki/u8x8setupcpp // or check the gallery: // https://github.com/olikraus/u8g2/wiki/gallery -// --> First choise of cheap I2C OLED 128X32 0.91" +// --> First choice of cheap I2C OLED 128X32 0.91" U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA -// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3" +// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3" //U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA -// --> Third choise of Heltec WiFi-Kit-8 OLED 128X32 0.91" +// --> Third choice of Heltec WiFi-Kit-8 OLED 128X32 0.91" //U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8 // gets called once at boot. Do all initialization that doesn't depend on network here void userSetup() { @@ -97,7 +97,7 @@ void userLoop() { //----> Dallas temperature sensor MQTT publishing temptimer = millis(); -// Timer to publishe new temperature every 60 seconds +// Timer to publish new temperature every 60 seconds if (temptimer - lastMeasure > 60000) { lastMeasure = temptimer; @@ -106,7 +106,7 @@ void userLoop() { if (mqtt != nullptr) { // Serial.println(Dallas(DALLAS_PIN,0)); -//Gets prefered temperature scale based on selection in definitions section +//Gets preferred temperature scale based on selection in definitions section #ifdef Celsius int16_t board_temperature = Dallas(DALLAS_PIN,0); #else @@ -173,11 +173,11 @@ void userLoop() { // First row with Wifi name u8x8.setCursor(1, 0); u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0)); - // Print `~` char to indicate that SSID is longer, than owr dicplay + // Print `~` char to indicate that SSID is longer than our display if (knownSsid.length() > u8x8.getCols()) u8x8.print("~"); - // Second row with IP or Psssword + // Second row with IP or Password u8x8.setCursor(1, 1); // Print password in AP mode and if led is OFF. if (apActive && bri == 0) diff --git a/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod_bme280.cpp b/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod_bme280.cpp index c9d9a527..ff1cf7e5 100644 --- a/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod_bme280.cpp +++ b/usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod_bme280.cpp @@ -6,7 +6,7 @@ void UpdateBME280Data(); -#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit +#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit BME280I2C bme; // Default : forced mode, standby time = 1000 ms // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off, @@ -16,25 +16,25 @@ uint8_t SDA_PIN = 21; #else //ESP8266 boards uint8_t SCL_PIN = 5; uint8_t SDA_PIN = 4; -// uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8 +// uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8 #endif //The SCL and SDA pins are defined here. //ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21 #define U8X8_PIN_SCL SCL_PIN #define U8X8_PIN_SDA SDA_PIN -//#define U8X8_PIN_RESET RST_PIN // Uncoment for Heltec WiFi-Kit-8 +//#define U8X8_PIN_RESET RST_PIN // Un-comment for Heltec WiFi-Kit-8 // If display does not work or looks corrupted check the // constructor reference: // https://github.com/olikraus/u8g2/wiki/u8x8setupcpp // or check the gallery: // https://github.com/olikraus/u8g2/wiki/gallery -// --> First choise of cheap I2C OLED 128X32 0.91" +// --> First choice of cheap I2C OLED 128X32 0.91" U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA -// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3" +// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3" //U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA -// --> Third choise of Heltec WiFi-Kit-8 OLED 128X32 0.91" +// --> Third choice of Heltec WiFi-Kit-8 OLED 128X32 0.91" //U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8 // gets called once at boot. Do all initialization that doesn't depend on network here @@ -179,11 +179,11 @@ void userLoop() { // First row with Wifi name u8x8.setCursor(1, 0); u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0)); - // Print `~` char to indicate that SSID is longer, than owr dicplay + // Print `~` char to indicate that SSID is longer, than our display if (knownSsid.length() > u8x8.getCols()) u8x8.print("~"); - // Second row with IP or Psssword + // Second row with IP or Password u8x8.setCursor(1, 1); // Print password in AP mode and if led is OFF. if (apActive && bri == 0) diff --git a/usermods/audioreactive/readme.md b/usermods/audioreactive/readme.md index d9f9ea78..1dd5f5d9 100644 --- a/usermods/audioreactive/readme.md +++ b/usermods/audioreactive/readme.md @@ -1,6 +1,6 @@ # Audioreactive usermod -Enabless controlling LEDs via audio input. Audio source can be a microphone or analog-in (AUX) using an appropriate adapter. +Enables controlling LEDs via audio input. Audio source can be a microphone or analog-in (AUX) using an appropriate adapter. Supported microphones range from analog (MAX4466, MAX9814, ...) to digital (INMP441, ICS-43434, ...). Does audio processing and provides data structure that specially written effects can use. @@ -19,7 +19,7 @@ This usermod is an evolution of [SR-WLED](https://github.com/atuline/WLED), and ## Supported MCUs This audioreactive usermod works best on "classic ESP32" (dual core), and on ESP32-S3 which also has dual core and hardware floating point support. -It will compile succesfully for ESP32-S2 and ESP32-C3, however might not work well, as other WLED functions will become slow. Audio processing requires a lot of computing power, which can be problematic on smaller MCUs like -S2 and -C3. +It will compile successfully for ESP32-S2 and ESP32-C3, however might not work well, as other WLED functions will become slow. Audio processing requires a lot of computing power, which can be problematic on smaller MCUs like -S2 and -C3. Analog audio is only possible on "classic" ESP32, but not on other MCUs like ESP32-S3. @@ -35,7 +35,7 @@ Customised _arduinoFFT_ library for use with this usermod can be found at https: ### using latest (develop) _arduinoFFT_ library Alternatively, you can use the latest arduinoFFT development version. -ArduinoFFT `develop` library is slightly more accurate, and slighly faster than our customised library, however also needs additional 2kB RAM. +ArduinoFFT `develop` library is slightly more accurate, and slightly faster than our customised library, however also needs additional 2kB RAM. * `build_flags` = `-D USERMOD_AUDIOREACTIVE` `-D UM_AUDIOREACTIVE_USE_NEW_FFT` * `lib_deps`= `https://github.com/kosme/arduinoFFT#develop @ 1.9.2` @@ -63,7 +63,7 @@ You can use the following additional flags in your `build_flags` * `-D SR_GAIN=x` : Default "gain" setting (60) * `-D I2S_USE_RIGHT_CHANNEL`: Use RIGHT instead of LEFT channel (not recommended unless you strictly need this). * `-D I2S_USE_16BIT_SAMPLES`: Use 16bit instead of 32bit for internal sample buffers. Reduces sampling quality, but frees some RAM ressources (not recommended unless you absolutely need this). -* `-D I2S_GRAB_ADC1_COMPLETELY`: Experimental: continously sample analog ADC microphone. Only effective on ESP32. WARNING this _will_ cause conflicts(lock-up) with any analogRead() call. +* `-D I2S_GRAB_ADC1_COMPLETELY`: Experimental: continuously sample analog ADC microphone. Only effective on ESP32. WARNING this _will_ cause conflicts(lock-up) with any analogRead() call. * `-D MIC_LOGGER` : (debugging) Logs samples from the microphone to serial USB. Use with serial plotter (Arduino IDE) * `-D SR_DEBUG` : (debugging) Additional error diagnostics and debug info on serial USB. diff --git a/usermods/mqtt_switch_v2/README.md b/usermods/mqtt_switch_v2/README.md index 148e4a56..744d7fe3 100644 --- a/usermods/mqtt_switch_v2/README.md +++ b/usermods/mqtt_switch_v2/README.md @@ -50,5 +50,5 @@ This usermod listens on `[mqttDeviceTopic]/switch/0/set` (where 0 is replaced wi Feedback about the current state is provided at `[mqttDeviceTopic]/switch/0/state`. ### Home Assistant auto-discovery -Auto-discovery information is automatically published and you shoudn't have to do anything to register the switches in Home Assistant. +Auto-discovery information is automatically published and you shouldn't have to do anything to register the switches in Home Assistant. diff --git a/usermods/multi_relay/readme.md b/usermods/multi_relay/readme.md index 71a54070..1f3bec7a 100644 --- a/usermods/multi_relay/readme.md +++ b/usermods/multi_relay/readme.md @@ -2,7 +2,7 @@ This usermod-v2 modification allows the connection of multiple relays, each with individual delay and on/off mode. Usermod supports PCF8574 I2C port expander to reduce GPIO use. -PCF8574 supports 8 outputs and each output corresponds to a relay in WLED (relay 0 = port 0, etc). I you are using more than 8 relays with multiple PCF8574 make sure their addresses are set conscutively (e.g. 0x20 and 0x21). You can set address of first expander in settings. +PCF8574 supports 8 outputs and each output corresponds to a relay in WLED (relay 0 = port 0, etc). I you are using more than 8 relays with multiple PCF8574 make sure their addresses are set in sequence (e.g. 0x20 and 0x21). You can set address of first expander in settings. (**NOTE:** Will require Wire library and global I2C pins defined.) ## HTTP API diff --git a/usermods/multi_relay/usermod_multi_relay.h b/usermods/multi_relay/usermod_multi_relay.h index b8cabebb..8f0bf383 100644 --- a/usermods/multi_relay/usermod_multi_relay.h +++ b/usermods/multi_relay/usermod_multi_relay.h @@ -196,7 +196,7 @@ class MultiRelay : public Usermod { }; -// class implementetion +// class implementation void MultiRelay::publishMqtt(int relay) { #ifndef WLED_DISABLE_MQTT diff --git a/usermods/seven_segment_display/readme.md b/usermods/seven_segment_display/readme.md index a5294701..792393a8 100644 --- a/usermods/seven_segment_display/readme.md +++ b/usermods/seven_segment_display/readme.md @@ -17,7 +17,7 @@ The number of individual LEDs per segment. 7 segments per digit. #### perPeriod -- ssLEDPerPeriod The number of individual LEDs per period. A ':' (colon) has two periods. #### startIdx -- ssStartLED -Index of the LED the display starts at. Enabless a seven segment display to be in the middle of a string. +Index of the LED the display starts at. Enables a seven segment display to be in the middle of a string. #### timeEnable -- ssTimeEnabled When true, when displayMask is configured for a time output and no message is set, the time will be displayed. #### scrollSpd -- ssScrollSpeed diff --git a/usermods/seven_segment_display/usermod_v2_seven_segment_display.h b/usermods/seven_segment_display/usermod_v2_seven_segment_display.h index e5b726e5..20fef15d 100644 --- a/usermods/seven_segment_display/usermod_v2_seven_segment_display.h +++ b/usermods/seven_segment_display/usermod_v2_seven_segment_display.h @@ -409,7 +409,7 @@ public: if (mqttGroupTopic[0] != 0) { - //subcribe for sevenseg messages on the group topic + //subscribe for sevenseg messages on the group topic sprintf_P(subBuffer, PSTR("%s/%S/+/set"), mqttGroupTopic, _str_sevenSeg); mqtt->subscribe(subBuffer, 2); } @@ -417,7 +417,7 @@ public: bool onMqttMessage(char *topic, char *payload) { - //If topic beings iwth sevenSeg cut it off, otherwise not our message. + //If topic beings with sevenSeg cut it off, otherwise not our message. size_t topicPrefixLen = strlen_P(PSTR("/sevenSeg/")); if (strncmp_P(topic, PSTR("/sevenSeg/"), topicPrefixLen) == 0) topic += topicPrefixLen; diff --git a/usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h b/usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h index 27977405..3afe775f 100644 --- a/usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h +++ b/usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h @@ -470,14 +470,14 @@ public: if (mqttGroupTopic[0] != 0) { - //subcribe for sevenseg messages on the group topic + //subscribe for sevenseg messages on the group topic sprintf_P(subBuffer, PSTR("%s/%S/+/set"), mqttGroupTopic, _str_name); mqtt->subscribe(subBuffer, 2); } } bool onMqttMessage(char *topic, char *payload) { - //If topic beings iwth sevenSeg cut it off, otherwise not our message. + //If topic begins with sevenSeg cut it off, otherwise not our message. size_t topicPrefixLen = strlen_P(PSTR("/wledSS/")); if (strncmp_P(topic, PSTR("/wledSS/"), topicPrefixLen) == 0) { topic += topicPrefixLen; diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index bf99afd2..7583a823 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -331,7 +331,7 @@ void ShtUsermod::loop() /** * Whenever MQTT is connected, publish HA autodiscovery topics. * - * Is only donce once. + * Is only done once. * * @see Usermod::onMqttConnect() * @see UsermodManager::onMqttConnect() diff --git a/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h b/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h index 61b76ba1..85a9a160 100644 --- a/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h +++ b/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h @@ -23,7 +23,7 @@ private: unsigned char Enc_B; unsigned char Enc_A_prev = 0; - // private class memebers configurable by Usermod Settings (defaults set inside readFromConfig()) + // private class members configurable by Usermod Settings (defaults set inside readFromConfig()) int8_t pins[3]; // pins[0] = DT from encoder, pins[1] = CLK from encoder, pins[2] = CLK from encoder (optional) int fadeAmount; // how many points to fade the Neopixel with each step @@ -162,7 +162,7 @@ public: * - configComplete is used to return false if any value is missing, not just if the main object is missing * - The defaults are loaded every time readFromConfig() is run, not just once after boot * - * This ensures that missing values are added to the config, with their default values, in the rare but plauible cases of: + * This ensures that missing values are added to the config, with their default values, in the rare but plausible cases of: * - a single value being missing at boot, e.g. if the Usermod was upgraded and a new setting was added * - a single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed) * diff --git a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h index 4acd6b15..1dd0a69a 100644 --- a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h +++ b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h @@ -109,7 +109,7 @@ class AutoSaveUsermod : public Usermod { // network here void setup() { #ifdef USERMOD_FOUR_LINE_DISPLAY - // This Usermod has enhanced funcionality if + // This Usermod has enhanced functionality if // FourLineDisplayUsermod is available. display = (FourLineDisplayUsermod*) usermods.lookup(USERMOD_ID_FOUR_LINE_DISP); #endif @@ -156,7 +156,7 @@ class AutoSaveUsermod : public Usermod { if (autoSaveAfter && now > autoSaveAfter) { autoSaveAfter = 0; - // Time to auto save. You may have some flickry? + // Time to auto save. You may have some flickery? saveSettings(); displayOverlay(); } diff --git a/usermods/usermod_v2_four_line_display/readme.md b/usermods/usermod_v2_four_line_display/readme.md index 26250cb5..a0ed44d7 100644 --- a/usermods/usermod_v2_four_line_display/readme.md +++ b/usermods/usermod_v2_four_line_display/readme.md @@ -23,7 +23,7 @@ This file should be placed in the same directory as `platformio.ini`. * `FLD_PIN_SCL` - The display SCL pin, defaults to 5 * `FLD_PIN_SDA` - The display SDA pin, defaults to 4 -All of the parameters can be configured via the Usermods settings page, inluding GPIO pins. +All of the parameters can be configured via the Usermods settings page, including GPIO pins. ### PlatformIO requirements diff --git a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h index 7f052648..4f0c9c57 100644 --- a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h +++ b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h @@ -11,7 +11,7 @@ // for WLED. // // Dependencies -// * This usermod REQURES the ModeSortUsermod +// * This usermod REQUIRES the ModeSortUsermod // * This Usermod works best, by far, when coupled // with RotaryEncoderUIUsermod. // @@ -398,7 +398,7 @@ class FourLineDisplayUsermod : public Usermod { drawString(getCols() - 1, 0, "~"); } - // Second row with IP or Psssword + // Second row with IP or Password drawGlyph(0, lineHeight, 68, u8x8_font_open_iconic_embedded_1x1); // wifi icon // Print password in AP mode and if led is OFF. if (apActive && bri == 0) { diff --git a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h index fc037a49..9d100fdc 100644 --- a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h +++ b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h @@ -11,7 +11,7 @@ #include "4LD_wled_fonts.c" #ifndef FLD_ESP32_NO_THREADS -#define FLD_ESP32_USE_THREADS // comment out to use 0.13.x behaviour without parallel update task - slower, but more robust. May delay other tasks like LEDs or audioreactive!! + #define FLD_ESP32_USE_THREADS // comment out to use 0.13.x behaviour without parallel update task - slower, but more robust. May delay other tasks like LEDs or audioreactive!! #endif //#define OLD_4LD_FONTS // comment out if you prefer the "classic" look with blocky fonts (saves 1K flash) @@ -1339,7 +1339,7 @@ void FourLineDisplayUsermod::sleepOrClock(bool sleepEnable) { bool FourLineDisplayUsermod::handleButton(uint8_t b) { yield(); if (!enabled - || b // butto 0 only + || b // button 0 only || buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_NONE || buttonType[b] == BTN_TYPE_RESERVED diff --git a/usermods/usermod_v2_klipper_percentage/readme.md b/usermods/usermod_v2_klipper_percentage/readme.md index 0619bf85..e967d6b2 100644 --- a/usermods/usermod_v2_klipper_percentage/readme.md +++ b/usermods/usermod_v2_klipper_percentage/readme.md @@ -10,7 +10,7 @@ curl --location --request GET 'http://[]/printer/objects/query?virtual_sdcard=pr ## Usage Compile the source with the buildflag `-D USERMOD_KLIPPER_PERCENTAGE` added. -You can also use the WLBD bot in the Discord by simply extending an exsisting build enviroment: +You can also use the WLBD bot in the Discord by simply extending an existing build environment: ``` [env:esp32klipper] extends = env:esp32dev @@ -23,7 +23,7 @@ build_flags = ${common.build_flags_esp32} -D USERMOD_KLIPPER_PERCENTAGE Checkbox to enable or disable the overlay ### Klipper IP: -IP adress of your Klipper instance you want to poll. ESP has to be restarted after change +IP address of your Klipper instance you want to poll. ESP has to be restarted after change ### Direction : 0 = normal diff --git a/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.h b/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.h index 0e19cc80..2f591b15 100644 --- a/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.h +++ b/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.h @@ -79,7 +79,7 @@ public: httpGet(wifiClient, errorMessage); if (strcmp(errorMessage, "") == 0) { - PSRAMDynamicJsonDocument klipperDoc(4096); // in practive about 2673 + PSRAMDynamicJsonDocument klipperDoc(4096); // in practice about 2673 DeserializationError error = deserializeJson(klipperDoc, wifiClient); if (error) { diff --git a/usermods/usermod_v2_ping_pong_clock/readme.md b/usermods/usermod_v2_ping_pong_clock/readme.md index 9f01b3eb..f8219489 100644 --- a/usermods/usermod_v2_ping_pong_clock/readme.md +++ b/usermods/usermod_v2_ping_pong_clock/readme.md @@ -7,4 +7,4 @@ Contains a modification to use WLED in combination with the Ping Pong Ball LED C To install this Usermod, you instruct PlatformIO to compile the Project with the USERMOD_PING_PONG_CLOCK flag. WLED then automatically provides you with various settings on the Usermod Page. -Note: Depending on the size of your clock, you may have to update the led indices for the indivdual numbers and the base indices. +Note: Depending on the size of your clock, you may have to update the led indices for the individual numbers and the base indices. diff --git a/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h b/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h index a690c1b1..40ff675c 100644 --- a/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h +++ b/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h @@ -18,15 +18,15 @@ private: // ---- Variables for correct LED numbering below, edit only if your clock is built different ---- - int baseH = 43; // Adress for the one place of the hours - int baseHH = 7; // Adress for the tens place of the hours - int baseM = 133; // Adress for the one place of the minutes - int baseMM = 97; // Adress for the tens place of the minutes - int colon1 = 79; // Adress for the first colon led - int colon2 = 80; // Adress for the second colon led + int baseH = 43; // Address for the one place of the hours + int baseHH = 7; // Address for the tens place of the hours + int baseM = 133; // Address for the one place of the minutes + int baseMM = 97; // Address for the tens place of the minutes + int colon1 = 79; // Address for the first colon led + int colon2 = 80; // Address for the second colon led // Matrix for the illumination of the numbers - // Note: These only define the increments of the base adress. e.g. to define the second Minute you have to add the baseMM to every led position + // Note: These only define the increments of the base address. e.g. to define the second Minute you have to add the baseMM to every led position const int numbers[10][10] = { { 0, 1, 4, 6, 13, 15, 18, 19, -1, -1 }, // 0: null diff --git a/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h b/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h index 1e85c518..e158e17f 100644 --- a/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h +++ b/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h @@ -20,7 +20,7 @@ // Change between modes by pressing a button. // // Dependencies -// * This usermod REQURES the ModeSortUsermod +// * This usermod REQUIRES the ModeSortUsermod // * This Usermod works best coupled with // FourLineDisplayUsermod. // diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h index 17943bab..aeb5bcdc 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h @@ -4,7 +4,7 @@ // // Inspired by the original v2 usermods -// * usermod_v2_rotaty_encoder_ui +// * usermod_v2_rotary_encoder_ui // // v2 usermod that provides a rotary encoder-based UI. // @@ -79,7 +79,7 @@ static int re_qstringCmp(const void *ap, const void *bp) { // Lowercase bVal -= 32; } - // Relly we shouldn't ever get to '\0' + // Really we shouldn't ever get to '\0' if (aVal == '"' || bVal == '"' || aVal == '\0' || bVal == '\0') { // We're done. one is a substring of the other // or something happenend and the quote didn't stop us. @@ -542,7 +542,7 @@ void RotaryEncoderUIUsermod::loop() bool changedState = false; char lineBuffer[64] = { '\0' }; do { - // finde new state + // find new state switch (newState) { case 0: strcpy_P(lineBuffer, PSTR("Brightness")); changedState = true; break; case 1: if (!extractModeSlider(effectCurrent, 0, lineBuffer, 63)) newState++; else changedState = true; break; // speed diff --git a/usermods/usermod_v2_word_clock/readme.md b/usermods/usermod_v2_word_clock/readme.md index 1dde2223..c42ee0ee 100644 --- a/usermods/usermod_v2_word_clock/readme.md +++ b/usermods/usermod_v2_word_clock/readme.md @@ -8,7 +8,7 @@ active: enable/disable usermod diplayItIs: enable/disable display of "Es ist" on the clock ledOffset: number of LEDs before the wordclock LEDs -### Update for alternatative wiring pattern +### Update for alternative wiring pattern Based on this fantastic work I added an alternative wiring pattern. The original used a long wire to connect DO to DI, from one line to the next line. diff --git a/usermods/usermod_v2_word_clock/usermod_v2_word_clock.h b/usermods/usermod_v2_word_clock/usermod_v2_word_clock.h index 058b8318..b66be290 100644 --- a/usermods/usermod_v2_word_clock/usermod_v2_word_clock.h +++ b/usermods/usermod_v2_word_clock/usermod_v2_word_clock.h @@ -7,8 +7,8 @@ * See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality * * This usermod can be used to drive a wordclock with a 11x10 pixel matrix with WLED. There are also 4 additional dots for the minutes. - * The visualisation is desribed in 4 mask with LED numbers (single dots for minutes, minutes, hours and "clock/Uhr"). - * There are 2 parameters to chnage the behaviour: + * The visualisation is described in 4 mask with LED numbers (single dots for minutes, minutes, hours and "clock/Uhr"). + * There are 2 parameters to change the behaviour: * * active: enable/disable usermod * diplayItIs: enable/disable display of "Es ist" on the clock. diff --git a/usermods/wizlights/readme.md b/usermods/wizlights/readme.md index a0e0a8b8..9e633043 100644 --- a/usermods/wizlights/readme.md +++ b/usermods/wizlights/readme.md @@ -1,6 +1,6 @@ # Controlling Wiz lights -Enabless controlling [WiZ](https://www.wizconnected.com/en/consumer/) lights that are part of the same network as the WLED controller. +Enables controlling [WiZ](https://www.wizconnected.com/en/consumer/) lights that are part of the same network as the WLED controller. The mod takes the colors from the first few pixels and sends them to the lights. @@ -8,7 +8,7 @@ The mod takes the colors from the first few pixels and sends them to the lights. - Interval (ms) - How frequently to update the WiZ lights, in milliseconds. - - Setting it too low may causse the ESP to become unresponsive. + - Setting it too low may cause the ESP to become unresponsive. - Send Delay (ms) - An optional millisecond delay after updating each WiZ light. - Can help smooth out effects when using a large number of WiZ lights From 8905992a89b658b38201cde52741a2d01c87a0be Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Dec 2023 00:14:57 +0100 Subject: [PATCH 047/108] code spell checking - part4 (MM specific) --- CHANGELOG.md | 2 +- CONTRIBUTING.md | 2 +- platformio.ini | 12 +++++----- tools/ESP32-Chip_info.hpp | 6 ++--- usermods/Battery/usermod_v2_Battery.h | 10 ++++----- usermods/PWM_fan/usermod_PWM_fan.h | 6 ++--- usermods/artifx/arti.h | 4 ++-- usermods/artifx/arti_wled.h | 4 ++-- usermods/artifx/artifx.js | 2 +- usermods/artifx/usermod_v2_artifx.h | 16 +++++++------- usermods/mcu_temp/mcuTemp.h | 2 +- usermods/mpu6050_imu/usermod_mpu6050_imu.h | 2 +- .../usermod_v2_four_line_display_ALT.h | 2 +- .../usermod_v2_mode_sort.h | 2 +- .../usermod_v2_rotary_encoder_ui.h | 2 +- .../usermod_v2_rotary_encoder_ui_ALT.h | 2 +- .../usermod_v2_weather/usermod_v2_weather.h | 14 ++++++------ wled00/FX.cpp | 6 ++--- wled00/FX_2Dfcn.cpp | 6 ++--- wled00/FX_fcn.cpp | 22 +++++++++---------- wled00/cfg.cpp | 2 +- wled00/colors.cpp | 2 +- wled00/data/index.js | 2 +- wled00/data/peek.js | 2 +- wled00/data/settings_um.htm | 2 +- wled00/json.cpp | 4 ++-- wled00/led.cpp | 2 +- wled00/net_debug.cpp | 2 +- wled00/pin_manager.cpp | 6 ++--- wled00/set.cpp | 2 +- wled00/util.cpp | 8 +++---- wled00/wled.cpp | 2 +- wled00/wled.h | 6 ++--- wled00/wled_serial.cpp | 2 +- wled00/ws.cpp | 4 ++-- 35 files changed, 86 insertions(+), 86 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96ca8523..10ea4fe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -733,7 +733,7 @@ #### Build 2101040 - Replaced Red & Blue effect with Aurora effect (PR #1589) -- Fixed HTTP changing segments uncommanded (#1618) +- Fixed HTTP changing segments un-commanded (#1618) - Updated copyright year and contributor page link #### Build 2012311 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b4fbef51..fdf1388c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ You are all set if you have enabled `Editor: Detect Indentation` in VS Code. #### Blocks -Whether the opening bracket of e.g. an `if` block is in the same line as the condition or in a separate line is up to your discretion. If there is only one statement, leaving out block braches is acceptable. +Whether the opening bracket of e.g. an `if` block is in the same line as the condition or in a separate line is up to your discretion. If there is only one statement, leaving out block braces is acceptable. Good: ```cpp diff --git a/platformio.ini b/platformio.ini index 2180882f..84e9b3ae 100644 --- a/platformio.ini +++ b/platformio.ini @@ -332,7 +332,7 @@ build_flagsV4 = -g -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE -D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE - ; -DARDUINO_USB_CDC_ON_BOOT=0 ;; mandatory for "classic ESP32" when builing with arduino-esp32 >=2.0.3 + ; -DARDUINO_USB_CDC_ON_BOOT=0 ;; mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3 ;;; V4.4.x libraries (without LOROL_LITTLEFS; with newer NeoPixelBus) lib_depsV4 = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 ;; WLEDMM this must be first in the list, otherwise Aircoookie/ESPAsyncWebServer pulls in an older version of AsyncTCP !! @@ -984,7 +984,7 @@ lib_deps_M = lib_deps_V4_M = ;https://github.com/blazoncek/OneWire.git ; includes bugfixes for inconsistent readings paulstoffregen/OneWire@ ^2.3.7 ; used for USERMOD_DALLASTEMPERATURE -> need newer release with bugfixes for -S3; still requires TEMPERATURE_PIN < 46 - olikraus/U8g2@ ^2.34.5 ; used for USERMOD_FOUR_LINE_DISPLAY -> need newer version with bugfixes for arduino-esp32 v2.0.4 (Wire inititialization) + olikraus/U8g2@ ^2.34.5 ; used for USERMOD_FOUR_LINE_DISPLAY -> need newer version with bugfixes for arduino-esp32 v2.0.4 (Wire initialization) ${common_mm.animartrix_lib_deps} build_flags_XL = @@ -992,7 +992,7 @@ build_flags_XL = -D USERMOD_MPU6050_IMU ; gyro/accelero for USERMOD_GAMES (ONLY WORKS IF USERMOD_FOUR_LINE_DISPLAY NOT INCLUDED - I2C SHARING BUG) -D USERMOD_GAMES ; WLEDMM usermod -D USERMOD_BATTERY ;; enable Battery usermod - -D USERMOD_BATTERY_USE_LIPO ;; use new "decharging curve" for LiPo cells + -D USERMOD_BATTERY_USE_LIPO ;; use new "discharging curve" for LiPo cells -D USERMOD_BH1750 -D USERMOD_ANIMATED_STAIRCASE -D USERMOD_RTC ;; experimental @@ -1124,7 +1124,7 @@ build_flags = [Speed_Flags] build_flags = -O2 ;; optimize for performance instead of size - ;-ffast-math ;; gives a few (2-5) percent sppedup on ESP32-S3, but causes slight slowdown on classic ESP32 + ;-ffast-math ;; gives a few (2-5) percent speedup on ESP32-S3, but causes slight slowdown on classic ESP32 -mtarget-align -free -fipa-pta ;; these are very useful, too -fno-jump-tables -fno-tree-switch-conversion ;; needed -freorder-blocks -Wwrite-strings -fstrict-volatile-bitfields ;; needed @@ -1341,7 +1341,7 @@ build_flags = ${common.build_flags_esp8266} -D USERMOD_GAMES ; WLEDMM usermod ; -D USERMOD_ARTIFX ; this is compiling but not working due to low memory on 8266 -D USERMOD_BATTERY ;; enable Battery usermod - -D USERMOD_BATTERY_USE_LIPO ;; use new "decharging curve" for LiPo cells + -D USERMOD_BATTERY_USE_LIPO ;; use new "discharging curve" for LiPo cells -D WLED_DEBUG_HOST='"192.168.x.x"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible -D WLED_DEBUG_PORT=1768 ;; port for network debugging. default = 7868 ; -D WLED_DEBUG @@ -1882,7 +1882,7 @@ build_flags = ${common.build_flags} ${esp32s2.build_flags} -D HW_PIN_SCL=35 -D HW_PIN_SDA=33 -D RLYPIN=9 ;; -D HW_PIN_MOSISPI=11 -D HW_PIN_CLOCKSPI=7 -D HW_PIN_MISOSPI=9 ;; 9 already in use for RELAY, 7 for IR - -D SR_DMTYPE=1 -D I2S_SDPIN=34 -D I2S_CKPIN=14 -D I2S_WSPIN=17 -D MCLK_PIN=-1 ;; reommended for mini shield + -D SR_DMTYPE=1 -D I2S_SDPIN=34 -D I2S_CKPIN=14 -D I2S_WSPIN=17 -D MCLK_PIN=-1 ;; recommended for mini shield ;; -D FFTTASK_PRIORITY=2 ;; useful for testing FFT timing. reduces audio latency, but makes effects slower. ;; -D STATUSLED=15 -D WLED_USE_MY_CONFIG diff --git a/tools/ESP32-Chip_info.hpp b/tools/ESP32-Chip_info.hpp index 1e6fad8f..e8897242 100644 --- a/tools/ESP32-Chip_info.hpp +++ b/tools/ESP32-Chip_info.hpp @@ -82,7 +82,7 @@ return F("DOUT"); } -//******** Flash Chip Speed is NOT correctl !!!! ***** +//******** Flash Chip Speed is NOT correct !!!! ***** uint32_t my_ESP_getFlashChipSpeed(void) { const uint32_t spi_clock = REG_READ(SPI_CLOCK_REG(0)); @@ -413,7 +413,7 @@ void my_print_reset_reason(int reason) case 11 : Serial.print(" TGWDT_CPU_RESET");break; /**<11, Time Group reset CPU*/ case 12 : Serial.print(" SW_CPU_RESET");break; /**<12, Software reset CPU*/ case 13 : Serial.print(" RTCWDT_CPU_RESET");break; /**<13, RTC Watch dog Reset CPU*/ - case 14 : Serial.print(" EXT_CPU_RESET");break; /**<14, for APP CPU, reseted by PRO CPU*/ + case 14 : Serial.print(" EXT_CPU_RESET");break; /**<14, for APP CPU, reset by PRO CPU*/ case 15 : Serial.print(" RTCWDT_BROWN_OUT_RESET");break; /**<15, Reset when the vdd voltage is not stable*/ case 16 : Serial.print(" RTCWDT_RTC_RESET");break; /**<16, RTC Watch dog reset digital core and rtc module*/ case 17 : Serial.print(" TG1WDT_CPU_RESET");break; /**<17, Time Group1 reset CPU*/ @@ -452,7 +452,7 @@ void my_verbose_print_reset_reason(int reason) /* - * parts below were created by softhack007, licended under GPL v3.0 + * parts below were created by softhack007, licenced under GPL v3.0 */ void show_psram_info_part1(void) diff --git a/usermods/Battery/usermod_v2_Battery.h b/usermods/Battery/usermod_v2_Battery.h index cd518b9a..bd3bf62c 100644 --- a/usermods/Battery/usermod_v2_Battery.h +++ b/usermods/Battery/usermod_v2_Battery.h @@ -118,7 +118,7 @@ class UsermodBattery : public Usermod { #ifdef ARDUINO_ARCH_ESP32 if ((batteryPin <0) || !pinManager.isPinAnalog(batteryPin)) return(-1.0f); // WLEDMM avoid reading from invalid pin - // use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV default attentuation) and divide by 1000 to get from milivolts to volts and multiply by voltage multiplier and apply calibration value + // use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV default attenuation) and divide by 1000 to get from milliVolts to volts and multiply by voltage multiplier and apply calibration value return (analogReadMilliVolts(batteryPin) / 1000.0f) * voltageMultiplier + calibration; #else // use analog read on esp8266 ( 0V ~ 1V no attenuation options) and divide by ADC precision 1023 and multiply by voltage multiplier and apply calibration value @@ -216,7 +216,7 @@ class UsermodBattery : public Usermod */ #ifdef USERMOD_BATTERY_USE_LIPO batteryLevel = mapf(voltage, minBatteryVoltage, maxBatteryVoltage, 0, 100); // basic mapping - // LiPo batteries have a differnt dischargin curve, see + // LiPo batteries have a different dischargin curve, see // https://blog.ampow.com/lipo-voltage-chart/ if (batteryLevel < 40.0f) batteryLevel = mapf(batteryLevel, 0, 40, 0, 12); // last 45% -> drops very quickly @@ -413,7 +413,7 @@ class UsermodBattery : public Usermod oappend(SET_F("addInfo('Battery:indicator:threshold', 1, '%');")); oappend(SET_F("addInfo('Battery:indicator:duration', 1, 's');")); - // cannot quite get this mf to work. its exeeding some buffer limit i think + // cannot quite get this mf to work. its exceeding some buffer limit i think // what i wanted is a list of all presets to select one from // oappend(SET_F("bd=addDropdown('Battery:low-power-indicator', 'preset');")); // the loop generates: oappend(SET_F("addOption(bd, 'preset name', preset id);")); @@ -612,7 +612,7 @@ class UsermodBattery : public Usermod /* - * Get the capacity of all cells in parralel sumed up + * Get the capacity of all cells in parallel summed up * unit: mAh */ unsigned int getTotalBatteryCapacity() @@ -788,7 +788,7 @@ class UsermodBattery : public Usermod /* - * Get low-power-indicator status when the indication is done thsi returns true + * Get low-power-indicator status when the indication is done this returns true */ bool getLowPowerIndicatorDone() { diff --git a/usermods/PWM_fan/usermod_PWM_fan.h b/usermods/PWM_fan/usermod_PWM_fan.h index d8aa7a1a..c9ccf14d 100644 --- a/usermods/PWM_fan/usermod_PWM_fan.h +++ b/usermods/PWM_fan/usermod_PWM_fan.h @@ -75,7 +75,7 @@ class PWMFanUsermod : public Usermod { pinMode(tachoPin, INPUT); digitalWrite(tachoPin, HIGH); attachInterrupt(digitalPinToInterrupt(tachoPin), rpm_fan, FALLING); - DEBUG_PRINTLN(F("Tacho sucessfully initialized.")); + DEBUG_PRINTLN(F("Tacho successfully initialized.")); } void deinitTacho(void) { @@ -118,12 +118,12 @@ class PWMFanUsermod : public Usermod { if (pwmChannel == 255) { //no more free LEDC channels deinitPWMfan(); return; } - // configure LED PWM functionalitites + // configure LED PWM functionalities ledcSetup(pwmChannel, 25000, 8); // attach the channel to the GPIO to be controlled ledcAttachPin(pwmPin, pwmChannel); #endif - DEBUG_PRINTLN(F("Fan PWM sucessfully initialized.")); + DEBUG_PRINTLN(F("Fan PWM successfully initialized.")); } void deinitPWMfan(void) { diff --git a/usermods/artifx/arti.h b/usermods/artifx/arti.h index 19d6b493..2e5fda45 100644 --- a/usermods/artifx/arti.h +++ b/usermods/artifx/arti.h @@ -9,7 +9,7 @@ - #define ARDUINOJSON_DEFAULT_NESTING_LIMIT 100 //set this in ArduinoJson!!!, currently not necessary... - IF UPDATING THIS FILE IN THE WLED REPO, SEND A PULL REQUEST TO https://github.com/ewoudwijma/ARTI AS WELL!!! @later - - Code improvememt + - Code improvement - See 'for some weird reason this causes a crash on esp32' - check why column/lineno not correct - Definition improvements @@ -2181,7 +2181,7 @@ public: ERROR_ARTI("%s %s %s unknown\n", spaces+50-depth, key, variable_name); valueStack->push(floatNull); } - } // ! founnd + } // ! fouund visitedAlready = true; break; } diff --git a/usermods/artifx/arti_wled.h b/usermods/artifx/arti_wled.h index 8796e1c1..78627a25 100644 --- a/usermods/artifx/arti_wled.h +++ b/usermods/artifx/arti_wled.h @@ -9,7 +9,7 @@ #pragma once -// For testing porposes, definitions should not only run on Arduino but also on Windows etc. +// For testing purposes, definitions should not only run on Arduino but also on Windows etc. // Because compiling on arduino takes seriously more time than on Windows. // The plugin.h files replace native arduino calls by windows simulated calls (e.g. setPixelColor will become printf) @@ -185,7 +185,7 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo float halfLength = (circleLength-1)/2.0; - //calculate circle positions, round to 5 digits and then round again to cater for radians inprecision (e.g. 3.49->3.5->4) + //calculate circle positions, round to 5 digits and then round again to cater for radians imprecision (e.g. 3.49->3.5->4) int x = round(round((sin(radians(par1)) * halfLength + halfLength) * 10)/10) + deltaWidth; int y = round(round((halfLength - cos(radians(par1)) * halfLength) * 10)/10) + deltaHeight; return SEGMENT.XY(x,y); diff --git a/usermods/artifx/artifx.js b/usermods/artifx/artifx.js index d1658077..f2386448 100644 --- a/usermods/artifx/artifx.js +++ b/usermods/artifx/artifx.js @@ -82,7 +82,7 @@ function populateCEEditor(name, segID)

Compile and Run Log

- Run log > 3 seconds is send to Serial Ouput.
+ Run log > 3 seconds is send to Serial Output.
🥚 🥚 🥚`; diff --git a/usermods/artifx/usermod_v2_artifx.h b/usermods/artifx/usermod_v2_artifx.h index 1962ed24..ee0899d8 100644 --- a/usermods/artifx/usermod_v2_artifx.h +++ b/usermods/artifx/usermod_v2_artifx.h @@ -19,7 +19,7 @@ ARTI * arti; //effect function uint16_t mode_ARTIFX(void) { //tbd: move statics to SEGMENT.data - static bool succesful; + static bool successful; static bool notEnoughHeap; static char previousEffect[charLength]; @@ -46,20 +46,20 @@ uint16_t mode_ARTIFX(void) { // artiWrapper = reinterpret_cast(SEGENV.data); arti = new ARTI(); - succesful = arti->setup("/wledv033.json", currentEffect); + successful = arti->setup("/wledv033.json", currentEffect); - if (!succesful) - ERROR_ARTI("Setup not succesful\n"); + if (!successful) + ERROR_ARTI("Setup not successful\n"); } else { - if (succesful) // && SEGENV.call < 250 for each frame + if (successful) // && SEGENV.call < 250 for each frame { if (FREE_SIZE <= 20000) { ERROR_ARTI("Not enough free heap (%u <= 30000)\n", FREE_SIZE); notEnoughHeap = true; - succesful = false; + successful = false; } else { @@ -71,7 +71,7 @@ uint16_t mode_ARTIFX(void) { // previousCall = SEGENV.call; // } - succesful = arti->loop(); + successful = arti->loop(); } } else @@ -79,7 +79,7 @@ uint16_t mode_ARTIFX(void) { arti->closeLog(); if (notEnoughHeap && FREE_SIZE > 20000) { ERROR_ARTI("Again enough free heap, restart effect (%u > 30000)\n", FREE_SIZE); - succesful = true; + successful = true; notEnoughHeap = false; strcpy(previousEffect, ""); // force new create } diff --git a/usermods/mcu_temp/mcuTemp.h b/usermods/mcu_temp/mcuTemp.h index d38bac2b..9dcbd4e0 100644 --- a/usermods/mcu_temp/mcuTemp.h +++ b/usermods/mcu_temp/mcuTemp.h @@ -9,7 +9,7 @@ class mcuTemp : public Usermod private: float mcutemp = 0; - // any private methods should go here (non-inline methosd should be defined out of class) + // any private methods should go here (non-inline method should be defined out of class) void publishMqtt(const char *state, bool retain = false); // example for publishing MQTT message public: diff --git a/usermods/mpu6050_imu/usermod_mpu6050_imu.h b/usermods/mpu6050_imu/usermod_mpu6050_imu.h index e923e1f9..1e784d95 100644 --- a/usermods/mpu6050_imu/usermod_mpu6050_imu.h +++ b/usermods/mpu6050_imu/usermod_mpu6050_imu.h @@ -185,7 +185,7 @@ class MPU6050Driver : public Usermod { //INTERRUPT_PIN = -1; //return; } - if ((INTERRUPT_PIN >= 0) && (pinManager.getPinOwner(INTERRUPT_PIN) != PinOwner::UM_IMU) // only allocate pin if we don't ownn it already + if ((INTERRUPT_PIN >= 0) && (pinManager.getPinOwner(INTERRUPT_PIN) != PinOwner::UM_IMU) // only allocate pin if we don't own it already && !pinManager.allocatePin(INTERRUPT_PIN, false, PinOwner::UM_IMU)) { //enabled = false; diff --git a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h index 9d100fdc..cc6d7b29 100644 --- a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h +++ b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h @@ -671,7 +671,7 @@ void FourLineDisplayUsermod::setup() { } // start SPI now! #ifdef ARDUINO_ARCH_ESP32 - if (isHW) SPI.begin(spi_sclk, spi_miso, spi_mosi); // ESP32 - will silently fail if SPI alread active. + if (isHW) SPI.begin(spi_sclk, spi_miso, spi_mosi); // ESP32 - will silently fail if SPI already active. #else if (isHW) SPI.begin(); // ESP8266 - SPI pins are fixed #endif diff --git a/usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h b/usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h index 092206bb..5ce044dd 100644 --- a/usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h +++ b/usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h @@ -59,7 +59,7 @@ int re_qstringCmp(const void *ap, const void *bp) { // Lowercase bVal -= 32; } - // Relly we shouldn't ever get to '\0' + // Really we shouldn't ever get to '\0' if (aVal == '"' || bVal == '"' || aVal == '\0' || bVal == '\0') { // We're done. one is a substring of the other // or something happenend and the quote didn't stop us. diff --git a/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h b/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h index e158e17f..f9f5700e 100644 --- a/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h +++ b/usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h @@ -113,7 +113,7 @@ public: // tracking the owner tags.... pinA = pinB = pinC = -1; enabled = false; - DEBUG_PRINTLN(F("Failed to alocate GPIO pins for Usermod Rotary Encoder.")); //WLEDMM add debug info + DEBUG_PRINTLN(F("Failed to allocate GPIO pins for Usermod Rotary Encoder.")); //WLEDMM add debug info return; } diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h index aeb5bcdc..4b0e00a2 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h @@ -436,7 +436,7 @@ void RotaryEncoderUIUsermod::setup() // tracking the owner tags.... pinA = pinB = pinC = -1; enabled = false; - DEBUG_PRINTLN(F("Failed to alocate GPIO pins for Usermod Rotary Encoder (ALT).")); //WLEDMM add debug info + DEBUG_PRINTLN(F("Failed to allocate GPIO pins for Usermod Rotary Encoder (ALT).")); //WLEDMM add debug info return; } diff --git a/usermods/usermod_v2_weather/usermod_v2_weather.h b/usermods/usermod_v2_weather/usermod_v2_weather.h index 95e02379..10f7b03c 100644 --- a/usermods/usermod_v2_weather/usermod_v2_weather.h +++ b/usermods/usermod_v2_weather/usermod_v2_weather.h @@ -7,7 +7,7 @@ // #define WEATHER_DEBUG -//declare weathermod global variables (always precede with weather_ (psuedo class static variables) +//declare weathermod global variables (always precede with weather_ (pseudo class static variables) static uint32_t usermods_pushLoop = 0; //effect pushes loop to execute. might be interesting for audioreactive too static uint8_t weather_units = 1; //config var metric (celsius) is default. (Standard=Kelvin, Imperial is Fahrenheit) static float weather_minTemp = 0; //config var @@ -159,7 +159,7 @@ class WeatherUsermod : public Usermod { } void loop() { - // return if no location or no api key (reset lastTume to force loop) + // return if no location or no api key (reset lastTime to force loop) if (fabs(latitude) < 0.00001 && fabs(latitude) < 0.00001) {strcpy(errorMessage, PSTR("No location")); lastTime = 0; return;} if (strcmp(apiKey.c_str(), "") == 0) {strcpy(errorMessage, PSTR("No api key")); lastTime = 0; return;} @@ -181,12 +181,12 @@ class WeatherUsermod : public Usermod { if (strcmp(errorMessage, "") == 0) { // https://arduinojson.org/v6/how-to/deserialize-a-very-large-document/ - StaticJsonDocument<256> filter; //in practive about 128 + StaticJsonDocument<256> filter; //in practice about 128 filter["list"][0]["dt"] = true; filter["list"][0]["main"]["temp"] = true; filter["city"]["name"] = true; filter["city"]["country"] = true; - PSRAMDynamicJsonDocument weatherDoc(4096); //in practive about 2673 + PSRAMDynamicJsonDocument weatherDoc(4096); //in practice about 2673 // Parse JSON object DeserializationError error = deserializeJson(weatherDoc, client, DeserializationOption::Filter(filter)); @@ -206,7 +206,7 @@ class WeatherUsermod : public Usermod { JsonObject weatherDocObject = weatherDoc.as(); JsonArray list = weatherDocObject[F("list")]; JsonObject city = weatherDocObject["city"]; - strcat(errorMessage, city["name"]); //api succesfull + strcat(errorMessage, city["name"]); //api successful strcat(errorMessage, city["country"]); uint8_t i = 0; @@ -319,10 +319,10 @@ class WeatherUsermod : public Usermod { oappend(SET_F("dd=addDropdown('Weather','units');")); oappend(SET_F("addOption(dd,'Kelvin',0);")); - oappend(SET_F("addOption(dd,'Celcius',1);")); + oappend(SET_F("addOption(dd,'Celsius',1);")); oappend(SET_F("addOption(dd,'Fahrenheit',2);")); oappend(SET_F("addInfo('Weather:units',1,'Set time and location in time settings');")); - oappend(SET_F("addInfo('Weather:apiKey',1,'Create acount on openweathermap.org and copy the key');")); + oappend(SET_F("addInfo('Weather:apiKey',1,'Create account on openweathermap.org and copy the key');")); oappend(SET_F("addInfo('Weather:minTemp',1,'Changing values: Reboot to (re)load forecast');")); } diff --git a/wled00/FX.cpp b/wled00/FX.cpp index cdec4358..ca36c440 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -48,7 +48,7 @@ static uint16_t triwave16(uint16_t in) { } /* - * Generates a tristate square wave w/ attac & decay + * Generates a tristate square wave w/ attack & decay * @param x input value 0-255 * @param pulsewidth 0-127 * @param attdec attack & decay, max. pulsewidth / 2 @@ -3016,7 +3016,7 @@ static uint16_t rolling_balls(void) { if (SEGMENT.check1) { for (int j = i+1; j < numBalls; j++) { if (balls[j].velocity != balls[i].velocity) { - // tcollided + balls[j].lastBounceUpdate is acutal time of collision (this keeps precision with long to float conversions) + // tcollided + balls[j].lastBounceUpdate is actual time of collision (this keeps precision with long to float conversions) float tcollided = (cfac*(balls[i].height - balls[j].height) + balls[i].velocity*float(balls[j].lastBounceUpdate - balls[i].lastBounceUpdate))/(balls[j].velocity - balls[i].velocity); @@ -5148,7 +5148,7 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https: bool repetition = false; for (int i=0; i softhack007: not exacly. Different CRC means diferent image; same CRC means nothing (could be same or slightly different). + // -> softhack007: not exacly. Different CRC means different image; same CRC means nothing (could be same or slightly different). if (!repetition) SEGENV.step = strip.now; //if no repetition avoid reset // remember CRCs across frames crcBuffer[SEGENV.aux0] = crc; diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index d9955d5b..999684b1 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -52,7 +52,7 @@ void WS2812FX::setUpMatrix() { } // safety check - // WLEDMM no chech on Segment::maxWidth * Segment::maxHeight > MAX_LEDS || + // WLEDMM no check on Segment::maxWidth * Segment::maxHeight > MAX_LEDS || if (Segment::maxWidth <= 1 || Segment::maxHeight <= 1) { DEBUG_PRINTF("2D Bounds error. %d x %d\n", Segment::maxWidth, Segment::maxHeight); isMatrix = false; @@ -173,7 +173,7 @@ void WS2812FX::setUpMatrix() { } // absolute matrix version of setPixelColor() -void IRAM_ATTR_YN WS2812FX::setPixelColorXY(int x, int y, uint32_t col) //WLEDMM: IRAM_ATTR conditionaly +void IRAM_ATTR_YN WS2812FX::setPixelColorXY(int x, int y, uint32_t col) //WLEDMM: IRAM_ATTR conditionally { #ifndef WLED_DISABLE_2D if (!isMatrix) return; // not a matrix set-up @@ -207,7 +207,7 @@ uint32_t WS2812FX::getPixelColorXY(uint16_t x, uint16_t y) { // XY(x,y) - gets pixel index within current segment (often used to reference leds[] array element) // WLEDMM Segment::XY()is declared inline, see FX.h -void IRAM_ATTR_YN Segment::setPixelColorXY(int x, int y, uint32_t col) //WLEDMM: IRAM_ATTR conditionaly +void IRAM_ATTR_YN Segment::setPixelColorXY(int x, int y, uint32_t col) //WLEDMM: IRAM_ATTR conditionally { if (Segment::maxHeight==1) return; // not a matrix set-up if (x >= virtualWidth() || y >= virtualHeight() || x<0 || y<0) return; // if pixel would fall out of virtual segment just exit diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 0b870534..a243ee3a 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -146,7 +146,7 @@ Segment::Segment(Segment &&orig) noexcept { orig.jMap = nullptr; //WLEDMM jMap } -// copy assignment --> overwrite segment withg orig - deletes old buffers in "this", but does not change orig! +// copy assignment --> overwrite segment with orig - deletes old buffers in "this", but does not change orig! Segment& Segment::operator= (const Segment &orig) { DEBUG_PRINTLN(F("-- Copy-assignment segment --")); if (this != &orig) { @@ -833,7 +833,7 @@ void xyFromBlock(uint16_t &x,uint16_t &y, uint16_t i, uint16_t vW, uint16_t vH, } -void IRAM_ATTR_YN Segment::setPixelColor(int i, uint32_t col) //WLEDMM: IRAM_ATTR conditionaly +void IRAM_ATTR_YN Segment::setPixelColor(int i, uint32_t col) //WLEDMM: IRAM_ATTR conditionally { if (!isActive()) return; // not active #ifndef WLED_DISABLE_2D @@ -942,7 +942,7 @@ void IRAM_ATTR_YN Segment::setPixelColor(int i, uint32_t col) //WLEDMM: IRAM_ATT uint16_t len = length(); uint8_t _bri_t = currentBri(on ? opacity : 0); - if (!_bri_t && !transitional && fadeTransition) return; // if _bri_t == 0 && segment is not transitionig && transitions are enabled then save a few CPU cycles + if (!_bri_t && !transitional && fadeTransition) return; // if _bri_t == 0 && segment is not transitioning && transitions are enabled then save a few CPU cycles if (_bri_t < 255) { byte r = scale8(R(col), _bri_t); byte g = scale8(G(col), _bri_t); @@ -1223,7 +1223,7 @@ void Segment::fade_out(uint8_t rate) { int g1 = G(color); int b1 = B(color); - int wdelta = mappedRate_r * (w2 - w1); // WLEDMM use receprocal - its faster + int wdelta = mappedRate_r * (w2 - w1); // WLEDMM use reciprocal - its faster int rdelta = mappedRate_r * (r2 - r1); int gdelta = mappedRate_r * (g2 - g1); int bdelta = mappedRate_r * (b2 - b1); @@ -1502,7 +1502,7 @@ void WS2812FX::enumerateLedmaps() { void WS2812FX::finalizeInit(void) { //reset segment runtimes - suspendStripService = true; // WELDMM avoid running effects on an incomplete strip + suspendStripService = true; // WLEDMM avoid running effects on an incomplete strip for (segment &seg : _segments) { seg.markForReset(); seg.resetIfRequired(); @@ -1583,11 +1583,11 @@ void WS2812FX::finalizeInit(void) DEBUG_PRINTLN(F("Loading custom ledmaps")); deserializeMap(); // (re)load default ledmap _isServicing = false; // WLEDMM - suspendStripService = false; // WELDMM ready, run ! + suspendStripService = false; // WLEDMM ready, run ! } // WLEDMM wait until strip is idle (=not servicing). -// on 8266 this function does nothing, because we can only do "buisy waiting" on ESP32 +// on 8266 this function does nothing, because we can only do "busy waiting" on ESP32 #define MAX_IDLE_WAIT_MS 50 // seems to work in most cases void WS2812FX::waitUntilIdle(void) { #if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_PROTECT_SERVICE) @@ -1755,7 +1755,7 @@ void WS2812FX::estimateCurrentAndLimitBri() { uint8_t scaleB = (scaleI > 255) ? 255 : scaleI; uint8_t newBri = scale8(_brightness, scaleB); // to keep brightness uniform, sets virtual busses too - softhack007: apply reductions immediately - if (scaleB < 255) busses.setBrightness(scaleB, true); // NPB-LG has already applied brightness, so its suffifient to post-apply scaling ==> use scaleB instead of newBri + if (scaleB < 255) busses.setBrightness(scaleB, true); // NPB-LG has already applied brightness, so its sufficient to post-apply scaling ==> use scaleB instead of newBri busses.setBrightness(newBri, false); // set new brightness for next frame //currentMilliamps = (powerSum0 * newBri) / puPerMilliamp; // for NPBrightnessBus currentMilliamps = (powerSum0 * scaleB) / puPerMilliamp; // for NPBus-LG @@ -1787,7 +1787,7 @@ void WS2812FX::show(void) { if (diff > 0) fpsCurr = 1000 / diff; _cumulativeFps = (3 * _cumulativeFps + fpsCurr +2) >> 2; // "+2" for proper rounding (2/4 = 0.5) #if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_FASTPATH) - _lastShow = b4show; // WLEDMM this is more accurate, however it also icreases CPU load - strip.service will run more frequently + _lastShow = b4show; // WLEDMM this is more accurate, however it also increases CPU load - strip.service will run more frequently #else _lastShow = now; #endif @@ -2234,7 +2234,7 @@ bool WS2812FX::deserializeMap(uint8_t n) { if (n) sprintf(fileName +7, "%d", n); //WLEDMM: trick to not include 0 in ledmap.json strcat(fileName, ".json"); isFile = WLED_FS.exists(fileName); - } else { //WLEDM add segment name as ledmap.name + } else { //WLEDMM add segment name as ledmap.name uint8_t segment_index = 0; for (segment &seg : _segments) { if (n == 10 + segment_index && !isFile && seg.name != nullptr) { @@ -2248,7 +2248,7 @@ bool WS2812FX::deserializeMap(uint8_t n) { if (!isFile) { // erase custom mapping if selecting nonexistent ledmap.json (n==0) - //WLEDM: doubt this is necessary as return false causes setupMatrix to deal with this !!!! + //WLEDMM: doubt this is necessary as return false causes setupMatrix to deal with this !!!! if (!isMatrix && !n) { customMappingSize = 0; loadedLedmap = 0; //WLEDMM diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 3d0c2acf..4046be49 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -365,7 +365,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { JsonObject light = doc[F("light")]; byte prev; //WLEDMM int tdd; //WLEDMM - if (!light.isNull()) { //WLEDMM: in case cfg string does not contain light! (solves issue that somethimes gamma correction dissappears) + if (!light.isNull()) { //WLEDMM: in case cfg string does not contain light! (solves issue that sometimes gamma correction dissappears) CJSON(briMultiplier, light[F("scale-bri")]); CJSON(strip.paletteBlend, light[F("pal-mode")]); CJSON(autoSegments, light[F("aseg")]); diff --git a/wled00/colors.cpp b/wled00/colors.cpp index aed4e56c..30d31927 100644 --- a/wled00/colors.cpp +++ b/wled00/colors.cpp @@ -325,7 +325,7 @@ static byte gammaT[256] = { // experimental // CIE 1931 lookup table (8bit->8bit) that was proposed during discussion of issue #2767 // https://github.com/Aircoookie/WLED/issues/2767#issuecomment-1310961308 -// unfortunately NepixelsBu has its own internal table, that kills low brightness values similar to the original WLED table. +// unfortunately NeoPixelBus has its own internal table, that kills low brightness values similar to the original WLED table. // see https://github.com/Makuna/NeoPixelBus/blob/master/src/internal/NeoGamma.h static const byte gammaT[256] = { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, diff --git a/wled00/data/index.js b/wled00/data/index.js index c50fc89e..448d419c 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -1384,7 +1384,7 @@ function toggleBubble(e) } // updates segment length upon input of segment values -function updateLen(s, draw=true) //WLEDMM conditonally draw segment view +function updateLen(s, draw=true) //WLEDMM conditionally draw segment view { if (!gId(`seg${s}s`)) return; var start = parseInt(gId(`seg${s}s`).value); diff --git a/wled00/data/peek.js b/wled00/data/peek.js index 5192cfec..24ee7ee7 100644 --- a/wled00/data/peek.js +++ b/wled00/data/peek.js @@ -25,7 +25,7 @@ function peek(c) { let mW = leds[2]; // matrix width let mH = leds[3]; // matrix height let pPL = Math.min(c.width / mW, c.height / mH); // pixels per LED (width of circle) - let lOf = Math.floor((c.width - pPL*mW)/2); //left offeset (to center matrix) + let lOf = Math.floor((c.width - pPL*mW)/2); //left offset (to center matrix) var i = 4; //same offset as in ws.cpp ctx.clearRect(0, 0, c.width, c.height); //WLEDMM function colorAmp(color) { diff --git a/wled00/data/settings_um.htm b/wled00/data/settings_um.htm index dc3d02c7..759643e6 100644 --- a/wled00/data/settings_um.htm +++ b/wled00/data/settings_um.htm @@ -370,7 +370,7 @@ - +
Loading settings...

diff --git a/wled00/json.cpp b/wled00/json.cpp index 6cf4e7fb..bf4c1cd2 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -1051,7 +1051,7 @@ void serializeInfo(JsonObject root) } #endif #if defined(WLED_DEBUG) || defined(WLED_DEBUG_HOST) || defined(SR_DEBUG) || defined(SR_STATS) - // WLEDMM add status of Serial, incuding pin alloc + // WLEDMM add status of Serial, including pin alloc root[F("serialOnline")] = Serial ? (canUseSerial()?F("Serial ready ☾"):F("Serial in use ☾")) : F("Serial disconected ☾"); // "Disconnected" may happen on boards with USB CDC root[F("sRX")] = pinManager.isPinAllocated(hardwareRX) ? pinManager.getPinOwnerText(hardwareRX): F("free"); root[F("sTX")] = pinManager.isPinAllocated(hardwareTX) ? pinManager.getPinOwnerText(hardwareTX): F("free"); @@ -1330,7 +1330,7 @@ void serializeModeData(JsonArray fxdata) } // deserializes mode names string into JsonArray -// also removes effect data extensions (@...) from deserialised names +// also removes effect data extensions (@...) from deserialized names void serializeModeNames(JsonArray arr) { char lineBuffer[128]; for (size_t i = 0; i < strip.getModeCount(); i++) { diff --git a/wled00/led.cpp b/wled00/led.cpp index 1870ba00..c6857c4a 100644 --- a/wled00/led.cpp +++ b/wled00/led.cpp @@ -293,7 +293,7 @@ void handleNightlight() } //utility for FastLED to use our custom timer -uint32_t __attribute__((pure)) get_millisecond_timer() // WLEDMM attribute pure = does not write other momory +uint32_t __attribute__((pure)) get_millisecond_timer() // WLEDMM attribute pure = does not write other memory { return strip.now; } diff --git a/wled00/net_debug.cpp b/wled00/net_debug.cpp index f98af02a..a345dd30 100644 --- a/wled00/net_debug.cpp +++ b/wled00/net_debug.cpp @@ -1,6 +1,6 @@ #include "wled.h" -#ifdef WLED_DEBUG_HOST //WLEDMM: this looks unnecesarry as .h is not included anyway if no netdebug +#ifdef WLED_DEBUG_HOST //WLEDMM: this looks unnecessary as .h is not included anyway if no netdebug size_t NetworkDebugPrinter::write(uint8_t c) { if (!WLED_CONNECTED || !netDebugEnabled) return 0; diff --git a/wled00/pin_manager.cpp b/wled00/pin_manager.cpp index d7c7a21c..717ab929 100644 --- a/wled00/pin_manager.cpp +++ b/wled00/pin_manager.cpp @@ -46,7 +46,7 @@ String PinManagerClass::getOwnerText(PinOwner tag) { case PinOwner::HW_I2C : return(F("I2C (hw)")); break; // 'I2C' == hardware I2C pins (4&5 on ESP8266, 21&22 on ESP32) case PinOwner::HW_SPI : return(F("SPI (hw)")); break; // 'SPI' == hardware (V)SPI pins (13,14&15 on ESP8266, 5,18&23 on ESP32) - case PinOwner::UM_Audioreactive : return(F("AudioReactive (UM)")); break; // audioreative usermod - analog or digital audio input + case PinOwner::UM_Audioreactive : return(F("AudioReactive (UM)")); break; // audioreactive usermod - analog or digital audio input case PinOwner::UM_Temperature : return(F("Temperature (UM)")); break; // "usermod_temperature.h" case PinOwner::UM_PIR : return(F("PIR (UM)")); break; // "usermod_PIR_sensor_switch.h" case PinOwner::UM_IMU : return(F("IMU mpu6050 (UM)")); break; // "usermod_mpu6050_imu.h" @@ -72,7 +72,7 @@ String PinManagerClass::getPinSpecialText(int gpio) { // special purpose PIN in if ((gpio == 0xFF) || (gpio < 0)) return(F("")); // explicitly allow -1 as a no-op #ifdef USERMOD_AUDIOREACTIVE - // audioreactive settings - unfortunately, these are hiddden inside usermod now :-( + // audioreactive settings - unfortunately, these are hidden inside usermod now :-( // if((gpio == audioPin) && (dmType == 0)) return(F("analog audio in")); // if((gpio == i2ssdPin) && (dmType > 0)) return(F("I2S SD")); // if((gpio == i2swsPin) && (dmType > 0)) return(F("I2S WS")); @@ -272,7 +272,7 @@ String PinManagerClass::getPinConflicts(int gpio) { if ((ownerConflict[gpio] == PinOwner::None) || (ownerTag[gpio] == ownerConflict[gpio])) { // no conflict, or "fake" conflict with current owner return(F("")); // no conflict fot this GPIO - } else { // found previous conflic! + } else { // found previous conflict! return String("!! Conflict with ") + getOwnerText(ownerConflict[gpio]) + String(" !!"); } } diff --git a/wled00/set.cpp b/wled00/set.cpp index 4b76f3c5..746f0de1 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -609,7 +609,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) i2c_scl = hw_scl_pin; DEBUG_PRINTF("handleSettingsSet(): reserved I2C pins SDA=%d SCL=%d.\n", i2c_sda, i2c_scl); #ifdef ESP32 - Wire.setPins(i2c_sda, i2c_scl); // this will fail if Wire is initilised (Wire.begin() called) + Wire.setPins(i2c_sda, i2c_scl); // this will fail if Wire is initialised (Wire.begin() called) #endif // Wire.begin(); // WLEDMM moved into pinManager } else { diff --git a/wled00/util.cpp b/wled00/util.cpp index 520f4bb4..37d1b2c2 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -149,13 +149,13 @@ bool oappend(const char* txt) { uint16_t len = strlen(txt); if ((obuf == nullptr) || (olen + len >= SETTINGS_STACK_BUF_SIZE)) { // sanity checks - if (obuf == nullptr) { USER_PRINTLN(F("oappend() error: obuf == nullptr.")); - } else { - USER_PRINT(F("oappend() error: buffer full. Increase SETTINGS_STACK_BUF_SIZE for ")); + if (obuf == nullptr) { USER_PRINTLN(F("oappend() error: obuf == nullptr.")); + } else { + USER_PRINT(F("oappend() error: buffer full. Increase SETTINGS_STACK_BUF_SIZE for ")); USER_PRINTF("%2u bytes \t\"", len /*1 + olen + len - SETTINGS_STACK_BUF_SIZE*/); USER_PRINT(txt); USER_PRINTLN(F("\"")); - } + } return false; // buffer full } strcpy(obuf + olen, txt); diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 56d3ba50..c051fa39 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -212,7 +212,7 @@ void WLED::loop() #endif if (!offMode || strip.isOffRefreshRequired()) { #if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_PROTECT_SERVICE) // WLEDMM experimental - static unsigned long lastTimeService = 0; // WLEMM needed to remove stale lock + static unsigned long lastTimeService = 0; // WLEDMM needed to remove stale lock if (!suspendStripService && !doInitBusses && !loadLedmap) { // WLEDMM prevent effect drawing while strip or segments are being updated #endif strip.service(); diff --git a/wled00/wled.h b/wled00/wled.h index 8d0a99c7..4cb8f7e4 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312130 +#define VERSION 2312150 //WLEDMM + Moustachauve/Wled-Native // You can define custom product info from build flags. @@ -555,7 +555,7 @@ WLED_GLOBAL byte lastRandomIndex _INIT(0); // used to save last random co // transitions WLED_GLOBAL bool transitionActive _INIT(false); -WLED_GLOBAL uint16_t transitionDelayDefault _INIT(transitionDelay); // default transition time (storec in cfg.json) +WLED_GLOBAL uint16_t transitionDelayDefault _INIT(transitionDelay); // default transition time (stored in cfg.json) WLED_GLOBAL uint16_t transitionDelayTemp _INIT(transitionDelay); // actual transition duration (overrides transitionDelay in certain cases) WLED_GLOBAL unsigned long transitionStartTime; WLED_GLOBAL float tperLast _INIT(0.0f); // crossfade transition progress, 0.0f - 1.0f @@ -733,7 +733,7 @@ WLED_GLOBAL bool e131NewData _INIT(false); WLED_GLOBAL BusManager busses _INIT(BusManager()); WLED_GLOBAL WS2812FX strip _INIT(WS2812FX()); WLED_GLOBAL BusConfig* busConfigs[WLED_MAX_BUSSES+WLED_MIN_VIRTUAL_BUSSES] _INIT({nullptr}); //temporary, to remember values from network callback until after -// WLEDMM a few "poor man's" mutal exclusion (mutex) flags, because there are not mutex objects on 8266. +// WLEDMM a few "poor man's" mutual exclusion (mutex) flags, because there are not mutex objects on 8266. WLED_GLOBAL volatile bool doInitBusses _INIT(false); // WLEDMM "volatile" added - needed as we want to sync parallel tasks WLED_GLOBAL volatile bool loadLedmap _INIT(false); // WLEDMM use as bool and use loadedLedmap for Nr WLED_GLOBAL volatile uint8_t loadedLedmap _INIT(0); // WLEDMM default 0 diff --git a/wled00/wled_serial.cpp b/wled00/wled_serial.cpp index f0af83b2..c34e29dc 100644 --- a/wled00/wled_serial.cpp +++ b/wled00/wled_serial.cpp @@ -4,7 +4,7 @@ * Adalight and TPM2 handler */ -#define SERIAL_MAXTIME_MILLIS 100 // to avoid blocking other activities, do not spend more than 100ms with continouus reading +#define SERIAL_MAXTIME_MILLIS 100 // to avoid blocking other activities, do not spend more than 100ms with continuous reading // at 115200 baud, 100ms is enough to send/receive 1280 chars enum class AdaState { diff --git a/wled00/ws.cpp b/wled00/ws.cpp index 5f5bfd9e..2ed23ce5 100644 --- a/wled00/ws.cpp +++ b/wled00/ws.cpp @@ -171,13 +171,13 @@ void sendDataWs(AsyncWebSocketClient * client) releaseJSONBufferLock(); } -// WLEDMM function to recover full-brigh pixel (based on code from upstream alt-buffer, which is based on code from NeoPixelBrightnessBus) +// WLEDMM function to recover full-bright pixel (based on code from upstream alt-buffer, which is based on code from NeoPixelBrightnessBus) static uint32_t restoreColorLossy(uint32_t c, uint_fast8_t _restaurationBri) { if (_restaurationBri == 255) return c; uint8_t* chan = (uint8_t*) &c; for (uint_fast8_t i=0; i<4; i++) { uint_fast16_t val = chan[i]; - chan[i] = ((val << 8) + _restaurationBri) / (_restaurationBri + 1); //adding _bri slighly improves recovery / stops degradation on re-scale + chan[i] = ((val << 8) + _restaurationBri) / (_restaurationBri + 1); //adding _bri slightly improves recovery / stops degradation on re-scale } return c; } From 245c0c078d9efdac80e448a16ebe1edd55f686e5 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Dec 2023 00:18:11 +0100 Subject: [PATCH 048/108] npm run build yo-man --- wled00/html_settings.h | 138 +++++++++---------- wled00/html_simple.h | 306 ++++++++++++++++++++--------------------- wled00/html_ui.h | 48 +++---- 3 files changed, 246 insertions(+), 246 deletions(-) diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 1c435010..80ceceb2 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -1362,7 +1362,7 @@ const uint8_t PAGE_settings_sync[] PROGMEM = { // Autogenerated from wled00/data/settings_time.htm, do not edit!! -const uint16_t PAGE_settings_time_length = 3305; +const uint16_t PAGE_settings_time_length = 3310; const uint8_t PAGE_settings_time[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xd5, 0x1a, 0x6b, 0x57, 0xdb, 0x38, 0xf6, 0x7b, 0x7e, 0x85, 0x50, 0x7b, 0x98, 0x78, 0x70, 0x9e, 0x90, 0x16, 0x92, 0xd8, 0xdd, 0x10, @@ -1503,74 +1503,74 @@ const uint8_t PAGE_settings_time[] PROGMEM = { 0xb9, 0x35, 0x98, 0x03, 0x6c, 0x7f, 0xec, 0x17, 0x00, 0xa2, 0xd4, 0x39, 0xc9, 0x44, 0x54, 0x53, 0x40, 0x6d, 0x00, 0x6a, 0x9f, 0x64, 0xa3, 0x7a, 0xa5, 0xa0, 0xba, 0x00, 0xd5, 0xcd, 0x46, 0xf5, 0x5a, 0x01, 0xb5, 0xfe, 0xd8, 0x98, 0x9f, 0x4b, 0xec, 0x50, 0x01, 0x5c, 0x02, 0x96, 0xcb, 0x6c, - 0x2c, 0x90, 0x2f, 0x03, 0x35, 0xf9, 0xd6, 0x55, 0x7f, 0x60, 0x64, 0x62, 0xaa, 0x40, 0x3e, 0xfc, - 0x1e, 0xa0, 0x3e, 0x6c, 0x03, 0x9a, 0xc3, 0x80, 0xa4, 0x5b, 0x92, 0xfb, 0xd6, 0x36, 0xf6, 0x53, - 0x4c, 0x20, 0xec, 0xde, 0x1f, 0x00, 0xd5, 0xfb, 0x23, 0x9b, 0xa6, 0x0a, 0x88, 0xbb, 0x07, 0x3e, - 0x60, 0x82, 0x3e, 0x70, 0x08, 0xcb, 0xd9, 0xc8, 0x40, 0xe4, 0x67, 0xfd, 0x01, 0xca, 0x9f, 0x31, - 0xd7, 0x23, 0xd9, 0x94, 0x81, 0xd0, 0xdb, 0xad, 0x42, 0x9f, 0x44, 0x37, 0x44, 0x80, 0x2e, 0xce, - 0x08, 0xcb, 0x94, 0x7c, 0x05, 0x44, 0xdf, 0x6a, 0x67, 0x2b, 0x42, 0xe5, 0xb5, 0x9e, 0x2f, 0xb5, - 0xda, 0x4f, 0x71, 0x09, 0xa2, 0x3f, 0x95, 0x84, 0x9d, 0x92, 0x19, 0xf1, 0xbc, 0x6c, 0xca, 0x40, - 0xfa, 0xbd, 0x8b, 0xdf, 0x01, 0xb0, 0xc7, 0x6f, 0x79, 0xe4, 0x0d, 0xbd, 0x30, 0xba, 0x31, 0x32, - 0x89, 0xab, 0xc2, 0x31, 0xb4, 0x3e, 0xc8, 0xcd, 0x3f, 0x9c, 0xc0, 0x9a, 0x16, 0x73, 0x26, 0xaa, - 0x6f, 0x9c, 0x89, 0xbf, 0x0a, 0x67, 0xd2, 0xfd, 0xa7, 0x54, 0xb7, 0x6c, 0xe5, 0x87, 0x03, 0xb9, - 0xfc, 0x00, 0xd8, 0x2e, 0xc9, 0x8d, 0x27, 0xc3, 0xe0, 0x12, 0xb2, 0xb4, 0x3b, 0x22, 0x2d, 0x7c, - 0xd0, 0x46, 0x7c, 0x34, 0x02, 0x17, 0xb3, 0xb0, 0x6e, 0x6d, 0xac, 0x1f, 0x2f, 0xb6, 0xd7, 0x64, - 0xaf, 0x6a, 0xb5, 0xf2, 0x3c, 0xce, 0x27, 0xef, 0x69, 0x70, 0xcf, 0x81, 0x2d, 0x3b, 0x9c, 0xb9, - 0x11, 0xca, 0xc3, 0x7c, 0x11, 0x55, 0x0e, 0xd1, 0x84, 0xc7, 0x61, 0x64, 0xc8, 0xad, 0xda, 0x71, - 0x18, 0x42, 0x60, 0x47, 0xaa, 0x35, 0xae, 0xdd, 0x98, 0x17, 0x81, 0x87, 0x80, 0xf4, 0x39, 0x75, - 0xd1, 0x30, 0x18, 0x61, 0x3b, 0x66, 0x37, 0x8c, 0xcf, 0x98, 0x8c, 0x21, 0x30, 0x69, 0x17, 0xe5, - 0xea, 0x73, 0x22, 0x3c, 0x11, 0xbb, 0x1b, 0x3e, 0x05, 0xa2, 0x1c, 0x5e, 0x67, 0xbe, 0x07, 0xe2, - 0xcf, 0x3c, 0xc4, 0x3e, 0x96, 0xb5, 0xd0, 0x86, 0x2c, 0x96, 0x59, 0x3f, 0x1f, 0x64, 0xe4, 0x39, - 0x77, 0xfe, 0x22, 0xd1, 0xc9, 0x69, 0x09, 0xbc, 0x2a, 0xbe, 0x92, 0x75, 0x1d, 0x0d, 0x60, 0xb0, - 0x58, 0xae, 0x68, 0x0f, 0x78, 0xce, 0xd9, 0x78, 0x3b, 0xb5, 0xbd, 0x4d, 0x6a, 0x3b, 0xe0, 0x84, - 0x32, 0xcf, 0xf1, 0x0a, 0xcb, 0x0a, 0xef, 0x69, 0x6a, 0x7b, 0xeb, 0xd4, 0xe6, 0xb6, 0x90, 0xab, - 0xa8, 0xad, 0xc8, 0x5e, 0xd3, 0x3a, 0xb1, 0xdb, 0x63, 0x9f, 0x8c, 0xb6, 0x70, 0x52, 0x43, 0x01, - 0xef, 0xb9, 0x34, 0xa6, 0xcd, 0x53, 0x36, 0xac, 0x42, 0xd1, 0xfc, 0x62, 0x65, 0x11, 0xbd, 0x54, - 0xdc, 0xf2, 0xec, 0x5c, 0x5e, 0x26, 0x46, 0x11, 0x62, 0x74, 0x86, 0xa0, 0x3c, 0x34, 0x65, 0x3c, - 0xbf, 0x47, 0x33, 0x1e, 0xde, 0x44, 0x90, 0x95, 0xa1, 0xa1, 0xcc, 0xf0, 0x69, 0x08, 0x2a, 0xe9, - 0xcd, 0x63, 0xe9, 0xbc, 0x4c, 0x8e, 0x62, 0x86, 0xd7, 0xb4, 0x21, 0x0d, 0x87, 0xfb, 0x76, 0x5b, - 0xde, 0x13, 0x40, 0x24, 0xdc, 0xb7, 0x5b, 0x8c, 0xf8, 0x7c, 0x8c, 0xd4, 0x00, 0xe2, 0x10, 0x02, - 0x65, 0x3d, 0x8d, 0x9e, 0x0c, 0x4f, 0x17, 0xe7, 0x9a, 0x93, 0x09, 0x61, 0x63, 0x19, 0xad, 0x22, - 0x95, 0x20, 0x48, 0x01, 0xcc, 0x37, 0x97, 0x97, 0x15, 0xf6, 0x5b, 0x30, 0x56, 0x81, 0xce, 0x3b, - 0x27, 0x29, 0xba, 0x64, 0x79, 0x65, 0x43, 0xcc, 0x6b, 0x39, 0x6f, 0x6d, 0xc9, 0x12, 0xd0, 0x39, - 0xd9, 0x8e, 0xa5, 0x9a, 0xd5, 0xa2, 0xc8, 0x6d, 0xc1, 0x22, 0xa9, 0xab, 0x54, 0x27, 0xdb, 0xf0, - 0x74, 0x7f, 0x14, 0x4f, 0x7f, 0xc2, 0x67, 0xa8, 0x06, 0x50, 0x40, 0x2e, 0x9c, 0xc3, 0x73, 0xc2, - 0xaa, 0x69, 0xd9, 0xe4, 0xfa, 0x73, 0x83, 0x26, 0x11, 0x12, 0x21, 0xf1, 0x7c, 0xe3, 0xb9, 0x95, - 0xfd, 0x44, 0xaa, 0xea, 0xd4, 0xda, 0x3c, 0x66, 0x02, 0x32, 0x65, 0xa6, 0xee, 0xcb, 0x9e, 0xcd, - 0x20, 0x3a, 0x7a, 0xed, 0x62, 0xd5, 0x3b, 0x4e, 0xfc, 0xba, 0x1c, 0x3a, 0x81, 0xcc, 0xba, 0xbe, - 0xcb, 0x86, 0x51, 0xd0, 0x68, 0x82, 0x73, 0x08, 0x49, 0x60, 0x57, 0xcb, 0xab, 0x1e, 0xab, 0xfd, - 0xaf, 0xef, 0xbd, 0xf2, 0x38, 0x3a, 0x5a, 0x12, 0x4e, 0x21, 0x41, 0x92, 0xe4, 0x4a, 0xed, 0xb3, - 0xef, 0xed, 0x11, 0x43, 0xd0, 0xdb, 0xc4, 0x92, 0x20, 0x39, 0x59, 0xb2, 0xc2, 0x67, 0x3b, 0xcd, - 0x4b, 0x07, 0x55, 0x4a, 0x78, 0x9b, 0xe7, 0x51, 0x09, 0xcb, 0xb9, 0x39, 0xcf, 0xab, 0xbb, 0x9c, - 0x7e, 0xf7, 0x65, 0xd1, 0xfe, 0xd2, 0x26, 0xf5, 0x35, 0xb1, 0x75, 0x7f, 0xe0, 0xa6, 0x68, 0x09, - 0xcb, 0x9a, 0xd8, 0xfa, 0x3f, 0x85, 0x65, 0x85, 0x61, 0x69, 0xe2, 0xb9, 0xae, 0x6c, 0x05, 0xa0, - 0x40, 0x5d, 0xdb, 0x45, 0xca, 0xd6, 0x9b, 0x43, 0x5b, 0x0d, 0x46, 0x68, 0x02, 0xa9, 0x32, 0x9a, - 0x82, 0xb9, 0xbb, 0x3b, 0xe0, 0x73, 0x92, 0x94, 0xd6, 0xce, 0xe9, 0x3b, 0x3e, 0x70, 0x37, 0xa0, - 0xe1, 0xc4, 0x8f, 0x38, 0x72, 0x20, 0xa4, 0x0c, 0x29, 0x8a, 0x23, 0xea, 0x22, 0xd0, 0x5b, 0xdd, - 0x5d, 0x90, 0xf7, 0x0d, 0x91, 0x44, 0x30, 0xe4, 0x90, 0x82, 0xbc, 0xef, 0x5f, 0xf4, 0x10, 0x61, - 0x2e, 0x3a, 0x1d, 0x40, 0x1a, 0xdd, 0xba, 0x3c, 0x43, 0x0e, 0x9f, 0x4e, 0x61, 0x20, 0x2a, 0xe6, - 0x24, 0xde, 0xf7, 0x31, 0xd8, 0xaf, 0xbe, 0xd6, 0x15, 0x13, 0x9a, 0xd0, 0x83, 0xce, 0x4e, 0x00, - 0xaf, 0xcf, 0x67, 0x3b, 0xd2, 0x75, 0x21, 0xb9, 0xb7, 0x4c, 0x91, 0xcb, 0x32, 0x41, 0x56, 0x60, - 0x2e, 0x1d, 0x91, 0xd8, 0x17, 0x88, 0xe8, 0x6a, 0x4f, 0x56, 0xa0, 0x50, 0xd4, 0xc8, 0x9b, 0x6d, - 0x92, 0xa0, 0x50, 0x3e, 0x0f, 0xf0, 0xb7, 0x7c, 0x7a, 0x47, 0xd0, 0x05, 0x2b, 0x5d, 0x8c, 0x46, - 0x48, 0x33, 0xb0, 0x1e, 0x81, 0x5b, 0xe5, 0x54, 0xa4, 0xd3, 0x67, 0x1b, 0x9b, 0x4b, 0xae, 0x67, - 0xf5, 0x60, 0x5a, 0x95, 0x9f, 0xc2, 0xa2, 0x8c, 0x3f, 0xb5, 0xc3, 0xc2, 0x05, 0xb8, 0xd8, 0x94, - 0xcc, 0xd5, 0xc6, 0x40, 0xfb, 0x79, 0xfc, 0xb9, 0x8c, 0x0d, 0xa4, 0x86, 0xbb, 0x85, 0x73, 0x6f, - 0x3c, 0x11, 0xcb, 0x3b, 0x44, 0xeb, 0x5b, 0xf4, 0x96, 0xb7, 0xc8, 0xfd, 0x10, 0x0f, 0x52, 0xa7, - 0x92, 0xae, 0x8e, 0x3e, 0x94, 0x44, 0xa7, 0x54, 0xd7, 0x12, 0xe5, 0x92, 0x8e, 0x2c, 0xb8, 0xc4, - 0xb1, 0xc7, 0xea, 0x65, 0x44, 0x62, 0xc1, 0x75, 0xf0, 0x4b, 0x5a, 0x52, 0xf6, 0xca, 0xbd, 0xb3, - 0x6b, 0x07, 0x71, 0x34, 0x91, 0x78, 0xa3, 0x99, 0x07, 0x49, 0xa7, 0xee, 0x75, 0xc2, 0xff, 0x08, - 0x52, 0x36, 0xa1, 0x14, 0x87, 0xb3, 0xc2, 0xee, 0x58, 0x34, 0x20, 0xa9, 0x4a, 0x27, 0x7d, 0x48, - 0x07, 0xd4, 0xd4, 0x68, 0xa4, 0xe7, 0x58, 0x3a, 0xe5, 0xf2, 0x18, 0xe8, 0x90, 0x93, 0xbd, 0x52, - 0x6b, 0xd1, 0x39, 0xcd, 0xcd, 0x6f, 0xa7, 0x9b, 0x42, 0xd6, 0xc3, 0x72, 0x70, 0xfe, 0x57, 0x77, - 0x5b, 0x09, 0xca, 0x4d, 0x42, 0x3a, 0xb2, 0x9e, 0xfd, 0xd9, 0x8c, 0x66, 0xa3, 0xf4, 0x82, 0xa8, - 0x80, 0x59, 0x98, 0x87, 0x77, 0x01, 0x0c, 0xcb, 0x9f, 0x0a, 0x25, 0x1d, 0x0a, 0x3b, 0x97, 0x04, - 0xd4, 0x44, 0x54, 0x49, 0xc9, 0x49, 0x94, 0xf8, 0xe4, 0x29, 0x15, 0xe4, 0x2f, 0x98, 0x42, 0xee, - 0x03, 0xfa, 0x55, 0xdb, 0x54, 0xc5, 0xf4, 0x5a, 0x5f, 0xdb, 0x63, 0xbe, 0xc7, 0x68, 0x41, 0xdf, - 0xea, 0xcf, 0x45, 0x2d, 0x65, 0x2a, 0x3b, 0xc1, 0xf3, 0x26, 0x38, 0x9c, 0x9b, 0xfe, 0x01, 0x54, - 0x7d, 0x7f, 0xbf, 0x1c, 0xe8, 0xce, 0xb2, 0xe2, 0x2d, 0x8d, 0xf7, 0xe1, 0x73, 0x65, 0x79, 0x76, - 0x85, 0x9d, 0x7b, 0xaa, 0xc4, 0x2e, 0xc9, 0x72, 0x16, 0xfe, 0x24, 0x12, 0x55, 0xbf, 0xde, 0xfa, - 0x2f, 0x78, 0x55, 0x8e, 0x43, 0xcd, 0x25, 0x00, 0x00 + 0x2c, 0x90, 0x2f, 0x03, 0x35, 0x28, 0xdf, 0xba, 0xea, 0x0f, 0x4c, 0x74, 0x79, 0xda, 0x1f, 0x18, + 0x99, 0x08, 0x2b, 0x90, 0x16, 0xbf, 0x97, 0xc0, 0x1f, 0xb6, 0x41, 0xcd, 0x81, 0x40, 0xe2, 0x2d, + 0x29, 0x85, 0xd6, 0x36, 0x31, 0xa4, 0xa8, 0x40, 0xe8, 0xbd, 0x3f, 0x00, 0xaa, 0xf7, 0x47, 0x36, + 0x6d, 0x15, 0x10, 0x7b, 0x0f, 0x7c, 0xc1, 0x04, 0x7d, 0xe0, 0x10, 0x9e, 0xb3, 0x91, 0x81, 0xe8, + 0xcf, 0x24, 0x5d, 0x67, 0xcc, 0xf5, 0x48, 0x36, 0x65, 0x20, 0xfc, 0x76, 0xab, 0xd0, 0x27, 0xd1, + 0x0d, 0x11, 0xa0, 0x93, 0x33, 0xc2, 0x32, 0x4f, 0xa0, 0x02, 0x47, 0xd0, 0x6a, 0x67, 0x2b, 0x44, + 0xe5, 0xb5, 0x9e, 0x2f, 0xb5, 0xda, 0x4f, 0x71, 0x09, 0x47, 0x70, 0x2a, 0x09, 0x3b, 0x25, 0x33, + 0xe2, 0x79, 0xd9, 0x94, 0xc1, 0x29, 0xf4, 0x2e, 0x7e, 0x07, 0xc0, 0x1e, 0xbf, 0xe5, 0x91, 0x37, + 0xf4, 0xc2, 0xe8, 0xc6, 0xc8, 0x24, 0xae, 0x0a, 0xe7, 0xd0, 0xfa, 0x20, 0x37, 0xff, 0x70, 0x22, + 0x8f, 0x8e, 0x39, 0x13, 0xd5, 0x3f, 0xce, 0xc4, 0x5f, 0x85, 0x33, 0xe9, 0xfe, 0x53, 0xaa, 0x5d, + 0xb6, 0x11, 0xc0, 0x81, 0x5c, 0x7e, 0x00, 0x6c, 0x97, 0xe4, 0xc6, 0x93, 0xe1, 0x70, 0x09, 0x59, + 0xda, 0x25, 0x91, 0x96, 0x3e, 0x68, 0x23, 0x3e, 0x1a, 0x81, 0xab, 0x59, 0x58, 0xb9, 0x36, 0xda, + 0x8f, 0x17, 0xdb, 0x6b, 0xb3, 0x57, 0xb5, 0x5a, 0x79, 0x1e, 0xef, 0x93, 0xf7, 0x34, 0xc8, 0xe7, + 0xc0, 0xa6, 0x1d, 0xce, 0xdc, 0x08, 0xe5, 0x61, 0xbe, 0x88, 0x2a, 0x87, 0x68, 0xc2, 0xe3, 0x30, + 0x32, 0xe4, 0x56, 0xed, 0x38, 0x0c, 0x21, 0xc0, 0x23, 0xd5, 0x22, 0xd7, 0xee, 0xcc, 0x8b, 0xc0, + 0x53, 0x40, 0x1a, 0x9d, 0xba, 0x6a, 0x18, 0x8c, 0xb0, 0x1d, 0xb3, 0x1b, 0xc6, 0x67, 0x4c, 0xc6, + 0x12, 0x98, 0xb4, 0x8b, 0x72, 0xf5, 0x39, 0x11, 0x9e, 0x88, 0xdd, 0x0d, 0xdf, 0x02, 0xd1, 0x0e, + 0xaf, 0x33, 0xdf, 0x03, 0xf1, 0x67, 0x1e, 0x62, 0x1f, 0xcb, 0x9a, 0x68, 0x43, 0x16, 0xcb, 0xac, + 0x9f, 0x0f, 0x32, 0xf2, 0x9d, 0x3b, 0x7f, 0x91, 0xf0, 0xe4, 0xb4, 0x04, 0x5e, 0x15, 0x5f, 0xc9, + 0xfa, 0x8e, 0x06, 0x30, 0x58, 0x2c, 0x57, 0xb4, 0x27, 0x3c, 0xe7, 0x6c, 0xbc, 0x9d, 0xda, 0xde, + 0x26, 0xb5, 0x1d, 0x70, 0x46, 0x99, 0xe7, 0x78, 0x85, 0x65, 0xa5, 0xf7, 0x34, 0xb5, 0xbd, 0x75, + 0x6a, 0x73, 0x5b, 0xc8, 0x55, 0xd4, 0x56, 0x64, 0xcf, 0x69, 0x9d, 0xd8, 0xed, 0x31, 0x50, 0x46, + 0x5d, 0x38, 0xa9, 0xa1, 0x80, 0xf7, 0x5c, 0x1a, 0xdb, 0xe6, 0xa9, 0x1b, 0x56, 0x21, 0x69, 0x7e, + 0xc1, 0xb2, 0x88, 0x62, 0x2a, 0x7e, 0x79, 0x76, 0x2e, 0x2f, 0x13, 0xa4, 0x08, 0x31, 0x3a, 0x43, + 0x50, 0x26, 0x9a, 0x32, 0xae, 0xdf, 0xa3, 0x19, 0x0f, 0x6f, 0x22, 0xc8, 0xce, 0xd0, 0x50, 0x66, + 0xfa, 0x34, 0x04, 0x95, 0xf4, 0xe6, 0x31, 0x75, 0x5e, 0x2e, 0x47, 0x31, 0xc3, 0x6b, 0xda, 0x90, + 0x86, 0xc5, 0x7d, 0xbb, 0x2d, 0xef, 0x0b, 0x20, 0x22, 0xee, 0xdb, 0x2d, 0x46, 0x7c, 0x3e, 0x46, + 0x6a, 0x00, 0x71, 0x08, 0x85, 0xb2, 0xae, 0x46, 0x4f, 0x86, 0xa9, 0x8b, 0x73, 0xcd, 0xc9, 0x84, + 0xb0, 0xb1, 0x8c, 0x5a, 0x91, 0x4a, 0x14, 0xa4, 0x00, 0xe6, 0x9b, 0xcb, 0x4b, 0x0b, 0xfb, 0x2d, + 0x18, 0xab, 0x40, 0xe7, 0x9d, 0x93, 0x14, 0x5d, 0xb2, 0xbc, 0xb2, 0x21, 0xe6, 0xb5, 0xdc, 0xb7, + 0xb6, 0x64, 0x09, 0xe8, 0x9c, 0x6c, 0xc7, 0x52, 0xcd, 0x6a, 0x55, 0xe4, 0xb6, 0x60, 0x91, 0xd4, + 0x55, 0xaa, 0x93, 0x6d, 0x78, 0xba, 0x3f, 0x8a, 0xa7, 0x3f, 0xe1, 0x33, 0x54, 0x03, 0x28, 0x20, + 0x17, 0xce, 0xe1, 0x39, 0x61, 0xd5, 0xb4, 0x6c, 0x72, 0xfd, 0xb9, 0x41, 0x93, 0x08, 0x89, 0x90, + 0x78, 0xbe, 0xf1, 0xdc, 0xca, 0x7e, 0x22, 0x55, 0x75, 0x6a, 0x6d, 0x1e, 0x33, 0x01, 0x19, 0x33, + 0x53, 0xf7, 0x66, 0xcf, 0x66, 0x12, 0x1d, 0xbd, 0x76, 0xb1, 0xea, 0x1d, 0x27, 0x7e, 0x5d, 0x0e, + 0x9d, 0x40, 0x86, 0x5d, 0xdf, 0x65, 0xc3, 0x28, 0x68, 0x34, 0xc1, 0x39, 0x84, 0x24, 0xb0, 0xab, + 0xe5, 0x55, 0x8f, 0xd5, 0xfe, 0xd7, 0xf7, 0x5e, 0x7d, 0x1c, 0x1d, 0x2d, 0x09, 0xa7, 0x90, 0x20, + 0x49, 0x72, 0xa6, 0xf6, 0xd9, 0xf7, 0xf6, 0x8a, 0x21, 0xe8, 0x6d, 0x62, 0x49, 0x90, 0x9c, 0x2c, + 0x59, 0xe1, 0xb3, 0x1d, 0xe7, 0xa5, 0x83, 0x2a, 0x25, 0xbc, 0xcd, 0xf3, 0xa9, 0x84, 0xe5, 0xdc, + 0x9c, 0xe7, 0xd5, 0x5d, 0x4e, 0xbf, 0xfb, 0xd2, 0x68, 0x7f, 0x69, 0x93, 0xfa, 0x9a, 0xd8, 0xba, + 0x3f, 0x70, 0x63, 0xb4, 0x84, 0x65, 0x4d, 0x6c, 0xfd, 0x9f, 0xc2, 0xb2, 0xc2, 0xb0, 0x34, 0xf1, + 0x5c, 0x57, 0xb6, 0x04, 0x50, 0xa0, 0xae, 0xef, 0x22, 0x65, 0xeb, 0xcd, 0xa1, 0xad, 0x06, 0x23, + 0x34, 0x81, 0x94, 0x19, 0x4d, 0xc1, 0xdc, 0xdd, 0x1d, 0xf0, 0x39, 0x49, 0x6a, 0x6b, 0xe7, 0xf4, + 0x5d, 0x1f, 0xb8, 0x1b, 0xd0, 0x70, 0xe2, 0x47, 0x1c, 0x39, 0x10, 0x52, 0x86, 0x14, 0xc5, 0x11, + 0x75, 0x11, 0xe8, 0xad, 0xee, 0x32, 0xc8, 0x7b, 0x87, 0x48, 0x22, 0x18, 0x72, 0x48, 0x41, 0xde, + 0xf7, 0x2f, 0x7a, 0x88, 0x30, 0x17, 0x9d, 0x0e, 0x20, 0x9d, 0x6e, 0x5d, 0x9e, 0x21, 0x87, 0x4f, + 0xa7, 0x30, 0x10, 0x15, 0x73, 0x12, 0xef, 0xfb, 0x18, 0xec, 0x57, 0x5f, 0xef, 0x8a, 0x09, 0x4d, + 0xe8, 0x41, 0x67, 0x27, 0x80, 0xd7, 0xe7, 0xb3, 0x1d, 0xe9, 0xba, 0x90, 0xdc, 0x5b, 0xa6, 0xca, + 0x65, 0x99, 0x28, 0x2b, 0x30, 0x97, 0x8e, 0x48, 0xec, 0x0b, 0x44, 0x74, 0xd5, 0x27, 0x2b, 0x51, + 0x28, 0x6e, 0xe4, 0x0d, 0x37, 0x49, 0x50, 0x28, 0x9f, 0x07, 0xf8, 0x5b, 0x3e, 0xbd, 0x23, 0xe8, + 0x82, 0x95, 0x2e, 0x46, 0x23, 0xa4, 0x19, 0x58, 0x8f, 0xc0, 0xad, 0x72, 0x2a, 0xd2, 0xe9, 0xb3, + 0x0d, 0xce, 0x25, 0xd7, 0xb3, 0x7a, 0x30, 0xad, 0xca, 0x4f, 0x61, 0x51, 0xc6, 0x9f, 0xda, 0x61, + 0xe1, 0x02, 0x5c, 0x6c, 0x4a, 0xe6, 0x6a, 0x83, 0xa0, 0xfd, 0x3c, 0xfe, 0x5c, 0xc6, 0x06, 0x52, + 0xc3, 0xdd, 0xc2, 0xb9, 0x37, 0x9e, 0x88, 0xe5, 0x1d, 0xa2, 0xf5, 0x2d, 0x7a, 0xcb, 0x5b, 0xe4, + 0x7e, 0x88, 0x07, 0xa9, 0x53, 0x49, 0x77, 0x47, 0x1f, 0x4a, 0xa2, 0x53, 0xaa, 0x7b, 0x89, 0x72, + 0x49, 0x67, 0x16, 0x5c, 0xe2, 0xd8, 0x63, 0xf5, 0x32, 0x22, 0xb1, 0xe0, 0x3a, 0xf8, 0x25, 0xad, + 0x29, 0x7b, 0xe5, 0xfe, 0xd9, 0xb5, 0x83, 0x38, 0x9a, 0x48, 0xbc, 0xd1, 0xcc, 0x83, 0xa4, 0x53, + 0xf7, 0x3c, 0xe1, 0x7f, 0x04, 0x29, 0x9b, 0x50, 0x8a, 0xc3, 0x59, 0x61, 0x77, 0x2c, 0x1a, 0x90, + 0x54, 0xa5, 0x93, 0x3e, 0xa4, 0x03, 0x6a, 0x6a, 0x34, 0xd2, 0x73, 0x2c, 0x9d, 0x72, 0x79, 0x0c, + 0x74, 0xc8, 0xc9, 0x5e, 0xa9, 0xb5, 0xe8, 0xa0, 0xe6, 0xe6, 0xb7, 0xd4, 0x4d, 0x21, 0xeb, 0x62, + 0x39, 0x38, 0xff, 0xab, 0xbb, 0xae, 0x04, 0xe5, 0x26, 0x21, 0x1d, 0x59, 0xcf, 0xfe, 0x7c, 0x46, + 0xb3, 0x51, 0x7a, 0x41, 0x54, 0xc0, 0x2c, 0xcc, 0xc3, 0xbb, 0x00, 0x86, 0xe5, 0x4f, 0x86, 0x92, + 0x4e, 0x85, 0x9d, 0x4b, 0x02, 0x6a, 0x22, 0xaa, 0xa4, 0xf4, 0x24, 0x4a, 0x7c, 0xf2, 0x94, 0x0a, + 0xf2, 0x97, 0x4c, 0x21, 0xf7, 0x01, 0xfd, 0xaa, 0x6d, 0xaa, 0xa2, 0x7a, 0xad, 0xbf, 0xed, 0x31, + 0xdf, 0x63, 0xb4, 0xa0, 0x6f, 0xf7, 0xe7, 0xa2, 0x96, 0x32, 0x95, 0x1d, 0xe1, 0x79, 0x33, 0x1c, + 0xce, 0x4d, 0xff, 0x10, 0xaa, 0xbe, 0xbf, 0x5f, 0x0e, 0x74, 0x87, 0x59, 0xf1, 0x96, 0xc6, 0xfb, + 0xf0, 0xb9, 0xf2, 0x3c, 0xbb, 0xd2, 0xce, 0x3d, 0x55, 0x6a, 0x97, 0x64, 0x59, 0x0b, 0x7f, 0x12, + 0x89, 0xaa, 0x5f, 0x71, 0xfd, 0x17, 0xe4, 0x6b, 0x8f, 0xcb, 0xd5, 0x25, 0x00, 0x00 }; diff --git a/wled00/html_simple.h b/wled00/html_simple.h index 53d7c65a..cb17b5a7 100644 --- a/wled00/html_simple.h +++ b/wled00/html_simple.h @@ -995,157 +995,157 @@ const uint8_t PAGE_simple[] PROGMEM = { 0x43, 0x4f, 0x5c, 0x47, 0x1a, 0x91, 0x04, 0xf3, 0x56, 0x8d, 0x55, 0xc9, 0xd5, 0x82, 0x10, 0x97, 0xb4, 0x05, 0xcf, 0x42, 0x1b, 0x29, 0x93, 0xc7, 0x32, 0x67, 0x9a, 0xe3, 0xa0, 0x9b, 0xc4, 0xd1, 0x35, 0x35, 0x60, 0xc6, 0x8a, 0x54, 0xb1, 0x48, 0x33, 0xd4, 0xb3, 0x04, 0x1d, 0x46, 0x02, 0x34, - 0xa4, 0x84, 0xa9, 0xc0, 0x42, 0x43, 0xe3, 0xf0, 0x3c, 0x44, 0xbd, 0x94, 0x59, 0xb0, 0xe3, 0x4c, - 0x7c, 0x4a, 0x71, 0x35, 0x78, 0x51, 0xa9, 0xb7, 0x5d, 0x38, 0x00, 0x8a, 0x01, 0x7b, 0x80, 0x1e, - 0x8e, 0x8f, 0x62, 0xa4, 0xbb, 0x93, 0xb0, 0xe3, 0x1d, 0xf5, 0x22, 0x59, 0xb0, 0xa2, 0x6c, 0x3d, - 0xc4, 0x76, 0x16, 0xf7, 0x65, 0x42, 0x7e, 0xc6, 0x7f, 0xce, 0x3d, 0xbf, 0x90, 0xdf, 0xbf, 0x83, - 0x26, 0xf8, 0x59, 0x68, 0x83, 0x81, 0x2d, 0x30, 0xbc, 0xdd, 0x84, 0xd8, 0x69, 0xd4, 0x8b, 0x51, - 0xc8, 0x93, 0x3c, 0xef, 0xdb, 0xc8, 0x28, 0x27, 0x36, 0x1b, 0x1f, 0xd9, 0x9d, 0x1d, 0x0d, 0x8f, - 0x2a, 0x3e, 0xbe, 0xc0, 0x01, 0x32, 0x08, 0xf9, 0xce, 0x59, 0xb0, 0xa9, 0x72, 0xcc, 0x38, 0x8d, - 0xd1, 0x1f, 0x92, 0x5f, 0xa0, 0x1e, 0x72, 0x32, 0xe8, 0x21, 0x28, 0x5b, 0x0d, 0x66, 0x78, 0x46, - 0xc7, 0x8e, 0xf0, 0x35, 0x06, 0xdc, 0x0a, 0xd3, 0x86, 0x39, 0x4e, 0xb2, 0xb3, 0x7e, 0x54, 0x04, - 0x62, 0x1e, 0xe8, 0x84, 0xf7, 0x39, 0x17, 0x7a, 0x18, 0xd1, 0x3b, 0xa4, 0xc0, 0xbf, 0x61, 0xb9, - 0x7d, 0xf7, 0x37, 0x05, 0xc0, 0xc1, 0xb7, 0x19, 0x37, 0xe2, 0xd8, 0xbe, 0xf0, 0x8d, 0xaf, 0xa1, - 0x23, 0x37, 0xb6, 0x1c, 0xd9, 0x5d, 0x42, 0x73, 0x21, 0xe4, 0xd0, 0x12, 0xc2, 0x6c, 0xef, 0x66, - 0x60, 0x56, 0x37, 0x04, 0xbc, 0x0b, 0x4a, 0x30, 0xac, 0x0b, 0xde, 0x24, 0x41, 0xcd, 0x7e, 0x0b, - 0x8f, 0x28, 0x60, 0x4c, 0x78, 0xc9, 0x50, 0x63, 0xb2, 0x03, 0xc5, 0x4c, 0x1d, 0xc3, 0x1a, 0xdb, - 0xc8, 0xb1, 0x6f, 0x6f, 0xda, 0x5b, 0x15, 0x6e, 0x2e, 0xe0, 0x67, 0x84, 0x6a, 0xee, 0x5f, 0x74, - 0x25, 0x4d, 0xfe, 0x2f, 0x8b, 0x12, 0x3d, 0x1e, 0xe3, 0x73, 0x7c, 0x47, 0x39, 0x5c, 0x51, 0x40, - 0x0c, 0xa2, 0x33, 0xa6, 0x51, 0x91, 0x61, 0x21, 0x52, 0xb0, 0x94, 0x8f, 0xe5, 0x0a, 0xbf, 0x02, - 0xcf, 0x87, 0x64, 0x0a, 0xe2, 0xc9, 0x14, 0xde, 0x6f, 0x8d, 0x44, 0x37, 0x6f, 0xbe, 0x16, 0x5e, - 0x96, 0x18, 0xf3, 0x04, 0x96, 0x8e, 0x63, 0x81, 0xe2, 0x40, 0xd8, 0xc5, 0x9d, 0xbf, 0x76, 0xe2, - 0xb0, 0xac, 0xdc, 0x7b, 0xdf, 0x30, 0x8a, 0x5c, 0x64, 0x9b, 0x99, 0x46, 0x8d, 0xc5, 0x51, 0xc2, - 0xbf, 0x61, 0xa9, 0x21, 0x1c, 0x64, 0x6c, 0xe6, 0x05, 0x56, 0x02, 0x55, 0x34, 0x1c, 0x46, 0x4a, - 0x48, 0xfa, 0xa1, 0x97, 0xd8, 0x2f, 0x1f, 0x0b, 0x34, 0xe3, 0x5d, 0xe0, 0xc6, 0xe8, 0x74, 0xfe, - 0x34, 0x04, 0x1f, 0x16, 0x68, 0xb0, 0x2a, 0xdf, 0xb9, 0xd0, 0x07, 0x06, 0xf0, 0xfb, 0x5c, 0x40, - 0x70, 0xa1, 0x14, 0xfc, 0x18, 0x1e, 0xef, 0xa9, 0x15, 0xfe, 0x77, 0x92, 0xa2, 0xba, 0x2c, 0x03, - 0xb2, 0xd0, 0x66, 0xe3, 0x03, 0xf0, 0x0f, 0x9b, 0xfc, 0xe9, 0x0a, 0x0f, 0x0b, 0xfb, 0xef, 0x05, - 0x8c, 0xf2, 0x1e, 0x78, 0x76, 0x75, 0xd2, 0x1f, 0x1f, 0x73, 0x97, 0xa4, 0x07, 0x50, 0xab, 0x06, - 0x40, 0x8b, 0xfd, 0xf1, 0x08, 0xce, 0x3d, 0x78, 0xe1, 0x51, 0x78, 0x90, 0x56, 0x0e, 0x83, 0x7d, - 0xa1, 0xc8, 0x77, 0x59, 0xf6, 0x8a, 0x00, 0x1b, 0x0a, 0x81, 0x6c, 0x5d, 0x86, 0xe1, 0xd5, 0xd7, - 0xe6, 0x20, 0xa7, 0xc2, 0x15, 0xcd, 0x60, 0xb0, 0x4e, 0x79, 0x5f, 0x6b, 0x88, 0xab, 0x6b, 0x24, - 0xae, 0xac, 0xd1, 0xc2, 0xa3, 0x95, 0xaa, 0xdd, 0xea, 0xb2, 0x7e, 0xd8, 0xff, 0x8f, 0x4a, 0xfb, - 0x47, 0x17, 0xec, 0xcd, 0x1f, 0x18, 0x0b, 0xb9, 0x1d, 0xab, 0x5b, 0x5f, 0x9f, 0xd5, 0x88, 0x6b, - 0x97, 0x51, 0x0c, 0x86, 0xbc, 0x64, 0x7c, 0x5b, 0x0b, 0x99, 0x2b, 0x0e, 0x64, 0xfd, 0xe2, 0xd3, - 0x9e, 0xaf, 0x46, 0x7d, 0x91, 0x63, 0x66, 0x7f, 0xad, 0x80, 0xbf, 0xac, 0xeb, 0x7a, 0xa5, 0x73, - 0xbf, 0x3e, 0xdf, 0x1b, 0xcf, 0x5f, 0x84, 0xc4, 0xd6, 0x21, 0x08, 0x9b, 0x35, 0x7a, 0x54, 0x84, - 0x9b, 0x6d, 0x6d, 0x71, 0xe0, 0x4f, 0x70, 0x3b, 0x5e, 0xf4, 0x71, 0x3e, 0x8f, 0x46, 0x77, 0x89, - 0x04, 0x9a, 0x0d, 0xdf, 0x2a, 0x0a, 0x07, 0x1c, 0xf5, 0x3a, 0x57, 0x5f, 0x74, 0x6f, 0x81, 0xec, - 0x20, 0x6d, 0xe5, 0x1c, 0x86, 0x22, 0xcd, 0xc6, 0x47, 0xe8, 0x61, 0x61, 0x05, 0xa4, 0xcd, 0xcd, - 0x55, 0x3d, 0xa0, 0x9f, 0x38, 0x04, 0xc9, 0xcc, 0xbc, 0xd3, 0xc8, 0x38, 0x39, 0x93, 0x49, 0x5f, - 0x1a, 0x69, 0xa6, 0x5d, 0xe3, 0x9c, 0x81, 0x69, 0xa2, 0x1f, 0x25, 0x05, 0x54, 0xf3, 0x03, 0x50, - 0xc7, 0xc6, 0x19, 0x0e, 0xda, 0x1b, 0x1e, 0xe6, 0x72, 0x07, 0xff, 0xc2, 0x28, 0x57, 0xe0, 0xea, - 0xf3, 0xc3, 0x8c, 0xf6, 0xe0, 0x6f, 0x8c, 0x72, 0xe1, 0x85, 0xb3, 0x9e, 0x36, 0x80, 0x5b, 0x7f, - 0xf1, 0x9d, 0x7b, 0xc8, 0xcf, 0xf9, 0x72, 0x75, 0xf4, 0x9d, 0x59, 0x5f, 0x1d, 0x54, 0xb3, 0x5a, - 0x20, 0xb6, 0x87, 0x69, 0x8c, 0x3a, 0x95, 0x04, 0x46, 0xe1, 0x28, 0x54, 0x2f, 0xd8, 0x2d, 0x69, - 0x88, 0xfc, 0x2c, 0x36, 0x13, 0xc2, 0x72, 0x3b, 0xdd, 0x49, 0x2d, 0x7c, 0xd7, 0xb3, 0x3b, 0x51, - 0x49, 0x17, 0xad, 0x19, 0x31, 0xa0, 0x7e, 0x28, 0x56, 0x5f, 0x30, 0x8c, 0x93, 0xf2, 0x0a, 0xc8, - 0x30, 0x4b, 0x35, 0x12, 0x87, 0x43, 0xbf, 0x4c, 0x16, 0x1d, 0xee, 0xd2, 0x20, 0x97, 0x15, 0x5a, - 0x3e, 0x8e, 0x38, 0x16, 0x45, 0x7c, 0x05, 0xda, 0x9c, 0xc9, 0x4a, 0x58, 0x11, 0xfd, 0x63, 0x09, - 0x63, 0xa1, 0x18, 0xda, 0xab, 0x66, 0x62, 0x35, 0xc8, 0x25, 0xa5, 0x65, 0x09, 0x2c, 0xc6, 0x57, - 0x8c, 0xcf, 0x2d, 0x7a, 0xd9, 0x92, 0x38, 0x6e, 0xd9, 0xc5, 0x86, 0x80, 0xe1, 0xcd, 0x50, 0xa1, - 0x9e, 0xd7, 0x23, 0x57, 0x34, 0xf1, 0x3c, 0x11, 0xf4, 0x78, 0x2a, 0x98, 0x86, 0xc4, 0x0f, 0xff, - 0x6b, 0x8f, 0x96, 0x7f, 0x2f, 0xd4, 0xbf, 0x30, 0xea, 0xf9, 0xc3, 0x52, 0x57, 0xd8, 0xc8, 0xdc, - 0xb8, 0x91, 0xb6, 0x03, 0x25, 0x10, 0xbd, 0x90, 0x30, 0x72, 0x22, 0xa9, 0x2f, 0x98, 0xee, 0x7a, - 0xa5, 0x77, 0xe9, 0xe4, 0x12, 0x0f, 0x2c, 0x57, 0xd8, 0xe1, 0x27, 0x13, 0x1a, 0x29, 0xad, 0x1e, - 0xcb, 0xa6, 0x36, 0x71, 0x2f, 0x4f, 0x40, 0x04, 0xd0, 0x2d, 0x2d, 0xe9, 0xae, 0xd5, 0x73, 0x23, - 0xba, 0xe4, 0x92, 0x6e, 0x4a, 0x7e, 0x7e, 0x68, 0x8e, 0xa4, 0x6a, 0x0f, 0x0a, 0x7b, 0x7d, 0xe8, - 0xfb, 0xc2, 0x67, 0xa0, 0xe5, 0x1d, 0x54, 0xd1, 0xaf, 0x34, 0x35, 0xf0, 0xa4, 0x0a, 0x08, 0x7c, - 0xd6, 0xaf, 0x89, 0x82, 0x03, 0xff, 0x46, 0xf8, 0x6d, 0x5f, 0x90, 0xe6, 0x22, 0x37, 0x9d, 0x83, - 0x3b, 0x00, 0xde, 0xa1, 0x68, 0xaa, 0x28, 0xf2, 0x75, 0xd5, 0x9c, 0x91, 0x74, 0x3f, 0x5c, 0x2c, - 0x5f, 0x8a, 0x95, 0xe3, 0xe7, 0xd0, 0x5b, 0x9d, 0x24, 0x69, 0xa2, 0x24, 0xe3, 0x05, 0x80, 0x3e, - 0x0d, 0xfb, 0xd7, 0xc7, 0x73, 0x2c, 0xbe, 0xce, 0x3a, 0x07, 0x89, 0xf3, 0x05, 0x42, 0x08, 0xc5, - 0x8e, 0xff, 0xe9, 0x90, 0xa5, 0xc3, 0x97, 0x60, 0x74, 0x1e, 0x83, 0x65, 0xa1, 0x19, 0x58, 0x50, - 0x3b, 0xd8, 0xcc, 0xeb, 0x21, 0x9c, 0x5d, 0x87, 0x4c, 0x43, 0x76, 0x18, 0x99, 0x07, 0xa1, 0x8c, - 0x5e, 0xc4, 0x9c, 0x14, 0x36, 0x26, 0xd5, 0xc3, 0xa0, 0xfb, 0x64, 0xd2, 0xa1, 0x0a, 0x8f, 0x67, - 0x09, 0x87, 0x27, 0xff, 0xde, 0x85, 0x1b, 0x31, 0x17, 0xd4, 0x5d, 0xbc, 0x3a, 0x81, 0xe7, 0x49, - 0x1d, 0xaf, 0x54, 0x29, 0x12, 0x34, 0xc0, 0xff, 0xfc, 0x13, 0x86, 0x0d, 0x60, 0x4d, 0x85, 0x9b, - 0xa1, 0x29, 0x9e, 0x19, 0x19, 0xa6, 0x24, 0xd2, 0x83, 0x21, 0xec, 0xba, 0x91, 0x14, 0x47, 0x72, - 0x87, 0x36, 0x55, 0x79, 0xbc, 0x59, 0x03, 0x2d, 0x4f, 0xb3, 0xcd, 0x74, 0x8b, 0x95, 0x77, 0x46, - 0x37, 0x26, 0x7e, 0x84, 0xc6, 0xc1, 0xb3, 0x6e, 0xcf, 0x66, 0x62, 0xa4, 0x99, 0xbd, 0xc4, 0x48, - 0xf7, 0xbc, 0x5f, 0x19, 0x57, 0x0b, 0xf4, 0xc5, 0x20, 0x13, 0xff, 0xb0, 0xac, 0xa3, 0xc9, 0x3a, - 0x1d, 0xe9, 0xea, 0x80, 0x3f, 0x6b, 0x8e, 0x1b, 0x31, 0xd8, 0x57, 0x42, 0xfc, 0xa7, 0x40, 0x4f, - 0x70, 0xf9, 0x5f, 0x61, 0xb4, 0x9e, 0x04, 0x68, 0x0d, 0x77, 0xff, 0x85, 0xe8, 0x23, 0xcd, 0x88, - 0x32, 0x05, 0x9f, 0x04, 0x3c, 0xa6, 0x80, 0xfa, 0x53, 0x30, 0x22, 0x34, 0x9d, 0xb9, 0x0c, 0xce, - 0x8e, 0xf8, 0x3d, 0x82, 0x08, 0x82, 0xf7, 0xa0, 0x6a, 0xb1, 0xa4, 0x16, 0xfb, 0xae, 0x4d, 0x92, - 0x03, 0x4c, 0xc0, 0x58, 0xe1, 0x5f, 0x98, 0x9c, 0xbc, 0x8f, 0x6c, 0xcd, 0x3e, 0xac, 0xb4, 0x14, - 0x34, 0x72, 0x31, 0x85, 0x3e, 0x0b, 0x8c, 0x00, 0x3d, 0x59, 0x06, 0x9a, 0x9c, 0xb1, 0xb1, 0xd6, - 0xd6, 0xc1, 0x0a, 0x10, 0x34, 0x8f, 0x01, 0xa3, 0x1f, 0x11, 0x9a, 0x2d, 0x30, 0xe3, 0x39, 0x05, - 0xac, 0x22, 0x72, 0x74, 0x11, 0x58, 0x45, 0xe3, 0xb1, 0xf4, 0xdd, 0x45, 0x53, 0xbf, 0xd6, 0xac, - 0xb4, 0x20, 0x31, 0x22, 0x8d, 0xc6, 0x19, 0x63, 0x16, 0x58, 0xc7, 0xe6, 0x66, 0x34, 0x6c, 0x4a, - 0xa3, 0xe1, 0xb2, 0x55, 0xb0, 0x9a, 0xa3, 0x6d, 0x6e, 0x7e, 0x88, 0x6d, 0xea, 0x01, 0xf1, 0x2e, - 0x90, 0xf8, 0x8a, 0x67, 0xcb, 0x4c, 0xc8, 0x7d, 0xc1, 0xee, 0x24, 0xc3, 0x4b, 0xb1, 0xb1, 0x6a, - 0x07, 0x0b, 0x18, 0x69, 0xe0, 0x9e, 0x12, 0x83, 0x27, 0xc0, 0xca, 0xa3, 0x5b, 0x20, 0xa4, 0xd4, - 0x7e, 0xfc, 0x30, 0x81, 0x75, 0x98, 0xc0, 0x25, 0xcc, 0xb4, 0x2c, 0x84, 0x81, 0xff, 0x14, 0x7e, - 0xe0, 0xff, 0x41, 0xbc, 0xa9, 0x67, 0x69, 0xd3, 0x31, 0xd5, 0x60, 0xb5, 0xc6, 0x02, 0x7a, 0x3b, - 0x9a, 0x44, 0x7a, 0xe9, 0xee, 0x04, 0x24, 0x15, 0x01, 0x70, 0x88, 0xc0, 0xbe, 0x47, 0x9b, 0x04, - 0xb8, 0xef, 0xb5, 0x0a, 0x4d, 0xd6, 0x72, 0xac, 0x22, 0xb5, 0xb5, 0xc4, 0xaa, 0xbe, 0x57, 0x1b, - 0x85, 0xb1, 0xc8, 0xc6, 0xe8, 0xc4, 0x04, 0x15, 0xef, 0x2b, 0x46, 0x2b, 0x85, 0x33, 0x45, 0x71, - 0xc3, 0x52, 0xd3, 0xdc, 0xbb, 0xce, 0xda, 0x57, 0xc2, 0xbb, 0x0b, 0x9e, 0x07, 0x1c, 0x1c, 0xe2, - 0xd1, 0x0f, 0x3b, 0xd0, 0xc1, 0xf7, 0x64, 0x10, 0xe0, 0xc9, 0x8b, 0x1f, 0x8b, 0xb1, 0x6e, 0xcf, - 0x4c, 0xd3, 0x38, 0x33, 0xd5, 0xa1, 0x4e, 0x9c, 0x0c, 0xfa, 0xea, 0x66, 0xc6, 0xda, 0x0b, 0x88, - 0x3e, 0x73, 0x4f, 0x32, 0xb1, 0x61, 0x8e, 0xd8, 0x35, 0x5a, 0x5f, 0x27, 0x4e, 0x26, 0xfb, 0x4a, - 0xaa, 0x91, 0xad, 0xf0, 0x3b, 0x79, 0x1a, 0xa9, 0x02, 0xdb, 0xe5, 0x85, 0xbe, 0xb2, 0x93, 0xf3, - 0x5f, 0xf3, 0x62, 0x09, 0x50, 0x5a, 0x28, 0x34, 0x1a, 0x7d, 0x85, 0xa6, 0xa4, 0x1a, 0x79, 0x4c, - 0x11, 0x2b, 0xa1, 0x14, 0x00, 0xc0, 0x58, 0x13, 0x0b, 0xe0, 0xed, 0xcf, 0x0f, 0x9d, 0xfe, 0xc6, - 0xaf, 0xbe, 0x83, 0xc1, 0xcc, 0xfa, 0xca, 0x1c, 0x23, 0xc3, 0x21, 0x33, 0x2b, 0x82, 0x62, 0xfc, - 0x8b, 0x9f, 0x0b, 0xd5, 0xac, 0xc8, 0xe8, 0x45, 0x31, 0xba, 0x76, 0xc4, 0x82, 0xb8, 0x88, 0x2a, - 0x4e, 0x4f, 0x2c, 0x30, 0x3f, 0x22, 0xfc, 0x07, 0x81, 0xc8, 0x83, 0x78, 0x0f, 0x24, 0xd2, 0x26, - 0xf7, 0x15, 0xbf, 0xab, 0x28, 0x90, 0xd0, 0xd9, 0x2c, 0x47, 0xbf, 0x11, 0x6c, 0x0f, 0x12, 0x2c, - 0x4a, 0x39, 0x47, 0x6d, 0xf6, 0x49, 0xd6, 0x32, 0x2c, 0xd4, 0x35, 0x9f, 0x25, 0xa6, 0x0d, 0x71, - 0xab, 0x6f, 0xe5, 0x47, 0x6e, 0x62, 0xc7, 0x9d, 0xc2, 0x58, 0xb7, 0xbc, 0xbd, 0xec, 0x9d, 0xa0, - 0x09, 0x92, 0x3e, 0x61, 0xbe, 0x05, 0x2e, 0xef, 0xda, 0x53, 0x04, 0x93, 0x8c, 0x1c, 0xc1, 0xb9, - 0xcc, 0x0d, 0x60, 0x84, 0x47, 0xd7, 0xc1, 0x21, 0x12, 0x5e, 0x4e, 0xf3, 0x03, 0x34, 0x84, 0x1a, - 0x6d, 0x60, 0x54, 0x0b, 0x3a, 0x2c, 0x76, 0x4d, 0x9a, 0x9f, 0x7b, 0x01, 0xb4, 0xf8, 0xd9, 0x3c, - 0x52, 0x6e, 0x36, 0xc7, 0xcb, 0x67, 0x91, 0x71, 0x88, 0x82, 0x17, 0x08, 0x69, 0x5d, 0x2c, 0x53, - 0xda, 0xd3, 0x78, 0x9c, 0x8c, 0x99, 0x55, 0x8b, 0x04, 0xf1, 0x86, 0x8e, 0xd5, 0xc2, 0xbd, 0x9c, - 0xa3, 0x03, 0xe3, 0xaa, 0x40, 0x07, 0x91, 0xb0, 0x31, 0x51, 0x84, 0xe2, 0x81, 0xeb, 0xa7, 0xe3, - 0x1c, 0x4c, 0xbe, 0x5b, 0xb8, 0x7f, 0x82, 0x80, 0x1a, 0xf5, 0x13, 0xfe, 0x1b, 0x46, 0xcd, 0xbf, - 0x60, 0xcd, 0x34, 0x01, 0x73, 0x11, 0x04, 0x2f, 0xc7, 0x27, 0x09, 0x63, 0xc9, 0x4c, 0x5b, 0x00, - 0x63, 0xdb, 0x4c, 0x0f, 0xbe, 0xc7, 0x83, 0x10, 0x2d, 0x61, 0x23, 0x95, 0xc5, 0xd8, 0xcb, 0x02, - 0x08, 0x76, 0x35, 0x37, 0x19, 0x8d, 0x89, 0xb6, 0x74, 0x57, 0x3e, 0xcc, 0x76, 0xe8, 0x17, 0x3e, - 0xf0, 0xd4, 0x6f, 0x11, 0xe6, 0x63, 0xbd, 0x38, 0x12, 0xa8, 0xbc, 0x78, 0xb3, 0xc6, 0x73, 0x11, - 0x8a, 0x1b, 0x3d, 0x02, 0x47, 0x7e, 0x5c, 0x80, 0x2e, 0xbf, 0xf2, 0xf0, 0x7d, 0xe1, 0xac, 0xa9, - 0xa1, 0x57, 0xc9, 0x22, 0x4e, 0x98, 0xb6, 0xb8, 0x40, 0x64, 0xfe, 0xd0, 0x30, 0x2e, 0x9a, 0xb3, - 0xd2, 0x35, 0x93, 0xfa, 0x8e, 0x79, 0x1e, 0x15, 0x37, 0xd0, 0x5b, 0x90, 0xf8, 0x6e, 0xf1, 0x2b, - 0xef, 0x2d, 0x09, 0x83, 0x24, 0xd5, 0x9d, 0x58, 0x7f, 0x8d, 0xc0, 0x47, 0xc3, 0xeb, 0x74, 0xb4, - 0x3c, 0xbf, 0xb3, 0x95, 0xa5, 0x66, 0x2f, 0x76, 0xb0, 0x3f, 0x8f, 0x06, 0x42, 0x32, 0x98, 0xb3, - 0xd3, 0x2a, 0xa5, 0xbf, 0xee, 0xbb, 0x99, 0xa1, 0xab, 0xa8, 0x66, 0x0e, 0x9d, 0x28, 0xd6, 0x7c, - 0x89, 0x89, 0xde, 0x99, 0x4f, 0xd3, 0x8f, 0xaa, 0x24, 0x31, 0xbc, 0x23, 0x02, 0xc1, 0xd9, 0xa1, - 0x71, 0xb4, 0x92, 0x28, 0x67, 0xb1, 0x27, 0x16, 0xe0, 0x8c, 0x0b, 0xfb, 0x82, 0x0f, 0xd9, 0xb7, - 0x58, 0x16, 0x82, 0xf7, 0x92, 0xba, 0x2a, 0xeb, 0x43, 0x3b, 0xb9, 0xf2, 0xe8, 0x6b, 0x39, 0x27, - 0xac, 0x41, 0xb2, 0xdc, 0x39, 0x73, 0x00, 0xfd, 0xcf, 0xd6, 0x8a, 0x28, 0xcb, 0x8b, 0x0f, 0x62, - 0xf3, 0xc2, 0x79, 0x23, 0x4b, 0xdd, 0x43, 0xc7, 0x82, 0x46, 0xfb, 0xd2, 0x10, 0x85, 0x89, 0xc8, - 0x4c, 0xee, 0xcc, 0xa2, 0xd1, 0xa1, 0xe1, 0xec, 0xd1, 0x00, 0x15, 0x61, 0xd0, 0x43, 0x83, 0x1d, - 0x52, 0x04, 0xae, 0x11, 0x69, 0x76, 0x93, 0x47, 0xbd, 0xa1, 0x41, 0xc3, 0x9c, 0xef, 0xf1, 0x84, - 0x1f, 0xe2, 0xcf, 0x5a, 0xe8, 0x9a, 0x48, 0x5f, 0x72, 0x8e, 0x6c, 0x93, 0xba, 0xc3, 0xd1, 0x00, - 0x10, 0x11, 0x47, 0x23, 0xb2, 0x74, 0x66, 0xcb, 0xdc, 0x36, 0x16, 0xf7, 0x93, 0xa1, 0x2e, 0xa0, - 0xd3, 0x3b, 0xc6, 0x16, 0xe7, 0xfe, 0x79, 0x76, 0x98, 0x4f, 0x2b, 0x2f, 0xc9, 0x90, 0xbf, 0xa0, - 0xe7, 0xd2, 0x16, 0x68, 0x8e, 0xf4, 0xca, 0x78, 0xc4, 0xcf, 0xcd, 0x8f, 0x7e, 0x1e, 0x14, 0x81, - 0x59, 0xf6, 0x30, 0xe5, 0x24, 0x83, 0x0f, 0x14, 0xf2, 0xbf, 0x7f, 0x87, 0xbb, 0xee, 0xc6, 0xde, - 0x4d, 0x0c, 0x26, 0x09, 0x08, 0xf4, 0xd1, 0x03, 0xd0, 0x50, 0x9c, 0x7f, 0x08, 0x90, 0xe9, 0xf9, - 0xa3, 0x85, 0xbe, 0x3d, 0xce, 0xff, 0x60, 0x98, 0xff, 0xe9, 0x99, 0x90, 0x6e, 0x4c, 0x4b, 0xf8, - 0xcf, 0xd6, 0x2a, 0x27, 0x3a, 0xcf, 0x8e, 0xf4, 0x25, 0xe9, 0xcf, 0x87, 0xc8, 0x87, 0x49, 0x8a, - 0x2a, 0xca, 0x4c, 0x0b, 0x65, 0x05, 0xfc, 0xd1, 0x2f, 0x75, 0xc6, 0x6c, 0xb8, 0x5b, 0x13, 0xd1, - 0x8f, 0xbb, 0x45, 0x59, 0x94, 0x89, 0x71, 0xb6, 0x52, 0x49, 0xe7, 0x5f, 0x66, 0x66, 0xbc, 0xb8, - 0xbd, 0x99, 0xe3, 0xeb, 0xe2, 0x17, 0x8c, 0x2a, 0x98, 0x64, 0x7d, 0xdc, 0x11, 0x81, 0x19, 0x6e, - 0x8b, 0x7c, 0x90, 0xb0, 0x8d, 0x09, 0x3b, 0x98, 0x60, 0xec, 0xa4, 0xb3, 0xb9, 0xcd, 0xcd, 0x4f, - 0x8d, 0xaf, 0xd1, 0xf0, 0xd0, 0x01, 0x70, 0x60, 0xa8, 0xcb, 0xf1, 0xe6, 0xb9, 0xad, 0x2d, 0x8d, - 0xf3, 0x28, 0x72, 0xab, 0xe1, 0x60, 0xdf, 0xb2, 0x5b, 0x86, 0xef, 0xe5, 0x24, 0xe1, 0x22, 0x7c, - 0x71, 0xbc, 0x2e, 0xc0, 0x0e, 0xb3, 0x0e, 0x46, 0x97, 0x13, 0x0c, 0xfe, 0xb3, 0xc8, 0xc4, 0xc3, - 0x35, 0x8f, 0xf4, 0x43, 0x8c, 0x82, 0x45, 0xe9, 0x0b, 0x8b, 0x1e, 0xae, 0x69, 0x71, 0x3e, 0x2a, - 0x0f, 0xe9, 0xfd, 0xe8, 0x7a, 0x10, 0x29, 0x1c, 0xef, 0x84, 0xa7, 0xb8, 0x68, 0xf4, 0x70, 0x0b, - 0xd2, 0xb6, 0x92, 0x31, 0x41, 0x56, 0xb6, 0xb5, 0x55, 0x16, 0xf2, 0xef, 0x62, 0x2d, 0x96, 0xcd, - 0xda, 0x01, 0x9c, 0xf1, 0x31, 0xb8, 0x34, 0x8a, 0x2e, 0x86, 0x2b, 0x0f, 0x53, 0x40, 0x10, 0x3b, - 0x94, 0x08, 0xe9, 0x74, 0xda, 0x65, 0xc2, 0x93, 0x6f, 0x5e, 0xf1, 0x25, 0x06, 0x52, 0x67, 0xbc, - 0x01, 0x3d, 0x68, 0xfc, 0xab, 0x0c, 0x50, 0xce, 0x0f, 0xa0, 0xbf, 0xb9, 0xc9, 0x9e, 0x4c, 0x7e, - 0x11, 0x79, 0x20, 0x81, 0xd7, 0x7f, 0x12, 0x26, 0xef, 0xe5, 0xc0, 0x6a, 0xe4, 0xbf, 0xd3, 0x45, - 0xf9, 0xfb, 0x77, 0x74, 0xa7, 0x83, 0x5d, 0x18, 0x52, 0x6b, 0x33, 0x14, 0x89, 0x43, 0xbd, 0x81, - 0x34, 0x81, 0xd6, 0xe2, 0x6b, 0x2b, 0xcb, 0x63, 0xde, 0x3c, 0x10, 0xe5, 0x96, 0x86, 0x31, 0xf7, - 0x62, 0x25, 0x7a, 0x32, 0xda, 0x72, 0xa4, 0x42, 0x90, 0xd2, 0xa0, 0x04, 0x47, 0x63, 0x2a, 0xd2, - 0xe0, 0x8a, 0x30, 0xe7, 0xcb, 0xa5, 0x06, 0x26, 0x5e, 0x3a, 0x45, 0x73, 0x2d, 0xe5, 0x68, 0xeb, - 0x0b, 0x86, 0xc3, 0x24, 0xbe, 0x5f, 0x92, 0x82, 0x84, 0xcd, 0x9b, 0x13, 0x70, 0xf5, 0x7d, 0x50, - 0x6e, 0x68, 0x7d, 0x54, 0x6c, 0x11, 0x71, 0xd1, 0x2f, 0xb7, 0xb1, 0x9d, 0xf1, 0xbe, 0xa0, 0x92, - 0xd8, 0xce, 0xe0, 0x69, 0x2b, 0xfe, 0xf6, 0xdd, 0x81, 0xbe, 0x93, 0xf8, 0x7f, 0xb2, 0xb9, 0x0c, - 0x2b, 0x74, 0xc7, 0x00, 0x00 + 0xa4, 0x84, 0xa9, 0xd0, 0x85, 0x06, 0x50, 0xe7, 0x21, 0xf2, 0xa5, 0xdc, 0x82, 0x9d, 0x67, 0xe2, + 0x53, 0x8a, 0xab, 0xc1, 0x8b, 0x4a, 0xdd, 0xed, 0xc2, 0x11, 0x50, 0x0c, 0xd8, 0x04, 0xf4, 0x70, + 0x80, 0x14, 0x23, 0xdd, 0x9d, 0x84, 0x3d, 0xef, 0xa8, 0x1b, 0xc9, 0x82, 0x17, 0x65, 0xeb, 0x21, + 0xbe, 0xb3, 0xb8, 0x30, 0x13, 0x72, 0x34, 0xfe, 0x73, 0xf6, 0xf9, 0x85, 0xfc, 0xfe, 0x1d, 0x34, + 0xc1, 0xcf, 0x42, 0x3b, 0x0c, 0xec, 0x81, 0xe1, 0xfd, 0x26, 0xc4, 0x4f, 0xa3, 0x6e, 0x8c, 0x42, + 0x9e, 0xe4, 0x79, 0xdf, 0x48, 0x46, 0x59, 0xb1, 0xd9, 0xf8, 0xc8, 0xf0, 0xec, 0x68, 0x78, 0x56, + 0xf1, 0xf1, 0x0d, 0x0e, 0x10, 0x42, 0xc8, 0x77, 0xce, 0x82, 0x5d, 0x95, 0x63, 0xd6, 0x69, 0x0c, + 0xff, 0x90, 0xfc, 0x02, 0xf5, 0x90, 0x95, 0x41, 0x0f, 0x41, 0xdb, 0x6a, 0x30, 0xcb, 0x33, 0x7a, + 0x76, 0x84, 0xef, 0x31, 0xe0, 0x5e, 0x98, 0x36, 0xcc, 0x71, 0x92, 0x1d, 0xf6, 0xa3, 0x26, 0x10, + 0x73, 0x41, 0x27, 0xbc, 0xcf, 0xba, 0xd0, 0xc5, 0x88, 0x5e, 0x22, 0x05, 0x06, 0x0e, 0xeb, 0xed, + 0xbb, 0xbf, 0x2b, 0x00, 0x0e, 0xbe, 0xcd, 0xb8, 0x11, 0xc7, 0x36, 0x86, 0x6f, 0x7c, 0x0d, 0x3d, + 0xb9, 0xb1, 0xe5, 0xc8, 0xf6, 0x12, 0x9a, 0x0b, 0x21, 0x87, 0xa6, 0x10, 0x66, 0x7c, 0x37, 0x03, + 0xbb, 0xba, 0x21, 0xe0, 0x65, 0x50, 0x82, 0x71, 0x5d, 0xf0, 0x2a, 0x09, 0xaa, 0xf6, 0x5b, 0x78, + 0x46, 0x01, 0x63, 0xc2, 0x5b, 0x86, 0x1a, 0x13, 0x1e, 0x28, 0x66, 0xea, 0x18, 0xd7, 0xd8, 0x46, + 0x96, 0x7d, 0x7b, 0xd3, 0xde, 0xaa, 0x70, 0x73, 0x01, 0xbf, 0x23, 0x54, 0x73, 0xff, 0xa2, 0x2f, + 0x69, 0xf2, 0x7f, 0x59, 0x96, 0xe8, 0xf1, 0x18, 0xa0, 0xe3, 0x3b, 0x0a, 0xe2, 0x8a, 0x02, 0x72, + 0x10, 0x9d, 0x31, 0x8d, 0xca, 0x0c, 0x0b, 0x99, 0x82, 0xa5, 0x7c, 0x2c, 0x58, 0xf8, 0x15, 0x78, + 0x3e, 0x24, 0x54, 0x10, 0x4f, 0xa8, 0xf0, 0x7e, 0x6b, 0x24, 0xba, 0x7b, 0xf3, 0xb5, 0xf0, 0xb2, + 0xc4, 0xa0, 0x27, 0xb0, 0x74, 0x1c, 0x0b, 0x34, 0x07, 0xc2, 0x6e, 0xee, 0xfc, 0xb5, 0x23, 0x87, + 0x65, 0xed, 0xde, 0xfb, 0x88, 0x51, 0xe4, 0x26, 0xdb, 0xcc, 0x34, 0x6a, 0x2c, 0x90, 0x12, 0xfe, + 0x0d, 0x8b, 0x0d, 0xe1, 0x28, 0x63, 0x33, 0x2f, 0xb2, 0x12, 0xe8, 0xa2, 0xe1, 0x38, 0x52, 0x42, + 0xd2, 0x8f, 0xbd, 0xc4, 0x7e, 0xf9, 0x58, 0xa4, 0x19, 0xef, 0x06, 0x37, 0x86, 0xa7, 0xf3, 0xa7, + 0x21, 0xf8, 0xb2, 0x40, 0x83, 0x55, 0xf9, 0xce, 0x85, 0xbe, 0x30, 0x80, 0x1f, 0xe8, 0x02, 0x82, + 0x0b, 0xa5, 0xe0, 0xd7, 0xf0, 0x78, 0x4f, 0xaf, 0xf0, 0x3f, 0x94, 0x14, 0x55, 0x66, 0x19, 0x90, + 0x85, 0x3a, 0x1b, 0x1f, 0x80, 0x7f, 0xda, 0xe4, 0x4f, 0x57, 0x78, 0x58, 0xd8, 0x7f, 0x2f, 0x62, + 0x94, 0xf7, 0xc0, 0xb3, 0xbb, 0x93, 0xfe, 0xf8, 0x98, 0xbf, 0x24, 0x3d, 0x81, 0x5a, 0x35, 0x00, + 0x5a, 0xec, 0x8f, 0x47, 0x70, 0xee, 0xc1, 0x0b, 0x8f, 0xc2, 0x83, 0xb4, 0x72, 0x18, 0xec, 0x13, + 0x45, 0xbe, 0xcf, 0xb2, 0x57, 0x04, 0xd8, 0x50, 0x08, 0x64, 0xeb, 0x32, 0x0c, 0xaf, 0xbe, 0x36, + 0x07, 0x39, 0x15, 0xae, 0x68, 0x06, 0x83, 0x75, 0xca, 0xfb, 0x5c, 0x43, 0x5c, 0x5f, 0x23, 0x71, + 0x6d, 0x8d, 0x16, 0x1e, 0xad, 0xd4, 0xed, 0x56, 0x97, 0xf5, 0xe3, 0xfe, 0x7f, 0x54, 0xda, 0x3f, + 0xbb, 0x60, 0x6f, 0xfe, 0xc0, 0x58, 0xcc, 0xed, 0x58, 0xdd, 0xfa, 0xfa, 0xac, 0x46, 0x5c, 0xbd, + 0x8c, 0x62, 0x30, 0xe4, 0x26, 0xe3, 0x1b, 0x5b, 0xc8, 0x5c, 0x71, 0x20, 0xeb, 0x17, 0x9f, 0xf6, + 0x9c, 0x35, 0xea, 0x8b, 0x1c, 0x33, 0xfb, 0x6b, 0x05, 0xfc, 0x65, 0x65, 0xd7, 0x2b, 0x9d, 0xfb, + 0xf5, 0xf9, 0xde, 0x78, 0x0e, 0x23, 0x24, 0xb6, 0x0e, 0x41, 0xda, 0xac, 0xd1, 0xb3, 0x22, 0xdc, + 0x6c, 0x6b, 0x8b, 0x13, 0x7f, 0x82, 0xdb, 0xf1, 0xa2, 0x8f, 0xf3, 0x79, 0x34, 0xbc, 0x4b, 0x24, + 0xd2, 0x6c, 0xf8, 0x5a, 0x51, 0x38, 0xe2, 0xa8, 0xd7, 0xb9, 0xfa, 0xa2, 0x7b, 0x0b, 0x64, 0x07, + 0x69, 0x2b, 0xe7, 0x30, 0x14, 0x6a, 0x36, 0x3e, 0x42, 0x0f, 0x0b, 0x2b, 0x20, 0x6d, 0x6e, 0xae, + 0xea, 0x01, 0xfd, 0xc6, 0x21, 0x88, 0x66, 0xe6, 0x9d, 0x46, 0xc6, 0xc9, 0x99, 0x4c, 0xfa, 0xd2, + 0x48, 0x33, 0xed, 0x1a, 0xe7, 0x0c, 0x4c, 0x13, 0x1d, 0x29, 0x29, 0xa0, 0x9a, 0x1f, 0x81, 0x3a, + 0x36, 0xce, 0x70, 0xd4, 0xde, 0xf0, 0x30, 0x97, 0x3b, 0xf8, 0x17, 0x46, 0xb9, 0x02, 0x57, 0x9f, + 0x1f, 0x66, 0xb4, 0x07, 0x7f, 0x63, 0x94, 0x0b, 0x37, 0x9c, 0xf5, 0xb4, 0x01, 0xdc, 0xfa, 0x8b, + 0xef, 0xdd, 0x43, 0x7e, 0xce, 0x97, 0xab, 0xa3, 0xf3, 0xcc, 0xfa, 0xea, 0xa0, 0x9b, 0xd5, 0x02, + 0xb9, 0x3d, 0x4c, 0x63, 0xd4, 0xab, 0x24, 0xb0, 0x0a, 0x47, 0xa1, 0x7a, 0xd1, 0x6e, 0x49, 0x43, + 0xe4, 0x67, 0xb1, 0x99, 0x10, 0x96, 0xdb, 0xe9, 0x4e, 0x6a, 0xe1, 0xcb, 0x9e, 0xdd, 0x89, 0x4a, + 0xba, 0x68, 0xce, 0x88, 0x01, 0xf5, 0x63, 0xb1, 0xfa, 0x82, 0x61, 0x9c, 0x94, 0x57, 0x40, 0x86, + 0x59, 0xaa, 0x91, 0x38, 0x1c, 0xfa, 0x69, 0xb2, 0xe8, 0x70, 0x97, 0x06, 0xb9, 0xac, 0xd1, 0xf2, + 0x71, 0xc4, 0xb1, 0x30, 0xe2, 0x2b, 0xd0, 0xe6, 0x4c, 0x56, 0xc2, 0x8a, 0x28, 0x20, 0x4b, 0x18, + 0x0b, 0x05, 0xd1, 0x5e, 0x35, 0x13, 0xab, 0x41, 0x2e, 0x69, 0x2d, 0x4b, 0x60, 0x31, 0xc0, 0x62, + 0x7c, 0x6e, 0xd1, 0xcd, 0x96, 0xc4, 0x71, 0xcb, 0x6e, 0x36, 0x04, 0x0c, 0x6f, 0x86, 0x1a, 0xf5, + 0xbc, 0x1e, 0xb9, 0xa3, 0x89, 0x07, 0x8a, 0xa0, 0xc8, 0x53, 0xc1, 0x34, 0x24, 0x7e, 0xf8, 0x9f, + 0x7b, 0xb4, 0xfc, 0x8b, 0xa1, 0xfe, 0x8d, 0x51, 0xcf, 0x21, 0x96, 0xfa, 0xc2, 0x46, 0xe6, 0xc6, + 0x8d, 0xb4, 0x1d, 0x68, 0x81, 0xe8, 0x86, 0x84, 0xa1, 0x13, 0x49, 0x7d, 0xc1, 0x74, 0xd7, 0x6b, + 0xbd, 0x4b, 0x47, 0x97, 0x78, 0x62, 0xb9, 0xc2, 0x10, 0x3f, 0x99, 0xd0, 0x50, 0x69, 0xf5, 0x58, + 0x36, 0x35, 0x8a, 0x7b, 0x79, 0x02, 0x22, 0x80, 0x6e, 0x69, 0x49, 0x77, 0xad, 0xa2, 0x1b, 0x51, + 0x26, 0x97, 0x94, 0x53, 0xf2, 0xf3, 0x43, 0x7b, 0x24, 0x55, 0x7b, 0x50, 0xd8, 0xeb, 0x43, 0xdf, + 0x17, 0x4e, 0x03, 0x2d, 0xef, 0xa4, 0x8a, 0x7e, 0xa6, 0xa9, 0x81, 0x47, 0x55, 0x40, 0xe0, 0xb3, + 0x7e, 0x4d, 0x14, 0x1c, 0xf8, 0x37, 0xc2, 0x8f, 0xfb, 0x82, 0x34, 0x17, 0xb9, 0xea, 0x1c, 0x5c, + 0x02, 0xf0, 0x4e, 0x45, 0x53, 0x45, 0x91, 0xaf, 0xab, 0xe6, 0x8c, 0xa4, 0xfb, 0xe1, 0x62, 0xf9, + 0x52, 0xac, 0x1c, 0x3f, 0x87, 0xde, 0xea, 0x24, 0x49, 0x13, 0x25, 0x19, 0x6f, 0x00, 0xf4, 0x69, + 0xdc, 0xbf, 0x3e, 0x1e, 0x64, 0xf1, 0x75, 0xd6, 0x39, 0x48, 0x9c, 0x2f, 0x10, 0x42, 0x28, 0x76, + 0xfc, 0x6f, 0x87, 0x2c, 0x9d, 0xbe, 0x04, 0xa3, 0xf3, 0x18, 0x2c, 0x8b, 0xcd, 0xc0, 0xa2, 0xda, + 0xc1, 0x66, 0x5e, 0x0f, 0xe1, 0xec, 0x3a, 0x64, 0x1b, 0xb2, 0xc3, 0xc8, 0x3c, 0x08, 0x65, 0xf4, + 0x22, 0xf6, 0xa4, 0xb0, 0x35, 0xa9, 0x1e, 0x06, 0xdd, 0x27, 0x93, 0x0e, 0x55, 0x78, 0x3c, 0x53, + 0x38, 0x3c, 0xf9, 0x17, 0x2f, 0xdc, 0x88, 0xbd, 0xa0, 0xee, 0xe2, 0xdd, 0x09, 0x3c, 0x50, 0xea, + 0x78, 0xa5, 0x4a, 0x91, 0xa8, 0x01, 0xfe, 0xf7, 0x9f, 0x30, 0x6e, 0x00, 0x6b, 0x2a, 0xdc, 0x0c, + 0x4d, 0xf1, 0xec, 0xc8, 0x30, 0x25, 0x91, 0x1e, 0x0c, 0x61, 0xd7, 0x8d, 0xa4, 0x38, 0x92, 0x3b, + 0xb4, 0xa9, 0xca, 0xe3, 0xcd, 0x1a, 0x68, 0x79, 0x9a, 0x6d, 0xa6, 0x5b, 0xac, 0xbc, 0x33, 0xba, + 0x31, 0xf1, 0x2b, 0x34, 0x0e, 0x1e, 0x76, 0x7b, 0x46, 0x13, 0x23, 0xcd, 0x0c, 0x26, 0x46, 0xba, + 0xe7, 0xfd, 0xca, 0xb8, 0x5a, 0xa0, 0x2f, 0x06, 0x99, 0xf8, 0xa7, 0x65, 0x1d, 0x4d, 0xd6, 0xe9, + 0x48, 0x57, 0x47, 0xfc, 0x59, 0x73, 0xde, 0x88, 0xd1, 0xbe, 0x12, 0xe2, 0x3f, 0x05, 0x7a, 0x84, + 0xcb, 0xff, 0x0a, 0xa3, 0xf5, 0x24, 0x40, 0x6b, 0xb8, 0xfb, 0x2f, 0x44, 0x1f, 0x69, 0x46, 0x94, + 0x29, 0xf8, 0x24, 0xe0, 0x31, 0x05, 0xd4, 0x9f, 0x82, 0x11, 0xa1, 0xed, 0xcc, 0x65, 0x70, 0x76, + 0xc4, 0xef, 0x11, 0x44, 0x10, 0xbc, 0x08, 0x55, 0x8b, 0x25, 0xb5, 0xd8, 0x87, 0x6d, 0x92, 0x1c, + 0x60, 0x02, 0xc6, 0x0a, 0xff, 0xc2, 0xe4, 0xe4, 0x7d, 0x65, 0x6b, 0xf6, 0x61, 0xa5, 0xa5, 0xa8, + 0x91, 0x8b, 0x29, 0xf4, 0x59, 0x60, 0x04, 0xe8, 0xc9, 0x32, 0xd0, 0xe4, 0x8c, 0x8d, 0xb5, 0xb6, + 0x0e, 0x56, 0x80, 0xa0, 0x79, 0x0c, 0x18, 0xfd, 0x8a, 0xd0, 0x6c, 0x81, 0x19, 0xcf, 0x2b, 0x60, + 0x15, 0x91, 0xa3, 0x8f, 0xc0, 0x2a, 0x1a, 0x8f, 0xa5, 0xef, 0x2e, 0x9a, 0xfa, 0xb5, 0x66, 0xa5, + 0x05, 0x89, 0x11, 0x69, 0x34, 0xce, 0x18, 0xb3, 0xc0, 0x3a, 0x36, 0x37, 0xa3, 0x71, 0x53, 0x1a, + 0x0d, 0x97, 0xad, 0x82, 0xd5, 0x1c, 0x6d, 0x73, 0xf3, 0x43, 0x6c, 0x53, 0x17, 0x88, 0x77, 0x81, + 0xc4, 0x57, 0x3c, 0x5b, 0x66, 0x42, 0xee, 0x0b, 0x76, 0x27, 0x19, 0x5e, 0x8a, 0x8d, 0x55, 0x3b, + 0x58, 0xc0, 0x48, 0x03, 0xff, 0x94, 0x18, 0x3c, 0x01, 0x56, 0x1e, 0xdd, 0x02, 0x21, 0xa5, 0xf6, + 0xe3, 0x87, 0x09, 0xac, 0xc3, 0x04, 0x2e, 0x61, 0xa6, 0x65, 0x21, 0x0c, 0xfc, 0xa7, 0xf0, 0x03, + 0xff, 0x0f, 0xe2, 0x4d, 0x3d, 0x4b, 0x9b, 0x8e, 0xa9, 0x06, 0xab, 0x35, 0x16, 0xd0, 0xdb, 0xd1, + 0x24, 0xd2, 0x4b, 0x77, 0x27, 0x20, 0xa9, 0x08, 0x80, 0x43, 0x04, 0xf6, 0x3d, 0xda, 0x24, 0xc0, + 0x7d, 0xaf, 0x55, 0x68, 0xb2, 0x96, 0x63, 0x15, 0xa9, 0xad, 0x25, 0x56, 0xf5, 0xbd, 0xda, 0x28, + 0x8c, 0x45, 0x36, 0x46, 0x27, 0x26, 0xa8, 0x78, 0x9f, 0x31, 0x5a, 0x29, 0x9c, 0x29, 0x8a, 0x1b, + 0x96, 0x9a, 0xe6, 0xde, 0x7d, 0xd6, 0xbe, 0x12, 0xde, 0x5d, 0xf0, 0x40, 0xe0, 0xe0, 0x10, 0xcf, + 0x7e, 0xd8, 0x89, 0x0e, 0xbe, 0x27, 0x83, 0x08, 0x4f, 0x5e, 0x00, 0x59, 0x0c, 0x76, 0x7b, 0x66, + 0x9a, 0xc6, 0x99, 0xa9, 0x0e, 0x75, 0xe2, 0x64, 0xd0, 0x59, 0x37, 0x33, 0xd6, 0x5e, 0x40, 0xf4, + 0x99, 0x7b, 0x92, 0x89, 0x0d, 0x73, 0xc4, 0xee, 0xd1, 0xfa, 0x3a, 0x71, 0x32, 0xd9, 0x57, 0x52, + 0x8d, 0x6c, 0x85, 0xdf, 0xc9, 0xd3, 0x50, 0x15, 0xd8, 0x2e, 0x2f, 0xf4, 0x95, 0x9d, 0x9c, 0xff, + 0x9a, 0x17, 0x4b, 0x80, 0xd2, 0x42, 0xa1, 0xd1, 0xe8, 0x2b, 0x34, 0x25, 0xd5, 0xc8, 0x63, 0x8a, + 0x58, 0x09, 0xa5, 0x00, 0x00, 0xc6, 0x9a, 0x58, 0x04, 0x6f, 0x7f, 0x7e, 0xe8, 0xf4, 0x37, 0x7e, + 0xf5, 0x1d, 0x8c, 0x66, 0xd6, 0x57, 0xe6, 0x18, 0x1a, 0x0e, 0x99, 0x59, 0x11, 0x14, 0xe3, 0x5f, + 0xfc, 0x5c, 0xa8, 0x66, 0x45, 0x46, 0x2f, 0x8a, 0xd1, 0xb5, 0x23, 0x16, 0xc4, 0x45, 0x58, 0x71, + 0x7a, 0x64, 0x81, 0xf9, 0x11, 0xe1, 0x3f, 0x88, 0x44, 0x1e, 0x04, 0x7c, 0x20, 0x91, 0x36, 0xb9, + 0xaf, 0xf8, 0x61, 0x45, 0x81, 0x84, 0x0e, 0x67, 0x39, 0xfa, 0x91, 0x60, 0x7b, 0x90, 0x60, 0x61, + 0xca, 0x39, 0x6a, 0xb4, 0x4f, 0xb2, 0x96, 0x61, 0xa1, 0xae, 0xf9, 0x2e, 0x31, 0x6d, 0x88, 0x5b, + 0x7d, 0x2d, 0x3f, 0x72, 0x15, 0x3b, 0xee, 0x15, 0xc6, 0xba, 0xe5, 0xed, 0x65, 0xef, 0x44, 0x4d, + 0x90, 0xf4, 0x09, 0x73, 0x2e, 0x70, 0x79, 0xd7, 0x9e, 0x22, 0x98, 0x64, 0xe4, 0x0c, 0xce, 0x65, + 0x7e, 0x00, 0x23, 0x3c, 0xbb, 0x0e, 0x4e, 0x91, 0xf0, 0x76, 0x9a, 0x1f, 0xa1, 0x21, 0xd4, 0x68, + 0x03, 0xc3, 0x5a, 0xd0, 0x61, 0xb1, 0x7b, 0xd2, 0xfc, 0xdc, 0x8b, 0xa0, 0xc5, 0xcf, 0xe6, 0x91, + 0x72, 0xb3, 0x39, 0xde, 0x3e, 0x8b, 0x8c, 0x43, 0x14, 0xbc, 0x48, 0x48, 0xeb, 0x82, 0x99, 0xd2, + 0x9e, 0xc6, 0x03, 0x65, 0xcc, 0xac, 0x5a, 0x24, 0x8a, 0x37, 0x74, 0xac, 0x16, 0xee, 0xe5, 0x1c, + 0x3d, 0x18, 0x57, 0x45, 0x3a, 0x88, 0xc4, 0x8d, 0x89, 0x22, 0x14, 0x4f, 0x5c, 0x3f, 0x1d, 0xe8, + 0x60, 0xf2, 0xdd, 0xc2, 0xfd, 0x13, 0x04, 0xd4, 0xa8, 0xa3, 0xf0, 0xdf, 0x30, 0x6a, 0xfe, 0x05, + 0x6b, 0xa6, 0x09, 0x98, 0x8b, 0x20, 0x78, 0x39, 0x40, 0x49, 0x18, 0x4b, 0x66, 0xda, 0x02, 0x18, + 0xdb, 0x66, 0x7a, 0xf0, 0x3d, 0x1e, 0x85, 0x68, 0x09, 0x1b, 0xa9, 0x2c, 0x06, 0x5f, 0x16, 0x40, + 0xb0, 0xab, 0xb9, 0xc9, 0x68, 0x50, 0xb4, 0xa5, 0xcb, 0xf2, 0x61, 0xb6, 0x43, 0x3f, 0xf1, 0x81, + 0xc7, 0x7e, 0x8b, 0x38, 0x1f, 0xeb, 0xc5, 0x91, 0x40, 0xe5, 0xc5, 0xab, 0x35, 0x9e, 0x8f, 0x50, + 0xdc, 0xe8, 0x11, 0x78, 0xf2, 0xe3, 0x02, 0x74, 0xf9, 0x95, 0xa7, 0xef, 0x0b, 0x6f, 0x4d, 0x0d, + 0xdd, 0x4a, 0x16, 0x81, 0xc2, 0xb4, 0xc5, 0x0d, 0x22, 0xf3, 0x87, 0x86, 0x81, 0xd1, 0x9c, 0x95, + 0xbe, 0x99, 0xd4, 0x79, 0xcc, 0x73, 0xa9, 0xb8, 0x81, 0xde, 0x82, 0xc4, 0x77, 0x8b, 0x9f, 0x79, + 0x6f, 0x49, 0x18, 0x25, 0xa9, 0xee, 0xc4, 0xfa, 0x6b, 0x04, 0x4e, 0x1a, 0x5e, 0xa7, 0xa3, 0xe5, + 0xf9, 0x9d, 0xad, 0x2c, 0x35, 0x7b, 0xb1, 0x93, 0xfd, 0x79, 0x34, 0x12, 0x92, 0xc1, 0xbc, 0x9d, + 0x56, 0x29, 0xfd, 0x75, 0xdf, 0xcf, 0x0c, 0x7d, 0x45, 0x35, 0x73, 0xe8, 0x44, 0xb1, 0xe6, 0x4b, + 0x4c, 0xf4, 0xd2, 0x7c, 0x9a, 0x7e, 0x55, 0x25, 0x89, 0xf1, 0x1d, 0x11, 0x08, 0xce, 0x0e, 0x0d, + 0xa4, 0x95, 0x44, 0x39, 0x8b, 0x3d, 0xb1, 0x08, 0x67, 0x5c, 0xd8, 0x19, 0x7c, 0xc8, 0x3e, 0xc6, + 0xb2, 0x10, 0xbc, 0x97, 0xd4, 0x55, 0x59, 0x1f, 0xda, 0xc9, 0x95, 0x67, 0x5f, 0xcb, 0x39, 0x61, + 0x0d, 0x92, 0xe5, 0xce, 0x99, 0x07, 0xe8, 0x7f, 0xb6, 0x56, 0x84, 0x59, 0x5e, 0x7c, 0x11, 0x9b, + 0x17, 0xce, 0x1b, 0x59, 0xea, 0x1f, 0x3a, 0x16, 0x34, 0xda, 0x97, 0x86, 0x28, 0x4c, 0x44, 0x66, + 0x72, 0x67, 0x16, 0x8d, 0x0e, 0x8d, 0x67, 0x8f, 0x06, 0xa8, 0x08, 0x83, 0x1e, 0x1a, 0xec, 0x90, + 0x22, 0xf0, 0x8d, 0x48, 0xb3, 0xab, 0x3c, 0xea, 0x0d, 0x8d, 0x1a, 0xe6, 0x7c, 0x8f, 0x27, 0xfc, + 0x10, 0x7f, 0xd6, 0x42, 0xf7, 0x44, 0xfa, 0x92, 0x73, 0x64, 0x9b, 0xd4, 0x1f, 0x8e, 0x46, 0x80, + 0x88, 0x78, 0x1a, 0x91, 0xa5, 0x43, 0x5b, 0xe6, 0xb7, 0xb1, 0xb8, 0xa0, 0x0c, 0x75, 0x01, 0x9d, + 0xde, 0x39, 0xb6, 0x38, 0xf7, 0x0f, 0xb4, 0xc3, 0x7c, 0x5a, 0x79, 0x49, 0x86, 0x1c, 0x06, 0x3d, + 0x9f, 0xb6, 0x40, 0x73, 0xa4, 0x77, 0xc6, 0x23, 0x8e, 0x6e, 0x7e, 0xf8, 0xf3, 0xa0, 0x08, 0xcc, + 0xb2, 0x87, 0x29, 0x27, 0x19, 0x7c, 0xa1, 0x90, 0xff, 0xfd, 0x3b, 0xdc, 0x75, 0x37, 0xf6, 0x6e, + 0x62, 0x34, 0x49, 0x40, 0xa0, 0x8f, 0x1e, 0x80, 0x86, 0xe2, 0xfc, 0x43, 0x80, 0x4c, 0xcf, 0x21, + 0x2d, 0xf4, 0xf1, 0x71, 0xfe, 0x07, 0xc3, 0xfc, 0x4f, 0xcf, 0x84, 0x74, 0x63, 0x5a, 0xc2, 0x7f, + 0xb6, 0x56, 0x79, 0xd1, 0x79, 0x76, 0xa4, 0x2f, 0x49, 0x7f, 0x3e, 0x44, 0x3e, 0x4c, 0x52, 0x54, + 0x51, 0x66, 0x5a, 0x28, 0x2b, 0xe0, 0x8f, 0x7e, 0xa9, 0x33, 0x66, 0xc3, 0xdd, 0x9a, 0x88, 0x7e, + 0xe0, 0x2d, 0xca, 0xa2, 0x4c, 0x0c, 0xb4, 0x95, 0x4a, 0x3a, 0xff, 0x32, 0x33, 0xe3, 0xc5, 0xf5, + 0xcd, 0x1c, 0x5f, 0x17, 0xbf, 0x60, 0x58, 0xc1, 0x24, 0xeb, 0xe3, 0x8e, 0x08, 0xcc, 0x70, 0x5b, + 0xe4, 0x83, 0x84, 0x6d, 0x4c, 0xd8, 0xc1, 0x04, 0x63, 0x27, 0x9d, 0xcd, 0x6d, 0x6e, 0x7e, 0x6a, + 0x7c, 0x8d, 0x86, 0x87, 0x0e, 0x80, 0x03, 0x43, 0x5d, 0x0e, 0x38, 0xcf, 0x6d, 0x6d, 0x69, 0x9c, + 0x47, 0x91, 0x5b, 0x0d, 0x07, 0xfb, 0x96, 0xdd, 0x32, 0x7c, 0x37, 0x27, 0x09, 0x17, 0xe1, 0x8b, + 0xe3, 0x75, 0x01, 0x76, 0x98, 0x75, 0x30, 0xba, 0x9c, 0x60, 0xf0, 0x9f, 0x45, 0x26, 0x1e, 0xae, + 0x79, 0xa4, 0x1f, 0x62, 0x14, 0x2c, 0x4c, 0x5f, 0x58, 0xf4, 0x70, 0x4d, 0x8b, 0xf3, 0x51, 0x79, + 0x48, 0x2f, 0x48, 0xd7, 0x83, 0x50, 0xe1, 0x78, 0x29, 0x3c, 0xc5, 0x45, 0xc3, 0x87, 0x5b, 0x90, + 0xb6, 0x95, 0x8c, 0x09, 0xb2, 0xb2, 0xad, 0xad, 0xb2, 0x90, 0x7f, 0x17, 0x6b, 0xb1, 0x6c, 0xd6, + 0x0e, 0xe0, 0x8c, 0x8f, 0xc1, 0xa5, 0x61, 0x74, 0x31, 0x5e, 0x79, 0x98, 0x02, 0x82, 0xe0, 0xa1, + 0x44, 0x48, 0xa7, 0xd3, 0x2e, 0x13, 0x9e, 0x7c, 0xf3, 0x8a, 0x2f, 0x31, 0x90, 0x3a, 0xe3, 0x0d, + 0xe8, 0x42, 0xe3, 0xdf, 0x65, 0x80, 0x72, 0x7e, 0x04, 0xfd, 0xcd, 0x4d, 0xf6, 0x64, 0xf2, 0x8b, + 0xd0, 0x03, 0x09, 0xbc, 0xff, 0x93, 0x30, 0x79, 0x2f, 0x07, 0x56, 0x23, 0xff, 0x9d, 0x2e, 0xca, + 0xdf, 0xbf, 0xa3, 0x3b, 0x1d, 0xec, 0xc2, 0x90, 0x5a, 0x9b, 0xa1, 0x48, 0x1c, 0xea, 0x0d, 0xa4, + 0x09, 0xb4, 0x16, 0x5f, 0x5b, 0x59, 0x1e, 0xf3, 0xe6, 0x81, 0x28, 0xb7, 0x34, 0x8c, 0xb9, 0x17, + 0x2c, 0xd1, 0x93, 0xd1, 0x96, 0x43, 0x15, 0x82, 0x94, 0x06, 0x25, 0x38, 0x1a, 0x54, 0x91, 0x46, + 0x57, 0x84, 0x39, 0x5f, 0x2e, 0x35, 0x30, 0xf1, 0xd6, 0x29, 0x9a, 0x6b, 0x29, 0x47, 0x5b, 0x5f, + 0x30, 0x1c, 0x27, 0xf1, 0xfd, 0x92, 0x14, 0x24, 0x6c, 0xde, 0x9c, 0x80, 0xab, 0xef, 0x83, 0x72, + 0x43, 0xeb, 0xa3, 0x62, 0x8b, 0x90, 0x8b, 0x7e, 0xb9, 0x8d, 0xed, 0x8c, 0xf7, 0x09, 0x95, 0xc4, + 0x76, 0x06, 0x4f, 0x5b, 0xf1, 0xb7, 0xef, 0x0e, 0xf4, 0x9d, 0xc4, 0xff, 0x03, 0x07, 0xa1, 0x7c, + 0xe4, 0x75, 0xc7, 0x00, 0x00 }; diff --git a/wled00/html_ui.h b/wled00/html_ui.h index 5f879702..d055da22 100644 --- a/wled00/html_ui.h +++ b/wled00/html_ui.h @@ -2365,28 +2365,28 @@ const uint8_t PAGE_index[] PROGMEM = { 0xb8, 0xf1, 0xea, 0x11, 0x4c, 0x47, 0xc0, 0x4c, 0x0e, 0xe1, 0x74, 0x80, 0x57, 0xd3, 0x62, 0x39, 0xb5, 0x80, 0x19, 0xfe, 0x71, 0xb6, 0x22, 0x39, 0xee, 0x68, 0x0d, 0x3b, 0x09, 0x47, 0xf8, 0x29, 0x94, 0x07, 0x46, 0xad, 0x7d, 0x29, 0x00, 0x80, 0xac, 0xd7, 0xc2, 0x7d, 0x07, 0x6f, 0x45, 0x4f, - 0x82, 0x34, 0xf4, 0xa3, 0xd6, 0xcf, 0x37, 0xf3, 0x9b, 0xbc, 0xd3, 0xd4, 0x1e, 0xbf, 0xc5, 0x66, - 0x7a, 0xdf, 0xac, 0xa0, 0xbb, 0x9f, 0x5e, 0xbe, 0x5c, 0x41, 0x78, 0x52, 0x4e, 0x27, 0x7b, 0x91, - 0x21, 0x0c, 0x5f, 0x98, 0x63, 0x90, 0x3b, 0x45, 0x8d, 0x3f, 0xbd, 0xf4, 0xfd, 0xac, 0xf5, 0x12, - 0x9d, 0xf3, 0x44, 0x15, 0xd6, 0xe8, 0xff, 0xfc, 0xb7, 0xff, 0xfe, 0x5f, 0x0f, 0xf6, 0xfc, 0x3f, - 0xd8, 0x9a, 0xd7, 0x5f, 0xdd, 0x1a, 0x41, 0xa1, 0x7f, 0x4e, 0x83, 0xde, 0xbe, 0xfb, 0x8a, 0xf6, - 0x70, 0x18, 0xff, 0x6a, 0x43, 0xce, 0x87, 0xd5, 0xdd, 0xf8, 0xb3, 0x26, 0x2f, 0x17, 0x0a, 0x4c, - 0x7f, 0xe3, 0x7d, 0xbb, 0x69, 0x9f, 0xfe, 0xc3, 0x92, 0x62, 0x69, 0x24, 0xd0, 0xe8, 0x23, 0x41, - 0x83, 0x91, 0x98, 0x54, 0x0c, 0xd6, 0xe1, 0x6b, 0x8b, 0x2f, 0x65, 0xe0, 0xf3, 0x72, 0x05, 0xc2, - 0x79, 0xb5, 0xc3, 0xbc, 0x03, 0x0e, 0x39, 0xa9, 0x50, 0x0f, 0xad, 0x66, 0x23, 0x55, 0x0e, 0xb2, - 0x07, 0xc7, 0x5f, 0x0b, 0xa8, 0xf2, 0xcf, 0xac, 0x5e, 0x58, 0x1a, 0xec, 0xfd, 0xf4, 0xf2, 0xef, - 0xfc, 0xf3, 0x18, 0x24, 0xc9, 0x7e, 0xaf, 0xfb, 0xbc, 0xfb, 0xfc, 0xef, 0xfb, 0xfd, 0xfb, 0xfd, - 0xfe, 0xdf, 0x7b, 0xdf, 0x83, 0xd8, 0xb4, 0x87, 0x84, 0xfc, 0x5d, 0xbf, 0x3b, 0x87, 0xb7, 0xa2, - 0x19, 0xaf, 0xff, 0x5f, 0x34, 0x43, 0x14, 0xd3, 0x5b, 0xf2, 0xf6, 0xdd, 0x9f, 0xd9, 0x10, 0x26, - 0xcc, 0x0c, 0x6b, 0xae, 0x33, 0xee, 0x29, 0x89, 0x5f, 0x01, 0x9e, 0x80, 0xc2, 0x99, 0x9d, 0xd0, - 0xbf, 0x31, 0x6a, 0x4d, 0x9a, 0x8c, 0x35, 0x24, 0xd1, 0xec, 0x25, 0x2a, 0x12, 0x3f, 0x99, 0xf4, - 0x8c, 0x95, 0x8a, 0xb7, 0x49, 0xaa, 0xcd, 0xe1, 0x23, 0xa4, 0xd6, 0x5f, 0xac, 0x15, 0x8c, 0xd5, - 0x29, 0xc8, 0x20, 0x6e, 0x12, 0x12, 0x0b, 0xe2, 0x8e, 0x4d, 0xe2, 0x46, 0xa3, 0xa4, 0xd8, 0x24, - 0xf0, 0x92, 0x98, 0x01, 0x87, 0x8d, 0x4d, 0xbf, 0x7c, 0xbe, 0xf7, 0x44, 0xf0, 0x12, 0xa6, 0xdb, - 0x96, 0xac, 0x84, 0x52, 0x9f, 0xec, 0xd1, 0x9f, 0x39, 0x17, 0x24, 0x99, 0x88, 0x12, 0x16, 0xa2, - 0x8c, 0x16, 0x65, 0x35, 0x9e, 0x06, 0xe9, 0x1b, 0x44, 0x6b, 0xb7, 0x1d, 0xf1, 0x72, 0xa1, 0x98, - 0x14, 0x79, 0x63, 0xdc, 0x07, 0x11, 0x7b, 0x23, 0x10, 0x74, 0x72, 0x90, 0xba, 0x2d, 0xb2, 0x68, - 0x7e, 0x93, 0x26, 0xd7, 0x32, 0x74, 0x8b, 0xf6, 0x86, 0x7e, 0x38, 0xb2, 0x2a, 0xfe, 0xea, 0xf2, - 0x7c, 0xa9, 0xab, 0x0e, 0xf6, 0x10, 0x49, 0x1e, 0xff, 0x5e, 0xe5, 0xd7, 0xd1, 0xa8, 0xf5, 0x7f, - 0x01, 0x78, 0x06, 0xe4, 0x5a, 0x50, 0xdc, 0x01, 0x00 + 0x82, 0x34, 0xf4, 0xa3, 0xd6, 0xcf, 0x37, 0xf9, 0xfc, 0x26, 0xef, 0x34, 0x35, 0xc8, 0x6f, 0xb1, + 0x9d, 0xde, 0x37, 0x2b, 0x08, 0xef, 0xa7, 0x97, 0x2f, 0x57, 0x50, 0x9e, 0x14, 0xd4, 0xc9, 0x60, + 0x64, 0x08, 0xe3, 0x17, 0xe6, 0x18, 0xe5, 0x4e, 0x91, 0xe3, 0x4f, 0x2f, 0x7d, 0x3f, 0x6b, 0xbd, + 0x44, 0xef, 0x3c, 0x51, 0x85, 0x35, 0xfa, 0x3f, 0xff, 0xed, 0xbf, 0xff, 0xd7, 0x83, 0x3d, 0xff, + 0x0f, 0xb6, 0xe6, 0xf5, 0x57, 0xb7, 0x46, 0x90, 0xe8, 0x9f, 0xd3, 0xa0, 0xb7, 0xef, 0xbe, 0xa2, + 0x3d, 0x1c, 0xc7, 0xbf, 0xda, 0x90, 0xf3, 0x61, 0x75, 0x3b, 0xfe, 0xac, 0x09, 0xcc, 0x85, 0x06, + 0xd3, 0xdf, 0x78, 0xe3, 0x6e, 0xda, 0xa8, 0xff, 0xb0, 0xa8, 0x58, 0x1a, 0x09, 0xb4, 0xfa, 0x48, + 0xd0, 0x62, 0x24, 0x26, 0x1d, 0x83, 0x75, 0xf8, 0xda, 0xe2, 0x5b, 0x19, 0xf8, 0xbc, 0x5c, 0x82, + 0x70, 0x60, 0xed, 0x30, 0xf3, 0x80, 0x53, 0x4e, 0x2a, 0xf4, 0x43, 0xab, 0xf9, 0x48, 0x95, 0x85, + 0xec, 0xc1, 0xf9, 0xd7, 0x02, 0xaa, 0xfc, 0x33, 0xab, 0x17, 0xa6, 0x06, 0x7b, 0x3f, 0xbd, 0xfc, + 0x3b, 0xff, 0x3c, 0x06, 0x51, 0xb2, 0xdf, 0xeb, 0x3e, 0xef, 0x3e, 0xff, 0xfb, 0x7e, 0xff, 0x7e, + 0xbf, 0xff, 0xf7, 0xde, 0xf7, 0x20, 0x37, 0xed, 0x21, 0x21, 0x7f, 0xd7, 0xef, 0xce, 0xe1, 0xad, + 0x68, 0xc6, 0xeb, 0xff, 0x17, 0xcd, 0x10, 0xc5, 0xf4, 0x96, 0xbc, 0x7d, 0xf7, 0x67, 0x36, 0x84, + 0x09, 0x33, 0xc3, 0x9a, 0xeb, 0xac, 0x7b, 0x4a, 0xf2, 0x57, 0x80, 0x47, 0xa0, 0x70, 0x66, 0x27, + 0xf4, 0x6f, 0x8c, 0x6a, 0x93, 0x26, 0x6b, 0x0d, 0x49, 0x34, 0x7b, 0x89, 0x0a, 0xc5, 0x4f, 0x36, + 0x3d, 0x63, 0xa5, 0xe3, 0x6d, 0x12, 0x6b, 0x73, 0xf8, 0x08, 0xe9, 0xf5, 0x17, 0x6b, 0x25, 0x63, + 0x75, 0x0c, 0x32, 0x88, 0x9b, 0xa4, 0xc4, 0x82, 0xb8, 0x63, 0x93, 0xb8, 0xd1, 0x2a, 0x29, 0x36, + 0x09, 0xbc, 0x24, 0x67, 0xc0, 0x69, 0x63, 0xd3, 0x2f, 0x9f, 0xef, 0x3d, 0x11, 0xbc, 0x84, 0xe9, + 0xb6, 0x25, 0x2b, 0xa1, 0xd4, 0x27, 0x7b, 0xf4, 0x67, 0xce, 0x05, 0x49, 0x28, 0xa2, 0x84, 0x85, + 0x28, 0xa3, 0x85, 0x59, 0x8d, 0xa7, 0x41, 0xfa, 0x06, 0xe1, 0xda, 0x6d, 0x47, 0xbc, 0x5c, 0x28, + 0x26, 0x45, 0xee, 0x18, 0xf7, 0x41, 0xc4, 0xee, 0x08, 0x84, 0x9d, 0x1c, 0xa4, 0x6e, 0x8b, 0x4c, + 0x9a, 0xdf, 0xa4, 0xc9, 0xb5, 0x8c, 0xdd, 0xa2, 0xbd, 0xa1, 0x1f, 0x8e, 0xac, 0x8a, 0xbf, 0xba, + 0x3c, 0x5f, 0xea, 0xba, 0x83, 0x3d, 0x84, 0x92, 0xc7, 0xbf, 0x57, 0xf9, 0x75, 0x34, 0x6a, 0xfd, + 0x5f, 0xfd, 0xef, 0xeb, 0x4b, 0x51, 0xdc, 0x01, 0x00 }; From 075cc2d76cc30cffabcb452c1f9bc33ca795b544 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Fri, 15 Dec 2023 00:34:05 +0100 Subject: [PATCH 049/108] PSRAM update In MM we can have PSRAM without defining WLED_USE_PSRAM --- wled00/const.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/const.h b/wled00/const.h index 90ba726b..a89e2298 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -471,7 +471,7 @@ //this is merely a default now and can be changed at runtime #ifndef LEDPIN -#if defined(ESP8266) || (defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32_PICO) +#if defined(ESP8266) || (defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(ARDUINO_ESP32_PICO) //WLEDMM #define LEDPIN 2 // GPIO2 (D4) on Wemos D1 mini compatible boards, and on boards where GPIO16 is not available #else #define LEDPIN 16 // aligns with GPIO2 (D4) on Wemos D1 mini32 compatible boards From 52ceabb5052e60a2fd2f7b79f528caf6a9e2e8e9 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Dec 2023 21:58:05 +0100 Subject: [PATCH 050/108] LDR_Dusk_Dawn: use pinManager, check ldrPin before use (quick-fix for #3490) --- .../usermod_LDR_Dusk_Dawn_v2.h | 33 +++++++++++++++++-- wled00/pin_manager.h | 3 +- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/usermods/LDR_Dusk_Dawn_v2/usermod_LDR_Dusk_Dawn_v2.h b/usermods/LDR_Dusk_Dawn_v2/usermod_LDR_Dusk_Dawn_v2.h index 21f39090..393fc223 100644 --- a/usermods/LDR_Dusk_Dawn_v2/usermod_LDR_Dusk_Dawn_v2.h +++ b/usermods/LDR_Dusk_Dawn_v2/usermod_LDR_Dusk_Dawn_v2.h @@ -1,6 +1,11 @@ #pragma once #include "wled.h" +#ifndef ARDUINO_ARCH_ESP32 + // 8266 does not support analogRead on user selectable pins + #error only ESP32 is supported by usermod LDR_DUSK_DAWN +#endif + class LDR_Dusk_Dawn_v2 : public Usermod { private: // Defaults @@ -12,22 +17,30 @@ class LDR_Dusk_Dawn_v2 : public Usermod { int ldrOffPreset = 2; // Default "Off" Preset // Variables + bool initDone = false; bool ldrEnabledPreviously = false; // Was LDR enabled for the previous check? First check is always no. int ldrOffCount; // Number of readings above the threshold int ldrOnCount; // Number of readings below the threshold - int ldrReading; // Last LDR reading + int ldrReading = 0; // Last LDR reading int ldrLEDState; // Current LED on/off state unsigned long lastMillis = 0; static const char _name[]; public: void setup() { + // register ldrPin + if ((ldrPin >= 0) && (digitalPinToAnalogChannel(ldrPin) >= 0)) { + if(!pinManager.allocatePin(ldrPin, false, PinOwner::UM_LDR_DUSK_DAWN)) ldrEnabled = false; // pin already in use -> disable usermod + else pinMode(ldrPin, INPUT); // alloc success -> configure pin for input + } else ldrEnabled = false; // invalid pin -> disable usermod + initDone = true; } void loop() { // Only update every 10 seconds if (millis() - lastMillis > 10000) { - if (ldrEnabled == true) { + if ( (ldrEnabled == true) + && (ldrPin >= 0) && (digitalPinToAnalogChannel(ldrPin) >= 0) ) { // make sure that pin is valid for analogread() // Default state is off if (ldrEnabledPreviously == false) { applyPreset(ldrOffPreset); @@ -85,6 +98,7 @@ class LDR_Dusk_Dawn_v2 : public Usermod { } bool readFromConfig(JsonObject& root) { + int8_t oldLdrPin = ldrPin; JsonObject top = root[FPSTR(_name)]; bool configComplete = !top.isNull(); configComplete &= getJsonValue(top["Enabled"], ldrEnabled); @@ -93,6 +107,12 @@ class LDR_Dusk_Dawn_v2 : public Usermod { configComplete &= getJsonValue(top["Threshold"], ldrThreshold); configComplete &= getJsonValue(top["On Preset"], ldrOnPreset); configComplete &= getJsonValue(top["Off Preset"], ldrOffPreset); + + if (initDone && (ldrPin != oldLdrPin)) { + // pin changed - un-register previous pin, register new pin + if (oldLdrPin >= 0) pinManager.deallocatePin(oldLdrPin, PinOwner::UM_LDR_DUSK_DAWN); + setup(); // setup new pin + } return configComplete; } @@ -102,7 +122,8 @@ class LDR_Dusk_Dawn_v2 : public Usermod { if (user.isNull()) user = root.createNestedObject("u"); JsonArray LDR_Enabled = user.createNestedArray("LDR dusk/dawn enabled"); - LDR_Enabled.add(ldrEnabled); + LDR_Enabled.add(ldrEnabled); + if (!ldrEnabled) return; // do not add more if usermod is disabled JsonArray LDR_Reading = user.createNestedArray("LDR reading"); LDR_Reading.add(ldrReading); @@ -116,6 +137,12 @@ class LDR_Dusk_Dawn_v2 : public Usermod { //JsonArray LDR_Off_Count = user.createNestedArray("LDR off count"); //LDR_Off_Count.add(ldrOffCount); + + //bool pinValid = ((ldrPin >= 0) && (digitalPinToAnalogChannel(ldrPin) >= 0)); + //if (pinManager.getPinOwner(ldrPin) != PinOwner::UM_LDR_DUSK_DAWN) pinValid = false; + //JsonArray LDR_valid = user.createNestedArray(F("LDR pin")); + //LDR_valid.add(ldrPin); + //LDR_valid.add(pinValid ? F(" OK"): F(" invalid")); } uint16_t getId() { diff --git a/wled00/pin_manager.h b/wled00/pin_manager.h index f8b0c822..e70d94b1 100644 --- a/wled00/pin_manager.h +++ b/wled00/pin_manager.h @@ -60,7 +60,8 @@ enum struct PinOwner : uint8_t { UM_BME280 = USERMOD_ID_BME280, // 0x1E // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins UM_Audioreactive = USERMOD_ID_AUDIOREACTIVE, // 0x20 // Usermod "audio_reactive.h" UM_SdCard = USERMOD_ID_SD_CARD, // 0x25 // Usermod "usermod_sd_card.h" - UM_PWM_OUTPUTS = USERMOD_ID_PWM_OUTPUTS // 0x26 // Usermod "usermod_pwm_outputs.h" + UM_PWM_OUTPUTS = USERMOD_ID_PWM_OUTPUTS, // 0x26 // Usermod "usermod_pwm_outputs.h" + UM_LDR_DUSK_DAWN = USERMOD_ID_LDR_DUSK_DAWN // 0x2B // Usermod "usermod_LDR_Dusk_Dawn_v2.h" }; static_assert(0u == static_cast(PinOwner::None), "PinOwner::None must be zero, so default array initialization works as expected"); From c8b7ad749a89fc732205fcdc745da30c33c6c7de Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 15 Dec 2023 22:09:48 +0100 Subject: [PATCH 051/108] new pin owner --- wled00/pin_manager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/wled00/pin_manager.cpp b/wled00/pin_manager.cpp index 717ab929..2b08973c 100644 --- a/wled00/pin_manager.cpp +++ b/wled00/pin_manager.cpp @@ -61,6 +61,7 @@ String PinManagerClass::getOwnerText(PinOwner tag) { case PinOwner::UM_SdCard : return(F("SD-Card (UM)")); break; // "usermod_sd_card.h" -- Uses SPI pins case PinOwner::UM_PWM_OUTPUTS : return(F("PWM Output (UM)")); break; // "usermod_pwm_outputs.h" case PinOwner::UM_Battery : return(F("Battery (UM)")); break; // "usermod_battery.h" + case PinOwner::UM_LDR_DUSK_DAWN : return(F("LDR dusk/dawn (UM)")); break; // "usermod_LDR_Dusk_Dawn_v2.h" case PinOwner::UM_Example : return(F("example (UM)")); break; // unspecified usermod case PinOwner::UM_Unspecified : return(F("usermod (UM)")); break; // unspecified usermod From 684bf0bd8b46e7769784a28a06b0eaeace51f011 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sat, 16 Dec 2023 18:44:54 +0100 Subject: [PATCH 052/108] random palette bugfix if random palette was used in the startup preset, all LEDs were orange until the first palette cycling happened. This fix ensures that there is no all-orange palette initially. --- wled00/FX_fcn.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index a243ee3a..c5a11b08 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -271,7 +271,7 @@ void Segment::setUpLeds() { } CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) { - static unsigned long _lastPaletteChange = 0; // perhaps it should be per segment + static unsigned long _lastPaletteChange = millis() - 990000; // perhaps it should be per segment //WLEDMM changed init value to avoid pure orange after startup static CRGBPalette16 randomPalette = CRGBPalette16(DEFAULT_COLOR); static CRGBPalette16 prevRandomPalette = CRGBPalette16(CRGB(BLACK)); byte tcp[76] = { 255 }; //WLEDMM: prevent out-of-range access in loadDynamicGradientPalette() From c68890992c8188729c111ad02bf960e301ce15a6 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sat, 16 Dec 2023 18:49:50 +0100 Subject: [PATCH 053/108] mcuTemp improvements * allow users to en/disable usermod * limit rate of reading the sensor (once in 8 seconds) * add slight filtering * skip invalid readings --- usermods/mcu_temp/mcuTemp.h | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/usermods/mcu_temp/mcuTemp.h b/usermods/mcu_temp/mcuTemp.h index 9dcbd4e0..73272cd1 100644 --- a/usermods/mcu_temp/mcuTemp.h +++ b/usermods/mcu_temp/mcuTemp.h @@ -2,6 +2,9 @@ #include "wled.h" +// constants +#define MCUT_READ_TIME_MS 7500 // read once in 7.5 seconds + // class name. Use something descriptive and leave the ": public Usermod" part :) class mcuTemp : public Usermod { @@ -25,27 +28,34 @@ public: void loop() { + static unsigned long lastMQQTTime = 0; // if usermod is disabled or called during strip updating just exit // NOTE: on very long strips strip.isUpdating() may always return true so update accordingly - if (!enabled || strip.isUpdating()) + if (!enabled || (strip.isUpdating() && (millis() - lastTime < MCUT_READ_TIME_MS))) return; + if (millis() - lastTime < MCUT_READ_TIME_MS) return; // reading each 8 seconds should be enough + #ifdef ESP8266 // ESP8266 // does not seem possible mcutemp = -1; #elif defined(CONFIG_IDF_TARGET_ESP32S2) // ESP32S2 mcutemp = -1; #else // ESP32 ESP32S3 and ESP32C3 - mcutemp = roundf(temperatureRead() * 100) / 100; + float newmcutemp = roundf(temperatureRead() * 10) / 10; + if (abs(newmcutemp - 53.3f) > 0.05f) mcutemp = (mcutemp + 2.0f * newmcutemp) / 3.0f; // skip error value (128 => 53.3deg), apply some filtering #endif - if (millis() - lastTime > 10000) +#ifndef WLED_DISABLE_MQTT + if (millis() - lastMQQTTime > 15000) { char array[10]; - snprintf(array, sizeof(array), "%f", mcutemp); + snprintf(array, sizeof(array), "%3.1f", mcutemp); publishMqtt(array); - lastTime = millis(); + lastMQQTTime = millis(); } +#endif + lastTime = millis(); } /* * addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API. @@ -61,8 +71,9 @@ public: // this code adds "u":{"ExampleUsermod":[20," lux"]} to the info object // int reading = 20; + if (!enabled) return; JsonArray lightArr = user.createNestedArray(FPSTR(_name)); // name - lightArr.add(mcutemp); // value + lightArr.add(roundf(10.0f * mcutemp)/10.0f); // value, rounded to 1 decimal lightArr.add(F(" °C")); // unit // if you are implementing a sensor usermod, you may publish sensor data @@ -72,7 +83,7 @@ public: // temp.add(reading); // temp.add(F("lux")); } - +/* void addToJsonState(JsonObject &root) { } @@ -96,7 +107,7 @@ public: void handleOverlayDraw() { } - +*/ /* * getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!). * This could be used in the future for the system to determine whether your usermod is installed. From d25835ceae2cb10f362763cbe7202a95fbbedfc7 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 16 Dec 2023 22:50:05 +0100 Subject: [PATCH 054/108] experimental: trying to get the main JSON doc into PSRAM Its not enough to declare "doc" as DynamicJsonPSRAMDocument - PSRAM is not yet initialized when "doc" is created. So we need a trick to get the main doc into PSRAM later, during WLED::setup(). Code is very experimental, may or may not work, and need more testing -> disabled with "#if 0" --- wled00/wled.cpp | 4 ++++ wled00/wled.h | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/wled00/wled.cpp b/wled00/wled.cpp index c051fa39..9fc7cd88 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -606,6 +606,10 @@ pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), Pin if(dmxEnablePin > 0) pinManager.allocatePin(dmxEnablePin, true, PinOwner::DMX); #endif +#if 0 && defined(WLED_USE_PSRAM_JSON) + doc.garbageCollect(); // WLEDMM experimental - this seems to move the complete doc[] into PSRAM +#endif + // WLEDMM experimental: support for single neoPixel on Adafruit boards #if 0 //#ifdef PIN_NEOPIXEL diff --git a/wled00/wled.h b/wled00/wled.h index 4cb8f7e4..4a3ce5ad 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -191,6 +191,7 @@ struct PSRAM_Allocator { } }; using PSRAMDynamicJsonDocument = BasicJsonDocument; +//#define DynamicJsonDocument PSRAMDynamicJsonDocument // WLEDMM experiment #else #define PSRAMDynamicJsonDocument DynamicJsonDocument #endif @@ -784,7 +785,17 @@ WLED_GLOBAL int8_t spi_sclk _INIT(HW_PIN_CLOCKSPI); #endif // global ArduinoJson buffer +#if 0 && defined(WLED_USE_PSRAM_JSON) +// WLEDMM experimental : always use dynamic JSON + #warning experimental - trying to always use dynamic JSON + #ifndef WLED_DEFINE_GLOBAL_VARS + WLED_GLOBAL PSRAMDynamicJsonDocument doc; + #else + WLED_GLOBAL PSRAMDynamicJsonDocument doc(JSON_BUFFER_SIZE); + #endif +#else WLED_GLOBAL StaticJsonDocument doc; +#endif // WLEDMM end WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0); // enable additional debug output From 7624b7618662fe1e8255e2f340869c310c979389 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 16 Dec 2023 22:58:14 +0100 Subject: [PATCH 055/108] version bump 0.14.0-b28.34 --- .github/ISSUE_TEMPLATE/bug.yml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- wled00/data/index.js | 2 +- wled00/improv.cpp | 2 +- wled00/wled.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 83854bd6..9fe3dea3 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -48,7 +48,7 @@ body: attributes: label: What version/release of MM WLED? description: You can find this in by going to Config -> Security & Updates -> Scroll to Bottom. Copy and paste the entire line after "Server message" - placeholder: "e.g. build 2308250, WLEDMM_0.14.0-b27.31_esp32_4MB_M.bin" + placeholder: "e.g. build 2312160, WLEDMM_0.14.0-b28.34_esp32_4MB_M.bin" validations: required: true - type: dropdown diff --git a/package-lock.json b/package-lock.json index 429c9dda..35bd150b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wled", - "version": "0.14.0-b27.33", + "version": "0.14.0-b28.34", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wled", - "version": "0.14.0-b27.33", + "version": "0.14.0-b28.34", "license": "GPL-3.0-or-later", "dependencies": { "clean-css": "^4.2.3", diff --git a/package.json b/package.json index 10f0dae9..1d461925 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.14.0-b27.33", + "version": "0.14.0-b28.34", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/wled00/data/index.js b/wled00/data/index.js index 448d419c..625c1d46 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -1107,7 +1107,7 @@ function ddpAll() { callNode(lastinfo.ip, "cfg", {"hw":{"led":{"ins":ins}}}); //self } -//curl -s -F "update=@/Users/ewoudwijma/Developer/GitHub/MoonModules/WLED/build_output/release/WLEDMM_0.14.0-b27.31_esp32_4MB_M.bin" 192.168.8.105/update >nul & +//curl -s -F "update=@/Users/ewoudwijma/Developer/GitHub/MoonModules/WLED/build_output/release/WLEDMM_0.14.0-b28.34_esp32_4MB_M.bin" 192.168.8.105/update >nul & //WLEDMM function SuperSync() { diff --git a/wled00/improv.cpp b/wled00/improv.cpp index 0dd2b25c..c6bcaca0 100644 --- a/wled00/improv.cpp +++ b/wled00/improv.cpp @@ -210,7 +210,7 @@ void sendImprovInfoResponse() { //Use serverDescription if it has been changed from the default "WLED", else mDNS name bool useMdnsName = (strcmp(serverDescription, "WLED") == 0 && strlen(cmDNS) > 0); char vString[32]; - snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b27.33/%i"),VERSION); + snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b28.34/%i"),VERSION); const char *str[4] = {"WLED", vString, bString, useMdnsName ? cmDNS : serverDescription}; sendImprovRPCResult(ImprovRPCType::Request_Info, 4, str); diff --git a/wled00/wled.h b/wled00/wled.h index 4a3ce5ad..ade193a8 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312150 +#define VERSION 2312160 //WLEDMM + Moustachauve/Wled-Native // You can define custom product info from build flags. From 3b6c25382509389d9fe83eec5d9fccd13361d569 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 16 Dec 2023 23:01:25 +0100 Subject: [PATCH 056/108] npm run build Let's Do It --- wled00/html_other.h | 74 +++++------ wled00/html_settings.h | 270 ++++++++++++++++++++--------------------- 2 files changed, 172 insertions(+), 172 deletions(-) diff --git a/wled00/html_other.h b/wled00/html_other.h index dafe667f..4d663330 100644 --- a/wled00/html_other.h +++ b/wled00/html_other.h @@ -44,43 +44,43 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()====="; const uint16_t PAGE_update_length = 607; const uint8_t PAGE_update[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x75, 0x53, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0x0d, 0x09, 0x31, 0x92, 0x0c, 0x95, - 0x4d, 0x08, 0x89, 0x69, 0x95, 0xb6, 0x81, 0x78, 0x42, 0x4e, 0x7c, 0xd3, 0x98, 0x3a, 0x76, 0x66, - 0xdf, 0xb4, 0xaa, 0xd0, 0xfe, 0x9d, 0x6b, 0xa7, 0x1d, 0x48, 0x83, 0x97, 0x28, 0x4e, 0xce, 0x3d, - 0x39, 0xf7, 0x9c, 0x93, 0xe2, 0xe4, 0xea, 0xf6, 0xe3, 0xfd, 0xf7, 0xd5, 0x35, 0xeb, 0xb0, 0x37, - 0x55, 0x71, 0xb8, 0x82, 0x54, 0x55, 0xd1, 0x03, 0x4a, 0xd6, 0x38, 0x8b, 0x60, 0xb1, 0xe4, 0x3b, - 0xad, 0xb0, 0x2b, 0x15, 0x6c, 0x75, 0x03, 0x8b, 0x74, 0xe0, 0xcc, 0xca, 0x1e, 0x4a, 0xbe, 0xd5, - 0xb0, 0x1b, 0x9c, 0x47, 0x5e, 0x65, 0x05, 0x6a, 0x34, 0x50, 0x7d, 0xfb, 0x72, 0x7d, 0xc5, 0x1e, - 0x06, 0x25, 0x11, 0x8a, 0x7c, 0x7a, 0x54, 0x84, 0xc6, 0xeb, 0x01, 0xab, 0xac, 0x1d, 0x6d, 0x83, - 0xda, 0x59, 0xb6, 0x9c, 0xcd, 0x7f, 0xed, 0xb4, 0x55, 0x6e, 0x27, 0x3a, 0x1d, 0xd0, 0xf9, 0xbd, - 0xa8, 0x65, 0xb3, 0x99, 0xcd, 0x9f, 0x9e, 0x21, 0x0f, 0x04, 0x51, 0xae, 0x19, 0x7b, 0x52, 0x20, - 0xd6, 0x80, 0xd7, 0x06, 0xe2, 0xed, 0x72, 0xff, 0x59, 0xcd, 0xf8, 0xd8, 0xf2, 0xb9, 0x08, 0xb8, - 0x37, 0x20, 0x94, 0x0e, 0x83, 0x91, 0xfb, 0x92, 0x5b, 0x67, 0x81, 0xbf, 0xfa, 0xef, 0x48, 0x1f, - 0xd6, 0x2f, 0x67, 0x6a, 0xe3, 0x9a, 0x0d, 0x7f, 0xca, 0x8a, 0xfc, 0x20, 0xf1, 0x20, 0x95, 0x05, - 0xdf, 0x94, 0x3c, 0x0f, 0x80, 0xa8, 0xed, 0x3a, 0xe4, 0x41, 0xfc, 0x0c, 0x97, 0x43, 0xf9, 0x8e, - 0x57, 0x7f, 0x21, 0x23, 0x55, 0x95, 0x7d, 0xd0, 0x7d, 0x34, 0x80, 0x8d, 0xde, 0xcc, 0xf8, 0x44, - 0xdf, 0x84, 0xc0, 0xe7, 0xef, 0x09, 0x99, 0x10, 0x45, 0x3e, 0x59, 0x5a, 0x3b, 0xb5, 0x67, 0xce, - 0x1a, 0x27, 0x55, 0xc9, 0x3f, 0x01, 0x7e, 0x9d, 0xcd, 0x89, 0xae, 0x3b, 0xab, 0xb2, 0x1b, 0xe7, - 0xec, 0x8d, 0x53, 0x2c, 0x59, 0x77, 0xe7, 0x5a, 0xdc, 0x49, 0x0f, 0xcf, 0x1e, 0x12, 0xa2, 0x68, - 0x9d, 0xef, 0x19, 0x65, 0xd2, 0x39, 0x9a, 0x5d, 0xdd, 0xde, 0xdd, 0x73, 0x26, 0x93, 0x4d, 0x24, - 0x72, 0x4c, 0x38, 0xce, 0x34, 0xbd, 0x22, 0x5f, 0x58, 0x06, 0xe4, 0xe0, 0x7e, 0xa0, 0x70, 0xfa, - 0xd1, 0xa0, 0x1e, 0xa4, 0xc7, 0x3c, 0xce, 0x2f, 0x08, 0x26, 0x39, 0x29, 0x08, 0x63, 0xdd, 0x6b, - 0x4a, 0xf5, 0x21, 0x09, 0x08, 0x83, 0xb4, 0xac, 0x31, 0x32, 0x84, 0x92, 0x07, 0x3d, 0xf0, 0xea, - 0x54, 0xbc, 0x7e, 0x23, 0x4e, 0x17, 0xf5, 0xd9, 0x5b, 0x71, 0x7e, 0x1e, 0x9d, 0x21, 0x00, 0xa9, - 0xf7, 0xd5, 0x95, 0xdb, 0x25, 0xf5, 0x0c, 0x3b, 0x60, 0x86, 0xbe, 0x19, 0x90, 0x79, 0x30, 0x20, - 0x03, 0x5c, 0xb0, 0x42, 0xb2, 0xac, 0xf3, 0xd0, 0x96, 0xbc, 0x43, 0x1c, 0xc2, 0x45, 0x9e, 0xaf, - 0x35, 0x76, 0x63, 0x2d, 0x1a, 0xd7, 0xe7, 0x87, 0x05, 0x47, 0x03, 0x21, 0x8f, 0x4b, 0xe6, 0x87, - 0xb1, 0xc0, 0x19, 0x4a, 0x4f, 0x49, 0x95, 0xfc, 0x47, 0x6d, 0xa4, 0xdd, 0x90, 0x1e, 0xdd, 0xaf, - 0x59, 0x96, 0xec, 0x3f, 0x12, 0xd1, 0x13, 0x11, 0x3a, 0x0d, 0x46, 0x05, 0xa1, 0xdd, 0x81, 0xf7, - 0x48, 0xf1, 0x82, 0x5b, 0x84, 0xed, 0xfa, 0x32, 0x39, 0x5f, 0xb6, 0x24, 0x72, 0x11, 0x1e, 0x47, - 0x72, 0x33, 0xf6, 0x33, 0x97, 0x69, 0x8d, 0x42, 0xdb, 0x61, 0x44, 0x36, 0x59, 0xd4, 0x6a, 0x03, - 0xc7, 0x2e, 0x1f, 0x8d, 0xf4, 0xf0, 0x38, 0x6a, 0x0f, 0x6a, 0x42, 0xd7, 0x23, 0x22, 0xd5, 0x71, - 0x82, 0x4f, 0xd6, 0x11, 0xd9, 0x14, 0xce, 0x49, 0x91, 0x4f, 0xaf, 0xff, 0x01, 0x9d, 0x0e, 0xd1, - 0xef, 0xc6, 0xe8, 0x66, 0x53, 0xf2, 0x65, 0xb4, 0x7b, 0x49, 0x2d, 0xff, 0x33, 0x94, 0x72, 0xa9, - 0x0a, 0xa5, 0xb7, 0x59, 0x8a, 0x2f, 0x76, 0x94, 0x68, 0xaa, 0xc4, 0x4e, 0xc5, 0x13, 0x42, 0x10, - 0x38, 0x91, 0xaf, 0xd2, 0xb6, 0x4c, 0x39, 0x66, 0x1d, 0x52, 0x5e, 0x8e, 0x0e, 0xce, 0x93, 0xd6, - 0xd6, 0x43, 0xe8, 0x52, 0x24, 0x83, 0x5c, 0x03, 0xbb, 0x98, 0x17, 0x39, 0xf1, 0xc5, 0x75, 0x63, - 0xe1, 0x62, 0xfb, 0xe2, 0x6f, 0xfd, 0x1b, 0x5f, 0x58, 0xea, 0xbb, 0xec, 0x03, 0x00, 0x00 + 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0xb1, 0x07, 0x18, 0x49, 0x86, 0xca, + 0x26, 0x84, 0xc4, 0xb4, 0x4a, 0xdb, 0x40, 0x3c, 0x21, 0x27, 0xbe, 0x69, 0x4c, 0x1d, 0x3b, 0xb3, + 0x6f, 0x5a, 0x55, 0x68, 0xff, 0xce, 0xb5, 0xd3, 0x0e, 0xa4, 0xc1, 0x4b, 0x14, 0x27, 0xe7, 0x9e, + 0x9c, 0x7b, 0xce, 0x49, 0x71, 0x72, 0x75, 0xfb, 0xf1, 0xfe, 0xfb, 0xea, 0x9a, 0x75, 0xd8, 0x9b, + 0xaa, 0x38, 0x5c, 0x41, 0xaa, 0xaa, 0xe8, 0x01, 0x25, 0x6b, 0x9c, 0x45, 0xb0, 0x58, 0xf2, 0x9d, + 0x56, 0xd8, 0x95, 0x0a, 0xb6, 0xba, 0x81, 0x45, 0x3a, 0x70, 0x66, 0x65, 0x0f, 0x25, 0xdf, 0x6a, + 0xd8, 0x0d, 0xce, 0x23, 0xaf, 0xb2, 0x02, 0x35, 0x1a, 0xa8, 0xbe, 0x7d, 0xb9, 0xbe, 0x62, 0x0f, + 0x83, 0x92, 0x08, 0x45, 0x3e, 0x3d, 0x2a, 0x42, 0xe3, 0xf5, 0x80, 0x55, 0xd6, 0x8e, 0xb6, 0x41, + 0xed, 0x2c, 0x5b, 0xce, 0xe6, 0xbf, 0x76, 0xda, 0x2a, 0xb7, 0x13, 0x9d, 0x0e, 0xe8, 0xfc, 0x5e, + 0xd4, 0xb2, 0xd9, 0xcc, 0xe6, 0x4f, 0xcf, 0x90, 0x07, 0x82, 0x28, 0xd7, 0x8c, 0x3d, 0x29, 0x10, + 0x6b, 0xc0, 0x6b, 0x03, 0xf1, 0x76, 0xb9, 0xff, 0xac, 0x66, 0x7c, 0x6c, 0xf9, 0x5c, 0x04, 0xdc, + 0x1b, 0x10, 0x4a, 0x87, 0xc1, 0xc8, 0x7d, 0xc9, 0xad, 0xb3, 0xc0, 0x5f, 0xfd, 0x77, 0xa4, 0x0f, + 0xeb, 0x97, 0x33, 0xb5, 0x71, 0xcd, 0x86, 0x3f, 0x65, 0x45, 0x7e, 0x90, 0x78, 0x90, 0xca, 0x82, + 0x6f, 0x4a, 0x9e, 0x07, 0x40, 0xd4, 0x76, 0x1d, 0xf2, 0x20, 0x7e, 0x86, 0xcb, 0xa1, 0x7c, 0xc7, + 0xab, 0xbf, 0x90, 0x91, 0xaa, 0xca, 0x3e, 0xe8, 0x3e, 0x1a, 0xc0, 0x46, 0x6f, 0x66, 0x7c, 0xa2, + 0x6f, 0x42, 0xe0, 0xf3, 0xf7, 0x84, 0x4c, 0x88, 0x22, 0x9f, 0x2c, 0xad, 0x9d, 0xda, 0x33, 0x67, + 0x8d, 0x93, 0xaa, 0xe4, 0x9f, 0x00, 0xbf, 0xce, 0xe6, 0x44, 0xd7, 0x9d, 0x55, 0xd9, 0x8d, 0x73, + 0xf6, 0xc6, 0x29, 0x96, 0xac, 0xbb, 0x73, 0x2d, 0xee, 0xa4, 0x87, 0x67, 0x0f, 0x09, 0x51, 0xb4, + 0xce, 0xf7, 0x8c, 0x32, 0xe9, 0x1c, 0xcd, 0xae, 0x6e, 0xef, 0xee, 0x39, 0x93, 0xc9, 0x26, 0x12, + 0x39, 0x26, 0x1c, 0x67, 0x9a, 0x5e, 0x91, 0x2f, 0x2c, 0x03, 0x72, 0x70, 0x3f, 0x50, 0x38, 0xfd, + 0x68, 0x50, 0x0f, 0xd2, 0x63, 0x1e, 0xe7, 0x17, 0x04, 0x93, 0x9c, 0x14, 0x84, 0xb1, 0xee, 0x35, + 0xa5, 0xfa, 0x90, 0x04, 0x84, 0x41, 0x5a, 0xd6, 0x18, 0x19, 0x42, 0xc9, 0x83, 0x1e, 0x78, 0x75, + 0x2a, 0x5e, 0x9f, 0x8b, 0xd3, 0x45, 0x7d, 0xf6, 0x56, 0xbc, 0x39, 0x8f, 0xce, 0x10, 0x80, 0xd4, + 0xfb, 0xea, 0xca, 0xed, 0x92, 0x7a, 0x86, 0x1d, 0x30, 0x43, 0xdf, 0x0c, 0xc8, 0x3c, 0x18, 0x90, + 0x01, 0x2e, 0x58, 0x21, 0x59, 0xd6, 0x79, 0x68, 0x4b, 0xde, 0x21, 0x0e, 0xe1, 0x22, 0xcf, 0xd7, + 0x1a, 0xbb, 0xb1, 0x16, 0x8d, 0xeb, 0xf3, 0xc3, 0x82, 0xa3, 0x81, 0x90, 0xc7, 0x25, 0xf3, 0xc3, + 0x58, 0xe0, 0x0c, 0xa5, 0xa7, 0xa4, 0x4a, 0xfe, 0xa3, 0x36, 0xd2, 0x6e, 0x48, 0x8f, 0xee, 0xd7, + 0x2c, 0x4b, 0xf6, 0x1f, 0x89, 0xe8, 0x89, 0x08, 0x9d, 0x06, 0xa3, 0x82, 0xd0, 0xee, 0xc0, 0x7b, + 0xa4, 0x78, 0xc1, 0x2d, 0xc2, 0x76, 0x7d, 0x99, 0x9c, 0x2f, 0x5b, 0x12, 0xb9, 0x08, 0x8f, 0x23, + 0xb9, 0x19, 0xfb, 0x99, 0xcb, 0xb4, 0x46, 0xa1, 0xed, 0x30, 0x22, 0x9b, 0x2c, 0x6a, 0xb5, 0x81, + 0x63, 0x97, 0x8f, 0x46, 0x7a, 0x78, 0x1c, 0xb5, 0x07, 0x35, 0xa1, 0xeb, 0x11, 0x91, 0xea, 0x38, + 0xc1, 0x27, 0xeb, 0x88, 0x6c, 0x0a, 0xe7, 0xa4, 0xc8, 0xa7, 0xd7, 0xff, 0x80, 0x4e, 0x87, 0xe8, + 0x77, 0x63, 0x74, 0xb3, 0x29, 0xf9, 0x32, 0xda, 0xbd, 0xa4, 0x96, 0xff, 0x19, 0x4a, 0xb9, 0x54, + 0x85, 0xd2, 0xdb, 0x2c, 0xc5, 0x17, 0x3b, 0x4a, 0x34, 0x55, 0x62, 0xa7, 0xe2, 0x09, 0x21, 0x08, + 0x9c, 0xc8, 0x57, 0x69, 0x5b, 0xa6, 0x1c, 0xb3, 0x0e, 0x29, 0x2f, 0x47, 0x07, 0xe7, 0x49, 0x6b, + 0xeb, 0x21, 0x74, 0x29, 0x92, 0x41, 0xae, 0x81, 0x5d, 0xcc, 0x8b, 0x9c, 0xf8, 0xe2, 0xba, 0xb1, + 0x70, 0xb1, 0x7d, 0xf1, 0xb7, 0xfe, 0x0d, 0xf9, 0x6e, 0x55, 0x89, 0xec, 0x03, 0x00, 0x00 }; diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 80ceceb2..713ee862 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -1578,8 +1578,8 @@ const uint8_t PAGE_settings_time[] PROGMEM = { const uint16_t PAGE_settings_sec_length = 2483; const uint8_t PAGE_settings_sec[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x58, 0xff, 0x72, 0xd3, 0x48, - 0x12, 0xfe, 0xdf, 0x4f, 0x31, 0x1e, 0xaa, 0x58, 0xeb, 0x50, 0xe4, 0x10, 0xa8, 0x3d, 0x08, 0x96, - 0xb9, 0x84, 0x84, 0x25, 0x57, 0x09, 0x49, 0x61, 0xb3, 0xdc, 0x15, 0x47, 0x51, 0x63, 0x69, 0x6c, + 0x12, 0xfe, 0xdf, 0x4f, 0x31, 0x1e, 0xaa, 0x58, 0xeb, 0x50, 0xe4, 0x10, 0xa8, 0x2d, 0x08, 0x96, + 0xb9, 0x84, 0x84, 0x25, 0x5b, 0x09, 0x49, 0x61, 0xb3, 0xdc, 0x15, 0x47, 0x51, 0x63, 0x69, 0x6c, 0x0d, 0x96, 0x34, 0xda, 0x99, 0x51, 0x8c, 0x8f, 0xdd, 0xf7, 0xb8, 0xa7, 0xb9, 0x87, 0xb9, 0x27, 0xb9, 0xaf, 0x47, 0x92, 0xed, 0x40, 0x80, 0xa2, 0xee, 0xfe, 0x48, 0x6c, 0x69, 0x66, 0xfa, 0xc7, 0xd7, 0xdd, 0x5f, 0xf7, 0x78, 0xd4, 0x3f, 0xb9, 0x7c, 0x36, 0xfd, 0xfb, 0xd5, 0x29, 0xcb, 0x5c, @@ -1595,143 +1595,143 @@ const uint8_t PAGE_settings_sec[] PROGMEM = { 0x71, 0x4a, 0x97, 0xec, 0xc5, 0x20, 0xf8, 0xb4, 0x52, 0x65, 0xaa, 0x57, 0x91, 0xae, 0x64, 0x39, 0xe0, 0x99, 0x73, 0x95, 0x3d, 0x1c, 0x0e, 0x8b, 0x22, 0x5a, 0x96, 0x3a, 0x5a, 0xe5, 0x32, 0x8d, 0x16, 0x72, 0x38, 0x97, 0xc2, 0xd5, 0x46, 0xda, 0xa1, 0x6d, 0xd5, 0x0e, 0xef, 0x58, 0x99, 0xd4, - 0x46, 0xb9, 0xf5, 0x5e, 0xf7, 0x8a, 0x07, 0x7f, 0x6c, 0xe4, 0x1e, 0x7f, 0x2e, 0x77, 0x73, 0x90, + 0x46, 0xb9, 0xf5, 0x5e, 0xf7, 0x8a, 0x07, 0x7f, 0x6e, 0xe4, 0x1e, 0x7f, 0x2e, 0x77, 0x73, 0x90, 0x87, 0xfc, 0xbd, 0x95, 0xf9, 0x7c, 0x77, 0xf7, 0xeb, 0x2f, 0x76, 0xd7, 0x55, 0x2a, 0x9c, 0xbc, 0x6d, 0xef, 0xe2, 0x2c, 0x1d, 0xc8, 0xe0, 0x93, 0x91, 0xb0, 0xa7, 0x64, 0x64, 0x9c, 0x3b, 0xcd, 0x25, 0x39, 0x77, 0xbc, 0xf6, 0x4b, 0xdb, 0xad, 0xca, 0x5e, 0xce, 0x3e, 0xec, 0x6c, 0x96, 0x77, 0xef, 0x72, 0x3d, 0xfb, 0x20, 0x13, 0xc7, 0xe3, 0xd8, 0xad, 0x2b, 0xa9, 0xe7, 0xf4, 0xae, 0x7f, - 0x64, 0x8c, 0x58, 0x47, 0xca, 0xfa, 0xcf, 0x1b, 0x12, 0x72, 0x2d, 0xd2, 0xbf, 0x4e, 0x06, 0x32, - 0x74, 0x71, 0x7f, 0x3f, 0xf8, 0x94, 0x4b, 0xc7, 0x74, 0x9c, 0x46, 0x89, 0x01, 0x1c, 0xb2, 0x55, - 0x3b, 0xe0, 0x0d, 0xf2, 0x3c, 0x78, 0xa2, 0x23, 0x78, 0x79, 0xe4, 0x9c, 0x51, 0xb3, 0xda, 0x49, - 0x2c, 0x98, 0x84, 0x87, 0x32, 0x08, 0x3f, 0x7f, 0x4f, 0xba, 0xe1, 0x9b, 0x93, 0x1f, 0xdd, 0xf0, - 0x83, 0xb8, 0x16, 0x9d, 0x80, 0x2f, 0x36, 0x0a, 0xbb, 0x2e, 0x21, 0xc2, 0x05, 0x61, 0x1a, 0xcd, - 0x74, 0xba, 0x8e, 0x44, 0x05, 0x7c, 0xd2, 0x67, 0x99, 0xca, 0xd3, 0x81, 0xa6, 0xfd, 0x22, 0x4d, - 0x4f, 0xaf, 0x61, 0xc5, 0xb9, 0xb2, 0xc8, 0x47, 0x69, 0x06, 0x9c, 0x6c, 0xe6, 0xe1, 0x20, 0x88, - 0xc7, 0x9f, 0x7e, 0x91, 0xee, 0xd7, 0x41, 0x10, 0x42, 0xe6, 0x71, 0xb2, 0x7c, 0xae, 0x72, 0x49, - 0x69, 0x36, 0x20, 0x04, 0xf9, 0x2c, 0x59, 0x26, 0xf3, 0x05, 0x0f, 0xbe, 0xba, 0x5a, 0x21, 0xda, - 0xd2, 0x21, 0xa8, 0xc1, 0x1f, 0xb7, 0xeb, 0x91, 0xc6, 0x68, 0x03, 0xf7, 0xa0, 0x07, 0xc5, 0x60, - 0x75, 0x2e, 0xa3, 0x5c, 0x2f, 0x06, 0xfc, 0x94, 0xde, 0xb3, 0x16, 0x3c, 0x44, 0x9c, 0xcd, 0x21, - 0xda, 0xc3, 0x80, 0xec, 0x37, 0x80, 0xeb, 0xbc, 0x7d, 0x0f, 0xf4, 0x71, 0x70, 0xae, 0x16, 0xb5, - 0x11, 0x1e, 0xed, 0x06, 0x06, 0x36, 0x17, 0x8a, 0xb2, 0xee, 0x1f, 0xe5, 0x59, 0x99, 0xe8, 0xa2, - 0x02, 0xe8, 0x92, 0x55, 0x62, 0x21, 0x19, 0x52, 0x42, 0xf4, 0x91, 0x0b, 0x3b, 0x01, 0xb2, 0x99, - 0x5e, 0x4d, 0xb5, 0xb0, 0xae, 0x89, 0xd1, 0xfd, 0xe0, 0x13, 0xa5, 0xbf, 0x8e, 0xbd, 0x17, 0x8e, - 0x16, 0x7c, 0x58, 0x54, 0x09, 0x93, 0x5f, 0x4c, 0x2f, 0xce, 0x63, 0x09, 0x5f, 0x92, 0x5c, 0x58, - 0x4b, 0x8e, 0x90, 0x57, 0x03, 0xf7, 0xb4, 0x75, 0xe5, 0x90, 0x93, 0x34, 0x44, 0x21, 0xc9, 0xa5, - 0x30, 0xd3, 0xa6, 0x78, 0x06, 0x6d, 0x11, 0xf9, 0xd8, 0xb8, 0x35, 0x9c, 0x14, 0xa5, 0x2a, 0xbc, - 0xbd, 0x31, 0x2f, 0x75, 0x09, 0xcf, 0xda, 0x1d, 0x31, 0xe0, 0xea, 0x0e, 0x0d, 0x3a, 0x03, 0x91, - 0xd8, 0xbb, 0xfa, 0x8c, 0x2c, 0xf4, 0x35, 0x25, 0x86, 0x57, 0x04, 0x60, 0x0f, 0x1e, 0xef, 0xef, - 0xef, 0xb8, 0x53, 0x57, 0x04, 0x1a, 0xc5, 0x82, 0xfc, 0xe9, 0x9c, 0x29, 0xe5, 0x8a, 0xfd, 0xed, - 0xe2, 0xfc, 0x05, 0x4a, 0xf3, 0x95, 0xfc, 0xad, 0x96, 0xd6, 0x3d, 0xf9, 0x46, 0xe0, 0x77, 0x54, - 0x6f, 0xd1, 0x71, 0x99, 0xb2, 0xd0, 0x6e, 0x2b, 0x44, 0x4a, 0x4e, 0x91, 0x77, 0xa1, 0x7f, 0x63, - 0x1d, 0xca, 0xda, 0x8e, 0xe3, 0x87, 0x64, 0x45, 0xf0, 0xcd, 0x38, 0x6f, 0xe5, 0xca, 0x5d, 0xc1, - 0x92, 0x64, 0x24, 0xcb, 0xb0, 0xdf, 0x09, 0x68, 0x0a, 0xf8, 0xea, 0x72, 0x32, 0x45, 0x86, 0x0f, - 0x1b, 0x87, 0x10, 0x03, 0xf2, 0xa4, 0xf4, 0x9e, 0x3c, 0xd7, 0xa6, 0x38, 0x41, 0x24, 0x9f, 0xb4, - 0x55, 0x59, 0xb6, 0x49, 0x3d, 0xe0, 0x14, 0x5f, 0x24, 0x4a, 0x44, 0x09, 0x63, 0xdf, 0xee, 0xbf, - 0x0b, 0x1b, 0xd4, 0x69, 0xad, 0x0c, 0xf0, 0xfe, 0x5a, 0xe4, 0x35, 0x58, 0x92, 0x87, 0xfd, 0xfb, - 0x5b, 0xc8, 0x92, 0x4c, 0x26, 0xcb, 0x97, 0x75, 0xb1, 0xad, 0xf3, 0xfe, 0xa0, 0x2f, 0xc9, 0x85, - 0x68, 0x29, 0xd7, 0x11, 0x42, 0x95, 0x64, 0x83, 0xe1, 0xdb, 0xfd, 0xbd, 0xc7, 0xef, 0x86, 0x01, - 0x8a, 0xfd, 0x2d, 0x3f, 0x86, 0xbd, 0xb6, 0x12, 0x09, 0x95, 0xe0, 0x54, 0xcc, 0xf0, 0xff, 0x14, - 0x5c, 0x0e, 0x17, 0xf9, 0x24, 0x53, 0x73, 0x87, 0xcf, 0x67, 0x20, 0x77, 0xa3, 0x73, 0x7c, 0x3b, - 0xca, 0xe9, 0xf9, 0x4a, 0x80, 0xb2, 0xe9, 0xbd, 0xa8, 0xec, 0xb9, 0x4e, 0x96, 0x74, 0x04, 0xfc, - 0xed, 0x8b, 0x78, 0xd2, 0x4a, 0xba, 0x42, 0x86, 0xbe, 0xae, 0xda, 0x2f, 0x27, 0x7a, 0x55, 0x7a, - 0xb9, 0x08, 0x08, 0x7f, 0xa1, 0x0b, 0xda, 0x00, 0x76, 0xd1, 0xab, 0x73, 0xe9, 0x15, 0xf8, 0xef, - 0x7e, 0xb7, 0xff, 0xf6, 0x4a, 0x2d, 0xb2, 0xcd, 0xeb, 0xf6, 0xec, 0x19, 0x02, 0x65, 0xe8, 0xe5, - 0x89, 0xa4, 0x0a, 0xe0, 0xef, 0x90, 0xc4, 0x49, 0x5e, 0xa7, 0xd2, 0x0e, 0x36, 0xde, 0x05, 0xc1, - 0xef, 0xbf, 0xb7, 0x4f, 0x28, 0x57, 0xfa, 0x3c, 0x91, 0x73, 0x51, 0xe7, 0x0e, 0x45, 0x8f, 0x5a, - 0xd8, 0x29, 0x93, 0x9b, 0x35, 0x0e, 0xa8, 0xe4, 0x67, 0x4c, 0x03, 0xee, 0x2d, 0x9b, 0x04, 0xe2, - 0xc4, 0xf9, 0xef, 0xf9, 0x3d, 0x49, 0xd4, 0x7a, 0xdb, 0x8e, 0xe0, 0xde, 0x80, 0xbf, 0x39, 0x3f, - 0x3d, 0x01, 0x89, 0xda, 0xf4, 0x29, 0x47, 0xdd, 0x60, 0xb7, 0x4d, 0x83, 0x1d, 0x7d, 0x13, 0x24, - 0x1f, 0xa7, 0x30, 0x1e, 0x62, 0x53, 0xcb, 0xec, 0x68, 0x3d, 0xbe, 0x6c, 0x60, 0xaa, 0x76, 0x3a, - 0xd1, 0xf9, 0xdd, 0xbb, 0x03, 0xdf, 0x8e, 0xf6, 0xc3, 0x81, 0xef, 0x57, 0x31, 0xed, 0xc8, 0x27, - 0x4e, 0x1b, 0x20, 0x48, 0xca, 0xcf, 0x9c, 0x2c, 0x28, 0xad, 0x93, 0xb3, 0x8a, 0x7b, 0x57, 0x9b, - 0x6d, 0x38, 0x5f, 0x54, 0xe0, 0x11, 0x72, 0x87, 0x5d, 0xe8, 0x54, 0x46, 0xec, 0x0a, 0x15, 0x6b, - 0x25, 0x93, 0x14, 0x47, 0x46, 0xb6, 0xb1, 0xb3, 0x2b, 0x30, 0x45, 0x78, 0x43, 0xa2, 0xbd, 0x29, - 0x31, 0xf4, 0xd2, 0x82, 0x80, 0x76, 0x79, 0x96, 0x27, 0xf1, 0x4f, 0x7d, 0x03, 0x44, 0xff, 0xe3, - 0xf7, 0xfc, 0xf2, 0x21, 0x87, 0xbb, 0xdb, 0xe6, 0x35, 0xb4, 0xd1, 0x07, 0xfb, 0xb4, 0x8a, 0x7f, - 0xe6, 0x1e, 0xdf, 0xde, 0x68, 0xd8, 0x76, 0xdd, 0x91, 0xe7, 0x86, 0xf1, 0x5f, 0x54, 0x41, 0xfd, - 0x9b, 0xd5, 0x26, 0x47, 0x91, 0x7b, 0xba, 0x48, 0x2c, 0x38, 0xf4, 0x09, 0x36, 0xfa, 0x0d, 0xa3, - 0x61, 0x33, 0x44, 0x10, 0x99, 0x83, 0x23, 0x49, 0x73, 0xcc, 0x81, 0x16, 0x7a, 0xfb, 0x1c, 0x75, - 0xd1, 0x63, 0x0a, 0xcf, 0xf4, 0xed, 0xbd, 0xe5, 0xac, 0x19, 0x0a, 0x26, 0x73, 0xce, 0x30, 0x0d, - 0x64, 0x1a, 0x2b, 0x95, 0xb6, 0x34, 0x1c, 0xa4, 0xea, 0x9a, 0x79, 0x52, 0x89, 0xc1, 0x71, 0x80, - 0x63, 0x75, 0xf3, 0x5d, 0x26, 0xf3, 0xea, 0x98, 0x8f, 0x7b, 0x23, 0x04, 0xce, 0x21, 0x1a, 0xd4, - 0x6e, 0x62, 0xde, 0x3c, 0x70, 0x68, 0x4d, 0x72, 0x95, 0x2c, 0x63, 0xfe, 0x82, 0xd4, 0x3e, 0x1d, - 0x0d, 0x9b, 0x05, 0x98, 0x06, 0x11, 0xe3, 0xdb, 0xcf, 0xf4, 0x36, 0x87, 0x8e, 0xe9, 0x10, 0x55, - 0xd0, 0xf6, 0xdc, 0x8d, 0x13, 0xb6, 0x9e, 0x15, 0x0a, 0x36, 0x4e, 0xc4, 0xb5, 0xdc, 0x6e, 0xc9, - 0x4c, 0x27, 0x3e, 0x3b, 0x18, 0xf7, 0x26, 0xed, 0xe4, 0xc0, 0xee, 0xb2, 0xd7, 0xbe, 0xcf, 0x53, - 0x7e, 0xd6, 0x15, 0xb0, 0x39, 0x18, 0x77, 0x63, 0x0d, 0xbb, 0x3a, 0x7b, 0x79, 0xc8, 0x46, 0xaa, - 0xac, 0x6a, 0xd7, 0x8a, 0xae, 0xe0, 0xdc, 0x4a, 0x9b, 0x94, 0x7b, 0x90, 0xb0, 0xbe, 0x99, 0x9b, - 0xfc, 0x77, 0xab, 0xfe, 0x89, 0xaf, 0x0f, 0x01, 0x96, 0xf8, 0x88, 0x3c, 0x5f, 0x60, 0x2a, 0xf3, - 0x4f, 0xaa, 0xdc, 0x79, 0xd2, 0x25, 0xca, 0x86, 0x32, 0x39, 0xe6, 0x1b, 0xe2, 0x20, 0x26, 0x0c, - 0x20, 0xab, 0x12, 0x0e, 0xe9, 0x83, 0x15, 0x4f, 0x16, 0x7f, 0x82, 0x1a, 0x52, 0x5e, 0x20, 0xc1, - 0xc0, 0xf4, 0x18, 0x9f, 0x8c, 0x4a, 0x38, 0xf3, 0xc3, 0x16, 0x34, 0xee, 0x26, 0x9c, 0x60, 0x0f, - 0x59, 0xaa, 0x16, 0xca, 0x31, 0x6c, 0x9b, 0x81, 0x49, 0x80, 0x89, 0x01, 0xfc, 0x14, 0x12, 0x1f, - 0x76, 0x28, 0xd3, 0xb9, 0x36, 0x87, 0x77, 0xe6, 0x62, 0x1f, 0x71, 0xb9, 0x7b, 0xe7, 0xf1, 0xa3, - 0x47, 0x8f, 0x9e, 0xb0, 0xd7, 0xa5, 0x2c, 0x13, 0xb3, 0xae, 0x9c, 0x4c, 0x99, 0x33, 0xa2, 0xb4, - 0x85, 0xb2, 0x96, 0x2a, 0x84, 0x1d, 0xa3, 0xe3, 0x19, 0xd4, 0x7a, 0xe9, 0xd8, 0x2a, 0x93, 0x54, - 0xbf, 0x39, 0xa6, 0x16, 0x6a, 0x9a, 0x70, 0x35, 0x64, 0xa9, 0x66, 0x2f, 0x2f, 0xa7, 0x0c, 0xa4, - 0xc4, 0xd6, 0xba, 0x36, 0x6c, 0x26, 0xca, 0x25, 0x16, 0x69, 0x41, 0x9b, 0x90, 0x4d, 0xce, 0x2e, - 0x42, 0x26, 0x5d, 0x12, 0xb1, 0x4a, 0x95, 0xfd, 0x5e, 0x17, 0x58, 0x33, 0x26, 0xee, 0x62, 0x2b, - 0x65, 0x20, 0xcd, 0x5a, 0x36, 0xb8, 0x9c, 0x1e, 0x05, 0xcc, 0xea, 0xb9, 0x5b, 0x09, 0x23, 0x59, - 0x33, 0x72, 0x7d, 0x86, 0xb9, 0x07, 0x69, 0xa6, 0x3f, 0x76, 0xc9, 0xf8, 0xf2, 0xd2, 0xe7, 0x95, - 0x19, 0x5f, 0x21, 0x18, 0x55, 0x66, 0x00, 0xc2, 0x57, 0xa3, 0xd4, 0x9c, 0xb8, 0xbc, 0xba, 0x11, - 0x91, 0x07, 0x07, 0x2d, 0x3a, 0x53, 0x0d, 0xf4, 0x68, 0x00, 0x66, 0x30, 0x23, 0x64, 0xc8, 0x79, - 0xd6, 0x4d, 0x94, 0x0c, 0xe3, 0x95, 0x45, 0xa3, 0x22, 0xe7, 0x58, 0x29, 0x09, 0x1d, 0xcd, 0x44, - 0x6e, 0x75, 0x8b, 0xb7, 0xcb, 0x24, 0x26, 0x07, 0x63, 0x00, 0x09, 0xeb, 0xd4, 0xf5, 0xbd, 0x55, - 0xd3, 0x4c, 0x6e, 0xde, 0xd0, 0x6c, 0x50, 0xe7, 0x29, 0x9b, 0x49, 0x9a, 0xa3, 0xcb, 0x05, 0xc4, - 0x78, 0x2c, 0xa1, 0x0e, 0x93, 0x61, 0xab, 0x3c, 0x8d, 0xe8, 0xd8, 0x68, 0x36, 0xee, 0x9d, 0x28, - 0xdb, 0x59, 0xd3, 0xec, 0x2b, 0xb5, 0x43, 0x06, 0x10, 0xc8, 0x21, 0xd3, 0x50, 0x69, 0x56, 0x0a, - 0x78, 0x8b, 0x92, 0x21, 0x4d, 0x90, 0xff, 0xb0, 0x23, 0xc1, 0x83, 0x91, 0x73, 0x14, 0x5d, 0xc6, - 0x9a, 0x0b, 0xc0, 0x06, 0x4d, 0x42, 0x7d, 0xe6, 0x1d, 0x1d, 0xa9, 0x6d, 0x4e, 0x53, 0x95, 0x20, - 0xd9, 0x9a, 0x69, 0x86, 0x30, 0x07, 0x03, 0xac, 0x1b, 0xeb, 0xbc, 0x6e, 0x35, 0xf7, 0xea, 0x73, - 0x0a, 0x13, 0xb6, 0xa5, 0x8d, 0x49, 0x69, 0x7f, 0x34, 0x54, 0x0d, 0xea, 0x27, 0xb2, 0x5c, 0x33, - 0x91, 0x24, 0x14, 0x3e, 0x60, 0xf2, 0x46, 0x3d, 0x57, 0xac, 0xe3, 0x26, 0x3a, 0x4d, 0x27, 0x65, - 0xfa, 0x9d, 0x18, 0x5e, 0xbe, 0x69, 0x63, 0x48, 0x7f, 0xcf, 0x45, 0x02, 0x7a, 0x24, 0xc8, 0x21, - 0xe7, 0x3b, 0x07, 0x5f, 0x4d, 0xda, 0xd8, 0x1d, 0xe5, 0xf9, 0x56, 0xad, 0x28, 0x53, 0xd6, 0x0e, - 0x8b, 0xc8, 0x2d, 0xac, 0x00, 0x70, 0x49, 0x89, 0xd1, 0x61, 0x6b, 0xc6, 0xff, 0x43, 0x25, 0x1c, - 0xed, 0xe0, 0xed, 0xe1, 0x03, 0xc6, 0x30, 0x06, 0x69, 0xe1, 0x10, 0xe4, 0xa5, 0x8f, 0x81, 0xa2, - 0xac, 0x48, 0x24, 0x8d, 0x8e, 0x60, 0xce, 0x66, 0x4c, 0xec, 0xb2, 0x9e, 0x98, 0x27, 0x7b, 0x30, - 0x9e, 0x74, 0x59, 0xde, 0x10, 0x0e, 0xa8, 0xe6, 0xc1, 0xf8, 0x3b, 0xf4, 0xf8, 0x9a, 0x98, 0xae, - 0x77, 0x21, 0xca, 0x5a, 0xe4, 0x3e, 0x2c, 0xdd, 0xd1, 0x0d, 0xef, 0x99, 0xf1, 0x69, 0x93, 0xc1, - 0x47, 0x26, 0xad, 0x55, 0xa9, 0xb1, 0xe9, 0xab, 0x08, 0xb6, 0x4c, 0x75, 0x74, 0xc9, 0x37, 0x36, - 0x11, 0x8b, 0xd6, 0x15, 0x48, 0xf0, 0x15, 0x26, 0x3a, 0x6d, 0x5a, 0xa3, 0x44, 0xc7, 0xe2, 0x33, - 0x87, 0x11, 0xba, 0x5c, 0x36, 0x6c, 0xd7, 0x8e, 0xeb, 0xac, 0x97, 0x21, 0xe1, 0x62, 0x3e, 0x6c, - 0x01, 0x47, 0x37, 0x22, 0x9b, 0xbb, 0xd6, 0x8c, 0xea, 0x6b, 0xa7, 0xf6, 0x4e, 0x78, 0xfb, 0x3c, - 0x1a, 0x8a, 0x4d, 0x20, 0xc6, 0xbd, 0x56, 0xdf, 0x66, 0xd1, 0x67, 0xe9, 0x8e, 0xd5, 0x7e, 0x60, - 0x6f, 0x63, 0xee, 0x67, 0x32, 0x9f, 0x72, 0x15, 0xee, 0xa1, 0x8d, 0xbe, 0x31, 0xeb, 0xa0, 0xeb, - 0xdd, 0x8e, 0xdd, 0x4f, 0x3b, 0x73, 0x6c, 0x1a, 0x4d, 0xe6, 0x11, 0x49, 0x09, 0x3f, 0xb3, 0x3a, - 0xf8, 0x69, 0xfc, 0xda, 0x6f, 0xdb, 0x20, 0xda, 0x24, 0xe5, 0x86, 0xad, 0xbe, 0x0e, 0x45, 0xe7, - 0x25, 0x6b, 0xd1, 0x00, 0x34, 0x2d, 0x12, 0xbd, 0x2d, 0x14, 0x84, 0x57, 0x07, 0xc3, 0x8d, 0x7b, - 0xc6, 0x0d, 0x30, 0x3a, 0x2c, 0x6e, 0xee, 0xd8, 0x22, 0xd2, 0xbb, 0x1d, 0x92, 0x83, 0xaf, 0x63, - 0xf2, 0x95, 0xce, 0x79, 0x2b, 0x26, 0x07, 0xe1, 0x8e, 0xf1, 0x5f, 0x02, 0xb2, 0x83, 0x07, 0x55, - 0x50, 0xef, 0x5b, 0x25, 0xd4, 0x38, 0x42, 0x2d, 0xa2, 0x45, 0x67, 0x78, 0xf3, 0x72, 0xe5, 0x4b, - 0xf3, 0xf2, 0xd7, 0xd3, 0x57, 0x6f, 0x5e, 0x9d, 0x4d, 0x4f, 0x9b, 0xbe, 0x01, 0xba, 0x35, 0xd4, - 0x63, 0x6e, 0x3d, 0x11, 0xf9, 0x70, 0xf4, 0xe8, 0x12, 0xd6, 0x50, 0xed, 0x4d, 0x79, 0x85, 0x20, - 0xd2, 0xf8, 0xad, 0x46, 0x37, 0x41, 0x03, 0x9c, 0xef, 0xd2, 0x08, 0x03, 0x97, 0x1b, 0xb9, 0xe7, - 0x89, 0xb1, 0xbd, 0xe8, 0x79, 0x75, 0xa7, 0x93, 0xab, 0xa8, 0xad, 0xcb, 0xe7, 0xb7, 0xd0, 0x7d, - 0xb8, 0xa1, 0x6e, 0xeb, 0xc9, 0x91, 0x08, 0x78, 0x46, 0x95, 0x9f, 0xa2, 0x37, 0x45, 0x5d, 0xd5, - 0x1c, 0xcd, 0x70, 0xc1, 0xea, 0x4a, 0xa5, 0x2d, 0x87, 0xee, 0x47, 0x0b, 0xb4, 0xe0, 0xac, 0x9e, - 0x45, 0xb8, 0x35, 0x0e, 0x2f, 0xb4, 0x2e, 0x31, 0x1b, 0xd6, 0xe8, 0x74, 0x43, 0x1a, 0x08, 0x87, - 0x68, 0xdd, 0xc2, 0x2c, 0xe8, 0xc7, 0x94, 0xf7, 0xb3, 0x1c, 0xfd, 0x92, 0x8f, 0xe9, 0xf5, 0xc5, - 0x05, 0x65, 0x43, 0x8f, 0x5d, 0x4b, 0x43, 0x7c, 0xc3, 0xf6, 0xa3, 0xfb, 0x0f, 0xa3, 0xfd, 0xbd, - 0xd9, 0xc1, 0x9f, 0xa3, 0x07, 0x0f, 0xd8, 0x7f, 0xfe, 0xf5, 0x6f, 0xc2, 0x60, 0x90, 0x04, 0xec, - 0x60, 0xff, 0xe0, 0x01, 0xfb, 0x31, 0x8d, 0x74, 0x79, 0x85, 0x1f, 0xc3, 0x42, 0xa8, 0x32, 0x8a, - 0xa2, 0x9d, 0xf5, 0x43, 0x5a, 0x3f, 0x2c, 0xd0, 0x33, 0x90, 0x20, 0x9f, 0x9b, 0xf5, 0x8b, 0x17, - 0xc9, 0x76, 0xb6, 0x37, 0x13, 0xed, 0x33, 0x5d, 0x60, 0xb2, 0x62, 0x47, 0x35, 0x46, 0x41, 0xb3, - 0xad, 0x68, 0xfc, 0xcd, 0x89, 0x08, 0x01, 0xf2, 0xff, 0x03, 0x90, 0xc3, 0x8d, 0xe0, 0x1f, 0x12, - 0xb6, 0x52, 0x4b, 0x35, 0xf4, 0xd7, 0x26, 0xba, 0x2d, 0xc0, 0xbe, 0x3d, 0xb4, 0x85, 0xbd, 0xc4, - 0xc8, 0x54, 0x51, 0x9d, 0x7e, 0xe1, 0xe4, 0xee, 0x56, 0x8c, 0x2d, 0x92, 0x2e, 0x80, 0x68, 0x01, - 0x4a, 0x36, 0xfd, 0xc4, 0x56, 0x32, 0x51, 0xa0, 0x5d, 0x87, 0xd6, 0xb8, 0xdc, 0xf8, 0xda, 0x3b, - 0x62, 0x59, 0x8d, 0xce, 0xe9, 0xdf, 0xfa, 0xe1, 0x00, 0x3d, 0x10, 0xd7, 0x1e, 0xb3, 0xc6, 0x3d, - 0x1c, 0x4d, 0x5b, 0x33, 0x9a, 0x7c, 0x91, 0x2e, 0xe8, 0x0f, 0xcd, 0x4f, 0x34, 0x1e, 0xb9, 0x7e, - 0x87, 0x53, 0xcf, 0xe3, 0x98, 0x50, 0xb9, 0x37, 0x21, 0xbd, 0xff, 0xf3, 0x9e, 0x8f, 0xeb, 0xb3, - 0xcc, 0xe0, 0xba, 0xab, 0xd0, 0x4a, 0x26, 0x49, 0xb6, 0xa2, 0x1f, 0x0b, 0xda, 0xce, 0x7d, 0x8e, - 0x9e, 0x8e, 0x7b, 0x18, 0x12, 0x10, 0xe6, 0x35, 0x83, 0xc7, 0x8f, 0xe1, 0x32, 0xcb, 0xf5, 0x0c, - 0x09, 0x80, 0xbb, 0xb4, 0x19, 0x9e, 0x9f, 0x3d, 0x3b, 0x7d, 0x39, 0x39, 0xfd, 0x12, 0xf7, 0xde, - 0xc5, 0xd9, 0x94, 0xe5, 0x8d, 0x2a, 0xef, 0x2b, 0xda, 0x7d, 0x67, 0xf3, 0x44, 0x1a, 0x38, 0x08, - 0x8f, 0xac, 0xc5, 0xd0, 0x80, 0xf6, 0x82, 0x9b, 0x6b, 0xd9, 0xf1, 0xa2, 0x55, 0x15, 0x27, 0x06, - 0xf3, 0xb7, 0x7a, 0xe6, 0x2f, 0xea, 0xd4, 0xf8, 0x68, 0x4b, 0xd3, 0x65, 0x88, 0x35, 0x88, 0x33, - 0x9b, 0x5f, 0x42, 0xbe, 0x39, 0xe2, 0x7f, 0x39, 0xe1, 0xf7, 0x7e, 0x68, 0xc4, 0x1f, 0x52, 0xef, - 0xc5, 0x07, 0xdd, 0x6c, 0xe8, 0x9a, 0x43, 0xbf, 0xa0, 0xfe, 0x17, 0x48, 0x2f, 0x3a, 0xd7, 0x51, + 0x64, 0x8c, 0x58, 0x47, 0xca, 0xfa, 0xcf, 0x1b, 0x12, 0x72, 0x2d, 0xd2, 0x5f, 0x27, 0x03, 0x19, + 0xba, 0xb8, 0xbf, 0x1f, 0x7c, 0xca, 0xa5, 0x63, 0x3a, 0x4e, 0xa3, 0xc4, 0x00, 0x0e, 0xd9, 0xaa, + 0x1d, 0xf0, 0x06, 0x79, 0x1e, 0x3c, 0xd1, 0x11, 0xbc, 0x3c, 0x72, 0xce, 0xa8, 0x59, 0xed, 0x24, + 0x16, 0x4c, 0xc2, 0x43, 0x19, 0x84, 0x9f, 0xbf, 0x27, 0xdd, 0xf0, 0xcd, 0xc9, 0x8f, 0x6e, 0xf8, + 0x41, 0x5c, 0x8b, 0x4e, 0xc0, 0x17, 0x1b, 0x85, 0x5d, 0x97, 0x10, 0xe1, 0x82, 0x30, 0x8d, 0x66, + 0x3a, 0x5d, 0x47, 0xa2, 0x02, 0x3e, 0xe9, 0xb3, 0x4c, 0xe5, 0xe9, 0x40, 0xd3, 0x7e, 0x91, 0xa6, + 0xa7, 0xd7, 0xb0, 0xe2, 0x5c, 0x59, 0xe4, 0xa3, 0x34, 0x03, 0x4e, 0x36, 0xf3, 0x70, 0x10, 0xc4, + 0xe3, 0x4f, 0xbf, 0x48, 0xf7, 0xdb, 0x20, 0x08, 0x21, 0xf3, 0x38, 0x59, 0x3e, 0x57, 0xb9, 0xa4, + 0x34, 0x1b, 0x10, 0x82, 0x7c, 0x96, 0x2c, 0x93, 0xf9, 0x82, 0x07, 0x5f, 0x5d, 0xad, 0x10, 0x6d, + 0xe9, 0x10, 0xd4, 0xe0, 0xcf, 0xdb, 0xf5, 0x48, 0x63, 0xb4, 0x81, 0x7b, 0xd0, 0x83, 0x62, 0xb0, + 0x3a, 0x97, 0x51, 0xae, 0x17, 0x03, 0x7e, 0x4a, 0xef, 0x59, 0x0b, 0x1e, 0x22, 0xce, 0xe6, 0x10, + 0xed, 0x61, 0x40, 0xf6, 0x1b, 0xc0, 0x75, 0xde, 0xbe, 0x07, 0xfa, 0x38, 0x38, 0x57, 0x8b, 0xda, + 0x08, 0x8f, 0x76, 0x03, 0x03, 0x9b, 0x0b, 0x45, 0x59, 0xf7, 0x8f, 0xf2, 0xac, 0x4c, 0x74, 0x51, + 0x01, 0x74, 0xc9, 0x2a, 0xb1, 0x90, 0x0c, 0x29, 0x21, 0xfa, 0xc8, 0x85, 0x9d, 0x00, 0xd9, 0x4c, + 0xaf, 0xa6, 0x5a, 0x58, 0xd7, 0xc4, 0xe8, 0x7e, 0xf0, 0x89, 0xd2, 0x5f, 0xc7, 0xde, 0x0b, 0x47, + 0x0b, 0x3e, 0x2c, 0xaa, 0x84, 0xc9, 0x2f, 0xa6, 0x17, 0xe7, 0xb1, 0x84, 0x2f, 0x49, 0x2e, 0xac, + 0x25, 0x47, 0xc8, 0xab, 0x81, 0x7b, 0xda, 0xba, 0x72, 0xc8, 0x49, 0x1a, 0xa2, 0x90, 0xe4, 0x52, + 0x98, 0x69, 0x53, 0x3c, 0x83, 0xb6, 0x88, 0x7c, 0x6c, 0xdc, 0x1a, 0x4e, 0x8a, 0x52, 0x15, 0xde, + 0xde, 0x98, 0x97, 0xba, 0x84, 0x67, 0xed, 0x8e, 0x18, 0x70, 0x75, 0x87, 0x06, 0x9d, 0x81, 0x48, + 0xec, 0x5d, 0x7d, 0x46, 0x16, 0xfa, 0x9a, 0x12, 0xc3, 0x2b, 0x02, 0xb0, 0x07, 0x8f, 0xf7, 0xf7, + 0x77, 0xdc, 0xa9, 0x2b, 0x02, 0x8d, 0x62, 0x41, 0xfe, 0x74, 0xce, 0x94, 0x72, 0xc5, 0xfe, 0x76, + 0x71, 0xfe, 0x02, 0xa5, 0xf9, 0x4a, 0xfe, 0x5e, 0x4b, 0xeb, 0x9e, 0x7c, 0x23, 0xf0, 0x3b, 0xaa, + 0xb7, 0xe8, 0xb8, 0x4c, 0x59, 0x68, 0xb7, 0x15, 0x22, 0x25, 0xa7, 0xc8, 0xbb, 0xd0, 0xbf, 0xb1, + 0x0e, 0x65, 0x6d, 0xc7, 0xf1, 0x43, 0xb2, 0x22, 0xf8, 0x66, 0x9c, 0xb7, 0x72, 0xe5, 0xae, 0x60, + 0x49, 0x32, 0x92, 0x65, 0xd8, 0xef, 0x04, 0x34, 0x05, 0x7c, 0x75, 0x39, 0x99, 0x22, 0xc3, 0x87, + 0x8d, 0x43, 0x88, 0x01, 0x79, 0x52, 0x7a, 0x4f, 0x9e, 0x6b, 0x53, 0x9c, 0x20, 0x92, 0x4f, 0xda, + 0xaa, 0x2c, 0xdb, 0xa4, 0x1e, 0x70, 0x8a, 0x2f, 0x12, 0x25, 0xa2, 0x84, 0xb1, 0x6f, 0xf7, 0xdf, + 0x85, 0x0d, 0xea, 0xb4, 0x56, 0x06, 0x78, 0x7f, 0x2d, 0xf2, 0x1a, 0x2c, 0xc9, 0xc3, 0xfe, 0xfd, + 0x2d, 0x64, 0x49, 0x26, 0x93, 0xe5, 0xcb, 0xba, 0xd8, 0xd6, 0x79, 0x7f, 0xd0, 0x97, 0xe4, 0x42, + 0xb4, 0x94, 0xeb, 0x08, 0xa1, 0x4a, 0xb2, 0xc1, 0xf0, 0xed, 0xfe, 0xde, 0xe3, 0x77, 0xc3, 0x00, + 0xc5, 0xfe, 0x96, 0x1f, 0xc3, 0x5e, 0x5b, 0x89, 0x84, 0x4a, 0x70, 0x2a, 0x66, 0xf8, 0x7f, 0x0a, + 0x2e, 0x87, 0x8b, 0x7c, 0x92, 0xa9, 0xb9, 0xc3, 0xe7, 0x33, 0x90, 0xbb, 0xd1, 0x39, 0xbe, 0x1d, + 0xe5, 0xf4, 0x7c, 0x25, 0x40, 0xd9, 0xf4, 0x5e, 0x54, 0xf6, 0x5c, 0x27, 0x4b, 0x3a, 0x02, 0xfe, + 0xf6, 0x45, 0x3c, 0x69, 0x25, 0x5d, 0x21, 0x43, 0x5f, 0x57, 0xed, 0x97, 0x13, 0xbd, 0x2a, 0xbd, + 0x5c, 0x04, 0x84, 0xbf, 0xd0, 0x05, 0x6d, 0x00, 0xbb, 0xe8, 0xd5, 0xb9, 0xf4, 0x0a, 0xfc, 0x77, + 0xbf, 0xdb, 0x7f, 0x7b, 0xa5, 0x16, 0xd9, 0xe6, 0x75, 0x7b, 0xf6, 0x0c, 0x81, 0x32, 0xf4, 0xf2, + 0x44, 0x52, 0x05, 0xf0, 0x77, 0x48, 0xe2, 0x24, 0xaf, 0x53, 0x69, 0x07, 0x1b, 0xef, 0x82, 0xe0, + 0x8f, 0x3f, 0xda, 0x27, 0x94, 0x2b, 0x7d, 0x9e, 0xc8, 0xb9, 0xa8, 0x73, 0x87, 0xa2, 0x47, 0x2d, + 0xec, 0x94, 0xc9, 0xcd, 0x1a, 0x07, 0x54, 0xf2, 0x33, 0xa6, 0x01, 0xf7, 0x96, 0x4d, 0x02, 0x71, + 0xe2, 0xfc, 0xf7, 0xfc, 0x9e, 0x24, 0x6a, 0xbd, 0x6d, 0x47, 0x70, 0x6f, 0xc0, 0xdf, 0x9c, 0x9f, + 0x9e, 0x80, 0x44, 0x6d, 0xfa, 0x94, 0xa3, 0x6e, 0xb0, 0xdb, 0xa6, 0xc1, 0x8e, 0xbe, 0x09, 0x92, + 0x8f, 0x53, 0x18, 0x0f, 0xb1, 0xa9, 0x65, 0x76, 0xb4, 0x1e, 0x5f, 0x36, 0x30, 0x55, 0x3b, 0x9d, + 0xe8, 0xfc, 0xee, 0xdd, 0x81, 0x6f, 0x47, 0xfb, 0xe1, 0xc0, 0xf7, 0xab, 0x98, 0x76, 0xe4, 0x13, + 0xa7, 0x0d, 0x10, 0x24, 0xe5, 0x67, 0x4e, 0x16, 0x94, 0xd6, 0xc9, 0x59, 0xc5, 0xbd, 0xab, 0xcd, + 0x36, 0x9c, 0x2f, 0x2a, 0xf0, 0x08, 0xb9, 0xc3, 0x2e, 0x74, 0x2a, 0x23, 0x76, 0x85, 0x8a, 0xb5, + 0x92, 0x49, 0x8a, 0x23, 0x23, 0xdb, 0xd8, 0xd9, 0x15, 0x98, 0x22, 0xbc, 0x21, 0xd1, 0xde, 0x94, + 0x18, 0x7a, 0x69, 0x41, 0x40, 0xbb, 0x3c, 0xcb, 0x93, 0xf8, 0xa7, 0xbe, 0x01, 0xa2, 0xff, 0xf1, + 0x7b, 0x7e, 0xf9, 0x90, 0xc3, 0xdd, 0x6d, 0xf3, 0x1a, 0xda, 0xe8, 0x83, 0x7d, 0x5a, 0xc5, 0x3f, + 0x73, 0x8f, 0x6f, 0x6f, 0x34, 0x6c, 0xbb, 0xee, 0xc8, 0x73, 0xc3, 0xf8, 0xaf, 0xaa, 0xa0, 0xfe, + 0xcd, 0x6a, 0x93, 0xa3, 0xc8, 0x3d, 0x5d, 0x24, 0x16, 0x1c, 0xfa, 0x04, 0x1b, 0xfd, 0x86, 0xd1, + 0xb0, 0x19, 0x22, 0x88, 0xcc, 0xc1, 0x91, 0xa4, 0x39, 0xe6, 0x40, 0x0b, 0xbd, 0x7d, 0x8e, 0xba, + 0xe8, 0x31, 0x85, 0x67, 0xfa, 0xf6, 0xde, 0x72, 0xd6, 0x0c, 0x05, 0x93, 0x39, 0x67, 0x98, 0x06, + 0x32, 0x8d, 0x95, 0x4a, 0x5b, 0x1a, 0x0e, 0x52, 0x75, 0xcd, 0x3c, 0xa9, 0xc4, 0xe0, 0x38, 0xc0, + 0xb1, 0xba, 0xf9, 0x2e, 0x93, 0x79, 0x75, 0xcc, 0xc7, 0xbd, 0x11, 0x02, 0xe7, 0x10, 0x0d, 0x6a, + 0x37, 0x31, 0x6f, 0x1e, 0x38, 0xb4, 0x26, 0xb9, 0x4a, 0x96, 0x31, 0x7f, 0x41, 0x6a, 0x9f, 0x8e, + 0x86, 0xcd, 0x02, 0x4c, 0x83, 0x88, 0xf1, 0xed, 0x67, 0x7a, 0x9b, 0x43, 0xc7, 0x74, 0x88, 0x2a, + 0x68, 0x7b, 0xee, 0xc6, 0x09, 0x5b, 0xcf, 0x0a, 0x05, 0x1b, 0x27, 0xe2, 0x5a, 0x6e, 0xb7, 0x64, + 0xa6, 0x13, 0x9f, 0x1d, 0x8c, 0x7b, 0x93, 0x76, 0x72, 0x60, 0x77, 0xd9, 0x6b, 0xdf, 0xe7, 0x29, + 0x3f, 0xeb, 0x0a, 0xd8, 0x1c, 0x8c, 0xbb, 0xb1, 0x86, 0x5d, 0x9d, 0xbd, 0x3c, 0x64, 0x23, 0x55, + 0x56, 0xb5, 0x6b, 0x45, 0x57, 0x70, 0x6e, 0xa5, 0x4d, 0xca, 0x3d, 0x48, 0x58, 0xdf, 0xcc, 0x4d, + 0xfe, 0xbb, 0x55, 0xff, 0xc4, 0xd7, 0x87, 0x00, 0x4b, 0x7c, 0x44, 0x9e, 0x2f, 0x30, 0x95, 0xf9, + 0x27, 0x55, 0xee, 0x3c, 0xe9, 0x12, 0x65, 0x43, 0x99, 0x1c, 0xf3, 0x0d, 0x71, 0x10, 0x13, 0x06, + 0x90, 0x55, 0x09, 0x87, 0xf4, 0xc1, 0x8a, 0x27, 0x8b, 0xbf, 0x40, 0x0d, 0x29, 0x2f, 0x90, 0x60, + 0x60, 0x7a, 0x8c, 0x4f, 0x46, 0x25, 0x9c, 0xf9, 0x61, 0x0b, 0x1a, 0x77, 0x13, 0x4e, 0xb0, 0x87, + 0x2c, 0x55, 0x0b, 0xe5, 0x18, 0xb6, 0xcd, 0xc0, 0x24, 0xc0, 0xc4, 0x00, 0x7e, 0x0a, 0x89, 0x0f, + 0x3b, 0x94, 0xe9, 0x5c, 0x9b, 0xc3, 0x3b, 0x73, 0xb1, 0x8f, 0xb8, 0xdc, 0xbd, 0xf3, 0xf8, 0xd1, + 0xa3, 0x47, 0x4f, 0xd8, 0xeb, 0x52, 0x96, 0x89, 0x59, 0x57, 0x4e, 0xa6, 0xcc, 0x19, 0x51, 0xda, + 0x42, 0x59, 0x4b, 0x15, 0xc2, 0x8e, 0xd1, 0xf1, 0x0c, 0x6a, 0xbd, 0x74, 0x6c, 0x95, 0x49, 0xaa, + 0xdf, 0x1c, 0x53, 0x0b, 0x35, 0x4d, 0xb8, 0x1a, 0xb2, 0x54, 0xb3, 0x97, 0x97, 0x53, 0x06, 0x52, + 0x62, 0x6b, 0x5d, 0x1b, 0x36, 0x13, 0xe5, 0x12, 0x8b, 0xb4, 0xa0, 0x4d, 0xc8, 0x26, 0x67, 0x17, + 0x21, 0x93, 0x2e, 0x89, 0x58, 0xa5, 0xca, 0x7e, 0xaf, 0x0b, 0xac, 0x19, 0x13, 0x77, 0xb1, 0x95, + 0x32, 0x90, 0x66, 0x2d, 0x1b, 0x5c, 0x4e, 0x8f, 0x02, 0x66, 0xf5, 0xdc, 0xad, 0x84, 0x91, 0xac, + 0x19, 0xb9, 0x3e, 0xc3, 0xdc, 0x83, 0x34, 0xd3, 0x1f, 0xbb, 0x64, 0x7c, 0x79, 0xe9, 0xf3, 0xca, + 0x8c, 0xaf, 0x10, 0x8c, 0x2a, 0x33, 0x00, 0xe1, 0xab, 0x51, 0x6a, 0x4e, 0x5c, 0x5e, 0xdd, 0x88, + 0xc8, 0x83, 0x83, 0x16, 0x9d, 0xa9, 0x06, 0x7a, 0x34, 0x00, 0x33, 0x98, 0x11, 0x32, 0xe4, 0x3c, + 0xeb, 0x26, 0x4a, 0x86, 0xf1, 0xca, 0xa2, 0x51, 0x91, 0x73, 0xac, 0x94, 0x84, 0x8e, 0x66, 0x22, + 0xb7, 0xba, 0xc5, 0xdb, 0x65, 0x12, 0x93, 0x83, 0x31, 0x80, 0x84, 0x75, 0xea, 0xfa, 0xde, 0xaa, + 0x69, 0x26, 0x37, 0x6f, 0x68, 0x36, 0xa8, 0xf3, 0x94, 0xcd, 0x24, 0xcd, 0xd1, 0xe5, 0x02, 0x62, + 0x3c, 0x96, 0x50, 0x87, 0xc9, 0xb0, 0x55, 0x9e, 0x46, 0x74, 0x6c, 0x34, 0x1b, 0xf7, 0x4e, 0x94, + 0xed, 0xac, 0x69, 0xf6, 0x95, 0xda, 0x21, 0x03, 0x08, 0xe4, 0x90, 0x69, 0xa8, 0x34, 0x2b, 0x05, + 0xbc, 0x45, 0xc9, 0x90, 0x26, 0xc8, 0x7f, 0xd8, 0x91, 0xe0, 0xc1, 0xc8, 0x39, 0x8a, 0x2e, 0x63, + 0xcd, 0x05, 0x60, 0x83, 0x26, 0xa1, 0x3e, 0xf3, 0x8e, 0x8e, 0xd4, 0x36, 0xa7, 0xa9, 0x4a, 0x90, + 0x6c, 0xcd, 0x34, 0x43, 0x98, 0x83, 0x01, 0xd6, 0x8d, 0x75, 0x5e, 0xb7, 0x9a, 0x7b, 0xf5, 0x39, + 0x85, 0x09, 0xdb, 0xd2, 0xc6, 0xa4, 0xb4, 0x3f, 0x1a, 0xaa, 0x06, 0xf5, 0x13, 0x59, 0xae, 0x99, + 0x48, 0x12, 0x0a, 0x1f, 0x30, 0x79, 0xa3, 0x9e, 0x2b, 0xd6, 0x71, 0x13, 0x9d, 0xa6, 0x93, 0x32, + 0xfd, 0x4e, 0x0c, 0x2f, 0xdf, 0xb4, 0x31, 0xa4, 0xbf, 0xe7, 0x22, 0x01, 0x3d, 0x12, 0xe4, 0x90, + 0xf3, 0x9d, 0x83, 0xaf, 0x26, 0x6d, 0xec, 0x8e, 0xf2, 0x7c, 0xab, 0x56, 0x94, 0x29, 0x6b, 0x87, + 0x45, 0xe4, 0x16, 0x56, 0x00, 0xb8, 0xa4, 0xc4, 0xe8, 0xb0, 0x35, 0xe3, 0xff, 0xa1, 0x12, 0x8e, + 0x76, 0xf0, 0xf6, 0xf0, 0x01, 0x63, 0x18, 0x83, 0xb4, 0x70, 0x08, 0xf2, 0xd2, 0xc7, 0x40, 0x51, + 0x56, 0x24, 0x92, 0x46, 0x47, 0x30, 0x67, 0x33, 0x26, 0x76, 0x59, 0x4f, 0xcc, 0x93, 0x3d, 0x18, + 0x4f, 0xba, 0x2c, 0x6f, 0x08, 0x07, 0x54, 0xf3, 0x60, 0xfc, 0x1d, 0x7a, 0x7c, 0x4d, 0x4c, 0xd7, + 0xbb, 0x10, 0x65, 0x2d, 0x72, 0x1f, 0x96, 0xee, 0xe8, 0x86, 0xf7, 0xcc, 0xf8, 0xb4, 0xc9, 0xe0, + 0x23, 0x93, 0xd6, 0xaa, 0xd4, 0xd8, 0xf4, 0x55, 0x04, 0x5b, 0xa6, 0x3a, 0xba, 0xe4, 0x1b, 0x9b, + 0x88, 0x45, 0xeb, 0x0a, 0x24, 0xf8, 0x0a, 0x13, 0x9d, 0x36, 0xad, 0x51, 0xa2, 0x63, 0xf1, 0x99, + 0xc3, 0x08, 0x5d, 0x2e, 0x1b, 0xb6, 0x6b, 0xc7, 0x75, 0xd6, 0xcb, 0x90, 0x70, 0x31, 0x1f, 0xb6, + 0x80, 0xa3, 0x1b, 0x91, 0xcd, 0x5d, 0x6b, 0x46, 0xf5, 0xb5, 0x53, 0x7b, 0x27, 0xbc, 0x7d, 0x1e, + 0x0d, 0xc5, 0x26, 0x10, 0xe3, 0x5e, 0xab, 0x6f, 0xb3, 0xe8, 0xb3, 0x74, 0xc7, 0x6a, 0x3f, 0xb0, + 0xb7, 0x31, 0xf7, 0x33, 0x99, 0x4f, 0xb9, 0x0a, 0xf7, 0xd0, 0x46, 0xdf, 0x98, 0x75, 0xd0, 0xf5, + 0x6e, 0xc7, 0xee, 0xa7, 0x9d, 0x39, 0x36, 0x8d, 0x26, 0xf3, 0x88, 0xa4, 0x84, 0x9f, 0x59, 0x1d, + 0xfc, 0x34, 0x7e, 0xed, 0xb7, 0x6d, 0x10, 0x6d, 0x92, 0x72, 0xc3, 0x56, 0x5f, 0x87, 0xa2, 0xf3, + 0x92, 0xb5, 0x68, 0x00, 0x9a, 0x16, 0x89, 0xde, 0x16, 0x0a, 0xc2, 0xab, 0x83, 0xe1, 0xc6, 0x3d, + 0xe3, 0x06, 0x18, 0x1d, 0x16, 0x37, 0x77, 0x6c, 0x11, 0xe9, 0xdd, 0x0e, 0xc9, 0xc1, 0xd7, 0x31, + 0xf9, 0x4a, 0xe7, 0xbc, 0x15, 0x93, 0x83, 0x70, 0xc7, 0xf8, 0x2f, 0x01, 0xd9, 0xc1, 0x83, 0x2a, + 0xa8, 0xf7, 0xad, 0x12, 0x6a, 0x1c, 0xa1, 0x16, 0xd1, 0xa2, 0x33, 0xbc, 0x79, 0xb9, 0xf2, 0xa5, + 0x79, 0xf9, 0xdb, 0xe9, 0xab, 0x37, 0xaf, 0xce, 0xa6, 0xa7, 0x4d, 0xdf, 0x00, 0xdd, 0x1a, 0xea, + 0x31, 0xb7, 0x9e, 0x88, 0x7c, 0x38, 0x7a, 0x74, 0x09, 0x6b, 0xa8, 0xf6, 0xa6, 0xbc, 0x42, 0x10, + 0x69, 0xfc, 0x5e, 0xa3, 0x9b, 0xa0, 0x01, 0xce, 0x77, 0x69, 0x84, 0x81, 0xcb, 0x8d, 0xdc, 0xf3, + 0xc4, 0xd8, 0x5e, 0xf4, 0xbc, 0xba, 0xd3, 0xc9, 0x55, 0xd4, 0xd6, 0xe5, 0xf3, 0x5b, 0xe8, 0x3e, + 0xdc, 0x50, 0xb7, 0xf5, 0xe4, 0x48, 0x04, 0x3c, 0xa3, 0xca, 0x4f, 0xd1, 0x9b, 0xa2, 0xae, 0x6a, + 0x8e, 0x66, 0xb8, 0x60, 0x75, 0xa5, 0xd2, 0x96, 0x43, 0xf7, 0xa3, 0x05, 0x5a, 0x70, 0x56, 0xcf, + 0x22, 0xdc, 0x1a, 0x87, 0x17, 0x5a, 0x97, 0x98, 0x0d, 0x6b, 0x74, 0xba, 0x21, 0x0d, 0x84, 0x43, + 0xb4, 0x6e, 0x61, 0x16, 0xf4, 0x63, 0xca, 0xfb, 0x59, 0x8e, 0x7e, 0xc9, 0xc7, 0xf4, 0xfa, 0xe2, + 0x82, 0xb2, 0xa1, 0xc7, 0xae, 0xa5, 0x21, 0xbe, 0x61, 0xfb, 0xd1, 0xfd, 0x87, 0xd1, 0xfe, 0xde, + 0xec, 0xe0, 0x51, 0xf4, 0xe0, 0x21, 0xfb, 0xcf, 0xbf, 0xfe, 0x4d, 0x18, 0x0c, 0x92, 0x80, 0x1d, + 0xec, 0x1f, 0x3c, 0x60, 0x3f, 0xa6, 0x91, 0x2e, 0xaf, 0xf0, 0x63, 0x58, 0x08, 0x55, 0x46, 0x51, + 0xb4, 0xb3, 0x7e, 0x48, 0xeb, 0x87, 0x05, 0x7a, 0x06, 0x12, 0xe4, 0x73, 0xb3, 0x7e, 0xf1, 0x22, + 0xd9, 0xce, 0xf6, 0x66, 0xa2, 0x7d, 0xa6, 0x0b, 0x4c, 0x56, 0xec, 0xa8, 0xc6, 0x28, 0x68, 0xb6, + 0x15, 0x8d, 0xbf, 0x39, 0x11, 0x21, 0x40, 0xfe, 0x7f, 0x00, 0x72, 0xb8, 0x11, 0xfc, 0x43, 0xc2, + 0x56, 0x6a, 0xa9, 0x86, 0xfe, 0xda, 0x44, 0xb7, 0x05, 0xd8, 0xb7, 0x87, 0xb6, 0xb0, 0x97, 0x18, + 0x99, 0x2a, 0xaa, 0xd3, 0x2f, 0x9c, 0xdc, 0xdd, 0x8a, 0xb1, 0x45, 0xd2, 0x05, 0x10, 0x2d, 0x40, + 0xc9, 0xa6, 0x9f, 0xd8, 0x4a, 0x26, 0x0a, 0xb4, 0xeb, 0xd0, 0x1a, 0x97, 0x1b, 0x5f, 0x7b, 0x47, + 0x2c, 0xab, 0xd1, 0x39, 0xfd, 0x5b, 0x3f, 0x1c, 0xa0, 0x07, 0xe2, 0xda, 0x63, 0xd6, 0xb8, 0x87, + 0xa3, 0x69, 0x6b, 0x46, 0x93, 0x2f, 0xd2, 0x05, 0xfd, 0xa1, 0xf9, 0x89, 0xc6, 0x23, 0xd7, 0xef, + 0x70, 0xea, 0x79, 0x1c, 0x13, 0x2a, 0xf7, 0x26, 0xa4, 0xf7, 0x7f, 0xde, 0xf3, 0x71, 0x7d, 0x96, + 0x19, 0x5c, 0x77, 0x15, 0x5a, 0xc9, 0x24, 0xc9, 0x56, 0xf4, 0x63, 0x41, 0xdb, 0xb9, 0xcf, 0xd1, + 0xd3, 0x71, 0x0f, 0x43, 0x02, 0xc2, 0xbc, 0x66, 0xf0, 0xf8, 0x31, 0x5c, 0x66, 0xb9, 0x9e, 0x21, + 0x01, 0x70, 0x97, 0x36, 0xc3, 0xf3, 0xb3, 0x67, 0xa7, 0x2f, 0x27, 0xa7, 0x5f, 0xe2, 0xde, 0xbb, + 0x38, 0x9b, 0xb2, 0xbc, 0x51, 0xe5, 0x7d, 0x45, 0xbb, 0xef, 0x6c, 0x9e, 0x48, 0x03, 0x07, 0xe1, + 0x91, 0xb5, 0x18, 0x1a, 0xd0, 0x5e, 0x70, 0x73, 0x2d, 0x3b, 0x5e, 0xb4, 0xaa, 0xe2, 0xc4, 0x60, + 0xfe, 0x56, 0xcf, 0xfc, 0x45, 0x9d, 0x1a, 0x1f, 0x6d, 0x69, 0xba, 0x0c, 0xb1, 0x06, 0x71, 0x66, + 0xf3, 0x4b, 0xc8, 0x37, 0x47, 0xfc, 0x2f, 0x27, 0xfc, 0xde, 0x0f, 0x8d, 0xf8, 0x43, 0xea, 0xbd, + 0xf8, 0xa0, 0x9b, 0x0d, 0x5d, 0x73, 0xe8, 0x17, 0xd4, 0xff, 0x02, 0x64, 0x9b, 0x5d, 0x18, 0x51, 0x15, 0x00, 0x00 }; From cf20c800988624df8a1b27e4f9872d93970fd759 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 16 Dec 2023 23:20:31 +0100 Subject: [PATCH 057/108] #define _MoonModules_WLED_ very useful to create "runs anywhere" usermods. --- wled00/wled.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wled00/wled.h b/wled00/wled.h index ade193a8..524a415a 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -10,6 +10,9 @@ // version code in format yymmddb (b = daily build) #define VERSION 2312160 +// WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED. +#define _MoonModules_WLED_ + //WLEDMM + Moustachauve/Wled-Native // You can define custom product info from build flags. // This is useful to allow API consumer to identify what type of WLED version From cf2f378f9343279669bddf43cb069ca140716a15 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 17 Dec 2023 22:15:28 +0100 Subject: [PATCH 058/108] Fix for #3593 --- usermods/multi_relay/usermod_multi_relay.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/usermods/multi_relay/usermod_multi_relay.h b/usermods/multi_relay/usermod_multi_relay.h index 8f0bf383..cf0aca22 100644 --- a/usermods/multi_relay/usermod_multi_relay.h +++ b/usermods/multi_relay/usermod_multi_relay.h @@ -496,10 +496,10 @@ void MultiRelay::setup() { * loop() is called continuously. Here you can check for events, read sensors, etc. */ void MultiRelay::loop() { - yield(); - if (!enabled || strip.isUpdating()) return; - static unsigned long lastUpdate = 0; + yield(); + if (!enabled || (strip.isUpdating() && millis() - lastUpdate < 100)) return; + if (millis() - lastUpdate < 100) return; // update only 10 times/s lastUpdate = millis(); From 04136791b55b8aacb6b3d2af104e357b0a75c630 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 18 Dec 2023 10:44:05 +0100 Subject: [PATCH 059/108] sound sync: shown "v2+" when framecounter is used v2+ = improved format (MM fork only) including sequence frameCounter. --- usermods/audioreactive/audio_reactive.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index c97ccb0f..e6da16d3 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -1569,6 +1569,10 @@ class AudioReactive : public Usermod { // validate sequence, discard out-of-sequence packets static uint8_t lastFrameCounter = 0; + // add info for UI + if ((receivedPacket->frameCounter > 0) && (lastFrameCounter > 0)) receivedFormat = 3; // v2+ + else receivedFormat = 2; // v2 + // check sequence bool sequenceOK = false; if(receivedPacket->frameCounter > lastFrameCounter) sequenceOK = true; // sequence OK if((lastFrameCounter < 12) && (receivedPacket->frameCounter > 248)) sequenceOK = false; // prevent sequence "roll-back" due to late packets (1->254) @@ -1668,15 +1672,15 @@ class AudioReactive : public Usermod { // VERIFY THAT THIS IS A COMPATIBLE PACKET if (packetSize == sizeof(audioSyncPacket) && (isValidUdpSyncVersion((const char *)fftUdpBuffer))) { + receivedFormat = 2; haveFreshData = decodeAudioData(packetSize, fftUdpBuffer); //DEBUGSR_PRINTLN("Finished parsing UDP Sync Packet v2"); - receivedFormat = 2; } else { if (packetSize == sizeof(audioSyncPacket_v1) && (isValidUdpSyncVersion_v1((const char *)fftUdpBuffer))) { decodeAudioData_v1(packetSize, fftUdpBuffer); + receivedFormat = 1; //DEBUGSR_PRINTLN("Finished parsing UDP Sync Packet v1"); haveFreshData = true; - receivedFormat = 1; } else receivedFormat = 0; // unknown format } } @@ -2399,7 +2403,7 @@ class AudioReactive : public Usermod { if (audioSyncEnabled) { if (audioSyncEnabled & AUDIOSYNC_SEND) { infoArr.add(F("send mode")); - if ((udpSyncConnected) && (millis() - lastTime < AUDIOSYNC_IDLE_MS)) infoArr.add(F(" v2")); + if ((udpSyncConnected) && (millis() - lastTime < AUDIOSYNC_IDLE_MS)) infoArr.add(F(" v2+")); } else if (audioSyncEnabled == AUDIOSYNC_REC) { infoArr.add(F("receive mode")); } else if (audioSyncEnabled == AUDIOSYNC_REC_PLUS) { @@ -2411,6 +2415,7 @@ class AudioReactive : public Usermod { if (audioSyncEnabled && udpSyncConnected && (millis() - last_UDPTime < AUDIOSYNC_IDLE_MS)) { if (receivedFormat == 1) infoArr.add(F(" v1")); if (receivedFormat == 2) infoArr.add(F(" v2")); + if (receivedFormat == 3) infoArr.add(F(" v2+")); } #if defined(WLED_DEBUG) || defined(SR_DEBUG) || defined(SR_STATS) From c8cee6cb51da749370fc30f8491b6bc20cd09109 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 18 Dec 2023 11:34:42 +0100 Subject: [PATCH 060/108] -S2/-C3: removing stupid double protection of PSRAM pins these pins are already forbidden in isPinOK. In MM, trying to allocate them produces a buch of false warnings. --- wled00/wled.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 9fc7cd88..4c2f6c87 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -565,12 +565,12 @@ void WLED::setup() 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 (may fail due to isPinOk() but that will also prevent other allocation) - 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); + //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 (may fail due to isPinOk() but that will also prevent other allocation) - 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); + //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} }; From 36eb52059293e82eb30923d838fae44d19407ea9 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 18 Dec 2023 15:39:12 +0100 Subject: [PATCH 061/108] reduce RAM needs for -S2, user message on heap emergency actions --- wled00/const.h | 2 +- wled00/wled.cpp | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/wled00/const.h b/wled00/const.h index a89e2298..bb8c7a98 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -448,7 +448,7 @@ #if defined(ARDUINO_ARCH_ESP32C3) #define JSON_BUFFER_SIZE 44000 // WLEDMM - max 44KB on -C3 with PSRAM (chip has 400kb RAM) #else - #define JSON_BUFFER_SIZE 32000 // WLEDMM - max 32KB on -S2 with PSRAM (chip has 320kb RAM) + #define JSON_BUFFER_SIZE 28000 // WLEDMM - max 28KB on -S2 with PSRAM (chip has 320kb RAM) #endif #else #define JSON_BUFFER_SIZE 54000 // WLEDMM (was 60000) slightly reduced to avoid build error "region dram0_0_seg overflowed" diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 4c2f6c87..0e9afc5e 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -1180,16 +1180,19 @@ void WLED::handleConnection() #ifdef ARDUINO_ARCH_ESP32 // reconnect WiFi to clear stale allocations if heap gets too low if (now - heapTime > 5000) { // WLEDMM: updated with better logic for small heap available by block, not total. - // uint32_t heap = ESP.getFreeHeap(); +#if defined(ARDUINO_ARCH_ESP32S2) + uint32_t heap = ESP.getFreeHeap(); // WLEDMM works better on -S2 +#else uint32_t heap = heap_caps_get_largest_free_block(0x1800); // WLEDMM: This is a better metric for free heap. +#endif if (heap < MIN_HEAP_SIZE && lastHeap < MIN_HEAP_SIZE) { - DEBUG_PRINT(F("Heap too low! (step 2, force reconnect): ")); - DEBUG_PRINTLN(heap); + USER_PRINT(F("Heap too low! (step 2, force reconnect): ")); + USER_PRINTLN(heap); forceReconnect = true; strip.purgeSegments(true); // remove all but one segments from memory } else if (heap < MIN_HEAP_SIZE) { - DEBUG_PRINT(F("Heap too low! (step 1, flush unread UDP): ")); - DEBUG_PRINTLN(heap); + USER_PRINT(F("Heap too low! (step 1, flush unread UDP): ")); + USER_PRINTLN(heap); strip.purgeSegments(); notifierUdp.flush(); rgbUdp.flush(); From c574f68e3b5ca669bd3759bac8c5bc1aae94c12f Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 18 Dec 2023 16:35:31 +0100 Subject: [PATCH 062/108] trying to fix horribly broken build envs for -S2 and -C3 Flags for -S3 and "classic esp32" were mixed into specific flags for S2/C3, leading to subtly chaotic results. WHODUNIT? --- platformio.ini | 77 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/platformio.ini b/platformio.ini index 84e9b3ae..e1506af6 100644 --- a/platformio.ini +++ b/platformio.ini @@ -256,7 +256,7 @@ extra_scripts = ${scripts_defaults.extra_scripts} [esp8266] build_flags = - -DESP8266 + -DESP8266 -DZSHIT -DFP_IN_IROM ;-Wno-deprecated-declarations ;-Wno-register ;; leaves some warnings when compiling C files: command-line option '-Wno-register' is valid for C++/ObjC++ but not for C @@ -284,6 +284,7 @@ lib_deps = ;; makuna/NeoPixelBus @ 2.6.9 ;; WLEDMM use if you have problems with 2.7.5 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} + stiffupper8266.lib ;; for probing the buildenv. [esp32] #platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip @@ -292,7 +293,7 @@ platform = espressif32@3.5.0 platform_packages = framework-arduinoespressif32 @ https://github.com/Aircoookie/arduino-esp32.git#1.0.6.4 build_flags = -g - -DARDUINO_ARCH_ESP32 + -DARDUINO_ARCH_ESP32 -DYSHIT #-DCONFIG_LITTLEFS_FOR_IDF_3_2 -D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE @@ -310,6 +311,7 @@ lib_deps = https://github.com/softhack007/LITTLEFS-threadsafe.git#master makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} + stiffupper.lib ;; for probing the buildenv. ;; WLEDMM begin @@ -328,7 +330,7 @@ platformV4_packages_xp = platformio/framework-arduinoespressif32 @ ~3.20009.0 ;; platformV4_packages_xp = platformio/framework-arduinoespressif32 @ ~3.20011.0 ;; arduino-esp32 v2.0.11 (latest one supported in platformio) build_flagsV4 = -g - -DARDUINO_ARCH_ESP32 -DESP32 + -DARDUINO_ARCH_ESP32 -DESP32 -DXSHIT -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE -D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE @@ -338,6 +340,7 @@ lib_depsV4 = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 ;; WLEDMM this must be first in the list, otherwise Aircoookie/ESPAsyncWebServer pulls in an older version of AsyncTCP !! makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} + stiffupperV4.lib ;; for probing the buildenv. ;; WLEDMM end @@ -351,7 +354,7 @@ platform = espressif32@5.3.0 platform_packages = build_flags = -g -Wshadow=compatible-local ;; emit warning in case a local variable "shadows" another local one - -DARDUINO_ARCH_ESP32 -DESP32 + -DARDUINO_ARCH_ESP32 -DESP32 -DXSHIT #-DCONFIG_LITTLEFS_FOR_IDF_3_2 -D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE @@ -361,18 +364,19 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} + stiffupperVV.lib ;; for probing the buildenv. [esp32s2] ;; generic definitions for all ESP32-S2 boards platform = espressif32@5.3.0 platform_packages = build_flags = -g - -DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM + -DARDUINO_ARCH_ESP32 -DESP32 -DS2XSHIT ;; WLEDMM -DARDUINO_ARCH_ESP32S2 -DCONFIG_IDF_TARGET_ESP32S2=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM -D CONFIG_ASYNC_TCP_USE_WDT=0 - -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9216 ;; WLEDMM increase stack by 1Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=8614 ;; WLEDMM increase stack by 1Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DCO -DARDUINO_USB_MODE=0 ;; this flag is mandatory for ESP32-S2 ! @@ -383,13 +387,14 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} + ;;; stiffupperS2.lib ;; for probing the buildenv. Nothing more. Did I mention that I like AC/DC? [esp32c3] ;; generic definitions for all ESP32-C3 boards platform = espressif32@5.3.0 platform_packages = build_flags = -g - -DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM + -DARDUINO_ARCH_ESP32 -DESP32 -DC3XSHIT ;; WLEDMM -DARDUINO_ARCH_ESP32C3 -DCONFIG_IDF_TARGET_ESP32C3=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM @@ -404,6 +409,7 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} + stiffupperC3.lib [esp32s3] ;; generic definitions for all ESP32-S3 boards @@ -411,7 +417,7 @@ platform = espressif32@5.3.0 platform_packages = build_flags = -g -DESP32 - -DARDUINO_ARCH_ESP32 + -DARDUINO_ARCH_ESP32 -DS3XSHIT -DARDUINO_ARCH_ESP32S3 -DCONFIG_IDF_TARGET_ESP32S3=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM @@ -426,6 +432,7 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} + stiffupperS3.lib # ------------------------------------------------------------------------------ @@ -1055,23 +1062,23 @@ build_unflags = ${esp32_4MB_M_base.build_unflags} ${common_mm.build_disable_sync lib_deps = ${esp32_4MB_M_base.lib_deps} ${common_mm.lib_deps_XL} ; board_build.partitions = tools/WLED_ESP32-wrover_4MB.csv -;common default for all V4 min environments +;common default for all V4 min environments, including -S3, -S2, -C3 [esp32_4MB_V4_S_base] board = esp32dev upload_speed = 460800 ; or 921600 platform = ${esp32.platformV4} -platform_packages = - ${esp32.platformV4_packages} - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5 ; align main tools with riscV tools +platform_packages = ${esp32.platformV4_packages} build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags} ${esp32.build_flagsV4} ${common_mm.build_flags_S} +build_flags = ${common.build_flags} ${common_mm.build_flags_S} ;; do not include ${esp32.build_flagsV4} here !!!! -Wno-misleading-indentation -Wno-format-truncation -Wshadow=compatible-local ;; emit warning in case a local variable "shadows" another local one ;-Wstack-usage=2732 ;; warn if a function needs more that 30% of availeable stack ("stack usage might be unbounded", "stack usage is 2824 bytes") ;-Wsuggest-attribute=const -Wsuggest-attribute=pure ;; ask compiler for hints on attributes -D WLED_ENABLE_DMX_INPUT -lib_deps = ${esp32.lib_depsV4} ${common_mm.lib_deps_S} +lib_deps = ${common_mm.lib_deps_S} ;; do not include ${esp32.lib_depsV4} here !!!! https://github.com/someweisguy/esp_dmx.git#v3.0.2-beta ;; for DMX_INPUT +esp32_build_flags = ${esp32.build_flagsV4} ${esp32_4MB_V4_S_base.build_flags} ;; this is for esp32 only, including specific "V4" flags +esp32_lib_deps = ${esp32.lib_depsV4} ${esp32_4MB_V4_S_base.lib_deps} ;; this is for esp32 only, including specific "V4" flags board_build.partitions = ${esp32.default_partitions} board_build.f_flash = 80000000L ; use full 80MHz speed for flash (default = 40Mhz) board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad i/o) @@ -1080,8 +1087,10 @@ board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad [esp32_4MB_V4_M_base] extends = esp32_4MB_V4_S_base -build_flags = ${esp32_4MB_V4_S_base.build_flags} ${common_mm.build_flags_M} +build_flags = ${esp32_4MB_V4_S_base.build_flags} ${common_mm.build_flags_M} ;; generic, for all variants lib_deps = ${esp32_4MB_V4_S_base.lib_deps} ${common_mm.lib_deps_V4_M} +esp32_build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} ${common_mm.build_flags_M} ;; for esp32 only, including specific "V4" flags +esp32_lib_deps = ${esp32_4MB_V4_S_base.esp32_lib_deps} ${common_mm.lib_deps_V4_M} board_build.partitions = ${esp32_4MB_V4_S_base.board_build.partitions} ;board_build.flash_mode = qio ; (dio = dual i/o; more compatible than qio = quad i/o) @@ -1474,7 +1483,7 @@ lib_deps = ${esp8266.lib_deps} ; compiled with ESP-IDF 4.4.1 [env:esp32_4MB_V4_S] extends = esp32_4MB_V4_S_base -build_flags = ${esp32_4MB_V4_S_base.build_flags} +build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} -D WLED_RELEASE_NAME=esp32_4MB_V4_S -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup @@ -1487,6 +1496,7 @@ build_flags = ${esp32_4MB_V4_S_base.build_flags} ; -D WLED_DEBUG ; -D SR_DEBUG ; -D MIC_LOGGER +lib_deps = ${esp32_4MB_V4_S_base.esp32_lib_deps} lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation ; RAM: [=== ] 25.1% (used 82176 bytes from 327680 bytes) ; Flash: [========= ] 93.8% (used 1474893 bytes from 1572864 bytes) @@ -1494,7 +1504,7 @@ lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compila ; compiled with ESP-IDF 4.4.1 [env:esp32_4MB_V4_M] extends = esp32_4MB_V4_M_base -build_flags = ${esp32_4MB_V4_M_base.build_flags} +build_flags = ${esp32_4MB_V4_M_base.esp32_build_flags} -D WLED_RELEASE_NAME=esp32_4MB_V4_M -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup @@ -1503,6 +1513,7 @@ build_flags = ${esp32_4MB_V4_M_base.build_flags} -D WLED_DISABLE_HUESYNC ;RAM 122 bytes; FLASH 6308 bytes ;-D WLED_DISABLE_MQTT ; RAM 216 bytes; FLASH 16496 bytes -D WLED_DISABLE_INFRARED ;RAM 136 bytes; FLASH 24492 bytes ;; softhack007 disabled to stay below 100% flash size +lib_deps = ${esp32_4MB_V4_M_base.esp32_lib_deps} lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation build_unflags = ${esp32_4MB_V4_M_base.build_unflags} -D USERMOD_ANIMARTRIX ;; Tips our memory usage over the limit @@ -1515,14 +1526,14 @@ build_unflags = ${esp32_4MB_V4_M_base.build_unflags} extends = esp32_4MB_V4_S_base build_unflags = ${esp32_4MB_V4_S_base.build_unflags} ${Speed_Flags.build_unflags} ;; to override -Os -build_flags = ${esp32_4MB_V4_S_base.build_flags} +build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} ${Speed_Flags.build_flags} ;; optimize for speed instead of size -D WLED_RELEASE_NAME=esp32_16MB_V4_S -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup -D WLEDMM_FASTPATH ; WLEDMM experimental option. Reduces audio lag (latency), and allows for faster LED framerates. May break compatibility with previous versions. ;; ${common_mm.animartrix_build_flags} ;; breaks the build - Internal Compiler Error -lib_deps = ${esp32_4MB_V4_S_base.lib_deps} +lib_deps = ${esp32_4MB_V4_S_base.esp32_lib_deps} ;; ${common_mm.animartrix_lib_deps} board = esp32_16MB board_build.partitions = tools/WLED_ESP32_16MB.csv ;; WLED standard for 16MB flash: 2MB firmware, 12 MB filesystem @@ -1537,7 +1548,7 @@ board_build.partitions = tools/WLED_ESP32_16MB.csv ;; WLED standard for ; compiled with ESP-IDF 4.4.1 [env:esp32_16MB_V4_M] extends = esp32_4MB_V4_M_base -build_flags = ${esp32_4MB_V4_M_base.build_flags} +build_flags = ${esp32_4MB_V4_M_base.esp32_build_flags} -D WLED_RELEASE_NAME=esp32_16MB_V4_M -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup @@ -1548,6 +1559,7 @@ build_flags = ${esp32_4MB_V4_M_base.build_flags} -D ENCODER_DT_PIN=35 -D ENCODER_CLK_PIN=39 -D ENCODER_SW_PIN=5 ; WLEDMM spec by @SERG74: use 35 and 39 instead of 18 and 19 (conflicts) -D FLD_PIN_SCL=-1 -D FLD_PIN_SDA=-1 ; use global! -D HW_PIN_SCL=22 -D HW_PIN_SDA=21 +lib_deps = ${esp32_4MB_V4_M_base.esp32_lib_deps} board = esp32_16MB board_build.partitions = tools/WLED_ESP32_16MB.csv ;; WLED standard for 16MB flash: 2MB firmware, 12 MB filesystem ;board_build.partitions = tools/WLED_ESP32_16MB_9MB_FS.csv ;; WLED extended for 16MB flash: 3.2MB firmware, 9 MB filesystem @@ -1558,14 +1570,15 @@ board_build.partitions = tools/WLED_ESP32_16MB.csv ;; WLED standard for extends = esp32_4MB_V4_M_base build_unflags = ${common.build_unflags} -D CORE_DEBUG_LEVEL=0 -build_flags = ${esp32_4MB_V4_M_base.build_flags} +build_flags = ${esp32_4MB_V4_M_base.esp32_build_flags} ${Debug_Flags.build_flags} -D CORE_DEBUG_LEVEL=4 ;; 0=none, 1=error, 2=warning, 3=info, 4=debug, 5=verbose -D WLED_DEBUG_HEAP ;; WLEDMM enable heap debugging -D WLED_RELEASE_NAME=esp32_16MB_V4_M_debug -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup -board = esp32_16MB +lib_deps = ${esp32_4MB_V4_M_base.esp32_lib_deps} +board = esp32_16MB board_build.partitions = tools/WLED_ESP32_16MB.csv ;; WLED standard for 16MB flash: 2MB firmware, 12 MB filesystem ;board_build.partitions = tools/WLED_ESP32_16MB_9MB_FS.csv ;; WLED extended for 16MB flash: 3.2MB firmware, 9 MB filesystem monitor_filters = esp32_exception_decoder @@ -1577,7 +1590,7 @@ monitor_filters = esp32_exception_decoder extends = esp32_4MB_V4_S_base board = lolin_d32_pro ;board = esp32cam -build_flags = ${esp32_4MB_V4_S_base.build_flags} +build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} -D WLED_RELEASE_NAME=esp32_4MB_PSRAM_S -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup @@ -1592,6 +1605,7 @@ build_flags = ${esp32_4MB_V4_S_base.build_flags} ; -D WLED_DEBUG ; -D SR_DEBUG ; -D MIC_LOGGER +lib_deps = ${esp32_4MB_V4_S_base.esp32_lib_deps} lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation ;; RAM: [== ] 24.3% (used 79524 bytes from 327680 bytes) ;; Flash: [========= ] 93.2% (used 1466389 bytes from 1572864 bytes) @@ -1609,7 +1623,7 @@ build_unflags = ${esp32_4MB_V4_S_base.build_unflags} -mfix-esp32-psram-cache-issue ;; this fix is not needed any more for revision 3 -mfix-esp32-psram-cache-strategy=memw ;; same as above -build_flags = ${esp32_4MB_V4_S_base.build_flags} +build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} -DARDUINO_EVENT_RUNNING_CORE=0 ;; assign Wifi to core0, to have more CPU on core#1 (arduino loop) -DARDUINO_RUNNING_CORE=1 ;; should be default, but does not hurt -DCONFIG_MBEDTLS_DYNAMIC_BUFFER=1 ;; optional - seems to move more buffers into PSRAM @@ -1630,6 +1644,7 @@ build_flags = ${esp32_4MB_V4_S_base.build_flags} ; -D WLED_DEBUG ; -D SR_DEBUG ; -D MIC_LOGGER +lib_deps = ${esp32_4MB_V4_S_base.esp32_lib_deps} lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation ;; RAM: [==== ] 35.9% (used 117688 bytes from 327680 bytes) ;; Flash: [========= ] 94.5% (used 1487097 bytes from 1572864 bytes) @@ -1640,7 +1655,7 @@ extends = esp32_4MB_V4_M_base board = lolin_d32_pro ;board = esp32cam board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions) -build_flags = ${esp32_4MB_V4_M_base.build_flags} +build_flags = ${esp32_4MB_V4_M_base.esp32_build_flags} -D WLED_RELEASE_NAME=esp32_4MB_PSRAM_M -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup @@ -1654,6 +1669,7 @@ build_flags = ${esp32_4MB_V4_M_base.build_flags} ; -D WLED_DEBUG ; -D SR_DEBUG ; -D MIC_LOGGER +lib_deps = ${esp32_4MB_V4_M_base.esp32_lib_deps} ;lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation ;; RAM: [== ] 24.9% (used 81484 bytes from 327680 bytes) ;; Flash: [======== ] 84.6% (used 1607857 bytes from 1900544 bytes) @@ -1808,6 +1824,7 @@ build_unflags = ${common.build_unflags} -D USERMOD_DALLASTEMPERATURE ;; disabled because it hangs during usermod setup on -S3 (autodetect broken?) -D WLED_ENABLE_DMX ;; disabled because it does not work with ESP-IDF 4.4.x (buggy driver in SparkFunDMX) -D WLED_ENABLE_DMX_INPUT ;; needs more testing + -DWLEDMM_FASTPATH ;; needs more testing on -S2 build_flags = ${common.build_flags} ${esp32s2.build_flags} ; ${Debug_Flags.build_flags} ;ewowi: enabling debug causes Error: The program size (1463330 bytes) is greater than maximum allowed (1441792 bytes) @@ -1862,6 +1879,7 @@ build_unflags = ${common.build_unflags} -D USERMOD_DALLASTEMPERATURE ;; disabled because it hangs during usermod setup on -S3 (autodetect broken?) -D WLED_ENABLE_DMX ;; disabled because it does not work with ESP-IDF 4.4.x (buggy driver in SparkFunDMX) -D WLED_ENABLE_DMX_INPUT ;; needs more testing + -DWLEDMM_FASTPATH ;; needs more testing on -S2 build_flags = ${common.build_flags} ${esp32s2.build_flags} ;; ${Debug_Flags.build_flags} -D WLED_WATCHDOG_TIMEOUT=0 -D CONFIG_ASYNC_TCP_USE_WDT=0 @@ -1916,6 +1934,7 @@ build_unflags = ${common.build_unflags} -D WLED_ENABLE_DMX_INPUT ;; needs more testing ;-D WLED_DEBUG_HOST='"192.168.x.x"' ;; to disable net print -D USERMOD_ANIMARTRIX ;; Tips our memory usage over the limit + -DWLEDMM_FASTPATH ;; needs more testing on -C3 build_flags = ${common.build_flags} ${esp32c3.build_flags} ; -D WLED_DISABLE_OTA ;; OTA is not possible for boards with 2MB flash only (like some Ai-Thinker ESP32-C3-12F models) @@ -1956,6 +1975,7 @@ platform_packages = ${esp32.platformV4_packages_pre} board_build.flash_mode = qio upload_speed = 460800 build_unflags = ${env:esp32c3dev_4MB_M.build_unflags} + -DWLEDMM_FASTPATH ;; needs more testing on -C3 build_flags = ${common.build_flags} ${esp32c3.build_flags} -D WLED_WATCHDOG_TIMEOUT=0 -D CONFIG_ASYNC_TCP_USE_WDT=0 ${common_mm.build_flags_S} -Wno-misleading-indentation -Wno-format-truncation @@ -2139,18 +2159,14 @@ extends = esp32_4MB_S_base build_unflags = ${esp32_4MB_S_base.build_unflags} ${common_mm.build_disable_sync_interfaces} build_flags = ${esp32_4MB_S_base.build_flags} -D WLED_RELEASE_NAME=abc_wled_controller_v43_M - -D LEDPIN=16 -D ABL_MILLIAMPS_DEFAULT=5000 ; 5A default. Max 13A depending on the wires connected - -D WLED_USE_ETHERNET -D WLED_ETH_DEFAULT=9 ; ABC! WLED V43 & compatible -D RLYPIN=-1 -D BTNPIN=-1 ;; Prevent clash -D WLED_DISABLE_ESPNOW ;; ESP-NOW requires wifi, may crash with ethernet only - -D AUDIOPIN=-1 -D FLD_PIN_SCL=-1 -D FLD_PIN_SDA=-1 ; use global! - ; -D WLED_USE_MY_CONFIG -D SR_DMTYPE=4 -D I2S_SDPIN=32 -D I2S_WSPIN=15 -D I2S_CKPIN=14 -D MCLK_PIN=0 ; generic i2s with mclk 0 -D SR_SQUELCH=1 -D SR_GAIN=60 ; increrase squelch if noise, in test 0 is okay, but only slightly @@ -2201,7 +2217,7 @@ board = pico32 ;platform_packages = upload_speed = 256000 ;; or 115200 ;; or 460800 ; or 921600 (slower speeds are better when flashing without a soldered connection) -build_flags = ${esp32_4MB_V4_S_base.build_flags} +build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup -D WLED_RELEASE_NAME=esp32_pico_4MB_V4_S -D WLED_DISABLE_BROWNOUT_DET @@ -2225,6 +2241,7 @@ build_flags = ${esp32_4MB_V4_S_base.build_flags} ; -D MCLK_PIN=0 -D SR_ENABLE_DEFAULT ;; enable audioreactive at first start - no need to manually set "enable", then reboot ; -D WLED_USE_MY_CONFIG +lib_deps = ${esp32_4MB_V4_S_base.esp32_lib_deps} ;lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation ; RAM: [=== ] 25.4% (used 83144 bytes from 327680 bytes) ; Flash: [==========] 96.4% (used 1516029 bytes from 1572864 bytes) From bfee1a82ebe2b989d7d27dffe0618232654393ae Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 18 Dec 2023 16:58:44 +0100 Subject: [PATCH 063/108] -S2: back to platform 5.2.0 - massive connectivity problems with 5.3.0 - almost 10% more free heap with 5.2.0 --- platformio.ini | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/platformio.ini b/platformio.ini index e1506af6..dbbdca43 100644 --- a/platformio.ini +++ b/platformio.ini @@ -368,8 +368,10 @@ lib_deps = [esp32s2] ;; generic definitions for all ESP32-S2 boards -platform = espressif32@5.3.0 +platform = espressif32@5.2.0 platform_packages = + toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 + toolchain-xtensa-esp32s2 @ 8.4.0+2021r2-patch5 build_flags = -g -DARDUINO_ARCH_ESP32 -DESP32 -DS2XSHIT ;; WLEDMM -DARDUINO_ARCH_ESP32S2 @@ -1812,8 +1814,8 @@ board_build.partitions = tools/WLED_ESP32_8MB.csv ;; to ewowi - i'll optimize this entry later, as a few things can be inherited for sure. To softhack: sure ;-) [env:esp32s2_tinyUF2_PSRAM_S] extends = esp32_4MB_V4_S_base -platform = ${esp32.platformV4} -platform_packages = ${esp32.platformV4_packages} +platform = ${esp32s2.platform} ;; using 5.2.0, due to massive connectivity problems on -S2 with 5.3.0 +platform_packages = ${esp32s2.platform_packages} board = adafruit_qtpy_esp32s2 board_build.partitions = tools/partitions-4MB_spiffs-tinyuf2.csv ;; this is needed for tinyUF2 bootloader! Filename has to end in "tinyuf2.csv" @@ -1866,8 +1868,8 @@ monitor_filters = esp32_exception_decoder ;; PINs assignments optimized for use with serg74 "mini shield" [env:esp32s2_PSRAM_M] extends = esp32_4MB_V4_M_base -platform = ${esp32.platformV4} ;; more stable on -S2 than 5.1.1 -platform_packages = ${esp32.platformV4_packages} +platform = ${esp32s2.platform} ;; using 5.2.0, due to massive connectivity problems on -S2 with 5.3.0 +platform_packages = ${esp32s2.platform_packages} board = lolin_s2_mini board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions) From ca9644f04ebe77dfcfa91a0dbb5ae08df8197044 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 18 Dec 2023 18:33:29 +0100 Subject: [PATCH 064/108] removing my nasty debug probes; version number of today enough of this shit ;-) no more stiff upper lips. --- platformio.ini | 21 +++++++-------------- wled00/wled.h | 2 +- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/platformio.ini b/platformio.ini index dbbdca43..882be3c5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -256,7 +256,7 @@ extra_scripts = ${scripts_defaults.extra_scripts} [esp8266] build_flags = - -DESP8266 -DZSHIT + -DESP8266 -DFP_IN_IROM ;-Wno-deprecated-declarations ;-Wno-register ;; leaves some warnings when compiling C files: command-line option '-Wno-register' is valid for C++/ObjC++ but not for C @@ -284,7 +284,6 @@ lib_deps = ;; makuna/NeoPixelBus @ 2.6.9 ;; WLEDMM use if you have problems with 2.7.5 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} - stiffupper8266.lib ;; for probing the buildenv. [esp32] #platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip @@ -293,7 +292,7 @@ platform = espressif32@3.5.0 platform_packages = framework-arduinoespressif32 @ https://github.com/Aircoookie/arduino-esp32.git#1.0.6.4 build_flags = -g - -DARDUINO_ARCH_ESP32 -DYSHIT + -DARDUINO_ARCH_ESP32 #-DCONFIG_LITTLEFS_FOR_IDF_3_2 -D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE @@ -311,7 +310,6 @@ lib_deps = https://github.com/softhack007/LITTLEFS-threadsafe.git#master makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} - stiffupper.lib ;; for probing the buildenv. ;; WLEDMM begin @@ -330,7 +328,7 @@ platformV4_packages_xp = platformio/framework-arduinoespressif32 @ ~3.20009.0 ;; platformV4_packages_xp = platformio/framework-arduinoespressif32 @ ~3.20011.0 ;; arduino-esp32 v2.0.11 (latest one supported in platformio) build_flagsV4 = -g - -DARDUINO_ARCH_ESP32 -DESP32 -DXSHIT + -DARDUINO_ARCH_ESP32 -DESP32 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE -D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE @@ -340,7 +338,6 @@ lib_depsV4 = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 ;; WLEDMM this must be first in the list, otherwise Aircoookie/ESPAsyncWebServer pulls in an older version of AsyncTCP !! makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} - stiffupperV4.lib ;; for probing the buildenv. ;; WLEDMM end @@ -354,7 +351,7 @@ platform = espressif32@5.3.0 platform_packages = build_flags = -g -Wshadow=compatible-local ;; emit warning in case a local variable "shadows" another local one - -DARDUINO_ARCH_ESP32 -DESP32 -DXSHIT + -DARDUINO_ARCH_ESP32 -DESP32 #-DCONFIG_LITTLEFS_FOR_IDF_3_2 -D CONFIG_ASYNC_TCP_USE_WDT=0 -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE @@ -364,7 +361,6 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} - stiffupperVV.lib ;; for probing the buildenv. [esp32s2] ;; generic definitions for all ESP32-S2 boards @@ -373,7 +369,7 @@ platform_packages = toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 toolchain-xtensa-esp32s2 @ 8.4.0+2021r2-patch5 build_flags = -g - -DARDUINO_ARCH_ESP32 -DESP32 -DS2XSHIT ;; WLEDMM + -DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM -DARDUINO_ARCH_ESP32S2 -DCONFIG_IDF_TARGET_ESP32S2=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM @@ -389,14 +385,13 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} - ;;; stiffupperS2.lib ;; for probing the buildenv. Nothing more. Did I mention that I like AC/DC? [esp32c3] ;; generic definitions for all ESP32-C3 boards platform = espressif32@5.3.0 platform_packages = build_flags = -g - -DARDUINO_ARCH_ESP32 -DESP32 -DC3XSHIT ;; WLEDMM + -DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM -DARDUINO_ARCH_ESP32C3 -DCONFIG_IDF_TARGET_ESP32C3=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM @@ -411,7 +406,6 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} - stiffupperC3.lib [esp32s3] ;; generic definitions for all ESP32-S3 boards @@ -419,7 +413,7 @@ platform = espressif32@5.3.0 platform_packages = build_flags = -g -DESP32 - -DARDUINO_ARCH_ESP32 -DS3XSHIT + -DARDUINO_ARCH_ESP32 -DARDUINO_ARCH_ESP32S3 -DCONFIG_IDF_TARGET_ESP32S3=1 -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM @@ -434,7 +428,6 @@ lib_deps = https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 makuna/NeoPixelBus @ 2.7.5 ${env.lib_deps} - stiffupperS3.lib # ------------------------------------------------------------------------------ diff --git a/wled00/wled.h b/wled00/wled.h index 524a415a..78a29989 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312160 +#define VERSION 2312180 // WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED. #define _MoonModules_WLED_ From cde3298c54dc7a5f8c91269ce5ede99b9432ce5c Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 18 Dec 2023 20:41:11 +0100 Subject: [PATCH 065/108] MM experimental - build flag to move ALL json into PSRAM -DALL_JSON_TO_PSRAM -DBOARD_HAS_PSRAM -D WLED_USE_PSRAM_JSON on -S2, this *doubles* the PSRAM utilization! before: heap used 85%, PSRAM used 13kb / 21kb after: heap used 60%, PSRAM used 41kb / 65kb !! --- platformio.ini | 5 +++++ wled00/wled.cpp | 16 +++++++++++++++- wled00/wled.h | 4 ++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/platformio.ini b/platformio.ini index 882be3c5..ad5fec29 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1591,6 +1591,7 @@ build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup -D WLEDMM_FASTPATH ; WLEDMM experimental option. Reduces audio lag (latency), and allows for faster LED framerates. May break compatibility with previous versions. -DBOARD_HAS_PSRAM -D WLED_USE_PSRAM_JSON ;; -D WLED_USE_PSRAM ;; WLED_USE_PSRAM causes major slow-down (slow LEDs) on some ESP32 boards + ;; -DALL_JSON_TO_PSRAM ;; WLEDMM experimental --> try to force all JSON stuff into PSRAM; gives more free heap. -D WLED_DISABLE_LOXONE ; FLASH 1272 bytes -D WLED_DISABLE_HUESYNC ; RAM 122 bytes; FLASH 6308 bytes -D WLED_DISABLE_ALEXA ; RAM 116 bytes; FLASH 13524 bytes @@ -1625,6 +1626,7 @@ build_flags = ${esp32_4MB_V4_S_base.esp32_build_flags} ;;${Speed_Flags.build_flags} ;; optimize for speed instead of size --> over 100% flash, but works with 256KB filesystem (alternative partitions file) -D WLEDMM_FASTPATH ; WLEDMM experimental option. Reduces audio lag (latency), and allows for faster LED framerates. May break compatibility with previous versions. -DBOARD_HAS_PSRAM -D WLED_USE_PSRAM_JSON ;; -D WLED_USE_PSRAM ;; WLED_USE_PSRAM causes major slow-down (slow LEDs) on some ESP32 boards + ;; -DALL_JSON_TO_PSRAM ;; WLEDMM experimental --> try to force all JSON stuff into PSRAM; gives more free heap. ;;-D CONFIG_ESP32_REV_MIN=3 ;; disables PSRAM bug workarounds in the core, reducing the code size and improving overall performance. -D WLED_RELEASE_NAME=esp32_4MB_PSRAM_REV3_S -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BROWNOUT_DET @@ -1826,12 +1828,14 @@ build_flags = ${common.build_flags} ${esp32s2.build_flags} -D WLED_WATCHDOG_TIMEOUT=0 -D CONFIG_ASYNC_TCP_USE_WDT=0 ${common_mm.build_flags_S} -Wno-misleading-indentation -Wno-format-truncation + -DCONFIG_MBEDTLS_DYNAMIC_BUFFER=1 ;; optional - allows some buffers to use PSRAM -D WLED_RELEASE_NAME=esp32S2_4MB_UF2_S -DARDUINO_USB_CDC_ON_BOOT=1 ;; mandatory, otherwise USB does not work!! -D WLED_DISABLE_ADALIGHT ;; disables serial protocols when using CDC USB (Serial RX will receive junk commands, unless its pulled down by resistor) -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -D SERVERNAME='"WLED-S2"' -DBOARD_HAS_PSRAM -D WLED_USE_PSRAM_JSON ;; -D WLED_USE_PSRAM + -DALL_JSON_TO_PSRAM ;; WLEDMM experimental --> try to force all JSON stuff into PSRAM; gives more free heap. -D WLED_DISABLE_LOXONE ;; FLASH 1272 bytes -D WLED_DISABLE_HUESYNC ;; RAM 122 bytes; FLASH 6308 bytes -D WLED_DISABLE_ALEXA ;; RAM 116 bytes; FLASH 13524 bytes @@ -1882,6 +1886,7 @@ build_flags = ${common.build_flags} ${esp32s2.build_flags} -Wno-misleading-indentation -Wno-format-truncation -D WLED_RELEASE_NAME=esp32s2_4MB_M -DBOARD_HAS_PSRAM -D WLED_USE_PSRAM_JSON ;; -D WLED_USE_PSRAM + ;; -DALL_JSON_TO_PSRAM ;; WLEDMM experimental --> try to force all JSON stuff into PSRAM; gives more free heap. -DLOLIN_WIFI_FIX -DWLEDMM_WIFI_POWERON_HACK ;; seems to work much better with this -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=1 -D WLED_DISABLE_ADALIGHT ;; disables serial protocols, as the board only has CDC USB diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 0e9afc5e..f4bf0c4a 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -382,6 +382,19 @@ void WLED::loop() ESP.wdtFeed(); #endif #endif + +#if 0 +// MM experiment - JSON garbagecollect once per minute. Warning: may crash at random + static unsigned long last_gc_time = 0; + if ((millis() - last_gc_time) > 60000) { // once in 60 seconds + if (!suspendStripService && !doInitBusses && !loadLedmap && !presetsActionPending()) { // make sure no strip or segments are being updated atm + if ((jsonBufferLock == 0) && (fileDoc == nullptr)) { // make sure JSON buffer is availeable + USER_PRINTLN(F("JSON gabage collection (regular).")); + doc.garbageCollect(); // WLEDMM experimental - trigger garbage collection on JSON doc memory pool. + last_gc_time = millis(); + } } } +#endif + } #if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_FASTPATH) @@ -606,7 +619,8 @@ pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), Pin if(dmxEnablePin > 0) pinManager.allocatePin(dmxEnablePin, true, PinOwner::DMX); #endif -#if 0 && defined(WLED_USE_PSRAM_JSON) +#if defined(ALL_JSON_TO_PSRAM) && defined(WLED_USE_PSRAM_JSON) + USER_PRINTLN(F("JSON gabage collection (initial).")); doc.garbageCollect(); // WLEDMM experimental - this seems to move the complete doc[] into PSRAM #endif diff --git a/wled00/wled.h b/wled00/wled.h index 78a29989..8bce0ceb 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -788,13 +788,13 @@ WLED_GLOBAL int8_t spi_sclk _INIT(HW_PIN_CLOCKSPI); #endif // global ArduinoJson buffer -#if 0 && defined(WLED_USE_PSRAM_JSON) +#if defined(ALL_JSON_TO_PSRAM) && defined(WLED_USE_PSRAM_JSON) // WLEDMM experimental : always use dynamic JSON - #warning experimental - trying to always use dynamic JSON #ifndef WLED_DEFINE_GLOBAL_VARS WLED_GLOBAL PSRAMDynamicJsonDocument doc; #else WLED_GLOBAL PSRAMDynamicJsonDocument doc(JSON_BUFFER_SIZE); + #warning experimental - trying to always use dynamic JSON #endif #else WLED_GLOBAL StaticJsonDocument doc; From 58fe146a706e17f8ec0b3c8983cd38f26de82675 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:28:46 +0100 Subject: [PATCH 066/108] the experiment evolves trying to find all the conditions when _doc[]_ should _not_ be touched ... --- wled00/wled.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/wled00/wled.cpp b/wled00/wled.cpp index f4bf0c4a..61f8b2df 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -383,14 +383,18 @@ void WLED::loop() #endif #endif -#if 0 -// MM experiment - JSON garbagecollect once per minute. Warning: may crash at random +#if 0 && defined(ALL_JSON_TO_PSRAM) && defined(WLED_USE_PSRAM_JSON) +// WLEDMM experiment - JSON garbagecollect once per minute. Warning: may crash at random static unsigned long last_gc_time = 0; - if ((millis() - last_gc_time) > 60000) { // once in 60 seconds - if (!suspendStripService && !doInitBusses && !loadLedmap && !presetsActionPending()) { // make sure no strip or segments are being updated atm - if ((jsonBufferLock == 0) && (fileDoc == nullptr)) { // make sure JSON buffer is availeable + // try once in 60 seconds + if ((millis() - last_gc_time) > 60000) { + // look for a perfect moment -> make sure no strip or segments or presets activity, no configs being updated, no realtime external control + if (!suspendStripService && !doInitBusses && !doReboot && !doCloseFile && !realtimeMode && !loadLedmap && !presetsActionPending()) { + // make sure JSON buffer is not in use + if ( (doSerializeConfig == false) && (jsonBufferLock == 0) && (fileDoc == nullptr)) { USER_PRINTLN(F("JSON gabage collection (regular).")); doc.garbageCollect(); // WLEDMM experimental - trigger garbage collection on JSON doc memory pool. + // this will make any pending reference to JSON objects _invalid_ last_gc_time = millis(); } } } #endif @@ -1334,7 +1338,15 @@ void WLED::handleStatusLED() if (ledStatusType) { if (millis() - ledStatusLastMillis >= (1000/ledStatusType)) { ledStatusLastMillis = millis(); - ledStatusState = !ledStatusState; +#if 0 + // WLEDMM un-comment this to stop the blinking + if ((ledStatusType != 2) && (ledStatusType != 4)) + ledStatusState = !ledStatusState; + else + ledStatusState = HIGH; +#else + ledStatusState = !ledStatusState; +#endif #if STATUSLED>=0 digitalWrite(STATUSLED, ledStatusState); #else From 67be1e8527594c1b924521cdae6992f301a477ea Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 19 Dec 2023 20:27:36 +0100 Subject: [PATCH 067/108] Update CHANGELOG.md - bugfixes back-ported to WLEDMM --- CHANGELOG.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10ea4fe0..fdc8ca5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,14 @@ -## WLED changelog +## [WLED upstream](https://github.com/Aircoookie/WLED/tree/0_14_1) changelog + + +#### Build 2312180 +- Bugfixes (#3593, #3490, #3573, #3517, #3561, #3555, #3541, #3536, #3522, #3533, #3508) + +#### Build 2311160 +- Bugfixes (#3496, #3487) +- New usermod: LDR sensor (#3490 by @JeffWDH) +- Effect: Twinklefox & Tinklecat metadata fix +- Effect: separate #HH and #MM for Scrolling Text (#3480) #### Build 2310010, build 2310130 - Bugfixes for #3400, #3403, #3405 From f04507b7039069a0f5c89cbca5889477784961c2 Mon Sep 17 00:00:00 2001 From: Sergey Ryazanov Date: Wed, 20 Dec 2023 23:27:27 +0400 Subject: [PATCH 068/108] Add YandexWeather Usermod --- usermods/usermod_v2_yandex_weather/README.md | 106 +++ .../usermod_v2_yandex_weather.h | 605 ++++++++++++++++++ wled00/const.h | 1 + wled00/usermods_list.cpp | 8 + 4 files changed, 720 insertions(+) create mode 100644 usermods/usermod_v2_yandex_weather/README.md create mode 100644 usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h diff --git a/usermods/usermod_v2_yandex_weather/README.md b/usermods/usermod_v2_yandex_weather/README.md new file mode 100644 index 00000000..286ecea6 --- /dev/null +++ b/usermods/usermod_v2_yandex_weather/README.md @@ -0,0 +1,106 @@ +# Yandex Weaher Usermod +V2 Usermod for getting weather data from [Yandex Weather](https://yandex.ru/pogoda) service + +## Web interface +The info page in the web interface shows: +- Remaining time until new weather request +- Current temperature (°C) +- Feels temperature (°C) +- Wind speed (m/s) +- Wind direction + +## Usage +Compile the source with the buildflag `-D USERMOD_YA_WEATHER` added. + +```ini +build_flags = ${env:esp32dev.build_flags} + -D USERMOD_YA_WEATHER +``` + +## API for other Usermods +- `void setEnable(bool enable)` – To change enable state +- `bool isEnable()` – To query enable state +- `WeatherInfo *currentWeather()` – To query current weather struct +- `inline bool drawWeatherOnDisplay(long howLong)` – Show current weather (if available) on four line display for _howLong_ milliseconds. +See _YA_WEATHER_DRAW_ in __Additional Build Flags__ section + +### Access from other Usermod + +There are two options to get access to the usermod instance: + 1. Include `yandex-weather-usermod-v2.h` before your Usermod in _usermods_list.cpp_ + 1. Use `#include "yandex-weather-usermod-v2.h"` at the top of the your Usermod + + ### Usage example + ```cpp +#include "wled.h" +#include "yandex-weather-usermod-v2.h" + +class MyUsermode: public Usermod { + void foo() { + #ifdef USERMOD_ID_YA_WEATHER + YandexWeatherUsermod *weatherUserMode = (YandexWeatherUsermod *)usermods.lookup(USERMOD_ID_YA_WEATHER); + if (weatherUserMode != nullptr) { + weatherUserMode->setEnable(true); + weatherUserMode->currentWeather(); + } + #endif + } +} + ``` + +## Settings + +### Enabled: +Checkbox to enable or disable the Usermod + +### ApiKey +ApiKey for access to Yandex Weather API. +You can get it [here](https://yandex.ru/dev/weather/doc/dg/concepts/about.html). + +### UpdateInterval +API access frequency in minutes. + +*Note:* It should be greater or equal to 30, because free APIKey has a limit of 50 requests per day. + +### ApiLanguage +The language and country combinations for which weather wording data will be returned. + +More info [here](https://yandex.ru/dev/weather/doc/dg/concepts/forecast-info.html) + +### CustomCoordinates +Enables the use of custom coordinates (more on them below) instead of the system ones from WLED. + +### CityLatitude +Custom city latitude coordinate (works only with `CustomCoordinates` enabled) + +### CityLongitude +Custom city longitude coordinate (works only with `CustomCoordinates` enabled) + +### ShowInInfo +Enable display of weather information in the "Info" page (on the WLED main scree) + +### PostToMQTT +Enable post weather data to MQTT topic (/yandexWeather) + +## MQTT Topics + +| Topic | Unit | Description | +|:------------------------|:--------|:------------------------| +| yandexWeather/date | String | Weather received date | +| yandexWeather/tempReal | °C | Real temperature | +| yandexWeather/tempFeels | °C | Feels like temperature | +| yandexWeather/windSpeed | m/s | Wind speed | +| yandexWeather/windDir | String | Wind direction | + +## Additional Build Flags +| Flag | Description | +|:------------------------------|:----------------------------------------------------------------------------------------------| +| YA_WEATHER_DEBUG | Show debug message with _[YandexWeatherUsermod]_ prefix | +| YA_WEATHER_ALLOW_ALL_TIMEOUT | Allows you to set UpdateInterval to less than 30 (Use for tests or if you have a paid ApiKey) | +| YA_WEATHER_HIDE_REMAINING | Hide the remaining time to update in Info | +| YA_WEATHER_DRAW | Enable support of [Four Line Display](https://mm.kno.wled.ge/usermods/4LineDisplay) | + +----- +Author: + +2Grey | [Github](https://github.com/2Grey) \ No newline at end of file diff --git a/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h b/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h new file mode 100644 index 00000000..a9eb3545 --- /dev/null +++ b/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h @@ -0,0 +1,605 @@ +#pragma once + +#include "wled.h" +#include "time.h" + +// #define YA_WEATHER_DEBUG // Show debug message with [YandexWeatherUsermod] prefix +// #define YA_WEATHER_ALLOW_ALL_TIMEOUT // Allows you to set UpdateInterval to less than 30 +// #define YA_WEATHER_HIDE_REMAINING // Hide the remaining time to update in Info +// #define YA_WEATHER_DRAW // Enable support of Four Line Display + +#ifdef YA_WEATHER_DRAW +#ifndef USERMOD_FOUR_LINE_DISPLAY +#undef YA_WEATHER_DRAW +#endif +#endif + +class YandexWeatherUsermod: public Usermod +{ +public: + // Enums + enum class WeatherInfoResult { + Success = 0, // Data fetch is Ok + Timeout, // The time hasn't come yet (Update interval) + InternalError, // ApiKey or coordinate missed + ServerError, // Some error from server + }; + + // Weather info + struct WeatherInfo { + unsigned long date; // Server time (Unixtime) + int tempReal; // Real temperature (°C) + int tempFeels; // Feels temperature (°C) + float windSpeed; // Wind speed (kmp) + String windDir; // Wind directions + + WeatherInfo(unsigned long dt, int tr, int tf, float ws, String wd): date(dt), tempReal(tr), tempFeels(tf), windSpeed(ws), windDir(wd) {} + }; + +private: + // Internal + bool isConnected = false; + char errorMessage[100] = ""; + WeatherInfo *_weatherInfo; + + #ifdef YA_WEATHER_DRAW + FourLineDisplayUsermod* display; + #endif + + // configurable parameters + String _apiKey = ""; + int _updateInterval = 30; + int _apiLanguage = 0; + bool _isUseCustomCoord = false; + bool _isShowInInfo = false; + bool _isPostToMQTT = false; + float _apiLat = 0; + float _apiLon = 0; + + // Const chars + static const char _json_enabled[]; + static const char _cfg_key_apiKey[]; + static const char _cfg_key_updateInterval[]; + static const char _cfg_key_apiLang[]; + static const char _cfg_key_custom_coord[]; + static const char _cfg_key_apiLat[]; + static const char _cfg_key_apiLon[]; + static const char _cfg_key_showInfo[]; + static const char _cfg_key_postMQTT[]; + + // Inlines + inline bool isValidCoordinate(float lat, float lon) { return fabs(lat) > __FLT_EPSILON__ && fabs(lon) > __FLT_EPSILON__; } + inline bool isValidCoordinatePair(std::pair coord) { return isValidCoordinate(coord.first, coord.second); } + inline bool isCharEmpty(String val) { return strcmp(val.c_str(), "") == 0; } + inline long unsigned getUpdateInterval() { return (_updateInterval * 60 * 1000); } + inline String uppercasedString(String str) { str.toUpperCase(); return str; } + + inline const char* apiLanguageByIdx(int idx) { + switch (idx) { + case 1: return "ru_RU"; + case 2: return "ru_UA"; + case 3: return "uk_UA"; + case 4: return "be_BY"; + case 5: return "kk_KZ"; + case 6: return "tr_TR"; + default: return "en_US"; + } + } + + inline std::string windCharByString(std::string wd) { + if (wd.compare("nw") == 0) { return "⬊"; } + if (wd.compare("n") == 0) { return "⬇︎"; } + if (wd.compare("ne") == 0) { return "⬋"; } + if (wd.compare("e") == 0) { return "⬅︎"; } + if (wd.compare("se") == 0) { return "⬉"; } + if (wd.compare("s") == 0) { return "⬆︎"; } + if (wd.compare("sw") == 0) { return "⬈"; } + if (wd.compare("w") == 0) { return "➡"; } + return "●"; + } + + inline String firstWeatherLine() { + if (_weatherInfo == nullptr) return String(F("")); + String res = ""; + res += _weatherInfo->tempReal; + res += F("°C\n(like "); + res += _weatherInfo->tempFeels; + res += F("°C)"); + return res; + } + + inline String secondWeatherLine() { + if (_weatherInfo == nullptr) return String(F("")); + String res = ""; + res += _weatherInfo->windSpeed; + res += F(" m/s"); + if (!_weatherInfo->windDir.isEmpty()) { + res += F(" ("); + res += String(windCharByString(_weatherInfo->windDir.c_str()).c_str()); + res += F(")"); + } + return res; + } + + // Helping functions + std::pair getCoordinates() + { + std::pair res { 0, 0}; + if (_isUseCustomCoord) { + if (isValidCoordinate(_apiLat, _apiLon)) { + res.first = _apiLat; + res.second = _apiLon; + } + } else if (isValidCoordinate(latitude, longitude)) { + res.first = latitude; + res.second = longitude; + } + return res; + } + + String epochToStirng(time_t time) { + tmElements_t tm; + breakTime(time, tm); + char buf[20]; + sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d", tm.Year + 1970, tm.Month, tm.Day, tm.Hour, tm.Minute, tm.Second); + return String(buf); + } + + String remainingHumanString() { + unsigned long remainingTimeSec = (getUpdateInterval() - (millis() - lastTime)) / 1000; + int h = remainingTimeSec / 3600; + int m = (remainingTimeSec % 3600) / 60; + int s = remainingTimeSec % 60; + char buf[8]; + sprintf(buf, "%02d:%02d:%02d", h, m, s); + return String(buf); + } + + void resetLastTime() { + lastTime = millis() - getUpdateInterval(); + } + + // API Calls + bool parseReponse(WiFiClient client) + { + bool isSuccess = false; + + StaticJsonDocument<256> filter; + filter["now"] = true; + filter["fact"]["temp"] = true; + filter["fact"]["feels_like"] = true; + filter["fact"]["wind_speed"] = true; + filter["fact"]["wind_dir"] = true; + + PSRAMDynamicJsonDocument weatherDoc(4096); + DeserializationError parseError = deserializeJson(weatherDoc, client, DeserializationOption::Filter(filter)); + if (parseError) { + strcat(errorMessage, PSTR("deserializeJson() failed: ")); + strcat(errorMessage, parseError.c_str()); + } else { + isSuccess = true; + + unsigned long nowDate = 0; + getJsonValue(weatherDoc["now"], nowDate); + + int tempReal; + int tempFeels; + float windSpeed; + String windDir; + + JsonObject weatherDocObject = weatherDoc.as(); + JsonObject weatherFactObject = weatherDocObject["fact"]; + getJsonValue(weatherFactObject["temp"], tempReal); + getJsonValue(weatherFactObject["feels_like"], tempFeels); + getJsonValue(weatherFactObject["wind_speed"], windSpeed); + getJsonValue(weatherFactObject["wind_dir"], windDir); + + if (_weatherInfo) { + _weatherInfo->date = nowDate; + _weatherInfo->tempReal = tempReal; + _weatherInfo->tempFeels = tempFeels; + _weatherInfo->windSpeed = windSpeed; + _weatherInfo->windDir = windDir; + } else { + _weatherInfo = new WeatherInfo(nowDate, tempReal, tempFeels, windSpeed, windDir); + } + if (_weatherInfo) { + publishMQTT(_weatherInfo); + } else { + isSuccess = false; + } + } + + return isSuccess; + } + + WeatherInfoResult apiGetWeather(char *errorMessage) + { + WiFiClient client; + client.setTimeout(10000); + + if(!client.connect("api.weather.yandex.ru", 80)) { + strcat(errorMessage, PSTR("Connection failed")); + #ifdef YA_WEATHER_DEBUG + DEBUG_PRINTLN(F("[YandexWeatherUsermod] Connection failed")); + #endif + return WeatherInfoResult::ServerError; + } + + if (client.connected()) { + char url[180]; + std::pair coords = getCoordinates(); + sprintf(url, "GET /v2/informers?lat=%f&lon=%f&lang=%s HTTP/1.0", coords.first, coords.second, apiLanguageByIdx(_apiLanguage)); + + client.println(url); + client.println(F("Host: api.weather.yandex.ru")); + client.printf("X-Yandex-API-Key: %s\n", _apiKey.c_str()); + client.println(F("Connection: close")); + } + + bool isSuccess = false; + if (client.println() == 0) { + strcat(errorMessage, PSTR("Failed to send request")); + #ifdef YA_WEATHER_DEBUG + DEBUG_PRINTLN(F("[YandexWeatherUsermod] Failed to send request")); + #endif + } else { + char status[32] = {0}; + client.readBytesUntil('\r', status, sizeof(status)); + if (strcmp(status, "HTTP/1.0 200 OK") != 0) { + strcat(errorMessage, PSTR("Unexpected response: ")); + strcat(errorMessage, status); + #ifdef YA_WEATHER_DEBUG + DEBUG_PRINTF("[YandexWeatherUsermod] Unexpected response: %s\n", status); + #endif + } else { + char endOfHeaders[] = "\r\n\r\n"; + if (!client.find(endOfHeaders)) { + strcat(errorMessage, PSTR("Invalid response")); + #ifdef YA_WEATHER_DEBUG + DEBUG_PRINTLN(F("[YandexWeatherUsermod] Invalid response")); + #endif + } else { + isSuccess |= parseReponse(client); + } + } + } + + client.stop(); + return isSuccess ? WeatherInfoResult::Success : WeatherInfoResult::ServerError; + } + + // MQTT + void publishMQTT(WeatherInfo *wi) { + if (!wi || !_isPostToMQTT) return; + + #ifndef WLED_DISABLE_MQTT + if (WLED_MQTT_CONNECTED) { + String topicName = mqttDeviceTopic; + topicName += F("/yandexWeather"); + + mqtt->publish((topicName + F("/date")).c_str(), 0, false, epochToStirng(_weatherInfo->date).c_str()); + + char buf[10]; + sprintf(buf, "%d", _weatherInfo->tempReal); + mqtt->publish((topicName + F("/tempReal")).c_str(), 0, false, buf); + + sprintf(buf, "%d", _weatherInfo->tempFeels); + mqtt->publish((topicName + F("/tempFeels")).c_str(), 0, false, buf); + + sprintf(buf, "%.2f", _weatherInfo->windSpeed); + mqtt->publish((topicName + F("/windSpeed")).c_str(), 0, false, buf); + + mqtt->publish((topicName + F("/windDir")).c_str(), 0, false, _weatherInfo->windDir.c_str()); + } + #endif + } + +public: + // Class Constructor/Destructor + YandexWeatherUsermod(const char *name, bool enabled) : Usermod(name, enabled), _weatherInfo(nullptr) { + lastTime = 0; + } + + ~YandexWeatherUsermod() { + if (_weatherInfo) { delete _weatherInfo; _weatherInfo = nullptr; } + } + // Public methods + /** + * Togle enabled for Usermod + * @param enable New state of enabled of Usermod + */ + void setEnable(bool enable) { enabled = enable; } + /** + * @return Current enabled state of Usermod + */ + bool isEnable() { return enabled;} + /** + * @return Current weather struct (WeatherInfo) + */ + WeatherInfo *currentWeather() { return _weatherInfo; }; + + /** + * Try to fetch new weather data from server + * @param isForce If `true` – ignore update interval + * @return Status result of fetching data (WeatherInfoResult) + */ + WeatherInfoResult tryGetWeather(bool isForce) + { + if (!isForce && millis() - lastTime < getUpdateInterval()) { + return WeatherInfoResult::Timeout; + } + #ifdef YA_WEATHER_DEBUG + DEBUG_PRINTLN(F("[YandexWeatherUsermod] Trying to get weather...")); + #endif + lastTime = millis(); + strcpy(errorMessage, ""); + + if (isCharEmpty(_apiKey)) { + strcpy(errorMessage, PSTR("No API Key set")); + #ifdef YA_WEATHER_DEBUG + DEBUG_PRINTLN(F("[YandexWeatherUsermod] No API Key set")); + #endif + return WeatherInfoResult::InternalError; + } + + std::pair coords = getCoordinates(); + if (!isValidCoordinatePair(coords)) { + strcpy(errorMessage, PSTR("No coordinates set")); + #ifdef YA_WEATHER_DEBUG + DEBUG_PRINTLN(F("[YandexWeatherUsermod] No coordinates set")); + #endif + return WeatherInfoResult::InternalError; + } + + return apiGetWeather(errorMessage); + } + + /** + * Show weather (if exists) on Four line Display + * @param howLong Display time in milliseconds + * @return `true` – If displayed successfully, otherwise – `false` + */ + inline bool drawWeatherOnDisplay(long howLong) { + #ifdef YA_WEATHER_DRAW + if (display != nullptr) { + display->wakeDisplay(); + #if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY) + if (display->canDraw()) display->overlay(firstWeatherLine().c_str(), secondWeatherLine().c_str(), howLong); // WLEDMM bugfix + #else + display->overlay(firstWeatherLine().c_str(), secondWeatherLine().c_str(), howLong); + #endif + return true; + } else { + return false; + } + #else + return false; + #endif + } + + // WLED lyfecycle + + void setup() { + #ifdef YA_WEATHER_DRAW + display = (FourLineDisplayUsermod*) usermods.lookup(USERMOD_ID_FOUR_LINE_DISP); + #endif + initDone = true; + } + + void connected() { + isConnected = true; + } + + void loop() { + if (!initDone) return; + if (!enabled || !isConnected || strip.isUpdating()) return; + + WeatherInfoResult res = tryGetWeather(false); + switch (res) { + case WeatherInfoResult::Success: + lastTime = millis(); + break; + + case WeatherInfoResult::ServerError: + lastTime = millis() - getUpdateInterval() + 10000; + break; + + default: + break; + } + } + + // MQTT + + void onMqttConnect(bool sessionPresent) { + publishMQTT(_weatherInfo); + } + + // Info page + + void addToJsonInfo(JsonObject &root) + { + if (!initDone) return; + + JsonObject user = root["u"]; + if (user.isNull()) user = root.createNestedObject("u"); + + JsonArray infoArr = user.createNestedArray(FPSTR(_name)); // name + #ifndef YA_WEATHER_HIDE_REMAINING + if (enabled) { + infoArr.add(remainingHumanString()); + } + #endif + + String uiDomString = F(""); + infoArr.add(uiDomString); + + if (!enabled || !_isShowInInfo) return; + + if (!isCharEmpty(errorMessage)) { + infoArr = user.createNestedArray(F("Weather error")); + String errorString = F(""); + errorString += FPSTR(errorMessage); + errorString += F(""); + infoArr.add(errorString); + } else if (!_weatherInfo) { + infoArr = user.createNestedArray(F("Weather info")); + infoArr.add(F("no weather data")); + } else { + infoArr = user.createNestedArray(F("Weather date")); + infoArr.add(epochToStirng(_weatherInfo->date)); + infoArr.add(F(" (UTC)")); + + infoArr = user.createNestedArray(F("Temperature")); + infoArr.add(firstWeatherLine()); + + infoArr = user.createNestedArray(F("Wind")); + infoArr.add(secondWeatherLine()); + } + } + + // JSON State + + void readFromJsonState(JsonObject& root) + { + if (!initDone) return; + + bool en = enabled; + + JsonObject um = root[FPSTR(_name)]; + if (!um.isNull()) { + if (um[FPSTR(_json_enabled)].is()) { + en = um[FPSTR(_json_enabled)].as(); + } else { + String str = um[FPSTR(_json_enabled)]; + en = (bool)(str!="off"); + } + } + if (en != enabled) { + enabled = en; + if (enabled) resetLastTime(); + } + } + + // Config + + void addToConfig(JsonObject &root) + { + Usermod::addToConfig(root); + + JsonObject top = root[FPSTR(_name)]; + top[FPSTR(_cfg_key_apiKey)] = _apiKey; + top[FPSTR(_cfg_key_updateInterval)] = _updateInterval; + top[FPSTR(_cfg_key_apiLang)] = _apiLanguage; + top[FPSTR(_cfg_key_custom_coord)] = _isUseCustomCoord; + if (isValidCoordinate(_apiLat, _apiLon)) { + top[FPSTR(_cfg_key_apiLat)] = _apiLat; + top[FPSTR(_cfg_key_apiLon)] = _apiLon; + } else { + top[FPSTR(_cfg_key_apiLat)] = 0; + top[FPSTR(_cfg_key_apiLon)] = 0; + } + top[FPSTR(_cfg_key_showInfo)] = _isShowInInfo; + top[FPSTR(_cfg_key_postMQTT)] = _isPostToMQTT; + } + + void appendConfigData() + { + oappend(SET_F("addHB('YandexWeather');")); + + oappend(SET_F("addInfo('")); + oappend(String(FPSTR(_name)).c_str()); + oappend((":" + String(FPSTR(_cfg_key_updateInterval))).c_str()); + #ifdef YA_WEATHER_ALLOW_ALL_TIMEOUT + oappend(SET_F("', 1,'minutes (should be ≥ 1)');")); + #else + oappend(SET_F("', 1,'minutes (should be ≥ 30)');")); + #endif + + oappend(SET_F("dd=addDropdown('")); + oappend(String(FPSTR(_name)).c_str()); + oappend(("', '" + String(FPSTR(_cfg_key_apiLang)) + "');").c_str()); + oappend(SET_F("addOption(dd,'English',0);")); + oappend(SET_F("addOption(dd,'Russian (Russian domain)',1);")); + oappend(SET_F("addOption(dd,'Russian (Ukrainian domain)',2);")); + oappend(SET_F("addOption(dd,'Ukrainian (Ukrainian domain)',3);")); + oappend(SET_F("addOption(dd,'Belarusian',4);")); + oappend(SET_F("addOption(dd,'Kazakh',5);")); + oappend(SET_F("addOption(dd,'Turkish',6);")); + } + + virtual bool readFromConfig(JsonObject &root) + { + // Old values (for re-call api for case when something changed) + bool oldEnabledState = enabled; + String oldAPIKey = _apiKey; + int oldApiLanguage = _apiLanguage; + bool oldIsUseCustomCoord = _isUseCustomCoord; + std::pair oldCoords { _apiLat, _apiLon}; + + // Config logic + bool configComplete = Usermod::readFromConfig(root); + JsonObject top = root[FPSTR(_name)]; + if (top.isNull()) { + return false; + } + + configComplete &= getJsonValue(top[FPSTR(_cfg_key_updateInterval)], _updateInterval); + #ifdef YA_WEATHER_ALLOW_ALL_TIMEOUT + _updateInterval = max(1, _updateInterval); + #else + _updateInterval = max(30, _updateInterval); + #endif + + configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiKey)], _apiKey); + configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiLang)], _apiLanguage); + _apiLanguage = max(0, min(6, _apiLanguage)); + + configComplete &= getJsonValue(top[FPSTR(_cfg_key_custom_coord)], _isUseCustomCoord, false); + configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiLat)], _apiLat); + configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiLon)], _apiLon); + configComplete &= getJsonValue(top[FPSTR(_cfg_key_showInfo)], _isShowInInfo, false); + configComplete &= getJsonValue(top[FPSTR(_cfg_key_postMQTT)], _isPostToMQTT, false); + + // –– + if (enabled) { + bool isEnabledChanged = (oldEnabledState == false); + bool isApiKeyChanged = (oldAPIKey.compareTo(_apiKey) != 0); + bool isApiLanguageChanged = (oldApiLanguage != _apiLanguage); + bool isUseCustomCoordChanged = (oldIsUseCustomCoord != _isUseCustomCoord); + bool isCoordinateChanges = (oldCoords.first != _apiLat || oldCoords.second != _apiLon); + + if (isEnabledChanged || isApiKeyChanged || isApiLanguageChanged || isUseCustomCoordChanged) resetLastTime(); + if (isUseCustomCoordChanged && isCoordinateChanges) resetLastTime(); + } else { + strcpy(errorMessage, ""); + } + + return configComplete; + } + + // Usermode ID + + uint16_t getId() { + return USERMOD_ID_YA_WEATHER; + } +}; + +// strings to reduce flash memory usage (used more than twice) +const char YandexWeatherUsermod::_json_enabled[] PROGMEM = "enabled"; +const char YandexWeatherUsermod::_cfg_key_apiKey[] PROGMEM = "apiKey"; +const char YandexWeatherUsermod::_cfg_key_updateInterval[] PROGMEM = "updateInterval"; +const char YandexWeatherUsermod::_cfg_key_apiLang[] PROGMEM = "apiLanguage"; +const char YandexWeatherUsermod::_cfg_key_custom_coord[] PROGMEM = "customCoordinates"; +const char YandexWeatherUsermod::_cfg_key_apiLat[] PROGMEM = "cityLatitude"; +const char YandexWeatherUsermod::_cfg_key_apiLon[] PROGMEM = "cityLongitude"; +const char YandexWeatherUsermod::_cfg_key_showInfo[] PROGMEM = "showInInfo"; +const char YandexWeatherUsermod::_cfg_key_postMQTT[] PROGMEM = "postToMQTT"; diff --git a/wled00/const.h b/wled00/const.h index bb8c7a98..71c86393 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -142,6 +142,7 @@ #define USERMOD_ID_WEATHER 91 //Usermod "usermod_v2_weather.h" #define USERMOD_ID_GAMES 92 //Usermod "usermod_v2_games.h" #define USERMOD_ID_ANIMARTRIX 93 //Usermod "usermod_v2_animartrix.h" +#define USERMOD_ID_YA_WEATHER 94 //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 74afd5de..79c1a9b2 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -216,6 +216,10 @@ #include "../usermods/usermod_v2_animartrix/usermod_v2_animartrix.h" #endif +#ifdef USERMOD_YA_WEATHER +#include "../usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h" +#endif + void registerUsermods() { /* @@ -418,4 +422,8 @@ void registerUsermods() usermods.add(new AnimartrixUsermod("Animartrix", false)); #endif +#ifdef USERMOD_YA_WEATHER + usermods.add(new YandexWeatherUsermod("YandexWeather", false)); +#endif + } From 3c0158ad7db643b4c496c67846abb7543ff77803 Mon Sep 17 00:00:00 2001 From: Sergey Ryazanov Date: Thu, 21 Dec 2023 08:23:51 +0400 Subject: [PATCH 069/108] Add _MoonModules_WLED_ compatibility --- .../usermod_v2_yandex_weather.h | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h b/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h index a9eb3545..cee0ba30 100644 --- a/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h +++ b/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h @@ -38,6 +38,11 @@ public: private: // Internal + #ifndef _MoonModules_WLED_ + bool initDone = false; + bool enabled = false; + unsigned long lastTime = 0; + #endif bool isConnected = false; char errorMessage[100] = ""; WeatherInfo *_weatherInfo; @@ -57,7 +62,7 @@ private: float _apiLon = 0; // Const chars - static const char _json_enabled[]; + static const char _cfg_key_enabled[]; static const char _cfg_key_apiKey[]; static const char _cfg_key_updateInterval[]; static const char _cfg_key_apiLang[]; @@ -66,6 +71,9 @@ private: static const char _cfg_key_apiLon[]; static const char _cfg_key_showInfo[]; static const char _cfg_key_postMQTT[]; + #ifndef _MoonModules_WLED_ + static const char _name[]; + #endif // Inlines inline bool isValidCoordinate(float lat, float lon) { return fabs(lat) > __FLT_EPSILON__ && fabs(lon) > __FLT_EPSILON__; } @@ -297,9 +305,15 @@ private: public: // Class Constructor/Destructor + #ifdef _MoonModules_WLED_ YandexWeatherUsermod(const char *name, bool enabled) : Usermod(name, enabled), _weatherInfo(nullptr) { lastTime = 0; } + #else + YandexWeatherUsermod() : _weatherInfo(nullptr) { + lastTime = 0; + } + #endif ~YandexWeatherUsermod() { if (_weatherInfo) { delete _weatherInfo; _weatherInfo = nullptr; } @@ -476,10 +490,10 @@ public: JsonObject um = root[FPSTR(_name)]; if (!um.isNull()) { - if (um[FPSTR(_json_enabled)].is()) { - en = um[FPSTR(_json_enabled)].as(); + if (um[FPSTR(_cfg_key_enabled)].is()) { + en = um[FPSTR(_cfg_key_enabled)].as(); } else { - String str = um[FPSTR(_json_enabled)]; + String str = um[FPSTR(_cfg_key_enabled)]; en = (bool)(str!="off"); } } @@ -493,9 +507,14 @@ public: void addToConfig(JsonObject &root) { + #ifdef _MoonModules_WLED_ Usermod::addToConfig(root); - JsonObject top = root[FPSTR(_name)]; + #else + JsonObject top = root.createNestedObject(FPSTR(_name)); // WLEDMM: set enabled and _name + top[FPSTR("enabled")] = enabled; + #endif + top[FPSTR(_cfg_key_apiKey)] = _apiKey; top[FPSTR(_cfg_key_updateInterval)] = _updateInterval; top[FPSTR(_cfg_key_apiLang)] = _apiLanguage; @@ -538,6 +557,21 @@ public: virtual bool readFromConfig(JsonObject &root) { + #ifdef _MoonModules_WLED_ + bool configComplete = Usermod::readFromConfig(root); + JsonObject top = root[FPSTR(_name)]; + #else + bool configComplete = true; + JsonObject top = root[FPSTR(_name)]; + if (!top.isNull()) { + configComplete &= getJsonValue(top[FPSTR("enabled")], enabled); + } + #endif + + if (top.isNull()) { + return false; + } + // Old values (for re-call api for case when something changed) bool oldEnabledState = enabled; String oldAPIKey = _apiKey; @@ -546,12 +580,6 @@ public: std::pair oldCoords { _apiLat, _apiLon}; // Config logic - bool configComplete = Usermod::readFromConfig(root); - JsonObject top = root[FPSTR(_name)]; - if (top.isNull()) { - return false; - } - configComplete &= getJsonValue(top[FPSTR(_cfg_key_updateInterval)], _updateInterval); #ifdef YA_WEATHER_ALLOW_ALL_TIMEOUT _updateInterval = max(1, _updateInterval); @@ -594,7 +622,7 @@ public: }; // strings to reduce flash memory usage (used more than twice) -const char YandexWeatherUsermod::_json_enabled[] PROGMEM = "enabled"; +const char YandexWeatherUsermod::_cfg_key_enabled[] PROGMEM = "enabled"; const char YandexWeatherUsermod::_cfg_key_apiKey[] PROGMEM = "apiKey"; const char YandexWeatherUsermod::_cfg_key_updateInterval[] PROGMEM = "updateInterval"; const char YandexWeatherUsermod::_cfg_key_apiLang[] PROGMEM = "apiLanguage"; @@ -603,3 +631,6 @@ const char YandexWeatherUsermod::_cfg_key_apiLat[] PROGMEM = "cityLatit const char YandexWeatherUsermod::_cfg_key_apiLon[] PROGMEM = "cityLongitude"; const char YandexWeatherUsermod::_cfg_key_showInfo[] PROGMEM = "showInInfo"; const char YandexWeatherUsermod::_cfg_key_postMQTT[] PROGMEM = "postToMQTT"; +#ifndef _MoonModules_WLED_ +const char YandexWeatherUsermod::_name[] PROGMEM = "YandexWeather"; +#endif \ No newline at end of file From 0a51b973cb990e1b2b92cfed4dd2c50d77708dc0 Mon Sep 17 00:00:00 2001 From: Sergey Ryazanov Date: Thu, 21 Dec 2023 12:11:21 +0400 Subject: [PATCH 070/108] Remove support of Four-line display Four line Display support removed because the Display font cannot draw the Celsius symbol and wind direction --- usermods/usermod_v2_yandex_weather/README.md | 3 - .../usermod_v2_yandex_weather.h | 60 ++++--------------- 2 files changed, 10 insertions(+), 53 deletions(-) diff --git a/usermods/usermod_v2_yandex_weather/README.md b/usermods/usermod_v2_yandex_weather/README.md index 286ecea6..16fa3971 100644 --- a/usermods/usermod_v2_yandex_weather/README.md +++ b/usermods/usermod_v2_yandex_weather/README.md @@ -21,8 +21,6 @@ build_flags = ${env:esp32dev.build_flags} - `void setEnable(bool enable)` – To change enable state - `bool isEnable()` – To query enable state - `WeatherInfo *currentWeather()` – To query current weather struct -- `inline bool drawWeatherOnDisplay(long howLong)` – Show current weather (if available) on four line display for _howLong_ milliseconds. -See _YA_WEATHER_DRAW_ in __Additional Build Flags__ section ### Access from other Usermod @@ -98,7 +96,6 @@ Enable post weather data to MQTT topic (/yandexWeather) | YA_WEATHER_DEBUG | Show debug message with _[YandexWeatherUsermod]_ prefix | | YA_WEATHER_ALLOW_ALL_TIMEOUT | Allows you to set UpdateInterval to less than 30 (Use for tests or if you have a paid ApiKey) | | YA_WEATHER_HIDE_REMAINING | Hide the remaining time to update in Info | -| YA_WEATHER_DRAW | Enable support of [Four Line Display](https://mm.kno.wled.ge/usermods/4LineDisplay) | ----- Author: diff --git a/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h b/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h index cee0ba30..a0c63ea4 100644 --- a/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h +++ b/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h @@ -6,13 +6,6 @@ // #define YA_WEATHER_DEBUG // Show debug message with [YandexWeatherUsermod] prefix // #define YA_WEATHER_ALLOW_ALL_TIMEOUT // Allows you to set UpdateInterval to less than 30 // #define YA_WEATHER_HIDE_REMAINING // Hide the remaining time to update in Info -// #define YA_WEATHER_DRAW // Enable support of Four Line Display - -#ifdef YA_WEATHER_DRAW -#ifndef USERMOD_FOUR_LINE_DISPLAY -#undef YA_WEATHER_DRAW -#endif -#endif class YandexWeatherUsermod: public Usermod { @@ -47,10 +40,6 @@ private: char errorMessage[100] = ""; WeatherInfo *_weatherInfo; - #ifdef YA_WEATHER_DRAW - FourLineDisplayUsermod* display; - #endif - // configurable parameters String _apiKey = ""; int _updateInterval = 30; @@ -108,25 +97,22 @@ private: inline String firstWeatherLine() { if (_weatherInfo == nullptr) return String(F("")); - String res = ""; - res += _weatherInfo->tempReal; - res += F("°C\n(like "); - res += _weatherInfo->tempFeels; - res += F("°C)"); - return res; + char r[20]; + sprintf_P(r, "%d (like %d)", _weatherInfo->tempReal, _weatherInfo->tempFeels); + return String(r); } inline String secondWeatherLine() { if (_weatherInfo == nullptr) return String(F("")); - String res = ""; - res += _weatherInfo->windSpeed; - res += F(" m/s"); + char r[15]; + sprintf(r, "%.2f m/s", _weatherInfo->windSpeed); + if (!_weatherInfo->windDir.isEmpty()) { - res += F(" ("); - res += String(windCharByString(_weatherInfo->windDir.c_str()).c_str()); - res += F(")"); + char wd[4]; + sprintf(wd, "(%s)", windCharByString(_weatherInfo->windDir.c_str()).c_str()); + strcat(r, wd); } - return res; + return String(r); } // Helping functions @@ -369,35 +355,9 @@ public: return apiGetWeather(errorMessage); } - /** - * Show weather (if exists) on Four line Display - * @param howLong Display time in milliseconds - * @return `true` – If displayed successfully, otherwise – `false` - */ - inline bool drawWeatherOnDisplay(long howLong) { - #ifdef YA_WEATHER_DRAW - if (display != nullptr) { - display->wakeDisplay(); - #if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY) - if (display->canDraw()) display->overlay(firstWeatherLine().c_str(), secondWeatherLine().c_str(), howLong); // WLEDMM bugfix - #else - display->overlay(firstWeatherLine().c_str(), secondWeatherLine().c_str(), howLong); - #endif - return true; - } else { - return false; - } - #else - return false; - #endif - } - // WLED lyfecycle void setup() { - #ifdef YA_WEATHER_DRAW - display = (FourLineDisplayUsermod*) usermods.lookup(USERMOD_ID_FOUR_LINE_DISP); - #endif initDone = true; } From 7e8d570e81eb144fac660169608066cda9399808 Mon Sep 17 00:00:00 2001 From: MoonModules <91013628+MoonModules@users.noreply.github.com> Date: Sat, 23 Dec 2023 23:37:37 +0100 Subject: [PATCH 071/108] Revert "Add YandexWeather Usermod" --- usermods/usermod_v2_yandex_weather/README.md | 103 --- .../usermod_v2_yandex_weather.h | 596 ------------------ wled00/const.h | 1 - wled00/usermods_list.cpp | 8 - 4 files changed, 708 deletions(-) delete mode 100644 usermods/usermod_v2_yandex_weather/README.md delete mode 100644 usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h diff --git a/usermods/usermod_v2_yandex_weather/README.md b/usermods/usermod_v2_yandex_weather/README.md deleted file mode 100644 index 16fa3971..00000000 --- a/usermods/usermod_v2_yandex_weather/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# Yandex Weaher Usermod -V2 Usermod for getting weather data from [Yandex Weather](https://yandex.ru/pogoda) service - -## Web interface -The info page in the web interface shows: -- Remaining time until new weather request -- Current temperature (°C) -- Feels temperature (°C) -- Wind speed (m/s) -- Wind direction - -## Usage -Compile the source with the buildflag `-D USERMOD_YA_WEATHER` added. - -```ini -build_flags = ${env:esp32dev.build_flags} - -D USERMOD_YA_WEATHER -``` - -## API for other Usermods -- `void setEnable(bool enable)` – To change enable state -- `bool isEnable()` – To query enable state -- `WeatherInfo *currentWeather()` – To query current weather struct - -### Access from other Usermod - -There are two options to get access to the usermod instance: - 1. Include `yandex-weather-usermod-v2.h` before your Usermod in _usermods_list.cpp_ - 1. Use `#include "yandex-weather-usermod-v2.h"` at the top of the your Usermod - - ### Usage example - ```cpp -#include "wled.h" -#include "yandex-weather-usermod-v2.h" - -class MyUsermode: public Usermod { - void foo() { - #ifdef USERMOD_ID_YA_WEATHER - YandexWeatherUsermod *weatherUserMode = (YandexWeatherUsermod *)usermods.lookup(USERMOD_ID_YA_WEATHER); - if (weatherUserMode != nullptr) { - weatherUserMode->setEnable(true); - weatherUserMode->currentWeather(); - } - #endif - } -} - ``` - -## Settings - -### Enabled: -Checkbox to enable or disable the Usermod - -### ApiKey -ApiKey for access to Yandex Weather API. -You can get it [here](https://yandex.ru/dev/weather/doc/dg/concepts/about.html). - -### UpdateInterval -API access frequency in minutes. - -*Note:* It should be greater or equal to 30, because free APIKey has a limit of 50 requests per day. - -### ApiLanguage -The language and country combinations for which weather wording data will be returned. - -More info [here](https://yandex.ru/dev/weather/doc/dg/concepts/forecast-info.html) - -### CustomCoordinates -Enables the use of custom coordinates (more on them below) instead of the system ones from WLED. - -### CityLatitude -Custom city latitude coordinate (works only with `CustomCoordinates` enabled) - -### CityLongitude -Custom city longitude coordinate (works only with `CustomCoordinates` enabled) - -### ShowInInfo -Enable display of weather information in the "Info" page (on the WLED main scree) - -### PostToMQTT -Enable post weather data to MQTT topic (/yandexWeather) - -## MQTT Topics - -| Topic | Unit | Description | -|:------------------------|:--------|:------------------------| -| yandexWeather/date | String | Weather received date | -| yandexWeather/tempReal | °C | Real temperature | -| yandexWeather/tempFeels | °C | Feels like temperature | -| yandexWeather/windSpeed | m/s | Wind speed | -| yandexWeather/windDir | String | Wind direction | - -## Additional Build Flags -| Flag | Description | -|:------------------------------|:----------------------------------------------------------------------------------------------| -| YA_WEATHER_DEBUG | Show debug message with _[YandexWeatherUsermod]_ prefix | -| YA_WEATHER_ALLOW_ALL_TIMEOUT | Allows you to set UpdateInterval to less than 30 (Use for tests or if you have a paid ApiKey) | -| YA_WEATHER_HIDE_REMAINING | Hide the remaining time to update in Info | - ------ -Author: - -2Grey | [Github](https://github.com/2Grey) \ No newline at end of file diff --git a/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h b/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h deleted file mode 100644 index a0c63ea4..00000000 --- a/usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h +++ /dev/null @@ -1,596 +0,0 @@ -#pragma once - -#include "wled.h" -#include "time.h" - -// #define YA_WEATHER_DEBUG // Show debug message with [YandexWeatherUsermod] prefix -// #define YA_WEATHER_ALLOW_ALL_TIMEOUT // Allows you to set UpdateInterval to less than 30 -// #define YA_WEATHER_HIDE_REMAINING // Hide the remaining time to update in Info - -class YandexWeatherUsermod: public Usermod -{ -public: - // Enums - enum class WeatherInfoResult { - Success = 0, // Data fetch is Ok - Timeout, // The time hasn't come yet (Update interval) - InternalError, // ApiKey or coordinate missed - ServerError, // Some error from server - }; - - // Weather info - struct WeatherInfo { - unsigned long date; // Server time (Unixtime) - int tempReal; // Real temperature (°C) - int tempFeels; // Feels temperature (°C) - float windSpeed; // Wind speed (kmp) - String windDir; // Wind directions - - WeatherInfo(unsigned long dt, int tr, int tf, float ws, String wd): date(dt), tempReal(tr), tempFeels(tf), windSpeed(ws), windDir(wd) {} - }; - -private: - // Internal - #ifndef _MoonModules_WLED_ - bool initDone = false; - bool enabled = false; - unsigned long lastTime = 0; - #endif - bool isConnected = false; - char errorMessage[100] = ""; - WeatherInfo *_weatherInfo; - - // configurable parameters - String _apiKey = ""; - int _updateInterval = 30; - int _apiLanguage = 0; - bool _isUseCustomCoord = false; - bool _isShowInInfo = false; - bool _isPostToMQTT = false; - float _apiLat = 0; - float _apiLon = 0; - - // Const chars - static const char _cfg_key_enabled[]; - static const char _cfg_key_apiKey[]; - static const char _cfg_key_updateInterval[]; - static const char _cfg_key_apiLang[]; - static const char _cfg_key_custom_coord[]; - static const char _cfg_key_apiLat[]; - static const char _cfg_key_apiLon[]; - static const char _cfg_key_showInfo[]; - static const char _cfg_key_postMQTT[]; - #ifndef _MoonModules_WLED_ - static const char _name[]; - #endif - - // Inlines - inline bool isValidCoordinate(float lat, float lon) { return fabs(lat) > __FLT_EPSILON__ && fabs(lon) > __FLT_EPSILON__; } - inline bool isValidCoordinatePair(std::pair coord) { return isValidCoordinate(coord.first, coord.second); } - inline bool isCharEmpty(String val) { return strcmp(val.c_str(), "") == 0; } - inline long unsigned getUpdateInterval() { return (_updateInterval * 60 * 1000); } - inline String uppercasedString(String str) { str.toUpperCase(); return str; } - - inline const char* apiLanguageByIdx(int idx) { - switch (idx) { - case 1: return "ru_RU"; - case 2: return "ru_UA"; - case 3: return "uk_UA"; - case 4: return "be_BY"; - case 5: return "kk_KZ"; - case 6: return "tr_TR"; - default: return "en_US"; - } - } - - inline std::string windCharByString(std::string wd) { - if (wd.compare("nw") == 0) { return "⬊"; } - if (wd.compare("n") == 0) { return "⬇︎"; } - if (wd.compare("ne") == 0) { return "⬋"; } - if (wd.compare("e") == 0) { return "⬅︎"; } - if (wd.compare("se") == 0) { return "⬉"; } - if (wd.compare("s") == 0) { return "⬆︎"; } - if (wd.compare("sw") == 0) { return "⬈"; } - if (wd.compare("w") == 0) { return "➡"; } - return "●"; - } - - inline String firstWeatherLine() { - if (_weatherInfo == nullptr) return String(F("")); - char r[20]; - sprintf_P(r, "%d (like %d)", _weatherInfo->tempReal, _weatherInfo->tempFeels); - return String(r); - } - - inline String secondWeatherLine() { - if (_weatherInfo == nullptr) return String(F("")); - char r[15]; - sprintf(r, "%.2f m/s", _weatherInfo->windSpeed); - - if (!_weatherInfo->windDir.isEmpty()) { - char wd[4]; - sprintf(wd, "(%s)", windCharByString(_weatherInfo->windDir.c_str()).c_str()); - strcat(r, wd); - } - return String(r); - } - - // Helping functions - std::pair getCoordinates() - { - std::pair res { 0, 0}; - if (_isUseCustomCoord) { - if (isValidCoordinate(_apiLat, _apiLon)) { - res.first = _apiLat; - res.second = _apiLon; - } - } else if (isValidCoordinate(latitude, longitude)) { - res.first = latitude; - res.second = longitude; - } - return res; - } - - String epochToStirng(time_t time) { - tmElements_t tm; - breakTime(time, tm); - char buf[20]; - sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d", tm.Year + 1970, tm.Month, tm.Day, tm.Hour, tm.Minute, tm.Second); - return String(buf); - } - - String remainingHumanString() { - unsigned long remainingTimeSec = (getUpdateInterval() - (millis() - lastTime)) / 1000; - int h = remainingTimeSec / 3600; - int m = (remainingTimeSec % 3600) / 60; - int s = remainingTimeSec % 60; - char buf[8]; - sprintf(buf, "%02d:%02d:%02d", h, m, s); - return String(buf); - } - - void resetLastTime() { - lastTime = millis() - getUpdateInterval(); - } - - // API Calls - bool parseReponse(WiFiClient client) - { - bool isSuccess = false; - - StaticJsonDocument<256> filter; - filter["now"] = true; - filter["fact"]["temp"] = true; - filter["fact"]["feels_like"] = true; - filter["fact"]["wind_speed"] = true; - filter["fact"]["wind_dir"] = true; - - PSRAMDynamicJsonDocument weatherDoc(4096); - DeserializationError parseError = deserializeJson(weatherDoc, client, DeserializationOption::Filter(filter)); - if (parseError) { - strcat(errorMessage, PSTR("deserializeJson() failed: ")); - strcat(errorMessage, parseError.c_str()); - } else { - isSuccess = true; - - unsigned long nowDate = 0; - getJsonValue(weatherDoc["now"], nowDate); - - int tempReal; - int tempFeels; - float windSpeed; - String windDir; - - JsonObject weatherDocObject = weatherDoc.as(); - JsonObject weatherFactObject = weatherDocObject["fact"]; - getJsonValue(weatherFactObject["temp"], tempReal); - getJsonValue(weatherFactObject["feels_like"], tempFeels); - getJsonValue(weatherFactObject["wind_speed"], windSpeed); - getJsonValue(weatherFactObject["wind_dir"], windDir); - - if (_weatherInfo) { - _weatherInfo->date = nowDate; - _weatherInfo->tempReal = tempReal; - _weatherInfo->tempFeels = tempFeels; - _weatherInfo->windSpeed = windSpeed; - _weatherInfo->windDir = windDir; - } else { - _weatherInfo = new WeatherInfo(nowDate, tempReal, tempFeels, windSpeed, windDir); - } - if (_weatherInfo) { - publishMQTT(_weatherInfo); - } else { - isSuccess = false; - } - } - - return isSuccess; - } - - WeatherInfoResult apiGetWeather(char *errorMessage) - { - WiFiClient client; - client.setTimeout(10000); - - if(!client.connect("api.weather.yandex.ru", 80)) { - strcat(errorMessage, PSTR("Connection failed")); - #ifdef YA_WEATHER_DEBUG - DEBUG_PRINTLN(F("[YandexWeatherUsermod] Connection failed")); - #endif - return WeatherInfoResult::ServerError; - } - - if (client.connected()) { - char url[180]; - std::pair coords = getCoordinates(); - sprintf(url, "GET /v2/informers?lat=%f&lon=%f&lang=%s HTTP/1.0", coords.first, coords.second, apiLanguageByIdx(_apiLanguage)); - - client.println(url); - client.println(F("Host: api.weather.yandex.ru")); - client.printf("X-Yandex-API-Key: %s\n", _apiKey.c_str()); - client.println(F("Connection: close")); - } - - bool isSuccess = false; - if (client.println() == 0) { - strcat(errorMessage, PSTR("Failed to send request")); - #ifdef YA_WEATHER_DEBUG - DEBUG_PRINTLN(F("[YandexWeatherUsermod] Failed to send request")); - #endif - } else { - char status[32] = {0}; - client.readBytesUntil('\r', status, sizeof(status)); - if (strcmp(status, "HTTP/1.0 200 OK") != 0) { - strcat(errorMessage, PSTR("Unexpected response: ")); - strcat(errorMessage, status); - #ifdef YA_WEATHER_DEBUG - DEBUG_PRINTF("[YandexWeatherUsermod] Unexpected response: %s\n", status); - #endif - } else { - char endOfHeaders[] = "\r\n\r\n"; - if (!client.find(endOfHeaders)) { - strcat(errorMessage, PSTR("Invalid response")); - #ifdef YA_WEATHER_DEBUG - DEBUG_PRINTLN(F("[YandexWeatherUsermod] Invalid response")); - #endif - } else { - isSuccess |= parseReponse(client); - } - } - } - - client.stop(); - return isSuccess ? WeatherInfoResult::Success : WeatherInfoResult::ServerError; - } - - // MQTT - void publishMQTT(WeatherInfo *wi) { - if (!wi || !_isPostToMQTT) return; - - #ifndef WLED_DISABLE_MQTT - if (WLED_MQTT_CONNECTED) { - String topicName = mqttDeviceTopic; - topicName += F("/yandexWeather"); - - mqtt->publish((topicName + F("/date")).c_str(), 0, false, epochToStirng(_weatherInfo->date).c_str()); - - char buf[10]; - sprintf(buf, "%d", _weatherInfo->tempReal); - mqtt->publish((topicName + F("/tempReal")).c_str(), 0, false, buf); - - sprintf(buf, "%d", _weatherInfo->tempFeels); - mqtt->publish((topicName + F("/tempFeels")).c_str(), 0, false, buf); - - sprintf(buf, "%.2f", _weatherInfo->windSpeed); - mqtt->publish((topicName + F("/windSpeed")).c_str(), 0, false, buf); - - mqtt->publish((topicName + F("/windDir")).c_str(), 0, false, _weatherInfo->windDir.c_str()); - } - #endif - } - -public: - // Class Constructor/Destructor - #ifdef _MoonModules_WLED_ - YandexWeatherUsermod(const char *name, bool enabled) : Usermod(name, enabled), _weatherInfo(nullptr) { - lastTime = 0; - } - #else - YandexWeatherUsermod() : _weatherInfo(nullptr) { - lastTime = 0; - } - #endif - - ~YandexWeatherUsermod() { - if (_weatherInfo) { delete _weatherInfo; _weatherInfo = nullptr; } - } - // Public methods - /** - * Togle enabled for Usermod - * @param enable New state of enabled of Usermod - */ - void setEnable(bool enable) { enabled = enable; } - /** - * @return Current enabled state of Usermod - */ - bool isEnable() { return enabled;} - /** - * @return Current weather struct (WeatherInfo) - */ - WeatherInfo *currentWeather() { return _weatherInfo; }; - - /** - * Try to fetch new weather data from server - * @param isForce If `true` – ignore update interval - * @return Status result of fetching data (WeatherInfoResult) - */ - WeatherInfoResult tryGetWeather(bool isForce) - { - if (!isForce && millis() - lastTime < getUpdateInterval()) { - return WeatherInfoResult::Timeout; - } - #ifdef YA_WEATHER_DEBUG - DEBUG_PRINTLN(F("[YandexWeatherUsermod] Trying to get weather...")); - #endif - lastTime = millis(); - strcpy(errorMessage, ""); - - if (isCharEmpty(_apiKey)) { - strcpy(errorMessage, PSTR("No API Key set")); - #ifdef YA_WEATHER_DEBUG - DEBUG_PRINTLN(F("[YandexWeatherUsermod] No API Key set")); - #endif - return WeatherInfoResult::InternalError; - } - - std::pair coords = getCoordinates(); - if (!isValidCoordinatePair(coords)) { - strcpy(errorMessage, PSTR("No coordinates set")); - #ifdef YA_WEATHER_DEBUG - DEBUG_PRINTLN(F("[YandexWeatherUsermod] No coordinates set")); - #endif - return WeatherInfoResult::InternalError; - } - - return apiGetWeather(errorMessage); - } - - // WLED lyfecycle - - void setup() { - initDone = true; - } - - void connected() { - isConnected = true; - } - - void loop() { - if (!initDone) return; - if (!enabled || !isConnected || strip.isUpdating()) return; - - WeatherInfoResult res = tryGetWeather(false); - switch (res) { - case WeatherInfoResult::Success: - lastTime = millis(); - break; - - case WeatherInfoResult::ServerError: - lastTime = millis() - getUpdateInterval() + 10000; - break; - - default: - break; - } - } - - // MQTT - - void onMqttConnect(bool sessionPresent) { - publishMQTT(_weatherInfo); - } - - // Info page - - void addToJsonInfo(JsonObject &root) - { - if (!initDone) return; - - JsonObject user = root["u"]; - if (user.isNull()) user = root.createNestedObject("u"); - - JsonArray infoArr = user.createNestedArray(FPSTR(_name)); // name - #ifndef YA_WEATHER_HIDE_REMAINING - if (enabled) { - infoArr.add(remainingHumanString()); - } - #endif - - String uiDomString = F(""); - infoArr.add(uiDomString); - - if (!enabled || !_isShowInInfo) return; - - if (!isCharEmpty(errorMessage)) { - infoArr = user.createNestedArray(F("Weather error")); - String errorString = F(""); - errorString += FPSTR(errorMessage); - errorString += F(""); - infoArr.add(errorString); - } else if (!_weatherInfo) { - infoArr = user.createNestedArray(F("Weather info")); - infoArr.add(F("no weather data")); - } else { - infoArr = user.createNestedArray(F("Weather date")); - infoArr.add(epochToStirng(_weatherInfo->date)); - infoArr.add(F(" (UTC)")); - - infoArr = user.createNestedArray(F("Temperature")); - infoArr.add(firstWeatherLine()); - - infoArr = user.createNestedArray(F("Wind")); - infoArr.add(secondWeatherLine()); - } - } - - // JSON State - - void readFromJsonState(JsonObject& root) - { - if (!initDone) return; - - bool en = enabled; - - JsonObject um = root[FPSTR(_name)]; - if (!um.isNull()) { - if (um[FPSTR(_cfg_key_enabled)].is()) { - en = um[FPSTR(_cfg_key_enabled)].as(); - } else { - String str = um[FPSTR(_cfg_key_enabled)]; - en = (bool)(str!="off"); - } - } - if (en != enabled) { - enabled = en; - if (enabled) resetLastTime(); - } - } - - // Config - - void addToConfig(JsonObject &root) - { - #ifdef _MoonModules_WLED_ - Usermod::addToConfig(root); - JsonObject top = root[FPSTR(_name)]; - #else - JsonObject top = root.createNestedObject(FPSTR(_name)); // WLEDMM: set enabled and _name - top[FPSTR("enabled")] = enabled; - #endif - - top[FPSTR(_cfg_key_apiKey)] = _apiKey; - top[FPSTR(_cfg_key_updateInterval)] = _updateInterval; - top[FPSTR(_cfg_key_apiLang)] = _apiLanguage; - top[FPSTR(_cfg_key_custom_coord)] = _isUseCustomCoord; - if (isValidCoordinate(_apiLat, _apiLon)) { - top[FPSTR(_cfg_key_apiLat)] = _apiLat; - top[FPSTR(_cfg_key_apiLon)] = _apiLon; - } else { - top[FPSTR(_cfg_key_apiLat)] = 0; - top[FPSTR(_cfg_key_apiLon)] = 0; - } - top[FPSTR(_cfg_key_showInfo)] = _isShowInInfo; - top[FPSTR(_cfg_key_postMQTT)] = _isPostToMQTT; - } - - void appendConfigData() - { - oappend(SET_F("addHB('YandexWeather');")); - - oappend(SET_F("addInfo('")); - oappend(String(FPSTR(_name)).c_str()); - oappend((":" + String(FPSTR(_cfg_key_updateInterval))).c_str()); - #ifdef YA_WEATHER_ALLOW_ALL_TIMEOUT - oappend(SET_F("', 1,'minutes (should be ≥ 1)');")); - #else - oappend(SET_F("', 1,'minutes (should be ≥ 30)');")); - #endif - - oappend(SET_F("dd=addDropdown('")); - oappend(String(FPSTR(_name)).c_str()); - oappend(("', '" + String(FPSTR(_cfg_key_apiLang)) + "');").c_str()); - oappend(SET_F("addOption(dd,'English',0);")); - oappend(SET_F("addOption(dd,'Russian (Russian domain)',1);")); - oappend(SET_F("addOption(dd,'Russian (Ukrainian domain)',2);")); - oappend(SET_F("addOption(dd,'Ukrainian (Ukrainian domain)',3);")); - oappend(SET_F("addOption(dd,'Belarusian',4);")); - oappend(SET_F("addOption(dd,'Kazakh',5);")); - oappend(SET_F("addOption(dd,'Turkish',6);")); - } - - virtual bool readFromConfig(JsonObject &root) - { - #ifdef _MoonModules_WLED_ - bool configComplete = Usermod::readFromConfig(root); - JsonObject top = root[FPSTR(_name)]; - #else - bool configComplete = true; - JsonObject top = root[FPSTR(_name)]; - if (!top.isNull()) { - configComplete &= getJsonValue(top[FPSTR("enabled")], enabled); - } - #endif - - if (top.isNull()) { - return false; - } - - // Old values (for re-call api for case when something changed) - bool oldEnabledState = enabled; - String oldAPIKey = _apiKey; - int oldApiLanguage = _apiLanguage; - bool oldIsUseCustomCoord = _isUseCustomCoord; - std::pair oldCoords { _apiLat, _apiLon}; - - // Config logic - configComplete &= getJsonValue(top[FPSTR(_cfg_key_updateInterval)], _updateInterval); - #ifdef YA_WEATHER_ALLOW_ALL_TIMEOUT - _updateInterval = max(1, _updateInterval); - #else - _updateInterval = max(30, _updateInterval); - #endif - - configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiKey)], _apiKey); - configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiLang)], _apiLanguage); - _apiLanguage = max(0, min(6, _apiLanguage)); - - configComplete &= getJsonValue(top[FPSTR(_cfg_key_custom_coord)], _isUseCustomCoord, false); - configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiLat)], _apiLat); - configComplete &= getJsonValue(top[FPSTR(_cfg_key_apiLon)], _apiLon); - configComplete &= getJsonValue(top[FPSTR(_cfg_key_showInfo)], _isShowInInfo, false); - configComplete &= getJsonValue(top[FPSTR(_cfg_key_postMQTT)], _isPostToMQTT, false); - - // –– - if (enabled) { - bool isEnabledChanged = (oldEnabledState == false); - bool isApiKeyChanged = (oldAPIKey.compareTo(_apiKey) != 0); - bool isApiLanguageChanged = (oldApiLanguage != _apiLanguage); - bool isUseCustomCoordChanged = (oldIsUseCustomCoord != _isUseCustomCoord); - bool isCoordinateChanges = (oldCoords.first != _apiLat || oldCoords.second != _apiLon); - - if (isEnabledChanged || isApiKeyChanged || isApiLanguageChanged || isUseCustomCoordChanged) resetLastTime(); - if (isUseCustomCoordChanged && isCoordinateChanges) resetLastTime(); - } else { - strcpy(errorMessage, ""); - } - - return configComplete; - } - - // Usermode ID - - uint16_t getId() { - return USERMOD_ID_YA_WEATHER; - } -}; - -// strings to reduce flash memory usage (used more than twice) -const char YandexWeatherUsermod::_cfg_key_enabled[] PROGMEM = "enabled"; -const char YandexWeatherUsermod::_cfg_key_apiKey[] PROGMEM = "apiKey"; -const char YandexWeatherUsermod::_cfg_key_updateInterval[] PROGMEM = "updateInterval"; -const char YandexWeatherUsermod::_cfg_key_apiLang[] PROGMEM = "apiLanguage"; -const char YandexWeatherUsermod::_cfg_key_custom_coord[] PROGMEM = "customCoordinates"; -const char YandexWeatherUsermod::_cfg_key_apiLat[] PROGMEM = "cityLatitude"; -const char YandexWeatherUsermod::_cfg_key_apiLon[] PROGMEM = "cityLongitude"; -const char YandexWeatherUsermod::_cfg_key_showInfo[] PROGMEM = "showInInfo"; -const char YandexWeatherUsermod::_cfg_key_postMQTT[] PROGMEM = "postToMQTT"; -#ifndef _MoonModules_WLED_ -const char YandexWeatherUsermod::_name[] PROGMEM = "YandexWeather"; -#endif \ No newline at end of file diff --git a/wled00/const.h b/wled00/const.h index 71c86393..bb8c7a98 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -142,7 +142,6 @@ #define USERMOD_ID_WEATHER 91 //Usermod "usermod_v2_weather.h" #define USERMOD_ID_GAMES 92 //Usermod "usermod_v2_games.h" #define USERMOD_ID_ANIMARTRIX 93 //Usermod "usermod_v2_animartrix.h" -#define USERMOD_ID_YA_WEATHER 94 //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 79c1a9b2..74afd5de 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -216,10 +216,6 @@ #include "../usermods/usermod_v2_animartrix/usermod_v2_animartrix.h" #endif -#ifdef USERMOD_YA_WEATHER -#include "../usermods/usermod_v2_yandex_weather/usermod_v2_yandex_weather.h" -#endif - void registerUsermods() { /* @@ -422,8 +418,4 @@ void registerUsermods() usermods.add(new AnimartrixUsermod("Animartrix", false)); #endif -#ifdef USERMOD_YA_WEATHER - usermods.add(new YandexWeatherUsermod("YandexWeather", false)); -#endif - } From 5e5233ce0cb083e0df42e81e43e35330374dfe8a Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Fri, 29 Dec 2023 17:04:42 +0100 Subject: [PATCH 072/108] version bump -b28.35 --- .github/ISSUE_TEMPLATE/bug.yml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- wled00/data/index.js | 2 +- wled00/improv.cpp | 2 +- wled00/wled.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 9fe3dea3..e99a8790 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -48,7 +48,7 @@ body: attributes: label: What version/release of MM WLED? description: You can find this in by going to Config -> Security & Updates -> Scroll to Bottom. Copy and paste the entire line after "Server message" - placeholder: "e.g. build 2312160, WLEDMM_0.14.0-b28.34_esp32_4MB_M.bin" + placeholder: "e.g. build 2312290, WLEDMM_0.14.0-b28.35_esp32_4MB_M.bin" validations: required: true - type: dropdown diff --git a/package-lock.json b/package-lock.json index 35bd150b..21873756 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wled", - "version": "0.14.0-b28.34", + "version": "0.14.0-b28.35", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wled", - "version": "0.14.0-b28.34", + "version": "0.14.0-b28.35", "license": "GPL-3.0-or-later", "dependencies": { "clean-css": "^4.2.3", diff --git a/package.json b/package.json index 1d461925..ac51dd71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.14.0-b28.34", + "version": "0.14.0-b28.35", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/wled00/data/index.js b/wled00/data/index.js index 625c1d46..a5f914b3 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -1107,7 +1107,7 @@ function ddpAll() { callNode(lastinfo.ip, "cfg", {"hw":{"led":{"ins":ins}}}); //self } -//curl -s -F "update=@/Users/ewoudwijma/Developer/GitHub/MoonModules/WLED/build_output/release/WLEDMM_0.14.0-b28.34_esp32_4MB_M.bin" 192.168.8.105/update >nul & +//curl -s -F "update=@/Users/ewoudwijma/Developer/GitHub/MoonModules/WLED/build_output/release/WLEDMM_0.14.0-b28.35_esp32_4MB_M.bin" 192.168.8.105/update >nul & //WLEDMM function SuperSync() { diff --git a/wled00/improv.cpp b/wled00/improv.cpp index c6bcaca0..7279a95b 100644 --- a/wled00/improv.cpp +++ b/wled00/improv.cpp @@ -210,7 +210,7 @@ void sendImprovInfoResponse() { //Use serverDescription if it has been changed from the default "WLED", else mDNS name bool useMdnsName = (strcmp(serverDescription, "WLED") == 0 && strlen(cmDNS) > 0); char vString[32]; - snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b28.34/%i"),VERSION); + snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b28.35/%i"),VERSION); const char *str[4] = {"WLED", vString, bString, useMdnsName ? cmDNS : serverDescription}; sendImprovRPCResult(ImprovRPCType::Request_Info, 4, str); diff --git a/wled00/wled.h b/wled00/wled.h index 8bce0ceb..c5ccd66d 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312180 +#define VERSION 2312290 // WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED. #define _MoonModules_WLED_ From 4bbf1ba58493c2b7d8beb40636a79d5e09c1a2df Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 23 Dec 2023 13:13:10 +0100 Subject: [PATCH 073/108] sunrise/sunset: fix for ambiguous error value sunset = 0 is a valid result, as the function result is in UTC and not local time . Example: local time is UTC-8, local sunrise = 08:00am => getSunriseUTC() = 0. So we cannot use "0" for "invalid". Using UINT16_MAX resolves the problem, and even allows to simplify calculateSunriseAndSunset() a bit. --- wled00/ntp.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/wled00/ntp.cpp b/wled00/ntp.cpp index ecc11ce0..fb5e85b3 100644 --- a/wled00/ntp.cpp +++ b/wled00/ntp.cpp @@ -450,8 +450,8 @@ void checkTimers() } #define ZENITH -0.83 -// get sunrise (or sunset) time (in minutes) for a given day at a given geo location -int getSunriseUTC(int year, int month, int day, float lat, float lon, bool sunset=false) { +// get sunrise (or sunset) time (in minutes) for a given day at a given geo location. Returns >= INT16_MAX in case of "no sunset" +static int getSunriseUTC(int year, int month, int day, float lat, float lon, bool sunset=false) { //1. first calculate the day of the year float N1 = 275 * month / 9; float N2 = (month + 9) / 12; @@ -485,8 +485,8 @@ int getSunriseUTC(int year, int month, int day, float lat, float lon, bool sunse //7a. calculate the Sun's local hour angle float cosH = (sinf(DEG_TO_RAD*ZENITH) - (sinDec * sinf(DEG_TO_RAD*lat))) / (cosDec * cosf(DEG_TO_RAD*lat)); - if ((cosH > 1.0f) && !sunset) return 0; // the sun never rises on this location (on the specified date) - if ((cosH < -1.0f) && sunset) return 0; // the sun never sets on this location (on the specified date) + if ((cosH > 1.0f) && !sunset) return INT16_MAX; // the sun never rises on this location (on the specified date) + if ((cosH < -1.0f) && sunset) return INT16_MAX; // the sun never sets on this location (on the specified date) //7b. finish calculating H and convert into hours float H = sunset ? RAD_TO_DEG*acosf(cosH) : 360 - RAD_TO_DEG*acosf(cosH); @@ -502,6 +502,7 @@ int getSunriseUTC(int year, int month, int day, float lat, float lon, bool sunse return UT*60; } +#define SUNSET_MAX (24*60) // 1day = max expected absolute value for sun offset in minutes // calculate sunrise and sunset (if longitude and latitude are set) void calculateSunriseAndSunset() { if ((int)(longitude*10.) || (int)(latitude*10.)) { @@ -512,8 +513,19 @@ void calculateSunriseAndSunset() { tim_0.tm_sec = 0; tim_0.tm_isdst = 0; - int minUTC = getSunriseUTC(year(localTime), month(localTime), day(localTime), latitude, longitude); - if (minUTC) { + // Due to limited accuracy, its possible to get a bad sunrise/sunset displayed as "00:00" (see issue #3601) + // So in case of invalid result, we try to use the sunset/sunrise of previous day. Max 3 days back, this worked well in all cases I tried. + // When latitude = 66,6 (N or S), the functions sometimes returns 2147483647, so this "unexpected large" is another condition for retry + int minUTC = 0; + int retryCount = 0; + do { + time_t theDay = localTime - retryCount * 86400; // one day back = 86400 seconds + minUTC = getSunriseUTC(year(theDay), month(theDay), day(theDay), latitude, longitude, false); + DEBUG_PRINT(F("* sunrise (minutes from UTC) = ")); DEBUG_PRINTLN(minUTC); + retryCount ++; + } while ((abs(minUTC) > SUNSET_MAX) && (retryCount <= 3)); + + if (abs(minUTC) <= SUNSET_MAX) { // there is a sunrise if (minUTC < 0) minUTC += 24*60; // add a day if negative tim_0.tm_hour = minUTC / 60; @@ -524,8 +536,15 @@ void calculateSunriseAndSunset() { sunrise = 0; } - minUTC = getSunriseUTC(year(localTime), month(localTime), day(localTime), latitude, longitude, true); - if (minUTC) { + retryCount = 0; + do { + time_t theDay = localTime - retryCount * 86400; // one day back = 86400 seconds + minUTC = getSunriseUTC(year(theDay), month(theDay), day(theDay), latitude, longitude, true); + DEBUG_PRINT(F("* sunset (minutes from UTC) = ")); DEBUG_PRINTLN(minUTC); + retryCount ++; + } while ((abs(minUTC) > SUNSET_MAX) && (retryCount <= 3)); + + if (abs(minUTC) <= SUNSET_MAX) { // there is a sunset if (minUTC < 0) minUTC += 24*60; // add a day if negative tim_0.tm_hour = minUTC / 60; From 738df1847a883c0dca412bb1cf375a0cda88046f Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 23 Dec 2023 20:58:55 +0100 Subject: [PATCH 074/108] Fix for #2922 --- wled00/cfg.cpp | 4 ++-- wled00/data/settings_wifi.htm | 1 + wled00/set.cpp | 1 + wled00/wled.cpp | 2 +- wled00/wled.h | 1 + wled00/xml.cpp | 1 + 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 4046be49..7b842d63 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -83,7 +83,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { noWifiSleep = doc[F("wifi")][F("sleep")] | !noWifiSleep; // inverted noWifiSleep = !noWifiSleep; - //int wifi_phy = doc[F("wifi")][F("phy")]; //force phy mode n? + force802_3g = doc[F("wifi")][F("phy")] | force802_3g; //force phy mode g? JsonObject hw = doc[F("hw")]; @@ -735,7 +735,7 @@ void serializeConfig() { JsonObject wifi = doc.createNestedObject("wifi"); wifi[F("sleep")] = !noWifiSleep; - //wifi[F("phy")] = 1; + wifi[F("phy")] = (int)force802_3g; #ifdef WLED_USE_ETHERNET JsonObject ethernet = doc.createNestedObject("eth"); diff --git a/wled00/data/settings_wifi.htm b/wled00/data/settings_wifi.htm index b66a1b09..8b40c3c1 100644 --- a/wled00/data/settings_wifi.htm +++ b/wled00/data/settings_wifi.htm @@ -178,6 +178,7 @@
AP IP: Not active

Experimental

+ Force 802.11g mode (ESP8266 only):
Disable WiFi sleep:
Can help with connectivity issues.
Do not enable if WiFi is working correctly, increases power consumption.
diff --git a/wled00/set.cpp b/wled00/set.cpp index 746f0de1..115b3f6a 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -46,6 +46,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) if (passlen == 0 || (passlen > 7 && !isAsterisksOnly(request->arg(F("AP")).c_str(), 65))) strlcpy(apPass, request->arg(F("AP")).c_str(), 65); int t = request->arg(F("AC")).toInt(); if (t > 0 && t < 14) apChannel = t; + force802_3g = request->hasArg(F("FG")); noWifiSleep = request->hasArg(F("WS")); #ifndef WLED_DISABLE_ESPNOW diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 61f8b2df..8f31bfbf 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -1027,7 +1027,7 @@ void WLED::initConnection() WiFi.disconnect(true); // close old connections #ifdef ESP8266 - WiFi.setPhyMode(WIFI_PHY_MODE_11N); + WiFi.setPhyMode(force802_3g ? WIFI_PHY_MODE_11G : WIFI_PHY_MODE_11N); #endif if (staticIP[0] != 0 && staticGateway[0] != 0) { diff --git a/wled00/wled.h b/wled00/wled.h index c5ccd66d..1b14c822 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -342,6 +342,7 @@ WLED_GLOBAL bool noWifiSleep _INIT(true); // disabling #else WLED_GLOBAL bool noWifiSleep _INIT(false); #endif +WLED_GLOBAL bool force802_3g _INIT(false); #ifdef WLED_USE_ETHERNET #ifdef WLED_ETH_DEFAULT // default ethernet board type if specified diff --git a/wled00/xml.cpp b/wled00/xml.cpp index 71f7f2ef..26eac522 100644 --- a/wled00/xml.cpp +++ b/wled00/xml.cpp @@ -343,6 +343,7 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W sappends('s',SET_F("AP"),fapass); sappend('v',SET_F("AC"),apChannel); + sappend('c',SET_F("FG"),force802_3g); sappend('c',SET_F("WS"),noWifiSleep); #ifndef WLED_DISABLE_ESPNOW From c74592032e5065ce3ab8735e09a8fcadfa11c46b Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sun, 24 Dec 2023 20:51:43 +0100 Subject: [PATCH 075/108] Merge pull request #3615 from srg74/patch-2 Update readme.md --- usermods/quinled-an-penta/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/quinled-an-penta/readme.md b/usermods/quinled-an-penta/readme.md index 2338747d..c1260d91 100644 --- a/usermods/quinled-an-penta/readme.md +++ b/usermods/quinled-an-penta/readme.md @@ -2,7 +2,7 @@ The (un)official usermod to get the best out of the QuinLED-An-Penta (https://quinled.info/quinled-an-penta/), e.g. using the OLED and the SHT30 temperature/humidity sensor. ## Requirements -* "u8gs" by olikraus, v2.28 or higher: https://github.com/olikraus/u8g2 +* "u8g2" by olikraus, v2.28 or higher: https://github.com/olikraus/u8g2 * "SHT85" by Rob Tillaart, v0.2 or higher: https://github.com/RobTillaart/SHT85 ## Usermod installation From dadafdab066ae2af8856658b8159ef41b13086bd Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Wed, 27 Dec 2023 20:14:51 +0100 Subject: [PATCH 076/108] Remote preset cancles playlist --- wled00/remote.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wled00/remote.cpp b/wled00/remote.cpp index e878f8eb..5a993c29 100644 --- a/wled00/remote.cpp +++ b/wled00/remote.cpp @@ -114,6 +114,8 @@ static void setOff() { } static void presetWithFallback(uint8_t presetID, uint8_t effectID, uint8_t paletteID) { + resetNightMode(); + unloadPlaylist(); applyPresetWithFallback(presetID, CALL_MODE_BUTTON_PRESET, effectID, paletteID); } From 1f65843e6ddbd449521e900eaaf784eabe9647f8 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Fri, 29 Dec 2023 17:28:52 +0100 Subject: [PATCH 077/108] upstream changelog update upstream bugfixes which were added into mdev --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdc8ca5f..11799d26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ ## [WLED upstream](https://github.com/Aircoookie/WLED/tree/0_14_1) changelog +#### Build 2312290 +- Fix for #3622 +- NB: fix for #3613 #3609 are not needed in MoonModules fork +- Various tweaks and fixes + +#### Build 2312230 +- Fix for #2922 (option to force WiFi PHY mode to G on ESP8266) +- Fix for #3601, #3400 (incorrect sunrise/sunset, #3612 by @softhack007) #### Build 2312180 - Bugfixes (#3593, #3490, #3573, #3517, #3561, #3555, #3541, #3536, #3522, #3533, #3508) From f7bfaf02a804c00c5d5da8385ebd8d031df5c8b8 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 25 Dec 2023 17:47:39 +0100 Subject: [PATCH 078/108] Possible bugfix for #3609 #3616 --- wled00/FX_fcn.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index c5a11b08..72e302dc 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -201,12 +201,14 @@ Segment& Segment::operator= (Segment &&orig) noexcept { } bool Segment::allocateData(size_t len) { - if (data && _dataLen >= len) { - if (call == 0) memset(data, 0, len); // WLEDMM: clear data when SEGENV.call==0 - return true; //already allocated + // WLEDMM + if (data && _dataLen >= len) { // already allocated enough (reduce fragmentation) + if ((call == 0) && (len > 0)) memset(data, 0, len); // erase buffer if called during effect initialisation + return true; } //DEBUG_PRINTF("allocateData(%u) start %d, stop %d, vlen %d\n", len, start, stop, virtualLength()); deallocateData(); + if (len == 0) return false; // nothing to do if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) return false; //not enough memory // do not use SPI RAM on ESP32 since it is slow //#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM) From 6199ebaa927c9ff59d1f9120a7ba90122c40c35e Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Fri, 29 Dec 2023 18:39:07 +0100 Subject: [PATCH 079/108] MM environment for ESP32-C3 "mini" and "super mini" ( #101) --- platformio.ini | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/platformio.ini b/platformio.ini index ad5fec29..8d14f9a1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -77,6 +77,7 @@ default_envs = ;; esp32s2_tinyUF2_PSRAM_S ;; experimental - only for adafruit -S2 boards with tinyUF2 bootloader !!! esp32s2_PSRAM_M ;; experimental esp32c3dev_4MB_M ;; experimental + esp32c3mini_dio_4MB_M ;; for boards that need "dio" flash mode (instead of qio) seeed_esp32c3_4MB_S ;; experimental esp32_4MB_V4_S ;; experimental esp32_16MB_V4_S ;; experimental, optimized for speed @@ -1966,6 +1967,23 @@ lib_ignore = ; RAM: [== ] 23.7% (used 77780 bytes from 327680 bytes) ; Flash: [========= ] 93.9% (used 1477456 bytes from 1572864 bytes) +;; MM environment for ESP32-C3 "mini" and "super mini" -> flash mode "dio" instead of "qio" (see #101) +[env:esp32c3mini_dio_4MB_M] +extends = env:esp32c3dev_4MB_M +board = lolin_c3_mini +board_build.flash_mode = dio ;; some super-mini boards are unstable with "qio" mode +;; board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; optional: 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions) +;;; replace WLED_RELEASE_NAME, disable CDC_ON_BOOT +build_unflags = ${env:esp32c3dev_4MB_M.build_unflags} + -DARDUINO_USB_CDC_ON_BOOT=1 + -D WLED_RELEASE_NAME=esp32c3dev_4MB_M +build_flags = ${env:esp32c3dev_4MB_M.build_flags} + -DARDUINO_USB_CDC_ON_BOOT=0 + -D WLED_RELEASE_NAME=esp32c3mini_dio_4MB_M + -D WLED_DISABLE_BROWNOUT_DET ;; the board only has a 500mA LDO, better to disable brownout detection + -D WLED_DISABLE_ADALIGHT ;; to disable serial protocols for boards with CDC USB (Serial RX will receive junk commands, unless its pulled down by resistor) + -D HW_PIN_SDA=0 -D HW_PIN_SCL=1 ;; avoid pin conflicts + ;; MM environment for "seeed xiao -C3" boards [env:seeed_esp32c3_4MB_S] extends = env:esp32c3dev_4MB_M From 78741a469c5007a7bfe9f3dac46ffaac996fa70c Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Fri, 29 Dec 2023 18:42:55 +0100 Subject: [PATCH 080/108] npm run build --- wled00/html_other.h | 74 +++--- wled00/html_settings.h | 556 +++++++++++++++++++++-------------------- 2 files changed, 316 insertions(+), 314 deletions(-) diff --git a/wled00/html_other.h b/wled00/html_other.h index 4d663330..667f76a4 100644 --- a/wled00/html_other.h +++ b/wled00/html_other.h @@ -44,43 +44,43 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()====="; const uint16_t PAGE_update_length = 607; const uint8_t PAGE_update[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x75, 0x53, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0xb1, 0x07, 0x18, 0x49, 0x86, 0xca, - 0x26, 0x84, 0xc4, 0xb4, 0x4a, 0xdb, 0x40, 0x3c, 0x21, 0x27, 0xbe, 0x69, 0x4c, 0x1d, 0x3b, 0xb3, - 0x6f, 0x5a, 0x55, 0x68, 0xff, 0xce, 0xb5, 0xd3, 0x0e, 0xa4, 0xc1, 0x4b, 0x14, 0x27, 0xe7, 0x9e, - 0x9c, 0x7b, 0xce, 0x49, 0x71, 0x72, 0x75, 0xfb, 0xf1, 0xfe, 0xfb, 0xea, 0x9a, 0x75, 0xd8, 0x9b, - 0xaa, 0x38, 0x5c, 0x41, 0xaa, 0xaa, 0xe8, 0x01, 0x25, 0x6b, 0x9c, 0x45, 0xb0, 0x58, 0xf2, 0x9d, - 0x56, 0xd8, 0x95, 0x0a, 0xb6, 0xba, 0x81, 0x45, 0x3a, 0x70, 0x66, 0x65, 0x0f, 0x25, 0xdf, 0x6a, - 0xd8, 0x0d, 0xce, 0x23, 0xaf, 0xb2, 0x02, 0x35, 0x1a, 0xa8, 0xbe, 0x7d, 0xb9, 0xbe, 0x62, 0x0f, - 0x83, 0x92, 0x08, 0x45, 0x3e, 0x3d, 0x2a, 0x42, 0xe3, 0xf5, 0x80, 0x55, 0xd6, 0x8e, 0xb6, 0x41, - 0xed, 0x2c, 0x5b, 0xce, 0xe6, 0xbf, 0x76, 0xda, 0x2a, 0xb7, 0x13, 0x9d, 0x0e, 0xe8, 0xfc, 0x5e, - 0xd4, 0xb2, 0xd9, 0xcc, 0xe6, 0x4f, 0xcf, 0x90, 0x07, 0x82, 0x28, 0xd7, 0x8c, 0x3d, 0x29, 0x10, - 0x6b, 0xc0, 0x6b, 0x03, 0xf1, 0x76, 0xb9, 0xff, 0xac, 0x66, 0x7c, 0x6c, 0xf9, 0x5c, 0x04, 0xdc, - 0x1b, 0x10, 0x4a, 0x87, 0xc1, 0xc8, 0x7d, 0xc9, 0xad, 0xb3, 0xc0, 0x5f, 0xfd, 0x77, 0xa4, 0x0f, - 0xeb, 0x97, 0x33, 0xb5, 0x71, 0xcd, 0x86, 0x3f, 0x65, 0x45, 0x7e, 0x90, 0x78, 0x90, 0xca, 0x82, - 0x6f, 0x4a, 0x9e, 0x07, 0x40, 0xd4, 0x76, 0x1d, 0xf2, 0x20, 0x7e, 0x86, 0xcb, 0xa1, 0x7c, 0xc7, - 0xab, 0xbf, 0x90, 0x91, 0xaa, 0xca, 0x3e, 0xe8, 0x3e, 0x1a, 0xc0, 0x46, 0x6f, 0x66, 0x7c, 0xa2, - 0x6f, 0x42, 0xe0, 0xf3, 0xf7, 0x84, 0x4c, 0x88, 0x22, 0x9f, 0x2c, 0xad, 0x9d, 0xda, 0x33, 0x67, - 0x8d, 0x93, 0xaa, 0xe4, 0x9f, 0x00, 0xbf, 0xce, 0xe6, 0x44, 0xd7, 0x9d, 0x55, 0xd9, 0x8d, 0x73, - 0xf6, 0xc6, 0x29, 0x96, 0xac, 0xbb, 0x73, 0x2d, 0xee, 0xa4, 0x87, 0x67, 0x0f, 0x09, 0x51, 0xb4, - 0xce, 0xf7, 0x8c, 0x32, 0xe9, 0x1c, 0xcd, 0xae, 0x6e, 0xef, 0xee, 0x39, 0x93, 0xc9, 0x26, 0x12, - 0x39, 0x26, 0x1c, 0x67, 0x9a, 0x5e, 0x91, 0x2f, 0x2c, 0x03, 0x72, 0x70, 0x3f, 0x50, 0x38, 0xfd, - 0x68, 0x50, 0x0f, 0xd2, 0x63, 0x1e, 0xe7, 0x17, 0x04, 0x93, 0x9c, 0x14, 0x84, 0xb1, 0xee, 0x35, - 0xa5, 0xfa, 0x90, 0x04, 0x84, 0x41, 0x5a, 0xd6, 0x18, 0x19, 0x42, 0xc9, 0x83, 0x1e, 0x78, 0x75, - 0x2a, 0x5e, 0x9f, 0x8b, 0xd3, 0x45, 0x7d, 0xf6, 0x56, 0xbc, 0x39, 0x8f, 0xce, 0x10, 0x80, 0xd4, - 0xfb, 0xea, 0xca, 0xed, 0x92, 0x7a, 0x86, 0x1d, 0x30, 0x43, 0xdf, 0x0c, 0xc8, 0x3c, 0x18, 0x90, - 0x01, 0x2e, 0x58, 0x21, 0x59, 0xd6, 0x79, 0x68, 0x4b, 0xde, 0x21, 0x0e, 0xe1, 0x22, 0xcf, 0xd7, - 0x1a, 0xbb, 0xb1, 0x16, 0x8d, 0xeb, 0xf3, 0xc3, 0x82, 0xa3, 0x81, 0x90, 0xc7, 0x25, 0xf3, 0xc3, - 0x58, 0xe0, 0x0c, 0xa5, 0xa7, 0xa4, 0x4a, 0xfe, 0xa3, 0x36, 0xd2, 0x6e, 0x48, 0x8f, 0xee, 0xd7, - 0x2c, 0x4b, 0xf6, 0x1f, 0x89, 0xe8, 0x89, 0x08, 0x9d, 0x06, 0xa3, 0x82, 0xd0, 0xee, 0xc0, 0x7b, - 0xa4, 0x78, 0xc1, 0x2d, 0xc2, 0x76, 0x7d, 0x99, 0x9c, 0x2f, 0x5b, 0x12, 0xb9, 0x08, 0x8f, 0x23, - 0xb9, 0x19, 0xfb, 0x99, 0xcb, 0xb4, 0x46, 0xa1, 0xed, 0x30, 0x22, 0x9b, 0x2c, 0x6a, 0xb5, 0x81, - 0x63, 0x97, 0x8f, 0x46, 0x7a, 0x78, 0x1c, 0xb5, 0x07, 0x35, 0xa1, 0xeb, 0x11, 0x91, 0xea, 0x38, - 0xc1, 0x27, 0xeb, 0x88, 0x6c, 0x0a, 0xe7, 0xa4, 0xc8, 0xa7, 0xd7, 0xff, 0x80, 0x4e, 0x87, 0xe8, - 0x77, 0x63, 0x74, 0xb3, 0x29, 0xf9, 0x32, 0xda, 0xbd, 0xa4, 0x96, 0xff, 0x19, 0x4a, 0xb9, 0x54, - 0x85, 0xd2, 0xdb, 0x2c, 0xc5, 0x17, 0x3b, 0x4a, 0x34, 0x55, 0x62, 0xa7, 0xe2, 0x09, 0x21, 0x08, - 0x9c, 0xc8, 0x57, 0x69, 0x5b, 0xa6, 0x1c, 0xb3, 0x0e, 0x29, 0x2f, 0x47, 0x07, 0xe7, 0x49, 0x6b, - 0xeb, 0x21, 0x74, 0x29, 0x92, 0x41, 0xae, 0x81, 0x5d, 0xcc, 0x8b, 0x9c, 0xf8, 0xe2, 0xba, 0xb1, - 0x70, 0xb1, 0x7d, 0xf1, 0xb7, 0xfe, 0x0d, 0xf9, 0x6e, 0x55, 0x89, 0xec, 0x03, 0x00, 0x00 + 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0x01, 0x12, 0x8c, 0x24, 0x43, 0x65, + 0x13, 0x42, 0x62, 0x5a, 0xa5, 0x6d, 0x20, 0x9e, 0x90, 0x13, 0xdf, 0x34, 0xa6, 0x8e, 0x9d, 0xd9, + 0x37, 0xad, 0x2a, 0xb4, 0x7f, 0xe7, 0xda, 0x69, 0x07, 0xd2, 0xe0, 0x25, 0x8a, 0x93, 0x73, 0x4f, + 0xce, 0x3d, 0xe7, 0xa4, 0x38, 0xb9, 0xbc, 0xf9, 0x78, 0xf7, 0x7d, 0x75, 0xc5, 0x3a, 0xec, 0x4d, + 0x55, 0x1c, 0xae, 0x20, 0x55, 0x55, 0xf4, 0x80, 0x92, 0x35, 0xce, 0x22, 0x58, 0x2c, 0xf9, 0x4e, + 0x2b, 0xec, 0x4a, 0x05, 0x5b, 0xdd, 0xc0, 0x22, 0x1d, 0x38, 0xb3, 0xb2, 0x87, 0x92, 0x6f, 0x35, + 0xec, 0x06, 0xe7, 0x91, 0x57, 0x59, 0x81, 0x1a, 0x0d, 0x54, 0xdf, 0xbe, 0x5c, 0x5d, 0xb2, 0xfb, + 0x41, 0x49, 0x84, 0x22, 0x9f, 0x1e, 0x15, 0xa1, 0xf1, 0x7a, 0xc0, 0x2a, 0x6b, 0x47, 0xdb, 0xa0, + 0x76, 0x96, 0x2d, 0x67, 0xf3, 0x5f, 0x3b, 0x6d, 0x95, 0xdb, 0x89, 0x4e, 0x07, 0x74, 0x7e, 0x2f, + 0x6a, 0xd9, 0x6c, 0x66, 0xf3, 0xc7, 0x27, 0xc8, 0x3d, 0x41, 0x94, 0x6b, 0xc6, 0x9e, 0x14, 0x88, + 0x35, 0xe0, 0x95, 0x81, 0x78, 0xbb, 0xdc, 0x7f, 0x56, 0x33, 0x3e, 0xb6, 0x7c, 0x2e, 0x02, 0xee, + 0x0d, 0x08, 0xa5, 0xc3, 0x60, 0xe4, 0xbe, 0xe4, 0xd6, 0x59, 0xe0, 0x2f, 0xfe, 0x3b, 0xd2, 0x87, + 0xf5, 0xf3, 0x99, 0xda, 0xb8, 0x66, 0xc3, 0x1f, 0xb3, 0x22, 0x3f, 0x48, 0x3c, 0x48, 0x65, 0xc1, + 0x37, 0x25, 0xcf, 0x03, 0x20, 0x6a, 0xbb, 0x0e, 0x79, 0x10, 0x3f, 0xc3, 0xc5, 0x50, 0xbe, 0xe3, + 0xd5, 0x5f, 0xc8, 0x48, 0x55, 0x65, 0x1f, 0x74, 0x1f, 0x0d, 0x60, 0xa3, 0x37, 0x33, 0x3e, 0xd1, + 0x37, 0x21, 0xf0, 0xf9, 0x7b, 0x42, 0x26, 0x44, 0x91, 0x4f, 0x96, 0xd6, 0x4e, 0xed, 0x99, 0xb3, + 0xc6, 0x49, 0x55, 0xf2, 0x4f, 0x80, 0x5f, 0x67, 0x73, 0xa2, 0xeb, 0xce, 0xaa, 0xec, 0xda, 0x39, + 0x7b, 0xed, 0x14, 0x4b, 0xd6, 0xdd, 0xba, 0x16, 0x77, 0xd2, 0xc3, 0x93, 0x87, 0x84, 0x28, 0x5a, + 0xe7, 0x7b, 0x46, 0x99, 0x74, 0x8e, 0x66, 0x57, 0x37, 0xb7, 0x77, 0x9c, 0xc9, 0x64, 0x13, 0x89, + 0x1c, 0x13, 0x8e, 0x33, 0x4d, 0xaf, 0xc8, 0x17, 0x96, 0x01, 0x39, 0xb8, 0x1f, 0x28, 0x9c, 0x7e, + 0x34, 0xa8, 0x07, 0xe9, 0x31, 0x8f, 0xf3, 0x0b, 0x82, 0x49, 0x4e, 0x0a, 0xc2, 0x58, 0xf7, 0x9a, + 0x52, 0xbd, 0x4f, 0x02, 0xc2, 0x20, 0x2d, 0x6b, 0x8c, 0x0c, 0xa1, 0xe4, 0x41, 0x0f, 0xbc, 0x3a, + 0x15, 0x2f, 0x5f, 0x8b, 0xd3, 0x45, 0x7d, 0xf6, 0x56, 0xbc, 0x7a, 0x13, 0x9d, 0x21, 0x00, 0xa9, + 0xf7, 0xd5, 0xa5, 0xdb, 0x25, 0xf5, 0x0c, 0x3b, 0x60, 0x86, 0xbe, 0x19, 0x90, 0x79, 0x30, 0x20, + 0x03, 0x9c, 0xb3, 0x42, 0xb2, 0xac, 0xf3, 0xd0, 0x96, 0xbc, 0x43, 0x1c, 0xc2, 0x79, 0x9e, 0xaf, + 0x35, 0x76, 0x63, 0x2d, 0x1a, 0xd7, 0xe7, 0x87, 0x05, 0x47, 0x03, 0x21, 0x8f, 0x4b, 0xe6, 0x87, + 0xb1, 0xc0, 0x19, 0x4a, 0x4f, 0x49, 0x95, 0xfc, 0x47, 0x6d, 0xa4, 0xdd, 0x90, 0x1e, 0xdd, 0xaf, + 0x59, 0x96, 0xec, 0x3f, 0x12, 0xd1, 0x13, 0x11, 0x3a, 0x0d, 0x46, 0x05, 0xa1, 0xdd, 0x81, 0xf7, + 0x48, 0xf1, 0x8c, 0x5b, 0x84, 0xed, 0xfa, 0x22, 0x39, 0x5f, 0xb6, 0x24, 0x72, 0x11, 0x1e, 0x46, + 0x72, 0x33, 0xf6, 0x33, 0x97, 0x69, 0x8d, 0x42, 0xdb, 0x61, 0x44, 0x36, 0x59, 0xd4, 0x6a, 0x03, + 0xc7, 0x2e, 0x1f, 0x8d, 0xf4, 0xf0, 0x30, 0x6a, 0x0f, 0x6a, 0x42, 0xd7, 0x23, 0x22, 0xd5, 0x71, + 0x82, 0x4f, 0xd6, 0x11, 0xd9, 0x14, 0xce, 0x49, 0x91, 0x4f, 0xaf, 0xff, 0x01, 0x9d, 0x0e, 0xd1, + 0xef, 0xc6, 0xe8, 0x66, 0x53, 0xf2, 0x65, 0xb4, 0x7b, 0x49, 0x2d, 0xff, 0x33, 0x94, 0x72, 0xa9, + 0x0a, 0xa5, 0xb7, 0x59, 0x8a, 0x2f, 0x76, 0x94, 0x68, 0xaa, 0xc4, 0x4e, 0xc5, 0x13, 0x42, 0x10, + 0x38, 0x91, 0xaf, 0xd2, 0xb6, 0x4c, 0x39, 0x66, 0x1d, 0x52, 0x5e, 0x8e, 0x0e, 0xce, 0x93, 0xd6, + 0xd6, 0x43, 0xe8, 0x52, 0x24, 0x83, 0x5c, 0x03, 0x3b, 0x9f, 0x17, 0x39, 0xf1, 0xc5, 0x75, 0x63, + 0xe1, 0x62, 0xfb, 0xe2, 0x6f, 0xfd, 0x1b, 0x12, 0x9b, 0x8e, 0x8f, 0xec, 0x03, 0x00, 0x00 }; diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 713ee862..9713fb3d 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -154,150 +154,152 @@ const uint8_t PAGE_settings[] PROGMEM = { // Autogenerated from wled00/data/settings_wifi.htm, do not edit!! -const uint16_t PAGE_settings_wifi_length = 2275; +const uint16_t PAGE_settings_wifi_length = 2307; const uint8_t PAGE_settings_wifi[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x58, 0xff, 0x53, 0xdb, 0x3a, - 0x12, 0xff, 0xdd, 0x7f, 0x85, 0xd0, 0xbb, 0xe9, 0xd8, 0x83, 0xe3, 0x10, 0xd2, 0xf6, 0xf5, 0x20, - 0x4e, 0x0f, 0x42, 0x1e, 0x70, 0x8f, 0x42, 0xae, 0x61, 0xca, 0xdc, 0xf4, 0x3a, 0xef, 0x19, 0x5b, - 0x49, 0x54, 0x6c, 0xc9, 0x67, 0xc9, 0x09, 0x0c, 0xe4, 0x7f, 0x7f, 0xbb, 0x92, 0x13, 0xe2, 0x40, - 0xe8, 0x5d, 0x87, 0xe9, 0x4c, 0xb1, 0xe5, 0xd5, 0x7e, 0xf9, 0xec, 0x47, 0xbb, 0xab, 0x74, 0xb6, - 0x8e, 0x2e, 0x7a, 0x97, 0xff, 0x1e, 0xf4, 0xc9, 0x44, 0x67, 0x69, 0xb7, 0x83, 0xff, 0x93, 0x34, - 0x12, 0xe3, 0x90, 0x32, 0x41, 0xe1, 0x9d, 0x45, 0x49, 0xb7, 0x93, 0x31, 0x1d, 0x91, 0x78, 0x12, - 0x15, 0x8a, 0xe9, 0x90, 0x96, 0x7a, 0xd4, 0xf8, 0x40, 0xab, 0x55, 0x27, 0x96, 0x42, 0x33, 0x01, - 0xcb, 0x33, 0x9e, 0xe8, 0x49, 0x98, 0xb0, 0x29, 0x8f, 0x59, 0xc3, 0xbc, 0xf8, 0x5c, 0x70, 0xcd, - 0xa3, 0xb4, 0xa1, 0xe2, 0x28, 0x65, 0x61, 0xcb, 0xcf, 0xa2, 0x5b, 0x9e, 0x95, 0xd9, 0xf2, 0xbd, - 0x54, 0xac, 0x30, 0x2f, 0xd1, 0x35, 0xbc, 0x0b, 0x49, 0x89, 0x23, 0xa2, 0x8c, 0x85, 0x74, 0xca, - 0xd9, 0x2c, 0x97, 0x85, 0x06, 0x2b, 0x9a, 0xeb, 0x94, 0x75, 0xaf, 0xf8, 0x6f, 0x9c, 0x0c, 0x99, - 0xd6, 0x5c, 0x8c, 0x55, 0xa7, 0x69, 0x17, 0x3b, 0x2a, 0x2e, 0x78, 0xae, 0xbb, 0xce, 0x34, 0x2a, - 0x48, 0x2a, 0x63, 0x9e, 0xfb, 0x49, 0x98, 0xc8, 0xb8, 0xcc, 0xc0, 0x21, 0x1f, 0x16, 0xc2, 0xad, - 0x96, 0x0f, 0xea, 0xc5, 0x99, 0x94, 0xb9, 0x0a, 0x77, 0xfc, 0xbc, 0x60, 0x43, 0x78, 0x1d, 0x0e, - 0x4f, 0x8f, 0x42, 0x4a, 0xf7, 0x47, 0xa5, 0x88, 0x35, 0x97, 0x82, 0x8c, 0x4f, 0x13, 0x57, 0x7b, - 0xf7, 0x05, 0xd3, 0x65, 0x21, 0x48, 0x12, 0x8c, 0x99, 0xee, 0xa7, 0x0c, 0xb5, 0x1c, 0xde, 0x99, - 0x4f, 0xf3, 0xa5, 0x68, 0xdc, 0xaf, 0x49, 0xc6, 0x05, 0x8b, 0x34, 0xab, 0x84, 0x6b, 0x82, 0x27, - 0xae, 0x77, 0x3f, 0xe3, 0x22, 0x91, 0xb3, 0x40, 0xe6, 0x4c, 0xb8, 0x74, 0xa2, 0x75, 0xae, 0xf6, - 0x9a, 0xcd, 0x2c, 0x0b, 0x6e, 0x84, 0x0c, 0x66, 0x29, 0x43, 0x43, 0xcd, 0x11, 0x28, 0x28, 0x0b, - 0xa6, 0x9a, 0xaa, 0x8a, 0xae, 0xf9, 0xcb, 0x8c, 0x8f, 0x78, 0x63, 0xf1, 0x4a, 0x57, 0x74, 0x1e, - 0xae, 0xeb, 0x5c, 0x6e, 0xa2, 0x3e, 0xfd, 0x43, 0xb1, 0x74, 0xb4, 0x2a, 0x7d, 0x0e, 0xd2, 0x90, - 0x1d, 0xa5, 0x89, 0x0e, 0x5d, 0x40, 0xe3, 0xa3, 0x71, 0x01, 0x3c, 0xa0, 0xdb, 0x06, 0xac, 0x3d, - 0x4a, 0xbd, 0x6d, 0xda, 0xfc, 0xae, 0xa4, 0x68, 0x0a, 0xa6, 0xa9, 0xcf, 0x42, 0x04, 0x82, 0x22, - 0x62, 0xd4, 0xdb, 0x67, 0x41, 0xc2, 0x15, 0x26, 0x26, 0x09, 0xb7, 0x76, 0x7c, 0x16, 0x68, 0x76, - 0xab, 0x7b, 0x8b, 0x64, 0x23, 0x8c, 0x02, 0x0c, 0x07, 0x41, 0x40, 0xfd, 0x11, 0xd3, 0xf1, 0x04, - 0x82, 0x0f, 0xf4, 0x04, 0x9c, 0xd2, 0x61, 0x57, 0x07, 0xa8, 0xd4, 0xf5, 0x1e, 0x57, 0x2e, 0xae, - 0xbf, 0xb3, 0x58, 0x07, 0x91, 0x52, 0x7c, 0x2c, 0xdc, 0xfb, 0xb9, 0x7f, 0x0f, 0x16, 0x67, 0xb2, - 0xb8, 0x51, 0x7b, 0x5f, 0xbf, 0xcd, 0x7d, 0xd8, 0xbb, 0x78, 0x0f, 0x14, 0xe4, 0xdd, 0x75, 0xb5, - 0xcf, 0xbc, 0xb0, 0xcb, 0x82, 0x02, 0x76, 0x34, 0xb4, 0xf9, 0xe3, 0x05, 0x05, 0x4b, 0xca, 0x98, - 0x2d, 0x3e, 0xba, 0x1a, 0x64, 0x33, 0x66, 0x0d, 0xc2, 0xf7, 0x24, 0x0c, 0x43, 0x66, 0x1e, 0xbc, - 0x87, 0x07, 0x1d, 0xe4, 0xa5, 0x9a, 0xb8, 0xcc, 0x03, 0xdd, 0xfe, 0xd7, 0x6f, 0x2b, 0xae, 0xdc, - 0xf3, 0x91, 0xbb, 0x03, 0xa2, 0x3a, 0x48, 0x99, 0x18, 0xeb, 0xc9, 0x9b, 0x37, 0x4b, 0x8a, 0x74, - 0x5a, 0x3b, 0x5e, 0x95, 0xda, 0xe5, 0xda, 0xf6, 0xb6, 0x3f, 0x95, 0x3c, 0x21, 0x80, 0xf4, 0x25, - 0xcf, 0x98, 0x2c, 0xb5, 0x7b, 0xee, 0xb7, 0x58, 0xdb, 0xdb, 0x5f, 0x61, 0xd6, 0x7e, 0xca, 0x34, - 0x11, 0x16, 0xbe, 0xde, 0x10, 0xc0, 0x03, 0x1b, 0xc2, 0xbb, 0xc7, 0x55, 0x16, 0x02, 0x65, 0x28, - 0xe4, 0x06, 0xe2, 0x37, 0xa8, 0x82, 0xa2, 0x03, 0xad, 0x0b, 0x7e, 0x5d, 0x6a, 0xe6, 0x52, 0x9e, - 0x40, 0xea, 0x70, 0x8b, 0xbf, 0xfe, 0x05, 0x4f, 0xc2, 0xa6, 0x6f, 0x52, 0xc0, 0x69, 0x14, 0x63, - 0xfc, 0x7e, 0xe9, 0x7a, 0x20, 0xb0, 0xca, 0x6c, 0x11, 0x4c, 0xa3, 0xb4, 0x64, 0xfb, 0x23, 0x59, - 0xb8, 0xe8, 0x81, 0x06, 0xff, 0x74, 0x87, 0x05, 0xf1, 0x84, 0xa7, 0x49, 0xc1, 0x44, 0x15, 0xf7, - 0xbe, 0xde, 0xde, 0xf6, 0x00, 0x60, 0x96, 0xc9, 0x29, 0xeb, 0xe1, 0x37, 0xf7, 0x51, 0xe6, 0xab, - 0xfe, 0xe6, 0x2d, 0x15, 0x48, 0x50, 0x20, 0x3b, 0x0b, 0xbc, 0xf6, 0x25, 0xec, 0xab, 0x88, 0xa5, - 0x4c, 0x70, 0x32, 0x47, 0xbe, 0x41, 0x70, 0x6a, 0xcd, 0x4d, 0xe3, 0x07, 0xf5, 0xf5, 0x57, 0xf9, - 0xcd, 0xe6, 0xc5, 0x57, 0x35, 0x1a, 0xfd, 0xf9, 0xb7, 0xfb, 0xe5, 0xb7, 0x39, 0x71, 0xab, 0x37, - 0xcc, 0xf5, 0x9c, 0x24, 0x87, 0x99, 0xf7, 0xe7, 0xe3, 0x56, 0x48, 0x58, 0x15, 0x17, 0xe4, 0x6b, - 0xcd, 0x8c, 0x05, 0x97, 0x21, 0x92, 0xcb, 0x47, 0xc4, 0x2c, 0xca, 0xe1, 0x90, 0x24, 0x36, 0x34, - 0xe5, 0xcd, 0xad, 0xcb, 0xb2, 0xee, 0xb2, 0x7c, 0xde, 0x65, 0xba, 0xd5, 0x83, 0x93, 0xe7, 0xcb, - 0x3a, 0xeb, 0x2f, 0x80, 0x43, 0x05, 0xa9, 0x98, 0x6a, 0xa8, 0x5f, 0x37, 0x22, 0x3d, 0x5f, 0x00, - 0xa0, 0x79, 0x1a, 0xc5, 0xec, 0x8a, 0x6b, 0xa4, 0xdf, 0x7c, 0xf5, 0x18, 0xb5, 0x9e, 0x3b, 0x46, - 0x74, 0xbe, 0x72, 0x66, 0x21, 0x9b, 0xf7, 0x36, 0x67, 0x35, 0x2e, 0x6d, 0xe9, 0x87, 0x07, 0xe3, - 0xd2, 0x16, 0xd0, 0xd6, 0xb8, 0x58, 0xf1, 0x74, 0xff, 0x91, 0x62, 0x5c, 0xe4, 0xa5, 0x65, 0x98, - 0xbe, 0xcb, 0xa1, 0x86, 0xa2, 0x21, 0x74, 0x10, 0xb0, 0x43, 0x3d, 0xf0, 0x64, 0x6b, 0xab, 0x7d, - 0xae, 0x47, 0x0d, 0x85, 0xd9, 0x26, 0x97, 0xfa, 0xed, 0x5d, 0x84, 0xce, 0xd8, 0x08, 0x57, 0x58, - 0xe5, 0xeb, 0xf5, 0xc0, 0x96, 0x3e, 0xa7, 0x32, 0x4a, 0xfe, 0x39, 0xc4, 0x43, 0x09, 0x85, 0xc2, - 0xba, 0x2f, 0x2c, 0xe9, 0x4d, 0x79, 0x06, 0x97, 0xc4, 0x7a, 0xc2, 0x8a, 0x98, 0xe2, 0xb9, 0x5c, - 0x5f, 0x47, 0xc7, 0x01, 0x7b, 0xf4, 0xbc, 0xf9, 0x3d, 0x9a, 0x46, 0x0b, 0x05, 0x4f, 0x04, 0x23, - 0x75, 0x27, 0x40, 0x05, 0x9c, 0xee, 0x24, 0xb8, 0x96, 0xc9, 0x5d, 0x2d, 0x0b, 0x02, 0xe5, 0xa3, - 0x24, 0xe9, 0x4f, 0x01, 0xe3, 0x33, 0xae, 0x00, 0x6a, 0x56, 0xb8, 0x14, 0xdd, 0xa4, 0xbe, 0x0b, - 0x85, 0xe3, 0xfe, 0x98, 0xe9, 0x2f, 0xae, 0x37, 0x7f, 0x5e, 0x8e, 0x15, 0x85, 0x2c, 0xc0, 0x3d, - 0x90, 0x43, 0xc6, 0xc8, 0x94, 0x05, 0xa9, 0x1c, 0xbb, 0xb4, 0x8f, 0xeb, 0xa4, 0x8a, 0x17, 0x4a, - 0x1f, 0x19, 0xf1, 0x94, 0x99, 0x30, 0xa0, 0x99, 0x41, 0xc9, 0xa2, 0x67, 0xd5, 0xba, 0x1c, 0x11, - 0xd8, 0x38, 0xe2, 0xe3, 0xb2, 0x88, 0x0c, 0x40, 0x36, 0x0c, 0x32, 0x8a, 0x38, 0xd6, 0xfc, 0xff, - 0x88, 0x53, 0x11, 0xcb, 0x2c, 0x07, 0x9c, 0x18, 0xc9, 0xa3, 0x31, 0x23, 0x49, 0xa4, 0xa3, 0x2d, - 0xa8, 0xdc, 0x2b, 0x98, 0x0e, 0x81, 0x07, 0x14, 0x0d, 0xec, 0xd1, 0x30, 0xac, 0x4a, 0x3e, 0x14, - 0x6d, 0xa3, 0x2f, 0xc8, 0x0b, 0xa9, 0x65, 0x2c, 0xd3, 0x37, 0x6f, 0x5c, 0xd3, 0xe4, 0x76, 0x7c, - 0xd7, 0x14, 0xf4, 0x10, 0x25, 0xd2, 0xa1, 0x96, 0x05, 0x68, 0xc5, 0x26, 0x76, 0xaa, 0x59, 0x86, - 0x81, 0xc7, 0xa7, 0x39, 0xf5, 0xa0, 0x28, 0x56, 0x62, 0xb0, 0x3f, 0xcb, 0xc1, 0xe1, 0xdf, 0x40, - 0x3f, 0xf9, 0x24, 0x13, 0x16, 0x90, 0x41, 0xca, 0x22, 0xc5, 0x08, 0x00, 0x01, 0x04, 0xbf, 0x3a, - 0xeb, 0x1f, 0x91, 0xd3, 0x01, 0xb8, 0xe4, 0xd7, 0x34, 0xaa, 0xba, 0x46, 0xdf, 0x68, 0xf3, 0x3c, - 0x94, 0x32, 0x0c, 0x78, 0xa1, 0xc9, 0x2c, 0x9b, 0x9b, 0x82, 0xd6, 0xf0, 0x31, 0x0f, 0x5b, 0xd4, - 0xdf, 0x6a, 0x79, 0x73, 0xa7, 0xd3, 0xac, 0x7a, 0x78, 0x47, 0xe9, 0x3b, 0x68, 0xe9, 0xff, 0xe0, - 0x19, 0xf6, 0x7d, 0x52, 0x16, 0x29, 0xd0, 0x04, 0x97, 0x82, 0x58, 0xc1, 0x49, 0xdc, 0x07, 0x41, - 0x23, 0xd0, 0x69, 0xda, 0x91, 0x04, 0xb3, 0x0e, 0xc9, 0x40, 0xcb, 0x70, 0x8c, 0xa0, 0x06, 0x76, - 0x3b, 0x50, 0xae, 0x32, 0x87, 0x20, 0xdd, 0xf1, 0xe9, 0x0f, 0x45, 0x89, 0x25, 0xfc, 0x70, 0x44, - 0x09, 0xcc, 0x2a, 0x13, 0x09, 0x5f, 0x72, 0xa9, 0x70, 0xa8, 0x48, 0xf8, 0x94, 0xc4, 0x29, 0x74, - 0x23, 0x38, 0x26, 0x12, 0xe0, 0x98, 0xd5, 0xd7, 0x26, 0x2c, 0xcd, 0x0f, 0x69, 0xd7, 0xe9, 0x00, - 0xdb, 0x34, 0x64, 0xc3, 0x1e, 0x28, 0xfb, 0x42, 0xc1, 0x6a, 0x9c, 0xf2, 0xf8, 0x26, 0xa4, 0x27, - 0x68, 0xf6, 0x63, 0xa7, 0x69, 0x3f, 0x80, 0x6b, 0xa0, 0xa2, 0xfb, 0xfc, 0x1e, 0x67, 0xb9, 0xe9, - 0x10, 0x37, 0x1d, 0x46, 0xf1, 0xcd, 0xe3, 0xbe, 0xda, 0x0e, 0x55, 0x5e, 0x67, 0x1c, 0x7c, 0x1c, - 0x46, 0x53, 0x46, 0xde, 0x10, 0x28, 0x15, 0x02, 0x2a, 0xda, 0xa3, 0xf0, 0xa4, 0x00, 0xbf, 0xac, - 0xa5, 0xc9, 0xae, 0x9d, 0x8b, 0x00, 0xdc, 0x32, 0x07, 0x60, 0x76, 0x61, 0xa9, 0xdd, 0xad, 0x76, - 0x10, 0x2d, 0x09, 0xbb, 0x05, 0x56, 0x23, 0x25, 0xab, 0x92, 0x05, 0x32, 0xed, 0xa5, 0x39, 0xa7, - 0xee, 0x21, 0xe2, 0x66, 0x3a, 0xff, 0x63, 0x7c, 0xe7, 0xe8, 0x2a, 0x16, 0x80, 0x15, 0x57, 0xc1, - 0xfa, 0xb9, 0x55, 0x66, 0xd0, 0x25, 0xae, 0x29, 0x0e, 0x84, 0x01, 0xa1, 0xee, 0xd0, 0xa4, 0x90, - 0x1a, 0xd9, 0x8f, 0x1e, 0x78, 0x7b, 0x28, 0xde, 0x31, 0x75, 0x89, 0xac, 0xd4, 0x24, 0x52, 0x55, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x58, 0x7f, 0x53, 0xdb, 0x3c, + 0x12, 0xfe, 0xdf, 0x9f, 0x42, 0xe8, 0x6e, 0x3a, 0xf6, 0xe0, 0x38, 0x84, 0xb4, 0xbc, 0x1c, 0xc4, + 0xe9, 0x41, 0x48, 0x81, 0x7b, 0x29, 0xe4, 0x1a, 0xa6, 0xcc, 0x4d, 0xaf, 0xf3, 0xbe, 0xc6, 0x56, + 0x12, 0x15, 0x5b, 0xf2, 0x59, 0x72, 0x02, 0x43, 0xf3, 0xdd, 0x6f, 0x57, 0x72, 0x42, 0x1c, 0x48, + 0x7b, 0xd7, 0x61, 0x3a, 0x53, 0x6c, 0x79, 0xb5, 0xbb, 0x7a, 0xf6, 0xd9, 0x1f, 0x4a, 0x67, 0xeb, + 0xe4, 0xaa, 0x77, 0xfd, 0xaf, 0x41, 0x9f, 0x4c, 0x74, 0x96, 0x76, 0x3b, 0xf8, 0x3f, 0x49, 0x23, + 0x31, 0x0e, 0x29, 0x13, 0x14, 0xde, 0x59, 0x94, 0x74, 0x3b, 0x19, 0xd3, 0x11, 0x89, 0x27, 0x51, + 0xa1, 0x98, 0x0e, 0x69, 0xa9, 0x47, 0x8d, 0x7d, 0x5a, 0xad, 0x3a, 0xb1, 0x14, 0x9a, 0x09, 0x58, + 0x9e, 0xf1, 0x44, 0x4f, 0xc2, 0x84, 0x4d, 0x79, 0xcc, 0x1a, 0xe6, 0xc5, 0xe7, 0x82, 0x6b, 0x1e, + 0xa5, 0x0d, 0x15, 0x47, 0x29, 0x0b, 0x5b, 0x7e, 0x16, 0xdd, 0xf3, 0xac, 0xcc, 0x96, 0xef, 0xa5, + 0x62, 0x85, 0x79, 0x89, 0x6e, 0xe1, 0x5d, 0x48, 0x4a, 0x1c, 0x11, 0x65, 0x2c, 0xa4, 0x53, 0xce, + 0x66, 0xb9, 0x2c, 0x34, 0x58, 0xd1, 0x5c, 0xa7, 0xac, 0x7b, 0xc3, 0x3f, 0x70, 0x32, 0x64, 0x5a, + 0x73, 0x31, 0x56, 0x9d, 0xa6, 0x5d, 0xec, 0xa8, 0xb8, 0xe0, 0xb9, 0xee, 0x3a, 0xd3, 0xa8, 0x20, + 0xa9, 0x8c, 0x79, 0xee, 0x27, 0x61, 0x22, 0xe3, 0x32, 0x03, 0x87, 0x7c, 0x58, 0x08, 0xb7, 0x5a, + 0x3e, 0xa8, 0x17, 0x17, 0x52, 0xe6, 0x2a, 0xdc, 0xf1, 0xf3, 0x82, 0x0d, 0xe1, 0x75, 0x38, 0x3c, + 0x3f, 0x09, 0x29, 0x3d, 0x1c, 0x95, 0x22, 0xd6, 0x5c, 0x0a, 0x32, 0x3e, 0x4f, 0x5c, 0xed, 0x3d, + 0x16, 0x4c, 0x97, 0x85, 0x20, 0x49, 0x30, 0x66, 0xba, 0x9f, 0x32, 0xd4, 0x72, 0xfc, 0x60, 0x3e, + 0xcd, 0x97, 0xa2, 0x71, 0xbf, 0x26, 0x19, 0x17, 0x2c, 0xd2, 0xac, 0x12, 0xae, 0x09, 0x9e, 0xb9, + 0xde, 0xe3, 0x8c, 0x8b, 0x44, 0xce, 0x02, 0x99, 0x33, 0xe1, 0xd2, 0x89, 0xd6, 0xb9, 0x3a, 0x68, + 0x36, 0xb3, 0x2c, 0xb8, 0x13, 0x32, 0x98, 0xa5, 0x0c, 0x0d, 0x35, 0x47, 0xa0, 0xa0, 0x2c, 0x98, + 0x6a, 0xaa, 0xea, 0x74, 0xcd, 0xbf, 0xcc, 0xf8, 0x88, 0x37, 0x16, 0xaf, 0x74, 0x45, 0xe7, 0xf1, + 0xba, 0xce, 0xe5, 0x26, 0xea, 0xd3, 0x3f, 0x14, 0x4b, 0x47, 0xab, 0xd2, 0x97, 0x20, 0x0d, 0xd1, + 0x51, 0x9a, 0xe8, 0xd0, 0x05, 0x34, 0xde, 0x1b, 0x17, 0xc0, 0x03, 0xba, 0x6d, 0xc0, 0x3a, 0xa0, + 0xd4, 0xdb, 0xa6, 0xcd, 0x6f, 0x4a, 0x8a, 0xa6, 0x60, 0x9a, 0xfa, 0x2c, 0x44, 0x20, 0x28, 0x22, + 0x46, 0xbd, 0x43, 0x16, 0x24, 0x5c, 0x61, 0x60, 0x92, 0x70, 0x6b, 0xc7, 0x67, 0x81, 0x66, 0xf7, + 0xba, 0xb7, 0x08, 0x36, 0xc2, 0x28, 0xc0, 0x70, 0x10, 0x04, 0xd4, 0x1f, 0x31, 0x1d, 0x4f, 0xe0, + 0xf0, 0x81, 0x9e, 0x80, 0x53, 0x3a, 0xec, 0xea, 0x00, 0x95, 0xba, 0xde, 0xd3, 0xca, 0xd5, 0xed, + 0x37, 0x16, 0xeb, 0x20, 0x52, 0x8a, 0x8f, 0x85, 0xfb, 0x38, 0xf7, 0x1f, 0xc1, 0xe2, 0x4c, 0x16, + 0x77, 0xea, 0xe0, 0xcb, 0xd7, 0xb9, 0x0f, 0x7b, 0x17, 0xef, 0x81, 0x82, 0xb8, 0xbb, 0xae, 0xf6, + 0x99, 0x17, 0x76, 0x59, 0x50, 0xc0, 0x8e, 0x86, 0x36, 0x7f, 0xbc, 0xa0, 0x60, 0x49, 0x19, 0xb3, + 0xc5, 0x47, 0x57, 0x83, 0x6c, 0xc6, 0xac, 0x41, 0xf8, 0x9e, 0x84, 0x61, 0xc8, 0xcc, 0x83, 0xf7, + 0xfd, 0xbb, 0x0e, 0xf2, 0x52, 0x4d, 0x5c, 0xe6, 0x81, 0x6e, 0xff, 0xcb, 0xd7, 0x15, 0x57, 0x1e, + 0xf9, 0xc8, 0xdd, 0x01, 0x51, 0x1d, 0xa4, 0x4c, 0x8c, 0xf5, 0xe4, 0xcd, 0x9b, 0x25, 0x45, 0x3a, + 0xad, 0x1d, 0xaf, 0x0a, 0xed, 0x72, 0x6d, 0x7b, 0xdb, 0x9f, 0x4a, 0x9e, 0x10, 0x40, 0xfa, 0x9a, + 0x67, 0x4c, 0x96, 0xda, 0xbd, 0xf4, 0x5b, 0xac, 0xed, 0x1d, 0xae, 0x30, 0xeb, 0x30, 0x65, 0x9a, + 0x08, 0x0b, 0x5f, 0x6f, 0x08, 0xe0, 0x81, 0x0d, 0xe1, 0x3d, 0xe2, 0x2a, 0x0b, 0x81, 0x32, 0x14, + 0x62, 0x03, 0xe7, 0x37, 0xa8, 0x82, 0xa2, 0x23, 0xad, 0x0b, 0x7e, 0x5b, 0x6a, 0xe6, 0x52, 0x9e, + 0x40, 0xe8, 0x70, 0x8b, 0xbf, 0xfe, 0x05, 0x33, 0x61, 0xd3, 0x37, 0x29, 0x20, 0x1b, 0xc5, 0x18, + 0xbf, 0x5f, 0xbb, 0x1e, 0x08, 0xac, 0x32, 0x5b, 0x04, 0xd3, 0x28, 0x2d, 0xd9, 0xe1, 0x48, 0x16, + 0x2e, 0x7a, 0xa0, 0xc1, 0x3f, 0xdd, 0x61, 0x41, 0x3c, 0xe1, 0x69, 0x52, 0x30, 0x51, 0x9d, 0xfb, + 0x50, 0x6f, 0x6f, 0x7b, 0x00, 0x30, 0xcb, 0xe4, 0x94, 0xf5, 0xf0, 0x9b, 0xfb, 0x24, 0xf3, 0x45, + 0x7f, 0xf5, 0x96, 0x0a, 0x24, 0x28, 0x90, 0x9d, 0x05, 0x5e, 0x87, 0x12, 0xf6, 0x55, 0xc4, 0x52, + 0xe6, 0x70, 0x32, 0x47, 0xbe, 0xc1, 0xe1, 0xd4, 0x9a, 0x9b, 0xc6, 0x0f, 0xea, 0xeb, 0x2f, 0xf2, + 0xab, 0x8d, 0x8b, 0xaf, 0x6a, 0x34, 0xfa, 0xf3, 0xaf, 0x8f, 0xcb, 0x6f, 0x73, 0xe2, 0x56, 0x6f, + 0x18, 0xeb, 0x39, 0x49, 0x8e, 0x33, 0xef, 0xcf, 0xa7, 0xad, 0x10, 0xb0, 0xea, 0x5c, 0x10, 0xaf, + 0x35, 0x33, 0x16, 0x5c, 0x86, 0x48, 0x2e, 0x1f, 0x11, 0xb3, 0x28, 0x87, 0x24, 0x49, 0xec, 0xd1, + 0x94, 0x37, 0xb7, 0x2e, 0xcb, 0xba, 0xcb, 0xf2, 0x65, 0x97, 0xe9, 0x56, 0x0f, 0x32, 0xcf, 0x97, + 0x75, 0xd6, 0x5f, 0x01, 0x87, 0x0a, 0x52, 0x31, 0xd5, 0x50, 0xbf, 0x6e, 0x44, 0x7a, 0xbe, 0x00, + 0x40, 0xf3, 0x34, 0x8a, 0xd9, 0x0d, 0xd7, 0x48, 0xbf, 0xf9, 0x6a, 0x1a, 0xb5, 0x5e, 0x4a, 0x23, + 0x3a, 0x5f, 0xc9, 0x59, 0x88, 0xe6, 0xa3, 0x8d, 0x59, 0x8d, 0x4b, 0x5b, 0xfa, 0xfb, 0x77, 0xe3, + 0xd2, 0x16, 0xd0, 0xd6, 0xb8, 0x58, 0xf1, 0xf4, 0xf0, 0x89, 0x62, 0x5c, 0xe4, 0xa5, 0x65, 0x98, + 0x7e, 0xc8, 0xa1, 0x86, 0xa2, 0x21, 0x74, 0x10, 0xb0, 0x43, 0x3d, 0xf0, 0x64, 0x6b, 0xab, 0x7d, + 0xae, 0x9f, 0x1a, 0x0a, 0xb3, 0x0d, 0x2e, 0xf5, 0xdb, 0xbb, 0x08, 0x9d, 0xb1, 0x11, 0xae, 0xb0, + 0xca, 0xd7, 0xeb, 0x07, 0x5b, 0xfa, 0x9c, 0xca, 0x28, 0xf9, 0xc7, 0x10, 0x93, 0x12, 0x0a, 0x85, + 0x75, 0x5f, 0x58, 0xd2, 0x9b, 0xf2, 0x0c, 0x2e, 0x89, 0xf5, 0x80, 0x15, 0x31, 0xc5, 0xbc, 0x5c, + 0x5f, 0x47, 0xc7, 0x01, 0x7b, 0xf4, 0xbc, 0xf9, 0x2d, 0x9a, 0x46, 0x0b, 0x05, 0xcf, 0x04, 0x23, + 0xf5, 0x20, 0x40, 0x05, 0x64, 0x77, 0x12, 0xdc, 0xca, 0xe4, 0xa1, 0x16, 0x05, 0x81, 0xf2, 0x51, + 0x92, 0xf4, 0xa7, 0x80, 0xf1, 0x05, 0x57, 0x00, 0x35, 0x2b, 0x5c, 0x8a, 0x6e, 0x52, 0xdf, 0x85, + 0xc2, 0xf1, 0x78, 0xca, 0xf4, 0x67, 0xd7, 0x9b, 0xbf, 0x2c, 0xc7, 0x8a, 0x42, 0x16, 0xe0, 0x1e, + 0xc8, 0x21, 0x63, 0x64, 0xca, 0x82, 0x54, 0x8e, 0x5d, 0xda, 0xc7, 0x75, 0x52, 0x9d, 0x17, 0x4a, + 0x1f, 0x19, 0xf1, 0x94, 0x99, 0x63, 0x40, 0x33, 0x83, 0x92, 0x45, 0x2f, 0xaa, 0x75, 0x39, 0x22, + 0xb0, 0x71, 0xc4, 0xc7, 0x65, 0x11, 0x19, 0x80, 0xec, 0x31, 0xc8, 0x28, 0xe2, 0x58, 0xf3, 0xff, + 0x2d, 0xce, 0x45, 0x2c, 0xb3, 0x1c, 0x70, 0x62, 0x24, 0x8f, 0xc6, 0x8c, 0x24, 0x91, 0x8e, 0xb6, + 0xa0, 0x72, 0xaf, 0x60, 0x3a, 0x04, 0x1e, 0x50, 0x34, 0x70, 0x40, 0xc3, 0xb0, 0x2a, 0xf9, 0x50, + 0xb4, 0x8d, 0xbe, 0x20, 0x2f, 0xa4, 0x96, 0xb1, 0x4c, 0xdf, 0xbc, 0x71, 0x4d, 0x93, 0xdb, 0xf1, + 0x5d, 0x53, 0xd0, 0x43, 0x94, 0x48, 0x87, 0x5a, 0x16, 0xa0, 0x15, 0x9b, 0xd8, 0xb9, 0x66, 0x19, + 0x1e, 0x3c, 0x3e, 0xcf, 0xa9, 0x07, 0x45, 0xb1, 0x12, 0x83, 0xfd, 0x59, 0x0e, 0x0e, 0x7f, 0x00, + 0xfd, 0xe4, 0xa3, 0x4c, 0x58, 0x40, 0x06, 0x29, 0x8b, 0x14, 0x23, 0x00, 0x04, 0x10, 0xfc, 0xe6, + 0xa2, 0x7f, 0x42, 0xce, 0x07, 0xe0, 0x92, 0x5f, 0xd3, 0xa8, 0xea, 0x1a, 0x7d, 0xa3, 0xcd, 0xf3, + 0x50, 0xca, 0x30, 0xe0, 0x07, 0x4d, 0x66, 0xd9, 0xdc, 0x14, 0xb4, 0x86, 0xf7, 0x79, 0xd8, 0xa2, + 0xfe, 0x56, 0xcb, 0x9b, 0x3b, 0x9d, 0x66, 0xd5, 0xc3, 0x3b, 0x4a, 0x3f, 0x40, 0x4b, 0xff, 0x3b, + 0xcf, 0xb0, 0xef, 0x93, 0xb2, 0x48, 0x81, 0x26, 0xb8, 0x14, 0xc4, 0x0a, 0x32, 0xf1, 0x10, 0x04, + 0x8d, 0x40, 0xa7, 0x69, 0x47, 0x12, 0x8c, 0x3a, 0x04, 0x03, 0x2d, 0x43, 0x1a, 0x41, 0x0d, 0xec, + 0x76, 0xa0, 0x5c, 0x65, 0x0e, 0x41, 0xba, 0xe3, 0xd3, 0x1f, 0x8a, 0x12, 0x4b, 0xf8, 0xe1, 0x88, + 0x12, 0x98, 0x55, 0x26, 0x12, 0xbe, 0xe4, 0x52, 0xe1, 0x50, 0x91, 0xf0, 0x29, 0x89, 0x53, 0xe8, + 0x46, 0x90, 0x26, 0x12, 0xe0, 0x98, 0xd5, 0xd7, 0x26, 0x2c, 0xcd, 0x8f, 0x69, 0xd7, 0xe9, 0x00, + 0xdb, 0x34, 0x44, 0xc3, 0x26, 0x94, 0x7d, 0xa1, 0x60, 0x35, 0x4e, 0x79, 0x7c, 0x17, 0xd2, 0x33, + 0x34, 0xfb, 0xbe, 0xd3, 0xb4, 0x1f, 0xc0, 0x35, 0x50, 0xd1, 0x7d, 0x79, 0x8f, 0xb3, 0xdc, 0x74, + 0x8c, 0x9b, 0x8e, 0xa3, 0xf8, 0xee, 0x69, 0x5f, 0x6d, 0x87, 0x2a, 0x6f, 0x33, 0x0e, 0x3e, 0x0e, + 0xa3, 0x29, 0x23, 0x6f, 0x08, 0x94, 0x0a, 0x01, 0x15, 0xed, 0x49, 0x78, 0x52, 0x80, 0x5f, 0xd6, + 0xd2, 0x64, 0xd7, 0xce, 0x45, 0x00, 0x6e, 0x99, 0x03, 0x30, 0xbb, 0xb0, 0xd4, 0xee, 0x56, 0x3b, + 0x88, 0x96, 0x84, 0xdd, 0x03, 0xab, 0x91, 0x92, 0x55, 0xc9, 0x02, 0x99, 0xf6, 0xd2, 0x9c, 0x53, + 0xf7, 0x10, 0x71, 0x33, 0x9d, 0xff, 0xe9, 0x7c, 0x97, 0xe8, 0x2a, 0x16, 0x80, 0x15, 0x57, 0xc1, + 0xfa, 0xa5, 0x55, 0x66, 0xd0, 0x25, 0xae, 0x29, 0x0e, 0x84, 0x01, 0xa1, 0x1e, 0xd0, 0xa4, 0x90, + 0x1a, 0xd9, 0x8f, 0x1e, 0x78, 0x07, 0x28, 0xde, 0x31, 0x75, 0x89, 0xac, 0xd4, 0x24, 0x52, 0x55, 0xa4, 0xc5, 0xb0, 0x87, 0x8f, 0xcb, 0x02, 0x14, 0xd2, 0xf6, 0x2e, 0x35, 0x76, 0x16, 0x66, 0x72, - 0x48, 0x09, 0x3c, 0x24, 0x4f, 0xb5, 0x2d, 0xbe, 0x3c, 0x6a, 0x1a, 0xd4, 0x34, 0xbd, 0x6f, 0x5b, - 0x4d, 0x43, 0x0d, 0xe7, 0x26, 0x06, 0x46, 0x13, 0x68, 0x67, 0x08, 0x6b, 0xa4, 0xc9, 0x4e, 0x60, - 0xfe, 0x11, 0xa0, 0x0a, 0x39, 0x3a, 0xe9, 0x0d, 0x6a, 0xce, 0x56, 0xea, 0x4e, 0x77, 0x68, 0x65, - 0x49, 0x94, 0xd9, 0x35, 0x2b, 0xe8, 0x82, 0x1f, 0x40, 0xad, 0x8c, 0x8b, 0x90, 0xee, 0x18, 0x73, - 0x21, 0xdd, 0x7d, 0xf7, 0x8e, 0x92, 0x82, 0xfd, 0xb7, 0xe4, 0x30, 0xa1, 0x74, 0x49, 0x40, 0xd6, - 0xf4, 0xb4, 0x5e, 0x49, 0xcf, 0xee, 0x2b, 0xe9, 0x69, 0xff, 0x94, 0x9e, 0x15, 0x28, 0xc7, 0x30, - 0xf4, 0xce, 0xa2, 0xbb, 0x3d, 0x67, 0x05, 0x34, 0xab, 0xfb, 0xf8, 0xa7, 0x31, 0x73, 0xea, 0x7a, - 0x5e, 0x09, 0xb3, 0xe3, 0x57, 0xc2, 0xec, 0xf8, 0xe7, 0x31, 0x73, 0x2a, 0xd0, 0xe0, 0x64, 0xc3, - 0x39, 0x04, 0x29, 0x75, 0xb3, 0xf7, 0x04, 0xb7, 0xe1, 0xff, 0x80, 0x9b, 0xf3, 0xa2, 0xa3, 0x95, - 0x9e, 0xd6, 0x2b, 0xe9, 0xd9, 0x7d, 0x25, 0x3d, 0xed, 0x9f, 0xd3, 0x83, 0x00, 0x65, 0x47, 0xe7, - 0x43, 0x02, 0x0d, 0x1a, 0x6e, 0x47, 0x6a, 0x71, 0x74, 0x6d, 0xa1, 0xc1, 0x53, 0x2b, 0x24, 0x41, - 0x01, 0x7b, 0x70, 0xab, 0xa6, 0x53, 0xd9, 0x76, 0x6a, 0xe5, 0xa6, 0xaa, 0x0d, 0x9f, 0x9e, 0x54, - 0x19, 0x62, 0x5a, 0x6a, 0x8a, 0xfb, 0x7b, 0x29, 0x87, 0xde, 0x07, 0x25, 0x62, 0x8f, 0x74, 0x54, - 0x1e, 0x89, 0xa5, 0x97, 0x3c, 0x87, 0x3e, 0x70, 0xfe, 0x58, 0xd4, 0x58, 0x02, 0x9d, 0x08, 0x04, - 0x8c, 0x83, 0x55, 0xb9, 0x35, 0xad, 0x9e, 0x91, 0x83, 0x38, 0x46, 0x47, 0x07, 0x92, 0x0b, 0x6d, - 0x2a, 0xad, 0x73, 0x30, 0x20, 0x58, 0x1e, 0x9f, 0xf5, 0xfd, 0x60, 0xb0, 0xb1, 0x3e, 0x5a, 0x87, - 0x0f, 0x9e, 0x96, 0x45, 0x73, 0xdc, 0x4e, 0x78, 0x02, 0xb6, 0x06, 0x46, 0x6a, 0x8f, 0xd4, 0xb6, - 0xc7, 0x13, 0x16, 0xdf, 0x5c, 0xcb, 0xdb, 0xa5, 0x8a, 0x13, 0x5b, 0x00, 0xd1, 0x91, 0x45, 0xb1, - 0x7c, 0xea, 0x0c, 0x5e, 0x25, 0xbd, 0x97, 0xaa, 0x6b, 0xa5, 0x6c, 0x60, 0x33, 0xb5, 0x52, 0x5d, - 0x41, 0xa9, 0x86, 0x81, 0x01, 0xb2, 0xe8, 0x06, 0xf7, 0x1f, 0xfc, 0xf7, 0xed, 0xb9, 0xf7, 0x00, - 0x3d, 0x83, 0x98, 0xeb, 0x79, 0x48, 0xfb, 0xc6, 0x04, 0x58, 0x80, 0x44, 0x07, 0xe4, 0x83, 0xf9, - 0x05, 0x21, 0x02, 0x08, 0x0b, 0xb5, 0x70, 0x6b, 0x05, 0x31, 0x62, 0x5a, 0x19, 0x5e, 0x6b, 0x04, - 0x4b, 0xf7, 0xea, 0x24, 0x3a, 0xe8, 0x6d, 0x20, 0xd1, 0xed, 0x82, 0x45, 0xad, 0x05, 0x8b, 0x5a, - 0xed, 0x35, 0x12, 0x41, 0xe8, 0x18, 0xa0, 0xc2, 0xc4, 0x9a, 0xcb, 0xc1, 0x42, 0x27, 0x34, 0xf8, - 0x8e, 0xbd, 0x06, 0x10, 0x3b, 0xed, 0x02, 0x15, 0x31, 0xd5, 0x8b, 0x4c, 0xe3, 0x87, 0x68, 0x84, - 0xf3, 0xd0, 0xb5, 0x94, 0x90, 0x50, 0x2b, 0xbb, 0xbe, 0xa7, 0x45, 0xbb, 0x47, 0x5c, 0xad, 0x90, - 0x63, 0x4d, 0xcc, 0xa9, 0xe4, 0x20, 0x7b, 0x07, 0x29, 0x94, 0x4c, 0xb5, 0x49, 0x11, 0xf4, 0xaa, - 0x73, 0x36, 0x05, 0x6b, 0x2e, 0xb6, 0xd0, 0x82, 0xc1, 0x88, 0x98, 0xc1, 0x48, 0xcb, 0x12, 0x6f, - 0xb9, 0x03, 0xa7, 0x25, 0x13, 0xc2, 0x22, 0xb0, 0xe7, 0xe9, 0x8a, 0x6c, 0x05, 0x98, 0xf9, 0x94, - 0xad, 0x51, 0xb5, 0x7f, 0x9b, 0xb3, 0x82, 0xe3, 0x2f, 0x15, 0x40, 0x7a, 0x43, 0xd0, 0x23, 0x7b, - 0x35, 0xb1, 0xd8, 0xab, 0x94, 0xb1, 0xfc, 0x07, 0x8c, 0xba, 0x1a, 0xda, 0xd4, 0x75, 0x78, 0xd7, - 0xe9, 0x81, 0x5d, 0x9c, 0x94, 0xc8, 0x0c, 0x6e, 0x04, 0x4b, 0xd4, 0xa6, 0x1c, 0x72, 0xce, 0x95, - 0x2a, 0x99, 0x0a, 0x4c, 0x92, 0x8f, 0xec, 0x50, 0xc0, 0x84, 0xb1, 0xc4, 0x47, 0xd6, 0x18, 0x57, - 0x04, 0xbb, 0x3b, 0x0e, 0x27, 0xb1, 0x2c, 0x20, 0x5c, 0x9d, 0xde, 0xf9, 0x84, 0x0b, 0xfc, 0x41, - 0x45, 0x31, 0x45, 0x72, 0x39, 0x03, 0x2c, 0x70, 0x00, 0x2f, 0x33, 0x13, 0x7d, 0xd0, 0x69, 0x72, - 0x33, 0xa4, 0xd9, 0x11, 0x0f, 0xae, 0xad, 0x09, 0x35, 0x51, 0x5d, 0x41, 0xaa, 0x53, 0xa4, 0xd1, - 0x67, 0xb8, 0xc9, 0x6a, 0x66, 0x67, 0x1c, 0xde, 0xb5, 0x03, 0xbd, 0x21, 0x38, 0xc3, 0x01, 0x5f, - 0x11, 0x89, 0xe8, 0xf6, 0x87, 0x83, 0xc6, 0xf9, 0xc5, 0x95, 0xf1, 0xec, 0x77, 0x88, 0x97, 0x2c, - 0x6e, 0x67, 0xe8, 0x19, 0xfa, 0x59, 0x2a, 0xf4, 0x29, 0x22, 0x85, 0xd1, 0xf6, 0x03, 0x97, 0x10, - 0x09, 0x70, 0xcb, 0xe9, 0xdb, 0xe0, 0xac, 0x07, 0x3f, 0x80, 0xf0, 0x73, 0xdf, 0x42, 0x78, 0x12, - 0x15, 0xc9, 0x2c, 0x82, 0xba, 0xf1, 0xe9, 0xa0, 0xb7, 0xdc, 0xe2, 0x3c, 0xad, 0x03, 0x9f, 0xe1, - 0xbb, 0xdd, 0x71, 0x16, 0xc1, 0xfd, 0x75, 0xc8, 0x98, 0x58, 0xcb, 0x7a, 0x91, 0xf2, 0x04, 0xd3, - 0x2e, 0x6a, 0x09, 0x37, 0x33, 0xa2, 0x63, 0xc6, 0x5a, 0x04, 0x0c, 0x06, 0xe0, 0x0a, 0xb0, 0x3e, - 0xde, 0x62, 0xb1, 0x13, 0x5d, 0x82, 0x2d, 0x0b, 0x57, 0xed, 0x64, 0xf4, 0x2f, 0x4f, 0x9e, 0x3b, - 0x1a, 0xa8, 0xdf, 0xd9, 0xc4, 0xde, 0xbf, 0x03, 0xbd, 0x0f, 0x7b, 0x5b, 0xf6, 0xea, 0xf0, 0xe5, - 0x6d, 0x1b, 0x26, 0x57, 0xbc, 0xe3, 0x40, 0xdf, 0x03, 0x5c, 0x36, 0x6d, 0xc2, 0x8a, 0x06, 0xf9, - 0x68, 0xef, 0x36, 0x06, 0x17, 0xfd, 0x4d, 0x42, 0xef, 0x69, 0xd7, 0xc8, 0x1c, 0xb1, 0xf2, 0x76, - 0x93, 0xcc, 0xaf, 0xb4, 0xfb, 0xfb, 0xe9, 0x65, 0xe3, 0x4b, 0x7f, 0xa3, 0x7f, 0x2d, 0x38, 0xa7, - 0x17, 0x29, 0x70, 0xff, 0xb6, 0x61, 0x2d, 0x1e, 0xdb, 0x09, 0x66, 0x93, 0xfc, 0x07, 0x70, 0xed, - 0x5f, 0x25, 0x17, 0x10, 0x4e, 0xe3, 0x88, 0x8f, 0x1b, 0x17, 0xb1, 0x8e, 0x20, 0xa6, 0xcb, 0x06, - 0x80, 0xf3, 0x92, 0xb7, 0x6f, 0x69, 0x77, 0xb1, 0xcd, 0xd8, 0x59, 0x39, 0xbb, 0x6b, 0x0e, 0x01, - 0xa2, 0x43, 0x56, 0x8c, 0x7f, 0x7d, 0x8b, 0x2a, 0x57, 0x04, 0xd7, 0xe4, 0xde, 0xd1, 0xee, 0xe5, - 0x8c, 0xa7, 0x7c, 0x3c, 0xd1, 0x67, 0x50, 0x8c, 0xad, 0x56, 0xe7, 0x85, 0x22, 0x72, 0x55, 0xb7, - 0xfb, 0xb4, 0x5c, 0x5d, 0x5d, 0x42, 0xf8, 0x60, 0x73, 0xa7, 0xb5, 0xa1, 0xb0, 0x3c, 0xb2, 0x07, - 0x2f, 0x1b, 0x3f, 0xb8, 0x03, 0x3d, 0xbd, 0xce, 0x38, 0xff, 0xdf, 0x7d, 0xa6, 0x89, 0x97, 0x35, - 0xf8, 0x83, 0x17, 0x3a, 0xbc, 0xdd, 0xe1, 0xcf, 0xd0, 0x7f, 0x01, 0x1e, 0x24, 0xc0, 0x5a, 0x96, + 0x08, 0x09, 0x3c, 0x24, 0xcf, 0xb5, 0x2d, 0xbe, 0x3c, 0x69, 0x1a, 0xd4, 0x34, 0xed, 0xb5, 0xad, + 0xa6, 0xa1, 0x86, 0xbc, 0x89, 0x81, 0xd1, 0x04, 0xda, 0x19, 0xc2, 0x1a, 0x69, 0xb2, 0x13, 0x98, + 0x7f, 0x04, 0xa8, 0x42, 0x4e, 0xce, 0x7a, 0x83, 0x9a, 0xb3, 0x95, 0xba, 0xf3, 0x1d, 0x5a, 0x59, + 0x12, 0x65, 0x76, 0xcb, 0x0a, 0xba, 0xe0, 0x07, 0x50, 0x2b, 0xe3, 0x22, 0xa4, 0x3b, 0xc6, 0x5c, + 0x48, 0x77, 0xdf, 0xbd, 0xa3, 0xa4, 0x60, 0xff, 0x29, 0x39, 0x4c, 0x28, 0x5d, 0x12, 0x90, 0x35, + 0x3d, 0xad, 0x57, 0xd2, 0xb3, 0xfb, 0x4a, 0x7a, 0xda, 0xbf, 0xa4, 0x67, 0x05, 0xca, 0x31, 0x0c, + 0xbd, 0xb3, 0xe8, 0xe1, 0xc0, 0x59, 0x01, 0xcd, 0xea, 0x3e, 0xfd, 0x65, 0xcc, 0x9c, 0xba, 0x9e, + 0x57, 0xc2, 0xec, 0xf4, 0x95, 0x30, 0x3b, 0xfd, 0x75, 0xcc, 0x9c, 0x0a, 0x34, 0xc8, 0x6c, 0xc8, + 0x43, 0x90, 0x52, 0x77, 0x07, 0xcf, 0x70, 0x1b, 0xfe, 0x0f, 0xb8, 0x39, 0x3f, 0x74, 0xb4, 0xd2, + 0xd3, 0x7a, 0x25, 0x3d, 0xbb, 0xaf, 0xa4, 0xa7, 0xfd, 0x6b, 0x7a, 0x10, 0xa0, 0xec, 0xe4, 0x72, + 0x48, 0xa0, 0x41, 0xc3, 0xed, 0x48, 0x2d, 0x52, 0xd7, 0x16, 0x1a, 0xcc, 0x5a, 0x21, 0x09, 0x0a, + 0xd8, 0xc4, 0xad, 0x9a, 0x4e, 0x65, 0xdb, 0xa9, 0x95, 0x9b, 0xaa, 0x36, 0x7c, 0x7c, 0x56, 0x65, + 0x88, 0x69, 0xa9, 0x29, 0xee, 0xef, 0xa5, 0x1c, 0x7a, 0x1f, 0x94, 0x88, 0x03, 0xd2, 0x51, 0x79, + 0x24, 0x96, 0x5e, 0xf2, 0x1c, 0xfa, 0xc0, 0xe5, 0x53, 0x51, 0x63, 0x09, 0x74, 0x22, 0x10, 0x30, + 0x0e, 0x56, 0xe5, 0xd6, 0xb4, 0x7a, 0x46, 0x8e, 0xe2, 0x18, 0x1d, 0x1d, 0x48, 0x2e, 0xb4, 0xa9, + 0xb4, 0xce, 0xd1, 0x80, 0x60, 0x79, 0x7c, 0xd1, 0xf7, 0xa3, 0xc1, 0xc6, 0xfa, 0x68, 0x1d, 0x3e, + 0x7a, 0x5e, 0x16, 0x4d, 0xba, 0x9d, 0xf1, 0x04, 0x6c, 0x0d, 0x8c, 0xd4, 0x01, 0xa9, 0x6d, 0x8f, + 0x27, 0x2c, 0xbe, 0xbb, 0x95, 0xf7, 0x4b, 0x15, 0x67, 0xb6, 0x00, 0xa2, 0x23, 0x8b, 0x62, 0xf9, + 0xdc, 0x19, 0xbc, 0x4a, 0x7a, 0x3f, 0xaa, 0xae, 0x95, 0xb2, 0x81, 0x8d, 0xd4, 0x4a, 0x75, 0x05, + 0xa5, 0x1a, 0x06, 0x06, 0x88, 0xa2, 0x1b, 0x3c, 0xee, 0xfb, 0x7b, 0xed, 0xb9, 0xf7, 0x1d, 0x7a, + 0x06, 0x31, 0xd7, 0xf3, 0x90, 0xf6, 0x8d, 0x09, 0xb0, 0x00, 0x81, 0x0e, 0xc8, 0xbe, 0xf9, 0x05, + 0x21, 0x02, 0x08, 0x0b, 0xb5, 0x70, 0x6b, 0x05, 0x31, 0x62, 0x5a, 0x19, 0x5e, 0x6b, 0x04, 0x4b, + 0x0f, 0xea, 0x24, 0x3a, 0xea, 0x6d, 0x20, 0xd1, 0xfd, 0x82, 0x45, 0xad, 0x05, 0x8b, 0x5a, 0xed, + 0x35, 0x12, 0xc1, 0xd1, 0xf1, 0x80, 0x0a, 0x03, 0x6b, 0x2e, 0x07, 0x0b, 0x9d, 0xd0, 0xe0, 0x3b, + 0xf6, 0x1a, 0x40, 0xec, 0xb4, 0x0b, 0x54, 0xc4, 0x50, 0x2f, 0x22, 0x8d, 0x1f, 0xa2, 0x11, 0xce, + 0x43, 0xb7, 0x52, 0x42, 0x40, 0xad, 0xec, 0xfa, 0x9e, 0x16, 0xed, 0x9e, 0x70, 0xb5, 0x42, 0x8e, + 0x35, 0x31, 0xa7, 0x92, 0x83, 0xe8, 0x1d, 0xa5, 0x50, 0x32, 0xd5, 0x26, 0x45, 0xd0, 0xab, 0x2e, + 0xd9, 0x14, 0xac, 0xb9, 0xd8, 0x42, 0x0b, 0x06, 0x23, 0x62, 0x06, 0x23, 0x2d, 0x4b, 0xbc, 0xe5, + 0x0e, 0x9c, 0x96, 0xcc, 0x11, 0x16, 0x07, 0x7b, 0x99, 0xae, 0xc8, 0x56, 0x80, 0x99, 0x4f, 0xd9, + 0x1a, 0x55, 0xfb, 0xf7, 0x39, 0x2b, 0x38, 0xfe, 0x52, 0x01, 0xa4, 0x37, 0x04, 0xfd, 0x20, 0x8b, + 0x98, 0x91, 0xfd, 0x9d, 0xdd, 0xa0, 0xd5, 0x1a, 0x93, 0x0c, 0x46, 0x41, 0xe2, 0xf6, 0x87, 0x83, + 0xfd, 0xdd, 0xbd, 0x3d, 0x1c, 0xae, 0x1e, 0xbc, 0x9f, 0x10, 0xec, 0xc3, 0x69, 0x15, 0xc9, 0x13, + 0x7b, 0xc7, 0xb1, 0x41, 0x54, 0x29, 0x63, 0xf9, 0x4f, 0x76, 0xde, 0x0c, 0xed, 0xce, 0x0e, 0xef, + 0x3a, 0x3d, 0x38, 0x00, 0x8e, 0x5c, 0x64, 0x06, 0x57, 0x8b, 0x25, 0xfc, 0x53, 0x0e, 0xe4, 0xe1, + 0x4a, 0x95, 0x4c, 0x05, 0xd6, 0x86, 0x9d, 0x2e, 0x98, 0x30, 0x96, 0xf8, 0xc8, 0x1a, 0xe3, 0x8a, + 0xe0, 0x98, 0x80, 0x53, 0x4e, 0x2c, 0x0b, 0xc0, 0x4d, 0xa7, 0x0f, 0x3e, 0xe1, 0x02, 0x7f, 0x99, + 0x51, 0x4c, 0x91, 0x5c, 0xce, 0x00, 0x54, 0x9c, 0xe4, 0xcb, 0xcc, 0xc0, 0x18, 0x74, 0x9a, 0xdc, + 0x4c, 0x7b, 0x76, 0x56, 0x84, 0xfb, 0x6f, 0x42, 0x0d, 0x3c, 0x37, 0xc0, 0x99, 0x14, 0xf9, 0xf8, + 0x09, 0xae, 0xc4, 0x9a, 0xd9, 0x61, 0x89, 0x77, 0xed, 0xcd, 0xc0, 0x64, 0x0a, 0xc3, 0x9b, 0x82, + 0x22, 0x12, 0xc3, 0x04, 0x30, 0x35, 0x2e, 0xaf, 0x6e, 0x8c, 0x67, 0xbf, 0xc3, 0x79, 0xc9, 0xe2, + 0x9a, 0x87, 0x9e, 0xa1, 0x9f, 0xa5, 0x42, 0x9f, 0x22, 0x52, 0x18, 0x6d, 0x3f, 0x71, 0x09, 0x91, + 0x00, 0xb7, 0x9c, 0xbe, 0x3d, 0x9c, 0xf5, 0xe0, 0x27, 0x10, 0x7e, 0xea, 0x5b, 0x08, 0xcf, 0xa2, + 0x22, 0x99, 0x45, 0x50, 0x80, 0x3e, 0x1e, 0xf5, 0x96, 0x5b, 0x9c, 0xe7, 0x05, 0xe5, 0x13, 0x7c, + 0xb7, 0x3b, 0x2e, 0x22, 0xb8, 0x08, 0x0f, 0x19, 0x13, 0x6b, 0xf4, 0x29, 0x52, 0x9e, 0x20, 0x7f, + 0x44, 0x8d, 0x39, 0x66, 0xd8, 0x74, 0xcc, 0x7c, 0x8c, 0x80, 0xc1, 0x24, 0x5d, 0x01, 0xd6, 0xc7, + 0xeb, 0x30, 0xb6, 0xb4, 0x6b, 0xb0, 0x65, 0xe1, 0xaa, 0xa5, 0x58, 0xff, 0xfa, 0xec, 0xa5, 0x1c, + 0x43, 0xfd, 0xce, 0xa6, 0x34, 0xf8, 0x1b, 0xe4, 0xc9, 0x71, 0x6f, 0xcb, 0xde, 0x41, 0x3e, 0xbf, + 0x6d, 0xc3, 0x08, 0x8c, 0x97, 0x25, 0x68, 0xa0, 0x80, 0xcb, 0xa6, 0x4d, 0x58, 0x1a, 0x21, 0x1e, + 0xed, 0xdd, 0xc6, 0xe0, 0xaa, 0xbf, 0x49, 0x68, 0x8f, 0x76, 0x8d, 0xcc, 0x09, 0x2b, 0xef, 0x37, + 0xc9, 0xfc, 0x46, 0xbb, 0xbf, 0x9f, 0x5f, 0x37, 0x3e, 0xf7, 0x37, 0xfa, 0xd7, 0x82, 0x84, 0xbf, + 0x4a, 0x21, 0x89, 0xee, 0x1b, 0xd6, 0xe2, 0xa9, 0x1d, 0x85, 0x36, 0xc9, 0xef, 0x83, 0x6b, 0xff, + 0x2c, 0xb9, 0x80, 0xe3, 0x34, 0x4e, 0xf8, 0xb8, 0x71, 0x15, 0xeb, 0x08, 0xce, 0x74, 0xdd, 0x00, + 0x70, 0x7e, 0xe4, 0xed, 0x5b, 0xda, 0x5d, 0x6c, 0x33, 0x76, 0x56, 0x8a, 0xc0, 0x9a, 0x43, 0x80, + 0xe8, 0x90, 0x15, 0xe3, 0xdf, 0xde, 0xa2, 0xca, 0x15, 0xc1, 0x35, 0xb9, 0x77, 0xb4, 0x7b, 0x3d, + 0xe3, 0x29, 0x1f, 0x4f, 0xf4, 0x05, 0x54, 0x75, 0xab, 0xd5, 0xf9, 0x41, 0x35, 0xba, 0xa9, 0xdb, + 0x7d, 0x5e, 0xf7, 0x6e, 0xae, 0xe1, 0xf8, 0x60, 0x73, 0xa7, 0xb5, 0xa1, 0x42, 0x3d, 0xb1, 0x07, + 0x6f, 0x2d, 0x3f, 0xb9, 0x4c, 0x3d, 0xbf, 0x17, 0x39, 0xff, 0xdf, 0xc5, 0xa8, 0x89, 0xb7, 0x3e, + 0xf8, 0x83, 0x37, 0x43, 0xbc, 0x26, 0xe2, 0xef, 0xd9, 0xff, 0x05, 0x7b, 0x97, 0xa6, 0xa3, 0xdf, 0x16, 0x00, 0x00 }; @@ -1578,8 +1580,8 @@ const uint8_t PAGE_settings_time[] PROGMEM = { const uint16_t PAGE_settings_sec_length = 2483; const uint8_t PAGE_settings_sec[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xad, 0x58, 0xff, 0x72, 0xd3, 0x48, - 0x12, 0xfe, 0xdf, 0x4f, 0x31, 0x1e, 0xaa, 0x58, 0xeb, 0x50, 0xe4, 0x10, 0xa8, 0x2d, 0x08, 0x96, - 0xb9, 0x84, 0x84, 0x25, 0x5b, 0x09, 0x49, 0x61, 0xb3, 0xdc, 0x15, 0x47, 0x51, 0x63, 0x69, 0x6c, + 0x12, 0xfe, 0xdf, 0x4f, 0x31, 0x1e, 0xaa, 0x58, 0xeb, 0x50, 0xe4, 0x10, 0xb8, 0x2d, 0x08, 0x96, + 0xb9, 0x84, 0x84, 0x25, 0x57, 0x09, 0x49, 0x61, 0xb3, 0xdc, 0x15, 0x47, 0x51, 0x63, 0x69, 0x6c, 0x0d, 0x96, 0x34, 0xda, 0x99, 0x51, 0x8c, 0x8f, 0xdd, 0xf7, 0xb8, 0xa7, 0xb9, 0x87, 0xb9, 0x27, 0xb9, 0xaf, 0x47, 0x92, 0xed, 0x40, 0x80, 0xa2, 0xee, 0xfe, 0x48, 0x6c, 0x69, 0x66, 0xfa, 0xc7, 0xd7, 0xdd, 0x5f, 0xf7, 0x78, 0xd4, 0x3f, 0xb9, 0x7c, 0x36, 0xfd, 0xfb, 0xd5, 0x29, 0xcb, 0x5c, @@ -1595,143 +1597,143 @@ const uint8_t PAGE_settings_sec[] PROGMEM = { 0x71, 0x4a, 0x97, 0xec, 0xc5, 0x20, 0xf8, 0xb4, 0x52, 0x65, 0xaa, 0x57, 0x91, 0xae, 0x64, 0x39, 0xe0, 0x99, 0x73, 0x95, 0x3d, 0x1c, 0x0e, 0x8b, 0x22, 0x5a, 0x96, 0x3a, 0x5a, 0xe5, 0x32, 0x8d, 0x16, 0x72, 0x38, 0x97, 0xc2, 0xd5, 0x46, 0xda, 0xa1, 0x6d, 0xd5, 0x0e, 0xef, 0x58, 0x99, 0xd4, - 0x46, 0xb9, 0xf5, 0x5e, 0xf7, 0x8a, 0x07, 0x7f, 0x6e, 0xe4, 0x1e, 0x7f, 0x2e, 0x77, 0x73, 0x90, + 0x46, 0xb9, 0xf5, 0x5e, 0xf7, 0x8a, 0x07, 0x7f, 0x6c, 0xe4, 0x1e, 0x7f, 0x2e, 0x77, 0x73, 0x90, 0x87, 0xfc, 0xbd, 0x95, 0xf9, 0x7c, 0x77, 0xf7, 0xeb, 0x2f, 0x76, 0xd7, 0x55, 0x2a, 0x9c, 0xbc, 0x6d, 0xef, 0xe2, 0x2c, 0x1d, 0xc8, 0xe0, 0x93, 0x91, 0xb0, 0xa7, 0x64, 0x64, 0x9c, 0x3b, 0xcd, 0x25, 0x39, 0x77, 0xbc, 0xf6, 0x4b, 0xdb, 0xad, 0xca, 0x5e, 0xce, 0x3e, 0xec, 0x6c, 0x96, 0x77, 0xef, 0x72, 0x3d, 0xfb, 0x20, 0x13, 0xc7, 0xe3, 0xd8, 0xad, 0x2b, 0xa9, 0xe7, 0xf4, 0xae, 0x7f, - 0x64, 0x8c, 0x58, 0x47, 0xca, 0xfa, 0xcf, 0x1b, 0x12, 0x72, 0x2d, 0xd2, 0x5f, 0x27, 0x03, 0x19, - 0xba, 0xb8, 0xbf, 0x1f, 0x7c, 0xca, 0xa5, 0x63, 0x3a, 0x4e, 0xa3, 0xc4, 0x00, 0x0e, 0xd9, 0xaa, - 0x1d, 0xf0, 0x06, 0x79, 0x1e, 0x3c, 0xd1, 0x11, 0xbc, 0x3c, 0x72, 0xce, 0xa8, 0x59, 0xed, 0x24, - 0x16, 0x4c, 0xc2, 0x43, 0x19, 0x84, 0x9f, 0xbf, 0x27, 0xdd, 0xf0, 0xcd, 0xc9, 0x8f, 0x6e, 0xf8, - 0x41, 0x5c, 0x8b, 0x4e, 0xc0, 0x17, 0x1b, 0x85, 0x5d, 0x97, 0x10, 0xe1, 0x82, 0x30, 0x8d, 0x66, - 0x3a, 0x5d, 0x47, 0xa2, 0x02, 0x3e, 0xe9, 0xb3, 0x4c, 0xe5, 0xe9, 0x40, 0xd3, 0x7e, 0x91, 0xa6, - 0xa7, 0xd7, 0xb0, 0xe2, 0x5c, 0x59, 0xe4, 0xa3, 0x34, 0x03, 0x4e, 0x36, 0xf3, 0x70, 0x10, 0xc4, - 0xe3, 0x4f, 0xbf, 0x48, 0xf7, 0xdb, 0x20, 0x08, 0x21, 0xf3, 0x38, 0x59, 0x3e, 0x57, 0xb9, 0xa4, - 0x34, 0x1b, 0x10, 0x82, 0x7c, 0x96, 0x2c, 0x93, 0xf9, 0x82, 0x07, 0x5f, 0x5d, 0xad, 0x10, 0x6d, - 0xe9, 0x10, 0xd4, 0xe0, 0xcf, 0xdb, 0xf5, 0x48, 0x63, 0xb4, 0x81, 0x7b, 0xd0, 0x83, 0x62, 0xb0, - 0x3a, 0x97, 0x51, 0xae, 0x17, 0x03, 0x7e, 0x4a, 0xef, 0x59, 0x0b, 0x1e, 0x22, 0xce, 0xe6, 0x10, - 0xed, 0x61, 0x40, 0xf6, 0x1b, 0xc0, 0x75, 0xde, 0xbe, 0x07, 0xfa, 0x38, 0x38, 0x57, 0x8b, 0xda, - 0x08, 0x8f, 0x76, 0x03, 0x03, 0x9b, 0x0b, 0x45, 0x59, 0xf7, 0x8f, 0xf2, 0xac, 0x4c, 0x74, 0x51, - 0x01, 0x74, 0xc9, 0x2a, 0xb1, 0x90, 0x0c, 0x29, 0x21, 0xfa, 0xc8, 0x85, 0x9d, 0x00, 0xd9, 0x4c, - 0xaf, 0xa6, 0x5a, 0x58, 0xd7, 0xc4, 0xe8, 0x7e, 0xf0, 0x89, 0xd2, 0x5f, 0xc7, 0xde, 0x0b, 0x47, - 0x0b, 0x3e, 0x2c, 0xaa, 0x84, 0xc9, 0x2f, 0xa6, 0x17, 0xe7, 0xb1, 0x84, 0x2f, 0x49, 0x2e, 0xac, - 0x25, 0x47, 0xc8, 0xab, 0x81, 0x7b, 0xda, 0xba, 0x72, 0xc8, 0x49, 0x1a, 0xa2, 0x90, 0xe4, 0x52, - 0x98, 0x69, 0x53, 0x3c, 0x83, 0xb6, 0x88, 0x7c, 0x6c, 0xdc, 0x1a, 0x4e, 0x8a, 0x52, 0x15, 0xde, - 0xde, 0x98, 0x97, 0xba, 0x84, 0x67, 0xed, 0x8e, 0x18, 0x70, 0x75, 0x87, 0x06, 0x9d, 0x81, 0x48, - 0xec, 0x5d, 0x7d, 0x46, 0x16, 0xfa, 0x9a, 0x12, 0xc3, 0x2b, 0x02, 0xb0, 0x07, 0x8f, 0xf7, 0xf7, - 0x77, 0xdc, 0xa9, 0x2b, 0x02, 0x8d, 0x62, 0x41, 0xfe, 0x74, 0xce, 0x94, 0x72, 0xc5, 0xfe, 0x76, - 0x71, 0xfe, 0x02, 0xa5, 0xf9, 0x4a, 0xfe, 0x5e, 0x4b, 0xeb, 0x9e, 0x7c, 0x23, 0xf0, 0x3b, 0xaa, - 0xb7, 0xe8, 0xb8, 0x4c, 0x59, 0x68, 0xb7, 0x15, 0x22, 0x25, 0xa7, 0xc8, 0xbb, 0xd0, 0xbf, 0xb1, - 0x0e, 0x65, 0x6d, 0xc7, 0xf1, 0x43, 0xb2, 0x22, 0xf8, 0x66, 0x9c, 0xb7, 0x72, 0xe5, 0xae, 0x60, - 0x49, 0x32, 0x92, 0x65, 0xd8, 0xef, 0x04, 0x34, 0x05, 0x7c, 0x75, 0x39, 0x99, 0x22, 0xc3, 0x87, - 0x8d, 0x43, 0x88, 0x01, 0x79, 0x52, 0x7a, 0x4f, 0x9e, 0x6b, 0x53, 0x9c, 0x20, 0x92, 0x4f, 0xda, - 0xaa, 0x2c, 0xdb, 0xa4, 0x1e, 0x70, 0x8a, 0x2f, 0x12, 0x25, 0xa2, 0x84, 0xb1, 0x6f, 0xf7, 0xdf, - 0x85, 0x0d, 0xea, 0xb4, 0x56, 0x06, 0x78, 0x7f, 0x2d, 0xf2, 0x1a, 0x2c, 0xc9, 0xc3, 0xfe, 0xfd, - 0x2d, 0x64, 0x49, 0x26, 0x93, 0xe5, 0xcb, 0xba, 0xd8, 0xd6, 0x79, 0x7f, 0xd0, 0x97, 0xe4, 0x42, - 0xb4, 0x94, 0xeb, 0x08, 0xa1, 0x4a, 0xb2, 0xc1, 0xf0, 0xed, 0xfe, 0xde, 0xe3, 0x77, 0xc3, 0x00, - 0xc5, 0xfe, 0x96, 0x1f, 0xc3, 0x5e, 0x5b, 0x89, 0x84, 0x4a, 0x70, 0x2a, 0x66, 0xf8, 0x7f, 0x0a, - 0x2e, 0x87, 0x8b, 0x7c, 0x92, 0xa9, 0xb9, 0xc3, 0xe7, 0x33, 0x90, 0xbb, 0xd1, 0x39, 0xbe, 0x1d, - 0xe5, 0xf4, 0x7c, 0x25, 0x40, 0xd9, 0xf4, 0x5e, 0x54, 0xf6, 0x5c, 0x27, 0x4b, 0x3a, 0x02, 0xfe, - 0xf6, 0x45, 0x3c, 0x69, 0x25, 0x5d, 0x21, 0x43, 0x5f, 0x57, 0xed, 0x97, 0x13, 0xbd, 0x2a, 0xbd, - 0x5c, 0x04, 0x84, 0xbf, 0xd0, 0x05, 0x6d, 0x00, 0xbb, 0xe8, 0xd5, 0xb9, 0xf4, 0x0a, 0xfc, 0x77, - 0xbf, 0xdb, 0x7f, 0x7b, 0xa5, 0x16, 0xd9, 0xe6, 0x75, 0x7b, 0xf6, 0x0c, 0x81, 0x32, 0xf4, 0xf2, - 0x44, 0x52, 0x05, 0xf0, 0x77, 0x48, 0xe2, 0x24, 0xaf, 0x53, 0x69, 0x07, 0x1b, 0xef, 0x82, 0xe0, - 0x8f, 0x3f, 0xda, 0x27, 0x94, 0x2b, 0x7d, 0x9e, 0xc8, 0xb9, 0xa8, 0x73, 0x87, 0xa2, 0x47, 0x2d, - 0xec, 0x94, 0xc9, 0xcd, 0x1a, 0x07, 0x54, 0xf2, 0x33, 0xa6, 0x01, 0xf7, 0x96, 0x4d, 0x02, 0x71, - 0xe2, 0xfc, 0xf7, 0xfc, 0x9e, 0x24, 0x6a, 0xbd, 0x6d, 0x47, 0x70, 0x6f, 0xc0, 0xdf, 0x9c, 0x9f, - 0x9e, 0x80, 0x44, 0x6d, 0xfa, 0x94, 0xa3, 0x6e, 0xb0, 0xdb, 0xa6, 0xc1, 0x8e, 0xbe, 0x09, 0x92, - 0x8f, 0x53, 0x18, 0x0f, 0xb1, 0xa9, 0x65, 0x76, 0xb4, 0x1e, 0x5f, 0x36, 0x30, 0x55, 0x3b, 0x9d, - 0xe8, 0xfc, 0xee, 0xdd, 0x81, 0x6f, 0x47, 0xfb, 0xe1, 0xc0, 0xf7, 0xab, 0x98, 0x76, 0xe4, 0x13, - 0xa7, 0x0d, 0x10, 0x24, 0xe5, 0x67, 0x4e, 0x16, 0x94, 0xd6, 0xc9, 0x59, 0xc5, 0xbd, 0xab, 0xcd, - 0x36, 0x9c, 0x2f, 0x2a, 0xf0, 0x08, 0xb9, 0xc3, 0x2e, 0x74, 0x2a, 0x23, 0x76, 0x85, 0x8a, 0xb5, - 0x92, 0x49, 0x8a, 0x23, 0x23, 0xdb, 0xd8, 0xd9, 0x15, 0x98, 0x22, 0xbc, 0x21, 0xd1, 0xde, 0x94, - 0x18, 0x7a, 0x69, 0x41, 0x40, 0xbb, 0x3c, 0xcb, 0x93, 0xf8, 0xa7, 0xbe, 0x01, 0xa2, 0xff, 0xf1, - 0x7b, 0x7e, 0xf9, 0x90, 0xc3, 0xdd, 0x6d, 0xf3, 0x1a, 0xda, 0xe8, 0x83, 0x7d, 0x5a, 0xc5, 0x3f, - 0x73, 0x8f, 0x6f, 0x6f, 0x34, 0x6c, 0xbb, 0xee, 0xc8, 0x73, 0xc3, 0xf8, 0xaf, 0xaa, 0xa0, 0xfe, - 0xcd, 0x6a, 0x93, 0xa3, 0xc8, 0x3d, 0x5d, 0x24, 0x16, 0x1c, 0xfa, 0x04, 0x1b, 0xfd, 0x86, 0xd1, - 0xb0, 0x19, 0x22, 0x88, 0xcc, 0xc1, 0x91, 0xa4, 0x39, 0xe6, 0x40, 0x0b, 0xbd, 0x7d, 0x8e, 0xba, - 0xe8, 0x31, 0x85, 0x67, 0xfa, 0xf6, 0xde, 0x72, 0xd6, 0x0c, 0x05, 0x93, 0x39, 0x67, 0x98, 0x06, - 0x32, 0x8d, 0x95, 0x4a, 0x5b, 0x1a, 0x0e, 0x52, 0x75, 0xcd, 0x3c, 0xa9, 0xc4, 0xe0, 0x38, 0xc0, - 0xb1, 0xba, 0xf9, 0x2e, 0x93, 0x79, 0x75, 0xcc, 0xc7, 0xbd, 0x11, 0x02, 0xe7, 0x10, 0x0d, 0x6a, - 0x37, 0x31, 0x6f, 0x1e, 0x38, 0xb4, 0x26, 0xb9, 0x4a, 0x96, 0x31, 0x7f, 0x41, 0x6a, 0x9f, 0x8e, - 0x86, 0xcd, 0x02, 0x4c, 0x83, 0x88, 0xf1, 0xed, 0x67, 0x7a, 0x9b, 0x43, 0xc7, 0x74, 0x88, 0x2a, - 0x68, 0x7b, 0xee, 0xc6, 0x09, 0x5b, 0xcf, 0x0a, 0x05, 0x1b, 0x27, 0xe2, 0x5a, 0x6e, 0xb7, 0x64, - 0xa6, 0x13, 0x9f, 0x1d, 0x8c, 0x7b, 0x93, 0x76, 0x72, 0x60, 0x77, 0xd9, 0x6b, 0xdf, 0xe7, 0x29, - 0x3f, 0xeb, 0x0a, 0xd8, 0x1c, 0x8c, 0xbb, 0xb1, 0x86, 0x5d, 0x9d, 0xbd, 0x3c, 0x64, 0x23, 0x55, - 0x56, 0xb5, 0x6b, 0x45, 0x57, 0x70, 0x6e, 0xa5, 0x4d, 0xca, 0x3d, 0x48, 0x58, 0xdf, 0xcc, 0x4d, - 0xfe, 0xbb, 0x55, 0xff, 0xc4, 0xd7, 0x87, 0x00, 0x4b, 0x7c, 0x44, 0x9e, 0x2f, 0x30, 0x95, 0xf9, - 0x27, 0x55, 0xee, 0x3c, 0xe9, 0x12, 0x65, 0x43, 0x99, 0x1c, 0xf3, 0x0d, 0x71, 0x10, 0x13, 0x06, - 0x90, 0x55, 0x09, 0x87, 0xf4, 0xc1, 0x8a, 0x27, 0x8b, 0xbf, 0x40, 0x0d, 0x29, 0x2f, 0x90, 0x60, - 0x60, 0x7a, 0x8c, 0x4f, 0x46, 0x25, 0x9c, 0xf9, 0x61, 0x0b, 0x1a, 0x77, 0x13, 0x4e, 0xb0, 0x87, - 0x2c, 0x55, 0x0b, 0xe5, 0x18, 0xb6, 0xcd, 0xc0, 0x24, 0xc0, 0xc4, 0x00, 0x7e, 0x0a, 0x89, 0x0f, - 0x3b, 0x94, 0xe9, 0x5c, 0x9b, 0xc3, 0x3b, 0x73, 0xb1, 0x8f, 0xb8, 0xdc, 0xbd, 0xf3, 0xf8, 0xd1, - 0xa3, 0x47, 0x4f, 0xd8, 0xeb, 0x52, 0x96, 0x89, 0x59, 0x57, 0x4e, 0xa6, 0xcc, 0x19, 0x51, 0xda, - 0x42, 0x59, 0x4b, 0x15, 0xc2, 0x8e, 0xd1, 0xf1, 0x0c, 0x6a, 0xbd, 0x74, 0x6c, 0x95, 0x49, 0xaa, - 0xdf, 0x1c, 0x53, 0x0b, 0x35, 0x4d, 0xb8, 0x1a, 0xb2, 0x54, 0xb3, 0x97, 0x97, 0x53, 0x06, 0x52, - 0x62, 0x6b, 0x5d, 0x1b, 0x36, 0x13, 0xe5, 0x12, 0x8b, 0xb4, 0xa0, 0x4d, 0xc8, 0x26, 0x67, 0x17, - 0x21, 0x93, 0x2e, 0x89, 0x58, 0xa5, 0xca, 0x7e, 0xaf, 0x0b, 0xac, 0x19, 0x13, 0x77, 0xb1, 0x95, - 0x32, 0x90, 0x66, 0x2d, 0x1b, 0x5c, 0x4e, 0x8f, 0x02, 0x66, 0xf5, 0xdc, 0xad, 0x84, 0x91, 0xac, - 0x19, 0xb9, 0x3e, 0xc3, 0xdc, 0x83, 0x34, 0xd3, 0x1f, 0xbb, 0x64, 0x7c, 0x79, 0xe9, 0xf3, 0xca, - 0x8c, 0xaf, 0x10, 0x8c, 0x2a, 0x33, 0x00, 0xe1, 0xab, 0x51, 0x6a, 0x4e, 0x5c, 0x5e, 0xdd, 0x88, - 0xc8, 0x83, 0x83, 0x16, 0x9d, 0xa9, 0x06, 0x7a, 0x34, 0x00, 0x33, 0x98, 0x11, 0x32, 0xe4, 0x3c, - 0xeb, 0x26, 0x4a, 0x86, 0xf1, 0xca, 0xa2, 0x51, 0x91, 0x73, 0xac, 0x94, 0x84, 0x8e, 0x66, 0x22, - 0xb7, 0xba, 0xc5, 0xdb, 0x65, 0x12, 0x93, 0x83, 0x31, 0x80, 0x84, 0x75, 0xea, 0xfa, 0xde, 0xaa, - 0x69, 0x26, 0x37, 0x6f, 0x68, 0x36, 0xa8, 0xf3, 0x94, 0xcd, 0x24, 0xcd, 0xd1, 0xe5, 0x02, 0x62, - 0x3c, 0x96, 0x50, 0x87, 0xc9, 0xb0, 0x55, 0x9e, 0x46, 0x74, 0x6c, 0x34, 0x1b, 0xf7, 0x4e, 0x94, - 0xed, 0xac, 0x69, 0xf6, 0x95, 0xda, 0x21, 0x03, 0x08, 0xe4, 0x90, 0x69, 0xa8, 0x34, 0x2b, 0x05, - 0xbc, 0x45, 0xc9, 0x90, 0x26, 0xc8, 0x7f, 0xd8, 0x91, 0xe0, 0xc1, 0xc8, 0x39, 0x8a, 0x2e, 0x63, - 0xcd, 0x05, 0x60, 0x83, 0x26, 0xa1, 0x3e, 0xf3, 0x8e, 0x8e, 0xd4, 0x36, 0xa7, 0xa9, 0x4a, 0x90, - 0x6c, 0xcd, 0x34, 0x43, 0x98, 0x83, 0x01, 0xd6, 0x8d, 0x75, 0x5e, 0xb7, 0x9a, 0x7b, 0xf5, 0x39, - 0x85, 0x09, 0xdb, 0xd2, 0xc6, 0xa4, 0xb4, 0x3f, 0x1a, 0xaa, 0x06, 0xf5, 0x13, 0x59, 0xae, 0x99, - 0x48, 0x12, 0x0a, 0x1f, 0x30, 0x79, 0xa3, 0x9e, 0x2b, 0xd6, 0x71, 0x13, 0x9d, 0xa6, 0x93, 0x32, - 0xfd, 0x4e, 0x0c, 0x2f, 0xdf, 0xb4, 0x31, 0xa4, 0xbf, 0xe7, 0x22, 0x01, 0x3d, 0x12, 0xe4, 0x90, - 0xf3, 0x9d, 0x83, 0xaf, 0x26, 0x6d, 0xec, 0x8e, 0xf2, 0x7c, 0xab, 0x56, 0x94, 0x29, 0x6b, 0x87, - 0x45, 0xe4, 0x16, 0x56, 0x00, 0xb8, 0xa4, 0xc4, 0xe8, 0xb0, 0x35, 0xe3, 0xff, 0xa1, 0x12, 0x8e, - 0x76, 0xf0, 0xf6, 0xf0, 0x01, 0x63, 0x18, 0x83, 0xb4, 0x70, 0x08, 0xf2, 0xd2, 0xc7, 0x40, 0x51, - 0x56, 0x24, 0x92, 0x46, 0x47, 0x30, 0x67, 0x33, 0x26, 0x76, 0x59, 0x4f, 0xcc, 0x93, 0x3d, 0x18, - 0x4f, 0xba, 0x2c, 0x6f, 0x08, 0x07, 0x54, 0xf3, 0x60, 0xfc, 0x1d, 0x7a, 0x7c, 0x4d, 0x4c, 0xd7, - 0xbb, 0x10, 0x65, 0x2d, 0x72, 0x1f, 0x96, 0xee, 0xe8, 0x86, 0xf7, 0xcc, 0xf8, 0xb4, 0xc9, 0xe0, - 0x23, 0x93, 0xd6, 0xaa, 0xd4, 0xd8, 0xf4, 0x55, 0x04, 0x5b, 0xa6, 0x3a, 0xba, 0xe4, 0x1b, 0x9b, - 0x88, 0x45, 0xeb, 0x0a, 0x24, 0xf8, 0x0a, 0x13, 0x9d, 0x36, 0xad, 0x51, 0xa2, 0x63, 0xf1, 0x99, - 0xc3, 0x08, 0x5d, 0x2e, 0x1b, 0xb6, 0x6b, 0xc7, 0x75, 0xd6, 0xcb, 0x90, 0x70, 0x31, 0x1f, 0xb6, - 0x80, 0xa3, 0x1b, 0x91, 0xcd, 0x5d, 0x6b, 0x46, 0xf5, 0xb5, 0x53, 0x7b, 0x27, 0xbc, 0x7d, 0x1e, - 0x0d, 0xc5, 0x26, 0x10, 0xe3, 0x5e, 0xab, 0x6f, 0xb3, 0xe8, 0xb3, 0x74, 0xc7, 0x6a, 0x3f, 0xb0, - 0xb7, 0x31, 0xf7, 0x33, 0x99, 0x4f, 0xb9, 0x0a, 0xf7, 0xd0, 0x46, 0xdf, 0x98, 0x75, 0xd0, 0xf5, - 0x6e, 0xc7, 0xee, 0xa7, 0x9d, 0x39, 0x36, 0x8d, 0x26, 0xf3, 0x88, 0xa4, 0x84, 0x9f, 0x59, 0x1d, - 0xfc, 0x34, 0x7e, 0xed, 0xb7, 0x6d, 0x10, 0x6d, 0x92, 0x72, 0xc3, 0x56, 0x5f, 0x87, 0xa2, 0xf3, - 0x92, 0xb5, 0x68, 0x00, 0x9a, 0x16, 0x89, 0xde, 0x16, 0x0a, 0xc2, 0xab, 0x83, 0xe1, 0xc6, 0x3d, - 0xe3, 0x06, 0x18, 0x1d, 0x16, 0x37, 0x77, 0x6c, 0x11, 0xe9, 0xdd, 0x0e, 0xc9, 0xc1, 0xd7, 0x31, - 0xf9, 0x4a, 0xe7, 0xbc, 0x15, 0x93, 0x83, 0x70, 0xc7, 0xf8, 0x2f, 0x01, 0xd9, 0xc1, 0x83, 0x2a, - 0xa8, 0xf7, 0xad, 0x12, 0x6a, 0x1c, 0xa1, 0x16, 0xd1, 0xa2, 0x33, 0xbc, 0x79, 0xb9, 0xf2, 0xa5, - 0x79, 0xf9, 0xdb, 0xe9, 0xab, 0x37, 0xaf, 0xce, 0xa6, 0xa7, 0x4d, 0xdf, 0x00, 0xdd, 0x1a, 0xea, - 0x31, 0xb7, 0x9e, 0x88, 0x7c, 0x38, 0x7a, 0x74, 0x09, 0x6b, 0xa8, 0xf6, 0xa6, 0xbc, 0x42, 0x10, - 0x69, 0xfc, 0x5e, 0xa3, 0x9b, 0xa0, 0x01, 0xce, 0x77, 0x69, 0x84, 0x81, 0xcb, 0x8d, 0xdc, 0xf3, - 0xc4, 0xd8, 0x5e, 0xf4, 0xbc, 0xba, 0xd3, 0xc9, 0x55, 0xd4, 0xd6, 0xe5, 0xf3, 0x5b, 0xe8, 0x3e, - 0xdc, 0x50, 0xb7, 0xf5, 0xe4, 0x48, 0x04, 0x3c, 0xa3, 0xca, 0x4f, 0xd1, 0x9b, 0xa2, 0xae, 0x6a, - 0x8e, 0x66, 0xb8, 0x60, 0x75, 0xa5, 0xd2, 0x96, 0x43, 0xf7, 0xa3, 0x05, 0x5a, 0x70, 0x56, 0xcf, - 0x22, 0xdc, 0x1a, 0x87, 0x17, 0x5a, 0x97, 0x98, 0x0d, 0x6b, 0x74, 0xba, 0x21, 0x0d, 0x84, 0x43, - 0xb4, 0x6e, 0x61, 0x16, 0xf4, 0x63, 0xca, 0xfb, 0x59, 0x8e, 0x7e, 0xc9, 0xc7, 0xf4, 0xfa, 0xe2, - 0x82, 0xb2, 0xa1, 0xc7, 0xae, 0xa5, 0x21, 0xbe, 0x61, 0xfb, 0xd1, 0xfd, 0x87, 0xd1, 0xfe, 0xde, - 0xec, 0xe0, 0x51, 0xf4, 0xe0, 0x21, 0xfb, 0xcf, 0xbf, 0xfe, 0x4d, 0x18, 0x0c, 0x92, 0x80, 0x1d, - 0xec, 0x1f, 0x3c, 0x60, 0x3f, 0xa6, 0x91, 0x2e, 0xaf, 0xf0, 0x63, 0x58, 0x08, 0x55, 0x46, 0x51, - 0xb4, 0xb3, 0x7e, 0x48, 0xeb, 0x87, 0x05, 0x7a, 0x06, 0x12, 0xe4, 0x73, 0xb3, 0x7e, 0xf1, 0x22, - 0xd9, 0xce, 0xf6, 0x66, 0xa2, 0x7d, 0xa6, 0x0b, 0x4c, 0x56, 0xec, 0xa8, 0xc6, 0x28, 0x68, 0xb6, - 0x15, 0x8d, 0xbf, 0x39, 0x11, 0x21, 0x40, 0xfe, 0x7f, 0x00, 0x72, 0xb8, 0x11, 0xfc, 0x43, 0xc2, - 0x56, 0x6a, 0xa9, 0x86, 0xfe, 0xda, 0x44, 0xb7, 0x05, 0xd8, 0xb7, 0x87, 0xb6, 0xb0, 0x97, 0x18, - 0x99, 0x2a, 0xaa, 0xd3, 0x2f, 0x9c, 0xdc, 0xdd, 0x8a, 0xb1, 0x45, 0xd2, 0x05, 0x10, 0x2d, 0x40, - 0xc9, 0xa6, 0x9f, 0xd8, 0x4a, 0x26, 0x0a, 0xb4, 0xeb, 0xd0, 0x1a, 0x97, 0x1b, 0x5f, 0x7b, 0x47, - 0x2c, 0xab, 0xd1, 0x39, 0xfd, 0x5b, 0x3f, 0x1c, 0xa0, 0x07, 0xe2, 0xda, 0x63, 0xd6, 0xb8, 0x87, - 0xa3, 0x69, 0x6b, 0x46, 0x93, 0x2f, 0xd2, 0x05, 0xfd, 0xa1, 0xf9, 0x89, 0xc6, 0x23, 0xd7, 0xef, - 0x70, 0xea, 0x79, 0x1c, 0x13, 0x2a, 0xf7, 0x26, 0xa4, 0xf7, 0x7f, 0xde, 0xf3, 0x71, 0x7d, 0x96, - 0x19, 0x5c, 0x77, 0x15, 0x5a, 0xc9, 0x24, 0xc9, 0x56, 0xf4, 0x63, 0x41, 0xdb, 0xb9, 0xcf, 0xd1, - 0xd3, 0x71, 0x0f, 0x43, 0x02, 0xc2, 0xbc, 0x66, 0xf0, 0xf8, 0x31, 0x5c, 0x66, 0xb9, 0x9e, 0x21, - 0x01, 0x70, 0x97, 0x36, 0xc3, 0xf3, 0xb3, 0x67, 0xa7, 0x2f, 0x27, 0xa7, 0x5f, 0xe2, 0xde, 0xbb, - 0x38, 0x9b, 0xb2, 0xbc, 0x51, 0xe5, 0x7d, 0x45, 0xbb, 0xef, 0x6c, 0x9e, 0x48, 0x03, 0x07, 0xe1, - 0x91, 0xb5, 0x18, 0x1a, 0xd0, 0x5e, 0x70, 0x73, 0x2d, 0x3b, 0x5e, 0xb4, 0xaa, 0xe2, 0xc4, 0x60, - 0xfe, 0x56, 0xcf, 0xfc, 0x45, 0x9d, 0x1a, 0x1f, 0x6d, 0x69, 0xba, 0x0c, 0xb1, 0x06, 0x71, 0x66, - 0xf3, 0x4b, 0xc8, 0x37, 0x47, 0xfc, 0x2f, 0x27, 0xfc, 0xde, 0x0f, 0x8d, 0xf8, 0x43, 0xea, 0xbd, - 0xf8, 0xa0, 0x9b, 0x0d, 0x5d, 0x73, 0xe8, 0x17, 0xd4, 0xff, 0x02, 0x64, 0x9b, 0x5d, 0x18, 0x51, + 0x64, 0x8c, 0x58, 0x47, 0xca, 0xfa, 0xcf, 0x1b, 0x12, 0x72, 0x2d, 0xd2, 0xbf, 0x4e, 0x06, 0x32, + 0x74, 0x71, 0x7f, 0x3f, 0xf8, 0x94, 0x4b, 0xc7, 0x74, 0x9c, 0x46, 0x89, 0x01, 0x1c, 0xb2, 0x55, + 0x3b, 0xe0, 0x0d, 0xf2, 0x3c, 0x78, 0xa2, 0x23, 0x78, 0x79, 0xe4, 0x9c, 0x51, 0xb3, 0xda, 0x49, + 0x2c, 0x98, 0x84, 0x87, 0x32, 0x08, 0x3f, 0x7f, 0x4f, 0xba, 0xe1, 0x9b, 0x93, 0x1f, 0xdd, 0xf0, + 0x83, 0xb8, 0x16, 0x9d, 0x80, 0x2f, 0x36, 0x0a, 0xbb, 0x2e, 0x21, 0xc2, 0x05, 0x61, 0x1a, 0xcd, + 0x74, 0xba, 0x8e, 0x44, 0x05, 0x7c, 0xd2, 0x67, 0x99, 0xca, 0xd3, 0x81, 0xa6, 0xfd, 0x22, 0x4d, + 0x4f, 0xaf, 0x61, 0xc5, 0xb9, 0xb2, 0xc8, 0x47, 0x69, 0x06, 0x9c, 0x6c, 0xe6, 0xe1, 0x20, 0x88, + 0xc7, 0x9f, 0x7e, 0x91, 0xee, 0xd7, 0x41, 0x10, 0x42, 0xe6, 0x71, 0xb2, 0x7c, 0xae, 0x72, 0x49, + 0x69, 0x36, 0x20, 0x04, 0xf9, 0x2c, 0x59, 0x26, 0xf3, 0x05, 0x0f, 0xbe, 0xba, 0x5a, 0x21, 0xda, + 0xd2, 0x21, 0xa8, 0xc1, 0x1f, 0xb7, 0xeb, 0x91, 0xc6, 0x68, 0x03, 0xf7, 0xa0, 0x07, 0xc5, 0x60, + 0x75, 0x2e, 0xa3, 0x5c, 0x2f, 0x06, 0xfc, 0x94, 0xde, 0xb3, 0x16, 0x3c, 0x44, 0x9c, 0xcd, 0x21, + 0xda, 0xc3, 0x80, 0xec, 0x37, 0x80, 0xeb, 0xbc, 0x7d, 0x0f, 0xf4, 0x71, 0x70, 0xae, 0x16, 0xb5, + 0x11, 0x1e, 0xed, 0x06, 0x06, 0x36, 0x17, 0x8a, 0xb2, 0xee, 0x1f, 0xe5, 0x59, 0x99, 0xe8, 0xa2, + 0x02, 0xe8, 0x92, 0x55, 0x62, 0x21, 0x19, 0x52, 0x42, 0xf4, 0x91, 0x0b, 0x3b, 0x01, 0xb2, 0x99, + 0x5e, 0x4d, 0xb5, 0xb0, 0xae, 0x89, 0xd1, 0xfd, 0xe0, 0x13, 0xa5, 0xbf, 0x8e, 0xbd, 0x17, 0x8e, + 0x16, 0x7c, 0x58, 0x54, 0x09, 0x93, 0x5f, 0x4c, 0x2f, 0xce, 0x63, 0x09, 0x5f, 0x92, 0x5c, 0x58, + 0x4b, 0x8e, 0x90, 0x57, 0x03, 0xf7, 0xb4, 0x75, 0xe5, 0x90, 0x93, 0x34, 0x44, 0x21, 0xc9, 0xa5, + 0x30, 0xd3, 0xa6, 0x78, 0x06, 0x6d, 0x11, 0xf9, 0xd8, 0xb8, 0x35, 0x9c, 0x14, 0xa5, 0x2a, 0xbc, + 0xbd, 0x31, 0x2f, 0x75, 0x09, 0xcf, 0xda, 0x1d, 0x31, 0xe0, 0xea, 0x0e, 0x0d, 0x3a, 0x03, 0x91, + 0xd8, 0xbb, 0xfa, 0x8c, 0x2c, 0xf4, 0x35, 0x25, 0x86, 0x57, 0x04, 0x60, 0x0f, 0x1e, 0xef, 0xef, + 0xef, 0xb8, 0x53, 0x57, 0x04, 0x1a, 0xc5, 0x82, 0xfc, 0xe9, 0x9c, 0x29, 0xe5, 0x8a, 0xfd, 0xed, + 0xe2, 0xfc, 0x05, 0x4a, 0xf3, 0x95, 0xfc, 0xad, 0x96, 0xd6, 0x3d, 0xf9, 0x46, 0xe0, 0x77, 0x54, + 0x6f, 0xd1, 0x71, 0x99, 0xb2, 0xd0, 0x6e, 0x2b, 0x44, 0x4a, 0x4e, 0x91, 0x77, 0xa1, 0x7f, 0x63, + 0x1d, 0xca, 0xda, 0x8e, 0xe3, 0x87, 0x64, 0x45, 0xf0, 0xcd, 0x38, 0x6f, 0xe5, 0xca, 0x5d, 0xc1, + 0x92, 0x64, 0x24, 0xcb, 0xb0, 0xdf, 0x09, 0x68, 0x0a, 0xf8, 0xea, 0x72, 0x32, 0x45, 0x86, 0x0f, + 0x1b, 0x87, 0x10, 0x03, 0xf2, 0xa4, 0xf4, 0x9e, 0x3c, 0xd7, 0xa6, 0x38, 0x41, 0x24, 0x9f, 0xb4, + 0x55, 0x59, 0xb6, 0x49, 0x3d, 0xe0, 0x14, 0x5f, 0x24, 0x4a, 0x44, 0x09, 0x63, 0xdf, 0xee, 0xbf, + 0x0b, 0x1b, 0xd4, 0x69, 0xad, 0x0c, 0xf0, 0xfe, 0x5a, 0xe4, 0x35, 0x58, 0x92, 0x87, 0xfd, 0xfb, + 0x5b, 0xc8, 0x92, 0x4c, 0x26, 0xcb, 0x97, 0x75, 0xb1, 0xad, 0xf3, 0xfe, 0xa0, 0x2f, 0xc9, 0x85, + 0x68, 0x29, 0xd7, 0x11, 0x42, 0x95, 0x64, 0x83, 0xe1, 0xdb, 0xfd, 0xbd, 0xc7, 0xef, 0x86, 0x01, + 0x8a, 0xfd, 0x2d, 0x3f, 0x86, 0xbd, 0xb6, 0x12, 0x09, 0x95, 0xe0, 0x54, 0xcc, 0xf0, 0xff, 0x14, + 0x5c, 0x0e, 0x17, 0xf9, 0x24, 0x53, 0x73, 0x87, 0xcf, 0x67, 0x20, 0x77, 0xa3, 0x73, 0x7c, 0x3b, + 0xca, 0xe9, 0xf9, 0x4a, 0x80, 0xb2, 0xe9, 0xbd, 0xa8, 0xec, 0xb9, 0x4e, 0x96, 0x74, 0x04, 0xfc, + 0xed, 0x8b, 0x78, 0xd2, 0x4a, 0xba, 0x42, 0x86, 0xbe, 0xae, 0xda, 0x2f, 0x27, 0x7a, 0x55, 0x7a, + 0xb9, 0x08, 0x08, 0x7f, 0xa1, 0x0b, 0xda, 0x00, 0x76, 0xd1, 0xab, 0x73, 0xe9, 0x15, 0xf8, 0xef, + 0x7e, 0xb7, 0xff, 0xf6, 0x4a, 0x2d, 0xb2, 0xcd, 0xeb, 0xf6, 0xec, 0x19, 0x02, 0x65, 0xe8, 0xe5, + 0x89, 0xa4, 0x0a, 0xe0, 0xef, 0x90, 0xc4, 0x49, 0x5e, 0xa7, 0xd2, 0x0e, 0x36, 0xde, 0x05, 0xc1, + 0xef, 0xbf, 0xb7, 0x4f, 0x28, 0x57, 0xfa, 0x3c, 0x91, 0x73, 0x51, 0xe7, 0x0e, 0x45, 0x8f, 0x5a, + 0xd8, 0x29, 0x93, 0x9b, 0x35, 0x0e, 0xa8, 0xe4, 0x67, 0x4c, 0x03, 0xee, 0x2d, 0x9b, 0x04, 0xe2, + 0xc4, 0xf9, 0xef, 0xf9, 0x3d, 0x49, 0xd4, 0x7a, 0xdb, 0x8e, 0xe0, 0xde, 0x80, 0xbf, 0x39, 0x3f, + 0x3d, 0x01, 0x89, 0xda, 0xf4, 0x29, 0x47, 0xdd, 0x60, 0xb7, 0x4d, 0x83, 0x1d, 0x7d, 0x13, 0x24, + 0x1f, 0xa7, 0x30, 0x1e, 0x62, 0x53, 0xcb, 0xec, 0x68, 0x3d, 0xbe, 0x6c, 0x60, 0xaa, 0x76, 0x3a, + 0xd1, 0xf9, 0xdd, 0xbb, 0x03, 0xdf, 0x8e, 0xf6, 0xc3, 0x81, 0xef, 0x57, 0x31, 0xed, 0xc8, 0x27, + 0x4e, 0x1b, 0x20, 0x48, 0xca, 0xcf, 0x9c, 0x2c, 0x28, 0xad, 0x93, 0xb3, 0x8a, 0x7b, 0x57, 0x9b, + 0x6d, 0x38, 0x5f, 0x54, 0xe0, 0x11, 0x72, 0x87, 0x5d, 0xe8, 0x54, 0x46, 0xec, 0x0a, 0x15, 0x6b, + 0x25, 0x93, 0x14, 0x47, 0x46, 0xb6, 0xb1, 0xb3, 0x2b, 0x30, 0x45, 0x78, 0x43, 0xa2, 0xbd, 0x29, + 0x31, 0xf4, 0xd2, 0x82, 0x80, 0x76, 0x79, 0x96, 0x27, 0xf1, 0x4f, 0x7d, 0x03, 0x44, 0xff, 0xe3, + 0xf7, 0xfc, 0xf2, 0x21, 0x87, 0xbb, 0xdb, 0xe6, 0x35, 0xb4, 0xd1, 0x07, 0xfb, 0xb4, 0x8a, 0x7f, + 0xe6, 0x1e, 0xdf, 0xde, 0x68, 0xd8, 0x76, 0xdd, 0x91, 0xe7, 0x86, 0xf1, 0x5f, 0x54, 0x41, 0xfd, + 0x9b, 0xd5, 0x26, 0x47, 0x91, 0x7b, 0xba, 0x48, 0x2c, 0x38, 0xf4, 0x09, 0x36, 0xfa, 0x0d, 0xa3, + 0x61, 0x33, 0x44, 0x10, 0x99, 0x83, 0x23, 0x49, 0x73, 0xcc, 0x81, 0x16, 0x7a, 0xfb, 0x1c, 0x75, + 0xd1, 0x63, 0x0a, 0xcf, 0xf4, 0xed, 0xbd, 0xe5, 0xac, 0x19, 0x0a, 0x26, 0x73, 0xce, 0x30, 0x0d, + 0x64, 0x1a, 0x2b, 0x95, 0xb6, 0x34, 0x1c, 0xa4, 0xea, 0x9a, 0x79, 0x52, 0x89, 0xc1, 0x71, 0x80, + 0x63, 0x75, 0xf3, 0x5d, 0x26, 0xf3, 0xea, 0x98, 0x8f, 0x7b, 0x23, 0x04, 0xce, 0x21, 0x1a, 0xd4, + 0x6e, 0x62, 0xde, 0x3c, 0x70, 0x68, 0x4d, 0x72, 0x95, 0x2c, 0x63, 0xfe, 0x82, 0xd4, 0x3e, 0x1d, + 0x0d, 0x9b, 0x05, 0x98, 0x06, 0x11, 0xe3, 0xdb, 0xcf, 0xf4, 0x36, 0x87, 0x8e, 0xe9, 0x10, 0x55, + 0xd0, 0xf6, 0xdc, 0x8d, 0x13, 0xb6, 0x9e, 0x15, 0x0a, 0x36, 0x4e, 0xc4, 0xb5, 0xdc, 0x6e, 0xc9, + 0x4c, 0x27, 0x3e, 0x3b, 0x18, 0xf7, 0x26, 0xed, 0xe4, 0xc0, 0xee, 0xb2, 0xd7, 0xbe, 0xcf, 0x53, + 0x7e, 0xd6, 0x15, 0xb0, 0x39, 0x18, 0x77, 0x63, 0x0d, 0xbb, 0x3a, 0x7b, 0x79, 0xc8, 0x46, 0xaa, + 0xac, 0x6a, 0xd7, 0x8a, 0xae, 0xe0, 0xdc, 0x4a, 0x9b, 0x94, 0x7b, 0x90, 0xb0, 0xbe, 0x99, 0x9b, + 0xfc, 0x77, 0xab, 0xfe, 0x89, 0xaf, 0x0f, 0x01, 0x96, 0xf8, 0x88, 0x3c, 0x5f, 0x60, 0x2a, 0xf3, + 0x4f, 0xaa, 0xdc, 0x79, 0xd2, 0x25, 0xca, 0x86, 0x32, 0x39, 0xe6, 0x1b, 0xe2, 0x20, 0x26, 0x0c, + 0x20, 0xab, 0x12, 0x0e, 0xe9, 0x83, 0x15, 0x4f, 0x16, 0x7f, 0x82, 0x1a, 0x52, 0x5e, 0x20, 0xc1, + 0xc0, 0xf4, 0x18, 0x9f, 0x8c, 0x4a, 0x38, 0xf3, 0xc3, 0x16, 0x34, 0xee, 0x26, 0x9c, 0x60, 0x0f, + 0x59, 0xaa, 0x16, 0xca, 0x31, 0x6c, 0x9b, 0x81, 0x49, 0x80, 0x89, 0x01, 0xfc, 0x14, 0x12, 0x1f, + 0x76, 0x28, 0xd3, 0xb9, 0x36, 0x87, 0x77, 0xe6, 0x62, 0x1f, 0x71, 0xb9, 0x7b, 0xe7, 0xf1, 0xa3, + 0x47, 0x8f, 0x9e, 0xb0, 0xd7, 0xa5, 0x2c, 0x13, 0xb3, 0xae, 0x9c, 0x4c, 0x99, 0x33, 0xa2, 0xb4, + 0x85, 0xb2, 0x96, 0x2a, 0x84, 0x1d, 0xa3, 0xe3, 0x19, 0xd4, 0x7a, 0xe9, 0xd8, 0x2a, 0x93, 0x54, + 0xbf, 0x39, 0xa6, 0x16, 0x6a, 0x9a, 0x70, 0x35, 0x64, 0xa9, 0x66, 0x2f, 0x2f, 0xa7, 0x0c, 0xa4, + 0xc4, 0xd6, 0xba, 0x36, 0x6c, 0x26, 0xca, 0x25, 0x16, 0x69, 0x41, 0x9b, 0x90, 0x4d, 0xce, 0x2e, + 0x42, 0x26, 0x5d, 0x12, 0xb1, 0x4a, 0x95, 0xfd, 0x5e, 0x17, 0x58, 0x33, 0x26, 0xee, 0x62, 0x2b, + 0x65, 0x20, 0xcd, 0x5a, 0x36, 0xb8, 0x9c, 0x1e, 0x05, 0xcc, 0xea, 0xb9, 0x5b, 0x09, 0x23, 0x59, + 0x33, 0x72, 0x7d, 0x86, 0xb9, 0x07, 0x69, 0xa6, 0x3f, 0x76, 0xc9, 0xf8, 0xf2, 0xd2, 0xe7, 0x95, + 0x19, 0x5f, 0x21, 0x18, 0x55, 0x66, 0x00, 0xc2, 0x57, 0xa3, 0xd4, 0x9c, 0xb8, 0xbc, 0xba, 0x11, + 0x91, 0x07, 0x07, 0x2d, 0x3a, 0x53, 0x0d, 0xf4, 0x68, 0x00, 0x66, 0x30, 0x23, 0x64, 0xc8, 0x79, + 0xd6, 0x4d, 0x94, 0x0c, 0xe3, 0x95, 0x45, 0xa3, 0x22, 0xe7, 0x58, 0x29, 0x09, 0x1d, 0xcd, 0x44, + 0x6e, 0x75, 0x8b, 0xb7, 0xcb, 0x24, 0x26, 0x07, 0x63, 0x00, 0x09, 0xeb, 0xd4, 0xf5, 0xbd, 0x55, + 0xd3, 0x4c, 0x6e, 0xde, 0xd0, 0x6c, 0x50, 0xe7, 0x29, 0x9b, 0x49, 0x9a, 0xa3, 0xcb, 0x05, 0xc4, + 0x78, 0x2c, 0xa1, 0x0e, 0x93, 0x61, 0xab, 0x3c, 0x8d, 0xe8, 0xd8, 0x68, 0x36, 0xee, 0x9d, 0x28, + 0xdb, 0x59, 0xd3, 0xec, 0x2b, 0xb5, 0x43, 0x06, 0x10, 0xc8, 0x21, 0xd3, 0x50, 0x69, 0x56, 0x0a, + 0x78, 0x8b, 0x92, 0x21, 0x4d, 0x90, 0xff, 0xb0, 0x23, 0xc1, 0x83, 0x91, 0x73, 0x14, 0x5d, 0xc6, + 0x9a, 0x0b, 0xc0, 0x06, 0x4d, 0x42, 0x7d, 0xe6, 0x1d, 0x1d, 0xa9, 0x6d, 0x4e, 0x53, 0x95, 0x20, + 0xd9, 0x9a, 0x69, 0x86, 0x30, 0x07, 0x03, 0xac, 0x1b, 0xeb, 0xbc, 0x6e, 0x35, 0xf7, 0xea, 0x73, + 0x0a, 0x13, 0xb6, 0xa5, 0x8d, 0x49, 0x69, 0x7f, 0x34, 0x54, 0x0d, 0xea, 0x27, 0xb2, 0x5c, 0x33, + 0x91, 0x24, 0x14, 0x3e, 0x60, 0xf2, 0x46, 0x3d, 0x57, 0xac, 0xe3, 0x26, 0x3a, 0x4d, 0x27, 0x65, + 0xfa, 0x9d, 0x18, 0x5e, 0xbe, 0x69, 0x63, 0x48, 0x7f, 0xcf, 0x45, 0x02, 0x7a, 0x24, 0xc8, 0x21, + 0xe7, 0x3b, 0x07, 0x5f, 0x4d, 0xda, 0xd8, 0x1d, 0xe5, 0xf9, 0x56, 0xad, 0x28, 0x53, 0xd6, 0x0e, + 0x8b, 0xc8, 0x2d, 0xac, 0x00, 0x70, 0x49, 0x89, 0xd1, 0x61, 0x6b, 0xc6, 0xff, 0x43, 0x25, 0x1c, + 0xed, 0xe0, 0xed, 0xe1, 0x03, 0xc6, 0x30, 0x06, 0x69, 0xe1, 0x10, 0xe4, 0xa5, 0x8f, 0x81, 0xa2, + 0xac, 0x48, 0x24, 0x8d, 0x8e, 0x60, 0xce, 0x66, 0x4c, 0xec, 0xb2, 0x9e, 0x98, 0x27, 0x7b, 0x30, + 0x9e, 0x74, 0x59, 0xde, 0x10, 0x0e, 0xa8, 0xe6, 0xc1, 0xf8, 0x3b, 0xf4, 0xf8, 0x9a, 0x98, 0xae, + 0x77, 0x21, 0xca, 0x5a, 0xe4, 0x3e, 0x2c, 0xdd, 0xd1, 0x0d, 0xef, 0x99, 0xf1, 0x69, 0x93, 0xc1, + 0x47, 0x26, 0xad, 0x55, 0xa9, 0xb1, 0xe9, 0xab, 0x08, 0xb6, 0x4c, 0x75, 0x74, 0xc9, 0x37, 0x36, + 0x11, 0x8b, 0xd6, 0x15, 0x48, 0xf0, 0x15, 0x26, 0x3a, 0x6d, 0x5a, 0xa3, 0x44, 0xc7, 0xe2, 0x33, + 0x87, 0x11, 0xba, 0x5c, 0x36, 0x6c, 0xd7, 0x8e, 0xeb, 0xac, 0x97, 0x21, 0xe1, 0x62, 0x3e, 0x6c, + 0x01, 0x47, 0x37, 0x22, 0x9b, 0xbb, 0xd6, 0x8c, 0xea, 0x6b, 0xa7, 0xf6, 0x4e, 0x78, 0xfb, 0x3c, + 0x1a, 0x8a, 0x4d, 0x20, 0xc6, 0xbd, 0x56, 0xdf, 0x66, 0xd1, 0x67, 0xe9, 0x8e, 0xd5, 0x7e, 0x60, + 0x6f, 0x63, 0xee, 0x67, 0x32, 0x9f, 0x72, 0x15, 0xee, 0xa1, 0x8d, 0xbe, 0x31, 0xeb, 0xa0, 0xeb, + 0xdd, 0x8e, 0xdd, 0x4f, 0x3b, 0x73, 0x6c, 0x1a, 0x4d, 0xe6, 0x11, 0x49, 0x09, 0x3f, 0xb3, 0x3a, + 0xf8, 0x69, 0xfc, 0xda, 0x6f, 0xdb, 0x20, 0xda, 0x24, 0xe5, 0x86, 0xad, 0xbe, 0x0e, 0x45, 0xe7, + 0x25, 0x6b, 0xd1, 0x00, 0x34, 0x2d, 0x12, 0xbd, 0x2d, 0x14, 0x84, 0x57, 0x07, 0xc3, 0x8d, 0x7b, + 0xc6, 0x0d, 0x30, 0x3a, 0x2c, 0x6e, 0xee, 0xd8, 0x22, 0xd2, 0xbb, 0x1d, 0x92, 0x83, 0xaf, 0x63, + 0xf2, 0x95, 0xce, 0x79, 0x2b, 0x26, 0x07, 0xe1, 0x8e, 0xf1, 0x5f, 0x02, 0xb2, 0x83, 0x07, 0x55, + 0x50, 0xef, 0x5b, 0x25, 0xd4, 0x38, 0x42, 0x2d, 0xa2, 0x45, 0x67, 0x78, 0xf3, 0x72, 0xe5, 0x4b, + 0xf3, 0xf2, 0xd7, 0xd3, 0x57, 0x6f, 0x5e, 0x9d, 0x4d, 0x4f, 0x9b, 0xbe, 0x01, 0xba, 0x35, 0xd4, + 0x63, 0x6e, 0x3d, 0x11, 0xf9, 0x70, 0xf4, 0xe8, 0x12, 0xd6, 0x50, 0xed, 0x4d, 0x79, 0x85, 0x20, + 0xd2, 0xf8, 0xad, 0x46, 0x37, 0x41, 0x03, 0x9c, 0xef, 0xd2, 0x08, 0x03, 0x97, 0x1b, 0xb9, 0xe7, + 0x89, 0xb1, 0xbd, 0xe8, 0x79, 0x75, 0xa7, 0x93, 0xab, 0xa8, 0xad, 0xcb, 0xe7, 0xb7, 0xd0, 0x7d, + 0xb8, 0xa1, 0x6e, 0xeb, 0xc9, 0x91, 0x08, 0x78, 0x46, 0x95, 0x9f, 0xa2, 0x37, 0x45, 0x5d, 0xd5, + 0x1c, 0xcd, 0x70, 0xc1, 0xea, 0x4a, 0xa5, 0x2d, 0x87, 0xee, 0x47, 0x0b, 0xb4, 0xe0, 0xac, 0x9e, + 0x45, 0xb8, 0x35, 0x0e, 0x2f, 0xb4, 0x2e, 0x31, 0x1b, 0xd6, 0xe8, 0x74, 0x43, 0x1a, 0x08, 0x87, + 0x68, 0xdd, 0xc2, 0x2c, 0xe8, 0xc7, 0x94, 0xf7, 0xb3, 0x1c, 0xfd, 0x92, 0x8f, 0xe9, 0xf5, 0xc5, + 0x05, 0x65, 0x43, 0x8f, 0x5d, 0x4b, 0x43, 0x7c, 0xc3, 0xf6, 0xa3, 0xfb, 0x0f, 0xa3, 0xfd, 0xbd, + 0xd9, 0xc1, 0xa3, 0xe8, 0xc1, 0x9f, 0xd9, 0x7f, 0xfe, 0xf5, 0x6f, 0xc2, 0x60, 0x90, 0x04, 0xec, + 0x60, 0xff, 0xe0, 0x01, 0xfb, 0x31, 0x8d, 0x74, 0x79, 0x85, 0x1f, 0xc3, 0x42, 0xa8, 0x32, 0x8a, + 0xa2, 0x9d, 0xf5, 0x43, 0x5a, 0x3f, 0x2c, 0xd0, 0x33, 0x90, 0x20, 0x9f, 0x9b, 0xf5, 0x8b, 0x17, + 0xc9, 0x76, 0xb6, 0x37, 0x13, 0xed, 0x33, 0x5d, 0x60, 0xb2, 0x62, 0x47, 0x35, 0x46, 0x41, 0xb3, + 0xad, 0x68, 0xfc, 0xcd, 0x89, 0x08, 0x01, 0xf2, 0xff, 0x03, 0x90, 0xc3, 0x8d, 0xe0, 0x1f, 0x12, + 0xb6, 0x52, 0x4b, 0x35, 0xf4, 0xd7, 0x26, 0xba, 0x2d, 0xc0, 0xbe, 0x3d, 0xb4, 0x85, 0xbd, 0xc4, + 0xc8, 0x54, 0x51, 0x9d, 0x7e, 0xe1, 0xe4, 0xee, 0x56, 0x8c, 0x2d, 0x92, 0x2e, 0x80, 0x68, 0x01, + 0x4a, 0x36, 0xfd, 0xc4, 0x56, 0x32, 0x51, 0xa0, 0x5d, 0x87, 0xd6, 0xb8, 0xdc, 0xf8, 0xda, 0x3b, + 0x62, 0x59, 0x8d, 0xce, 0xe9, 0xdf, 0xfa, 0xe1, 0x00, 0x3d, 0x10, 0xd7, 0x1e, 0xb3, 0xc6, 0x3d, + 0x1c, 0x4d, 0x5b, 0x33, 0x9a, 0x7c, 0x91, 0x2e, 0xe8, 0x0f, 0xcd, 0x4f, 0x34, 0x1e, 0xb9, 0x7e, + 0x87, 0x53, 0xcf, 0xe3, 0x98, 0x50, 0xb9, 0x37, 0x21, 0xbd, 0xff, 0xf3, 0x9e, 0x8f, 0xeb, 0xb3, + 0xcc, 0xe0, 0xba, 0xab, 0xd0, 0x4a, 0x26, 0x49, 0xb6, 0xa2, 0x1f, 0x0b, 0xda, 0xce, 0x7d, 0x8e, + 0x9e, 0x8e, 0x7b, 0x18, 0x12, 0x10, 0xe6, 0x35, 0x83, 0xc7, 0x8f, 0xe1, 0x32, 0xcb, 0xf5, 0x0c, + 0x09, 0x80, 0xbb, 0xb4, 0x19, 0x9e, 0x9f, 0x3d, 0x3b, 0x7d, 0x39, 0x39, 0xfd, 0x12, 0xf7, 0xde, + 0xc5, 0xd9, 0x94, 0xe5, 0x8d, 0x2a, 0xef, 0x2b, 0xda, 0x7d, 0x67, 0xf3, 0x44, 0x1a, 0x38, 0x08, + 0x8f, 0xac, 0xc5, 0xd0, 0x80, 0xf6, 0x82, 0x9b, 0x6b, 0xd9, 0xf1, 0xa2, 0x55, 0x15, 0x27, 0x06, + 0xf3, 0xb7, 0x7a, 0xe6, 0x2f, 0xea, 0xd4, 0xf8, 0x68, 0x4b, 0xd3, 0x65, 0x88, 0x35, 0x88, 0x33, + 0x9b, 0x5f, 0x42, 0xbe, 0x39, 0xe2, 0x7f, 0x39, 0xe1, 0xf7, 0x7e, 0x68, 0xc4, 0x1f, 0x52, 0xef, + 0xc5, 0x07, 0xdd, 0x6c, 0xe8, 0x9a, 0x43, 0xbf, 0xa0, 0xfe, 0x17, 0xea, 0x6e, 0x2b, 0x49, 0x51, 0x15, 0x00, 0x00 }; From 80a9736d0df06c7fca1dc6e94b15d7b362e1b215 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Fri, 29 Dec 2023 21:40:46 +0100 Subject: [PATCH 081/108] print WLED error codes to serial + netdebug These errors were shown in UI only, but missing in debug output. --- wled00/json.cpp | 21 +++++++++++++++++++++ wled00/wled.cpp | 4 +++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/wled00/json.cpp b/wled00/json.cpp index bf4c1cd2..7d360220 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -685,6 +685,27 @@ void serializeState(JsonObject root, bool forPreset, bool includeBri, bool segme // USER_PRINTF("serializeState %d\n", netDebugEnabled); #endif + // WLEDMM print error message to netDebug - esp32 only, as 8266 flash is very limited +#ifdef ARDUINO_ARCH_ESP32 + String errPrefix = F("\nWLED error: "); + String warnPrefix = F("WLED warning: "); + switch(errorFlag) { + case ERR_NONE: break; + case ERR_DENIED: USER_PRINTLN(errPrefix + F("Permission denied.")); break; + case ERR_NOBUF: USER_PRINTLN(warnPrefix + F("JSON buffer was not released in time, request timeout.")); break; + case ERR_JSON: USER_PRINTLN(errPrefix + F("JSON parsing failed (input too large?).")); break; + case ERR_FS_BEGIN: USER_PRINTLN(errPrefix + F("Could not init filesystem (no partition?).")); break; + case ERR_FS_QUOTA: USER_PRINTLN(errPrefix + F("FS is full or the maximum file size is reached.")); break; + case ERR_FS_PLOAD: USER_PRINTLN(warnPrefix + F("Tried loading a preset that does not exist.")); break; + case ERR_FS_IRLOAD: USER_PRINTLN(warnPrefix + F("Tried loading an IR JSON cmd, but \"ir.json\" file does not exist.")); break; + case ERR_FS_RMLOAD: USER_PRINTLN(warnPrefix + F("Tried loading a remote JSON cmd, but \"remote.json\" file does not exist.")); break; + case ERR_FS_GENERAL: USER_PRINTLN(errPrefix + F("general unspecified filesystem error.")); break; + default: USER_PRINT(errPrefix + F("error code = ")); USER_PRINTLN(errorFlag); break; + } +#else + if (errorFlag) { USER_PRINT(F("\nWLED error code = ")); USER_PRINTLN(errorFlag); } +#endif + if (errorFlag) {root[F("error")] = errorFlag; errorFlag = ERR_NONE;} //prevent error message to persist on screen root["ps"] = (currentPreset > 0) ? currentPreset : -1; diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 8f31bfbf..be897d3c 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -657,7 +657,7 @@ pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), Pin for (uint8_t i=1; i Date: Fri, 29 Dec 2023 22:53:26 +0100 Subject: [PATCH 082/108] esp32_4MB_XL was over the limits (flash usage) still only 256 bytes left for program --- platformio.ini | 11 +++++++---- wled00/json.cpp | 30 +++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/platformio.ini b/platformio.ini index 8d14f9a1..7a0ab5c5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1185,13 +1185,16 @@ build_flags = ${esp32_4MB_M_base.build_flags} extends = esp32_4MB_XL_base build_flags = ${esp32_4MB_XL_base.build_flags} -D WLED_RELEASE_NAME=esp32_4MB_XL + -D WLED_DISABLE_LOXONE ;; Over the limits + -D WLEDMM_SAVE_FLASH ;; a humble attempt to save a few extra bytes build_unflags = ${esp32_4MB_XL_base.build_unflags} - -D USERMOD_ANIMARTRIX ;; Tips our memory usage over the limit + -D USERMOD_ANIMARTRIX ;; Tips our memory usage over the limit + -D WLEDMM_FASTPATH ;; Over the limits ; RAM: [== ] 24.4% (used 80060 bytes from 327680 bytes) ; Flash: [==========] 95.3% (used 1499037 bytes from 1572864 bytes) -; HELP !!!!! : -; RAM: [== ] 24.5% (used 80356 bytes from 327680 bytes) -; Flash: [==========] 99.9% (used 1571053 bytes from 1572864 bytes) +; !!! HELP !!!!! : +; RAM: [=== ] 26.2% (used 85756 bytes from 327680 bytes) +; Flash: [==========] 100.0% (used 1572553 bytes from 1572864 bytes) ;; standard framework build for 16MB flash, optimized for speed [env:esp32_16MB_S] diff --git a/wled00/json.cpp b/wled00/json.cpp index 7d360220..b481d7b8 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -686,7 +686,7 @@ void serializeState(JsonObject root, bool forPreset, bool includeBri, bool segme #endif // WLEDMM print error message to netDebug - esp32 only, as 8266 flash is very limited -#ifdef ARDUINO_ARCH_ESP32 +#if defined(ARDUINO_ARCH_ESP32) && !defined(WLEDMM_SAVE_FLASH) String errPrefix = F("\nWLED error: "); String warnPrefix = F("WLED warning: "); switch(errorFlag) { @@ -824,6 +824,7 @@ esp_reset_reason_t getRestartReason() { } String restartCode2InfoLong(esp_reset_reason_t reason) { switch (reason) { +#if !defined(WLEDMM_SAVE_FLASH) case ESP_RST_UNKNOWN: return(F("Reset reason can not be determined")); break; case ESP_RST_POWERON: return(F("Restart due to power-on event")); break; case ESP_RST_EXT: return(F("Reset by external pin (not applicable for ESP32)")); break; @@ -835,11 +836,25 @@ String restartCode2InfoLong(esp_reset_reason_t reason) { case ESP_RST_DEEPSLEEP:return(F("Restart after exiting deep sleep mode")); break; case ESP_RST_BROWNOUT: return(F("Brownout Reset (software or hardware)")); break; case ESP_RST_SDIO: return(F("Reset over SDIO")); break; +#else + case ESP_RST_UNKNOWN: return(F("ESP_RST_UNKNOWN")); break; + case ESP_RST_POWERON: return(F("ESP_RST_POWERON")); break; + case ESP_RST_EXT: return(F("ESP_RST_EXT")); break; + case ESP_RST_SW: return(F("esp_restart()")); break; + case ESP_RST_PANIC: return(F("SW Panic or Exception")); break; + case ESP_RST_INT_WDT: return(F("ESP_RST_INT_WDT")); break; + case ESP_RST_TASK_WDT: return(F("ESP_RST_TASK_WDT")); break; + case ESP_RST_WDT: return(F("ESP_RST_WDT")); break; + case ESP_RST_DEEPSLEEP:return(F("ESP_RST_DEEPSLEEP")); break; + case ESP_RST_BROWNOUT: return(F("Brownout Reset")); break; + case ESP_RST_SDIO: return(F("ESP_RST_SDIO")); break; +#endif } return(F("unknown")); } String restartCode2Info(esp_reset_reason_t reason) { switch (reason) { +#if !defined(WLEDMM_SAVE_FLASH) case ESP_RST_UNKNOWN: return(F("unknown reason")); break; case ESP_RST_POWERON: return(F("power-on event")); break; case ESP_RST_EXT: return(F("external pin reset")); break; @@ -851,6 +866,19 @@ String restartCode2Info(esp_reset_reason_t reason) { case ESP_RST_DEEPSLEEP:return(F("exit from deep sleep")); break; case ESP_RST_BROWNOUT: return(F("Brownout Reset")); break; case ESP_RST_SDIO: return(F("Reset over SDIO")); break; +#else + case ESP_RST_UNKNOWN: return(F("unknown")); break; + case ESP_RST_POWERON: return(F("power-on")); break; + case ESP_RST_EXT: return(F("ext. pin reset")); break; + case ESP_RST_SW: return(F("SW restart")); break; + case ESP_RST_PANIC: return(F("SW panic or exception")); break; + case ESP_RST_INT_WDT: return(F("int. watchdog")); break; + case ESP_RST_TASK_WDT: return(F("task watchdog")); break; + case ESP_RST_WDT: return(F("other watchdog")); break; + case ESP_RST_DEEPSLEEP:return(F("deep sleep")); break; + case ESP_RST_BROWNOUT: return(F("Brownout")); break; + case ESP_RST_SDIO: return(F("SDIO reset")); break; +#endif } return(F("unknown")); } From b95a2094ce3e824d1bc50bea9d3278159a14e7ca Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sat, 30 Dec 2023 19:50:07 +0100 Subject: [PATCH 083/108] AR sound sync - make sequence checks user configurable to support scenarios where several sending nodes are needed. --- usermods/audioreactive/audio_reactive.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index e6da16d3..05576890 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -111,6 +111,7 @@ static volatile bool disableSoundProcessing = false; // if true, sound processing (FFT, filters, AGC) will be suspended. "volatile" as its shared between tasks. static uint8_t audioSyncEnabled = AUDIOSYNC_NONE; // bit field: bit 0 - send, bit 1 - receive, bit 2 - use local if not receiving +static bool audioSyncSequence = true; // if true, the receiver will drop out-of-sequence packets static bool udpSyncConnected = false; // UDP connection status -> true if connected to multicast group #define NUM_GEQ_CHANNELS 16 // number of frequency channels. Don't change !! @@ -1577,6 +1578,7 @@ class AudioReactive : public Usermod { if(receivedPacket->frameCounter > lastFrameCounter) sequenceOK = true; // sequence OK if((lastFrameCounter < 12) && (receivedPacket->frameCounter > 248)) sequenceOK = false; // prevent sequence "roll-back" due to late packets (1->254) if((lastFrameCounter > 248) && (receivedPacket->frameCounter < 12)) sequenceOK = true; // handle roll-over (255 -> 0) + if(audioSyncSequence == false) sequenceOK = true; // sequence checking disabled by user if((sequenceOK == false) && (receivedPacket->frameCounter != 0)) { // always accept "0" - its the legacy value DEBUGSR_PRINTF("Skipping audio frame out of order or duplicated - %u vs %u\n", lastFrameCounter, receivedPacket->frameCounter); return false; // reject out-of sequence frame @@ -2415,7 +2417,10 @@ class AudioReactive : public Usermod { if (audioSyncEnabled && udpSyncConnected && (millis() - last_UDPTime < AUDIOSYNC_IDLE_MS)) { if (receivedFormat == 1) infoArr.add(F(" v1")); if (receivedFormat == 2) infoArr.add(F(" v2")); - if (receivedFormat == 3) infoArr.add(F(" v2+")); + if (receivedFormat == 3) { + if (audioSyncSequence) infoArr.add(F(" v2+")); // Sequence checking enabled + else infoArr.add(F(" v2")); + } } #if defined(WLED_DEBUG) || defined(SR_DEBUG) || defined(SR_STATS) @@ -2567,6 +2572,7 @@ class AudioReactive : public Usermod { JsonObject sync = top.createNestedObject("sync"); sync[F("port")] = audioSyncPort; sync[F("mode")] = audioSyncEnabled; + sync[F("check_sequence")] = audioSyncSequence; } @@ -2635,6 +2641,7 @@ class AudioReactive : public Usermod { configComplete &= getJsonValue(top["sync"][F("port")], audioSyncPort); configComplete &= getJsonValue(top["sync"][F("mode")], audioSyncEnabled); + configComplete &= getJsonValue(top["sync"][F("check_sequence")], audioSyncSequence); return configComplete; } @@ -2813,7 +2820,12 @@ class AudioReactive : public Usermod { #ifdef ARDUINO_ARCH_ESP32 oappend(SET_F("addOption(dd,'Receive or Local',6);")); // AUDIOSYNC_REC_PLUS #endif - oappend(SET_F("addInfo('AudioReactive:sync:mode',1,'
Sync audio data with other WLEDs');")); + // check_sequence: Receiver skips out-of-sequence packets when enabled + oappend(SET_F("dd=addDropdown('AudioReactive','sync:check_sequence');")); + oappend(SET_F("addOption(dd,'Off',0);")); + oappend(SET_F("addOption(dd,'On',1);")); + + oappend(SET_F("addInfo('AudioReactive:sync:check_sequence',1,'when receiving
Sync audio data with other WLEDs');")); // must append this to the last field of 'sync' oappend(SET_F("addInfo('AudioReactive:digitalmic:type',1,'requires reboot!');")); // 0 is field type, 1 is actual field #ifdef ARDUINO_ARCH_ESP32 @@ -2856,7 +2868,7 @@ class AudioReactive : public Usermod { oappend(SET_F("xOpt('AudioReactive:digitalmic:pin[]',5,' ⎌',")); oappendi(ES7243_SCLPIN); oappend(");"); #endif oappend(SET_F("dRO('AudioReactive:digitalmic:pin[]',5);")); // disable read only pins -#endif +#endif } From faa62a94a3ffbc50454c41873875bafbf0f66e62 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sat, 30 Dec 2023 20:01:25 +0100 Subject: [PATCH 084/108] esp32_4MB_XL was over the limits again --- platformio.ini | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index 7a0ab5c5..7b97ceff 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1004,8 +1004,8 @@ build_flags_XL = -D USERMOD_MULTI_RELAY -D USERMOD_PIRSWITCH -D USERMOD_PWM_FAN - ; -D USERMOD_PING_PONG_CLOCK //Removed as dots is confusing - -D USERMOD_BUZZER + ; -D USERMOD_PING_PONG_CLOCK ;; Removed as dots is confusing + ; -D USERMOD_BUZZER ;; Removed as it grabs gpio32 (pin needed by audioreactive) -D USERMOD_SN_PHOTORESISTOR -D USERMOD_BME280 -D USERMOD_DHT @@ -1189,6 +1189,7 @@ build_flags = ${esp32_4MB_XL_base.build_flags} -D WLEDMM_SAVE_FLASH ;; a humble attempt to save a few extra bytes build_unflags = ${esp32_4MB_XL_base.build_unflags} -D USERMOD_ANIMARTRIX ;; Tips our memory usage over the limit + -D USERMOD_BUZZER ;; Over the limits, and steals GPIO 32 -D WLEDMM_FASTPATH ;; Over the limits ; RAM: [== ] 24.4% (used 80060 bytes from 327680 bytes) ; Flash: [==========] 95.3% (used 1499037 bytes from 1572864 bytes) From 4b89016c2d58f1ce5ff71000bb646b9e08570107 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 31 Dec 2023 00:01:29 +0100 Subject: [PATCH 085/108] audio-enhanced standard effects backported from WLED-SR --- wled00/FX.cpp | 114 +++++++++++++++++++++++++++++++++++++++++++++----- wled00/FX.h | 10 ++++- wled00/wled.h | 2 +- 3 files changed, 114 insertions(+), 12 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index ca36c440..39b9eac4 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1211,7 +1211,7 @@ static const char _data_FX_MODE_COMET[] PROGMEM = "Lighthouse@!,Fade rate;!,!;!" /* * Fireworks function. */ -uint16_t mode_fireworks() { +static uint16_t mode_fireworks_core(bool useaudio) { if (SEGLEN == 1) return mode_static(); const uint16_t width = SEGMENT.is2D() ? SEGMENT.virtualWidth() : SEGMENT.virtualLength(); const uint16_t height = SEGMENT.virtualHeight(); @@ -1227,17 +1227,44 @@ uint16_t mode_fireworks() { bool valid1 = (SEGENV.aux0 < width*height); bool valid2 = (SEGENV.aux1 < width*height); uint32_t sv1 = 0, sv2 = 0; + + // WLEDMM begin + um_data_t *um_data; + if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { + useaudio = false; // no audio - fallback to standard behaviour (don't use soundSim) + } + bool addPixels = true; // false -> inhibit new pixels in silence + unsigned myIntensity = 129 - (SEGMENT.intensity >> 1); // make parameter explicit, so we can work with it + int soundColor = -1; // -1 = random color; 0..255 = use as palette index + + if (useaudio) { + float volumeSmth = *(float*) um_data->u_data[0]; + float FFT_MajorPeak = *(float*) um_data->u_data[4]; + uint8_t samplePeak = *(uint8_t*)um_data->u_data[3]; + if ((volumeSmth > 1.0f) && (FFT_MajorPeak > 60.0f)) { // we have sound - select color based on major frequency + float musicIndex = logf(FFT_MajorPeak); // log scaling of peak freq + soundColor = mapf(musicIndex, 4.6f, 9.06f, 0, 255); // pick color from frequency (4.6 = ln(100), 9.06 = ln(8600)) + soundColor = constrain(soundColor, 0, 255); // remove over-shoot + if (samplePeak > 0) myIntensity -= myIntensity / 4; // increase effect intensity at peaks + } else { // silence -> fade away + valid1 = valid2 = false; // do not copy last pixels + addPixels = false; // don't add new pixels + } + } + // WLEDMM end + if (valid1) sv1 = SEGMENT.is2D() ? SEGMENT.getPixelColorXY(SEGENV.aux0%width, SEGENV.aux0/width) : SEGMENT.getPixelColor(SEGENV.aux0); // get spark color if (valid2) sv2 = SEGMENT.is2D() ? SEGMENT.getPixelColorXY(SEGENV.aux1%width, SEGENV.aux1/width) : SEGMENT.getPixelColor(SEGENV.aux1); if (!SEGENV.step) SEGMENT.blur(16); if (valid1) { if (SEGMENT.is2D()) SEGMENT.setPixelColorXY(SEGENV.aux0%width, SEGENV.aux0/width, sv1); else SEGMENT.setPixelColor(SEGENV.aux0, sv1); } // restore spark color after blur if (valid2) { if (SEGMENT.is2D()) SEGMENT.setPixelColorXY(SEGENV.aux1%width, SEGENV.aux1/width, sv2); else SEGMENT.setPixelColor(SEGENV.aux1, sv2); } // restore old spark color after blur + if (addPixels) // WLEDMM for (int i=0; i> 1)) == 0) { + if (random8(myIntensity) == 0) { // WLEDMM uint16_t index = random16(width*height); uint16_t j = index % width, k = index / width; - uint32_t col = SEGMENT.color_from_palette(random8(), false, false, 0); + uint32_t col = SEGMENT.color_from_palette((soundColor > 0) ? soundColor + random8(24) : random8(), false, false, 0); // WLEDMM if (SEGMENT.is2D()) SEGMENT.setPixelColorXY(j, k, col); else SEGMENT.setPixelColor(index, col); SEGENV.aux1 = SEGENV.aux0; // old spark @@ -1246,8 +1273,12 @@ uint16_t mode_fireworks() { } return FRAMETIME; } + +uint16_t mode_fireworks(void) { return mode_fireworks_core(false); } static const char _data_FX_MODE_FIREWORKS[] PROGMEM = "Fireworks@,Frequency;!,!;!;12;ix=192,pal=11"; +uint16_t mode_fireworks_audio(void) { return mode_fireworks_core(true); } +static const char _data_FX_MODE_FIREWORKS_AR[] PROGMEM = "🎉 audio Fireworks@,Frequency;!,!;!;12;ix=192,pal=11"; //Twinkling LEDs running. Inspired by https://github.com/kitesurfer1404/WS2812FX/blob/master/src/custom/Rain.h uint16_t mode_rain() { @@ -3157,7 +3188,7 @@ typedef struct Spark { * POPCORN * modified from https://github.com/kitesurfer1404/WS2812FX/blob/master/src/custom/Popcorn.h */ -uint16_t mode_popcorn(void) { +static uint16_t mode_popcorn_core(bool useaudio) { if (SEGLEN == 1) return mode_static(); //allocate segment data uint16_t strips = SEGMENT.nrOfVStrips(); @@ -3169,20 +3200,44 @@ uint16_t mode_popcorn(void) { bool hasCol2 = SEGCOLOR(2); if (!SEGMENT.check2) SEGMENT.fill(hasCol2 ? BLACK : SEGCOLOR(1)); + // WLEDMM init um_data + um_data_t *um_data; + if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { + // no audio - fallback to standard behaviour + useaudio = false; + um_data = simulateSound(SEGMENT.soundSim); // dummy + } + struct virtualStrip { - static void runStrip(uint16_t stripNr, Spark* popcorn) { + static void runStrip(uint16_t stripNr, Spark* popcorn, bool useaudio, um_data_t *um_data) { // WLEDMM added useaudio and um_data float gravity = -0.0001 - (SEGMENT.speed/200000.0); // m/s/s gravity *= SEGLEN; uint8_t numPopcorn = SEGMENT.intensity*maxNumPopcorn/255; if (numPopcorn == 0) numPopcorn = 1; + // WLEDMM audioreactive vars + float volumeSmth = *(float*) um_data->u_data[0]; + int16_t volumeRaw = *(int16_t*) um_data->u_data[1]; + uint8_t samplePeak = *(uint8_t*) um_data->u_data[3]; for(int i = 0; i < numPopcorn; i++) { if (popcorn[i].pos >= 0.0f) { // if kernel is active, update its position popcorn[i].pos += popcorn[i].vel; popcorn[i].vel += gravity; } else { // if kernel is inactive, randomly pop it - if (random8() < 2) { // POP!!! + bool doPopCorn = false; // WLEDMM allows to inhibit new pops + // WLEDMM begin + if (useaudio) { + if ( (volumeSmth > 1.0f) // no pops in silence + &&((samplePeak > 0) || (volumeRaw > 128)) // try to pop at onsets (our peek detector still sucks) + &&(random8() < 4) ) // stay somewhat random + doPopCorn = true; + } else { + if (random8() < 2) doPopCorn = true; // default POP!!! + } + // WLEDMM end + + if (doPopCorn) { // POP!!! popcorn[i].pos = 0.01f; uint16_t peakHeight = 128 + random8(128); //0-255 @@ -3210,12 +3265,16 @@ uint16_t mode_popcorn(void) { }; for (int stripNr=0; stripNru_data[0]; + int16_t volumeRaw = *(int16_t*) um_data->u_data[1]; + uint8_t samplePeak = *(uint8_t*) um_data->u_data[3]; + for (int j = 0; j < numStars; j++) { // speed to adjust chance of a burst, max is nearly always. - if (random8((144-(SEGMENT.speed >> 1))) == 0 && stars[j].birth == 0) + bool doNewStar = random8((144-(SEGMENT.speed >> 1))) == 0; // WLEDMM original spawning trigger + // WLEDMM begin + if (useaudio) { + doNewStar = false; + int burstplus = (volumeSmth > 159)? 128:0; // high volume -> more stars + if (volumeRaw <= 56) burstplus = -64; // low volume -> fewer stars + int birthrate = (144-(SEGMENT.speed >> 1)) - burstplus; + birthrate = constrain(birthrate, 0, 144); + if ( (volumeSmth > 1.0f) // no bursts in silence + && ((samplePeak > 0) || (volumeRaw > 48)) // try to burst with sound + && (random8(birthrate) == 0) ) // original random rate + doNewStar = true; + } + // WLEDMM end + + if (doNewStar && stars[j].birth == 0) // WLEDMM { // Pick a random color and location. uint16_t startPos = (SEGLEN > 1) ? random16(SEGLEN-1) : 0; @@ -3364,7 +3449,7 @@ uint16_t mode_starburst(void) { stars[j].color = CRGB(SEGMENT.color_wheel(random8())); stars[j].pos = startPos; - stars[j].vel = maxSpeed * (float)(random8())/255.0 * multiplier; + stars[j].vel = maxSpeed * (float)(random8())/255.0f * multiplier; stars[j].birth = it; stars[j].last = it; // more fragments means larger burst effect @@ -3442,8 +3527,12 @@ uint16_t mode_starburst(void) { return FRAMETIME; } #undef STARBURST_MAX_FRAG + +uint16_t mode_starburst(void) { return mode_starburst_core(false); } static const char _data_FX_MODE_STARBURST[] PROGMEM = "Fireworks Starburst@Chance,Fragments,,,,,Overlay;,!;!;;pal=11,m12=0"; +uint16_t mode_starburst_audio(void) { return mode_starburst_core(true); } +static const char _data_FX_MODE_STARBURST_AR[] PROGMEM = "🔨 audio Fw Starburst@Chance,Fragments,,,,,Overlay;,!;!;;pal=11,m12=0"; /* * Exploding fireworks effect @@ -8336,6 +8425,11 @@ void WS2812FX::setupEffectData() { addEffect(FX_MODE_WAVESINS, &mode_wavesins, _data_FX_MODE_WAVESINS); addEffect(FX_MODE_ROCKTAVES, &mode_rocktaves, _data_FX_MODE_ROCKTAVES); + // --- WLEDSR experimental 1D audio enhanced + addEffect(FX_MODE_POPCORN_AR, &mode_popcorn_audio, _data_FX_MODE_POPCORN_AR); + addEffect(FX_MODE_STARBURST_AR, &mode_starburst_audio, _data_FX_MODE_STARBURST_AR); + addEffect(FX_MODE_FIREWORKS_AR, &mode_fireworks_audio, _data_FX_MODE_FIREWORKS_AR); + // --- 2D effects --- #ifndef WLED_DISABLE_2D addEffect(FX_MODE_2DSPACESHIPS, &mode_2Dspaceships, _data_FX_MODE_2DSPACESHIPS); diff --git a/wled00/FX.h b/wled00/FX.h index 3b412387..e9043e60 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -336,7 +336,15 @@ void strip_wait_until_idle(String whoCalledMe); // WLEDMM implemented in FX_fcn. #define FX_MODE_ARTIFX 187 //WLEDMM ARTIFX #define FX_MODE_PARTYJERK 188 -#define MODE_COUNT 189 +// Experimental Audioresponsive modes from WLED-SR +// #define FX_MODE_3DSphereMove 189 // experimental WLED-SR "cube" mode +#define FX_MODE_POPCORN_AR 190 // WLED-SR audioreactive popcorn +// #define FX_MODE_MULTI_COMET_AR 191 // WLED-SR audioreactive multi-comet +#define FX_MODE_STARBURST_AR 192 // WLED-SR audioreactive fireworks starburst +// #define FX_MODE_PALETTE_AR 193 // WLED-SR audioreactive palette +#define FX_MODE_FIREWORKS_AR 194 // WLED-SR audioreactive fireworks 1D + +#define MODE_COUNT 195 typedef enum mapping1D2D { M12_Pixels = 0, diff --git a/wled00/wled.h b/wled00/wled.h index 1b14c822..5c74d605 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312290 +#define VERSION 2312310 // WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED. #define _MoonModules_WLED_ From 8e996b0b46dfe59b99a443b5cea5986afa2bd53f Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 31 Dec 2023 01:21:57 +0100 Subject: [PATCH 086/108] parameter tuning --- wled00/FX.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 39b9eac4..9eba4bc1 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1245,7 +1245,9 @@ static uint16_t mode_fireworks_core(bool useaudio) { float musicIndex = logf(FFT_MajorPeak); // log scaling of peak freq soundColor = mapf(musicIndex, 4.6f, 9.06f, 0, 255); // pick color from frequency (4.6 = ln(100), 9.06 = ln(8600)) soundColor = constrain(soundColor, 0, 255); // remove over-shoot - if (samplePeak > 0) myIntensity -= myIntensity / 4; // increase effect intensity at peaks + if (samplePeak > 0) myIntensity -= myIntensity / 2; // increase effect intensity at peaks + else if (volumeSmth > 96.0f) myIntensity -= myIntensity / 4; // increase effect intensity slightly when music plays + myIntensity = constrain(myIntensity, 0, 129); } else { // silence -> fade away valid1 = valid2 = false; // do not copy last pixels addPixels = false; // don't add new pixels @@ -3430,10 +3432,10 @@ static uint16_t mode_starburst_core(bool useaudio) { // WLEDMM begin if (useaudio) { doNewStar = false; - int burstplus = (volumeSmth > 159)? 128:0; // high volume -> more stars + int burstplus = (volumeSmth > 159)? 96:0; // high volume -> more stars if (volumeRaw <= 56) burstplus = -64; // low volume -> fewer stars int birthrate = (144-(SEGMENT.speed >> 1)) - burstplus; - birthrate = constrain(birthrate, 0, 144); + birthrate = constrain(birthrate, 4, 144); if ( (volumeSmth > 1.0f) // no bursts in silence && ((samplePeak > 0) || (volumeRaw > 48)) // try to burst with sound && (random8(birthrate) == 0) ) // original random rate From f699a56220d0142f45096a451ef9fa64d3882b97 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 31 Dec 2023 12:03:08 +0100 Subject: [PATCH 087/108] tiny correction --- wled00/FX.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/FX.h b/wled00/FX.h index e9043e60..fa7a3ef4 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -342,7 +342,7 @@ void strip_wait_until_idle(String whoCalledMe); // WLEDMM implemented in FX_fcn. // #define FX_MODE_MULTI_COMET_AR 191 // WLED-SR audioreactive multi-comet #define FX_MODE_STARBURST_AR 192 // WLED-SR audioreactive fireworks starburst // #define FX_MODE_PALETTE_AR 193 // WLED-SR audioreactive palette -#define FX_MODE_FIREWORKS_AR 194 // WLED-SR audioreactive fireworks 1D +#define FX_MODE_FIREWORKS_AR 194 // WLED-SR audioreactive fireworks #define MODE_COUNT 195 From 01c187f8aa45254e7b15fea1dcb1e4ce172e3475 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 2 Jan 2024 15:52:00 +0100 Subject: [PATCH 088/108] bugfix for #104 this avoids heap corruption, by double-checking that "use global leds" is not configured, before trying to free ledsrgb[]. It is still a mystery why Segment::_globalLeds == nullptr. --- wled00/FX.h | 7 ++++++- wled00/FX_fcn.cpp | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index fa7a3ef4..1cba9000 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -33,6 +33,7 @@ bool canUseSerial(void); // WLEDMM implemented in wled_serial.cpp void strip_wait_until_idle(String whoCalledMe); // WLEDMM implemented in FX_fcn.cpp +bool strip_uses_global_leds(void); // WLEDMM implemented in FX_fcn.cpp #define FASTLED_INTERNAL //remove annoying pragma messages #define USE_GET_MILLISECOND_TIMER @@ -516,7 +517,11 @@ typedef struct Segment { if (name) Serial.printf(" name=%s (%p)", name, name); if (data) Serial.printf(" dataLen=%d (%p)", (int)_dataLen, data); if (ledsrgb) Serial.printf(" [%sledsrgb %u bytes]", Segment::_globalLeds ? "global ":"",length()*sizeof(CRGB)); + if (strip_uses_global_leds() == true) Serial.println((Segment::_globalLeds != nullptr) ? F(" using global buffer.") : F(", using global buffer but Segment::_globalLeds is NULL!!")); Serial.println(); + #ifdef ARDUINO_ARCH_ESP32 + Serial.flush(); + #endif } #endif @@ -525,7 +530,7 @@ typedef struct Segment { strip_wait_until_idle("~Segment()"); #endif - if (!Segment::_globalLeds && (ledsrgb != nullptr)) {free(ledsrgb); ledsrgb = nullptr;} + if ((Segment::_globalLeds == nullptr) && !strip_uses_global_leds() && (ledsrgb != nullptr)) {free(ledsrgb); ledsrgb = nullptr;} // WLEDMM we need "!strip_uses_global_leds()" to avoid crashes (#104) if (name) { delete[] name; name = nullptr; } if (_t) { transitional = false; delete _t; _t = nullptr; } deallocateData(); diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 72e302dc..c62ae60d 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -82,7 +82,10 @@ void strip_wait_until_idle(String whoCalledMe) { } #endif } - +// WLEDMM another helper for segment class +bool strip_uses_global_leds(void) { + return strip.useLedsArray; +} /////////////////////////////////////////////////////////////////////////////// // Segment class implementation From 620075fc020f396a0e46a4031dede39fddbdd151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Sat, 30 Dec 2023 18:43:49 +0100 Subject: [PATCH 089/108] Merge pull request #3617 from imeszaros/cpal-mobile Make palette editor more mobile friendly --- wled00/data/cpal/cpal.htm | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/wled00/data/cpal/cpal.htm b/wled00/data/cpal/cpal.htm index e9a3799c..d91b8591 100644 --- a/wled00/data/cpal/cpal.htm +++ b/wled00/data/cpal/cpal.htm @@ -1,6 +1,7 @@ + @@ -45,6 +46,7 @@ width: 7px; top: 50%; transform: translateY(-50%); + touch-action: none; } .color-picker-marker { height: 7px; @@ -94,9 +96,14 @@ line-height: 1; } .wrap { - width: 800px; + width: 100%; margin: 0 auto; } + @media (min-width: 800px) { + .wrap { + width: 800px; + } + } .palette { height: 20px; } @@ -136,6 +143,9 @@ .sendSpan, .editSpan{ cursor: pointer; } + h1 { + font-size: 1.6rem; + } @@ -349,24 +359,31 @@ var gradientLength = maxX - minX + 1; elmnt.onmousedown = dragMouseDown; + elmnt.ontouchstart = dragMouseDown; function dragMouseDown(e) { removeTrashcan(event) e = e || window.event; - e.preventDefault(); + var isTouch = e.type.startsWith('touch'); + if (!isTouch) e.preventDefault(); // get the mouse cursor position at startup: - mousePos = e.clientX; + mousePos = isTouch ? e.touches[0].clientX : e.clientX; d.onmouseup = closeDragElement; + d.ontouchcancel = closeDragElement; + d.ontouchend = closeDragElement; // call a function whenever the cursor moves: d.onmousemove = elementDrag; + d.ontouchmove = elementDrag; } function elementDrag(e) { e = e || window.event; - e.preventDefault(); + var isTouch = e.type.startsWith('touch'); + if (!isTouch) e.preventDefault(); // calculate the new cursor position: - posNew = mousePos - e.clientX; - mousePos = e.clientX; + var clientX = isTouch ? e.touches[0].clientX : e.clientX; + posNew = mousePos - clientX; + mousePos = clientX; mousePosInGradient = mousePos - (minX + 1) truePos = Math.round((mousePosInGradient/gradientLength)*256); @@ -393,7 +410,10 @@ function closeDragElement() { /* stop moving when mouse button is released:*/ d.onmouseup = null; + d.ontouchcancel = null; + d.ontouchend = null; d.onmousemove = null; + d.ontouchmove = null; } } From aa9e8bbe4d17f5e7488546f910a24eeb365ecf11 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 1 Jan 2024 23:21:22 +0100 Subject: [PATCH 090/108] Bugfix #3632 --- wled00/data/settings_leds.htm | 2 +- wled00/wled.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm index 22aa3bf2..9082813b 100644 --- a/wled00/data/settings_leds.htm +++ b/wled00/data/settings_leds.htm @@ -27,8 +27,8 @@ // success event scE.addEventListener("load", () => { GetV(); - setABL(); checkSi(); + setABL(); if (d.um_p[0]==-1) d.um_p.shift(); }); // error event diff --git a/wled00/wled.h b/wled00/wled.h index 5c74d605..ce991533 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2312310 +#define VERSION 2401011 // WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED. #define _MoonModules_WLED_ From b6a7474efb68804d52509fb47b51b9cd6672e20b Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 2 Jan 2024 17:55:08 +0100 Subject: [PATCH 091/108] npm run build --- wled00/html_cpal.h | 604 +++++++++++++++++++++-------------------- wled00/html_settings.h | 16 +- 2 files changed, 315 insertions(+), 305 deletions(-) diff --git a/wled00/html_cpal.h b/wled00/html_cpal.h index 2eaf6a1b..22487b82 100644 --- a/wled00/html_cpal.h +++ b/wled00/html_cpal.h @@ -7,302 +7,312 @@ */ // Autogenerated from wled00/data/cpal/cpal.htm, do not edit!! -const uint16_t PAGE_cpal_L = 4721; +const uint16_t PAGE_cpal_L = 4891; const uint8_t PAGE_cpal[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xbd, 0x3b, 0x7f, 0x73, 0xdb, 0xb6, - 0x92, 0xff, 0xe7, 0x53, 0x20, 0x4c, 0x5f, 0x42, 0xd6, 0x14, 0x45, 0xd2, 0xb6, 0x64, 0x4b, 0xa2, - 0x3b, 0xa9, 0x93, 0x77, 0xce, 0x8d, 0xdd, 0x64, 0x5e, 0x7c, 0x6e, 0x7b, 0x3e, 0xbf, 0x31, 0x4d, - 0x42, 0x12, 0x1b, 0x8a, 0xe0, 0x03, 0x21, 0xd9, 0xae, 0xac, 0xef, 0x7e, 0xbb, 0x00, 0x48, 0x91, - 0x94, 0xe4, 0x24, 0xd7, 0x37, 0xd7, 0xf1, 0x44, 0x20, 0xb0, 0x58, 0xec, 0x2e, 0xf6, 0x17, 0x16, - 0xe8, 0xe8, 0xe5, 0xbb, 0x8f, 0xa7, 0x97, 0xbf, 0x7f, 0x7a, 0x4f, 0xa6, 0x62, 0x96, 0x9e, 0x90, - 0x51, 0xf9, 0x43, 0xc3, 0x18, 0x7e, 0x66, 0x54, 0x84, 0x30, 0x22, 0xf2, 0x0e, 0xfd, 0xd7, 0x3c, - 0x59, 0x04, 0xc6, 0x69, 0x18, 0x4d, 0x69, 0xe7, 0x94, 0x65, 0x82, 0xb3, 0xd4, 0x20, 0x2f, 0x22, - 0x68, 0xd1, 0x4c, 0x04, 0x46, 0xc6, 0x3a, 0x11, 0x8e, 0xd9, 0x04, 0x5a, 0x85, 0x60, 0x1c, 0x5a, - 0xb3, 0x79, 0x21, 0x3a, 0x9c, 0x2e, 0xc2, 0x34, 0x89, 0x43, 0x41, 0x8d, 0x6d, 0x08, 0x3f, 0xf1, - 0x70, 0x32, 0x0b, 0xb7, 0x61, 0xda, 0x0a, 0xfe, 0xfe, 0x21, 0x4f, 0x38, 0x2d, 0x0c, 0x52, 0x81, - 0xbb, 0x08, 0x27, 0x12, 0x91, 0xd2, 0x93, 0x17, 0xbf, 0x9e, 0xbf, 0x7f, 0x47, 0x4e, 0x61, 0x55, - 0x36, 0x23, 0x9f, 0xc2, 0x94, 0x0a, 0x41, 0xc9, 0xfb, 0x38, 0x01, 0x6a, 0x46, 0x5d, 0x05, 0x42, - 0x46, 0x45, 0xc4, 0x93, 0x5c, 0x10, 0xf1, 0x98, 0xd3, 0xc0, 0x10, 0xf4, 0x41, 0x74, 0xff, 0x08, - 0x17, 0xa1, 0xea, 0x35, 0x4e, 0x5e, 0x8c, 0xe7, 0x59, 0x24, 0x12, 0x96, 0x91, 0xc9, 0x87, 0xd8, - 0xa4, 0xd6, 0x92, 0x53, 0x31, 0xe7, 0x19, 0x89, 0x9d, 0x09, 0x15, 0xef, 0x53, 0x3a, 0x83, 0x35, - 0x7f, 0x7e, 0x94, 0x43, 0xab, 0x0a, 0x34, 0x7a, 0xdf, 0x80, 0x8c, 0x38, 0x05, 0x6e, 0x35, 0x30, - 0x02, 0x2e, 0x42, 0x4e, 0xe2, 0x20, 0x66, 0xd1, 0x1c, 0x7b, 0x5e, 0x8c, 0xba, 0x6a, 0x35, 0x24, - 0x46, 0x3c, 0x22, 0xdd, 0x77, 0x2c, 0x7e, 0x5c, 0x8e, 0x81, 0xa3, 0xce, 0x38, 0x9c, 0x25, 0xe9, - 0xe3, 0xe0, 0x2d, 0x4f, 0xc2, 0xd4, 0x2e, 0xc2, 0xac, 0xe8, 0x14, 0x94, 0x27, 0xe3, 0xe1, 0x5d, - 0x18, 0x7d, 0x99, 0x70, 0x36, 0xcf, 0xe2, 0x4e, 0xc4, 0x52, 0xc6, 0x07, 0xaf, 0x3c, 0xcf, 0x1b, - 0xca, 0x29, 0x45, 0xf2, 0x27, 0x1d, 0x78, 0xbd, 0xfc, 0x61, 0xa8, 0x47, 0xe2, 0x38, 0x1e, 0xce, - 0x42, 0x3e, 0x49, 0xb2, 0x81, 0x4b, 0x3c, 0x17, 0x06, 0xd2, 0x24, 0xa3, 0x9d, 0x29, 0x4d, 0x26, - 0x53, 0x31, 0x70, 0x0e, 0x57, 0xaf, 0xf2, 0x90, 0x03, 0x21, 0x1d, 0x94, 0x61, 0x08, 0x43, 0x7c, - 0x99, 0xb3, 0x22, 0x41, 0x56, 0x06, 0x9c, 0xa6, 0xa1, 0x48, 0x16, 0x74, 0x78, 0x9f, 0xc4, 0x62, - 0x3a, 0xf0, 0x5c, 0xf7, 0x6f, 0x43, 0x3d, 0xd1, 0x07, 0x4c, 0xab, 0x57, 0x77, 0x4c, 0x80, 0x74, - 0x4f, 0x37, 0x67, 0x86, 0x77, 0x05, 0x4b, 0xe7, 0x82, 0xea, 0xa5, 0x3b, 0x82, 0xe5, 0x83, 0x43, - 0x39, 0x65, 0xc2, 0xc3, 0x38, 0xc1, 0xf5, 0xee, 0xd8, 0xc3, 0x72, 0x13, 0x2f, 0xb6, 0x57, 0x8e, - 0xa4, 0xbd, 0x03, 0x73, 0xbf, 0x50, 0x6e, 0xeb, 0xaf, 0x3c, 0x89, 0xe0, 0x4b, 0x77, 0x6e, 0x59, - 0xe9, 0x8e, 0xf1, 0x18, 0xc6, 0x11, 0xfd, 0xbc, 0x18, 0xec, 0x03, 0xa3, 0x1b, 0x62, 0x2a, 0x92, - 0x74, 0x41, 0xb9, 0x86, 0x1c, 0xf8, 0xf9, 0x03, 0x81, 0xb9, 0x49, 0x4c, 0xf8, 0xe4, 0x2e, 0x34, - 0x7b, 0x47, 0xb6, 0xfa, 0x73, 0x0e, 0xad, 0xe1, 0x9f, 0x9d, 0x24, 0x8b, 0xe9, 0xc3, 0xc0, 0x6f, - 0xd2, 0xb2, 0xd4, 0x54, 0xee, 0xa3, 0x1c, 0x15, 0xf1, 0x7d, 0x68, 0x29, 0xee, 0xfe, 0x36, 0x14, - 0x1c, 0xf6, 0x68, 0xcc, 0xf8, 0x6c, 0x20, 0x5b, 0x20, 0x3c, 0xfa, 0xbb, 0xd9, 0x81, 0x11, 0x6b, - 0xb5, 0x95, 0x09, 0x8d, 0xad, 0xbf, 0x81, 0xcc, 0x3b, 0x44, 0x29, 0xc4, 0x14, 0x94, 0x96, 0xee, - 0xe6, 0x58, 0x4f, 0x3f, 0xac, 0xa6, 0x63, 0xeb, 0x1b, 0xc4, 0xf0, 0x6a, 0x3c, 0x1e, 0x97, 0x42, - 0xd8, 0xaf, 0x84, 0xf0, 0xea, 0xf8, 0xce, 0x3f, 0xf2, 0x8f, 0xe4, 0xfa, 0xbe, 0x0f, 0xdc, 0x6c, - 0xc8, 0x40, 0x11, 0xbf, 0x9b, 0x10, 0xaf, 0x22, 0xc4, 0xab, 0x08, 0x91, 0xcd, 0x92, 0xa5, 0x0a, - 0xa5, 0x57, 0x92, 0x59, 0x53, 0xdf, 0xad, 0x4a, 0xbd, 0x72, 0xee, 0xe6, 0xa0, 0x62, 0x59, 0x94, - 0x86, 0x45, 0xb1, 0xcc, 0xc3, 0x38, 0x4e, 0xb2, 0xc9, 0xc0, 0xad, 0x34, 0x7a, 0x08, 0xfb, 0x29, - 0x92, 0x28, 0x4c, 0x3b, 0xe0, 0x56, 0x26, 0xd9, 0x40, 0x29, 0xe4, 0x0e, 0x5c, 0x6d, 0x75, 0x25, - 0x45, 0x1e, 0x66, 0xcb, 0x38, 0x29, 0xf2, 0x34, 0x7c, 0x1c, 0x24, 0x99, 0x34, 0x8c, 0x71, 0x4a, - 0x1f, 0x86, 0x12, 0x59, 0x27, 0x11, 0x74, 0x56, 0x0c, 0x22, 0x50, 0x56, 0x50, 0x9a, 0x9a, 0xe8, - 0x6a, 0x86, 0x06, 0x3a, 0xd4, 0x26, 0x61, 0x96, 0xc4, 0x71, 0x4a, 0x57, 0xaf, 0x92, 0x6c, 0xcc, - 0x2a, 0xe4, 0x86, 0x31, 0x44, 0xef, 0xa2, 0x41, 0xbe, 0x8a, 0x72, 0xd3, 0x02, 0x6b, 0x76, 0xb4, - 0x61, 0xc4, 0x20, 0xa5, 0x7b, 0x1e, 0xe6, 0xda, 0x9a, 0x8e, 0x5c, 0x1c, 0xaf, 0x4c, 0x3e, 0x9c, - 0x0b, 0xb6, 0x72, 0x72, 0xe5, 0xff, 0x96, 0x75, 0xeb, 0x2d, 0x3b, 0xff, 0x43, 0x5b, 0x64, 0xb1, - 0x44, 0xde, 0x61, 0x6f, 0x6a, 0x40, 0x9b, 0xea, 0x54, 0x4d, 0x2b, 0x2e, 0x40, 0x88, 0xcb, 0x96, - 0x7d, 0xd7, 0x3c, 0x85, 0x04, 0xbc, 0x64, 0x79, 0xb9, 0xe6, 0x38, 0x51, 0x3e, 0x06, 0x56, 0xfa, - 0x8b, 0xb2, 0x68, 0xf1, 0x0e, 0xcb, 0x94, 0x2c, 0x7c, 0x92, 0xae, 0xac, 0x92, 0xfa, 0xae, 0xbd, - 0xdc, 0x42, 0x51, 0x5b, 0xbe, 0xff, 0x56, 0x0a, 0x95, 0x0e, 0x17, 0xef, 0x92, 0xc5, 0x56, 0x6d, - 0xd3, 0x6b, 0xa7, 0x74, 0xdc, 0x30, 0x66, 0xb9, 0x47, 0x14, 0x02, 0xd6, 0x67, 0x50, 0x53, 0xdb, - 0x29, 0x68, 0x16, 0x63, 0x6b, 0x19, 0xcd, 0x79, 0x01, 0x94, 0xe4, 0x2c, 0x41, 0xba, 0x56, 0x18, - 0x41, 0x64, 0xe0, 0x20, 0xa3, 0xae, 0x0e, 0xd4, 0x18, 0x41, 0xe0, 0x27, 0x4e, 0x16, 0x24, 0x89, - 0x03, 0x03, 0x95, 0x03, 0x62, 0x24, 0x9a, 0x90, 0xfe, 0xd0, 0x83, 0x2f, 0xe4, 0xc4, 0xc0, 0x68, - 0xc8, 0xeb, 0x0f, 0x88, 0x98, 0xc9, 0xf8, 0xb1, 0x94, 0x8c, 0x66, 0x1f, 0xa7, 0x4c, 0xbd, 0xed, - 0x33, 0x36, 0x25, 0x8c, 0xd0, 0xc5, 0x62, 0x52, 0x81, 0x2b, 0x8e, 0xf6, 0x31, 0x2c, 0x95, 0x1e, - 0xb4, 0x57, 0x29, 0x69, 0x87, 0xcb, 0x1e, 0xe8, 0x30, 0xc8, 0x22, 0xa1, 0xf7, 0x3f, 0xb3, 0x07, - 0x08, 0xe4, 0xc4, 0x25, 0xfb, 0x3e, 0xfc, 0x19, 0x27, 0xa3, 0x3c, 0x14, 0x53, 0xf2, 0x62, 0x9c, - 0xa4, 0x69, 0x60, 0xbc, 0x72, 0xdd, 0x7d, 0xd8, 0x02, 0x03, 0x42, 0xa8, 0x71, 0xd1, 0x23, 0xbe, - 0x3f, 0x3d, 0x5a, 0x1c, 0x9c, 0xf5, 0xfe, 0xbc, 0xf0, 0x0e, 0x88, 0x77, 0x30, 0x3d, 0x58, 0x1c, - 0x4d, 0x3b, 0x07, 0xf0, 0x75, 0x04, 0xb1, 0xae, 0xfa, 0xf2, 0x7d, 0xd2, 0x43, 0xb8, 0x69, 0xe7, - 0xe8, 0x4f, 0xa3, 0x7b, 0x02, 0x02, 0x5b, 0x4c, 0x4e, 0x5e, 0x00, 0x89, 0x20, 0x4e, 0x29, 0x21, - 0x94, 0x9b, 0x71, 0xf2, 0x5c, 0xc2, 0x80, 0xa0, 0x52, 0xc2, 0x1e, 0xfe, 0x0b, 0xc2, 0x2b, 0x45, - 0x88, 0xd3, 0xdb, 0x11, 0xd4, 0xa8, 0x09, 0xbf, 0x1e, 0xef, 0x80, 0x17, 0x3d, 0xb5, 0x8e, 0xe1, - 0xfb, 0x36, 0xa1, 0xc4, 0x5b, 0x5a, 0x21, 0x26, 0x4b, 0x6a, 0x67, 0xeb, 0x76, 0xd9, 0x82, 0x04, - 0x33, 0xac, 0x14, 0x40, 0x7f, 0x02, 0xff, 0xa7, 0x73, 0x8e, 0x74, 0xa7, 0x8f, 0x24, 0xc9, 0xc8, - 0xbc, 0xa0, 0x24, 0x52, 0xbc, 0x97, 0x88, 0x48, 0x8b, 0xda, 0xbf, 0x4e, 0x34, 0xfa, 0x44, 0xb9, - 0x72, 0x0a, 0xa1, 0x84, 0x40, 0xb2, 0x24, 0xa6, 0x94, 0x94, 0x12, 0x22, 0x54, 0xca, 0x9a, 0x08, - 0x46, 0xc0, 0xcf, 0x93, 0x8c, 0xde, 0x13, 0x69, 0x73, 0xa4, 0x80, 0xf0, 0x04, 0x79, 0x00, 0x02, - 0xab, 0x19, 0xb2, 0x9b, 0xc6, 0x04, 0x44, 0x4a, 0xee, 0x68, 0xca, 0xee, 0x65, 0xaf, 0x02, 0xc3, - 0xe9, 0xd1, 0x34, 0xcc, 0x26, 0x94, 0x24, 0xa2, 0x50, 0xa0, 0x8e, 0x5e, 0x10, 0xa1, 0x9a, 0xf3, - 0x20, 0x1c, 0x81, 0xeb, 0xc6, 0x55, 0xcd, 0x30, 0x8b, 0x31, 0x8f, 0x1c, 0x27, 0x7c, 0x66, 0x21, - 0x12, 0x15, 0x7d, 0x1d, 0xf2, 0x31, 0x8b, 0x28, 0x19, 0x27, 0x59, 0x52, 0x4c, 0x69, 0x6c, 0x83, - 0x14, 0x4b, 0x4c, 0x21, 0xe7, 0x88, 0x21, 0x42, 0x36, 0x18, 0x99, 0xe7, 0x29, 0x0b, 0x63, 0x40, - 0x08, 0x6d, 0x1c, 0x8d, 0x69, 0x91, 0xe0, 0x5a, 0x45, 0xca, 0x84, 0x43, 0x2e, 0x99, 0xe4, 0x8e, - 0xd0, 0x87, 0x04, 0x64, 0x94, 0x4d, 0x4a, 0x19, 0xd7, 0xf1, 0xe5, 0x34, 0x8b, 0x92, 0x54, 0x22, - 0x74, 0xc8, 0x8b, 0x2d, 0x42, 0xff, 0x7e, 0x99, 0x4b, 0xed, 0x2c, 0x04, 0x38, 0xa5, 0xe8, 0x53, - 0xa5, 0x2f, 0x5f, 0x51, 0x17, 0x04, 0xdf, 0xa9, 0x32, 0x6f, 0x17, 0x61, 0x92, 0x86, 0x77, 0x29, - 0x48, 0x5b, 0x62, 0xfd, 0x9a, 0xae, 0xc8, 0x9f, 0x51, 0x57, 0x3b, 0x24, 0x9d, 0x6d, 0xbf, 0xd8, - 0x95, 0x6e, 0x63, 0x6a, 0x5c, 0x6a, 0x03, 0x7a, 0x01, 0xcc, 0xba, 0x9b, 0x06, 0x64, 0xd9, 0x11, - 0xac, 0x18, 0x05, 0x1d, 0xcf, 0xce, 0x1f, 0x4e, 0x59, 0x1a, 0x2c, 0x57, 0xb6, 0xd0, 0xbf, 0x9c, - 0x46, 0x22, 0xa8, 0x4d, 0xc7, 0x24, 0xfd, 0x67, 0xcc, 0x01, 0x40, 0xde, 0xb0, 0xff, 0xd0, 0xf9, - 0x0f, 0x80, 0x30, 0x2d, 0xbb, 0x84, 0x39, 0xa7, 0xd9, 0x44, 0x4c, 0x03, 0x9c, 0xe7, 0x48, 0x0f, - 0x65, 0xcf, 0x3e, 0x8e, 0xc7, 0x45, 0x70, 0x01, 0xfe, 0xc6, 0x91, 0xd9, 0x83, 0xd9, 0x04, 0xed, - 0xfa, 0x87, 0xbd, 0xae, 0x6f, 0x75, 0x0e, 0x6d, 0xcd, 0xf6, 0x5b, 0xce, 0xc3, 0xc7, 0xe0, 0xfa, - 0xc6, 0x06, 0x87, 0xf2, 0x39, 0x5c, 0xd0, 0xe0, 0x8d, 0x74, 0x7b, 0x0d, 0xaf, 0xe7, 0x1f, 0xae, - 0xbd, 0x1e, 0xb6, 0x5b, 0x4e, 0xce, 0x3f, 0x80, 0xbf, 0xd2, 0xc9, 0x49, 0x1f, 0x87, 0x21, 0x46, - 0xba, 0x37, 0xdf, 0xb7, 0x3d, 0xff, 0xad, 0xe7, 0xda, 0x1e, 0x02, 0xc2, 0x0f, 0xf1, 0x7c, 0xdb, - 0x6f, 0xf6, 0x6c, 0x05, 0x69, 0x42, 0x20, 0xc8, 0x45, 0x1f, 0xfe, 0x39, 0x87, 0x31, 0xaf, 0x7f, - 0xe5, 0x1d, 0x9c, 0x79, 0xbd, 0x2b, 0xcf, 0x3d, 0xf3, 0xfc, 0xab, 0xfe, 0x39, 0x0e, 0xfc, 0x77, - 0xe5, 0x14, 0xdf, 0x20, 0x27, 0xe8, 0xf3, 0xfe, 0xbd, 0x9c, 0x20, 0x51, 0xa7, 0x3d, 0xe7, 0xa0, - 0x6f, 0xfb, 0x40, 0x31, 0x36, 0x24, 0xe1, 0xa7, 0x48, 0x8f, 0x73, 0xb8, 0x4f, 0xd4, 0x90, 0xaf, - 0xf8, 0x3b, 0x95, 0x7d, 0xf8, 0xe9, 0x97, 0xe3, 0xbe, 0x82, 0xd6, 0x53, 0xf5, 0xb8, 0x84, 0xbe, - 0xf0, 0x0e, 0x1d, 0xcf, 0xee, 0x3b, 0x6e, 0xff, 0x14, 0x5a, 0xfe, 0x81, 0x6c, 0x12, 0x68, 0xee, - 0x1f, 0x41, 0xd3, 0xf3, 0xb1, 0x79, 0x08, 0x2d, 0x7f, 0xff, 0xdc, 0xeb, 0x39, 0xfd, 0xbe, 0x7d, - 0xe4, 0x1c, 0xc2, 0x02, 0xf0, 0xd3, 0x87, 0xb1, 0xbe, 0x7d, 0x2c, 0xc1, 0xe5, 0xc8, 0xb1, 0xe3, - 0x1f, 0x9d, 0x03, 0x38, 0x34, 0x3d, 0x57, 0xb6, 0xf7, 0x01, 0x08, 0x20, 0x71, 0xee, 0x01, 0x36, - 0x11, 0xcd, 0x29, 0x34, 0x8f, 0x7c, 0x8d, 0xfb, 0xc0, 0x39, 0xee, 0x55, 0x2b, 0x2a, 0x32, 0x2e, - 0x60, 0x96, 0xb7, 0x0f, 0xb3, 0x8e, 0x3c, 0x44, 0xe6, 0x1d, 0x23, 0xb2, 0xa3, 0xfe, 0xf9, 0x31, - 0xf6, 0xc2, 0x42, 0xc7, 0xfb, 0x67, 0x08, 0x76, 0x85, 0x68, 0xfa, 0xe7, 0x6b, 0xe0, 0xda, 0x1e, - 0x0c, 0xab, 0xb3, 0x24, 0xa8, 0xe6, 0xc7, 0xb1, 0x89, 0xa7, 0xc9, 0xff, 0x37, 0xd5, 0xae, 0x1d, - 0x64, 0xd3, 0xe4, 0xcb, 0xc7, 0xac, 0x4c, 0xad, 0xd4, 0xa1, 0x76, 0xc6, 0x16, 0xf4, 0x92, 0x87, - 0xc5, 0x34, 0x0a, 0x33, 0xe8, 0xb1, 0xc1, 0x51, 0x9f, 0x9a, 0x35, 0xa4, 0xd4, 0x61, 0xb0, 0x0c, - 0x15, 0xbf, 0x75, 0x9b, 0xe8, 0x7f, 0x04, 0xf4, 0x56, 0xed, 0x90, 0x2c, 0xe7, 0x51, 0x1b, 0x4e, - 0xec, 0x86, 0xb5, 0x04, 0x53, 0x22, 0x1c, 0x4d, 0x9a, 0x05, 0x2f, 0x3d, 0xc8, 0xb3, 0xb2, 0x42, - 0x90, 0xb0, 0xc1, 0xee, 0xbf, 0xe6, 0x94, 0x3f, 0x7e, 0x06, 0x87, 0x1c, 0x81, 0xab, 0x7e, 0x9b, - 0xa6, 0xa6, 0xd1, 0x38, 0x96, 0x19, 0xd6, 0x30, 0x19, 0x9b, 0xa1, 0x03, 0x47, 0xaf, 0xf7, 0x61, - 0x34, 0x35, 0x4d, 0x61, 0x73, 0x2b, 0x38, 0x59, 0x0a, 0x94, 0xd3, 0x5b, 0x21, 0x78, 0x02, 0x19, - 0x18, 0x35, 0x8d, 0x38, 0x14, 0x61, 0x47, 0xf0, 0x39, 0x85, 0x8c, 0xcd, 0xb0, 0x82, 0x80, 0xbe, - 0x7e, 0x6d, 0xc2, 0x9a, 0xae, 0xb5, 0x02, 0x4e, 0x9c, 0x54, 0x52, 0x7a, 0xe2, 0xf5, 0xcb, 0x5e, - 0x9b, 0x59, 0xea, 0x18, 0x8f, 0xd8, 0xe9, 0x89, 0xfb, 0xfa, 0x35, 0x1d, 0xf9, 0x87, 0x87, 0x16, - 0x2c, 0x63, 0xa2, 0xab, 0xca, 0x02, 0x6f, 0x98, 0x8d, 0x02, 0xaf, 0xf7, 0xfa, 0x35, 0x1f, 0x41, - 0x73, 0x6f, 0xcf, 0x92, 0x1e, 0x4b, 0x92, 0x76, 0xa1, 0x28, 0xdb, 0xcb, 0xac, 0xa7, 0x27, 0x93, - 0x07, 0x99, 0x35, 0xa4, 0x29, 0x84, 0x58, 0x1e, 0xd0, 0xa1, 0x61, 0x04, 0x81, 0x80, 0x45, 0x80, - 0xfb, 0x57, 0xc6, 0x9e, 0xe9, 0xf5, 0xfa, 0xfd, 0xbe, 0xef, 0x1d, 0xfe, 0xa8, 0xe4, 0x08, 0x71, - 0x88, 0xcd, 0x4c, 0x6b, 0x34, 0x72, 0x2d, 0x47, 0xb0, 0xcf, 0x40, 0x7c, 0x36, 0x01, 0x18, 0x0b, - 0xf2, 0xdc, 0xf8, 0xb3, 0x08, 0xb9, 0x30, 0x7b, 0xb6, 0xe1, 0x1a, 0x96, 0xa5, 0x25, 0x95, 0x06, - 0xd1, 0x7b, 0xd3, 0xc0, 0xfc, 0x04, 0xc4, 0x90, 0x3a, 0xd2, 0x65, 0xff, 0x12, 0xce, 0xc0, 0x6a, - 0x1b, 0x22, 0xb2, 0x53, 0x07, 0xbd, 0x7b, 0x83, 0x36, 0xbe, 0x5e, 0xc0, 0x82, 0xf1, 0x62, 0xb7, - 0xb0, 0x6c, 0xfa, 0x0c, 0x00, 0xe0, 0x34, 0x6c, 0xb1, 0x03, 0x40, 0xe9, 0x83, 0xa1, 0xf4, 0x0f, - 0x61, 0x60, 0xeb, 0xdf, 0x2f, 0x50, 0x31, 0x20, 0x12, 0x52, 0x48, 0x96, 0x40, 0x5e, 0x18, 0x02, - 0x0d, 0x1b, 0x72, 0x8f, 0xfc, 0xef, 0x73, 0x0e, 0xa1, 0x90, 0x7f, 0xe2, 0x2c, 0x97, 0xf8, 0xd0, - 0xfd, 0x38, 0x98, 0x18, 0x3f, 0xaf, 0xb9, 0x3f, 0x52, 0x6b, 0x4f, 0x2e, 0xb0, 0x67, 0x80, 0x5b, - 0xd2, 0x82, 0x49, 0xa4, 0x60, 0x92, 0x2c, 0x9f, 0x0b, 0x54, 0x10, 0x47, 0x45, 0x1d, 0x29, 0x00, - 0xc3, 0x4e, 0x9c, 0x45, 0x98, 0xce, 0x69, 0x20, 0xa0, 0xb5, 0x21, 0x32, 0x75, 0xd0, 0x45, 0xa0, - 0x4a, 0x64, 0x9f, 0x54, 0x57, 0x53, 0x64, 0xc9, 0x16, 0x66, 0xd4, 0x7a, 0xf6, 0x3c, 0xc7, 0x22, - 0x57, 0x69, 0x3c, 0xdb, 0x41, 0x35, 0xdf, 0x51, 0x7e, 0x9a, 0x7e, 0x29, 0x77, 0xb3, 0xa8, 0xef, - 0x66, 0xb1, 0x8b, 0xb4, 0x6a, 0x53, 0x8b, 0x36, 0x85, 0x5b, 0xb7, 0xb6, 0x78, 0x66, 0x71, 0x96, - 0xe2, 0xea, 0x00, 0x52, 0x93, 0x75, 0x5d, 0xf0, 0x40, 0xf9, 0x8e, 0x11, 0x4d, 0x71, 0x5c, 0xa7, - 0x98, 0xa3, 0x95, 0x70, 0xb4, 0x12, 0xd0, 0xef, 0xb8, 0x4e, 0x7e, 0xa3, 0x98, 0x61, 0xd8, 0xb1, - 0x24, 0x5c, 0x75, 0x6e, 0xa5, 0x39, 0xde, 0x4d, 0x33, 0x05, 0xd3, 0x56, 0x33, 0x4f, 0x91, 0x71, - 0x2c, 0xaa, 0x21, 0xfc, 0x0e, 0x32, 0xd7, 0x7a, 0xb4, 0xae, 0x0a, 0xc8, 0x79, 0x81, 0xd6, 0x81, - 0x8a, 0xf7, 0x5d, 0xe3, 0x75, 0x4f, 0x14, 0xe6, 0x90, 0xa6, 0xc5, 0xa7, 0xd3, 0x24, 0x8d, 0xcd, - 0xc4, 0xda, 0x39, 0x94, 0xee, 0x1e, 0x02, 0x23, 0x70, 0x5f, 0x06, 0xfc, 0xf5, 0x6b, 0x10, 0x92, - 0xfc, 0xdd, 0x05, 0x18, 0x5b, 0x76, 0x5d, 0x9c, 0xb3, 0xf0, 0x0b, 0xbd, 0xa0, 0xef, 0x78, 0x38, - 0x31, 0xd1, 0xcb, 0xa0, 0x39, 0x5b, 0xb0, 0x6f, 0x54, 0x5c, 0x32, 0x96, 0x8a, 0x24, 0x57, 0x52, - 0xac, 0x8f, 0x35, 0x75, 0xd0, 0xac, 0xb9, 0xdf, 0xf6, 0xc8, 0x52, 0x6d, 0x25, 0xfd, 0x4e, 0xa7, - 0xbb, 0x91, 0x82, 0xd1, 0x0d, 0x17, 0xac, 0x10, 0x33, 0x99, 0xca, 0xd1, 0x6b, 0x7e, 0x03, 0x94, - 0x39, 0x9c, 0x42, 0xfe, 0x1a, 0xd1, 0xa6, 0xa3, 0xb4, 0x1b, 0x76, 0x66, 0x59, 0x4a, 0xf6, 0xc3, - 0xef, 0x9b, 0xa7, 0xfb, 0x60, 0xf6, 0xf6, 0x1d, 0x65, 0xb6, 0xc4, 0xf5, 0xfc, 0xe0, 0x33, 0x4e, - 0x8e, 0x59, 0x55, 0x78, 0x92, 0xb0, 0xcf, 0x85, 0x17, 0x3b, 0xfb, 0x8a, 0xcf, 0x0a, 0xb5, 0x00, - 0xaf, 0xb3, 0x1b, 0x58, 0x1b, 0x45, 0x78, 0x1d, 0x42, 0x6b, 0xb5, 0x56, 0x1d, 0x65, 0x0c, 0x81, - 0x81, 0xa5, 0x82, 0x90, 0x77, 0xca, 0x6e, 0x13, 0x8e, 0x18, 0xf2, 0xcc, 0x6c, 0xd8, 0x1f, 0xef, - 0xfe, 0xc0, 0x10, 0x0f, 0x9d, 0x3c, 0xa1, 0x85, 0x29, 0xf1, 0x59, 0xeb, 0x4d, 0xb8, 0x86, 0x10, - 0x7b, 0x83, 0xdb, 0xd0, 0xc4, 0xb8, 0x17, 0xdc, 0xda, 0xe4, 0x87, 0xa5, 0x58, 0xc1, 0x3f, 0x74, - 0x95, 0x3f, 0xdc, 0x6e, 0xac, 0xb9, 0x17, 0x18, 0x96, 0xd1, 0x50, 0xe1, 0xb6, 0xcc, 0x82, 0xe6, - 0x84, 0xb5, 0x6e, 0xb5, 0xdc, 0x38, 0xe6, 0x0d, 0xd4, 0xc1, 0x4e, 0xfc, 0x0a, 0x27, 0x21, 0x02, - 0xd5, 0x75, 0x51, 0x79, 0xa0, 0xed, 0xe9, 0xc5, 0x96, 0x89, 0xb6, 0xd4, 0x08, 0xa7, 0xe0, 0x91, - 0xae, 0xa9, 0x37, 0x34, 0xa3, 0x52, 0x0a, 0xd4, 0x01, 0xe9, 0x2e, 0x1a, 0x4b, 0xe5, 0x3b, 0x56, - 0x5a, 0x48, 0x1f, 0xfd, 0x2c, 0x99, 0x35, 0xf3, 0x03, 0x04, 0x18, 0xfe, 0x45, 0xe0, 0xda, 0xfc, - 0x9b, 0xb2, 0x32, 0x16, 0x70, 0x47, 0x6e, 0x98, 0x1d, 0x42, 0x4b, 0x7a, 0xd5, 0x2c, 0x60, 0x9d, - 0x70, 0xcf, 0x5b, 0xa7, 0x7a, 0xa9, 0xc9, 0xad, 0x25, 0x24, 0x0a, 0xfc, 0xe9, 0xe9, 0x1e, 0x4e, - 0xa5, 0xec, 0xde, 0x51, 0x54, 0x39, 0x39, 0x97, 0x8d, 0x77, 0x74, 0x1c, 0xce, 0x53, 0xc4, 0x26, - 0x3a, 0x1c, 0x59, 0x83, 0xbe, 0xdf, 0x20, 0x81, 0x5a, 0xb7, 0x67, 0x0c, 0xce, 0xf0, 0x9f, 0x58, - 0xf1, 0xa1, 0xca, 0xd9, 0x02, 0xd1, 0x31, 0x61, 0x11, 0x98, 0x02, 0x4a, 0x09, 0x23, 0x75, 0x85, - 0xdc, 0x84, 0xee, 0x66, 0x32, 0x4b, 0xb3, 0x59, 0x1a, 0x5f, 0x6a, 0x78, 0xfa, 0xbc, 0x86, 0x6b, - 0xb4, 0xe8, 0xa4, 0x74, 0x53, 0xb9, 0xaa, 0x35, 0x86, 0x97, 0x81, 0x1e, 0xc0, 0x74, 0x47, 0x83, - 0xf4, 0x0e, 0x7e, 0x12, 0xd3, 0xa4, 0xf8, 0x28, 0x13, 0x83, 0xc0, 0x1d, 0x94, 0x58, 0xbc, 0x63, - 0xbf, 0x3e, 0xd0, 0x1f, 0xd4, 0x3e, 0xf6, 0xe5, 0xe6, 0x6c, 0x4b, 0x06, 0x32, 0x69, 0x4b, 0x1a, - 0x47, 0x3d, 0x0b, 0xd0, 0x8a, 0xf2, 0x7f, 0xf2, 0x1b, 0x72, 0x91, 0xfa, 0x8a, 0x5f, 0x45, 0xd6, - 0x88, 0x64, 0x7f, 0x01, 0x4f, 0xcb, 0x09, 0xee, 0x42, 0x43, 0x9f, 0x4d, 0xd6, 0x4a, 0x69, 0x6c, - 0x46, 0x07, 0xba, 0x19, 0x15, 0x6a, 0x3a, 0x9e, 0x40, 0x24, 0x88, 0x1d, 0x96, 0x49, 0xdd, 0x98, - 0xe7, 0x41, 0x36, 0x4f, 0x53, 0xbb, 0xea, 0x40, 0x93, 0x91, 0x5d, 0x2b, 0x5a, 0x76, 0x81, 0x9a, - 0x66, 0x41, 0x39, 0x7d, 0xb7, 0x61, 0x99, 0x34, 0xa0, 0x5f, 0x57, 0x6b, 0xe0, 0xb0, 0x54, 0xe5, - 0x3a, 0x11, 0x49, 0x8b, 0x82, 0x74, 0x55, 0xf3, 0x35, 0x9b, 0xfc, 0x2d, 0xdb, 0xa2, 0x91, 0x57, - 0x7d, 0x86, 0x7d, 0x0b, 0xae, 0xee, 0x59, 0x6d, 0x5e, 0x91, 0x01, 0x79, 0x06, 0x06, 0xfd, 0xbf, - 0xb5, 0xba, 0xad, 0x49, 0xab, 0x99, 0x82, 0x68, 0x97, 0x80, 0xb9, 0x50, 0x9c, 0x2c, 0x20, 0x38, - 0xa2, 0xf6, 0xbe, 0xab, 0x69, 0x45, 0x50, 0x77, 0x5a, 0x36, 0x8e, 0x9e, 0xae, 0x77, 0x5e, 0xc6, - 0xc7, 0xf6, 0x8c, 0x86, 0x9a, 0xa8, 0xd5, 0x4a, 0x0d, 0x01, 0xdd, 0x58, 0xa3, 0xa8, 0xeb, 0xf0, - 0xf7, 0x22, 0xaa, 0x54, 0xad, 0x8d, 0xee, 0x5b, 0x11, 0xed, 0xd0, 0x5c, 0x9b, 0x43, 0x1e, 0x43, - 0xb9, 0x32, 0xdf, 0xdf, 0x02, 0xcf, 0xd5, 0x1d, 0xbf, 0x35, 0xc4, 0xb0, 0xcb, 0x63, 0x3a, 0x0f, - 0x9d, 0xc6, 0x7c, 0x3d, 0xf9, 0xf7, 0x6f, 0x9b, 0xfc, 0xb8, 0x07, 0x67, 0x6a, 0x21, 0x13, 0x4c, - 0x81, 0x9a, 0x68, 0xe0, 0x47, 0x06, 0x19, 0xe4, 0xd9, 0xe5, 0xc5, 0xb9, 0x2e, 0x6c, 0x6c, 0xa9, - 0x5c, 0x90, 0x87, 0x59, 0x9a, 0x15, 0x81, 0x81, 0x37, 0xcc, 0x83, 0x6e, 0xf7, 0xfe, 0xfe, 0xde, - 0xb9, 0xdf, 0x77, 0x18, 0x9f, 0x74, 0x7d, 0xd7, 0x75, 0xf1, 0x68, 0x6e, 0x10, 0x79, 0x96, 0x0e, - 0x0c, 0xbc, 0xff, 0x33, 0x88, 0x2a, 0x85, 0xe8, 0x2f, 0x5d, 0xf7, 0xd0, 0x05, 0x13, 0x2c, 0x7f, - 0x0c, 0x5e, 0x1d, 0x1d, 0xc1, 0x44, 0x77, 0x08, 0x9d, 0x9c, 0x7d, 0xa1, 0x03, 0x02, 0x1d, 0xf8, - 0x5f, 0xd9, 0xd1, 0x51, 0x65, 0x15, 0xd2, 0xc1, 0x4b, 0x04, 0xdd, 0x15, 0x03, 0xbd, 0x21, 0x56, - 0x95, 0x06, 0xc4, 0x75, 0x3c, 0x9b, 0x1c, 0x0d, 0x55, 0xa9, 0xfb, 0xd8, 0xde, 0xbf, 0x3a, 0x38, - 0x3b, 0xb8, 0xea, 0x9d, 0x1d, 0x5e, 0x79, 0xc7, 0x6f, 0x7d, 0xdb, 0x97, 0xe5, 0x1d, 0x97, 0xf4, - 0x6d, 0xdf, 0x3b, 0xf3, 0xfa, 0xb5, 0x1e, 0x2c, 0x39, 0x1c, 0x03, 0xa0, 0xef, 0xc2, 0x0c, 0xef, - 0xf0, 0x6a, 0xff, 0xec, 0xf8, 0xa2, 0x6f, 0xf7, 0xce, 0xb0, 0xf4, 0x73, 0x7c, 0xd6, 0xbf, 0xea, - 0x01, 0xb2, 0xa3, 0x2b, 0xaf, 0x7f, 0xe6, 0x79, 0x57, 0x47, 0x30, 0x86, 0x05, 0x08, 0xf9, 0x79, - 0x08, 0x9f, 0xde, 0x7e, 0xbd, 0x18, 0x24, 0xb4, 0xcf, 0x29, 0x6f, 0x38, 0x02, 0xa3, 0xbc, 0xf3, - 0x33, 0xaa, 0x31, 0xe9, 0x9c, 0xf4, 0xe6, 0x2a, 0xc7, 0x5b, 0x8e, 0x40, 0x30, 0xd5, 0x03, 0xbf, - 0xab, 0x81, 0xd8, 0xc1, 0x42, 0x60, 0x23, 0xc9, 0x05, 0xef, 0x20, 0x9e, 0xcf, 0xf4, 0x85, 0xa3, - 0xca, 0xeb, 0xbf, 0xb0, 0x98, 0x3a, 0xca, 0xbf, 0xac, 0xa7, 0xb6, 0xf5, 0x73, 0x17, 0x68, 0x0b, - 0x6e, 0x87, 0xf1, 0x3c, 0x37, 0x7d, 0x03, 0xd8, 0x6a, 0xdb, 0xf0, 0x57, 0x67, 0xef, 0x58, 0xfb, - 0x1b, 0x57, 0xdd, 0x92, 0xcf, 0x6f, 0x4f, 0x90, 0x9e, 0x39, 0x39, 0x35, 0xdd, 0xf3, 0x57, 0x32, - 0x9e, 0x8d, 0x74, 0x6c, 0x29, 0xad, 0x49, 0x55, 0x65, 0x95, 0x61, 0x21, 0x06, 0x11, 0x72, 0x30, - 0x44, 0x0c, 0xf4, 0xd0, 0x83, 0x89, 0x80, 0xfc, 0x31, 0xe5, 0xef, 0x4e, 0xd6, 0x70, 0x10, 0x29, - 0x55, 0x9d, 0xdf, 0x44, 0x6c, 0x3d, 0x8f, 0x9b, 0x7e, 0xf9, 0xb5, 0x7e, 0x68, 0x41, 0x82, 0xe4, - 0xbd, 0x16, 0x46, 0x11, 0xf9, 0x25, 0x2f, 0x74, 0xac, 0x61, 0x59, 0x8e, 0xfa, 0x15, 0x0d, 0x6d, - 0xd4, 0x73, 0xdd, 0x9f, 0x4a, 0xdd, 0xd4, 0x45, 0x74, 0x7c, 0x60, 0x92, 0x51, 0x63, 0xb0, 0xd1, - 0xad, 0xee, 0xe7, 0x8c, 0xda, 0x9a, 0x61, 0x1a, 0xfd, 0xe7, 0xe7, 0x8f, 0xbf, 0x98, 0xaa, 0x5e, - 0x45, 0x83, 0x37, 0xcb, 0xb2, 0x84, 0x6e, 0x0c, 0xae, 0xdf, 0x0c, 0xf5, 0x83, 0x8f, 0x56, 0x42, - 0x2e, 0x5a, 0xf9, 0x38, 0x9c, 0x8a, 0x64, 0x3e, 0x2e, 0x30, 0x67, 0x32, 0x29, 0xa4, 0xd9, 0x36, - 0x0a, 0x11, 0x12, 0x72, 0x4c, 0xc7, 0x6d, 0xe3, 0x87, 0x25, 0x77, 0x0a, 0x60, 0x9f, 0x9a, 0x9e, - 0xb5, 0x32, 0x30, 0x2f, 0x47, 0x98, 0x9b, 0x15, 0x98, 0x42, 0x2d, 0x4c, 0x67, 0x60, 0x8c, 0xa0, - 0x09, 0xff, 0x25, 0xaf, 0x1c, 0x70, 0x63, 0xd4, 0xe5, 0x83, 0x24, 0x6f, 0x4d, 0xa7, 0x7d, 0xdb, - 0xd5, 0x04, 0x62, 0x96, 0xef, 0xfc, 0x51, 0xb0, 0xec, 0xb6, 0x71, 0x06, 0xac, 0xe6, 0xc0, 0x29, - 0x41, 0xc5, 0x2f, 0x1e, 0xe0, 0xad, 0xcb, 0x6f, 0x17, 0xe7, 0x67, 0xe0, 0x03, 0xff, 0x41, 0xe1, - 0x04, 0x58, 0x08, 0xc8, 0x5e, 0xb1, 0xf3, 0xe7, 0x94, 0xdd, 0xc1, 0x79, 0xe2, 0xc6, 0x5e, 0x62, - 0x1d, 0x65, 0x60, 0x80, 0x11, 0xa7, 0x78, 0x75, 0x02, 0xa8, 0xba, 0x88, 0xda, 0x58, 0xc1, 0xe9, - 0x7f, 0x8b, 0xe6, 0xe1, 0x22, 0x86, 0x6d, 0x96, 0x67, 0x41, 0x86, 0x1e, 0x83, 0x4d, 0xa4, 0x72, - 0xc3, 0xee, 0x17, 0x39, 0xf4, 0xd1, 0x4b, 0xfa, 0x20, 0x6c, 0x83, 0x74, 0x88, 0x21, 0x6d, 0xc3, - 0xc1, 0xbb, 0x85, 0x39, 0x16, 0x8b, 0x18, 0x70, 0xf3, 0x19, 0x4e, 0x9f, 0xe1, 0xa4, 0xd4, 0x9f, - 0x0f, 0x82, 0xce, 0x60, 0xb3, 0x53, 0x1a, 0x7f, 0x0a, 0x53, 0xbc, 0x0f, 0xd0, 0x59, 0x05, 0x82, - 0x22, 0x2d, 0xce, 0x94, 0xd3, 0x71, 0x60, 0x74, 0x81, 0x1c, 0x7b, 0x1b, 0x39, 0x94, 0x73, 0x2c, - 0xff, 0xd0, 0x16, 0x39, 0xc6, 0x7b, 0xec, 0x1f, 0x10, 0x59, 0xe8, 0x6a, 0x0c, 0x90, 0xcf, 0x92, - 0x98, 0x41, 0x9b, 0x36, 0x4c, 0x3d, 0x92, 0x19, 0x65, 0x73, 0x61, 0x4a, 0xe6, 0x56, 0xb6, 0x47, - 0xf7, 0x2d, 0xb9, 0x2a, 0x03, 0xf7, 0x66, 0x1a, 0x9f, 0x3e, 0x7e, 0xbe, 0x84, 0xdd, 0xed, 0x2a, - 0x39, 0x83, 0x32, 0xa2, 0x80, 0x43, 0x29, 0xcb, 0xbf, 0x33, 0x3e, 0x7b, 0x07, 0x89, 0x45, 0xa9, - 0x34, 0xa1, 0x76, 0x89, 0x2a, 0xdd, 0x80, 0x63, 0x26, 0x56, 0xd3, 0xb8, 0xbc, 0xf1, 0x35, 0x43, - 0xcb, 0x7e, 0xe9, 0xad, 0xc2, 0xe2, 0x31, 0x8b, 0xc8, 0xfa, 0x39, 0x12, 0x15, 0x1f, 0xb2, 0x31, - 0x03, 0x5d, 0x4c, 0xc6, 0xe6, 0xb4, 0x10, 0xc1, 0x9a, 0x7d, 0x06, 0x3b, 0x06, 0x3d, 0x65, 0x35, - 0xd3, 0xb5, 0x04, 0x7f, 0xac, 0x2c, 0x25, 0xbc, 0x0f, 0x13, 0x41, 0xc6, 0x54, 0x80, 0x32, 0x96, - 0x71, 0xce, 0xd8, 0x03, 0xf0, 0x3d, 0x43, 0x6e, 0x62, 0x57, 0x5e, 0xd0, 0xa1, 0x15, 0x29, 0x48, - 0x2a, 0xb5, 0xc6, 0xb4, 0x86, 0x72, 0x4a, 0x79, 0x85, 0x64, 0x9a, 0xea, 0x12, 0x46, 0x38, 0xf2, - 0x17, 0x42, 0xb0, 0xb0, 0x3a, 0xa0, 0xaf, 0x40, 0x02, 0xe0, 0xa5, 0x56, 0x25, 0x59, 0x29, 0x6c, - 0x2c, 0xcf, 0xc8, 0xd2, 0x67, 0xb3, 0xd7, 0x00, 0x9b, 0xce, 0x98, 0x20, 0x49, 0x0c, 0xfb, 0x93, - 0x8c, 0x1f, 0x09, 0x52, 0x0e, 0x19, 0x56, 0x8b, 0xd3, 0xe6, 0xc2, 0x80, 0xbb, 0x7e, 0xf3, 0xa2, - 0x99, 0x0c, 0xdc, 0x21, 0x96, 0x64, 0xd1, 0x2c, 0xe1, 0x3c, 0x31, 0x14, 0xa3, 0x80, 0x0e, 0xc5, - 0xde, 0xde, 0xda, 0x41, 0xdc, 0x6a, 0x56, 0x7f, 0x58, 0x02, 0xab, 0xab, 0xb5, 0x55, 0x08, 0x6d, - 0x15, 0xc3, 0xb5, 0x8c, 0x44, 0x43, 0x46, 0xa0, 0x0c, 0x5c, 0x77, 0x88, 0x52, 0x14, 0x0d, 0x02, - 0xf2, 0x79, 0x31, 0x85, 0x83, 0x9b, 0x66, 0x5d, 0xb4, 0x59, 0xbf, 0x95, 0x6a, 0xa5, 0x90, 0xe1, - 0xad, 0x1f, 0x5a, 0x1b, 0x19, 0x73, 0x36, 0x93, 0x07, 0xef, 0x01, 0xb9, 0x85, 0x8d, 0x5e, 0xad, - 0xb6, 0xb0, 0x34, 0xf2, 0xc0, 0x3f, 0x6c, 0xae, 0x54, 0x72, 0x3f, 0xb8, 0x76, 0xed, 0x7e, 0xf9, - 0x07, 0x47, 0xae, 0xea, 0xe3, 0x66, 0x55, 0x56, 0x28, 0x44, 0x80, 0x8b, 0xa1, 0x03, 0x2e, 0xa8, - 0xd9, 0x30, 0x24, 0x54, 0x9e, 0x96, 0x15, 0xc9, 0xfa, 0x39, 0x50, 0x8f, 0x62, 0xd4, 0x42, 0xc3, - 0x3b, 0x61, 0x08, 0xbd, 0x52, 0xc3, 0xe8, 0x89, 0x7f, 0x70, 0x68, 0xe9, 0x9a, 0x1b, 0xf6, 0x82, - 0x1f, 0xc0, 0x65, 0x44, 0x92, 0xcd, 0xe9, 0x4a, 0x4d, 0xe0, 0x81, 0xee, 0xc7, 0x6d, 0xc0, 0xf2, - 0xf9, 0xb0, 0x8e, 0x8c, 0x8d, 0x09, 0x97, 0xa8, 0x5e, 0x2a, 0x6e, 0x92, 0x42, 0xfe, 0x82, 0x80, - 0x9f, 0x9e, 0x0e, 0x5e, 0x06, 0x01, 0xd5, 0x7c, 0x5b, 0x4b, 0x79, 0x07, 0x70, 0xc7, 0x69, 0xf8, - 0x65, 0xb5, 0x46, 0x20, 0x10, 0x01, 0xb5, 0x60, 0xbe, 0x91, 0xcd, 0x67, 0x77, 0x90, 0x61, 0x42, - 0xbc, 0x01, 0x37, 0x04, 0xbd, 0xe2, 0xe9, 0x49, 0x8c, 0x5c, 0xf8, 0xe7, 0x04, 0xe4, 0xf0, 0xf4, - 0xf4, 0xf2, 0x17, 0x39, 0x0e, 0x0b, 0x7c, 0xc8, 0x04, 0x9d, 0x80, 0xc9, 0x0b, 0xab, 0x81, 0x74, - 0x85, 0x44, 0xb0, 0xaf, 0x30, 0x03, 0xc7, 0xf4, 0x6b, 0xae, 0x49, 0xea, 0x78, 0x37, 0x28, 0x1d, - 0x59, 0xad, 0x0b, 0xc2, 0x6b, 0xf7, 0x66, 0xad, 0x57, 0xd7, 0x8e, 0xe3, 0x84, 0x37, 0x43, 0x0a, - 0x9d, 0x01, 0xee, 0x02, 0x57, 0xbb, 0x04, 0x0a, 0xbf, 0x2a, 0x41, 0xda, 0xf1, 0x00, 0x24, 0xea, - 0xcc, 0xc2, 0x7c, 0x5d, 0x9a, 0x31, 0x97, 0xb0, 0x3e, 0xc4, 0x9f, 0x71, 0x1a, 0xca, 0x90, 0xbe, - 0x4d, 0xc1, 0x60, 0x99, 0xd2, 0x88, 0x60, 0x8c, 0x0b, 0xd3, 0xb8, 0xc4, 0x5b, 0x70, 0x7c, 0x17, - 0x89, 0x82, 0xa9, 0xee, 0x60, 0x21, 0xd8, 0x92, 0x59, 0x52, 0x14, 0xc9, 0x44, 0x29, 0xd9, 0x23, - 0x9b, 0x73, 0x72, 0xc7, 0xd9, 0x7d, 0x01, 0x12, 0x21, 0xbf, 0xb3, 0x39, 0x29, 0xa6, 0x6c, 0x9e, - 0xc6, 0x24, 0xe7, 0xec, 0x2e, 0xbc, 0x4b, 0x1f, 0x89, 0x76, 0x40, 0xfa, 0xce, 0x7a, 0x16, 0xc2, - 0xa6, 0x43, 0x2a, 0x00, 0xcb, 0x64, 0x31, 0xc1, 0x8d, 0x04, 0xc5, 0x97, 0xd7, 0xda, 0x30, 0x21, - 0xa7, 0x1c, 0x26, 0x8c, 0xf1, 0x82, 0x1e, 0x2f, 0xab, 0xcb, 0x35, 0x15, 0x15, 0x58, 0x91, 0x02, - 0x69, 0x83, 0x8b, 0x85, 0xb8, 0x44, 0xee, 0x28, 0x80, 0x51, 0x8d, 0x1c, 0xf5, 0x7e, 0x4a, 0x39, - 0x75, 0xc0, 0x19, 0x5e, 0x20, 0x71, 0xf0, 0x2d, 0x27, 0xc5, 0x15, 0x92, 0x97, 0xe0, 0x1d, 0xcb, - 0xc9, 0xda, 0xd6, 0xdf, 0x25, 0x8b, 0xa2, 0x9e, 0x8c, 0x6c, 0x1d, 0xae, 0x36, 0x62, 0xe3, 0x41, - 0xe6, 0xfa, 0x79, 0x04, 0x3a, 0xb3, 0xcd, 0xe1, 0xd6, 0x9d, 0x38, 0x9a, 0xb9, 0x92, 0x37, 0xca, - 0x0d, 0x0e, 0xe8, 0x11, 0xa6, 0x29, 0x90, 0xba, 0x40, 0xec, 0x4e, 0x52, 0x81, 0x07, 0xcb, 0xe0, - 0x44, 0x1e, 0xdb, 0x67, 0xd2, 0xd0, 0xbb, 0xff, 0xd4, 0xf8, 0xff, 0x27, 0xfe, 0xa1, 0x0b, 0x5b, - 0xd6, 0xd2, 0x54, 0x6e, 0xb5, 0x33, 0xd5, 0xca, 0x41, 0x71, 0x70, 0x50, 0x7c, 0xb4, 0xc5, 0xe2, - 0x87, 0x7c, 0xed, 0xb1, 0x58, 0x50, 0x07, 0xb8, 0xe6, 0x37, 0x76, 0x18, 0xb4, 0x5f, 0x92, 0xea, - 0x53, 0x66, 0xe8, 0xd4, 0x1e, 0x83, 0x18, 0x7b, 0xdc, 0x0e, 0x55, 0xd1, 0x1d, 0x23, 0x1e, 0x86, - 0xbf, 0x4a, 0x12, 0x46, 0xe9, 0x18, 0xb2, 0x52, 0x27, 0xbf, 0xd0, 0xc7, 0xc2, 0x64, 0x16, 0x28, - 0x2f, 0x60, 0xc1, 0xc0, 0x03, 0x21, 0x0d, 0x2b, 0xbc, 0xf2, 0xf8, 0xa1, 0xbc, 0x47, 0x21, 0x6b, - 0x7b, 0xe0, 0x9d, 0x4d, 0x76, 0x9d, 0xdd, 0xac, 0x6f, 0x9c, 0x76, 0x10, 0x93, 0xd6, 0x89, 0x29, - 0xf3, 0x54, 0x20, 0xaa, 0xba, 0x90, 0xd9, 0x31, 0x4f, 0xdd, 0xb3, 0xac, 0x5f, 0x49, 0x21, 0x1f, - 0x49, 0x9b, 0x8f, 0xda, 0xf0, 0xfa, 0xb2, 0x64, 0x03, 0x61, 0x75, 0x73, 0x22, 0x9f, 0x32, 0xe8, - 0x27, 0x53, 0x88, 0xaf, 0x70, 0xf0, 0x15, 0x21, 0x24, 0x96, 0xeb, 0x7a, 0x05, 0x38, 0xa4, 0x66, - 0x26, 0x05, 0x8e, 0x1c, 0x2f, 0x03, 0xb6, 0x95, 0x0f, 0x8c, 0xcf, 0x14, 0xdf, 0x87, 0xa8, 0x17, - 0x33, 0xb5, 0x97, 0x2a, 0xf8, 0xbc, 0x83, 0x00, 0x7e, 0xbc, 0x41, 0x59, 0x9f, 0x31, 0xf5, 0x73, - 0x00, 0xbb, 0x68, 0x33, 0x51, 0x51, 0x54, 0xb2, 0x10, 0xed, 0x64, 0x21, 0x92, 0x2c, 0x94, 0xef, - 0xbf, 0x90, 0x85, 0x68, 0x1b, 0x0b, 0x48, 0x38, 0xe4, 0x13, 0x78, 0x67, 0x2f, 0xe9, 0x8f, 0x76, - 0x94, 0x3f, 0x4e, 0x59, 0xfe, 0xa8, 0xa8, 0x85, 0x1c, 0x73, 0x55, 0x9a, 0x1e, 0xb2, 0xa0, 0x98, - 0xb9, 0x85, 0xbc, 0xa7, 0xc9, 0x01, 0xa2, 0x84, 0xbe, 0x16, 0x07, 0x15, 0x41, 0x78, 0xaf, 0xb2, - 0x5d, 0xd5, 0xaa, 0x07, 0x85, 0xa8, 0x12, 0xa0, 0xf3, 0x79, 0x60, 0x18, 0x95, 0x01, 0x50, 0x30, - 0x00, 0x3a, 0x42, 0x75, 0x2a, 0x15, 0x1f, 0x32, 0x5c, 0xdf, 0xaa, 0xc2, 0x2f, 0x8e, 0xa0, 0x47, - 0x46, 0x5f, 0xaf, 0xd4, 0x0f, 0x6f, 0x4b, 0x95, 0xaf, 0x57, 0x63, 0x7b, 0xde, 0x8d, 0x95, 0x43, - 0xc6, 0xfc, 0xea, 0x87, 0x65, 0xd5, 0x81, 0x95, 0x6c, 0xd1, 0x05, 0x1f, 0xfc, 0xa3, 0xe7, 0xba, - 0xab, 0xbf, 0xd9, 0xe4, 0x56, 0x5e, 0xb7, 0x2e, 0x11, 0x4e, 0xbe, 0xee, 0xad, 0xc3, 0x62, 0xed, - 0x5b, 0x7f, 0xf9, 0x8d, 0xaf, 0x7d, 0xfc, 0xf2, 0xac, 0x0d, 0x5c, 0x98, 0x84, 0xfb, 0x10, 0xa7, - 0x83, 0x5c, 0x27, 0xe7, 0xae, 0xdd, 0xf1, 0xb7, 0xdd, 0x2b, 0x7d, 0x98, 0x81, 0xf3, 0x0c, 0x6e, - 0x77, 0xd5, 0xeb, 0x71, 0xa9, 0x7c, 0x65, 0xdd, 0x96, 0x46, 0xaa, 0x6e, 0xc6, 0x36, 0xde, 0x2f, - 0x82, 0xb6, 0x95, 0x46, 0x1b, 0x04, 0xd9, 0x4f, 0x49, 0xeb, 0xfa, 0x68, 0x10, 0xe9, 0x75, 0xd5, - 0xf3, 0xb9, 0x73, 0x3c, 0x7f, 0x1b, 0xf2, 0x3d, 0x86, 0xcd, 0x5f, 0x06, 0x32, 0x25, 0x7b, 0xfd, - 0xba, 0x39, 0x29, 0xc2, 0xfb, 0xed, 0xd6, 0xfd, 0x54, 0xd8, 0xbe, 0xcb, 0x6a, 0x2c, 0x4a, 0x1b, - 0xa3, 0xa1, 0x05, 0x11, 0xaa, 0xd9, 0x51, 0xab, 0xc2, 0xd5, 0x55, 0x90, 0x62, 0x05, 0x71, 0xe3, - 0xe6, 0xe8, 0x8d, 0xbc, 0x15, 0xbd, 0x4e, 0xe2, 0x7f, 0x36, 0xaf, 0x53, 0x6f, 0xde, 0xac, 0x0f, - 0x47, 0x98, 0x92, 0xd3, 0x5d, 0x07, 0x46, 0x7d, 0xc5, 0xb7, 0x89, 0x18, 0x8d, 0xa5, 0x86, 0x57, - 0x57, 0xa3, 0x6e, 0x6c, 0xd2, 0x1a, 0x68, 0xd4, 0x79, 0x1b, 0xc3, 0x8d, 0x32, 0xd6, 0x77, 0x11, - 0x34, 0x54, 0x19, 0x67, 0x2d, 0xcf, 0x9a, 0xd4, 0x42, 0x8f, 0xb1, 0x47, 0xad, 0x6d, 0xc5, 0xc4, - 0xd2, 0xc3, 0x1a, 0x96, 0xd5, 0x32, 0x0a, 0xb1, 0xcd, 0x22, 0x20, 0xaf, 0xaa, 0xb2, 0xaa, 0xad, - 0x46, 0x21, 0x94, 0x45, 0x30, 0xf9, 0x98, 0x40, 0x7d, 0x28, 0xdd, 0x67, 0x01, 0x68, 0xfe, 0x25, - 0x3b, 0xa3, 0x0f, 0xa6, 0xea, 0xb6, 0x85, 0xd4, 0x78, 0xf9, 0xb3, 0x7f, 0x63, 0x29, 0xad, 0x96, - 0x2f, 0x31, 0xb8, 0xcd, 0xaa, 0x93, 0x54, 0x11, 0x71, 0x06, 0x92, 0x75, 0x6d, 0xb7, 0xbe, 0xc7, - 0x15, 0x2a, 0x48, 0x5b, 0x6c, 0xbe, 0x0e, 0x54, 0x26, 0x1d, 0x8d, 0xbc, 0x1e, 0xa4, 0x60, 0xa3, - 0xa3, 0x27, 0xde, 0x7c, 0xb0, 0xa0, 0x4f, 0x37, 0x48, 0x96, 0xe1, 0x1a, 0x58, 0x37, 0x04, 0x37, - 0x67, 0xf6, 0x3a, 0xac, 0xcc, 0xf5, 0xf6, 0xd8, 0xaa, 0x3a, 0xc8, 0x94, 0xab, 0xef, 0x3a, 0x40, - 0xe2, 0x91, 0xff, 0x19, 0x20, 0x38, 0x49, 0x26, 0x7f, 0xd2, 0x12, 0xac, 0x71, 0xa3, 0xba, 0xf3, - 0xe6, 0xbb, 0xf1, 0xbc, 0x45, 0x3f, 0x65, 0x71, 0xf5, 0x2f, 0x3e, 0xf3, 0xd8, 0xa8, 0xb7, 0xd4, - 0xff, 0x5f, 0x8d, 0xae, 0xfa, 0x5f, 0x63, 0xfe, 0x17, 0x66, 0xba, 0xb1, 0x98, 0x32, 0x33, 0x00, - 0x00 + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xbd, 0x3b, 0x6b, 0x73, 0xdb, 0x38, + 0x92, 0xdf, 0xf3, 0x2b, 0x10, 0x26, 0x93, 0x90, 0x63, 0x8a, 0x22, 0x29, 0x5b, 0xb2, 0x25, 0xd1, + 0xd9, 0x8c, 0x93, 0x3d, 0xe7, 0xca, 0x9e, 0xa4, 0x36, 0x3e, 0xcf, 0xcc, 0xf9, 0xbc, 0x65, 0x9a, + 0x84, 0x24, 0x4e, 0x28, 0x82, 0x0b, 0x42, 0xb2, 0x1d, 0x59, 0xff, 0xfd, 0xba, 0x01, 0x90, 0x22, + 0xf5, 0x70, 0x92, 0x9b, 0xad, 0x9b, 0x72, 0x45, 0x20, 0xd0, 0x68, 0x74, 0x37, 0xfa, 0x05, 0x34, + 0x66, 0xf8, 0xfc, 0xdd, 0xc7, 0x93, 0x8b, 0x3f, 0x3e, 0xbd, 0x27, 0x13, 0x31, 0x4d, 0x8f, 0xc9, + 0xb0, 0xfc, 0xa1, 0x61, 0x0c, 0x3f, 0x53, 0x2a, 0x42, 0x92, 0x85, 0x53, 0x1a, 0x18, 0xf3, 0x84, + 0xde, 0xe5, 0x8c, 0x0b, 0x83, 0x3c, 0x8b, 0x58, 0x26, 0x68, 0x26, 0x02, 0xe3, 0x2e, 0x89, 0xc5, + 0x24, 0x88, 0xe9, 0x3c, 0x89, 0x68, 0x4b, 0x7e, 0xd8, 0x49, 0x96, 0x88, 0x24, 0x4c, 0x5b, 0x45, + 0x14, 0xa6, 0x34, 0xf0, 0xec, 0x29, 0x74, 0x4c, 0x67, 0xd3, 0xf2, 0xdb, 0x28, 0x91, 0x3e, 0x9b, + 0x08, 0x91, 0xb7, 0xe8, 0xbf, 0x66, 0xc9, 0x3c, 0x30, 0x4e, 0xc2, 0x68, 0x42, 0x5b, 0x27, 0x80, + 0x96, 0xb3, 0xd4, 0x20, 0x15, 0xfe, 0x8c, 0xb5, 0x22, 0x1c, 0xb2, 0x09, 0xb4, 0x0a, 0xc1, 0x38, + 0xb4, 0xa6, 0xb3, 0x42, 0xb4, 0x38, 0x9d, 0x87, 0x69, 0x12, 0x87, 0x82, 0x6e, 0x47, 0xf8, 0x89, + 0x87, 0xe3, 0x69, 0xb8, 0x05, 0x53, 0x05, 0x5e, 0x87, 0x7e, 0x7f, 0x9f, 0x27, 0x9c, 0x16, 0x35, + 0x70, 0x17, 0xe0, 0x9e, 0x0d, 0x45, 0x22, 0x52, 0x7a, 0xfc, 0xdb, 0xd9, 0xfb, 0x77, 0xe4, 0x04, + 0x56, 0x65, 0x53, 0xf2, 0x09, 0x98, 0x10, 0x82, 0x92, 0xf7, 0x71, 0x02, 0xd4, 0x0c, 0xdb, 0x0a, + 0x82, 0x0c, 0x8b, 0x88, 0x27, 0xb9, 0x20, 0xe2, 0x21, 0x07, 0x49, 0x09, 0x7a, 0x2f, 0xda, 0x7f, + 0x86, 0xf3, 0x50, 0xf5, 0x1a, 0xc7, 0xcf, 0x46, 0xb3, 0x2c, 0x12, 0x09, 0xcb, 0xc8, 0xf8, 0x43, + 0x6c, 0x52, 0x6b, 0xc1, 0xa9, 0x98, 0xf1, 0x8c, 0xc4, 0xce, 0x98, 0x8a, 0xf7, 0x29, 0x9d, 0xc2, + 0x9a, 0xbf, 0x3c, 0xc8, 0xa1, 0x65, 0x05, 0x1a, 0xbd, 0x6f, 0x40, 0x46, 0x9c, 0x02, 0xb7, 0x1a, + 0x18, 0x01, 0xe7, 0x21, 0x27, 0x71, 0x10, 0xb3, 0x68, 0x86, 0x3d, 0xcf, 0x86, 0x6d, 0xb5, 0x1a, + 0x12, 0x23, 0x1e, 0x80, 0xa8, 0x67, 0xb7, 0x2c, 0x7e, 0x58, 0x8c, 0x80, 0xa3, 0xd6, 0x28, 0x9c, + 0x26, 0xe9, 0x43, 0xff, 0x2d, 0x87, 0x8d, 0xb1, 0x8b, 0x30, 0x2b, 0x5a, 0x05, 0xe5, 0xc9, 0x68, + 0x70, 0x1b, 0x46, 0x5f, 0xc6, 0x9c, 0xcd, 0xb2, 0xb8, 0x15, 0xb1, 0x94, 0xf1, 0xfe, 0x0b, 0xcf, + 0xf3, 0x06, 0x72, 0x4a, 0x91, 0x7c, 0xa5, 0x7d, 0xaf, 0x9b, 0xdf, 0x0f, 0xf4, 0x48, 0x1c, 0xc7, + 0x83, 0x69, 0xc8, 0xc7, 0x49, 0xd6, 0x77, 0x89, 0xe7, 0xc2, 0x40, 0x9a, 0x64, 0xb4, 0x35, 0xa1, + 0xc9, 0x78, 0x22, 0xfa, 0xce, 0xc1, 0xf2, 0x45, 0x1e, 0x72, 0x20, 0xa4, 0x85, 0x32, 0x0c, 0x61, + 0x88, 0x2f, 0x72, 0x56, 0x24, 0xc8, 0x4a, 0x9f, 0xd3, 0x34, 0x14, 0xc9, 0x9c, 0x0e, 0xa4, 0x8a, + 0xf4, 0x3d, 0xd7, 0xfd, 0x69, 0xa0, 0x27, 0xfa, 0x80, 0x69, 0xf9, 0xe2, 0x96, 0x09, 0x90, 0xee, + 0xc9, 0xe6, 0xcc, 0xf0, 0xb6, 0x60, 0xe9, 0x4c, 0x50, 0xbd, 0x74, 0x4b, 0xb0, 0xbc, 0x7f, 0x20, + 0xa7, 0x8c, 0x79, 0x18, 0x27, 0xb8, 0xde, 0x2d, 0xbb, 0x5f, 0x6c, 0xe2, 0xc5, 0xf6, 0xd2, 0x91, + 0xb4, 0xb7, 0x60, 0xee, 0x17, 0xca, 0x6d, 0xfd, 0x95, 0x27, 0x11, 0x7c, 0xe9, 0xce, 0x2d, 0x2b, + 0xdd, 0x32, 0x1e, 0xc3, 0x38, 0xa2, 0x9f, 0x15, 0xfd, 0x0e, 0x30, 0xba, 0x21, 0xa6, 0x22, 0x49, + 0xe7, 0x94, 0x6b, 0xc8, 0xbe, 0x9f, 0xdf, 0x13, 0x98, 0x9b, 0xc4, 0x84, 0x8f, 0x6f, 0x43, 0xb3, + 0x7b, 0x68, 0xab, 0x3f, 0xe7, 0xc0, 0x1a, 0x7c, 0x6d, 0x25, 0x59, 0x4c, 0xef, 0xfb, 0x7e, 0x93, + 0x96, 0x85, 0xa6, 0xb2, 0x83, 0x72, 0x54, 0xc4, 0xf7, 0xa0, 0xa5, 0xb8, 0xfb, 0x69, 0x20, 0x38, + 0xec, 0xd1, 0x88, 0xf1, 0x69, 0x5f, 0xb6, 0x40, 0x78, 0xf4, 0x0f, 0xb3, 0x05, 0x23, 0x16, 0x80, + 0xcc, 0xa2, 0x49, 0x2b, 0x94, 0x2a, 0xd2, 0xcf, 0x58, 0x46, 0x97, 0x5b, 0xd9, 0xd2, 0xf8, 0x7b, + 0x1b, 0xe8, 0xbd, 0x03, 0x94, 0x4b, 0x4c, 0x41, 0x8d, 0xe9, 0x6e, 0x19, 0xe8, 0xe9, 0x07, 0xd5, + 0x74, 0x6c, 0x7d, 0x87, 0x60, 0x5e, 0x8c, 0x46, 0xa3, 0x52, 0x2c, 0x9d, 0x4a, 0x2c, 0x2f, 0x8e, + 0x6e, 0xfd, 0x43, 0xff, 0x50, 0xae, 0xef, 0xfb, 0xc0, 0xdf, 0x86, 0x54, 0x14, 0xf1, 0xbb, 0x09, + 0xf1, 0x2a, 0x42, 0xbc, 0x8a, 0x10, 0xd9, 0x2c, 0x59, 0xaa, 0x50, 0x7a, 0x25, 0x99, 0x35, 0x85, + 0xde, 0xaa, 0xe6, 0x4b, 0xe7, 0x76, 0x06, 0x4a, 0x97, 0x45, 0x69, 0x58, 0x14, 0x8b, 0x3c, 0x8c, + 0xe3, 0x24, 0x1b, 0xf7, 0xdd, 0x4a, 0xc7, 0x07, 0xb0, 0xc3, 0x22, 0x01, 0xa7, 0xd5, 0x02, 0x47, + 0x33, 0xce, 0xfa, 0x4a, 0x45, 0x77, 0xe0, 0x5a, 0x57, 0x60, 0x52, 0xe4, 0x61, 0xb6, 0x88, 0x93, + 0x22, 0x4f, 0xc3, 0x87, 0x7e, 0x92, 0x49, 0x53, 0x19, 0xa5, 0xf4, 0x7e, 0x20, 0x91, 0xb5, 0x12, + 0x41, 0xa7, 0x45, 0x3f, 0x02, 0xf5, 0x05, 0x35, 0xaa, 0x89, 0xae, 0x66, 0x7a, 0xa0, 0x55, 0xeb, + 0x24, 0x4c, 0x93, 0x38, 0x4e, 0xe9, 0xf2, 0x45, 0x92, 0x8d, 0x58, 0x85, 0xdc, 0x30, 0x06, 0xe8, + 0x6f, 0x34, 0xc8, 0x37, 0x51, 0x6e, 0xda, 0x64, 0xcd, 0xb2, 0x36, 0xcc, 0x1a, 0xa4, 0x74, 0xc7, + 0xc3, 0xbc, 0x6e, 0x5f, 0x95, 0x0f, 0x08, 0x67, 0x82, 0x2d, 0xff, 0x36, 0xa5, 0x71, 0x12, 0x12, + 0x13, 0xbc, 0xbc, 0xf2, 0xff, 0xfd, 0x43, 0x17, 0x90, 0x58, 0x8b, 0xfa, 0x3c, 0xd9, 0xb5, 0x5c, + 0x3a, 0xb9, 0x72, 0x9e, 0x8b, 0xba, 0xe9, 0x97, 0x9d, 0xff, 0xa1, 0xcd, 0xb9, 0x58, 0xa0, 0x98, + 0x60, 0x1b, 0x6b, 0x40, 0x9b, 0x9a, 0x57, 0x4d, 0x2b, 0xce, 0x41, 0xde, 0x8b, 0x35, 0xe7, 0x50, + 0x73, 0x33, 0x12, 0xf0, 0x82, 0xe5, 0xe5, 0x9a, 0xa3, 0x44, 0x39, 0x28, 0x58, 0xe9, 0x2f, 0x8a, + 0x6d, 0x4d, 0x4c, 0xb0, 0x4c, 0xc9, 0xc2, 0x27, 0xe9, 0x07, 0xab, 0x0d, 0xda, 0xb5, 0xed, 0x5b, + 0x28, 0x5a, 0xdf, 0x8a, 0x7f, 0x2b, 0x85, 0x4a, 0xdd, 0x8b, 0x77, 0xc9, 0x7c, 0xab, 0x62, 0xea, + 0xb5, 0x53, 0x3a, 0x6a, 0xd8, 0xbd, 0xdc, 0x23, 0xd8, 0x63, 0xf1, 0x19, 0x34, 0xda, 0x76, 0x0a, + 0x9a, 0xc5, 0xd8, 0x5a, 0x44, 0x33, 0x5e, 0x00, 0x25, 0x39, 0x4b, 0x90, 0xae, 0xe5, 0xc4, 0x5b, + 0xd4, 0xe8, 0x71, 0xba, 0x9c, 0x4e, 0x97, 0x18, 0x92, 0x64, 0x24, 0x22, 0xc3, 0xb6, 0x4e, 0x27, + 0x30, 0x24, 0xc1, 0x4f, 0x9c, 0xcc, 0x49, 0x12, 0x43, 0xfa, 0x00, 0x3a, 0x02, 0x41, 0x17, 0x2d, + 0x50, 0x7f, 0xe8, 0xc1, 0x67, 0x72, 0x62, 0x60, 0x34, 0x64, 0xf8, 0x27, 0x84, 0xe0, 0x64, 0xf4, + 0x50, 0x4a, 0x4b, 0x8b, 0x04, 0xa7, 0x4c, 0xbc, 0xed, 0x33, 0x36, 0xa5, 0x8e, 0xd0, 0xc5, 0x7c, + 0x5c, 0x81, 0x2b, 0x2e, 0x3b, 0x18, 0xe7, 0x4a, 0x97, 0x8c, 0x6d, 0x2d, 0x0c, 0x2e, 0x7b, 0xa0, + 0xc3, 0x20, 0x98, 0xfd, 0xfc, 0xc2, 0xee, 0x21, 0x33, 0x20, 0x2e, 0xe9, 0xf8, 0xf0, 0x67, 0x1c, + 0x0f, 0xf3, 0x50, 0x4c, 0xc8, 0xb3, 0x51, 0x92, 0xa6, 0x81, 0xf1, 0xc2, 0x75, 0x3b, 0xb0, 0x2d, + 0x06, 0xc4, 0x64, 0xe3, 0xbc, 0x4b, 0x7c, 0x7f, 0x72, 0x38, 0xdf, 0x3f, 0xed, 0x7e, 0x3d, 0xf7, + 0xf6, 0x89, 0xb7, 0x3f, 0xd9, 0x9f, 0x1f, 0x4e, 0x5a, 0xfb, 0xf0, 0x75, 0x08, 0xc1, 0xb3, 0xfa, + 0xf2, 0x7d, 0xd2, 0x45, 0xb8, 0x49, 0xeb, 0xf0, 0xab, 0xd1, 0x3e, 0x06, 0x81, 0xcd, 0xc7, 0xc7, + 0xcf, 0x80, 0x44, 0x10, 0xb1, 0x94, 0x10, 0xca, 0xcd, 0x78, 0x32, 0x03, 0x41, 0x50, 0x29, 0x61, + 0x0f, 0xff, 0x05, 0xe1, 0x95, 0x22, 0xc4, 0xe9, 0xeb, 0x21, 0xd9, 0xa8, 0x09, 0xbf, 0x1e, 0x40, + 0x81, 0x17, 0x3d, 0xb5, 0x8e, 0xe1, 0xc7, 0x36, 0xa1, 0xc4, 0x5b, 0x5a, 0x26, 0xe6, 0x89, 0x6a, + 0x67, 0xeb, 0xb6, 0xba, 0x06, 0x09, 0xa6, 0x59, 0x29, 0x80, 0xfe, 0x04, 0xfe, 0x4f, 0x66, 0x1c, + 0xe9, 0x4e, 0x1f, 0x48, 0x92, 0x91, 0x59, 0x41, 0x49, 0xa4, 0x78, 0x2f, 0x11, 0x91, 0x35, 0x6a, + 0xff, 0x3a, 0xd1, 0xe8, 0x52, 0xe5, 0xca, 0x29, 0x44, 0x22, 0x02, 0xd9, 0x97, 0x98, 0x50, 0x52, + 0x4a, 0x88, 0x50, 0x29, 0x6b, 0x22, 0x18, 0x81, 0x30, 0x41, 0x32, 0x7a, 0x47, 0xa4, 0x1d, 0x92, + 0x02, 0xa2, 0x1b, 0x24, 0x16, 0x08, 0xac, 0x66, 0xc8, 0x6e, 0x1a, 0x13, 0x10, 0x29, 0xb9, 0xa5, + 0x29, 0xbb, 0x93, 0xbd, 0x0a, 0x0c, 0xa7, 0x47, 0x93, 0x30, 0x1b, 0x53, 0x92, 0x88, 0x42, 0x81, + 0x3a, 0x7a, 0x41, 0x84, 0x6a, 0xce, 0x83, 0x68, 0x06, 0x9e, 0x1f, 0x57, 0x35, 0xc3, 0x2c, 0xc6, + 0xc4, 0x74, 0x94, 0xf0, 0xa9, 0x85, 0x48, 0x54, 0xf0, 0x76, 0xc8, 0xc7, 0x2c, 0xa2, 0x64, 0x04, + 0xe9, 0x75, 0x31, 0xa1, 0xb1, 0x0d, 0x52, 0x2c, 0x31, 0x85, 0x9c, 0x23, 0x86, 0x08, 0xd9, 0x60, + 0x64, 0x96, 0xa7, 0x2c, 0x8c, 0x01, 0x21, 0xb4, 0x71, 0x34, 0xa6, 0x45, 0x82, 0x6b, 0x15, 0x29, + 0x13, 0x0e, 0xb9, 0x60, 0x92, 0x3b, 0x42, 0xef, 0x13, 0x90, 0x51, 0x36, 0x2e, 0x65, 0x5c, 0xc7, + 0x97, 0xd3, 0x2c, 0x4a, 0x52, 0x89, 0xd0, 0x81, 0xac, 0x78, 0x53, 0xe8, 0x3f, 0x2e, 0x73, 0xa9, + 0x9d, 0x85, 0x00, 0x47, 0x15, 0x7d, 0xaa, 0xf4, 0xe5, 0x1b, 0xea, 0x82, 0xe0, 0x3b, 0x55, 0xe6, + 0xed, 0x3c, 0x4c, 0xd2, 0xf0, 0x36, 0x05, 0x69, 0x4b, 0xac, 0xdf, 0xd2, 0x15, 0xf9, 0x33, 0x6c, + 0x6b, 0x87, 0xa4, 0xd3, 0xf7, 0x67, 0xbb, 0xf2, 0x77, 0xcc, 0xb5, 0x4b, 0x6d, 0x40, 0x2f, 0x80, + 0x69, 0x7c, 0xd3, 0x80, 0x2c, 0x3b, 0x82, 0x15, 0xa3, 0xa0, 0xe5, 0xd9, 0xf9, 0xfd, 0x09, 0x4b, + 0x83, 0xc5, 0xd2, 0x16, 0xfa, 0x97, 0xd3, 0x48, 0x04, 0xb5, 0xe9, 0x98, 0xf5, 0xff, 0x82, 0x29, + 0x04, 0xc8, 0x1b, 0xf6, 0x1f, 0x3a, 0xff, 0x01, 0x10, 0xa6, 0x65, 0x97, 0x30, 0x67, 0x34, 0x1b, + 0xc3, 0xb9, 0x0a, 0xe7, 0x39, 0xea, 0x54, 0x35, 0xfd, 0x38, 0x1a, 0x15, 0xc1, 0x39, 0xf8, 0x1b, + 0x47, 0x26, 0x1f, 0x66, 0x13, 0xb4, 0xed, 0x1f, 0x74, 0xdb, 0xbe, 0xd5, 0x3a, 0xb0, 0x35, 0xdb, + 0x6f, 0x39, 0x0f, 0x1f, 0x82, 0xab, 0x6b, 0x1b, 0x1c, 0xca, 0xe7, 0x70, 0x4e, 0x83, 0xd7, 0xd2, + 0xed, 0x35, 0xbc, 0x9e, 0x7f, 0xb0, 0xf2, 0x7a, 0xd8, 0x5e, 0x73, 0x72, 0xfe, 0x3e, 0xfc, 0x95, + 0x4e, 0x4e, 0xfa, 0x38, 0x0c, 0x3b, 0xd2, 0xbd, 0xf9, 0xbe, 0xed, 0xf9, 0x6f, 0x3d, 0xd7, 0xf6, + 0x10, 0x10, 0x7e, 0x88, 0xe7, 0xdb, 0x7e, 0xb3, 0x67, 0x2b, 0x48, 0x13, 0x02, 0x41, 0xce, 0x7b, + 0xf0, 0xcf, 0x19, 0x8c, 0x79, 0xbd, 0x4b, 0x6f, 0xff, 0xd4, 0xeb, 0x5e, 0x7a, 0xee, 0xa9, 0xe7, + 0x5f, 0xf6, 0xce, 0x70, 0xe0, 0xbf, 0x2b, 0xa7, 0xf8, 0x1a, 0x39, 0x41, 0x9f, 0xf7, 0xef, 0xe5, + 0x04, 0x89, 0x3a, 0xe9, 0x3a, 0xfb, 0x3d, 0xdb, 0x07, 0x8a, 0xb1, 0x21, 0x09, 0x3f, 0x41, 0x7a, + 0x9c, 0x83, 0x0e, 0x51, 0x43, 0xbe, 0xe2, 0xef, 0x44, 0xf6, 0xe1, 0xa7, 0x5f, 0x8e, 0xfb, 0x0a, + 0x5a, 0x4f, 0xd5, 0xe3, 0x12, 0xfa, 0xdc, 0x3b, 0x70, 0x3c, 0xbb, 0xe7, 0xb8, 0xbd, 0x13, 0x68, + 0xf9, 0xfb, 0xb2, 0x49, 0xa0, 0xd9, 0x39, 0x84, 0xa6, 0xe7, 0x63, 0xf3, 0x00, 0x5a, 0x7e, 0xe7, + 0xcc, 0xeb, 0x3a, 0xbd, 0x9e, 0x7d, 0xe8, 0x1c, 0xc0, 0x02, 0xf0, 0xd3, 0x83, 0xb1, 0x9e, 0x7d, + 0x24, 0xc1, 0xe5, 0xc8, 0x91, 0xe3, 0x1f, 0x9e, 0x01, 0x38, 0x34, 0x3d, 0x57, 0xb6, 0x3b, 0x00, + 0x04, 0x90, 0x38, 0x77, 0x1f, 0x9b, 0x88, 0xe6, 0x04, 0x9a, 0x87, 0xbe, 0xc6, 0xbd, 0xef, 0x1c, + 0x75, 0xab, 0x15, 0x15, 0x19, 0xe7, 0x30, 0xcb, 0xeb, 0xc0, 0xac, 0x43, 0x0f, 0x91, 0x79, 0x47, + 0x88, 0xec, 0xb0, 0x77, 0x76, 0x84, 0xbd, 0xb0, 0xd0, 0x51, 0xe7, 0x14, 0xc1, 0x2e, 0x11, 0x4d, + 0xef, 0x6c, 0x05, 0x5c, 0xdb, 0x83, 0x41, 0x75, 0x38, 0x05, 0xd5, 0xfc, 0x38, 0x32, 0xf1, 0x78, + 0xfa, 0xff, 0xa6, 0xda, 0xb5, 0x93, 0x71, 0x9a, 0x7c, 0xf9, 0x98, 0x95, 0xe9, 0x96, 0x3a, 0x25, + 0x4f, 0xd9, 0x9c, 0x5e, 0xf0, 0xb0, 0x98, 0x44, 0x61, 0x06, 0x3d, 0x36, 0x38, 0xea, 0x13, 0xb3, + 0x86, 0x94, 0x3a, 0x0c, 0x96, 0xa1, 0xe2, 0xf7, 0x76, 0x13, 0xfd, 0xcf, 0x80, 0xde, 0xaa, 0x9d, + 0xba, 0xe5, 0x3c, 0x6a, 0x8b, 0xc0, 0x30, 0xac, 0x05, 0x98, 0x12, 0xe1, 0x68, 0xd2, 0x2c, 0x78, + 0xee, 0x41, 0xee, 0x95, 0x15, 0x82, 0x84, 0x0d, 0x76, 0xff, 0x35, 0xa3, 0xfc, 0xe1, 0x33, 0x38, + 0xe4, 0x08, 0x5c, 0xf5, 0xdb, 0x34, 0x35, 0x8d, 0xc6, 0x39, 0xcf, 0xb0, 0x06, 0xc9, 0xc8, 0x0c, + 0x1d, 0x38, 0xcb, 0xbd, 0x0f, 0xa3, 0x89, 0x69, 0x0a, 0x9b, 0x5b, 0xc1, 0xf1, 0x42, 0xa0, 0x9c, + 0xde, 0x0a, 0xc1, 0x13, 0xc8, 0xca, 0xa8, 0x69, 0xc4, 0xa1, 0x08, 0x5b, 0x82, 0xcf, 0x28, 0x64, + 0x71, 0x86, 0x15, 0x04, 0xf4, 0xd5, 0x2b, 0x13, 0xd6, 0x74, 0xad, 0x25, 0x70, 0xe2, 0xa4, 0x92, + 0xd2, 0x63, 0xaf, 0x57, 0xf6, 0xda, 0xcc, 0x52, 0xf7, 0x02, 0x88, 0x9d, 0x1e, 0xbb, 0xaf, 0x5e, + 0xd1, 0xa1, 0x7f, 0x70, 0x60, 0xc1, 0x32, 0x26, 0xba, 0xaa, 0x2c, 0xf0, 0x06, 0xd9, 0x30, 0xf0, + 0xba, 0xaf, 0x5e, 0xf1, 0x21, 0x34, 0xf7, 0xf6, 0x2c, 0xe9, 0xb1, 0x24, 0x69, 0xe7, 0x8a, 0xb2, + 0xbd, 0xcc, 0x7a, 0x7c, 0x34, 0x79, 0x90, 0x59, 0x03, 0x9a, 0x42, 0x88, 0xe5, 0x01, 0x1d, 0x18, + 0x46, 0x10, 0x08, 0x58, 0x04, 0xb8, 0x7f, 0x61, 0xec, 0x99, 0x5e, 0xb7, 0xd7, 0xeb, 0xf9, 0xde, + 0xc1, 0xcf, 0x4a, 0x8e, 0x10, 0x87, 0xd8, 0xd4, 0xb4, 0x86, 0x43, 0xd7, 0x72, 0x04, 0xfb, 0x0c, + 0xc4, 0x67, 0x63, 0x80, 0xb1, 0x20, 0xf7, 0x8d, 0x3f, 0x8b, 0x90, 0x0b, 0xb3, 0x6b, 0x1b, 0xae, + 0x61, 0x59, 0x5a, 0x52, 0x69, 0x10, 0xbd, 0x37, 0x0d, 0xcc, 0x4f, 0x40, 0x0c, 0xa9, 0x23, 0x5d, + 0xf6, 0xaf, 0xf2, 0x2a, 0xa9, 0x21, 0x22, 0x3b, 0x75, 0xd0, 0xbb, 0x37, 0x68, 0xe3, 0xab, 0x05, + 0x2c, 0x18, 0x2f, 0x76, 0x0b, 0xcb, 0xa6, 0x4f, 0x00, 0x00, 0x4e, 0xc3, 0x16, 0x3b, 0x00, 0x94, + 0x3e, 0x18, 0x4a, 0xff, 0x10, 0x06, 0xb6, 0xfe, 0xfd, 0x1c, 0x15, 0x03, 0x22, 0x21, 0x85, 0x64, + 0x09, 0xe4, 0x85, 0x21, 0xd0, 0xb0, 0x21, 0xf7, 0xc8, 0xff, 0x3e, 0xe3, 0x10, 0x0a, 0xf9, 0x27, + 0xce, 0x72, 0x89, 0x0f, 0xdd, 0x8f, 0x83, 0xc9, 0xf2, 0xd3, 0x9a, 0xfb, 0x33, 0xb5, 0xf6, 0xe4, + 0x02, 0x7b, 0x06, 0xb8, 0x25, 0x2d, 0x98, 0x44, 0x0a, 0x26, 0xc9, 0xf2, 0x99, 0x40, 0x05, 0x71, + 0x54, 0xd4, 0x91, 0x02, 0x30, 0xec, 0xc4, 0x99, 0x87, 0xe9, 0x8c, 0x06, 0x02, 0x5a, 0x1b, 0x22, + 0x53, 0xe7, 0x64, 0x04, 0xaa, 0x44, 0xf6, 0x49, 0x75, 0x35, 0x45, 0x96, 0x6c, 0x61, 0x46, 0xad, + 0x67, 0xcf, 0x72, 0xbc, 0x35, 0x2b, 0x8d, 0x67, 0x3b, 0xa8, 0xe6, 0x3b, 0xca, 0x4f, 0xd2, 0x2f, + 0xe5, 0x6e, 0xc6, 0xf5, 0xdd, 0x8c, 0x77, 0x91, 0x56, 0x6d, 0x6a, 0xbc, 0x4e, 0xe1, 0xd6, 0xad, + 0x8d, 0x9f, 0x58, 0x9c, 0xa5, 0xb8, 0x3a, 0x80, 0xd4, 0x64, 0x5d, 0x17, 0x3c, 0x50, 0xbe, 0x63, + 0x44, 0x53, 0x5c, 0xd4, 0x29, 0xe6, 0x68, 0x25, 0x1c, 0xad, 0x04, 0xf4, 0xbb, 0xa8, 0x93, 0xdf, + 0xb8, 0x0b, 0x81, 0xcd, 0x96, 0x84, 0xab, 0xce, 0xad, 0x34, 0x17, 0xbb, 0x69, 0xa6, 0x60, 0xda, + 0x6a, 0xe6, 0x09, 0x32, 0x8e, 0xb7, 0x74, 0x08, 0xbf, 0x83, 0xcc, 0x95, 0x1e, 0xad, 0x2e, 0x15, + 0xe4, 0xbc, 0x40, 0xeb, 0x40, 0xc5, 0xfb, 0xae, 0xf1, 0xba, 0x27, 0x0a, 0x73, 0x48, 0xd3, 0xe2, + 0x93, 0x49, 0x92, 0xc6, 0x66, 0x62, 0xed, 0x1c, 0x4a, 0x77, 0x0f, 0xc5, 0x96, 0xed, 0x3e, 0x0f, + 0xf8, 0xab, 0x57, 0x20, 0x24, 0xf9, 0xbb, 0x0b, 0x10, 0xac, 0xa5, 0x2e, 0xce, 0x69, 0xf8, 0x85, + 0x9e, 0xd3, 0x77, 0x3c, 0x1c, 0x9b, 0xe8, 0x65, 0xd0, 0x9c, 0x2d, 0x60, 0x9b, 0x8a, 0x0b, 0xc6, + 0x52, 0x91, 0xe4, 0x4a, 0x8a, 0xf5, 0xb1, 0xa6, 0x0e, 0x9a, 0x35, 0xf7, 0xbb, 0x3e, 0xb2, 0x50, + 0x5b, 0x49, 0x7f, 0xd0, 0xe9, 0x6e, 0xa4, 0x60, 0x74, 0xc3, 0x05, 0x2b, 0xc4, 0x4c, 0xa6, 0x72, + 0xf4, 0x8a, 0x5f, 0x03, 0x65, 0x0e, 0xa7, 0x90, 0xbf, 0x46, 0xb4, 0xe9, 0x28, 0xed, 0x86, 0x9d, + 0x59, 0x96, 0x92, 0xfd, 0xe0, 0xc7, 0xe6, 0xe9, 0x3e, 0x98, 0xbd, 0x7d, 0x47, 0x99, 0x2d, 0x71, + 0x3d, 0x3d, 0xf8, 0x84, 0x93, 0x63, 0x56, 0x15, 0x9e, 0x24, 0xec, 0x53, 0xe1, 0xc5, 0xce, 0xbe, + 0xe1, 0xb3, 0x42, 0x2d, 0xc0, 0xab, 0xec, 0x1a, 0xd6, 0x46, 0x11, 0x5e, 0x85, 0xd0, 0x5a, 0xae, + 0x54, 0x47, 0x19, 0x43, 0x60, 0xe0, 0xf5, 0x41, 0xc8, 0x5b, 0x65, 0xb7, 0x09, 0x47, 0x0c, 0x79, + 0x66, 0x36, 0xec, 0x8f, 0xb7, 0x7f, 0x62, 0x88, 0x87, 0x4e, 0x9e, 0xd0, 0xc2, 0x94, 0xf8, 0xac, + 0xd5, 0x26, 0x5c, 0x41, 0x88, 0xbd, 0xc6, 0x6d, 0x68, 0x62, 0xdc, 0x0b, 0x6e, 0x6c, 0xf2, 0x72, + 0x21, 0x96, 0xf0, 0x0f, 0x5d, 0xe6, 0xf7, 0x37, 0x1b, 0x6b, 0xee, 0x05, 0x86, 0x65, 0x34, 0x54, + 0x78, 0x5d, 0x66, 0x41, 0x73, 0xc2, 0x4a, 0xb7, 0xd6, 0xdc, 0x38, 0xe6, 0x0d, 0xd4, 0xc1, 0x4e, + 0xfc, 0x0a, 0xc7, 0x21, 0x02, 0xd5, 0x75, 0x51, 0x79, 0xa0, 0xed, 0xe9, 0xc5, 0x96, 0x89, 0xb6, + 0xd4, 0x08, 0xa7, 0xe0, 0x91, 0xbe, 0xa4, 0x6f, 0x68, 0x46, 0xa5, 0x14, 0xa8, 0x03, 0xd2, 0x5d, + 0x34, 0x96, 0xca, 0x77, 0xac, 0x34, 0x97, 0x3e, 0xfa, 0x49, 0x32, 0x6b, 0xe6, 0x07, 0x08, 0x30, + 0xfc, 0x8b, 0xc0, 0xb5, 0xf9, 0x77, 0x65, 0x65, 0x2c, 0xe0, 0x8e, 0xdc, 0x30, 0x3b, 0x84, 0x96, + 0xf4, 0xaa, 0x59, 0xc0, 0x5a, 0xe1, 0x9e, 0xb7, 0x4a, 0xf5, 0xd2, 0x9d, 0x74, 0x0d, 0x70, 0x31, + 0x1e, 0x98, 0x34, 0xa0, 0x8f, 0x8f, 0x77, 0x70, 0x62, 0x65, 0x77, 0x8e, 0x1a, 0x91, 0x21, 0x0d, + 0x88, 0x86, 0xa4, 0xa0, 0xf8, 0x2d, 0x11, 0x13, 0xd3, 0x90, 0xf7, 0xd6, 0xe8, 0x87, 0x1f, 0x1f, + 0xa9, 0x93, 0x73, 0x09, 0xf6, 0x8e, 0x8e, 0xc2, 0x59, 0x8a, 0x74, 0x88, 0x80, 0xbf, 0xa1, 0x8e, + 0x84, 0xa1, 0xc5, 0x95, 0x7b, 0x8d, 0x12, 0x02, 0x80, 0xdf, 0xfb, 0xb4, 0x6c, 0x81, 0x2f, 0x64, + 0xd9, 0x94, 0xcd, 0x0a, 0x3a, 0xcb, 0x83, 0x42, 0x7e, 0x49, 0x70, 0xa0, 0x26, 0xa2, 0x69, 0xbd, + 0x07, 0xdc, 0x94, 0xfe, 0x94, 0xe0, 0x48, 0x77, 0x90, 0xac, 0x86, 0xd5, 0xf7, 0x4a, 0x7c, 0x89, + 0xc9, 0x95, 0xd4, 0x58, 0x00, 0xd9, 0x10, 0xff, 0x6e, 0x46, 0xd8, 0xe3, 0x23, 0xdf, 0x60, 0x44, + 0x4a, 0x24, 0x0d, 0xd8, 0x1b, 0xbe, 0x8d, 0x19, 0x5e, 0xb6, 0x06, 0xa2, 0x95, 0x02, 0xcf, 0xa9, + 0x2d, 0x29, 0xfc, 0xc4, 0x8a, 0x0f, 0x55, 0x36, 0x1b, 0x88, 0x96, 0x09, 0xe2, 0x07, 0x91, 0x80, + 0xb9, 0xc2, 0x48, 0xdd, 0x54, 0x37, 0xa1, 0xdb, 0x99, 0xcc, 0x5f, 0x6d, 0x96, 0xc6, 0x17, 0x1a, + 0x9e, 0x3e, 0x6d, 0xfb, 0x1a, 0x2d, 0xba, 0x6f, 0xdd, 0x54, 0x4e, 0x7c, 0x85, 0xe1, 0x79, 0xa0, + 0x07, 0x30, 0x11, 0xd4, 0x20, 0xdd, 0xfd, 0x37, 0x62, 0x92, 0x14, 0x1f, 0x65, 0xca, 0x14, 0xb8, + 0xfd, 0x12, 0x8b, 0x77, 0xe4, 0xd7, 0x07, 0x7a, 0xfd, 0xda, 0x47, 0x47, 0xaa, 0xed, 0xb6, 0x34, + 0x29, 0x93, 0x5e, 0x46, 0xe3, 0xa8, 0xe7, 0x47, 0xda, 0x84, 0xfe, 0x4f, 0x1e, 0x55, 0x2e, 0x52, + 0x5f, 0xf1, 0x9b, 0xc8, 0x1a, 0x31, 0xfe, 0x2f, 0xe0, 0x59, 0x0b, 0x0f, 0xbb, 0xd0, 0xd0, 0x27, + 0xd3, 0xd8, 0x52, 0x1a, 0x9b, 0x71, 0x93, 0x6e, 0xc6, 0xcb, 0x9a, 0xf5, 0x17, 0x10, 0x23, 0xeb, + 0xa6, 0x91, 0xcd, 0xd2, 0x74, 0xc3, 0x3a, 0x9a, 0x9d, 0x68, 0x20, 0x55, 0xcf, 0xca, 0x46, 0x9a, + 0x40, 0x55, 0xd7, 0x92, 0x96, 0x50, 0x60, 0x15, 0x19, 0xe8, 0x2c, 0x2d, 0x41, 0xa4, 0x55, 0x04, + 0x69, 0x8d, 0x96, 0x4d, 0xd2, 0x17, 0xeb, 0x5c, 0xcb, 0x82, 0xa9, 0x61, 0xdf, 0x80, 0x7f, 0x7f, + 0x52, 0x51, 0x97, 0xa4, 0x4f, 0x9e, 0x80, 0xc1, 0xa0, 0x67, 0x2d, 0x6f, 0x6a, 0x82, 0x68, 0xe6, + 0x5d, 0xda, 0x0f, 0x62, 0x02, 0x18, 0x27, 0x73, 0x30, 0x57, 0x54, 0xcc, 0x77, 0xb5, 0x0d, 0x0f, + 0xea, 0x9e, 0xda, 0xc6, 0xd1, 0x93, 0xd5, 0xa6, 0xca, 0xa4, 0x60, 0x7d, 0x46, 0x43, 0x03, 0xd4, + 0x6a, 0xe5, 0xe6, 0xc3, 0xb6, 0xaf, 0x50, 0xd4, 0xd5, 0xf3, 0x47, 0x11, 0x55, 0x5a, 0xb4, 0x8e, + 0xee, 0x7b, 0x11, 0xed, 0x50, 0x4a, 0x9b, 0xc3, 0xa6, 0x53, 0xae, 0x2c, 0xf3, 0xf7, 0xc0, 0x73, + 0x75, 0xc7, 0xef, 0x0d, 0x31, 0xec, 0x0a, 0x13, 0xce, 0x7d, 0xab, 0x31, 0x5f, 0x4f, 0xfe, 0xe3, + 0xfb, 0x26, 0x3f, 0xec, 0x79, 0x1d, 0x5b, 0xc8, 0xac, 0x5a, 0x60, 0xfc, 0x30, 0xf0, 0x23, 0x83, + 0xb4, 0xf9, 0xf4, 0xe2, 0xfc, 0x4c, 0xdf, 0xe6, 0x6c, 0xb9, 0xae, 0x21, 0xf7, 0xd3, 0x34, 0x2b, + 0x02, 0x03, 0xeb, 0xf4, 0xfd, 0x76, 0xfb, 0xee, 0xee, 0xce, 0xb9, 0xeb, 0x38, 0x8c, 0x8f, 0xdb, + 0xbe, 0xeb, 0xba, 0x78, 0x1f, 0x61, 0x10, 0xf5, 0xfc, 0xc0, 0xc0, 0x2a, 0xaa, 0x41, 0xd4, 0xfd, + 0x8f, 0xfe, 0xd2, 0x97, 0x3d, 0xfa, 0x96, 0x08, 0xef, 0x7c, 0xfa, 0x2f, 0x0e, 0x0f, 0x61, 0xa2, + 0x3b, 0x80, 0x4e, 0xce, 0xbe, 0xd0, 0x3e, 0x81, 0x0e, 0xfc, 0xaf, 0xec, 0xd0, 0xf5, 0x2b, 0xd2, + 0xc2, 0x6a, 0x8a, 0xee, 0x8a, 0x81, 0xde, 0x10, 0xaf, 0xd2, 0xfa, 0xc4, 0x75, 0x3c, 0x9b, 0x1c, + 0x0e, 0xd4, 0xfd, 0xfe, 0x91, 0xdd, 0xb9, 0xdc, 0x3f, 0xdd, 0xbf, 0xec, 0x9e, 0x1e, 0x5c, 0x7a, + 0x47, 0x6f, 0x7d, 0xdb, 0x97, 0x77, 0x5a, 0x2e, 0xe9, 0xd9, 0xbe, 0x77, 0xea, 0xf5, 0x6a, 0x3d, + 0x78, 0xcf, 0x72, 0x04, 0x80, 0xbe, 0x0b, 0x33, 0xbc, 0x83, 0xcb, 0xce, 0xe9, 0xd1, 0x79, 0xcf, + 0xee, 0x9e, 0xe2, 0x7d, 0xd7, 0xd1, 0x69, 0xef, 0xb2, 0x0b, 0xc8, 0x0e, 0x2f, 0xbd, 0xde, 0xa9, + 0xe7, 0x5d, 0x1e, 0xc2, 0x18, 0xde, 0xba, 0xc8, 0xcf, 0x03, 0xf8, 0xf4, 0x3a, 0xf5, 0x1b, 0x30, + 0xa1, 0xdd, 0x49, 0x59, 0xea, 0x09, 0x8c, 0xb2, 0x4e, 0x6a, 0x54, 0x63, 0xd2, 0xef, 0xe8, 0xcd, + 0x55, 0x3e, 0xb5, 0x1c, 0x81, 0x0c, 0x42, 0x0f, 0xfc, 0xa1, 0x06, 0x62, 0x07, 0x6f, 0x3f, 0x1b, + 0x99, 0x3d, 0xe4, 0x1a, 0xe2, 0xe9, 0xe3, 0x8d, 0x70, 0x54, 0x4d, 0xe1, 0x57, 0x16, 0x53, 0x47, + 0x65, 0x05, 0xab, 0xa9, 0xeb, 0xfa, 0xb9, 0x0b, 0x74, 0x0d, 0x6e, 0x87, 0xf1, 0x3c, 0x35, 0x7d, + 0x03, 0xd8, 0x5a, 0xb7, 0xe1, 0x6f, 0xce, 0xde, 0xb1, 0xf6, 0x77, 0xae, 0xba, 0xe5, 0x10, 0xb3, + 0x3d, 0x2b, 0x7c, 0xe2, 0x88, 0xdb, 0x4c, 0xaa, 0xbe, 0x91, 0xe6, 0x6d, 0xe4, 0xa0, 0x0b, 0x69, + 0x4d, 0xea, 0x2a, 0x5a, 0x19, 0x16, 0x62, 0x00, 0x9f, 0x0c, 0x86, 0x88, 0x31, 0x1c, 0x7a, 0x30, + 0xc6, 0xcb, 0x1f, 0x53, 0xfe, 0xee, 0x64, 0x0d, 0x07, 0x91, 0x52, 0xd5, 0xf9, 0x5d, 0xc4, 0xd6, + 0x93, 0xd7, 0xc9, 0x97, 0xdf, 0xea, 0x27, 0x35, 0x24, 0x48, 0x16, 0xf3, 0x30, 0xaf, 0x93, 0x5f, + 0xb2, 0x8a, 0x65, 0x0d, 0xca, 0x3b, 0xb8, 0xdf, 0xd0, 0xd0, 0x86, 0x5d, 0xd7, 0x7d, 0x53, 0xea, + 0xa6, 0xae, 0x1c, 0xe0, 0x33, 0x9d, 0x8c, 0x1a, 0xfd, 0x8d, 0x6e, 0x55, 0xa8, 0x34, 0x6a, 0x6b, + 0x86, 0x69, 0xf4, 0x9f, 0x9f, 0x3f, 0xfe, 0x6a, 0xaa, 0x4b, 0x3a, 0x1a, 0xbc, 0x5e, 0x94, 0x75, + 0x03, 0xa3, 0x7f, 0xf5, 0x7a, 0xa0, 0x9f, 0xcd, 0xac, 0x9d, 0x42, 0xc4, 0xda, 0x21, 0x04, 0x8e, + 0x82, 0xf2, 0x10, 0x22, 0x30, 0x1d, 0x32, 0x29, 0x9c, 0x2d, 0x6c, 0x14, 0x22, 0x9c, 0x42, 0xf0, + 0x0c, 0x62, 0x1b, 0x2f, 0x17, 0xdc, 0x29, 0x80, 0x7d, 0x6a, 0x7a, 0xd6, 0xd2, 0xc0, 0xc3, 0x08, + 0xc2, 0x5c, 0x2f, 0xc1, 0x14, 0x6a, 0x09, 0xa4, 0x7c, 0xf0, 0x24, 0xe8, 0x7f, 0xc9, 0x3a, 0x0b, + 0x6e, 0x8c, 0xaa, 0xb8, 0x48, 0xf2, 0x56, 0x74, 0xda, 0x37, 0x6d, 0x4d, 0x20, 0x1e, 0x6d, 0x9c, + 0x3f, 0x0b, 0x96, 0xdd, 0x34, 0x0e, 0xbe, 0xd5, 0x1c, 0x38, 0x1a, 0xa9, 0xf8, 0xc5, 0x03, 0x2c, + 0x35, 0xfd, 0x7e, 0x7e, 0x76, 0x0a, 0x3e, 0xf0, 0x1f, 0x14, 0x8e, 0xbd, 0x85, 0x80, 0x94, 0x1d, + 0x3b, 0x7f, 0x49, 0xd9, 0x2d, 0x1c, 0xa2, 0xae, 0xed, 0x05, 0x26, 0xa8, 0x7d, 0x03, 0x8c, 0x38, + 0xc5, 0x7a, 0x11, 0xa0, 0x6a, 0x23, 0x6a, 0x63, 0x09, 0xa9, 0xf6, 0x16, 0xcd, 0xc3, 0x45, 0x0c, + 0xdb, 0x2c, 0x0f, 0xc0, 0x0c, 0x3d, 0x06, 0x1b, 0x4b, 0xe5, 0x86, 0xdd, 0x2f, 0x72, 0xe8, 0xa3, + 0x17, 0xf4, 0x5e, 0xd8, 0x06, 0x69, 0x11, 0x43, 0xda, 0x06, 0x66, 0xbf, 0x62, 0x86, 0x37, 0x64, + 0x0c, 0xb8, 0xf9, 0x0c, 0x47, 0xee, 0x70, 0x5c, 0xea, 0xcf, 0x07, 0x41, 0xa7, 0xb0, 0xd9, 0x29, + 0x8d, 0x3f, 0x85, 0x29, 0x16, 0x41, 0x74, 0xf2, 0x8c, 0xa0, 0x48, 0x8b, 0x33, 0xe1, 0x74, 0x14, + 0x18, 0x6d, 0x20, 0xc7, 0xde, 0x46, 0x0e, 0xe5, 0x1c, 0xef, 0xbc, 0xe8, 0x1a, 0x39, 0xc6, 0x7b, + 0xec, 0xef, 0x13, 0x79, 0xbb, 0xd7, 0x18, 0x20, 0x9f, 0x25, 0x31, 0xfd, 0x75, 0xda, 0x30, 0xf5, + 0x48, 0xa6, 0x94, 0xcd, 0x84, 0x29, 0x99, 0x5b, 0xda, 0x1e, 0xed, 0x58, 0x72, 0x55, 0x06, 0xee, + 0xcd, 0x34, 0x3e, 0x7d, 0xfc, 0x7c, 0x01, 0xbb, 0xdb, 0x56, 0x72, 0x36, 0x54, 0xa6, 0x1e, 0x4a, + 0x59, 0xfe, 0x9d, 0xf1, 0xe9, 0x3b, 0x48, 0x2c, 0x4a, 0xa5, 0x09, 0xb5, 0x4b, 0x54, 0xe9, 0x06, + 0x9c, 0xad, 0xf1, 0x0a, 0x91, 0xcb, 0xd2, 0xb7, 0x19, 0x5a, 0xf6, 0x73, 0x6f, 0x19, 0x16, 0x0f, + 0x59, 0x44, 0x56, 0x8f, 0xba, 0xa8, 0xf8, 0x90, 0x8d, 0x18, 0xe8, 0x62, 0x32, 0x32, 0x21, 0x2d, + 0x0a, 0x56, 0xec, 0x33, 0xd8, 0x31, 0xe8, 0x29, 0xaf, 0x70, 0x5d, 0x4b, 0xf0, 0x87, 0xca, 0x52, + 0xc2, 0xbb, 0x30, 0x11, 0x64, 0x44, 0x05, 0x28, 0x63, 0x19, 0xe7, 0x8c, 0x3d, 0x00, 0xdf, 0x33, + 0xe4, 0x26, 0xb6, 0x65, 0x55, 0x12, 0xad, 0x48, 0x41, 0x52, 0xa9, 0x35, 0x70, 0xca, 0x90, 0x53, + 0xca, 0xba, 0x99, 0x69, 0xaa, 0xca, 0x93, 0x70, 0xe4, 0x2f, 0x84, 0x60, 0x61, 0xb5, 0x40, 0x5f, + 0x81, 0x04, 0xc0, 0x4b, 0xad, 0x4a, 0xb2, 0x52, 0xd8, 0x78, 0x27, 0x25, 0xef, 0x7b, 0x9b, 0xbd, + 0x06, 0xd8, 0x74, 0xc6, 0x04, 0x49, 0x62, 0xd8, 0x9f, 0x64, 0xf4, 0x40, 0x90, 0x72, 0xc8, 0xb0, + 0xd6, 0x38, 0x6d, 0x2e, 0x0c, 0xb8, 0xeb, 0xe5, 0x26, 0xcd, 0x64, 0xe0, 0x0e, 0xf0, 0x1e, 0x1a, + 0xcd, 0x12, 0x8e, 0x0a, 0x03, 0x31, 0x0c, 0xe8, 0x40, 0xec, 0xed, 0xad, 0x1c, 0xc4, 0x8d, 0x66, + 0xf5, 0xe5, 0x02, 0x58, 0x5d, 0xae, 0xac, 0x42, 0x68, 0xab, 0x18, 0xac, 0x64, 0x24, 0x1a, 0x32, + 0x02, 0x65, 0xe0, 0xba, 0x43, 0x94, 0xa2, 0x68, 0x10, 0x90, 0xcf, 0x8a, 0x09, 0x1c, 0xe7, 0x34, + 0xeb, 0x62, 0x9d, 0xf5, 0x1b, 0xa9, 0x56, 0x0a, 0x19, 0x96, 0x3a, 0xd1, 0xda, 0xc8, 0x88, 0xb3, + 0xa9, 0xbc, 0x6d, 0xe8, 0x93, 0x1b, 0xd8, 0xe8, 0xe5, 0x72, 0x0b, 0x4b, 0x43, 0x0f, 0xfc, 0xc3, + 0xe6, 0x4a, 0x25, 0xf7, 0xfd, 0x2b, 0xd7, 0xee, 0x95, 0x7f, 0x70, 0x9a, 0xaa, 0x3e, 0xae, 0x97, + 0xe5, 0xb5, 0x8c, 0x08, 0x70, 0x31, 0x74, 0xc0, 0x05, 0x35, 0x1b, 0x86, 0x84, 0xca, 0xb3, 0x66, + 0x45, 0xb2, 0x68, 0x00, 0xd4, 0xa3, 0x18, 0xb5, 0xd0, 0xb0, 0x10, 0x0e, 0xa1, 0x57, 0x6a, 0x18, + 0x3d, 0xf6, 0xf7, 0x0f, 0x2c, 0x7d, 0xd1, 0x88, 0xbd, 0xe0, 0x07, 0x70, 0x19, 0x91, 0x64, 0x33, + 0xba, 0x54, 0x13, 0x78, 0xa0, 0xfb, 0x71, 0x1b, 0xb0, 0x66, 0x30, 0xa8, 0x23, 0x63, 0x23, 0xc2, + 0x25, 0xaa, 0xe7, 0x8a, 0x9b, 0xa4, 0x90, 0xbf, 0x20, 0xe0, 0xc7, 0xc7, 0xfd, 0xe7, 0x41, 0x40, + 0x35, 0xdf, 0xd6, 0x42, 0x16, 0x3e, 0x6e, 0x39, 0x0d, 0xbf, 0x2c, 0x57, 0x08, 0x04, 0x22, 0xa0, + 0x16, 0xcc, 0x37, 0xb2, 0xd9, 0xf4, 0x16, 0x32, 0x4c, 0x88, 0x37, 0xe0, 0x86, 0xa0, 0x57, 0x3c, + 0x3e, 0x8a, 0xa1, 0x0b, 0xff, 0x1c, 0x83, 0x1c, 0x1e, 0x1f, 0x9f, 0xff, 0x2a, 0xc7, 0x61, 0x81, + 0x0f, 0x99, 0xa0, 0x63, 0x30, 0x79, 0x61, 0x35, 0x90, 0x2e, 0x91, 0x08, 0xf6, 0x0d, 0x66, 0xc2, + 0x80, 0x5f, 0x71, 0x4d, 0x52, 0xcb, 0xbb, 0x46, 0xe9, 0xc8, 0x2b, 0xca, 0x20, 0x84, 0xd3, 0xf5, + 0x4a, 0xaf, 0xae, 0x1c, 0xc7, 0x09, 0xaf, 0x07, 0x14, 0x3a, 0x03, 0xdc, 0x05, 0xae, 0x76, 0x09, + 0x14, 0x7e, 0x59, 0x82, 0xac, 0xc7, 0x03, 0x90, 0xa8, 0x33, 0x0d, 0xf3, 0xd5, 0x7d, 0x94, 0xb9, + 0x80, 0xf5, 0x21, 0xfe, 0x8c, 0xd2, 0x50, 0x86, 0xf4, 0x6d, 0x0a, 0x06, 0xcb, 0x94, 0x46, 0x04, + 0x63, 0x5c, 0x98, 0xc6, 0x05, 0x96, 0xfe, 0xf1, 0x75, 0x29, 0x0a, 0xa6, 0x2a, 0x3c, 0x43, 0xb0, + 0x25, 0xd3, 0xa4, 0x28, 0x92, 0xb1, 0x52, 0xb2, 0x07, 0x36, 0xe3, 0xe4, 0x96, 0xb3, 0xbb, 0x02, + 0x24, 0x42, 0xfe, 0x60, 0x33, 0x52, 0x4c, 0xd8, 0x2c, 0x8d, 0x49, 0xce, 0xd9, 0x6d, 0x78, 0x9b, + 0x3e, 0x10, 0xed, 0x80, 0x74, 0xa1, 0x7e, 0x1a, 0xc2, 0xa6, 0x43, 0x2a, 0x00, 0xcb, 0x64, 0x31, + 0xc1, 0x8d, 0x04, 0xc5, 0x97, 0xb5, 0x7c, 0x98, 0x90, 0x53, 0x0e, 0x13, 0x46, 0xf8, 0x2a, 0x01, + 0x2b, 0xf4, 0xe5, 0x9a, 0x8a, 0x0a, 0xbc, 0x86, 0x03, 0x69, 0x83, 0x8b, 0x85, 0xb8, 0x44, 0x6e, + 0x29, 0x80, 0x51, 0x8d, 0x1c, 0xf5, 0x7e, 0x42, 0x39, 0x75, 0xc0, 0x19, 0x9e, 0x23, 0x71, 0xf0, + 0x2d, 0x27, 0xc5, 0x15, 0x92, 0xe7, 0xe0, 0x1d, 0xcb, 0xc9, 0xda, 0xd6, 0xdf, 0x25, 0xf3, 0xa2, + 0x9e, 0x8c, 0x6c, 0x1d, 0xae, 0x36, 0x62, 0xe3, 0x59, 0xeb, 0xea, 0x4d, 0x08, 0x3a, 0xb3, 0xcd, + 0xe1, 0xb5, 0x87, 0x00, 0x68, 0xe6, 0x4a, 0xde, 0x28, 0x37, 0x38, 0x7b, 0x47, 0x98, 0xa6, 0x40, + 0xea, 0x02, 0xb1, 0x3b, 0x49, 0x05, 0x1e, 0x2c, 0x83, 0x63, 0x79, 0x22, 0x9f, 0x4a, 0x43, 0x6f, + 0xff, 0x53, 0xe3, 0xff, 0x9f, 0xf8, 0x65, 0x1b, 0xb6, 0x6c, 0x4d, 0x53, 0xb9, 0xb5, 0x9e, 0xa9, + 0x56, 0x0e, 0x8a, 0x83, 0x83, 0xe2, 0xc3, 0x2d, 0x16, 0x3f, 0xe0, 0x2b, 0x8f, 0xc5, 0x82, 0x3a, + 0xc0, 0x15, 0xbf, 0xb6, 0xc3, 0x60, 0xfd, 0x3d, 0xae, 0x3e, 0x65, 0x86, 0x4e, 0xed, 0x05, 0x8c, + 0xb1, 0xc7, 0xed, 0x50, 0x55, 0x1a, 0x30, 0xe2, 0x61, 0xf8, 0xab, 0x24, 0x61, 0x94, 0x8e, 0x21, + 0x2b, 0x75, 0xf2, 0x0b, 0x7d, 0x28, 0x4c, 0x66, 0x81, 0xf2, 0x02, 0x16, 0x0c, 0x3c, 0x10, 0xd2, + 0xf0, 0x5a, 0x5b, 0x1e, 0x3f, 0x94, 0xf7, 0x28, 0xe4, 0x85, 0x26, 0x78, 0x67, 0x93, 0x5d, 0x65, + 0xd7, 0xab, 0x32, 0xdb, 0x0e, 0x62, 0xd2, 0x3a, 0x31, 0x65, 0x9e, 0x0a, 0x44, 0x55, 0x55, 0xa8, + 0x1d, 0xf3, 0x54, 0x71, 0x69, 0xf5, 0x5c, 0x0c, 0xf9, 0x48, 0xd6, 0xf9, 0xa8, 0x0d, 0x5b, 0x55, + 0xbd, 0x65, 0x03, 0xa1, 0x2e, 0xbe, 0xa8, 0x9a, 0x4a, 0xf9, 0x76, 0x0c, 0xf1, 0x15, 0x0e, 0xbe, + 0xbc, 0x84, 0xc4, 0x32, 0x28, 0x75, 0x0a, 0xa3, 0x67, 0x33, 0x93, 0x02, 0x47, 0x8e, 0xc5, 0x93, + 0x6d, 0xd7, 0x07, 0xc6, 0x67, 0x8a, 0x8f, 0x62, 0xd4, 0x33, 0xa1, 0xda, 0xf3, 0x1c, 0x7c, 0xd3, + 0x42, 0x00, 0x3f, 0x56, 0x5d, 0x56, 0x67, 0x4c, 0xfd, 0x06, 0xc2, 0x2e, 0xd6, 0x99, 0xa8, 0x28, + 0x2a, 0x59, 0x88, 0x76, 0xb2, 0x10, 0x49, 0x16, 0xca, 0x87, 0x70, 0xc8, 0x42, 0xb4, 0x8d, 0x05, + 0x24, 0x1c, 0xf2, 0x09, 0x7c, 0xa8, 0x20, 0xe9, 0x8f, 0x76, 0x5c, 0x7f, 0x9c, 0xb0, 0xfc, 0x41, + 0x51, 0x0b, 0x39, 0xe6, 0xb2, 0x34, 0x3d, 0x64, 0x41, 0x31, 0x73, 0x03, 0x79, 0x4f, 0x93, 0x03, + 0x44, 0x09, 0x7d, 0x6b, 0x1c, 0x54, 0x04, 0x61, 0x31, 0x69, 0xbb, 0xaa, 0x55, 0x2f, 0x2b, 0x51, + 0x25, 0x40, 0xe7, 0xf3, 0xc0, 0x30, 0x2a, 0x03, 0xa0, 0x60, 0x00, 0x74, 0x88, 0xea, 0x54, 0x2a, + 0x3e, 0x64, 0xb8, 0xbe, 0x55, 0x85, 0x5f, 0x1c, 0x41, 0x8f, 0x8c, 0xbe, 0x5e, 0xa9, 0x1f, 0x96, + 0x88, 0x95, 0xaf, 0x57, 0x63, 0x7b, 0xde, 0xb5, 0x95, 0x43, 0xc6, 0xfc, 0xe2, 0xe5, 0xa2, 0xea, + 0xc0, 0xeb, 0x7b, 0xd1, 0x06, 0x1f, 0xfc, 0xb3, 0xe7, 0xba, 0xcb, 0x9f, 0x6c, 0x72, 0x23, 0x6b, + 0xcc, 0x0b, 0x84, 0x93, 0x6f, 0xa4, 0xeb, 0xb0, 0x78, 0xe1, 0xaf, 0xbf, 0xfc, 0xc6, 0x57, 0x07, + 0xbf, 0x3c, 0x6b, 0x03, 0x17, 0x26, 0xe1, 0x3e, 0xc4, 0xe9, 0x20, 0xd7, 0xc9, 0xb9, 0x6b, 0xb7, + 0xfc, 0x6d, 0xc5, 0xb4, 0x0f, 0x53, 0x70, 0x9e, 0xc1, 0xcd, 0xae, 0x22, 0x05, 0x2e, 0x95, 0x2f, + 0xad, 0x9b, 0xd2, 0x48, 0x55, 0x39, 0x70, 0xe3, 0x21, 0x27, 0x68, 0x5b, 0x69, 0xb4, 0x41, 0x90, + 0xbd, 0x49, 0xd6, 0x4a, 0x61, 0xfd, 0x48, 0xaf, 0xab, 0xde, 0x0c, 0x9e, 0xe1, 0xf9, 0xdb, 0x90, + 0x8f, 0x50, 0x6c, 0xfe, 0x3c, 0x90, 0x29, 0xd9, 0xab, 0x57, 0xcd, 0x49, 0x11, 0x16, 0xf5, 0xd7, + 0x8a, 0x72, 0xe1, 0x7a, 0x01, 0xaf, 0xb1, 0x28, 0x6d, 0x8c, 0x86, 0x16, 0x44, 0xa8, 0x66, 0xc7, + 0x72, 0xe5, 0x9b, 0xeb, 0x2a, 0x48, 0xf1, 0x72, 0x70, 0xa3, 0x5c, 0xf6, 0x5a, 0x96, 0x82, 0xaf, + 0x92, 0xf8, 0x9f, 0xcd, 0x1a, 0xf2, 0xf5, 0xeb, 0xd5, 0xe1, 0x08, 0x53, 0x72, 0xba, 0xeb, 0xc0, + 0x28, 0xeb, 0x9a, 0xdb, 0x10, 0xa3, 0xb1, 0xd4, 0xf0, 0xea, 0xdb, 0xa8, 0x6b, 0x9b, 0xac, 0x0d, + 0x34, 0xae, 0x70, 0x1b, 0xc3, 0x8d, 0x6b, 0xac, 0x1f, 0x22, 0x68, 0xa0, 0x32, 0xce, 0x5a, 0x9e, + 0x35, 0xae, 0x85, 0x1e, 0x63, 0x8f, 0x5a, 0xdb, 0x2e, 0x13, 0x4b, 0x0f, 0x6b, 0x58, 0xd6, 0x9a, + 0x51, 0x88, 0x6d, 0x16, 0x01, 0x79, 0x55, 0x95, 0x55, 0x6d, 0x35, 0x0a, 0xa1, 0x2c, 0x82, 0xc9, + 0x17, 0x14, 0xea, 0x43, 0xe9, 0x3e, 0x0b, 0x40, 0xf3, 0x2f, 0xd8, 0x29, 0xbd, 0x37, 0x55, 0xb7, + 0x2d, 0xa4, 0xc6, 0xcb, 0x9f, 0xce, 0xb5, 0xa5, 0xb4, 0x5a, 0x3e, 0x3f, 0xe1, 0x36, 0xab, 0x4e, + 0x52, 0x45, 0xc4, 0x19, 0x48, 0xd6, 0xb5, 0xdd, 0xfa, 0x1e, 0x57, 0xa8, 0x20, 0x6d, 0xb1, 0xf9, + 0x2a, 0x50, 0x99, 0x74, 0x38, 0xf4, 0xba, 0x90, 0x82, 0x0d, 0x0f, 0x1f, 0x79, 0xf3, 0x95, 0x86, + 0x3e, 0xdd, 0x20, 0x59, 0x86, 0x6b, 0xe0, 0xbd, 0x21, 0xb8, 0x39, 0xb3, 0xdb, 0x62, 0x65, 0xae, + 0xb7, 0xc7, 0x96, 0xd5, 0x41, 0xa6, 0x5c, 0x7d, 0xd7, 0x01, 0x12, 0x8f, 0xfc, 0x4f, 0x00, 0xc1, + 0x49, 0x32, 0xf9, 0x4a, 0x4b, 0xb0, 0x46, 0x19, 0x79, 0x67, 0xb9, 0xbf, 0xf1, 0xa6, 0x47, 0xbf, + 0xdf, 0x71, 0xf5, 0x2f, 0xbe, 0x6d, 0xd9, 0xb8, 0x6f, 0xa9, 0xff, 0x1f, 0x2f, 0x6d, 0xf5, 0x7f, + 0x2d, 0xfd, 0x2f, 0x9e, 0xe7, 0x3b, 0x04, 0xcd, 0x34, 0x00, 0x00 }; diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 9713fb3d..9259d559 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -346,8 +346,8 @@ const uint8_t PAGE_settings_leds[] PROGMEM = { 0x9b, 0x31, 0x82, 0x02, 0xa0, 0x19, 0x3e, 0x7a, 0x80, 0xc2, 0x53, 0x40, 0x02, 0x66, 0xbe, 0xfd, 0xd8, 0x30, 0xd7, 0xc0, 0x4b, 0xfb, 0x7c, 0xe9, 0xb8, 0xb6, 0x1c, 0x21, 0xbc, 0x69, 0xdb, 0x6f, 0xef, 0x81, 0x8a, 0x4b, 0x27, 0x04, 0xb5, 0xa0, 0x81, 0x2c, 0x21, 0xcd, 0x92, 0x2a, 0x2b, 0xc6, - 0xe8, 0xe9, 0x3d, 0x8d, 0x7e, 0x97, 0x15, 0x15, 0x71, 0x8e, 0x2f, 0xe1, 0x83, 0xb5, 0xa4, 0xd6, - 0xdd, 0xd4, 0x81, 0x4f, 0x47, 0xba, 0x61, 0x70, 0xa9, 0x83, 0x85, 0x1f, 0x1e, 0xf2, 0x8f, 0x8d, + 0xe8, 0xe9, 0x3d, 0x8d, 0x7e, 0x97, 0x15, 0xd5, 0x5a, 0x52, 0xeb, 0x6e, 0xea, 0xc0, 0x27, 0xc4, + 0x3e, 0xbe, 0x84, 0x0f, 0x47, 0xba, 0x61, 0x70, 0xa9, 0x83, 0x85, 0x1f, 0x1e, 0xf2, 0x8f, 0x8d, 0x70, 0xe9, 0xcc, 0x23, 0x59, 0x79, 0x29, 0x47, 0x0c, 0xe2, 0xe3, 0x07, 0xb0, 0x1e, 0x40, 0x0c, 0x4a, 0x18, 0xfa, 0xc0, 0x6a, 0xd7, 0x5f, 0xc8, 0xd2, 0x5b, 0x7c, 0x4e, 0x04, 0xb7, 0x60, 0x83, 0xc9, 0xdc, 0x71, 0x29, 0x5b, 0x37, 0x68, 0x5d, 0x00, 0xfc, 0xb9, 0x14, 0xcf, 0xfd, 0x39, 0x81, @@ -357,7 +357,7 @@ const uint8_t PAGE_settings_leds[] PROGMEM = { 0x9e, 0x50, 0x1b, 0x22, 0x83, 0x89, 0x42, 0x84, 0x2f, 0xd8, 0x3e, 0x38, 0x1e, 0x90, 0xfc, 0xdb, 0xed, 0xd5, 0xa5, 0x41, 0x61, 0x2d, 0x96, 0x6b, 0x86, 0x21, 0x6e, 0xb4, 0xe1, 0x9d, 0x8a, 0x65, 0xf4, 0x25, 0xc4, 0x24, 0xa9, 0x96, 0x4b, 0xcd, 0xe0, 0x96, 0xab, 0x91, 0x2c, 0xd4, 0x89, 0xed, - 0x03, 0x13, 0x25, 0xd3, 0x73, 0x56, 0x8c, 0x54, 0x21, 0x4c, 0xb1, 0xc2, 0x19, 0xc0, 0xd2, 0x78, + 0x03, 0x13, 0x25, 0xd3, 0x73, 0x56, 0x8c, 0x54, 0x21, 0x4c, 0xb1, 0xc2, 0x19, 0xc0, 0xc8, 0x78, 0x90, 0x1c, 0xd3, 0x06, 0x02, 0x99, 0x9d, 0x2a, 0xf3, 0xb9, 0x11, 0x50, 0x90, 0x48, 0x0b, 0x25, 0x82, 0x4d, 0x2a, 0xe1, 0x9a, 0xd4, 0xd6, 0x89, 0xa6, 0x65, 0x56, 0x36, 0xbb, 0x74, 0x56, 0x4e, 0x14, 0xe2, 0xba, 0xd4, 0x48, 0x75, 0x54, 0x53, 0x79, 0x62, 0xf6, 0x84, 0x72, 0x7b, 0xe2, 0x71, @@ -395,12 +395,12 @@ const uint8_t PAGE_settings_leds[] PROGMEM = { 0x36, 0xc8, 0x8a, 0x92, 0xc8, 0x27, 0x4b, 0xd3, 0xb3, 0x5d, 0x7a, 0x20, 0x0d, 0xd0, 0x7c, 0x0e, 0x75, 0xda, 0x39, 0x3c, 0x94, 0xbd, 0xba, 0x21, 0xfd, 0xe9, 0xfd, 0x19, 0x9c, 0x83, 0x1b, 0x83, 0x68, 0x22, 0x00, 0xd5, 0x40, 0xff, 0x64, 0x7a, 0xe4, 0xed, 0xf4, 0xa6, 0xdd, 0x6a, 0x48, 0xb1, - 0xeb, 0xf2, 0x94, 0x17, 0x46, 0x3a, 0x73, 0x9c, 0xbf, 0x9b, 0xae, 0x63, 0x3b, 0xd1, 0xa3, 0xac, - 0xa0, 0x42, 0xc0, 0xd3, 0x90, 0x2f, 0x31, 0x63, 0xc3, 0xa9, 0xc7, 0x1c, 0xad, 0x30, 0xc1, 0xcc, + 0xeb, 0xf2, 0x94, 0x17, 0x46, 0x3a, 0xf3, 0xa0, 0xbf, 0x9b, 0xae, 0x63, 0x3b, 0xd1, 0xa3, 0xac, + 0xa0, 0x42, 0xc0, 0xd3, 0x90, 0x2f, 0x31, 0x63, 0xc3, 0xa9, 0xc7, 0xdc, 0xab, 0x30, 0xc1, 0xcc, 0x27, 0x61, 0xa8, 0x09, 0xa1, 0x09, 0xc3, 0x40, 0xed, 0x01, 0x1b, 0x78, 0x79, 0x26, 0xf8, 0x40, 0x4f, 0x79, 0xf0, 0xd8, 0xd7, 0xd4, 0x18, 0xb8, 0x10, 0xc6, 0xd0, 0x53, 0xb0, 0xd9, 0xae, 0x03, 0xde, 0xa7, 0x2f, 0x9c, 0x10, 0x03, 0x5d, 0x87, 0x9b, 0xd6, 0x2b, 0x60, 0x73, 0xf3, 0x8d, 0xb4, - 0xc3, 0xc3, 0x38, 0x18, 0xc8, 0x12, 0x7d, 0x79, 0x96, 0x71, 0x1b, 0x0c, 0x1e, 0xe2, 0x33, 0x3e, + 0xc3, 0xc3, 0x38, 0x04, 0xc8, 0x12, 0x7d, 0x79, 0x96, 0x71, 0x1b, 0x0c, 0x1e, 0xe2, 0x33, 0x3e, 0x64, 0x9b, 0x60, 0x3e, 0xf9, 0xe5, 0x19, 0xcc, 0x58, 0x98, 0xbd, 0xab, 0x19, 0x25, 0x14, 0x7c, 0xbc, 0xc8, 0x4e, 0x16, 0x4f, 0xff, 0x14, 0x3e, 0x38, 0x91, 0xb5, 0x94, 0x4b, 0x78, 0x04, 0xa1, 0x96, 0xba, 0x4d, 0x06, 0xe0, 0x56, 0x33, 0x0a, 0x93, 0x21, 0x09, 0x34, 0xcd, 0x32, 0x43, 0x4a, @@ -604,7 +604,7 @@ const uint8_t PAGE_settings_leds[] PROGMEM = { 0x33, 0xca, 0xed, 0xcf, 0x4a, 0xec, 0xc3, 0x0e, 0x7f, 0xf8, 0xd6, 0xfa, 0x55, 0xef, 0x0e, 0xe2, 0x50, 0x1c, 0x4c, 0xa6, 0x38, 0x15, 0xda, 0x56, 0x26, 0xc3, 0xc9, 0xb4, 0x41, 0x2f, 0xdc, 0xa9, 0x83, 0x26, 0x40, 0xce, 0x5d, 0xd0, 0xa2, 0xca, 0xf3, 0xb3, 0x9c, 0xbf, 0xa2, 0xb5, 0xdd, 0x87, - 0x99, 0xdc, 0xd4, 0x79, 0x42, 0xc3, 0xc4, 0x0d, 0xe5, 0x81, 0x8e, 0x71, 0xc5, 0x00, 0xdc, 0xd9, + 0x99, 0x5c, 0xd9, 0x79, 0x42, 0xc3, 0xc4, 0x0d, 0xe5, 0x81, 0x8e, 0x71, 0xc5, 0x00, 0xdc, 0xd9, 0xee, 0xca, 0x74, 0x6c, 0x27, 0x3d, 0x6c, 0x61, 0x28, 0x9e, 0x10, 0x32, 0x03, 0xa9, 0x7c, 0x47, 0x59, 0xde, 0xcb, 0x57, 0xd7, 0x0f, 0x4a, 0x4e, 0x1d, 0xbd, 0x18, 0x1f, 0x9a, 0x65, 0xec, 0xdf, 0xcd, 0xe6, 0xc6, 0xde, 0x67, 0xac, 0xaa, 0x8b, 0x63, 0xc3, 0x50, 0x93, 0x00, 0x48, 0x2b, 0x22, @@ -804,7 +804,7 @@ const uint8_t PAGE_settings_leds[] PROGMEM = { 0xe6, 0x97, 0x14, 0x9e, 0xe2, 0x3e, 0xa1, 0xa4, 0x9d, 0xa8, 0xa5, 0x48, 0x22, 0xcb, 0x2d, 0x2f, 0x44, 0x8d, 0xf6, 0x9c, 0xc6, 0x16, 0x0f, 0x56, 0x6b, 0xaf, 0x39, 0x59, 0x6d, 0xe2, 0x61, 0x71, 0xca, 0x07, 0xfe, 0x33, 0xd0, 0xf1, 0xac, 0x4d, 0x3c, 0x66, 0xc6, 0x33, 0x67, 0xfc, 0xc1, 0xf9, - 0xff, 0x03, 0x93, 0x63, 0x4a, 0x6a, 0x80, 0x5e, 0x00, 0x00 + 0xff, 0x03, 0x42, 0x80, 0x4c, 0x89, 0x80, 0x5e, 0x00, 0x00 }; From f18397784fed0b4b15205f9be9d3a5621c8c9d46 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 2 Jan 2024 18:06:39 +0100 Subject: [PATCH 092/108] esp32_4MB_XL is over the limits again removed usermod SN photoresistor --- platformio.ini | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/platformio.ini b/platformio.ini index 7b97ceff..4194e4e3 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1185,11 +1185,16 @@ build_flags = ${esp32_4MB_M_base.build_flags} extends = esp32_4MB_XL_base build_flags = ${esp32_4MB_XL_base.build_flags} -D WLED_RELEASE_NAME=esp32_4MB_XL + ;-D WLED_DISABLE_ALEXA + ;-D WLED_DISABLE_HUESYNC ;; Over the limits ? -D WLED_DISABLE_LOXONE ;; Over the limits + ;-D WLED_DISABLE_MQTT + ;-D WLED_DISABLE_INFRARED -D WLEDMM_SAVE_FLASH ;; a humble attempt to save a few extra bytes build_unflags = ${esp32_4MB_XL_base.build_unflags} -D USERMOD_ANIMARTRIX ;; Tips our memory usage over the limit -D USERMOD_BUZZER ;; Over the limits, and steals GPIO 32 + -D USERMOD_SN_PHOTORESISTOR ;; Over the limits -D WLEDMM_FASTPATH ;; Over the limits ; RAM: [== ] 24.4% (used 80060 bytes from 327680 bytes) ; Flash: [==========] 95.3% (used 1499037 bytes from 1572864 bytes) From 2265af57c95f00126bace24ca06f4c1b733c0652 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 2 Jan 2024 19:49:41 +0100 Subject: [PATCH 093/108] pin info for PICO boards (cosmetic) pico boards don't have PSRAM, but they reserve 16+17 for embedded flash --- wled00/pin_manager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wled00/pin_manager.cpp b/wled00/pin_manager.cpp index 2b08973c..e0a68c8b 100644 --- a/wled00/pin_manager.cpp +++ b/wled00/pin_manager.cpp @@ -41,7 +41,11 @@ String PinManagerClass::getOwnerText(PinOwner tag) { case PinOwner::Button : return(F("Button")); break; // 'Butn' == button from configuration case PinOwner::IR : return(F("IR Receiver")); break; // 'IR' == IR receiver pin from configuration case PinOwner::Relay : return(F("Relay")); break; // 'Rly' == Relay pin from configuration +#if defined(ARDUINO_ESP32_PICO) + case PinOwner::SPI_RAM : return(F("SPI FLASH")); break; // PICO boards use gpio 16+17 for embedded flash, not for PSRAM +#else case PinOwner::SPI_RAM : return(F("PSRAM")); break; // 'SpiR' == SPI RAM (aka PSRAM) +#endif case PinOwner::DMX : return(F("DMX out")); break; // 'DMX' == hard-coded to IO2 case PinOwner::HW_I2C : return(F("I2C (hw)")); break; // 'I2C' == hardware I2C pins (4&5 on ESP8266, 21&22 on ESP32) case PinOwner::HW_SPI : return(F("SPI (hw)")); break; // 'SPI' == hardware (V)SPI pins (13,14&15 on ESP8266, 5,18&23 on ESP32) From 42c32431364be71b6a42b1d325ee0441375c59b9 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Wed, 3 Jan 2024 17:01:44 +0100 Subject: [PATCH 094/108] effect metadata --- wled00/FX.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 9eba4bc1..af613916 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -1280,7 +1280,7 @@ uint16_t mode_fireworks(void) { return mode_fireworks_core(false); } static const char _data_FX_MODE_FIREWORKS[] PROGMEM = "Fireworks@,Frequency;!,!;!;12;ix=192,pal=11"; uint16_t mode_fireworks_audio(void) { return mode_fireworks_core(true); } -static const char _data_FX_MODE_FIREWORKS_AR[] PROGMEM = "🎉 audio Fireworks@,Frequency;!,!;!;12;ix=192,pal=11"; +static const char _data_FX_MODE_FIREWORKS_AR[] PROGMEM = "Fireworks audio ☾@,Frequency;!,!;!;1v,12;ix=192,pal=11"; //Twinkling LEDs running. Inspired by https://github.com/kitesurfer1404/WS2812FX/blob/master/src/custom/Rain.h uint16_t mode_rain() { @@ -3276,7 +3276,7 @@ uint16_t mode_popcorn(void) { return mode_popcorn_core(false); } static const char _data_FX_MODE_POPCORN[] PROGMEM = "Popcorn@!,!,,,,,Overlay;!,!,!;!;1.5d;m12=1"; //bar WLEDMM 1.5d uint16_t mode_popcorn_audio(void) { return mode_popcorn_core(true); } -static const char _data_FX_MODE_POPCORN_AR[] PROGMEM = "🎉 audio Popcorn@!,!,,,,,Overlay;!,!,!;!;1.5d;m12=1"; //bar WLEDMM 1.5d +static const char _data_FX_MODE_POPCORN_AR[] PROGMEM = "Popcorn audio ☾@!,!,,,,,Overlay;!,!,!;!;1v,1.5d;m12=1"; //bar WLEDMM 1.5d //values close to 100 produce 5Hz flicker, which looks very candle-y //Inspired by https://github.com/avanhanegem/ArduinoCandleEffectNeoPixel @@ -3534,7 +3534,7 @@ uint16_t mode_starburst(void) { return mode_starburst_core(false); } static const char _data_FX_MODE_STARBURST[] PROGMEM = "Fireworks Starburst@Chance,Fragments,,,,,Overlay;,!;!;;pal=11,m12=0"; uint16_t mode_starburst_audio(void) { return mode_starburst_core(true); } -static const char _data_FX_MODE_STARBURST_AR[] PROGMEM = "🔨 audio Fw Starburst@Chance,Fragments,,,,,Overlay;,!;!;;pal=11,m12=0"; +static const char _data_FX_MODE_STARBURST_AR[] PROGMEM = "Fw Starburst audio ☾@Chance,Fragments,,,,,Overlay;,!;!;1v;pal=11,m12=0"; /* * Exploding fireworks effect From 8a4792b4c479ba62ec27308163c342e88945f8d0 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Wed, 3 Jan 2024 17:10:08 +0100 Subject: [PATCH 095/108] version bump 0.14.0-b29.35 release prep --- .github/ISSUE_TEMPLATE/bug.yml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- wled00/improv.cpp | 2 +- wled00/wled.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index e99a8790..3771d9d5 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -48,7 +48,7 @@ body: attributes: label: What version/release of MM WLED? description: You can find this in by going to Config -> Security & Updates -> Scroll to Bottom. Copy and paste the entire line after "Server message" - placeholder: "e.g. build 2312290, WLEDMM_0.14.0-b28.35_esp32_4MB_M.bin" + placeholder: "e.g. build 2401030, WLEDMM_0.14.0-b29.35_esp32_4MB_M.bin" validations: required: true - type: dropdown diff --git a/package-lock.json b/package-lock.json index 21873756..d22f144c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wled", - "version": "0.14.0-b28.35", + "version": "0.14.0-b29.35", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wled", - "version": "0.14.0-b28.35", + "version": "0.14.0-b29.35", "license": "GPL-3.0-or-later", "dependencies": { "clean-css": "^4.2.3", diff --git a/package.json b/package.json index ac51dd71..47ea507d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.14.0-b28.35", + "version": "0.14.0-b29.35", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/wled00/improv.cpp b/wled00/improv.cpp index 7279a95b..e05fcd8a 100644 --- a/wled00/improv.cpp +++ b/wled00/improv.cpp @@ -210,7 +210,7 @@ void sendImprovInfoResponse() { //Use serverDescription if it has been changed from the default "WLED", else mDNS name bool useMdnsName = (strcmp(serverDescription, "WLED") == 0 && strlen(cmDNS) > 0); char vString[32]; - snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b28.35/%i"),VERSION); + snprintf_P(vString, sizeof(vString)-1, PSTR("0.14.0-b29.35/%i"),VERSION); const char *str[4] = {"WLED", vString, bString, useMdnsName ? cmDNS : serverDescription}; sendImprovRPCResult(ImprovRPCType::Request_Info, 4, str); diff --git a/wled00/wled.h b/wled00/wled.h index ce991533..f29839fa 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2401011 +#define VERSION 2401030 // WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED. #define _MoonModules_WLED_ From 889e27fed5d9f1c3c3bad55d6451aa26549f777e Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Wed, 3 Jan 2024 17:14:12 +0100 Subject: [PATCH 096/108] npm run build --- wled00/html_other.h | 74 +++++++++++++++++++++--------------------- wled00/html_settings.h | 4 +-- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/wled00/html_other.h b/wled00/html_other.h index 667f76a4..b2da4544 100644 --- a/wled00/html_other.h +++ b/wled00/html_other.h @@ -44,43 +44,43 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()====="; const uint16_t PAGE_update_length = 607; const uint8_t PAGE_update[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x75, 0x53, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0x01, 0x12, 0x8c, 0x24, 0x43, 0x65, - 0x13, 0x42, 0x62, 0x5a, 0xa5, 0x6d, 0x20, 0x9e, 0x90, 0x13, 0xdf, 0x34, 0xa6, 0x8e, 0x9d, 0xd9, - 0x37, 0xad, 0x2a, 0xb4, 0x7f, 0xe7, 0xda, 0x69, 0x07, 0xd2, 0xe0, 0x25, 0x8a, 0x93, 0x73, 0x4f, - 0xce, 0x3d, 0xe7, 0xa4, 0x38, 0xb9, 0xbc, 0xf9, 0x78, 0xf7, 0x7d, 0x75, 0xc5, 0x3a, 0xec, 0x4d, - 0x55, 0x1c, 0xae, 0x20, 0x55, 0x55, 0xf4, 0x80, 0x92, 0x35, 0xce, 0x22, 0x58, 0x2c, 0xf9, 0x4e, - 0x2b, 0xec, 0x4a, 0x05, 0x5b, 0xdd, 0xc0, 0x22, 0x1d, 0x38, 0xb3, 0xb2, 0x87, 0x92, 0x6f, 0x35, - 0xec, 0x06, 0xe7, 0x91, 0x57, 0x59, 0x81, 0x1a, 0x0d, 0x54, 0xdf, 0xbe, 0x5c, 0x5d, 0xb2, 0xfb, - 0x41, 0x49, 0x84, 0x22, 0x9f, 0x1e, 0x15, 0xa1, 0xf1, 0x7a, 0xc0, 0x2a, 0x6b, 0x47, 0xdb, 0xa0, - 0x76, 0x96, 0x2d, 0x67, 0xf3, 0x5f, 0x3b, 0x6d, 0x95, 0xdb, 0x89, 0x4e, 0x07, 0x74, 0x7e, 0x2f, - 0x6a, 0xd9, 0x6c, 0x66, 0xf3, 0xc7, 0x27, 0xc8, 0x3d, 0x41, 0x94, 0x6b, 0xc6, 0x9e, 0x14, 0x88, - 0x35, 0xe0, 0x95, 0x81, 0x78, 0xbb, 0xdc, 0x7f, 0x56, 0x33, 0x3e, 0xb6, 0x7c, 0x2e, 0x02, 0xee, - 0x0d, 0x08, 0xa5, 0xc3, 0x60, 0xe4, 0xbe, 0xe4, 0xd6, 0x59, 0xe0, 0x2f, 0xfe, 0x3b, 0xd2, 0x87, - 0xf5, 0xf3, 0x99, 0xda, 0xb8, 0x66, 0xc3, 0x1f, 0xb3, 0x22, 0x3f, 0x48, 0x3c, 0x48, 0x65, 0xc1, - 0x37, 0x25, 0xcf, 0x03, 0x20, 0x6a, 0xbb, 0x0e, 0x79, 0x10, 0x3f, 0xc3, 0xc5, 0x50, 0xbe, 0xe3, - 0xd5, 0x5f, 0xc8, 0x48, 0x55, 0x65, 0x1f, 0x74, 0x1f, 0x0d, 0x60, 0xa3, 0x37, 0x33, 0x3e, 0xd1, - 0x37, 0x21, 0xf0, 0xf9, 0x7b, 0x42, 0x26, 0x44, 0x91, 0x4f, 0x96, 0xd6, 0x4e, 0xed, 0x99, 0xb3, - 0xc6, 0x49, 0x55, 0xf2, 0x4f, 0x80, 0x5f, 0x67, 0x73, 0xa2, 0xeb, 0xce, 0xaa, 0xec, 0xda, 0x39, - 0x7b, 0xed, 0x14, 0x4b, 0xd6, 0xdd, 0xba, 0x16, 0x77, 0xd2, 0xc3, 0x93, 0x87, 0x84, 0x28, 0x5a, - 0xe7, 0x7b, 0x46, 0x99, 0x74, 0x8e, 0x66, 0x57, 0x37, 0xb7, 0x77, 0x9c, 0xc9, 0x64, 0x13, 0x89, - 0x1c, 0x13, 0x8e, 0x33, 0x4d, 0xaf, 0xc8, 0x17, 0x96, 0x01, 0x39, 0xb8, 0x1f, 0x28, 0x9c, 0x7e, - 0x34, 0xa8, 0x07, 0xe9, 0x31, 0x8f, 0xf3, 0x0b, 0x82, 0x49, 0x4e, 0x0a, 0xc2, 0x58, 0xf7, 0x9a, - 0x52, 0xbd, 0x4f, 0x02, 0xc2, 0x20, 0x2d, 0x6b, 0x8c, 0x0c, 0xa1, 0xe4, 0x41, 0x0f, 0xbc, 0x3a, - 0x15, 0x2f, 0x5f, 0x8b, 0xd3, 0x45, 0x7d, 0xf6, 0x56, 0xbc, 0x7a, 0x13, 0x9d, 0x21, 0x00, 0xa9, - 0xf7, 0xd5, 0xa5, 0xdb, 0x25, 0xf5, 0x0c, 0x3b, 0x60, 0x86, 0xbe, 0x19, 0x90, 0x79, 0x30, 0x20, - 0x03, 0x9c, 0xb3, 0x42, 0xb2, 0xac, 0xf3, 0xd0, 0x96, 0xbc, 0x43, 0x1c, 0xc2, 0x79, 0x9e, 0xaf, - 0x35, 0x76, 0x63, 0x2d, 0x1a, 0xd7, 0xe7, 0x87, 0x05, 0x47, 0x03, 0x21, 0x8f, 0x4b, 0xe6, 0x87, - 0xb1, 0xc0, 0x19, 0x4a, 0x4f, 0x49, 0x95, 0xfc, 0x47, 0x6d, 0xa4, 0xdd, 0x90, 0x1e, 0xdd, 0xaf, - 0x59, 0x96, 0xec, 0x3f, 0x12, 0xd1, 0x13, 0x11, 0x3a, 0x0d, 0x46, 0x05, 0xa1, 0xdd, 0x81, 0xf7, - 0x48, 0xf1, 0x8c, 0x5b, 0x84, 0xed, 0xfa, 0x22, 0x39, 0x5f, 0xb6, 0x24, 0x72, 0x11, 0x1e, 0x46, - 0x72, 0x33, 0xf6, 0x33, 0x97, 0x69, 0x8d, 0x42, 0xdb, 0x61, 0x44, 0x36, 0x59, 0xd4, 0x6a, 0x03, - 0xc7, 0x2e, 0x1f, 0x8d, 0xf4, 0xf0, 0x30, 0x6a, 0x0f, 0x6a, 0x42, 0xd7, 0x23, 0x22, 0xd5, 0x71, - 0x82, 0x4f, 0xd6, 0x11, 0xd9, 0x14, 0xce, 0x49, 0x91, 0x4f, 0xaf, 0xff, 0x01, 0x9d, 0x0e, 0xd1, - 0xef, 0xc6, 0xe8, 0x66, 0x53, 0xf2, 0x65, 0xb4, 0x7b, 0x49, 0x2d, 0xff, 0x33, 0x94, 0x72, 0xa9, - 0x0a, 0xa5, 0xb7, 0x59, 0x8a, 0x2f, 0x76, 0x94, 0x68, 0xaa, 0xc4, 0x4e, 0xc5, 0x13, 0x42, 0x10, - 0x38, 0x91, 0xaf, 0xd2, 0xb6, 0x4c, 0x39, 0x66, 0x1d, 0x52, 0x5e, 0x8e, 0x0e, 0xce, 0x93, 0xd6, - 0xd6, 0x43, 0xe8, 0x52, 0x24, 0x83, 0x5c, 0x03, 0x3b, 0x9f, 0x17, 0x39, 0xf1, 0xc5, 0x75, 0x63, - 0xe1, 0x62, 0xfb, 0xe2, 0x6f, 0xfd, 0x1b, 0x12, 0x9b, 0x8e, 0x8f, 0xec, 0x03, 0x00, 0x00 + 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0x01, 0x0f, 0x1b, 0x4e, 0x86, 0xca, + 0x26, 0x84, 0xc4, 0xb4, 0x4a, 0xdb, 0x40, 0x3c, 0x21, 0x27, 0xbe, 0x69, 0x4c, 0x1d, 0x3b, 0xb3, + 0x6f, 0x5a, 0x55, 0x68, 0xff, 0xce, 0x8d, 0xd3, 0x0e, 0xa4, 0xc1, 0x4b, 0x14, 0x27, 0xe7, 0x9e, + 0x9c, 0x7b, 0xce, 0x89, 0x3c, 0xb9, 0xba, 0xfd, 0x78, 0xff, 0x7d, 0x75, 0xcd, 0x5a, 0xec, 0x6c, + 0x29, 0x0f, 0x57, 0x50, 0xba, 0x94, 0x1d, 0xa0, 0x62, 0xb5, 0x77, 0x08, 0x0e, 0x0b, 0xbe, 0x33, + 0x1a, 0xdb, 0x42, 0xc3, 0xd6, 0xd4, 0xb0, 0x48, 0x07, 0xce, 0x9c, 0xea, 0xa0, 0xe0, 0x5b, 0x03, + 0xbb, 0xde, 0x07, 0xe4, 0x65, 0x26, 0xd1, 0xa0, 0x85, 0xf2, 0xdb, 0x97, 0xeb, 0x2b, 0xf6, 0xd0, + 0x6b, 0x85, 0x20, 0xf3, 0xe9, 0x91, 0x8c, 0x75, 0x30, 0x3d, 0x96, 0x59, 0x33, 0xb8, 0x1a, 0x8d, + 0x77, 0x6c, 0x39, 0x9b, 0xff, 0xda, 0x19, 0xa7, 0xfd, 0x4e, 0xb4, 0x26, 0xa2, 0x0f, 0x7b, 0x51, + 0xa9, 0x7a, 0x33, 0x9b, 0x3f, 0x3d, 0x43, 0x1e, 0x08, 0xa2, 0x7d, 0x3d, 0x74, 0xa4, 0x40, 0xac, + 0x01, 0xaf, 0x2d, 0x8c, 0xb7, 0xcb, 0xfd, 0x67, 0x3d, 0xe3, 0x43, 0xc3, 0xe7, 0x22, 0xe2, 0xde, + 0x82, 0xd0, 0x26, 0xf6, 0x56, 0xed, 0x0b, 0xee, 0xbc, 0x03, 0xfe, 0xea, 0xbf, 0x23, 0x5d, 0x5c, + 0xbf, 0x9c, 0xa9, 0xac, 0xaf, 0x37, 0xfc, 0x29, 0x93, 0xf9, 0x41, 0xe2, 0x41, 0x2a, 0x8b, 0xa1, + 0x2e, 0x78, 0x1e, 0x01, 0xd1, 0xb8, 0x75, 0xcc, 0xa3, 0xf8, 0x19, 0x2f, 0xfb, 0xe2, 0x9c, 0x97, + 0x7f, 0x21, 0x47, 0xaa, 0x32, 0xfb, 0x60, 0xba, 0xd1, 0x00, 0x36, 0x04, 0x3b, 0xe3, 0x13, 0x7d, + 0x1d, 0x23, 0x9f, 0xbf, 0x27, 0x64, 0x42, 0xc8, 0x7c, 0xb2, 0xb4, 0xf2, 0x7a, 0xcf, 0xbc, 0xb3, + 0x5e, 0xe9, 0x82, 0x7f, 0x02, 0xfc, 0x3a, 0x9b, 0x13, 0x5d, 0x7b, 0x56, 0x66, 0x37, 0xde, 0xbb, + 0x1b, 0xaf, 0x59, 0xb2, 0xee, 0xce, 0x37, 0xb8, 0x53, 0x01, 0x9e, 0x3d, 0x24, 0x84, 0x6c, 0x7c, + 0xe8, 0x18, 0x65, 0xd2, 0x7a, 0x9a, 0x5d, 0xdd, 0xde, 0xdd, 0x73, 0xa6, 0x92, 0x4d, 0x24, 0x72, + 0x48, 0x38, 0xce, 0x0c, 0xbd, 0x22, 0x5f, 0x58, 0x06, 0xe4, 0xe0, 0xbe, 0xa7, 0x70, 0xba, 0xc1, + 0xa2, 0xe9, 0x55, 0xc0, 0x7c, 0x9c, 0x5f, 0x10, 0x4c, 0x71, 0x52, 0x10, 0x87, 0xaa, 0x33, 0x94, + 0xea, 0x43, 0x12, 0x10, 0x7b, 0xe5, 0x58, 0x6d, 0x55, 0x8c, 0x05, 0x8f, 0xa6, 0xe7, 0xe5, 0xa9, + 0x78, 0xfd, 0x56, 0x9c, 0x2e, 0xaa, 0xb3, 0x73, 0xf1, 0xe6, 0xdd, 0xe8, 0x0c, 0x01, 0x48, 0x7d, + 0x28, 0xaf, 0xfc, 0x2e, 0xa9, 0x67, 0xd8, 0x02, 0xb3, 0xf4, 0xcd, 0x88, 0x2c, 0x80, 0x05, 0x15, + 0xe1, 0x82, 0x49, 0xc5, 0xb2, 0x36, 0x40, 0x53, 0xf0, 0x16, 0xb1, 0x8f, 0x17, 0x79, 0xbe, 0x36, + 0xd8, 0x0e, 0x95, 0xa8, 0x7d, 0x97, 0x1f, 0x16, 0x1c, 0x2c, 0xc4, 0x7c, 0x5c, 0x32, 0x3f, 0x8c, + 0x45, 0xce, 0x50, 0x05, 0x4a, 0xaa, 0xe0, 0x3f, 0x2a, 0xab, 0xdc, 0x86, 0xf4, 0x98, 0x6e, 0xcd, + 0xb2, 0x64, 0xff, 0x91, 0x88, 0x9e, 0x88, 0xd8, 0x1a, 0xb0, 0x3a, 0x0a, 0xe3, 0x0f, 0xbc, 0x47, + 0x8a, 0x17, 0xdc, 0x22, 0x6e, 0xd7, 0x97, 0xc9, 0xf9, 0xa2, 0x21, 0x91, 0x8b, 0xf8, 0x38, 0x90, + 0x9b, 0x63, 0x3f, 0x73, 0x95, 0xd6, 0x90, 0xc6, 0xf5, 0x03, 0xb2, 0xc9, 0xa2, 0xc6, 0x58, 0x38, + 0x76, 0xf9, 0x68, 0x64, 0x80, 0xc7, 0xc1, 0x04, 0xd0, 0x13, 0xba, 0x1a, 0x10, 0xa9, 0x8e, 0x13, + 0x7c, 0xb2, 0x8e, 0xc8, 0xa6, 0x70, 0x4e, 0x64, 0x3e, 0xbd, 0xfe, 0x07, 0x74, 0x3a, 0x8c, 0x7e, + 0xd7, 0xd6, 0xd4, 0x9b, 0x82, 0x2f, 0x47, 0xbb, 0x97, 0xd4, 0xf2, 0x3f, 0x43, 0x29, 0x97, 0x52, + 0x6a, 0xb3, 0xcd, 0x52, 0x7c, 0x63, 0x47, 0x89, 0xa6, 0x4c, 0xec, 0x54, 0x3c, 0x21, 0x04, 0x81, + 0x13, 0xf9, 0x2a, 0x6d, 0xcb, 0xb4, 0x67, 0xce, 0x23, 0xe5, 0xe5, 0xe9, 0xe0, 0x03, 0x69, 0x6d, + 0x02, 0xc4, 0x36, 0x45, 0xd2, 0xab, 0x35, 0xb0, 0x8b, 0xb9, 0xcc, 0x89, 0x6f, 0x5c, 0x77, 0x2c, + 0xdc, 0xd8, 0xbe, 0xf1, 0xb7, 0xfe, 0x0d, 0xf1, 0xba, 0xf3, 0x52, 0xec, 0x03, 0x00, 0x00 }; diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 9259d559..b75e9ee0 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -1715,7 +1715,7 @@ const uint8_t PAGE_settings_sec[] PROGMEM = { 0x45, 0xb8, 0x35, 0x0e, 0x2f, 0xb4, 0x2e, 0x31, 0x1b, 0xd6, 0xe8, 0x74, 0x43, 0x1a, 0x08, 0x87, 0x68, 0xdd, 0xc2, 0x2c, 0xe8, 0xc7, 0x94, 0xf7, 0xb3, 0x1c, 0xfd, 0x92, 0x8f, 0xe9, 0xf5, 0xc5, 0x05, 0x65, 0x43, 0x8f, 0x5d, 0x4b, 0x43, 0x7c, 0xc3, 0xf6, 0xa3, 0xfb, 0x0f, 0xa3, 0xfd, 0xbd, - 0xd9, 0xc1, 0xa3, 0xe8, 0xc1, 0x9f, 0xd9, 0x7f, 0xfe, 0xf5, 0x6f, 0xc2, 0x60, 0x90, 0x04, 0xec, + 0xd9, 0xc1, 0xe3, 0xe8, 0xc1, 0x9f, 0xd9, 0x7f, 0xfe, 0xf5, 0x6f, 0xc2, 0x60, 0x90, 0x04, 0xec, 0x60, 0xff, 0xe0, 0x01, 0xfb, 0x31, 0x8d, 0x74, 0x79, 0x85, 0x1f, 0xc3, 0x42, 0xa8, 0x32, 0x8a, 0xa2, 0x9d, 0xf5, 0x43, 0x5a, 0x3f, 0x2c, 0xd0, 0x33, 0x90, 0x20, 0x9f, 0x9b, 0xf5, 0x8b, 0x17, 0xc9, 0x76, 0xb6, 0x37, 0x13, 0xed, 0x33, 0x5d, 0x60, 0xb2, 0x62, 0x47, 0x35, 0x46, 0x41, 0xb3, @@ -1733,7 +1733,7 @@ const uint8_t PAGE_settings_sec[] PROGMEM = { 0x8f, 0xac, 0xc5, 0xd0, 0x80, 0xf6, 0x82, 0x9b, 0x6b, 0xd9, 0xf1, 0xa2, 0x55, 0x15, 0x27, 0x06, 0xf3, 0xb7, 0x7a, 0xe6, 0x2f, 0xea, 0xd4, 0xf8, 0x68, 0x4b, 0xd3, 0x65, 0x88, 0x35, 0x88, 0x33, 0x9b, 0x5f, 0x42, 0xbe, 0x39, 0xe2, 0x7f, 0x39, 0xe1, 0xf7, 0x7e, 0x68, 0xc4, 0x1f, 0x52, 0xef, - 0xc5, 0x07, 0xdd, 0x6c, 0xe8, 0x9a, 0x43, 0xbf, 0xa0, 0xfe, 0x17, 0xea, 0x6e, 0x2b, 0x49, 0x51, + 0xc5, 0x07, 0xdd, 0x6c, 0xe8, 0x9a, 0x43, 0xbf, 0xa0, 0xfe, 0x17, 0xc0, 0x99, 0x2d, 0x72, 0x51, 0x15, 0x00, 0x00 }; From e33bcb822e262b00a135b1d09f336e47d3275b30 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 4 Jan 2024 16:03:46 +0100 Subject: [PATCH 097/108] USB CDC: avoid hung devices when USB host is not connected see https://github.com/espressif/arduino-esp32/issues/9043 " The S3, C3, C6 and H2 that have HW CDC JTAG USB port may cause a delay when using HWCDC in Serial by activating CDC on Boot and selecting the USB Mode for Hardware CDC and JTAG. This happens when no USB application in USB Host side is started to receive the data sent by the ESP32xx. The USB CDC buffer gets full and the Arduino HW CDC layer will timeout, by default 100ms, until give up trying to send the CDC data. As a workaround, it is necessary to use HWCDC::setTxTimeoutMs(timeout_ms) and set it to zero. " --- wled00/wled.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wled00/wled.cpp b/wled00/wled.cpp index be897d3c..b2dcc3f3 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -451,6 +451,10 @@ void WLED::setup() if (!Serial) delay(2500); // WLEDMM allow CDC USB serial to initialise #endif #if ARDUINO_USB_CDC_ON_BOOT || ARDUINO_USB_MODE + #if ARDUINO_USB_CDC_ON_BOOT && (defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6)) + // WLEDMM avoid "hung devices" when USB_CDC is enabled; see https://github.com/espressif/arduino-esp32/issues/9043 + Serial.setTxTimeoutMs(0); // potential side-effect: incomplete debug output, with missing characters whenever TX buffer is full. + #endif if (!Serial) delay(2500); // WLEDMM: always allow CDC USB serial to initialise if (Serial) Serial.println("wait 1"); // waiting a bit longer ensures that a debug messages are shown in serial monitor if (!Serial) delay(2500); From 4001864cf708704aa47ccb040cf268553f57705d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Wed, 3 Jan 2024 21:16:38 +0100 Subject: [PATCH 098/108] Merge pull request #3642 from peterpociask/patch-1 Update README.md --- usermods/Animated_Staircase/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/Animated_Staircase/README.md b/usermods/Animated_Staircase/README.md index 618a1f7c..320b744a 100644 --- a/usermods/Animated_Staircase/README.md +++ b/usermods/Animated_Staircase/README.md @@ -11,7 +11,7 @@ The Animated Staircase can be controlled by the WLED API. Change settings such a speed, on/off time and distance by sending an HTTP request, see below. ## WLED integration -To include this usermod in your WLED setup, you have to be able to [compile WLED from source](https://github.com/Aircoookie/WLED/wiki/Compiling-WLED). +To include this usermod in your WLED setup, you have to be able to [compile WLED from source](https://kno.wled.ge/advanced/compiling-wled/). Before compiling, you have to make the following modifications: From 4d5475e891755f623df874b6a8c36147593bd26e Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Wed, 3 Jan 2024 22:18:24 +0100 Subject: [PATCH 099/108] Merge pull request #3572 from drasch/fix/esp32c3-2mb-flash-size fix(esp32c3-2mb): correct flash size for c3 board with only 2MB --- platformio.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platformio.ini b/platformio.ini index 4194e4e3..db7a72eb 100644 --- a/platformio.ini +++ b/platformio.ini @@ -753,6 +753,8 @@ upload_speed = 115200 lib_deps = ${esp32c3.lib_deps} board_build.partitions = tools/WLED_ESP32_2MB_noOTA.csv board_build.flash_mode = dio +board_upload.flash_size = 2MB +board_upload.maximum_size = 2097152 ;WLEDMM: see below ; [env:wemos_shield_esp32] From d2c2e20347ea1159312d766955a06962bf817cb1 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Wed, 3 Jan 2024 22:20:01 +0100 Subject: [PATCH 100/108] Merge pull request #3569 from raymondhardy/ESP32-S3-WROOM-1-N16R8 new buildenv for esp32s3dev_16MB_PSRAM_opi dev board (LilyGo T7-S3) --- platformio.ini | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platformio.ini b/platformio.ini index db7a72eb..6e15902f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -42,6 +42,7 @@ ; default_envs = esp32s2_saola ; default_envs = esp32c3dev ; default_envs = lolin_s2_mini +; default_envs = esp32s3dev_16MB_PSRAM_opi ; MoonModules entries ; =================== @@ -635,6 +636,11 @@ board_build.f_flash = 80000000L board_build.flash_mode = qio monitor_filters = esp32_exception_decoder +[env:esp32s3dev_16MB_PSRAM_opi] +extends = env:esp32s3dev_8MB_PSRAM_opi +board_build.partitions = tools/WLED_ESP32_16MB.csv +board_upload.flash_size = 16MB + [env:esp32s3dev_8MB_PSRAM_qspi] ;; ESP32-TinyS3 development board, with 8MB FLASH and PSRAM (memory_type: qio_qspi) extends = env:esp32s3dev_8MB_PSRAM_opi From 3b6100a057969215c77c7db33d1f89312909e333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Sat, 6 Jan 2024 17:01:34 +0100 Subject: [PATCH 101/108] Merge pull request #3648 from willmmiles/json-response-locking Expand JSON buffer lock scope to entire web reply --- wled00/fcn_declare.h | 16 ++++++++++++++++ wled00/json.cpp | 22 +++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index f46c7cce..ab29dd8d 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -373,6 +373,22 @@ um_data_t* simulateSound(uint8_t simulationId); CRGB getCRGBForBand(int x, uint8_t *fftResult, int pal); //WLEDMM netmindz ar palette char *cleanUpName(char *in); // to clean up a name that was read from file +// RAII guard class for the JSON Buffer lock +// Modeled after std::lock_guard +class JSONBufferGuard { + bool holding_lock; + public: + inline JSONBufferGuard(uint8_t module=255) : holding_lock(requestJSONBufferLock(module)) {}; + inline ~JSONBufferGuard() { if (holding_lock) releaseJSONBufferLock(); }; + inline JSONBufferGuard(const JSONBufferGuard&) = delete; // Noncopyable + inline JSONBufferGuard& operator=(const JSONBufferGuard&) = delete; + inline JSONBufferGuard(JSONBufferGuard&& r) : holding_lock(r.holding_lock) { r.holding_lock = false; }; // but movable + inline JSONBufferGuard& operator=(JSONBufferGuard&& r) { holding_lock |= r.holding_lock; r.holding_lock = false; return *this; }; + inline bool owns_lock() const { return holding_lock; } + explicit inline operator bool() const { return owns_lock(); }; + inline void release() { if (holding_lock) releaseJSONBufferLock(); holding_lock = false; } +}; + #ifdef WLED_ADD_EEPROM_SUPPORT //wled_eeprom.cpp void applyMacro(byte index); diff --git a/wled00/json.cpp b/wled00/json.cpp index b481d7b8..212482b0 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -9,6 +9,7 @@ #define JSON_PATH_PALETTES 5 #define JSON_PATH_FXDATA 6 #define JSON_PATH_NETWORKS 7 +#define JSON_PATH_EFFECTS 8 // begin WLEDMM #ifdef ARDUINO_ARCH_ESP32 @@ -1392,6 +1393,17 @@ void serializeModeNames(JsonArray arr) { } } + +// Global buffer locking response helper class +class GlobalBufferAsyncJsonResponse: public JSONBufferGuard, public AsyncJsonResponse { + public: + inline GlobalBufferAsyncJsonResponse(bool isArray) : JSONBufferGuard(17), AsyncJsonResponse(&doc, isArray) {}; + virtual ~GlobalBufferAsyncJsonResponse() {}; + + // Other members are inherited +}; + + void serveJson(AsyncWebServerRequest* request) { byte subJson = 0; @@ -1400,6 +1412,7 @@ void serveJson(AsyncWebServerRequest* request) else if (url.indexOf("info") > 0) subJson = JSON_PATH_INFO; else if (url.indexOf("si") > 0) subJson = JSON_PATH_STATE_INFO; else if (url.indexOf("nodes") > 0) subJson = JSON_PATH_NODES; + else if (url.indexOf("eff") > 0) subJson = JSON_PATH_EFFECTS; else if (url.indexOf("palx") > 0) subJson = JSON_PATH_PALETTES; else if (url.indexOf("fxda") > 0) subJson = JSON_PATH_FXDATA; else if (url.indexOf("net") > 0) subJson = JSON_PATH_NETWORKS; @@ -1435,11 +1448,12 @@ void serveJson(AsyncWebServerRequest* request) return; } - if (!requestJSONBufferLock(17)) { + GlobalBufferAsyncJsonResponse *response = new GlobalBufferAsyncJsonResponse(subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS); // will clear and convert JsonDocument into JsonArray if necessary + if (!response->owns_lock()) { request->send(503, "application/json", F("{\"error\":3}")); + delete response; return; } - AsyncJsonResponse *response = new AsyncJsonResponse(&doc, subJson==6); JsonVariant lDoc = response->getRoot(); @@ -1453,6 +1467,9 @@ void serveJson(AsyncWebServerRequest* request) serializeNodes(lDoc); break; case JSON_PATH_PALETTES: serializePalettes(lDoc, request); break; + //serializePalettes(lDoc, request->hasParam("page") ? request->getParam("page")->value().toInt() : 0); break; + case JSON_PATH_EFFECTS: + serializeModeNames(lDoc); break; case JSON_PATH_FXDATA: serializeModeData(lDoc.as()); break; case JSON_PATH_NETWORKS: @@ -1475,7 +1492,6 @@ void serveJson(AsyncWebServerRequest* request) response->setLength(); request->send(response); - releaseJSONBufferLock(); } #ifdef WLED_ENABLE_JSONLIVE From e8a3b5f4424a4cafe16af2a771503bcd6132408e Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:54:46 +0100 Subject: [PATCH 102/108] fix for #3655 make WS2814 explicit in LED driver drop-down menu --- wled00/data/settings_leds.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm index 9082813b..42f629fa 100644 --- a/wled00/data/settings_leds.htm +++ b/wled00/data/settings_leds.htm @@ -334,7 +334,7 @@ ${i+1}: