From 15055fa5099aed55ea249c0236e5759f1fc54ac6 Mon Sep 17 00:00:00 2001 From: Shaheen Gandhi Date: Tue, 24 Aug 2021 22:12:03 -0700 Subject: [PATCH 01/10] Add network debug printer --- platformio.ini | 2 +- wled00/cfg.cpp | 7 + wled00/data/settings_sec.htm | 4 + wled00/html_settings.h | 5 +- wled00/html_ui.h | 1576 +++++++++++++++++----------------- wled00/net_debug.cpp | 75 ++ wled00/net_debug.h | 25 + wled00/set.cpp | 12 + wled00/wled.h | 28 +- wled00/wled00.vcxproj | 1 + wled00/xml.cpp | 5 + 11 files changed, 946 insertions(+), 794 deletions(-) create mode 100644 wled00/net_debug.cpp create mode 100644 wled00/net_debug.h diff --git a/platformio.ini b/platformio.ini index 5939e592..a0d33d6b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -284,7 +284,7 @@ lib_deps = ${esp8266.lib_deps} board = esp32dev platform = espressif32@2.0 build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32 #-D WLED_DISABLE_BROWNOUT_DET +build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32 -D WLED_DEBUG_NET #-D WLED_DISABLE_BROWNOUT_DET lib_deps = ${esp32.lib_deps} [env:esp32_eth] diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 6d86b6ea..6ee85ea3 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -404,6 +404,13 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { } #endif + #ifdef WLED_DEBUG_NET + JsonObject netDebugPrint = doc["netdebug"]; + CJSON(netDebugPrintEnabled, netDebugPrint[F("enabled")]); + getStringFromJson(netDebugPrintHost, netDebugPrint[F("host")], 33); + CJSON(netDebugPrintPort, netDebugPrint[F("port")]); + #endif + DEBUG_PRINTLN(F("Starting usermod config.")); JsonObject usermods_settings = doc["um"]; if (!usermods_settings.isNull()) { diff --git a/wled00/data/settings_sec.htm b/wled00/data/settings_sec.htm index 27f36f12..212e71fb 100644 --- a/wled00/data/settings_sec.htm +++ b/wled00/data/settings_sec.htm @@ -81,6 +81,10 @@
⚠ Restoring presets/configuration will OVERWRITE your current presets/configuration.
Incorrect configuration may require a factory reset or re-flashing of your ESP.
For security reasons, passwords are not backed up. +

Network Debug Logging

+ Log to network:
+ Network logging host:
+ Network logging port:

About

WLED version ##VERSION##

Contributors, dependencies and special thanks
diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 51e331d9..e4a343e8 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -404,7 +404,10 @@ onclick='uploadFile(d.Sf.data2,"/cfg.json")'>
⚠ Restoring presets/configuration will OVERWRITE your current presets/configuration.
Incorrect configuration may require a factory reset or re-flashing of your ESP. -
For security reasons, passwords are not backed up.

About

For security reasons, passwords are not backed up.

+Network Debug Logging

Log to network:
+Network logging host:
Network logging port: +

About

WLED version 0.13.0-b2

(s), strlen(s)); + debugUdp.endPacket(); +} + +void NetworkDebugPrinter::print(const __FlashStringHelper* s) { + print(reinterpret_cast(s)); +} + +void NetworkDebugPrinter::print(String s) { + print(s.c_str()); +} + +void NetworkDebugPrinter::print(unsigned int n) { + char s[10]; + snprintf(s, sizeof(s), "%d", n); + s[9] = '\0'; + print(s); +} + +void NetworkDebugPrinter::println() { + print("\n"); +} + +void NetworkDebugPrinter::println(const char *s) { + print(s); + print("\n"); +} + +void NetworkDebugPrinter::println(const __FlashStringHelper* s) { + print(s); + print("\n"); +} + +void NetworkDebugPrinter::println(String s) { + print(s); + print("\n"); +} + +void NetworkDebugPrinter::println(unsigned int n) { + print(n); + print("\n"); +} + +void NetworkDebugPrinter::printf(const char *fmt...) { + va_list args; + va_start(args, fmt); + char s[1024]; + vsnprintf(s, sizeof(s), fmt, args); + va_end(args); + print(s); +} + +#endif diff --git a/wled00/net_debug.h b/wled00/net_debug.h new file mode 100644 index 00000000..19dad41a --- /dev/null +++ b/wled00/net_debug.h @@ -0,0 +1,25 @@ +#ifndef WLED_NET_DEBUG_H +#define WLED_NET_DEBUG_H + +#include +#include + +class NetworkDebugPrinter { +private: + WiFiUDP debugUdp; +public: + void print(const char *s); + void print(const __FlashStringHelper* s); + void print(String s); + void print(unsigned int n); + void println(); + void println(const char *s); + void println(const __FlashStringHelper* s); + void println(String s); + void println(unsigned int n); + void printf(const char *fmt, ...); +}; + +extern NetworkDebugPrinter NetDebug; + +#endif \ No newline at end of file diff --git a/wled00/set.cpp b/wled00/set.cpp index 37004dd0..495f9c89 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -387,6 +387,18 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) wifiLock = request->hasArg(F("OW")); aOtaEnabled = request->hasArg(F("AO")); } + + #ifdef WLED_DEBUG_NET + netDebugPrintEnabled = request->hasArg(F("NDE")); + if (request->hasArg(F("NDH"))) + { + strlcpy(netDebugPrintHost, request->arg(F("NDH")).c_str(), 33); + } + if (request->hasArg(F("NDP"))) + { + netDebugPrintPort = request->arg(F("NDP")).toInt(); + } + #endif } #ifdef WLED_ENABLE_DMX // include only if DMX is enabled if (subPage == 7) diff --git a/wled00/wled.h b/wled00/wled.h index fc390ae2..864cd936 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -80,6 +80,10 @@ #include "my_config.h" #endif +#ifdef WLED_DEBUG_NET +#include "net_debug.h" +#endif + #include #include #include @@ -599,17 +603,21 @@ WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager()); #endif // enable additional debug output + +#define DEBUG_PRINT(x) +#define DEBUG_PRINTLN(x) +#define DEBUG_PRINTF(x...) + #ifdef WLED_DEBUG #ifndef ESP8266 #include #endif + #undef DEBUG_PRINT + #undef DEBUG_PRINTLN + #undef DEBUG_PRINTF #define DEBUG_PRINT(x) Serial.print(x) #define DEBUG_PRINTLN(x) Serial.println(x) #define DEBUG_PRINTF(x...) Serial.printf(x) -#else - #define DEBUG_PRINT(x) - #define DEBUG_PRINTLN(x) - #define DEBUG_PRINTF(x...) #endif #ifdef WLED_DEBUG_FS @@ -622,6 +630,18 @@ WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager()); #define DEBUGFS_PRINTF(x...) #endif +#ifdef WLED_DEBUG_NET + #undef DEBUG_PRINT + #undef DEBUG_PRINTLN + #undef DEBUG_PRINTF + #define DEBUG_PRINT(x) NetDebug.print(x) + #define DEBUG_PRINTLN(x) NetDebug.println(x) + #define DEBUG_PRINTF(x...) NetDebug.printf(x) + WLED_GLOBAL bool netDebugPrintEnabled _INIT(false); + WLED_GLOBAL char netDebugPrintHost[33] _INIT(""); + WLED_GLOBAL int netDebugPrintPort _INIT(7868); +#endif + // debug macro variable definitions #ifdef WLED_DEBUG WLED_GLOBAL unsigned long debugTime _INIT(0); diff --git a/wled00/wled00.vcxproj b/wled00/wled00.vcxproj index e095b8f7..e372a4e8 100644 --- a/wled00/wled00.vcxproj +++ b/wled00/wled00.vcxproj @@ -227,6 +227,7 @@ + VisualMicroDebugger diff --git a/wled00/xml.cpp b/wled00/xml.cpp index 45320606..0e6e5298 100644 --- a/wled00/xml.cpp +++ b/wled00/xml.cpp @@ -544,6 +544,11 @@ void getSettingsJS(byte subPage, char* dest) oappend(SET_F(" (build ")); oappendi(VERSION); oappend(SET_F(")\";")); +#ifdef WLED_DEBUG_NET + sappend('c',SET_F("NDE"),netDebugPrintEnabled); + sappends('s',SET_F("NDH"),netDebugPrintHost); + sappend('v',SET_F("NDP"),netDebugPrintPort); +#endif } #ifdef WLED_ENABLE_DMX // include only if DMX is enabled From 3bae3aa9aa4f3db8236efbbe96019488cd26ab1c Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 31 Oct 2022 07:13:12 +0100 Subject: [PATCH 02/10] UDP Sync fix - sync new sliders - sync 2D options --- wled00/udp.cpp | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/wled00/udp.cpp b/wled00/udp.cpp index 9fc83a09..bd86f293 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -4,7 +4,7 @@ * UDP sync notifier / Realtime / Hyperion / TPM2.NET */ -#define UDP_SEG_SIZE 28 +#define UDP_SEG_SIZE 36 #define SEG_OFFSET (41+(MAX_NUM_SEGMENTS*UDP_SEG_SIZE)) #define WLEDPACKETSIZE (41+(MAX_NUM_SEGMENTS*UDP_SEG_SIZE)+0) #define UDP_IN_MAXSIZE 1472 @@ -46,7 +46,8 @@ 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) - udpOut[11] = 11; + //12: enhanced effct sliders, 2D & mapping options + udpOut[11] = 12; col = mainseg.colors[1]; udpOut[12] = R(col); udpOut[13] = G(col); @@ -105,7 +106,7 @@ void notify(byte callMode, bool followUp) udpOut[6 +ofs] = selseg.spacing; udpOut[7 +ofs] = selseg.offset >> 8; udpOut[8 +ofs] = selseg.offset & 0xFF; - udpOut[9 +ofs] = selseg.options & 0x0F; //only take into account mirrored, selected, on, reversed + udpOut[9 +ofs] = selseg.options & 0x8F; //only take into account selected, mirrored, on, reversed, reverse_y (for 2D); ignore freeze, reset, transitional udpOut[10+ofs] = selseg.opacity; udpOut[11+ofs] = selseg.mode; udpOut[12+ofs] = selseg.speed; @@ -124,6 +125,14 @@ void notify(byte callMode, bool followUp) udpOut[25+ofs] = B(selseg.colors[2]); udpOut[26+ofs] = W(selseg.colors[2]); udpOut[27+ofs] = selseg.cct; + udpOut[28+ofs] = (selseg.options>>8) & 0xFF; //mirror_y, transpose, 2D mapping & sound + udpOut[29+ofs] = selseg.custom1; + udpOut[30+ofs] = selseg.custom2; + udpOut[31+ofs] = selseg.custom3 | (selseg.check1<<5) | (selseg.check2<<6) | (selseg.check3<<7); + udpOut[32+ofs] = selseg.startY >> 8; + udpOut[33+ofs] = selseg.startY & 0xFF; + udpOut[34+ofs] = selseg.stopY >> 8; + udpOut[35+ofs] = selseg.stopY & 0xFF; ++s; } @@ -347,14 +356,16 @@ void handleNotifications() uint8_t id = udpIn[0 +ofs]; if (id > strip.getSegmentsNum()) break; Segment& selseg = strip.getSegment(id); - uint16_t start = (udpIn[1+ofs] << 8 | udpIn[2+ofs]); - uint16_t stop = (udpIn[3+ofs] << 8 | udpIn[4+ofs]); + if (!selseg.isActive() || !selseg.isSelected()) continue; //do not apply to non selected segments + uint16_t startY = 0, start = (udpIn[1+ofs] << 8 | udpIn[2+ofs]); + uint16_t stopY = 1, stop = (udpIn[3+ofs] << 8 | udpIn[4+ofs]); uint16_t offset = (udpIn[7+ofs] << 8 | udpIn[8+ofs]); if (!receiveSegmentOptions) { - strip.setSegment(id, start, stop, selseg.grouping, selseg.spacing, offset); + strip.setSegment(id, start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY); continue; } - for (size_t j = 0; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, selected, on, reversed + //for (size_t j = 1; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, on, reversed; ignore selected + selseg.options = (selseg.options & 0xFF80) | (udpIn[9 +ofs] & 0x0E); // ignore selected, freeze, reset & transitional selseg.setOpacity(udpIn[10+ofs]); if (applyEffects) { strip.setMode(id, udpIn[11+ofs]); @@ -368,11 +379,26 @@ void handleNotifications() selseg.setColor(2, RGBW32(udpIn[23+ofs],udpIn[24+ofs],udpIn[25+ofs],udpIn[26+ofs])); selseg.setCCT(udpIn[27+ofs]); } + if (version > 11) { + // when applying synced options ignore selected as it may be used as indicator of which segments to sync + // freeze, reset & transitional should never be synced + selseg.options = (selseg.options & 0xFF8F) | (udpIn[28+ofs]<<8) | (udpIn[9 +ofs] & 0x8E); // ignore selected, freeze, reset & transitional + if (applyEffects) { + selseg.custom1 = udpIn[29+ofs]; + selseg.custom2 = udpIn[30+ofs]; + selseg.custom3 = udpIn[31+ofs] & 0x1F; + selseg.check1 = (udpIn[31+ofs]>>5) & 0x1; + selseg.check1 = (udpIn[31+ofs]>>6) & 0x1; + selseg.check1 = (udpIn[31+ofs]>>7) & 0x1; + } + startY = (udpIn[32+ofs] << 8 | udpIn[33+ofs]); + stopY = (udpIn[34+ofs] << 8 | udpIn[35+ofs]); + } //setSegment() also properly resets segments if (receiveSegmentBounds) { - strip.setSegment(id, start, stop, udpIn[5+ofs], udpIn[6+ofs], offset); + strip.setSegment(id, start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY); } else { - strip.setSegment(id, selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset); + strip.setSegment(id, selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY); } } stateChanged = true; From 81d2a679486b89e5aa44f026bbd64594c2c0670f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Wed, 2 Nov 2022 14:56:50 +0100 Subject: [PATCH 03/10] Minor adjustment in UDP segment options sync. Added support for node type for S2, S3 and C3. --- wled00/NodeStruct.h | 3 + wled00/data/index.js | 3 + wled00/html_ui.h | 1317 +++++++++++++++++++++--------------------- wled00/udp.cpp | 16 +- wled00/wled.h | 2 +- 5 files changed, 678 insertions(+), 663 deletions(-) diff --git a/wled00/NodeStruct.h b/wled00/NodeStruct.h index bc95d1e8..916c5a9a 100644 --- a/wled00/NodeStruct.h +++ b/wled00/NodeStruct.h @@ -11,6 +11,9 @@ #define NODE_TYPE_ID_UNDEFINED 0 #define NODE_TYPE_ID_ESP8266 82 #define NODE_TYPE_ID_ESP32 32 +#define NODE_TYPE_ID_ESP32S2 33 +#define NODE_TYPE_ID_ESP32S3 34 +#define NODE_TYPE_ID_ESP32C3 35 /*********************************************************************************************\ * NodeStruct diff --git a/wled00/data/index.js b/wled00/data/index.js index fa54b93c..2cd22bbb 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -954,6 +954,9 @@ function btype(b) { switch (b) { case 32: return "ESP32"; + case 33: return "ESP32-S2"; + case 34: return "ESP32-S3"; + case 35: return "ESP32-C3"; case 82: return "ESP8266"; } return "?"; diff --git a/wled00/html_ui.h b/wled00/html_ui.h index 5f436584..8f8182a3 100644 --- a/wled00/html_ui.h +++ b/wled00/html_ui.h @@ -7,7 +7,7 @@ */ // Autogenerated from wled00/data/index.htm, do not edit!! -const uint16_t PAGE_index_L = 30136; +const uint16_t PAGE_index_L = 30158; const uint8_t PAGE_index[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xd4, 0xbd, 0x69, 0x76, 0xe3, 0x3a, 0xb2, 0x30, 0xf8, 0xdf, 0xab, 0x60, 0x32, 0xab, 0x32, 0xa5, 0x2b, 0x5a, 0xa2, 0x46, 0x6b, 0x48, @@ -1236,661 +1236,662 @@ const uint8_t PAGE_index[] PROGMEM = { 0x88, 0x51, 0x2a, 0x96, 0x5e, 0xb6, 0xb8, 0xa8, 0x97, 0x70, 0x17, 0x2e, 0xd2, 0xfd, 0x16, 0x3c, 0xf5, 0xe8, 0xef, 0x9b, 0x70, 0x7a, 0x4a, 0x20, 0x72, 0x07, 0x1a, 0x0b, 0x0a, 0x8a, 0x9c, 0x84, 0xed, 0x8f, 0x59, 0x0b, 0x3b, 0x84, 0x8c, 0xc1, 0x19, 0x6b, 0xec, 0xb4, 0x56, 0x1b, 0x83, 0x39, - 0xe4, 0x73, 0x55, 0x36, 0xfb, 0xf7, 0x9a, 0x97, 0xf9, 0x9c, 0x58, 0x23, 0xa9, 0x65, 0x3e, 0xb5, - 0x9c, 0x2b, 0x95, 0x44, 0x46, 0x39, 0xe2, 0x16, 0x27, 0x51, 0xb5, 0x8c, 0xd0, 0xa1, 0x38, 0x11, - 0x43, 0x42, 0x90, 0x65, 0x0c, 0xd3, 0xb7, 0x40, 0x10, 0xb1, 0xaa, 0xf4, 0x79, 0x71, 0xb9, 0xa1, - 0x21, 0x8b, 0x49, 0xb8, 0x43, 0xca, 0x2a, 0x80, 0x68, 0x0c, 0xfc, 0x83, 0xf2, 0x34, 0x4c, 0x59, - 0x10, 0x91, 0x30, 0x47, 0xd2, 0xe3, 0xa0, 0x78, 0x4e, 0xca, 0x4b, 0xfc, 0x0d, 0x01, 0xcb, 0x03, - 0x43, 0xf8, 0xa1, 0x42, 0x53, 0x8d, 0xc0, 0x45, 0xee, 0x67, 0x5c, 0x98, 0x5e, 0xdf, 0x4f, 0x5e, - 0x81, 0x0e, 0xcc, 0x43, 0x77, 0x67, 0xb2, 0xd0, 0x1a, 0xec, 0xcc, 0xe1, 0x57, 0x76, 0x0a, 0x82, - 0xe5, 0xfc, 0x4a, 0xdd, 0xe5, 0x29, 0x52, 0x94, 0x24, 0xe7, 0x32, 0x2f, 0xfd, 0x84, 0x64, 0x82, - 0x7f, 0x85, 0x84, 0x07, 0x81, 0x6f, 0xe8, 0x13, 0xa7, 0x6d, 0x92, 0x99, 0xa0, 0xa0, 0x0f, 0xda, - 0x96, 0x78, 0x9e, 0x69, 0x88, 0x55, 0xf2, 0x3c, 0x47, 0xf5, 0xea, 0x27, 0xac, 0xa6, 0xa9, 0xd4, - 0x1c, 0xba, 0xd7, 0x69, 0x7f, 0x93, 0xb7, 0x1c, 0x90, 0x03, 0x42, 0x91, 0xc8, 0xf1, 0x1c, 0x17, - 0xf0, 0x6b, 0xb4, 0x27, 0x74, 0xd2, 0x62, 0x55, 0x26, 0x4e, 0x34, 0x09, 0xcc, 0x76, 0x6e, 0x0a, - 0x26, 0x1e, 0x38, 0x0b, 0xc2, 0x52, 0x0b, 0x5d, 0x9c, 0xe9, 0x69, 0x94, 0xc6, 0x70, 0x6f, 0x2d, - 0x30, 0x42, 0x70, 0x0e, 0x55, 0x3b, 0xd4, 0x17, 0xcc, 0x2f, 0x54, 0x45, 0xb7, 0x2a, 0x82, 0xaf, - 0x39, 0xcd, 0x69, 0xd0, 0xdd, 0x8d, 0x88, 0x13, 0x95, 0x11, 0x5a, 0x35, 0x9d, 0xf0, 0x01, 0x12, - 0x16, 0x97, 0xfa, 0x83, 0x27, 0x47, 0x68, 0x5c, 0xef, 0x8f, 0x1c, 0x1c, 0xf1, 0xcf, 0x3a, 0x0e, - 0xf5, 0x0e, 0x09, 0x3f, 0x8c, 0x95, 0x09, 0x58, 0x9b, 0x80, 0xcb, 0x2f, 0x3d, 0x76, 0x1e, 0x7b, - 0xa2, 0x24, 0xee, 0x62, 0x02, 0x29, 0x4c, 0x93, 0x9e, 0x93, 0x95, 0xa4, 0xbe, 0x73, 0x9a, 0x66, - 0x21, 0x6e, 0x02, 0x51, 0xf3, 0xe8, 0xd2, 0x8b, 0x27, 0x66, 0x30, 0xe8, 0x0f, 0x9d, 0x18, 0x35, - 0xdf, 0x2d, 0x4c, 0x41, 0x1c, 0x63, 0x3d, 0x1f, 0x75, 0x2b, 0xc3, 0xc3, 0x09, 0x38, 0x1d, 0x40, - 0x22, 0x5e, 0x1a, 0xb7, 0xd1, 0x25, 0x4e, 0x6a, 0x5e, 0x94, 0x83, 0x3b, 0xe4, 0x55, 0x24, 0xd2, - 0x5e, 0x4f, 0x4c, 0x7a, 0xb3, 0x4b, 0x4d, 0xf7, 0x15, 0xa7, 0xe1, 0x82, 0x68, 0x09, 0x34, 0x09, - 0x5f, 0x41, 0x9f, 0x16, 0x93, 0x30, 0x43, 0x15, 0x2f, 0x89, 0x38, 0xfa, 0x52, 0xf5, 0xac, 0x0a, - 0xab, 0x9f, 0x77, 0x68, 0x9d, 0xf7, 0xc9, 0x23, 0x1f, 0x33, 0x4e, 0xb2, 0x66, 0x7c, 0x23, 0x67, - 0xa5, 0x61, 0x1e, 0xe5, 0xe8, 0x42, 0xaf, 0x2f, 0x06, 0x62, 0xac, 0xd0, 0x38, 0x8c, 0x34, 0x16, - 0x42, 0xab, 0x97, 0x24, 0x04, 0xf4, 0x4f, 0x2f, 0xa1, 0xbd, 0x5e, 0x62, 0x29, 0xc9, 0x9f, 0xb5, - 0x65, 0xd1, 0x80, 0xf4, 0x39, 0x75, 0x8f, 0x0d, 0xa1, 0x6d, 0x19, 0x06, 0xfd, 0xf0, 0x3d, 0xf4, - 0xda, 0x2c, 0x8a, 0x38, 0xea, 0x80, 0xc6, 0x09, 0x75, 0x4c, 0xff, 0xe4, 0xa2, 0xdd, 0x71, 0x81, - 0x30, 0x48, 0xb4, 0xba, 0x34, 0x0d, 0x4c, 0xff, 0xa7, 0x55, 0xc6, 0x45, 0xa5, 0xe0, 0xee, 0xf5, - 0x62, 0xf1, 0x16, 0x22, 0x84, 0x83, 0xc6, 0x02, 0x4a, 0x36, 0x81, 0xc6, 0xac, 0xa2, 0x52, 0xbd, - 0x10, 0x63, 0x20, 0xf2, 0x9d, 0x75, 0x07, 0x74, 0xac, 0xd8, 0x1c, 0x81, 0xc2, 0x8d, 0xea, 0xe2, - 0xa2, 0x21, 0x5d, 0xae, 0xba, 0x44, 0x17, 0x02, 0xc5, 0x9f, 0x8a, 0xa5, 0xfa, 0x92, 0x9a, 0x1e, - 0x03, 0x40, 0xca, 0x92, 0xaa, 0x82, 0x2c, 0x35, 0xe3, 0xaf, 0xba, 0x12, 0x57, 0x19, 0x73, 0x14, - 0x34, 0xeb, 0x7c, 0x41, 0x34, 0x29, 0xfe, 0xa4, 0x41, 0xb5, 0xd6, 0x5d, 0xb4, 0x65, 0x2a, 0xeb, - 0xfa, 0x66, 0x36, 0x39, 0x33, 0xbf, 0x7c, 0x31, 0x63, 0x0e, 0x0d, 0x51, 0x0f, 0xf0, 0x1a, 0x17, - 0xac, 0xcb, 0xd7, 0x6e, 0xc2, 0xf2, 0xf4, 0x4f, 0x22, 0x4f, 0x7f, 0xe7, 0x84, 0x8a, 0x20, 0xde, - 0xf6, 0x5c, 0xfc, 0x41, 0xab, 0x74, 0x69, 0xb7, 0x9d, 0x25, 0xd2, 0x38, 0x59, 0x83, 0x19, 0x7b, - 0xbb, 0x51, 0x27, 0xae, 0x64, 0x84, 0x9a, 0x4e, 0xfc, 0x83, 0x00, 0x90, 0x41, 0x82, 0x68, 0xf9, - 0x4a, 0xf7, 0xff, 0xf7, 0xbf, 0xff, 0x9f, 0xa8, 0x73, 0x6f, 0x19, 0x4b, 0x9b, 0x5f, 0x35, 0xe2, - 0x1d, 0xdb, 0x41, 0x9e, 0x27, 0x12, 0xab, 0x89, 0x4e, 0xd5, 0x4b, 0x7c, 0xdf, 0xf9, 0x06, 0xb8, - 0xd6, 0xcf, 0x90, 0xd9, 0x67, 0x4e, 0xe7, 0xa2, 0xc8, 0xce, 0xba, 0x27, 0x89, 0x4d, 0xc0, 0xd8, - 0xcc, 0x6e, 0xe9, 0x75, 0x8c, 0x05, 0x01, 0x8b, 0xb3, 0x23, 0x56, 0xd1, 0x6b, 0x84, 0xb8, 0xa6, - 0x8b, 0x59, 0xb2, 0xa9, 0x0a, 0xb4, 0x01, 0xbc, 0xea, 0x53, 0xa8, 0x67, 0x3d, 0xdb, 0xf2, 0x88, - 0x6f, 0xc9, 0x78, 0x93, 0x1c, 0x1e, 0x4d, 0x98, 0x4b, 0xc8, 0xc6, 0x6a, 0x07, 0x44, 0x81, 0xeb, - 0x1c, 0xce, 0xc6, 0x3a, 0x73, 0xb6, 0xd7, 0x28, 0x7f, 0x69, 0xab, 0xc0, 0x32, 0x8d, 0x4c, 0x42, - 0x49, 0x99, 0xa0, 0x34, 0xb0, 0xe0, 0xbe, 0x1a, 0xaa, 0x13, 0xca, 0x66, 0xf6, 0xd7, 0x2f, 0x13, - 0xd4, 0x73, 0x6c, 0x2c, 0xac, 0x5a, 0x42, 0x02, 0x05, 0x59, 0x61, 0xa4, 0xd9, 0xee, 0x50, 0xd1, - 0x93, 0x20, 0xca, 0x86, 0xc8, 0x48, 0x0d, 0x87, 0x45, 0xd0, 0xe7, 0xd1, 0x49, 0x86, 0xe7, 0x50, - 0xa8, 0x00, 0x5f, 0x53, 0xbd, 0x80, 0x36, 0x78, 0x62, 0x45, 0x4c, 0x86, 0xf5, 0x51, 0x35, 0x19, - 0x1b, 0x2d, 0xc4, 0x73, 0x35, 0x49, 0x72, 0xa5, 0xf1, 0x98, 0xdd, 0xef, 0x96, 0x86, 0x11, 0x09, - 0x85, 0x75, 0xc7, 0x73, 0x82, 0xe1, 0xa8, 0x12, 0xa1, 0xcf, 0x73, 0x13, 0x08, 0x0c, 0x98, 0xbf, - 0x1b, 0x25, 0x87, 0x00, 0xa4, 0x94, 0x58, 0x56, 0xf6, 0x55, 0x6f, 0xfd, 0xc4, 0xe0, 0xc8, 0x2b, - 0x0a, 0x2f, 0xa0, 0x09, 0x4f, 0x40, 0xce, 0xe8, 0xc9, 0x6a, 0x22, 0xbc, 0x5c, 0x9a, 0x63, 0xd5, - 0xf6, 0x4e, 0x62, 0x20, 0xbb, 0xab, 0x63, 0xe4, 0xfc, 0x2d, 0x2f, 0x70, 0x0f, 0x06, 0x12, 0xe1, - 0x72, 0x9f, 0xeb, 0xa1, 0xac, 0x86, 0xde, 0x58, 0x96, 0xb3, 0x39, 0x35, 0xda, 0xa1, 0xbc, 0x5e, - 0x90, 0xfd, 0x50, 0x01, 0xe4, 0x97, 0x4c, 0x88, 0x60, 0xb6, 0xd4, 0x66, 0x10, 0x28, 0x1f, 0xf5, - 0xd8, 0x85, 0xf4, 0xfd, 0x49, 0x62, 0xd1, 0xec, 0xca, 0x78, 0xf0, 0xb6, 0xad, 0xc1, 0x24, 0x5b, - 0xf6, 0x95, 0xde, 0x47, 0xbc, 0xfc, 0x7b, 0x70, 0xef, 0xed, 0xf2, 0x3c, 0x3b, 0xd9, 0x55, 0x1f, - 0x73, 0xab, 0x3e, 0xe6, 0xf1, 0xa3, 0x17, 0x73, 0x39, 0xb1, 0x24, 0xd7, 0xf5, 0x0a, 0x08, 0x07, - 0x2b, 0xbe, 0x6d, 0x93, 0xb3, 0x8f, 0x41, 0x40, 0xe5, 0x25, 0xd9, 0xee, 0x45, 0xcf, 0x28, 0x3d, - 0x46, 0xe7, 0xe6, 0x05, 0x23, 0xab, 0x07, 0x20, 0x62, 0x62, 0x65, 0x45, 0x5a, 0x8a, 0x1e, 0x57, - 0x62, 0x67, 0xe7, 0x26, 0x92, 0x9f, 0x0b, 0x6a, 0xcc, 0xc5, 0x92, 0xa5, 0xb6, 0x98, 0xbe, 0x3a, - 0x19, 0x2f, 0x40, 0x51, 0x31, 0x88, 0x6e, 0x6c, 0xa5, 0x34, 0xc0, 0x7f, 0x5c, 0xb5, 0x04, 0x8f, - 0xb0, 0x78, 0x93, 0x0c, 0xb1, 0x65, 0xfb, 0xcb, 0xfa, 0x48, 0xc3, 0x5e, 0xaf, 0x2c, 0xeb, 0xfc, - 0x1b, 0x65, 0x47, 0x2b, 0xca, 0xc6, 0x16, 0x78, 0x59, 0x5d, 0x59, 0x2c, 0x8e, 0x69, 0x49, 0xbb, - 0xd7, 0x5a, 0x59, 0x56, 0xc5, 0x00, 0xbe, 0xb1, 0x25, 0x5f, 0xdb, 0xce, 0xfa, 0x78, 0x45, 0x39, - 0x72, 0x91, 0x42, 0xb4, 0x24, 0x77, 0xe2, 0x8f, 0x3d, 0x92, 0x50, 0x5b, 0xb6, 0x93, 0x58, 0x90, - 0x79, 0x16, 0xe6, 0x31, 0x1f, 0x14, 0xc5, 0x37, 0xc8, 0x49, 0x28, 0x34, 0x47, 0x16, 0x76, 0x1a, - 0x2c, 0x8d, 0x2a, 0xe1, 0x9e, 0x75, 0xf0, 0xc7, 0x77, 0x5f, 0x43, 0xe7, 0x6e, 0xd2, 0xa0, 0xeb, - 0x3c, 0x6e, 0x32, 0xb8, 0xc1, 0x32, 0x29, 0x7b, 0xb6, 0x29, 0x75, 0x61, 0xcd, 0xe7, 0xd8, 0xb4, - 0x83, 0x0e, 0x71, 0xab, 0x18, 0xb9, 0xa4, 0x7e, 0x58, 0xe0, 0xf0, 0x5a, 0x42, 0xd1, 0xf6, 0x7b, - 0x65, 0x56, 0x70, 0xee, 0x25, 0x08, 0x45, 0x06, 0xc8, 0xe3, 0xd2, 0x93, 0x8f, 0xde, 0x43, 0x65, - 0x77, 0x12, 0x87, 0x45, 0x4f, 0x58, 0xfa, 0x53, 0x24, 0x26, 0xde, 0xc1, 0xa2, 0x17, 0xc5, 0x8c, - 0x5e, 0x7b, 0x44, 0x03, 0x0d, 0xf8, 0x87, 0xf1, 0xfe, 0x40, 0xa2, 0x33, 0x92, 0x33, 0x63, 0xc5, - 0x52, 0x89, 0xe7, 0x53, 0xc9, 0xee, 0xcf, 0xa5, 0x62, 0x43, 0xaf, 0x5d, 0x24, 0xcd, 0x00, 0x8a, - 0xa7, 0xcc, 0x18, 0x1f, 0x93, 0x06, 0x83, 0x13, 0x2f, 0x6c, 0xfb, 0x72, 0x31, 0xb0, 0x5f, 0x47, - 0x1b, 0x7d, 0x8f, 0x3a, 0x94, 0x7b, 0xa1, 0xfd, 0xa8, 0xf1, 0x93, 0x6d, 0x3a, 0xe8, 0x8b, 0xf2, - 0xa3, 0xba, 0x5c, 0x7e, 0x54, 0xe3, 0x85, 0xc3, 0xda, 0xef, 0xb4, 0x28, 0xf0, 0x90, 0x7e, 0xb7, - 0x41, 0xff, 0xc7, 0xff, 0x85, 0x0d, 0xfa, 0xf2, 0x85, 0x4b, 0xfb, 0x7f, 0xfe, 0xef, 0xed, 0x85, - 0x46, 0x72, 0x2d, 0xa9, 0x2e, 0x6f, 0x3c, 0x27, 0x71, 0x30, 0xae, 0x72, 0x8d, 0xe1, 0x6a, 0xa8, - 0x29, 0x88, 0x32, 0x2d, 0x72, 0x49, 0xd4, 0xe2, 0x61, 0x5a, 0xef, 0xcc, 0xab, 0x4c, 0xcc, 0xd2, - 0xa6, 0x8d, 0xf3, 0x89, 0xf9, 0xac, 0x42, 0x4b, 0x44, 0x92, 0x11, 0xd5, 0xf8, 0xc7, 0x84, 0x6c, - 0x4d, 0x30, 0xdc, 0x0d, 0x97, 0x82, 0x97, 0x54, 0x25, 0x45, 0x9f, 0x68, 0x75, 0xcd, 0xda, 0x22, - 0x7f, 0x31, 0x6c, 0x9a, 0xbf, 0xed, 0x84, 0x9b, 0xa5, 0x4e, 0x5d, 0x14, 0xba, 0xb6, 0x39, 0x10, - 0xc4, 0x94, 0xc3, 0xd6, 0x42, 0x3d, 0x7c, 0x50, 0xec, 0x27, 0xbd, 0xf2, 0x8b, 0xdc, 0x94, 0xa4, - 0x6a, 0x24, 0x16, 0x0f, 0xb6, 0x82, 0x38, 0x5d, 0xe8, 0x83, 0x39, 0xb1, 0x63, 0xa2, 0xc1, 0x8e, - 0x59, 0x48, 0x82, 0xbb, 0x8f, 0x16, 0x57, 0x35, 0xda, 0x1f, 0xd2, 0x99, 0xa5, 0xbb, 0x96, 0x18, - 0x71, 0x80, 0x22, 0x07, 0x4d, 0xf5, 0x64, 0xeb, 0xc5, 0xf0, 0x22, 0xd6, 0xf8, 0x31, 0x24, 0x6a, - 0x74, 0xec, 0xa0, 0x6b, 0xe4, 0x3b, 0x4c, 0x54, 0xc5, 0xde, 0xc1, 0xeb, 0x7d, 0x48, 0x10, 0x4f, - 0xa3, 0xee, 0xc6, 0x24, 0xd7, 0x26, 0x75, 0x67, 0xb3, 0xb0, 0x01, 0x8c, 0xee, 0x5b, 0xb1, 0xfc, - 0xeb, 0x97, 0xb3, 0x59, 0x2a, 0xe0, 0x73, 0x25, 0x8b, 0xcf, 0x95, 0x12, 0x3e, 0x67, 0x73, 0x79, - 0x7c, 0xc9, 0x15, 0x8b, 0x5b, 0x62, 0x1d, 0x9a, 0xb6, 0x29, 0x4a, 0xd3, 0xba, 0x41, 0x0a, 0x19, - 0xa4, 0x90, 0x41, 0x0a, 0x19, 0xa4, 0x90, 0x41, 0x0a, 0x19, 0xb4, 0x90, 0xc1, 0x17, 0x62, 0xf1, - 0xb8, 0x12, 0x09, 0xd2, 0x3a, 0x2f, 0xf6, 0xd7, 0x96, 0xf8, 0x4d, 0xac, 0x4e, 0x92, 0x29, 0xd6, - 0xa5, 0x88, 0x05, 0x8f, 0x6c, 0x27, 0x84, 0xf3, 0x4e, 0x93, 0x29, 0xda, 0x0f, 0x1a, 0x89, 0x47, - 0x96, 0x66, 0x06, 0xdd, 0x16, 0xac, 0x7e, 0x92, 0x79, 0x6b, 0xcc, 0x40, 0x79, 0x51, 0xef, 0x9b, - 0xc0, 0x05, 0xc7, 0xce, 0xaf, 0x5f, 0x7e, 0x38, 0xff, 0xb1, 0xf3, 0x4d, 0xfe, 0xf5, 0x2b, 0x91, - 0x18, 0x3b, 0x24, 0x4c, 0xf2, 0xbd, 0xda, 0x6a, 0x02, 0xbe, 0x55, 0x37, 0x91, 0x60, 0xe1, 0x9b, - 0x57, 0x84, 0xd0, 0xdd, 0x12, 0xc7, 0x0e, 0xa8, 0x4e, 0xf0, 0x17, 0xad, 0x55, 0xc4, 0x7a, 0x45, - 0x8c, 0x59, 0xd4, 0x84, 0x15, 0x2d, 0xd5, 0x37, 0x1d, 0x97, 0x18, 0xce, 0x52, 0x62, 0x06, 0x4b, - 0x24, 0xd3, 0x2d, 0xcd, 0x50, 0xec, 0xe9, 0x0d, 0xb1, 0x28, 0x93, 0xf0, 0xaf, 0xad, 0x21, 0x70, - 0x21, 0x5b, 0x94, 0xc6, 0x4e, 0x1a, 0xcf, 0x30, 0x3a, 0x0e, 0xda, 0x3b, 0xd0, 0xc8, 0x84, 0x63, - 0xcc, 0xee, 0xac, 0xf0, 0x2d, 0x71, 0x30, 0x1f, 0xc9, 0x0e, 0xc8, 0x36, 0x29, 0xe4, 0x1b, 0x05, - 0xf8, 0x80, 0xb8, 0xa4, 0x40, 0x92, 0x6e, 0xe6, 0x90, 0xc3, 0x9a, 0xc9, 0x59, 0x28, 0x42, 0x22, - 0x17, 0xcc, 0x24, 0x29, 0x71, 0x2f, 0x34, 0xbe, 0x32, 0x77, 0xad, 0x94, 0x17, 0x41, 0x5a, 0x8a, - 0x1a, 0xca, 0xbc, 0x70, 0xa8, 0x1f, 0x0d, 0x7e, 0xa9, 0xfb, 0xb3, 0xcd, 0x4d, 0x93, 0x23, 0x8b, - 0xce, 0x56, 0x22, 0x38, 0xce, 0xef, 0x24, 0x43, 0xa2, 0x3d, 0xbd, 0x75, 0xeb, 0xcb, 0x97, 0xd0, - 0xf1, 0x6d, 0x27, 0x99, 0xac, 0x72, 0x47, 0x1e, 0xe9, 0xa2, 0xe0, 0x92, 0xc8, 0x48, 0xea, 0x16, - 0xfb, 0xad, 0xba, 0xb5, 0x10, 0x13, 0x71, 0x24, 0x03, 0x63, 0xc1, 0x2a, 0x9d, 0x26, 0x39, 0x2f, - 0x6f, 0x00, 0xb7, 0x99, 0x53, 0x24, 0x93, 0x3b, 0x00, 0x09, 0x8a, 0x7f, 0x3b, 0x88, 0xa7, 0xc4, - 0xc5, 0x2a, 0xa0, 0xb4, 0x25, 0x65, 0x8b, 0x68, 0x37, 0x1c, 0xd3, 0xf8, 0xd4, 0xac, 0x06, 0x0c, - 0x5c, 0x4a, 0x2a, 0xb0, 0xd5, 0x57, 0xe7, 0x54, 0xed, 0x29, 0x7a, 0x3d, 0x4c, 0x97, 0x41, 0xbb, - 0xbc, 0x98, 0xa2, 0x64, 0x46, 0xb3, 0xc9, 0x4c, 0xb7, 0xbc, 0x70, 0x07, 0xb8, 0xdd, 0x06, 0x82, - 0xf0, 0x52, 0xe5, 0x1a, 0xb9, 0xa9, 0x0c, 0x1d, 0xb6, 0xa4, 0xa8, 0x2a, 0xc3, 0xc2, 0x5e, 0xa9, - 0x78, 0xe4, 0x8f, 0x5c, 0x64, 0xa6, 0xa6, 0x0d, 0x1d, 0x33, 0xd2, 0x5b, 0xc7, 0xc8, 0x5b, 0x67, - 0x68, 0xb3, 0xbb, 0xc7, 0xc8, 0xab, 0x4b, 0xb3, 0xee, 0x2b, 0x18, 0x45, 0x15, 0x13, 0xf0, 0xea, - 0xf7, 0xe0, 0x82, 0x33, 0x35, 0x3d, 0xec, 0x58, 0x78, 0x84, 0xc1, 0xe8, 0x44, 0x6e, 0x1f, 0x03, - 0x89, 0x56, 0x27, 0xfc, 0x1e, 0x66, 0x0a, 0x3e, 0xe3, 0x65, 0x61, 0x8c, 0x39, 0x93, 0xfb, 0x0b, - 0x69, 0xe3, 0x5c, 0xd7, 0x6f, 0x95, 0x6b, 0x67, 0xb2, 0xb2, 0x14, 0x73, 0xa8, 0x95, 0x91, 0x85, - 0x0c, 0x6c, 0x49, 0x66, 0x97, 0xcc, 0xf8, 0x8a, 0x45, 0xdd, 0xbf, 0x39, 0x2d, 0xe2, 0x80, 0x91, - 0x08, 0xce, 0xb0, 0xf2, 0xae, 0x18, 0x80, 0x31, 0x99, 0xd8, 0x33, 0xc8, 0xe7, 0xef, 0xee, 0x0f, - 0x8c, 0xcb, 0x1d, 0x1c, 0x11, 0x21, 0xfc, 0x1c, 0xcd, 0x36, 0x59, 0x1a, 0x57, 0x8f, 0xe4, 0x80, - 0xf5, 0x1e, 0x84, 0x84, 0x6f, 0x94, 0xd9, 0xbb, 0xc8, 0x1d, 0x73, 0x6c, 0xdd, 0x0f, 0x5d, 0xfd, - 0x41, 0xec, 0x56, 0xed, 0xef, 0x1c, 0xe0, 0x1f, 0xac, 0xb5, 0xbf, 0xea, 0x9f, 0x3e, 0x25, 0xb2, - 0x5f, 0xf4, 0x40, 0xa1, 0x22, 0x29, 0x65, 0x96, 0x02, 0xed, 0x27, 0xef, 0x05, 0x78, 0xf7, 0x2d, - 0x98, 0x08, 0xc4, 0x21, 0x96, 0x5c, 0xb4, 0xbf, 0xa0, 0x93, 0x45, 0x5c, 0x65, 0x0a, 0x57, 0xcb, - 0x42, 0x25, 0x91, 0x3a, 0xfc, 0x2a, 0x90, 0x88, 0x14, 0x6f, 0x45, 0xe0, 0xac, 0xe3, 0xe7, 0xa6, - 0xe0, 0x61, 0x9d, 0x19, 0xc4, 0x03, 0x0d, 0x1f, 0x5e, 0x59, 0x64, 0x80, 0xb8, 0xfd, 0xcb, 0x60, - 0xcb, 0xd6, 0x64, 0xc8, 0x5e, 0xcf, 0xd6, 0xd4, 0x4d, 0xdc, 0xc0, 0x5d, 0x5f, 0x4f, 0x9a, 0xa1, - 0x2d, 0xcd, 0xba, 0x82, 0xea, 0x1b, 0x24, 0x91, 0xc8, 0xf4, 0xa1, 0x2d, 0xcd, 0xe0, 0x53, 0x36, - 0xf2, 0xa9, 0x15, 0x7c, 0xca, 0xfd, 0xe0, 0xd4, 0xd2, 0x44, 0x28, 0xd7, 0x38, 0xc8, 0x85, 0x41, - 0xeb, 0xd9, 0x6d, 0x47, 0x26, 0x89, 0xf0, 0x88, 0xf6, 0xc2, 0x20, 0x50, 0x35, 0xde, 0x97, 0xe7, - 0xd9, 0xb1, 0xa0, 0x4c, 0x1b, 0xa4, 0x55, 0xf2, 0x03, 0x4d, 0xf6, 0x3d, 0x8c, 0xc8, 0xb4, 0x69, - 0xf8, 0xe4, 0x49, 0xbe, 0x27, 0xa5, 0x45, 0xfd, 0xdf, 0xff, 0xee, 0x4c, 0xa4, 0x78, 0xed, 0xdf, - 0xcf, 0xa1, 0x85, 0x72, 0xa0, 0xee, 0x1f, 0x00, 0xcf, 0x6e, 0xe1, 0x9f, 0xaa, 0x2c, 0x45, 0x0c, - 0x00, 0x41, 0x8e, 0x1c, 0xe6, 0xc8, 0x45, 0x72, 0xe4, 0xf9, 0x1c, 0x79, 0xcc, 0x91, 0xaf, 0xe2, - 0x01, 0x6e, 0x12, 0x92, 0x96, 0xc4, 0x76, 0x61, 0xcf, 0x74, 0x15, 0xd0, 0xd0, 0x9d, 0xc2, 0xdb, - 0xd0, 0xf3, 0x3e, 0x90, 0x0d, 0xbc, 0xac, 0x5c, 0x85, 0x8f, 0xc1, 0x0e, 0xc9, 0x00, 0x9d, 0xa3, - 0x84, 0xae, 0x7f, 0x1a, 0xff, 0x93, 0x58, 0x6b, 0x01, 0x43, 0x7a, 0xa1, 0xdb, 0x7d, 0xd9, 0x2c, - 0xe6, 0xc6, 0x80, 0x17, 0xaa, 0x61, 0x0e, 0x7b, 0x7d, 0xc1, 0xb1, 0x94, 0x36, 0x5e, 0x6d, 0x29, - 0x38, 0x18, 0x22, 0x91, 0x46, 0x76, 0x89, 0x14, 0xc9, 0x61, 0x11, 0x16, 0x42, 0x14, 0x6b, 0x60, - 0x7b, 0x4c, 0xa1, 0x3c, 0x79, 0xcc, 0x73, 0xa6, 0xd1, 0x8b, 0x33, 0x35, 0x9b, 0x46, 0x37, 0x0f, - 0x67, 0xa9, 0x60, 0x96, 0x06, 0xd7, 0x32, 0x81, 0x74, 0x43, 0x00, 0xaa, 0x10, 0xcc, 0x36, 0x30, - 0x21, 0xdc, 0xde, 0x9a, 0x73, 0x74, 0x4d, 0x16, 0x25, 0x72, 0xd2, 0x9f, 0x64, 0x84, 0xf5, 0x18, - 0x5e, 0x34, 0xb2, 0x25, 0xe3, 0x4d, 0x02, 0xee, 0x32, 0x45, 0x05, 0x96, 0x48, 0x9d, 0xbf, 0x6b, - 0x51, 0x49, 0x77, 0x27, 0x52, 0xc4, 0xa5, 0x23, 0x3c, 0x33, 0x42, 0x17, 0x6c, 0x2d, 0xa8, 0x0b, - 0x2c, 0x3a, 0xe9, 0x47, 0xdd, 0xa9, 0xbc, 0x1d, 0x20, 0x76, 0x92, 0xff, 0x5f, 0x22, 0xef, 0x5b, - 0xc5, 0x3c, 0xa8, 0x64, 0x09, 0x83, 0x8e, 0xd7, 0x63, 0x3c, 0xab, 0xc8, 0x96, 0x28, 0x06, 0xfc, - 0xfd, 0xfe, 0xa3, 0xea, 0xf0, 0x5e, 0x55, 0xc4, 0x49, 0xcb, 0x60, 0xd5, 0x50, 0x6f, 0x27, 0x0c, - 0xe3, 0x83, 0xf9, 0xf0, 0x97, 0x73, 0x76, 0x02, 0x35, 0xc5, 0xcb, 0xf7, 0x2d, 0xe7, 0xe5, 0xcc, - 0xb2, 0x9c, 0xd9, 0x50, 0x4e, 0x33, 0xc8, 0x99, 0xf7, 0x72, 0xe6, 0x58, 0xce, 0xb0, 0xa7, 0x96, - 0xef, 0x98, 0x06, 0x3c, 0x01, 0xc4, 0xc7, 0x9a, 0x83, 0xde, 0x1c, 0x94, 0x20, 0x39, 0x6a, 0x26, - 0x22, 0xb4, 0xcd, 0xa7, 0x90, 0xab, 0x89, 0x30, 0xb9, 0xf6, 0xc9, 0x45, 0x01, 0x33, 0xa1, 0x82, - 0xb8, 0x58, 0xde, 0xca, 0x55, 0x8b, 0x49, 0x10, 0xd5, 0x3c, 0xac, 0x39, 0xd4, 0xfd, 0x4b, 0x07, - 0x8e, 0xb9, 0x95, 0x08, 0xa5, 0x7e, 0xf2, 0x92, 0x6d, 0xde, 0xd6, 0x0b, 0x09, 0x55, 0x3e, 0x41, - 0x26, 0x21, 0x92, 0xe9, 0xc8, 0x01, 0x25, 0xe3, 0xb4, 0xae, 0x66, 0xf9, 0x34, 0xcd, 0x9f, 0xcc, - 0x55, 0x71, 0x67, 0xe8, 0x80, 0xe6, 0x09, 0x02, 0x9d, 0xb3, 0x0e, 0xf8, 0xd6, 0x96, 0xea, 0x2d, - 0xc9, 0xaa, 0x16, 0xaf, 0xeb, 0x20, 0x03, 0xf6, 0x1b, 0x59, 0x64, 0x3a, 0x4c, 0x77, 0x62, 0x5a, - 0x6e, 0x6c, 0xd8, 0x33, 0x5c, 0x70, 0x39, 0x0c, 0x52, 0xb7, 0x98, 0x3c, 0xf1, 0x87, 0x29, 0xa6, - 0xd4, 0x6f, 0xba, 0xef, 0x70, 0x43, 0x3c, 0xe0, 0xf4, 0xef, 0x90, 0xf8, 0x83, 0xf9, 0xbd, 0x22, - 0xc8, 0x94, 0x9a, 0x5c, 0xda, 0x44, 0xc9, 0xcb, 0xc5, 0xd0, 0xac, 0xf2, 0x6a, 0x0b, 0xe0, 0xce, - 0x07, 0x27, 0x5e, 0x90, 0xb3, 0x98, 0x62, 0x95, 0xbe, 0x73, 0x74, 0x58, 0x82, 0x7e, 0x2e, 0xa9, - 0x8b, 0xef, 0x72, 0x10, 0xdd, 0x6d, 0xb1, 0xa3, 0x24, 0x1f, 0xeb, 0x25, 0x46, 0x91, 0x42, 0x97, - 0x7c, 0x60, 0x69, 0x2c, 0xb2, 0x7f, 0x38, 0xe8, 0xd9, 0xc2, 0x56, 0x26, 0x47, 0x2b, 0x44, 0x72, - 0xa6, 0xc1, 0x5f, 0x92, 0x80, 0x9e, 0x7a, 0x91, 0xed, 0xfa, 0x74, 0xa2, 0xda, 0xf9, 0x67, 0x6a, - 0xe2, 0x10, 0x78, 0xd3, 0x03, 0xb5, 0x57, 0x84, 0x6c, 0x0b, 0x6a, 0x4a, 0xc4, 0xcb, 0xc6, 0xe6, - 0xd2, 0x46, 0x91, 0x99, 0x2f, 0xda, 0xe4, 0xe6, 0x52, 0xfc, 0x83, 0x51, 0x32, 0x86, 0x75, 0x5c, - 0x46, 0x22, 0x03, 0x13, 0xb3, 0x3c, 0x86, 0x3c, 0x98, 0x10, 0x4c, 0x37, 0x58, 0x44, 0x01, 0x63, - 0x21, 0xe7, 0x42, 0x95, 0x0e, 0x23, 0x4e, 0x6a, 0xc2, 0x36, 0xba, 0x4b, 0xbc, 0x5b, 0xa5, 0x50, - 0x89, 0x4f, 0x7e, 0x11, 0x04, 0x3f, 0xaa, 0x87, 0x79, 0x45, 0x0e, 0x88, 0x87, 0x1b, 0xd7, 0x91, - 0x34, 0xa2, 0xb9, 0xd1, 0x5f, 0x37, 0x55, 0xb7, 0xf0, 0xe0, 0x4a, 0x5d, 0x4c, 0x61, 0x0a, 0xf6, - 0x0d, 0x23, 0x75, 0xd3, 0xe1, 0xea, 0x86, 0x67, 0x88, 0xba, 0x25, 0xee, 0x4f, 0xc8, 0xbc, 0x80, - 0xa7, 0xed, 0x1e, 0xce, 0x04, 0x47, 0xac, 0x7d, 0xca, 0x4a, 0x20, 0x35, 0x0d, 0x3f, 0x61, 0xc8, - 0x45, 0x6e, 0x81, 0x55, 0x81, 0xb6, 0xd0, 0x19, 0x01, 0xe1, 0xb8, 0x5b, 0xdd, 0x58, 0x0f, 0xe2, - 0xea, 0xf2, 0xde, 0xf1, 0x55, 0x8b, 0x30, 0xd5, 0x54, 0x8c, 0x22, 0xb2, 0xb2, 0x2a, 0xba, 0xbb, - 0x83, 0x38, 0x3d, 0x5d, 0x88, 0xea, 0xd5, 0x26, 0x83, 0xd7, 0xf7, 0x4d, 0x85, 0x18, 0xc6, 0x7d, - 0x10, 0x18, 0x0e, 0x45, 0xa6, 0x07, 0xfd, 0xfa, 0x65, 0x46, 0xfc, 0x49, 0x4d, 0xe2, 0x4e, 0x4a, - 0xf7, 0x98, 0xf0, 0x99, 0x7a, 0x85, 0xf4, 0x97, 0x18, 0x62, 0x69, 0xe3, 0xd7, 0xc3, 0x16, 0x4e, - 0x1e, 0x24, 0x82, 0x08, 0x2c, 0x22, 0x75, 0x31, 0xe9, 0xed, 0xe5, 0xb4, 0xea, 0x0b, 0x9f, 0x6a, - 0x64, 0xb7, 0x6b, 0xa0, 0x4c, 0x60, 0x00, 0xe9, 0xa3, 0x66, 0x24, 0x70, 0x9f, 0xdd, 0x9f, 0x0a, - 0xa4, 0x08, 0x1b, 0xe4, 0x16, 0xe0, 0x07, 0x6f, 0x4c, 0xc1, 0xb4, 0x3a, 0xf7, 0x81, 0xfa, 0x85, - 0xb6, 0x92, 0xf3, 0x50, 0xcf, 0x3e, 0xb1, 0xae, 0x6d, 0x0d, 0x38, 0x24, 0x61, 0x42, 0x75, 0x10, - 0x72, 0x90, 0x8f, 0x78, 0xf5, 0xe3, 0x79, 0x76, 0x7a, 0x9a, 0x85, 0x3f, 0x4f, 0x4b, 0x2e, 0xb6, - 0x63, 0x87, 0x0d, 0x5a, 0x79, 0x7a, 0xde, 0x95, 0xa8, 0x44, 0x02, 0xb3, 0xb5, 0x7e, 0xa5, 0x54, - 0xf0, 0x5f, 0x01, 0x9a, 0x88, 0x11, 0xe8, 0xef, 0xff, 0x55, 0xea, 0xc7, 0x92, 0x58, 0x4c, 0x88, - 0x9e, 0xc0, 0x77, 0x73, 0xd1, 0x1d, 0x93, 0x79, 0x61, 0x12, 0xad, 0xa1, 0xf7, 0x2d, 0xbf, 0x68, - 0x7f, 0x8d, 0x37, 0xec, 0x05, 0x03, 0xf7, 0x97, 0xb0, 0x03, 0xa3, 0x5a, 0xff, 0x23, 0x33, 0x17, - 0x12, 0x02, 0xa7, 0x09, 0x66, 0x6b, 0x9c, 0x1e, 0x18, 0xdc, 0x63, 0xc2, 0x85, 0x26, 0xfe, 0x3d, - 0xbd, 0x74, 0x0a, 0x7a, 0xe9, 0x27, 0x98, 0x39, 0x7e, 0x15, 0xc9, 0x19, 0xa7, 0xd7, 0xff, 0xfa, - 0xc5, 0xab, 0xfc, 0x0b, 0xf7, 0x21, 0x8c, 0x61, 0x2d, 0x1d, 0xa3, 0x65, 0x16, 0x74, 0xe2, 0x84, - 0xaf, 0xc7, 0x4a, 0xd1, 0x98, 0xac, 0x73, 0x29, 0xaf, 0xe6, 0x93, 0xde, 0xc5, 0x25, 0x34, 0x4b, - 0xfd, 0x3d, 0x2f, 0x1e, 0x47, 0x43, 0x47, 0x2e, 0x56, 0x03, 0xaa, 0xbc, 0x53, 0xa2, 0xf3, 0xd6, - 0xeb, 0x75, 0xdf, 0xe4, 0x92, 0xbe, 0xb8, 0xdc, 0x3b, 0x07, 0x11, 0x06, 0x18, 0x8f, 0x65, 0x3a, - 0x78, 0x38, 0x12, 0x5d, 0x7d, 0x88, 0xfa, 0x8b, 0x1e, 0x18, 0xe4, 0x62, 0x6d, 0xd0, 0x2d, 0xa1, - 0xc5, 0xfc, 0xd5, 0x08, 0x68, 0x96, 0x48, 0x1b, 0xe6, 0x38, 0x91, 0xc4, 0x00, 0x6e, 0x5e, 0xec, - 0x34, 0x5f, 0xed, 0xa4, 0x7c, 0x17, 0x16, 0x1a, 0xad, 0x03, 0x0b, 0x3b, 0x7d, 0xf8, 0xf2, 0x85, - 0xf9, 0xe1, 0x70, 0x8a, 0x2a, 0x9d, 0xa2, 0xdc, 0x96, 0x75, 0x56, 0xfe, 0x4b, 0xf1, 0x76, 0xa9, - 0xcd, 0x4f, 0xa0, 0xb7, 0xfe, 0xff, 0xc5, 0x5d, 0xfd, 0x72, 0xdb, 0x46, 0x92, 0xff, 0xff, 0x9e, - 0x82, 0x42, 0x12, 0x8b, 0x58, 0x41, 0x32, 0x28, 0xd9, 0x89, 0x03, 0x0a, 0x54, 0x25, 0x76, 0x72, - 0xab, 0x5a, 0xc7, 0xa7, 0x8a, 0x9c, 0x64, 0x53, 0x2a, 0xd5, 0x8a, 0xa4, 0x40, 0x91, 0x65, 0x08, - 0x40, 0x08, 0xe8, 0xc3, 0x4b, 0x71, 0x5f, 0xe0, 0xde, 0xe5, 0x9e, 0xf1, 0xba, 0x7b, 0xbe, 0x7a, - 0x06, 0x00, 0x3f, 0xec, 0xdc, 0x5e, 0xd5, 0x66, 0x2d, 0x0e, 0x80, 0x99, 0x9e, 0x99, 0x9e, 0x99, - 0x9e, 0x9e, 0x9e, 0xdf, 0x8f, 0x82, 0x6f, 0xcd, 0x07, 0x71, 0xee, 0x2f, 0xbb, 0xd2, 0xdd, 0x62, - 0x00, 0x10, 0x13, 0x06, 0x84, 0x7e, 0xf4, 0x82, 0xc2, 0x61, 0x70, 0x4b, 0x1f, 0x54, 0xda, 0x12, - 0x40, 0x6a, 0x04, 0xb5, 0xc9, 0x83, 0x51, 0x9a, 0x94, 0x05, 0xc5, 0xd1, 0xc5, 0x66, 0xe7, 0x87, - 0xa0, 0x55, 0xea, 0xc3, 0x65, 0x76, 0xf2, 0x50, 0xd2, 0xc6, 0xbb, 0x0b, 0xbd, 0xb7, 0xbb, 0xf0, - 0xee, 0xbd, 0x08, 0x59, 0x66, 0x96, 0xbb, 0x7e, 0x24, 0xc2, 0xa7, 0x4a, 0x1d, 0x19, 0x95, 0x06, - 0xc8, 0x51, 0x95, 0x20, 0xc1, 0x35, 0x92, 0x6f, 0x60, 0x1c, 0xe1, 0x3e, 0x86, 0x95, 0x41, 0x43, - 0x22, 0x11, 0xd2, 0x4c, 0xf8, 0xa1, 0xa8, 0x3b, 0xfa, 0x1d, 0xf4, 0xf9, 0xe1, 0x06, 0xfe, 0x97, - 0xf7, 0x3f, 0xee, 0xbf, 0xf2, 0x96, 0xc1, 0x28, 0xbf, 0xfe, 0x18, 0x55, 0x3c, 0xae, 0x6a, 0x0b, - 0x4f, 0xd1, 0x86, 0xd8, 0xbd, 0x95, 0xf0, 0x64, 0x6d, 0xe2, 0x57, 0x42, 0x0d, 0xdb, 0xd2, 0xb5, - 0x74, 0x03, 0xaa, 0x2f, 0xdd, 0xa1, 0x95, 0x76, 0x97, 0x2c, 0x28, 0x66, 0x10, 0x9b, 0xd5, 0xc4, - 0x74, 0x90, 0xdf, 0x88, 0x7c, 0x2c, 0x38, 0xeb, 0x0b, 0x06, 0x63, 0xd5, 0xf8, 0x3e, 0x21, 0x1e, - 0x10, 0xc5, 0x67, 0x29, 0xe1, 0x10, 0x61, 0x2a, 0xf1, 0xed, 0xd5, 0x9f, 0x3d, 0x11, 0xcb, 0xbd, - 0xb2, 0x40, 0x1c, 0x56, 0xb0, 0xeb, 0xd9, 0xbd, 0x57, 0x8b, 0x25, 0xe7, 0xd4, 0x5d, 0xc8, 0x4d, - 0x72, 0x00, 0xad, 0x28, 0x27, 0xcc, 0x35, 0xa1, 0xee, 0xb0, 0x2e, 0xec, 0x27, 0x81, 0xf7, 0xaf, - 0x8e, 0xb0, 0x4d, 0x71, 0xaf, 0xb3, 0xe7, 0x75, 0xfe, 0xe5, 0x7d, 0x4e, 0xe4, 0x3b, 0xe5, 0xc9, - 0x43, 0xdf, 0x97, 0x96, 0x37, 0xae, 0xc5, 0x03, 0xb7, 0x34, 0x3e, 0xab, 0x9a, 0xe7, 0x4d, 0x82, - 0x87, 0xd2, 0xfd, 0x0c, 0xd1, 0xb6, 0x02, 0x14, 0x14, 0x57, 0xf3, 0x06, 0x3a, 0x27, 0x09, 0xdd, - 0xcb, 0xe7, 0x9f, 0x15, 0xb3, 0xc3, 0xd3, 0x93, 0xf2, 0xe2, 0x22, 0xd1, 0xd3, 0xe1, 0x4b, 0xf4, - 0xea, 0x31, 0xaf, 0x9a, 0xc4, 0x10, 0x65, 0x9b, 0x42, 0x14, 0x00, 0x66, 0xd6, 0xb2, 0x80, 0xf5, - 0x27, 0xf1, 0x24, 0xd0, 0xf3, 0xaa, 0xe0, 0x3d, 0x37, 0x06, 0x8c, 0x02, 0x1d, 0xf4, 0xd1, 0xd9, - 0x22, 0xcf, 0x22, 0x72, 0xbc, 0x21, 0x76, 0x6f, 0xb6, 0x24, 0x27, 0x1c, 0x1f, 0xce, 0xc6, 0x7b, - 0x43, 0x2e, 0x7c, 0xeb, 0x67, 0x99, 0xdc, 0x08, 0xc7, 0x83, 0x70, 0xf0, 0x23, 0xbb, 0x02, 0x39, - 0x80, 0x10, 0x8c, 0x5a, 0x78, 0x82, 0x42, 0x71, 0x7f, 0xc8, 0xfd, 0x2a, 0x98, 0xcc, 0xff, 0x89, - 0x54, 0xf2, 0x54, 0x59, 0xb3, 0x44, 0xd4, 0xc2, 0xd5, 0xde, 0xa5, 0x16, 0x01, 0x4f, 0x17, 0x5d, - 0x7f, 0x3b, 0xf0, 0x7f, 0xfe, 0xc9, 0x15, 0xb6, 0x3b, 0x4c, 0x8b, 0xe2, 0x8e, 0x67, 0xe7, 0x77, - 0xa4, 0x29, 0x10, 0x84, 0x3c, 0xc4, 0x12, 0x40, 0xbb, 0xe3, 0x2f, 0x17, 0xe4, 0x0f, 0x1c, 0x84, - 0x27, 0x1e, 0x6e, 0x01, 0x08, 0x44, 0x62, 0x49, 0xa9, 0x88, 0xa9, 0x09, 0x89, 0x78, 0xfa, 0x02, - 0x33, 0xc9, 0x04, 0xb4, 0x55, 0x3e, 0x78, 0x73, 0x37, 0x5f, 0xe2, 0x35, 0x5d, 0x8a, 0x13, 0xbc, - 0x8a, 0x3c, 0x51, 0xca, 0xb5, 0xb8, 0x4b, 0x8a, 0x48, 0x82, 0x18, 0x5a, 0xca, 0x65, 0x86, 0x6f, - 0x22, 0x6c, 0x42, 0x10, 0x6a, 0xb9, 0xac, 0xc9, 0x8f, 0xb1, 0x1f, 0x76, 0x0d, 0xb4, 0x03, 0x72, - 0x47, 0xfd, 0xe5, 0xc3, 0x26, 0x85, 0x82, 0x58, 0x49, 0x7c, 0xe2, 0x48, 0x43, 0xa6, 0x82, 0x2c, - 0xa9, 0x1e, 0xf2, 0xf9, 0x07, 0x51, 0x1d, 0x58, 0x0c, 0x3a, 0xf8, 0x3e, 0xfa, 0x29, 0x88, 0xfb, - 0x00, 0x6c, 0x04, 0x24, 0x4c, 0x79, 0x8f, 0x7f, 0x8b, 0x6a, 0x13, 0x1b, 0xc2, 0xfa, 0x7c, 0x3a, - 0x69, 0x9e, 0xdd, 0xc0, 0x4b, 0x98, 0xdb, 0x81, 0xa7, 0xae, 0xaa, 0x2c, 0xd0, 0x19, 0x1a, 0x2d, - 0x70, 0x52, 0x8e, 0x94, 0x5c, 0xcb, 0x65, 0x9f, 0x21, 0xa6, 0x52, 0x27, 0x93, 0xcb, 0x74, 0x8e, - 0xf8, 0xa9, 0x5a, 0xf8, 0x35, 0x1d, 0x88, 0x80, 0xad, 0xf7, 0xb3, 0x04, 0x96, 0xb2, 0x85, 0x1a, - 0x78, 0x74, 0xf9, 0x4e, 0x3c, 0xa5, 0xb1, 0x87, 0x43, 0x92, 0xdc, 0xe3, 0xd6, 0x23, 0xe3, 0x30, - 0x7f, 0x7b, 0x8f, 0xaa, 0xf9, 0xf6, 0x5e, 0xdd, 0xaa, 0x49, 0x65, 0x96, 0x9e, 0x0e, 0xe8, 0xc3, - 0xe5, 0xd4, 0xa4, 0x1f, 0xbe, 0xf1, 0xe8, 0x2b, 0x64, 0x97, 0x77, 0xd8, 0xe1, 0xbd, 0x0f, 0xec, - 0x25, 0xfb, 0x4e, 0xe5, 0x6c, 0x82, 0x7e, 0x0f, 0xba, 0x44, 0xca, 0xde, 0xe9, 0x20, 0x61, 0xa4, - 0x37, 0x1c, 0xc1, 0x00, 0x8f, 0x46, 0xe9, 0x30, 0xa3, 0x50, 0x77, 0xf1, 0xea, 0x60, 0x57, 0x18, - 0xee, 0xb7, 0x56, 0x96, 0xee, 0x49, 0x1e, 0x0a, 0xb2, 0xd1, 0x81, 0xdd, 0x52, 0x50, 0x36, 0x3a, - 0xc6, 0xa0, 0xf8, 0xbc, 0x1e, 0x52, 0x52, 0xad, 0x32, 0x4e, 0x90, 0xe5, 0x46, 0xe5, 0x06, 0xe2, - 0x53, 0x1e, 0x55, 0x64, 0xd5, 0xc2, 0x8a, 0x4f, 0x72, 0x83, 0x9e, 0xb0, 0x48, 0x16, 0x99, 0x44, - 0x8d, 0x8f, 0xb3, 0xd8, 0xba, 0x99, 0x8c, 0x9e, 0xd3, 0xba, 0x0e, 0x8b, 0x7a, 0x0a, 0xab, 0xfa, - 0x64, 0x08, 0x73, 0x17, 0x2c, 0xeb, 0x92, 0x66, 0xce, 0xd5, 0x0d, 0xd1, 0xfb, 0x0b, 0xdd, 0xfb, - 0xf5, 0x8e, 0xb7, 0x34, 0xc2, 0xa8, 0x12, 0xe2, 0xe9, 0xe2, 0xc7, 0xa8, 0x17, 0xa7, 0x62, 0x85, - 0xb3, 0x18, 0xf3, 0x24, 0x2d, 0x2a, 0x3c, 0x69, 0xec, 0x11, 0xfc, 0x64, 0xa3, 0x3e, 0xe1, 0xad, - 0x74, 0xea, 0x34, 0x92, 0xc8, 0xc4, 0x34, 0x53, 0x6d, 0xe6, 0x92, 0x01, 0xe1, 0x4a, 0xeb, 0x1d, - 0x85, 0x5f, 0x59, 0x37, 0xfa, 0x16, 0x2b, 0x47, 0x7f, 0xf8, 0x82, 0xc0, 0x50, 0xb5, 0x8b, 0x40, - 0x62, 0xa6, 0x00, 0xf2, 0xa6, 0xca, 0xd1, 0x6b, 0x5b, 0xd7, 0xee, 0x9d, 0xcc, 0x8f, 0xd7, 0x50, - 0xe6, 0xd4, 0x54, 0x45, 0x5c, 0xb1, 0xf0, 0x16, 0xb5, 0x5a, 0x43, 0xc2, 0xa0, 0xb2, 0xb0, 0x34, - 0x29, 0xe2, 0x54, 0xed, 0x11, 0x1b, 0x43, 0x76, 0xab, 0xfd, 0x9e, 0x09, 0xda, 0x0d, 0x7a, 0xa1, - 0xbf, 0xb7, 0xc9, 0x15, 0x5c, 0xfc, 0xaa, 0xe4, 0x5f, 0x45, 0xa1, 0xdf, 0x2f, 0xf9, 0x1d, 0x5b, - 0xa2, 0x46, 0x71, 0xae, 0x4e, 0x97, 0xe3, 0x79, 0x9e, 0xa6, 0x90, 0x53, 0xfe, 0x2b, 0x36, 0xf1, - 0x62, 0x94, 0x4c, 0x87, 0xf7, 0xb3, 0x7c, 0x1e, 0x69, 0x1a, 0x3d, 0x1a, 0x60, 0xf0, 0x93, 0xe8, - 0x05, 0x97, 0x2a, 0x2c, 0x63, 0x03, 0x2c, 0x99, 0x24, 0x22, 0x5a, 0xb3, 0x66, 0x10, 0x2f, 0x8d, - 0xd0, 0x35, 0x68, 0x06, 0x4b, 0x5a, 0x87, 0x8e, 0x54, 0x07, 0x46, 0xaa, 0xb6, 0x00, 0x46, 0x72, - 0xb0, 0x90, 0xde, 0x81, 0x59, 0x2a, 0xaf, 0x85, 0x77, 0xe8, 0x72, 0x4f, 0x23, 0x1c, 0x12, 0x03, - 0x42, 0x62, 0xa8, 0x1c, 0x04, 0x64, 0x43, 0x50, 0xc4, 0xb1, 0x77, 0xf4, 0xea, 0x2b, 0x6f, 0x53, - 0x58, 0xa4, 0x96, 0xef, 0xfe, 0x2f, 0x30, 0x92, 0x9e, 0x33, 0x08, 0x11, 0x2e, 0xf6, 0x66, 0x60, - 0x1d, 0xd5, 0x5a, 0x14, 0x24, 0xa1, 0x0a, 0xfb, 0x3d, 0xad, 0x0c, 0x36, 0x0a, 0x52, 0xd2, 0x86, - 0xdc, 0x51, 0xb5, 0x23, 0x77, 0x54, 0x0e, 0x72, 0xc7, 0x36, 0xe2, 0xae, 0x83, 0x41, 0xca, 0xb8, - 0x70, 0xd9, 0x9f, 0x26, 0xdc, 0x36, 0xb8, 0x22, 0x90, 0x43, 0x9f, 0x61, 0x0a, 0xf4, 0x9b, 0xc0, - 0x16, 0xa6, 0x35, 0x90, 0x91, 0x6a, 0x3d, 0xc8, 0x08, 0xef, 0xec, 0x3f, 0x13, 0xa6, 0x68, 0x6b, - 0x74, 0xa2, 0xea, 0x53, 0xd0, 0x89, 0xc2, 0x16, 0x30, 0x9f, 0x6a, 0x05, 0x98, 0x4f, 0xf5, 0x09, - 0xc8, 0x44, 0xd5, 0x06, 0xc8, 0x44, 0xb7, 0x53, 0x0b, 0x81, 0x48, 0xfc, 0xfc, 0x2c, 0xe9, 0x08, - 0x7f, 0xdc, 0x00, 0x07, 0xb5, 0x82, 0xc0, 0x58, 0xca, 0x4c, 0x08, 0x30, 0x5f, 0x2e, 0xf4, 0xc8, - 0x4a, 0x96, 0x14, 0xc0, 0xcf, 0xf1, 0x12, 0xd9, 0xb7, 0x63, 0x6f, 0xb0, 0x01, 0x01, 0x17, 0xd3, - 0x3c, 0x6f, 0xf0, 0x1a, 0x63, 0x4b, 0x52, 0xa6, 0x4a, 0x35, 0x00, 0x0f, 0x05, 0xc8, 0xd8, 0x0a, - 0xba, 0x91, 0xf2, 0xe0, 0x06, 0x9d, 0xf5, 0x62, 0x05, 0x48, 0x87, 0xb3, 0x22, 0x28, 0x21, 0x4b, - 0xbd, 0x6f, 0x95, 0x10, 0xef, 0x78, 0x8d, 0xe8, 0xae, 0x8c, 0x0e, 0x5f, 0x14, 0x8f, 0x9a, 0xd2, - 0x2d, 0xc4, 0xd1, 0xd2, 0x8e, 0xdf, 0xb8, 0x12, 0x68, 0x86, 0x30, 0x32, 0x6a, 0xb0, 0x8d, 0xe8, - 0x25, 0x14, 0xf8, 0xca, 0x9b, 0xc2, 0xc7, 0xae, 0x86, 0x3e, 0xd4, 0x16, 0xc0, 0x3a, 0x0c, 0x95, - 0xde, 0xab, 0x21, 0x0d, 0x64, 0xb9, 0xf6, 0x88, 0x86, 0x16, 0xff, 0xbf, 0x4b, 0x9e, 0xc3, 0x42, - 0xd0, 0x5c, 0x21, 0xff, 0x57, 0x51, 0x46, 0x78, 0xb6, 0x7e, 0x7d, 0x37, 0x8f, 0x2e, 0xc0, 0x46, - 0xb9, 0x0c, 0x8c, 0x6b, 0x2a, 0xba, 0xd8, 0xef, 0x5d, 0xc2, 0x5e, 0x03, 0xb1, 0x65, 0xa2, 0x30, - 0x98, 0x47, 0xb8, 0xd5, 0x84, 0xcd, 0x0a, 0x6c, 0x90, 0xfb, 0x96, 0x59, 0x72, 0x06, 0xb5, 0x4d, - 0x75, 0xd8, 0x89, 0xba, 0x70, 0xd9, 0x6f, 0x62, 0xc1, 0xc9, 0x5a, 0x08, 0x70, 0x2c, 0xba, 0xfa, - 0x4c, 0x5d, 0x0e, 0x21, 0xa6, 0x9a, 0xec, 0x44, 0xfc, 0x13, 0x19, 0x46, 0x49, 0xbc, 0x9c, 0x4d, - 0x67, 0x7c, 0x29, 0x0f, 0xe3, 0x72, 0x7e, 0x1e, 0x14, 0xe5, 0xd3, 0x53, 0x97, 0xae, 0x24, 0xda, - 0x80, 0xa2, 0xa0, 0xf6, 0x48, 0x3f, 0x84, 0x97, 0x80, 0xf1, 0x0f, 0x3a, 0xa2, 0xb0, 0x31, 0x45, - 0xf1, 0x7a, 0xb3, 0x86, 0x14, 0xbd, 0x32, 0x27, 0xbf, 0x5c, 0x21, 0x27, 0x20, 0xcc, 0xf4, 0x2c, - 0xfd, 0xc1, 0x26, 0xee, 0xf4, 0xc0, 0x44, 0x50, 0xe7, 0x34, 0x95, 0xe1, 0x68, 0x2a, 0x6d, 0xe5, - 0x9c, 0xcc, 0xe6, 0x25, 0x4c, 0x26, 0xde, 0x40, 0x91, 0xd8, 0x74, 0x64, 0x73, 0xc8, 0x4e, 0xa2, - 0xe0, 0x95, 0xec, 0x58, 0x74, 0x13, 0x31, 0x5a, 0xaa, 0x28, 0xc2, 0x7e, 0xb6, 0xb7, 0xe7, 0x43, - 0x9d, 0x44, 0xb3, 0xc3, 0x74, 0x30, 0xff, 0x08, 0x0d, 0x8f, 0x0c, 0x42, 0x7b, 0x76, 0x11, 0xd3, - 0xf9, 0x3f, 0x95, 0x37, 0x66, 0x37, 0xa8, 0xf8, 0x25, 0x4a, 0x19, 0x8e, 0x52, 0xb5, 0xde, 0x11, - 0xa4, 0x71, 0x9d, 0xee, 0x23, 0x1e, 0x91, 0xdf, 0x4f, 0xf5, 0xe9, 0x2e, 0xde, 0x94, 0xa1, 0xc3, - 0x82, 0x26, 0x7c, 0x17, 0xee, 0x2f, 0x25, 0x90, 0xf6, 0x2e, 0xb1, 0xce, 0xf8, 0x2b, 0x00, 0xee, - 0x29, 0x7b, 0x0e, 0x35, 0xdf, 0x19, 0xfa, 0x99, 0x0e, 0xcf, 0x80, 0xbe, 0x42, 0x02, 0x26, 0x03, - 0x1f, 0xcf, 0x1e, 0xf8, 0x03, 0xbc, 0xff, 0x24, 0x7a, 0xd3, 0x7a, 0x10, 0xf1, 0x16, 0xbb, 0x30, - 0x8f, 0xc8, 0xe5, 0x7e, 0xc9, 0xc1, 0xe8, 0x85, 0x47, 0x96, 0xfb, 0x69, 0x60, 0x1a, 0x38, 0x4b, - 0x45, 0x28, 0xa4, 0xd5, 0xee, 0x78, 0x2e, 0x3d, 0x4e, 0xba, 0xd5, 0x5e, 0x2f, 0x08, 0x03, 0xbc, - 0xce, 0xa9, 0x1f, 0xc2, 0x98, 0xb1, 0x9f, 0x5a, 0x8f, 0x2e, 0xaa, 0x4b, 0xfe, 0xb2, 0x19, 0x56, - 0x6d, 0xdf, 0x98, 0x37, 0xe8, 0x53, 0x4b, 0xc3, 0x58, 0x54, 0x6b, 0x92, 0x36, 0x8a, 0x69, 0xce, - 0xe0, 0xbb, 0x8d, 0xe2, 0x63, 0x10, 0x40, 0xb3, 0xe8, 0xf6, 0x93, 0x06, 0x39, 0xf1, 0x05, 0x4b, - 0x1a, 0x4e, 0x89, 0x92, 0x26, 0x67, 0xa5, 0xb8, 0x9c, 0x6f, 0x0b, 0x84, 0x28, 0x36, 0xba, 0xbd, - 0xcb, 0xda, 0xcd, 0x48, 0xf8, 0xee, 0xcd, 0xdd, 0x5c, 0x7d, 0x58, 0xd6, 0x3c, 0xeb, 0x5d, 0xb7, - 0x2d, 0xb9, 0xaf, 0xbe, 0x17, 0xfe, 0xa5, 0xd4, 0x3d, 0xc8, 0xb3, 0x7c, 0xbf, 0x59, 0x8e, 0x56, - 0x4b, 0x6f, 0x92, 0xf1, 0xcf, 0x8c, 0x90, 0x59, 0xe5, 0xd2, 0xc7, 0xf0, 0x24, 0x71, 0x33, 0x2a, - 0x45, 0x63, 0x74, 0x5e, 0xdd, 0x30, 0xfc, 0xa4, 0x80, 0x3f, 0x29, 0xac, 0x47, 0x27, 0x5d, 0x3c, - 0xcd, 0xc1, 0x49, 0x15, 0xf6, 0x70, 0x9a, 0x21, 0x16, 0x63, 0xe2, 0xd8, 0x37, 0x79, 0xef, 0xaa, - 0x05, 0x49, 0x29, 0x32, 0x9f, 0xdb, 0xbb, 0x35, 0x55, 0x98, 0xb9, 0x39, 0x47, 0xb9, 0x36, 0xbe, - 0x05, 0x83, 0xef, 0x87, 0xec, 0xda, 0xbc, 0xb9, 0xa6, 0x64, 0xe1, 0x0c, 0x71, 0x82, 0x60, 0xcf, - 0xec, 0xfb, 0xf5, 0x72, 0xc6, 0x13, 0x93, 0xbc, 0x69, 0x6b, 0x21, 0xea, 0x89, 0x9b, 0x00, 0xcb, - 0x6d, 0xc9, 0x40, 0xd2, 0xa1, 0xef, 0x84, 0x41, 0x2f, 0xd7, 0x69, 0xc6, 0xad, 0xda, 0x0b, 0x91, - 0x5a, 0x55, 0x4e, 0x65, 0x2b, 0xc1, 0xdf, 0xcf, 0xa7, 0x77, 0x93, 0x09, 0xec, 0xab, 0x08, 0x91, - 0xb7, 0x75, 0xb5, 0x36, 0xbd, 0xc5, 0x57, 0x6c, 0xec, 0x63, 0x41, 0x2e, 0x86, 0xf4, 0xc6, 0x46, - 0xd8, 0xa7, 0xa7, 0x0c, 0xa3, 0xbf, 0x6b, 0x58, 0x6f, 0xeb, 0x91, 0xde, 0x18, 0x6a, 0xc2, 0x1a, - 0x58, 0x7d, 0xc2, 0x6e, 0xc3, 0x29, 0x6a, 0x32, 0xcb, 0x66, 0x55, 0x92, 0x7e, 0xdc, 0xac, 0x06, - 0xc5, 0xaa, 0x2a, 0x64, 0xe8, 0x80, 0x05, 0x71, 0x95, 0xe0, 0x9f, 0x22, 0xb5, 0xe9, 0x1c, 0xa1, - 0x17, 0xba, 0x77, 0x14, 0x90, 0x8b, 0x2c, 0xc6, 0x0e, 0x2d, 0xf7, 0xf4, 0xb7, 0xc6, 0x78, 0x94, - 0x75, 0x6c, 0x34, 0xa2, 0x5d, 0x7b, 0x99, 0xd7, 0x90, 0x59, 0xc6, 0xac, 0x76, 0x68, 0x49, 0xf7, - 0x0e, 0xbf, 0x21, 0xcb, 0x3a, 0x94, 0x8b, 0xba, 0x10, 0x25, 0x8b, 0x7a, 0x50, 0x51, 0x3c, 0xda, - 0x33, 0x96, 0xac, 0x03, 0xbd, 0xee, 0x0d, 0x40, 0xf1, 0x65, 0xc8, 0x59, 0x24, 0x01, 0xda, 0x37, - 0x44, 0x67, 0x4f, 0x13, 0x2e, 0x9d, 0x18, 0x42, 0x2d, 0x1d, 0x40, 0x77, 0x20, 0x40, 0xb2, 0x98, - 0x2b, 0x13, 0x5e, 0x3f, 0xb4, 0x7e, 0x81, 0x25, 0x45, 0xc5, 0xbb, 0x10, 0xee, 0x83, 0x77, 0xd0, - 0x92, 0x1c, 0xd2, 0xdc, 0x05, 0x55, 0x7f, 0xf9, 0x12, 0xdb, 0xb4, 0xac, 0xf2, 0xb9, 0x8a, 0x9e, - 0xe3, 0x6f, 0x7f, 0xb9, 0x30, 0x46, 0xd9, 0xca, 0xd2, 0xe9, 0xac, 0x82, 0x3a, 0xdd, 0x82, 0x4b, - 0x77, 0x2c, 0xf4, 0x7a, 0x77, 0x6e, 0xb0, 0x17, 0xa8, 0x40, 0x3a, 0x58, 0xa7, 0xb0, 0x39, 0x82, - 0x8e, 0x32, 0x82, 0x37, 0x22, 0xe9, 0x7b, 0x0f, 0x5f, 0x3a, 0xdb, 0x86, 0xab, 0xa5, 0x82, 0xda, - 0x29, 0xd7, 0xf0, 0x3f, 0xd4, 0x94, 0xdc, 0x06, 0x3b, 0x39, 0x15, 0x8c, 0x53, 0x9d, 0x11, 0x21, - 0xd0, 0x64, 0x49, 0x59, 0x8a, 0x1d, 0x89, 0xc1, 0x48, 0x5f, 0x31, 0xea, 0x88, 0x91, 0x7d, 0x44, - 0x83, 0x4e, 0x8e, 0xaa, 0x3f, 0x79, 0x26, 0x58, 0x23, 0xfc, 0x39, 0xc6, 0x4a, 0x2a, 0x77, 0xd2, - 0x08, 0x4f, 0x2e, 0xb7, 0x95, 0xbe, 0xfc, 0x7f, 0x94, 0xfe, 0xb5, 0x28, 0xd4, 0xc0, 0x24, 0xe6, - 0x99, 0x9c, 0xe8, 0xb6, 0x91, 0x1f, 0x8a, 0xf2, 0xb6, 0x94, 0xfb, 0xca, 0x01, 0x94, 0xd2, 0xc7, - 0x62, 0xb7, 0xc3, 0x82, 0xfc, 0xbc, 0xfc, 0x37, 0xa3, 0x57, 0x2d, 0x1d, 0x9e, 0x00, 0x64, 0x78, - 0x80, 0x6a, 0xbe, 0x4d, 0xae, 0xe1, 0xc5, 0xe8, 0x59, 0x36, 0x2a, 0x8b, 0xfe, 0x56, 0xb4, 0x0e, - 0x54, 0x85, 0xf4, 0x16, 0xdf, 0xb1, 0x87, 0xb3, 0x33, 0xde, 0xaf, 0xd8, 0x75, 0x29, 0x81, 0x61, - 0xc6, 0x25, 0xa4, 0x70, 0x93, 0xc6, 0x4d, 0x4d, 0xb5, 0x44, 0xa7, 0x18, 0xc6, 0xec, 0x68, 0x82, - 0xf8, 0x94, 0x84, 0x95, 0x68, 0x48, 0xce, 0x0e, 0xa7, 0x62, 0x3b, 0x1c, 0xdc, 0x3d, 0x78, 0x8d, - 0xb3, 0x80, 0x02, 0xe6, 0xb9, 0xda, 0x0c, 0x50, 0x5e, 0x90, 0x4f, 0xe0, 0x7e, 0x0a, 0xa1, 0x28, - 0x0c, 0x62, 0x36, 0xd5, 0xbd, 0x7a, 0xdc, 0x06, 0x62, 0x1e, 0x6a, 0x72, 0xa2, 0x98, 0x3a, 0x37, - 0xc3, 0x99, 0x77, 0x66, 0x29, 0x43, 0x6f, 0xdb, 0x21, 0x4d, 0x88, 0x56, 0xb8, 0x7d, 0x4b, 0x0b, - 0x14, 0xdf, 0x08, 0xc4, 0xe4, 0xf9, 0x23, 0x55, 0xb4, 0xa1, 0xac, 0x4a, 0x7f, 0xa4, 0x4d, 0x35, - 0x7a, 0x3e, 0x68, 0x9c, 0x39, 0xa7, 0xde, 0xa0, 0x9b, 0x26, 0x38, 0x8a, 0x13, 0x3a, 0x4f, 0x86, - 0x6e, 0xc6, 0xc3, 0x41, 0x26, 0xa7, 0x98, 0xf5, 0x7c, 0xfb, 0x6b, 0xe8, 0x2a, 0xba, 0x95, 0x86, - 0xad, 0x4a, 0xeb, 0xef, 0xae, 0x5a, 0x7f, 0x71, 0xc1, 0xdd, 0xd5, 0x36, 0xc9, 0xe7, 0x8c, 0x4e, - 0x28, 0xe3, 0xc4, 0x3b, 0x87, 0x3e, 0xeb, 0x14, 0x7a, 0x47, 0x0a, 0xc6, 0x73, 0x3e, 0xf7, 0x22, - 0xec, 0x07, 0xef, 0xbf, 0x34, 0xe5, 0xfb, 0xc3, 0xac, 0x9a, 0x0a, 0x06, 0x77, 0x28, 0xf8, 0x17, - 0x98, 0x95, 0xe5, 0x45, 0x0e, 0x99, 0xb6, 0xdc, 0x72, 0x48, 0x8f, 0x4b, 0xc7, 0x8a, 0x81, 0x9f, - 0xaf, 0x4b, 0x63, 0xc7, 0x60, 0xbd, 0x9f, 0x9e, 0xaa, 0xcf, 0xb6, 0xc0, 0x9a, 0xfa, 0xa3, 0xc8, - 0x0f, 0x39, 0x87, 0xed, 0xa1, 0x37, 0xf8, 0xee, 0xec, 0xb4, 0x03, 0x5d, 0x79, 0x3b, 0xcc, 0xae, - 0x05, 0xad, 0xa0, 0x22, 0xa7, 0x97, 0x5f, 0x0c, 0x8b, 0x19, 0x29, 0xb1, 0xfe, 0x08, 0x12, 0x6c, - 0xc2, 0xfa, 0xe6, 0x72, 0x7a, 0xbc, 0x9c, 0x1e, 0x3a, 0xde, 0xca, 0x65, 0xdb, 0xe2, 0x4a, 0xd3, - 0x7c, 0x95, 0x77, 0x4e, 0xdf, 0xb4, 0xd9, 0x4b, 0x66, 0x35, 0xba, 0x76, 0x8d, 0x27, 0x6d, 0x2e, - 0x51, 0x83, 0x40, 0xf7, 0x5c, 0x73, 0xa3, 0xe9, 0xf0, 0x65, 0x48, 0x46, 0x53, 0x4f, 0x1b, 0x4d, - 0xd8, 0xb9, 0x49, 0x04, 0x5b, 0xf4, 0xb7, 0xec, 0x24, 0xe9, 0xac, 0xeb, 0x2f, 0x07, 0x6d, 0xe2, - 0x51, 0xd3, 0xaf, 0x5f, 0xff, 0x31, 0xb0, 0xff, 0x4c, 0x2c, 0xff, 0xca, 0xb1, 0xbd, 0xd2, 0x65, - 0xa5, 0x7c, 0xcf, 0x58, 0x7b, 0x0b, 0xfa, 0x57, 0xc8, 0xb8, 0xdb, 0x5e, 0x24, 0xb5, 0xc6, 0xee, - 0x5e, 0xb2, 0xb7, 0x7b, 0x9d, 0xa4, 0x36, 0xe8, 0xf0, 0x59, 0x97, 0xd2, 0x37, 0xc6, 0x1c, 0x16, - 0xc0, 0xc5, 0xbb, 0xd1, 0xee, 0xa6, 0xce, 0xce, 0x33, 0xdb, 0xdb, 0xb9, 0xbb, 0xe4, 0xa2, 0x37, - 0xeb, 0xc2, 0xc3, 0x70, 0xae, 0x2a, 0xe5, 0x8d, 0x0a, 0x01, 0xf8, 0x3e, 0x66, 0x7d, 0x8a, 0xcf, - 0x19, 0x36, 0xb7, 0xaa, 0xbe, 0x3d, 0x8d, 0x80, 0x6e, 0x60, 0xcd, 0x3c, 0x39, 0x47, 0x63, 0x26, - 0x57, 0xce, 0xe6, 0x4c, 0x3a, 0x4b, 0x45, 0xb4, 0x91, 0xf0, 0x4c, 0x09, 0x87, 0x69, 0xbf, 0x29, - 0xaa, 0x10, 0x06, 0xef, 0xc7, 0x51, 0x5e, 0x09, 0xd6, 0x4d, 0x3b, 0x16, 0x51, 0xa0, 0x98, 0x04, - 0x09, 0xbf, 0xa3, 0xda, 0x40, 0x3d, 0x6c, 0x0e, 0xde, 0xa4, 0xf9, 0xd9, 0x0d, 0x7d, 0x45, 0xf5, - 0xcc, 0x01, 0x75, 0x8a, 0x10, 0x47, 0x90, 0x0f, 0xbb, 0xe7, 0x49, 0x3e, 0xbe, 0xc3, 0xc3, 0xd5, - 0x4a, 0x5d, 0x34, 0x23, 0x74, 0x4f, 0xd8, 0x03, 0x5d, 0x63, 0x4c, 0x4d, 0x42, 0x77, 0xad, 0xd8, - 0xed, 0x69, 0x42, 0x0b, 0x83, 0x97, 0x45, 0x12, 0x85, 0x85, 0x6d, 0x7c, 0xc8, 0x38, 0x4e, 0x32, - 0x0a, 0x37, 0x91, 0x27, 0xb9, 0x45, 0xf9, 0xa3, 0x08, 0x05, 0x6b, 0x6e, 0x08, 0xd8, 0x75, 0xd6, - 0xf6, 0xba, 0xda, 0xd5, 0x56, 0x35, 0xe2, 0x0e, 0xc2, 0xe4, 0x8f, 0xcf, 0xeb, 0xa7, 0x8e, 0xcc, - 0x0d, 0x47, 0x8f, 0x8c, 0x73, 0xfe, 0xd8, 0x20, 0xf1, 0xeb, 0x03, 0xbb, 0x57, 0xe1, 0x57, 0x1e, - 0xa3, 0x29, 0xdd, 0x8a, 0x3b, 0xca, 0xd9, 0x0b, 0xa2, 0x5b, 0x46, 0x0f, 0xbf, 0x40, 0xd2, 0xfc, - 0xe9, 0x6d, 0x89, 0xf7, 0xa5, 0xeb, 0xac, 0xd1, 0x10, 0x89, 0xe8, 0x2a, 0x93, 0xe6, 0x84, 0x3e, - 0xf0, 0x69, 0xda, 0x4f, 0xd0, 0x57, 0xfe, 0x72, 0x15, 0xe1, 0x92, 0x86, 0xa8, 0x47, 0xf2, 0xd5, - 0xb5, 0xbb, 0x87, 0x74, 0x1f, 0xf4, 0x8d, 0x8d, 0x30, 0xe1, 0x90, 0xdb, 0x7c, 0x0a, 0x51, 0x5e, - 0xef, 0xfa, 0xf1, 0x95, 0x3e, 0xbc, 0xb2, 0xda, 0xdc, 0x48, 0xf4, 0xe6, 0x6e, 0x4e, 0x31, 0x8d, - 0x6d, 0x12, 0xbf, 0xd7, 0xfe, 0xa2, 0xb6, 0x37, 0xbe, 0x00, 0x09, 0xf7, 0x7a, 0xcb, 0x4d, 0x4b, - 0x54, 0xfd, 0xfd, 0x02, 0xfa, 0x7b, 0xe5, 0xd1, 0x92, 0x3d, 0xbb, 0x5b, 0x06, 0x90, 0x12, 0x5a, - 0x4c, 0xed, 0x5f, 0xbf, 0x7c, 0x79, 0x74, 0x20, 0x66, 0xf7, 0xf0, 0xe0, 0x10, 0x16, 0xe3, 0xa4, - 0x80, 0x3f, 0x7a, 0x7c, 0xff, 0x4c, 0x0e, 0xb7, 0x9a, 0x4a, 0x68, 0xfb, 0xc6, 0x75, 0xb8, 0x3d, - 0xef, 0x21, 0x67, 0x78, 0xd9, 0x52, 0xe3, 0x3f, 0xa3, 0x06, 0xa6, 0x59, 0x55, 0x1d, 0x74, 0x0d, - 0xc2, 0xe6, 0x1a, 0xbc, 0xdf, 0xac, 0x02, 0x96, 0x7f, 0x6f, 0x75, 0x3d, 0x56, 0x68, 0x63, 0x7d, - 0x39, 0xd9, 0x46, 0x1b, 0x6b, 0x38, 0xf6, 0xca, 0xaa, 0xae, 0x69, 0x88, 0x39, 0xb0, 0xab, 0xa1, - 0x6a, 0x8a, 0x71, 0x27, 0xa7, 0x72, 0x64, 0x63, 0x47, 0x2f, 0x3c, 0x8b, 0x4b, 0xfc, 0x3d, 0xbf, - 0xeb, 0x64, 0x09, 0xec, 0xaa, 0x86, 0x55, 0x07, 0x2c, 0x4b, 0xb0, 0xda, 0x0e, 0xa5, 0x3f, 0xa0, - 0x44, 0x13, 0x02, 0x3f, 0xef, 0x0c, 0xb5, 0x49, 0xb7, 0xe3, 0x69, 0x47, 0x6f, 0x68, 0x35, 0x52, - 0x78, 0x89, 0xf8, 0x0b, 0xdd, 0x96, 0x67, 0x71, 0x35, 0x17, 0x90, 0x68, 0x5b, 0xae, 0x23, 0x2b, - 0xd6, 0x0b, 0x6f, 0x50, 0x8b, 0xcc, 0x30, 0x0b, 0x88, 0x3a, 0xa6, 0xec, 0x85, 0x21, 0x5b, 0x4c, - 0xc8, 0x57, 0xc1, 0x77, 0x26, 0x57, 0xdc, 0x27, 0x1d, 0xaa, 0x99, 0x5d, 0xac, 0x2e, 0x7a, 0x6d, - 0xf9, 0x77, 0xad, 0x11, 0xdc, 0x1a, 0x58, 0xb4, 0x7d, 0x2f, 0xe0, 0x42, 0xd4, 0xc7, 0xeb, 0x9a, - 0x54, 0xbf, 0x5d, 0x5f, 0x97, 0x95, 0x20, 0x0d, 0x4b, 0x73, 0x9b, 0xe9, 0x52, 0x3a, 0xe7, 0x88, - 0xca, 0x72, 0x51, 0x2e, 0xbd, 0x09, 0xec, 0x3f, 0xaa, 0x28, 0x4d, 0x26, 0x55, 0x7f, 0xd3, 0x79, - 0x56, 0x39, 0x9e, 0x94, 0x7e, 0x6f, 0x58, 0x70, 0xda, 0x58, 0x32, 0x39, 0x64, 0x36, 0x2f, 0x5a, - 0x6a, 0xb4, 0x2e, 0x7c, 0x97, 0x85, 0x82, 0xd1, 0x06, 0x22, 0x71, 0x71, 0xcf, 0xe4, 0x56, 0xc3, - 0xb8, 0xe1, 0xfb, 0xe6, 0x49, 0x83, 0xcb, 0xbb, 0x6a, 0x82, 0x2d, 0x92, 0x6f, 0x1f, 0x36, 0xbd, - 0x2d, 0x2e, 0x29, 0xc9, 0x8f, 0x2c, 0x69, 0x88, 0x43, 0x2e, 0x51, 0xd1, 0xdd, 0x14, 0x24, 0x78, - 0x0c, 0xba, 0x7d, 0xa2, 0x71, 0xf6, 0xae, 0x22, 0xca, 0x78, 0x1f, 0x12, 0x71, 0x8f, 0x6c, 0xf0, - 0x70, 0xea, 0x60, 0x8f, 0x04, 0xf0, 0x18, 0x70, 0xdb, 0x49, 0x99, 0x43, 0xa0, 0x06, 0x8d, 0xb0, - 0xc3, 0x32, 0x19, 0xe9, 0x74, 0x11, 0xc2, 0x73, 0x78, 0x43, 0x8b, 0x06, 0x0f, 0x0c, 0x34, 0x87, - 0xd5, 0xba, 0xd1, 0x90, 0xc7, 0x39, 0xba, 0xb8, 0x5c, 0x3a, 0x37, 0x31, 0x05, 0x0d, 0x05, 0xde, - 0xc6, 0xc4, 0x72, 0x6f, 0x04, 0x1e, 0x34, 0x86, 0x1a, 0x97, 0x78, 0x05, 0x16, 0xaf, 0xab, 0x88, - 0xa6, 0xa5, 0x28, 0x14, 0x13, 0x1b, 0x58, 0xd5, 0x0a, 0xfb, 0xe1, 0x11, 0xcb, 0x6a, 0x23, 0x98, - 0xe8, 0x7f, 0x8e, 0x10, 0x25, 0x6c, 0x18, 0x97, 0x68, 0x5e, 0xca, 0x4b, 0xfa, 0x71, 0x12, 0xac, - 0x96, 0x65, 0x95, 0x24, 0x76, 0xd4, 0x31, 0xca, 0x43, 0xc4, 0x0c, 0x54, 0x90, 0x85, 0x45, 0xc8, - 0xa9, 0x33, 0xac, 0x90, 0x64, 0x49, 0xbf, 0x62, 0xab, 0xa3, 0xee, 0x78, 0x15, 0x55, 0x57, 0xae, - 0xc5, 0xe0, 0xcc, 0xd6, 0x61, 0x70, 0xe2, 0xf1, 0x4b, 0xb8, 0x13, 0xcb, 0xa3, 0xf3, 0xd4, 0x2a, - 0x08, 0x54, 0x82, 0x9d, 0x4c, 0x0d, 0x6d, 0x98, 0xc9, 0x19, 0x7b, 0x64, 0x83, 0x67, 0x5a, 0xb5, - 0x0a, 0x66, 0xd6, 0xb3, 0xe2, 0x61, 0x6e, 0xc1, 0x47, 0x19, 0xf2, 0x6d, 0xa4, 0xc3, 0xc6, 0x7b, - 0xb9, 0xac, 0xb9, 0xb2, 0xa8, 0x0a, 0x28, 0xce, 0x0f, 0xfb, 0x08, 0xcf, 0x74, 0x6a, 0x11, 0x42, - 0x25, 0x32, 0x7b, 0x64, 0xd0, 0xdc, 0xf7, 0x51, 0x1a, 0xdc, 0xce, 0xa2, 0x61, 0x80, 0x11, 0xf2, - 0xc1, 0x68, 0x3e, 0x8b, 0x1a, 0xeb, 0x4d, 0x0c, 0x27, 0x1a, 0x9f, 0x14, 0x7a, 0x23, 0x5f, 0x2e, - 0xfb, 0x0e, 0xc2, 0x29, 0x83, 0x99, 0x1c, 0x6f, 0x00, 0x33, 0x79, 0xbd, 0x1e, 0x66, 0x32, 0x28, - 0x9a, 0xdf, 0xc9, 0x27, 0xa6, 0x1b, 0xe6, 0xa4, 0x94, 0x90, 0x73, 0x3c, 0x0e, 0xc4, 0xdf, 0x90, - 0x43, 0x7c, 0x2d, 0xff, 0xce, 0x27, 0x71, 0xb1, 0x14, 0x7f, 0x82, 0x66, 0xd0, 0x4d, 0x24, 0x41, - 0x04, 0x99, 0xd8, 0x41, 0xdd, 0x73, 0x7e, 0x32, 0x2d, 0xc3, 0xbb, 0xfe, 0x3d, 0x3a, 0xe4, 0xf4, - 0x0c, 0x79, 0x9e, 0xb2, 0xa7, 0xa7, 0x9d, 0x5a, 0x7a, 0x76, 0x1c, 0x97, 0xfe, 0xb5, 0x1a, 0x42, - 0x02, 0xc1, 0x5e, 0xa8, 0xde, 0x27, 0xf4, 0xbc, 0xe8, 0x3d, 0x0a, 0x2c, 0x5f, 0x01, 0x0b, 0xca, - 0x91, 0x62, 0xf3, 0xf5, 0x48, 0xb1, 0xa9, 0x68, 0x7e, 0xe2, 0x14, 0x8f, 0x87, 0x81, 0xfa, 0x99, - 0x17, 0xbf, 0xc7, 0x35, 0x31, 0x86, 0x28, 0x46, 0xbe, 0x6c, 0x57, 0xa1, 0xd9, 0x06, 0x2a, 0x34, - 0xdf, 0x40, 0x85, 0xc6, 0xeb, 0x55, 0x28, 0xd5, 0x2a, 0x34, 0x53, 0x42, 0x83, 0x0a, 0xcd, 0xe5, - 0xdf, 0xa0, 0x42, 0xe3, 0x40, 0x30, 0x76, 0x8b, 0x84, 0xaa, 0x88, 0xdb, 0x60, 0x5b, 0x31, 0x72, - 0xc5, 0x28, 0x55, 0x6a, 0xa1, 0x63, 0xe9, 0xc9, 0xcf, 0xb0, 0xf9, 0x9c, 0x34, 0x99, 0x96, 0x60, - 0x47, 0x4e, 0xd1, 0x25, 0x75, 0x0b, 0xcb, 0xc9, 0x0c, 0x6c, 0x70, 0xe3, 0xc1, 0x87, 0x27, 0xf2, - 0xf8, 0x1a, 0xd6, 0xbe, 0x1d, 0x3c, 0x99, 0x56, 0x59, 0xed, 0xef, 0xb7, 0xce, 0x9c, 0xa8, 0x04, - 0x21, 0x4c, 0x91, 0xd6, 0x3c, 0x4c, 0xb4, 0xeb, 0x04, 0xf4, 0xde, 0xf8, 0x11, 0x4e, 0x0b, 0xad, - 0xf3, 0x99, 0x35, 0xdd, 0x2a, 0xb2, 0xf1, 0x15, 0x79, 0xfd, 0x6e, 0x67, 0xf5, 0x7b, 0x7b, 0x4e, - 0x3f, 0xcd, 0x56, 0xe4, 0x03, 0x93, 0x54, 0xdb, 0x34, 0x5a, 0xcf, 0x67, 0x95, 0x40, 0xb7, 0xb6, - 0x40, 0xb7, 0xab, 0x04, 0x42, 0xee, 0xee, 0x15, 0x39, 0xc1, 0x63, 0x3b, 0x2f, 0x48, 0x40, 0x5b, - 0x45, 0x3a, 0x51, 0x4e, 0x71, 0x6b, 0xef, 0xe6, 0x49, 0x94, 0xd2, 0xed, 0x79, 0x22, 0x84, 0x9b, - 0xbd, 0xd4, 0x41, 0xc2, 0xba, 0x3c, 0xdf, 0x17, 0x2b, 0x72, 0xac, 0x8a, 0xa8, 0x4d, 0x5d, 0x6b, - 0xb2, 0x25, 0x37, 0x67, 0x0f, 0xf3, 0x15, 0x79, 0xc1, 0x22, 0xb1, 0xb3, 0xc5, 0xaa, 0xd4, 0x90, - 0xff, 0xf7, 0xf3, 0x55, 0x9d, 0xbc, 0xd1, 0xfa, 0x63, 0x5f, 0x41, 0xd2, 0x64, 0xc8, 0xea, 0xee, - 0x2d, 0x33, 0x66, 0x16, 0x78, 0x03, 0xcb, 0xab, 0x3c, 0x98, 0xed, 0x04, 0x9a, 0x4c, 0x9c, 0x08, - 0x20, 0x01, 0x18, 0xc5, 0xb0, 0xe9, 0x49, 0x02, 0x73, 0x03, 0x2c, 0x61, 0x17, 0x39, 0xe5, 0xfd, - 0xad, 0xda, 0xb5, 0xb0, 0x2e, 0x64, 0x9b, 0xc2, 0x4e, 0xa6, 0x07, 0xa3, 0x69, 0x85, 0x91, 0x53, - 0xfd, 0xf8, 0x77, 0x2d, 0x8c, 0xb8, 0xb0, 0x1a, 0x27, 0x27, 0x0c, 0x25, 0xc1, 0x45, 0x3c, 0xd8, - 0x55, 0x88, 0x07, 0x2e, 0x7e, 0x63, 0x24, 0xbb, 0x69, 0x57, 0xd3, 0x71, 0xb9, 0x9f, 0x5e, 0xb5, - 0x7d, 0x7a, 0xc1, 0xa3, 0xb6, 0x2f, 0x39, 0xae, 0x74, 0xd8, 0x30, 0x53, 0x4c, 0x1e, 0x4d, 0xab, - 0xc3, 0x94, 0x39, 0x79, 0xbc, 0x4e, 0x26, 0x50, 0x4b, 0xa7, 0xf7, 0x14, 0xb6, 0xe7, 0x76, 0x75, - 0x53, 0x1c, 0x3a, 0x8d, 0x38, 0x9f, 0x9b, 0xd4, 0x70, 0x65, 0x06, 0xdb, 0xd5, 0x13, 0x3e, 0x8b, - 0x12, 0xb7, 0x5a, 0xa8, 0x91, 0x8e, 0x42, 0xd6, 0xd4, 0xb0, 0x0e, 0xd3, 0xe5, 0xbb, 0xaa, 0x8d, - 0xb8, 0x24, 0xdd, 0x26, 0xc5, 0x2e, 0x1f, 0x1b, 0xf3, 0xb2, 0xf0, 0x89, 0x6a, 0x23, 0x45, 0xe3, - 0x13, 0x35, 0x66, 0x39, 0x6b, 0xce, 0xb2, 0x06, 0x6a, 0x54, 0xcb, 0x56, 0xdc, 0x40, 0x85, 0x1e, - 0x94, 0x68, 0x65, 0xb8, 0x33, 0x7a, 0x7a, 0x4a, 0x06, 0x47, 0xbe, 0x3d, 0x6e, 0x96, 0x4b, 0xd7, - 0xbc, 0x51, 0x88, 0x46, 0x84, 0x22, 0x22, 0xd7, 0xcd, 0x23, 0xea, 0x7d, 0x31, 0x9c, 0xc6, 0x47, - 0x71, 0x19, 0x1d, 0xf2, 0x84, 0x43, 0x48, 0x90, 0x7f, 0xf6, 0xe2, 0xd2, 0x1d, 0x2f, 0x96, 0x58, - 0x02, 0xbf, 0x04, 0xc5, 0x62, 0x48, 0x6a, 0xae, 0x6c, 0xa5, 0x96, 0x4d, 0x16, 0x5c, 0x8a, 0xe5, - 0xf9, 0x28, 0xde, 0xd9, 0xa9, 0x64, 0xd1, 0x32, 0xe9, 0x90, 0x92, 0xe4, 0x8f, 0x1e, 0xfe, 0xb0, - 0x8a, 0x2f, 0x9d, 0xe2, 0xdf, 0xe6, 0xf5, 0x39, 0x0f, 0xc7, 0x79, 0xe2, 0x0e, 0x00, 0xda, 0x80, - 0xb3, 0x5d, 0x1b, 0x82, 0xa7, 0x2d, 0xfb, 0xf2, 0xde, 0xac, 0x3a, 0x04, 0x86, 0x79, 0x62, 0x47, - 0x1f, 0x08, 0x3f, 0xcc, 0xc0, 0x96, 0xe3, 0xbf, 0x0c, 0x1a, 0xc1, 0x19, 0x3a, 0x90, 0x12, 0xcf, - 0x3f, 0x8e, 0x09, 0x14, 0x5d, 0x86, 0xe9, 0x4a, 0x2e, 0x92, 0x2a, 0x50, 0x1f, 0xf9, 0x26, 0x64, - 0xed, 0x8f, 0xd4, 0xfc, 0x9d, 0xe1, 0x05, 0x2b, 0x15, 0xcd, 0x0a, 0x22, 0xd1, 0xbc, 0x96, 0x67, - 0x88, 0xe5, 0x1a, 0x30, 0xab, 0xe2, 0x6d, 0x3e, 0xc4, 0x60, 0x6b, 0xe9, 0xa4, 0xea, 0x78, 0x7b, - 0xea, 0x84, 0x77, 0xcf, 0xeb, 0x74, 0xe9, 0x22, 0xb2, 0xef, 0xad, 0x98, 0xcb, 0xe8, 0x50, 0x49, - 0xa1, 0x55, 0x42, 0x97, 0x14, 0xa7, 0x6e, 0x74, 0x9b, 0x38, 0x16, 0xd3, 0x73, 0xb3, 0x0f, 0xb5, - 0x3d, 0x3d, 0xee, 0xa1, 0x38, 0xf0, 0x6e, 0xdb, 0x69, 0x17, 0x18, 0xf6, 0xa7, 0x83, 0xc3, 0x97, - 0xa1, 0x0f, 0xc3, 0x78, 0x0e, 0x52, 0xca, 0x38, 0xe3, 0xd3, 0x37, 0x60, 0xf4, 0xc0, 0x48, 0x1f, - 0x25, 0x1d, 0x3c, 0x39, 0xcb, 0xc1, 0xb6, 0x4d, 0xca, 0x12, 0x2f, 0x70, 0x92, 0xb1, 0x8b, 0x08, - 0x46, 0xdd, 0xe2, 0x1d, 0xf3, 0x30, 0xd0, 0xe6, 0x5d, 0x96, 0x8c, 0x25, 0xbe, 0x8b, 0xbb, 0xd5, - 0x89, 0xa7, 0x63, 0x7c, 0x3d, 0x13, 0xc1, 0xec, 0xef, 0x15, 0xa7, 0x0a, 0xaa, 0x6e, 0x61, 0x76, - 0x2e, 0x4d, 0x7e, 0x0a, 0xbf, 0x3a, 0xe9, 0x96, 0x3a, 0xa8, 0xd9, 0x44, 0xd6, 0x05, 0xa5, 0x68, - 0x5f, 0xfc, 0x97, 0x88, 0x25, 0x91, 0x25, 0x60, 0xc4, 0xa4, 0xa1, 0x58, 0x15, 0xb6, 0x81, 0x03, - 0xfd, 0xe3, 0x8f, 0xcb, 0xfa, 0xe3, 0xb1, 0xf5, 0x78, 0x3c, 0xfd, 0xc0, 0x1e, 0x13, 0x5e, 0x90, - 0x79, 0x9c, 0xde, 0x6a, 0xbb, 0x97, 0x60, 0x78, 0x65, 0xa4, 0x41, 0x43, 0x6f, 0xb0, 0x37, 0x11, - 0x74, 0x44, 0xef, 0x13, 0x32, 0x96, 0xdb, 0xb0, 0xd0, 0xcb, 0x69, 0xbf, 0x9a, 0x7f, 0x5c, 0x94, - 0x1c, 0x7e, 0x32, 0xf3, 0x97, 0xe2, 0xa6, 0xb5, 0xe8, 0xf6, 0x12, 0xd5, 0x36, 0xce, 0x02, 0x03, - 0x3b, 0xa5, 0xd0, 0xe9, 0x10, 0xb7, 0x93, 0x15, 0x8c, 0x27, 0x69, 0x16, 0x6a, 0x3f, 0x31, 0xdd, - 0xbd, 0x7a, 0xd5, 0xef, 0x08, 0x55, 0xef, 0x90, 0xc3, 0xaf, 0xf3, 0x11, 0x6f, 0x31, 0xb3, 0x83, - 0xdf, 0x0e, 0x05, 0x67, 0x0b, 0xc4, 0x07, 0x36, 0x3c, 0x16, 0x9e, 0x3f, 0xd8, 0xef, 0x6d, 0x5d, - 0xd4, 0xf9, 0x47, 0xb0, 0x40, 0x1e, 0x25, 0xe8, 0xd8, 0x2c, 0xeb, 0x8c, 0xc5, 0x9d, 0x7b, 0xac, - 0x1e, 0x2f, 0x54, 0x14, 0x47, 0xa0, 0x5b, 0xb5, 0x01, 0xf9, 0xa9, 0xd5, 0x93, 0xee, 0x51, 0xba, - 0x90, 0x5c, 0x0c, 0x6f, 0x12, 0xd0, 0xe3, 0x09, 0x06, 0x8c, 0xdd, 0xe6, 0xd7, 0xb3, 0xc9, 0x47, - 0x1c, 0x85, 0x74, 0xab, 0x59, 0x0c, 0x45, 0x30, 0x8e, 0x84, 0x1e, 0xc1, 0x3f, 0x05, 0x8e, 0xb3, - 0xb8, 0x38, 0x05, 0x95, 0x80, 0x2d, 0xe3, 0xbb, 0x3e, 0x73, 0x28, 0xc8, 0xa0, 0x07, 0xdd, 0x59, - 0x29, 0x43, 0x8a, 0x81, 0x9e, 0xf9, 0x23, 0x8d, 0x53, 0x6b, 0xbc, 0x9f, 0x0f, 0x09, 0xc1, 0x16, - 0xc7, 0xb9, 0x18, 0xe1, 0xc5, 0x69, 0x7d, 0x88, 0x23, 0x5c, 0xe7, 0x41, 0x7e, 0x22, 0xae, 0x02, - 0x5c, 0x14, 0xa7, 0x97, 0x30, 0x3d, 0x5b, 0x77, 0x07, 0x20, 0x49, 0x08, 0x55, 0x4f, 0xce, 0xeb, - 0x49, 0xf7, 0xf5, 0x24, 0x8c, 0x08, 0x84, 0x01, 0x62, 0x0a, 0x58, 0x64, 0x51, 0xf1, 0x2e, 0x00, - 0x45, 0x8a, 0xbc, 0xb6, 0xd6, 0x42, 0x74, 0xba, 0x24, 0x11, 0x6d, 0x94, 0x25, 0x0f, 0xe9, 0x47, - 0x9a, 0x7e, 0xae, 0x55, 0x8f, 0x1d, 0x78, 0xb0, 0x26, 0xa1, 0x2a, 0xe2, 0x40, 0xd7, 0x05, 0xa1, - 0x6a, 0x52, 0x2a, 0x56, 0xe9, 0x8f, 0xd4, 0x7a, 0x06, 0x8d, 0x83, 0x69, 0xbe, 0x61, 0x04, 0x52, - 0xa8, 0x05, 0xd8, 0x1c, 0xc6, 0x7f, 0x1c, 0xb8, 0x00, 0x07, 0xc5, 0x6d, 0xf5, 0x16, 0x5a, 0x33, - 0x0e, 0x03, 0x0e, 0x75, 0x20, 0xa1, 0xa6, 0x38, 0xd2, 0x80, 0x88, 0xb9, 0x53, 0xf3, 0x23, 0xf1, - 0xeb, 0xa9, 0x08, 0x78, 0x7c, 0xa6, 0x14, 0xc9, 0x4e, 0xc5, 0x8b, 0xa4, 0x5c, 0x8b, 0x36, 0x8f, - 0xd2, 0xf3, 0x04, 0x52, 0x2e, 0xb9, 0x16, 0xf1, 0xb6, 0x99, 0x93, 0x6f, 0x6f, 0x9b, 0x7c, 0x8f, - 0x5e, 0x4d, 0xc4, 0xf9, 0x3f, 0xfa, 0xc6, 0xcd, 0xc4, 0xb8, 0x72, 0xe2, 0x73, 0xd6, 0x50, 0xb3, - 0x4c, 0x48, 0x81, 0xec, 0x15, 0x54, 0x65, 0x84, 0x2b, 0xb6, 0x13, 0x4f, 0xdf, 0xe4, 0x2d, 0xbe, - 0x46, 0xe7, 0x57, 0xdf, 0x6a, 0xc3, 0x71, 0x36, 0x39, 0xe9, 0xda, 0x79, 0x5e, 0xa3, 0xdb, 0x73, - 0xe9, 0xdb, 0x1a, 0x87, 0xd0, 0x58, 0xb5, 0x1e, 0xe6, 0x7e, 0xfe, 0x56, 0x2f, 0x3f, 0x05, 0x77, - 0x0b, 0xd7, 0xf2, 0xb8, 0x0e, 0x14, 0xbb, 0x45, 0x73, 0xda, 0x11, 0x0d, 0x3b, 0xf8, 0x2d, 0xab, - 0x05, 0x98, 0x5b, 0x96, 0x17, 0xd4, 0x80, 0x63, 0x2d, 0x10, 0xa4, 0x2c, 0x4e, 0xfa, 0xec, 0x42, - 0x4b, 0x1b, 0x7a, 0x27, 0x46, 0xa6, 0x55, 0x7e, 0xd3, 0xb1, 0xc4, 0xe3, 0x23, 0x81, 0xfb, 0xf7, - 0x91, 0x77, 0xd1, 0xad, 0xaa, 0x7c, 0x86, 0x3a, 0x7e, 0x46, 0x1c, 0x06, 0xdd, 0xf9, 0xcd, 0xe8, - 0xbc, 0x9a, 0x77, 0x2b, 0x86, 0xcd, 0x09, 0x43, 0x04, 0xa6, 0xc2, 0x31, 0x92, 0x1c, 0x88, 0x76, - 0x50, 0x0b, 0x8d, 0x0b, 0xfb, 0x1f, 0xd8, 0xec, 0x12, 0x32, 0x90, 0x40, 0x2f, 0x42, 0x95, 0x85, - 0xf7, 0xd9, 0x4a, 0x5f, 0x41, 0xbc, 0x14, 0x0e, 0x66, 0xa3, 0x20, 0xbb, 0x81, 0x51, 0x37, 0x8d, - 0x43, 0x73, 0xd9, 0xa9, 0x78, 0x2d, 0x01, 0x1a, 0xbd, 0x79, 0x46, 0xfc, 0xac, 0xfe, 0x02, 0xac, - 0xc4, 0xc5, 0x34, 0x82, 0x55, 0x18, 0xfe, 0xbb, 0x8f, 0xd0, 0x85, 0x0f, 0x9b, 0x63, 0x7e, 0xa7, - 0xe0, 0x65, 0x68, 0x73, 0x3d, 0xee, 0x21, 0x3e, 0xdc, 0x75, 0xbe, 0x48, 0x0e, 0xa6, 0xfc, 0xb5, - 0xa3, 0xaf, 0x9d, 0xf7, 0xfc, 0xe5, 0x03, 0xb4, 0x79, 0xd2, 0xa5, 0xc4, 0xe1, 0xa8, 0xec, 0xc2, - 0x07, 0xfb, 0x24, 0x91, 0x7f, 0x8c, 0x59, 0x08, 0xe1, 0x20, 0x71, 0x69, 0xda, 0x32, 0x11, 0x38, - 0xa6, 0xd8, 0x64, 0x18, 0x7e, 0xe1, 0x72, 0xd4, 0xe8, 0x76, 0x93, 0x57, 0xc8, 0x79, 0x0b, 0x43, - 0x37, 0xf4, 0x6d, 0x2a, 0x10, 0x8d, 0xff, 0x3b, 0x0f, 0x6c, 0x1e, 0x10, 0xfd, 0xe0, 0x26, 0xb0, - 0x49, 0x40, 0x0c, 0x62, 0xb0, 0x50, 0x20, 0x30, 0xda, 0x79, 0x11, 0xd3, 0xe4, 0xf1, 0x9c, 0x10, - 0x8e, 0x18, 0xde, 0x58, 0xaf, 0xe6, 0x96, 0x74, 0x14, 0xee, 0x02, 0x35, 0x92, 0xf7, 0x62, 0x3f, - 0x13, 0x8b, 0xcd, 0x1e, 0xac, 0x95, 0x55, 0x7e, 0x2e, 0xb3, 0xf9, 0x5a, 0x51, 0x8b, 0x40, 0x21, - 0x63, 0x2d, 0x49, 0x69, 0xd2, 0xb2, 0xc9, 0x7a, 0xe8, 0x9f, 0x23, 0xdf, 0xeb, 0x0b, 0xa2, 0x2a, - 0x4b, 0xec, 0xbb, 0x24, 0x18, 0x5a, 0x29, 0xe5, 0xb0, 0x92, 0x87, 0xef, 0x41, 0x5e, 0x57, 0x53, - 0xde, 0x8c, 0x7f, 0xd5, 0xa2, 0xa4, 0x16, 0x18, 0xac, 0xc1, 0x61, 0xe5, 0xc9, 0xbf, 0xea, 0xe4, - 0x1c, 0x36, 0x1e, 0xb3, 0x79, 0x7e, 0xf0, 0x5a, 0x48, 0x50, 0xde, 0xbf, 0xcf, 0x7f, 0xbe, 0x19, - 0x75, 0x41, 0xd3, 0x52, 0xd0, 0x34, 0xd0, 0x32, 0xa5, 0x6b, 0x6e, 0xae, 0x59, 0xf2, 0xa8, 0xae, - 0x5b, 0x9d, 0xcf, 0x46, 0x29, 0x35, 0x76, 0x23, 0xfd, 0x99, 0xd7, 0x42, 0xa9, 0xf6, 0xc5, 0x70, - 0x38, 0xec, 0xec, 0xf7, 0x5e, 0x7e, 0x15, 0x74, 0x90, 0xe8, 0xd3, 0xdb, 0x83, 0x71, 0xbd, 0xe7, - 0x05, 0xf8, 0xef, 0x8d, 0xfc, 0x77, 0x04, 0x4b, 0x38, 0x4e, 0x47, 0x2b, 0x24, 0x1c, 0x36, 0xc9, - 0xf7, 0xeb, 0x9f, 0x22, 0x5f, 0x18, 0x86, 0x9b, 0xc9, 0xc7, 0x4a, 0xfe, 0x9b, 0x6e, 0x58, 0xde, - 0x5b, 0x1f, 0x92, 0x14, 0xac, 0x13, 0x33, 0x4a, 0x40, 0x4d, 0xc4, 0xfd, 0x5a, 0x7f, 0xd1, 0x83, - 0x2d, 0x9d, 0x38, 0x38, 0xfb, 0x90, 0x7c, 0x44, 0x4c, 0xfb, 0x67, 0xcf, 0x10, 0xb6, 0x9f, 0x30, - 0xe6, 0xf8, 0xd4, 0x29, 0x2f, 0xe4, 0x26, 0x8d, 0x5f, 0x68, 0xbf, 0xbd, 0xf9, 0x42, 0x67, 0xc2, - 0x39, 0x34, 0xb8, 0xca, 0xca, 0x50, 0x29, 0xe3, 0xfe, 0x60, 0x63, 0xe5, 0x6b, 0x1f, 0x11, 0x34, - 0x85, 0x81, 0xac, 0x87, 0xbc, 0xf7, 0x05, 0x62, 0xd5, 0x72, 0x00, 0x3f, 0x18, 0x0a, 0xd2, 0x60, - 0x26, 0xe7, 0xae, 0x79, 0x71, 0x32, 0x19, 0x0e, 0xc3, 0xd0, 0x33, 0xe0, 0x87, 0x2b, 0x86, 0x59, - 0x2c, 0x70, 0x0c, 0x2b, 0x1f, 0x69, 0xdc, 0xcc, 0xa4, 0x72, 0xe8, 0xec, 0x40, 0xd5, 0xb4, 0x23, - 0x97, 0x4f, 0xc4, 0xe1, 0xd2, 0x4a, 0x81, 0xa7, 0x02, 0x32, 0xb6, 0x0b, 0xf6, 0x5d, 0xd6, 0xf8, - 0x81, 0x5d, 0x6b, 0xe5, 0x47, 0x4e, 0xd2, 0xeb, 0xe9, 0x10, 0x96, 0xb7, 0x14, 0xda, 0xa3, 0xbc, - 0x87, 0x8e, 0x84, 0xff, 0xc2, 0xd6, 0x29, 0xfb, 0x73, 0x98, 0x8a, 0x9c, 0xde, 0x80, 0xbe, 0x58, - 0x2d, 0xc8, 0xd4, 0x52, 0xa5, 0xbf, 0x1a, 0x67, 0x86, 0x95, 0xcf, 0xf9, 0xda, 0x7c, 0x4a, 0xaf, - 0x71, 0x0a, 0x70, 0xf2, 0xf9, 0x75, 0x6d, 0x3e, 0xf7, 0x5e, 0xe3, 0x9c, 0xe1, 0xe4, 0xf3, 0xb7, - 0x7a, 0x3e, 0xdd, 0x85, 0xd0, 0xf8, 0xa8, 0x69, 0x64, 0x2c, 0x9d, 0xef, 0x71, 0x30, 0x5b, 0x5a, - 0xea, 0xac, 0x0b, 0x41, 0x15, 0x37, 0xad, 0x0a, 0x30, 0xe5, 0x37, 0xad, 0x09, 0x7d, 0xa3, 0x2c, - 0x92, 0x3f, 0x58, 0x45, 0xf1, 0x60, 0x28, 0xac, 0x7f, 0x25, 0xa2, 0x21, 0x9a, 0xf9, 0x8e, 0x5d, - 0xdd, 0x9c, 0xc7, 0x49, 0xe0, 0xa6, 0xdd, 0x20, 0x0e, 0xbb, 0x93, 0x36, 0x8a, 0x4b, 0x85, 0xea, - 0x2d, 0x1f, 0x39, 0x55, 0xfc, 0xcd, 0x8e, 0x8f, 0xd4, 0xc6, 0x40, 0xd0, 0x6c, 0xf9, 0x54, 0xb5, - 0x31, 0x92, 0xa8, 0x3a, 0x8b, 0x52, 0xe4, 0x0b, 0xb6, 0xf2, 0x25, 0x8e, 0xc7, 0x4b, 0x8e, 0x8c, - 0x45, 0xbb, 0x85, 0x45, 0x47, 0xdd, 0xc8, 0x74, 0x0c, 0xab, 0x8e, 0x53, 0x26, 0x2c, 0x37, 0x21, - 0xda, 0xa4, 0x84, 0x38, 0x07, 0x3d, 0xf4, 0x7d, 0x0a, 0xb3, 0x66, 0x17, 0x81, 0xa1, 0xd7, 0xaa, - 0x0c, 0x51, 0x91, 0x1e, 0xee, 0xe0, 0xa7, 0x1c, 0x11, 0xbd, 0xd1, 0xab, 0xa6, 0x4d, 0x29, 0x5f, - 0xb1, 0xe9, 0xb9, 0x96, 0xc2, 0x10, 0x7a, 0xa1, 0x54, 0x58, 0xa6, 0xb3, 0x83, 0x79, 0x94, 0x07, - 0x43, 0xe8, 0x84, 0xcc, 0x24, 0xdd, 0x50, 0xd2, 0x28, 0x4e, 0x4d, 0xd2, 0x88, 0x92, 0x1e, 0x60, - 0x71, 0x73, 0x1a, 0x8c, 0x0a, 0x51, 0x27, 0xc6, 0x50, 0x48, 0x74, 0x71, 0x71, 0x19, 0xd0, 0xff, - 0x2e, 0x97, 0x4b, 0x79, 0xa2, 0x8a, 0x50, 0xed, 0xf4, 0x76, 0x7c, 0x21, 0x1a, 0x27, 0xbf, 0x74, - 0x4f, 0x4c, 0x2d, 0x2f, 0xea, 0x30, 0xc5, 0x90, 0xdc, 0x66, 0xdf, 0xfe, 0x78, 0x5c, 0x71, 0x07, - 0x33, 0xee, 0x07, 0x08, 0xf3, 0x75, 0xcc, 0x6d, 0x3d, 0x24, 0x5c, 0xf8, 0x4f, 0x9c, 0x1d, 0x24, - 0x01, 0x07, 0xfe, 0x56, 0x64, 0x1e, 0xcf, 0x9f, 0xdf, 0xcc, 0xaa, 0xe9, 0xdd, 0x08, 0x8f, 0x10, - 0x9f, 0x7f, 0x37, 0x9b, 0x8f, 0xf3, 0x3c, 0xff, 0x30, 0x4b, 0x9e, 0x23, 0x77, 0xcb, 0xf3, 0x87, - 0xd9, 0x87, 0x19, 0x6e, 0xa7, 0x5d, 0x70, 0x62, 0x85, 0x4a, 0xd4, 0xed, 0x4e, 0xc7, 0x7b, 0x71, - 0xef, 0x95, 0x3f, 0x38, 0x42, 0x10, 0xc7, 0x2e, 0x16, 0xeb, 0x07, 0xd3, 0xf1, 0xe0, 0x50, 0xfd, - 0x3c, 0x0a, 0x71, 0xaa, 0x7f, 0xf1, 0x22, 0x8e, 0xa7, 0x63, 0x4a, 0xd9, 0x8b, 0x8f, 0x30, 0x25, - 0x7c, 0xc5, 0x52, 0x20, 0x03, 0x65, 0xdd, 0x20, 0x82, 0x8e, 0x6f, 0xed, 0x1b, 0xae, 0xa6, 0x25, - 0x06, 0xab, 0x4d, 0xc7, 0xcb, 0xa0, 0x83, 0xc8, 0x43, 0x41, 0xe7, 0x65, 0xf8, 0x15, 0xb2, 0x1a, - 0x06, 0xdf, 0xf6, 0x14, 0x3c, 0x71, 0x36, 0x99, 0x5b, 0xc0, 0xa1, 0x90, 0xf0, 0x33, 0x39, 0x14, - 0x85, 0xbf, 0x13, 0x9f, 0x5b, 0x13, 0x00, 0x6d, 0x65, 0x90, 0xc2, 0xd8, 0xef, 0x2b, 0x82, 0x98, - 0xf6, 0xbd, 0x0a, 0x8f, 0x49, 0x42, 0x14, 0xc9, 0xc9, 0x6c, 0x7e, 0xdb, 0xf9, 0x39, 0x19, 0xe5, - 0xb9, 0xdc, 0x36, 0x76, 0x45, 0xf9, 0x60, 0xa5, 0xd6, 0x08, 0x4e, 0x60, 0x2b, 0x1e, 0x7b, 0xcf, - 0x85, 0x5b, 0x62, 0xa9, 0x44, 0x3d, 0xb7, 0x41, 0x4e, 0x61, 0x61, 0x2d, 0xed, 0xf9, 0x69, 0x5e, - 0x0a, 0xd9, 0x94, 0xec, 0xe7, 0xfe, 0x27, 0x4a, 0x29, 0x0a, 0x36, 0x42, 0x9e, 0x13, 0x21, 0x95, - 0x92, 0x21, 0x68, 0xc9, 0x6e, 0xe2, 0x66, 0x47, 0x6d, 0xa9, 0x0f, 0x4b, 0x3d, 0x2b, 0xa8, 0x65, - 0x21, 0xce, 0xc4, 0x43, 0x71, 0x1c, 0xaa, 0x40, 0x38, 0x28, 0x90, 0x61, 0x27, 0x5c, 0x5e, 0x22, - 0x20, 0xe0, 0x4f, 0xea, 0x64, 0x48, 0x5c, 0xb9, 0xcf, 0x8b, 0xf8, 0xf6, 0x21, 0x60, 0x09, 0xf0, - 0xfd, 0xdf, 0x69, 0xeb, 0xce, 0x5e, 0xf9, 0x3d, 0xbe, 0x9d, 0x72, 0xec, 0xef, 0x5e, 0x3f, 0x91, - 0xe1, 0x32, 0x89, 0x13, 0x2e, 0x23, 0x8f, 0x61, 0xdb, 0xe3, 0x74, 0xc8, 0xd3, 0x20, 0x4e, 0x35, - 0xca, 0x37, 0x30, 0xf9, 0x70, 0x28, 0xd9, 0x82, 0xa5, 0xdb, 0x00, 0xf4, 0x44, 0xb2, 0x03, 0x5b, - 0xf8, 0x39, 0x58, 0x70, 0x78, 0xf1, 0x1f, 0xd1, 0x27, 0xbb, 0xde, 0x43, 0x4a, 0x60, 0xf9, 0x8f, - 0x9e, 0x44, 0x45, 0x40, 0x03, 0x46, 0xec, 0xf0, 0x99, 0x97, 0x4f, 0x70, 0xc5, 0x12, 0x5e, 0xe6, - 0x3d, 0x45, 0x7e, 0xe3, 0x3f, 0xaa, 0x0b, 0x79, 0x89, 0xf0, 0xa4, 0x10, 0x9d, 0x03, 0x13, 0x58, - 0xd2, 0xe5, 0xc6, 0xce, 0xd2, 0x7a, 0x6f, 0xb1, 0x0c, 0x6e, 0xf4, 0x29, 0x91, 0xa8, 0x44, 0x18, - 0x48, 0xc4, 0x48, 0x26, 0x66, 0x59, 0x13, 0x33, 0x70, 0xc0, 0x58, 0x17, 0x45, 0xc4, 0x33, 0x0e, - 0xee, 0x39, 0xb8, 0x22, 0x12, 0x6a, 0xd7, 0xb7, 0x8f, 0x81, 0x30, 0xff, 0x94, 0x1b, 0x27, 0x09, - 0xbe, 0xfd, 0xd6, 0x3a, 0xa1, 0x71, 0x05, 0x23, 0x9f, 0xcd, 0x66, 0x3c, 0xd6, 0x20, 0xca, 0xe3, - 0x49, 0x41, 0x26, 0xf2, 0x5e, 0x62, 0xd3, 0x59, 0x7f, 0x06, 0x70, 0x6b, 0x33, 0x13, 0xf6, 0x4a, - 0x18, 0xd6, 0x12, 0x5d, 0x53, 0xbc, 0xc1, 0xed, 0x23, 0x03, 0x68, 0x7e, 0xab, 0xd5, 0xa0, 0xdb, - 0x20, 0x8f, 0xe3, 0xf2, 0xe0, 0xf6, 0xc4, 0x75, 0x70, 0xd5, 0x5a, 0x63, 0xaf, 0x07, 0xed, 0xb1, - 0x0c, 0x60, 0x9b, 0x1b, 0x21, 0x50, 0xf0, 0x86, 0x3c, 0xd9, 0x08, 0x8d, 0xfc, 0x93, 0x20, 0x7e, - 0x17, 0xc8, 0x1b, 0x9a, 0x37, 0x75, 0x05, 0x95, 0x6f, 0x0d, 0xca, 0x79, 0x5b, 0xce, 0x5e, 0x98, - 0x96, 0xb2, 0xd8, 0x3b, 0x44, 0x66, 0x7a, 0x3a, 0xf1, 0xb1, 0x99, 0xd6, 0x08, 0xaa, 0x93, 0x27, - 0xfe, 0xf7, 0xff, 0x20, 0xb3, 0x59, 0x64, 0x92, 0x12, 0x7c, 0x27, 0xc8, 0x1a, 0x78, 0x54, 0x6b, - 0x8c, 0x66, 0x65, 0x82, 0x98, 0xbe, 0x04, 0xb4, 0xa2, 0x07, 0x63, 0xd2, 0xbe, 0xa5, 0xd2, 0xd7, - 0xf7, 0xd1, 0x75, 0x2f, 0x6d, 0x15, 0x37, 0xac, 0x51, 0x5f, 0xe0, 0xc7, 0x26, 0xaa, 0x56, 0xb4, - 0x0d, 0x4d, 0x2b, 0xb3, 0xd8, 0x2b, 0x88, 0xfb, 0x2d, 0xc6, 0x3b, 0x85, 0x61, 0xd4, 0xeb, 0xcf, - 0x8e, 0x35, 0x32, 0xc9, 0x4c, 0x21, 0xd6, 0x67, 0x71, 0x79, 0x31, 0xbb, 0x0c, 0x36, 0x65, 0xba, - 0x83, 0x5d, 0xfc, 0x2f, 0x45, 0x91, 0xcc, 0x5f, 0x0f, 0x11, 0x2e, 0xba, 0x9f, 0x39, 0xd2, 0x1b, - 0x5a, 0x38, 0x59, 0x05, 0xfb, 0x7d, 0xa4, 0x89, 0x53, 0xc1, 0x97, 0xa0, 0xc6, 0x8c, 0xd9, 0x2c, - 0x4d, 0x86, 0x99, 0x80, 0x7c, 0x6e, 0x04, 0xfb, 0x16, 0x33, 0x56, 0x42, 0x01, 0x93, 0xb3, 0xfc, - 0xae, 0xb4, 0x9b, 0x50, 0xed, 0x5c, 0x10, 0xbe, 0x9f, 0x87, 0x5b, 0x62, 0x26, 0xa8, 0x8b, 0x3f, - 0xe0, 0x56, 0xaf, 0x8b, 0xfb, 0x1d, 0xf1, 0x97, 0x47, 0xc7, 0xc1, 0xb8, 0xf3, 0x00, 0x3d, 0xa3, - 0xc8, 0x5f, 0xf4, 0x1c, 0x0a, 0x6e, 0x6f, 0x99, 0xf3, 0x01, 0xa2, 0x50, 0x08, 0x4d, 0x9c, 0xa5, - 0x15, 0x31, 0x10, 0x34, 0x34, 0xb7, 0x38, 0x56, 0xa6, 0xa8, 0x79, 0x75, 0x5d, 0xee, 0x92, 0x02, - 0x9a, 0xe7, 0x3f, 0x0c, 0xe5, 0x10, 0x48, 0x58, 0x84, 0xa2, 0x65, 0xb6, 0x53, 0xb6, 0x3f, 0x3e, - 0x2a, 0x12, 0x11, 0x87, 0x1f, 0x5e, 0x0e, 0x02, 0x15, 0x96, 0xac, 0x36, 0x7e, 0xe1, 0xa5, 0xae, - 0xab, 0xce, 0xf8, 0x24, 0xd1, 0x56, 0xee, 0x24, 0xad, 0xa2, 0xad, 0xdb, 0xe0, 0x73, 0x6b, 0x89, - 0x08, 0xcf, 0x95, 0x0e, 0x8f, 0xe0, 0x1c, 0xd4, 0xbc, 0xba, 0xf9, 0xfc, 0x76, 0x58, 0x7d, 0x37, - 0x37, 0xe6, 0x74, 0x80, 0xe4, 0x7b, 0x06, 0x2a, 0x07, 0xdb, 0xc0, 0xbe, 0xfb, 0x9b, 0xe0, 0xdd, - 0x06, 0x5f, 0x69, 0x29, 0xfd, 0xea, 0x8b, 0x8d, 0x6e, 0xe6, 0x13, 0x54, 0x36, 0x59, 0xc9, 0x94, - 0x1e, 0x5f, 0x64, 0x97, 0x18, 0x0e, 0xd6, 0xad, 0xc4, 0x7b, 0x32, 0x53, 0xff, 0xb8, 0xf4, 0x35, - 0x56, 0x11, 0x98, 0x8b, 0xe9, 0x71, 0xb9, 0x5f, 0xf5, 0x53, 0x50, 0x7d, 0xf1, 0x16, 0x2d, 0xaf, - 0x89, 0xb8, 0x42, 0xb1, 0xdf, 0x13, 0x54, 0x42, 0x35, 0x21, 0x18, 0x5c, 0xb8, 0xbf, 0xc8, 0x2c, - 0xfc, 0x70, 0x5b, 0x9c, 0x6a, 0x8e, 0xd2, 0x30, 0xb0, 0x70, 0x2e, 0x14, 0x43, 0x6a, 0xb1, 0x65, - 0x73, 0xe5, 0x62, 0x2f, 0x4a, 0xf1, 0xf8, 0x05, 0x09, 0x94, 0xd2, 0x34, 0xaa, 0x0e, 0x47, 0x64, - 0x1b, 0x14, 0x11, 0xae, 0x2c, 0x60, 0x7d, 0x12, 0x16, 0xab, 0x9c, 0xcb, 0x6d, 0x9b, 0xdc, 0xf2, - 0x15, 0x92, 0x15, 0x52, 0x6f, 0x64, 0x70, 0x76, 0x1a, 0x60, 0x8b, 0x5a, 0x3e, 0xe3, 0xb2, 0xd1, - 0x67, 0xcc, 0xa9, 0x4f, 0xa1, 0xe3, 0x2b, 0x44, 0xd3, 0xaf, 0xbf, 0xa5, 0xef, 0x08, 0x08, 0x4b, - 0xa2, 0x21, 0x42, 0xda, 0xbc, 0x11, 0x24, 0x03, 0xea, 0x4e, 0xd5, 0xd9, 0x28, 0xb2, 0xfb, 0x95, - 0x89, 0x0f, 0x32, 0xdf, 0x21, 0x7c, 0xa8, 0x3e, 0xc8, 0xce, 0xfc, 0x13, 0x75, 0x2d, 0x22, 0xbb, - 0x8c, 0x0b, 0xf9, 0x87, 0x3e, 0x94, 0x08, 0x8c, 0x0e, 0xea, 0xb7, 0x08, 0x5a, 0x17, 0xba, 0x50, - 0x27, 0x48, 0xc4, 0x13, 0xdf, 0xdc, 0xb0, 0xd0, 0x69, 0xb1, 0xc1, 0x13, 0xca, 0x08, 0x6c, 0x84, - 0xbf, 0x41, 0x80, 0xef, 0x6e, 0x5e, 0x08, 0xff, 0x6b, 0x65, 0x84, 0x08, 0x2f, 0xea, 0xf6, 0x83, - 0xe8, 0x21, 0x7e, 0x26, 0x28, 0x2e, 0x4f, 0x64, 0xc4, 0xcf, 0xc5, 0xae, 0x4b, 0x64, 0x8a, 0x87, - 0xa5, 0xf5, 0x0b, 0x45, 0x56, 0x5a, 0x0c, 0x8b, 0xd9, 0xaf, 0xb0, 0x83, 0xc9, 0x7c, 0x1d, 0x2f, - 0x9f, 0xf1, 0xe3, 0xda, 0x38, 0x45, 0x57, 0x7d, 0x5a, 0x3f, 0xb5, 0x94, 0xcc, 0x58, 0xe2, 0x03, - 0xe7, 0x48, 0x5b, 0x40, 0xd9, 0x53, 0x9c, 0x7e, 0xd6, 0x7a, 0x32, 0x52, 0xbb, 0x52, 0x22, 0x40, - 0x20, 0x18, 0x09, 0x70, 0x4b, 0x0d, 0x14, 0x13, 0xf8, 0xba, 0xc3, 0x96, 0x65, 0xf5, 0x09, 0x97, - 0x43, 0x98, 0x4f, 0x3d, 0xa3, 0x19, 0xd1, 0xf8, 0xd4, 0x6b, 0x81, 0x39, 0xa3, 0xf4, 0x6e, 0xde, - 0x6d, 0x24, 0x01, 0xab, 0x3f, 0xe1, 0xb1, 0x32, 0xe2, 0xe9, 0x52, 0x20, 0x00, 0xfc, 0xe3, 0x75, - 0x9d, 0x92, 0x46, 0xe9, 0x2d, 0xf2, 0x98, 0x06, 0xef, 0xe2, 0x17, 0x34, 0x0a, 0x67, 0x24, 0x09, - 0x98, 0x12, 0x8f, 0xa1, 0x24, 0x53, 0xa0, 0xca, 0x9d, 0xd3, 0xb1, 0xa1, 0x8a, 0xac, 0x67, 0xd2, - 0x0b, 0x9a, 0x81, 0x85, 0xde, 0x24, 0x89, 0xab, 0x83, 0xd7, 0xef, 0xf3, 0x3b, 0xe8, 0xa5, 0xf2, - 0xc4, 0x4d, 0x40, 0xc2, 0x8f, 0x84, 0xd9, 0x5a, 0xc3, 0xf2, 0x74, 0x9e, 0x13, 0x9c, 0x97, 0xb2, - 0xb6, 0xc4, 0x84, 0x81, 0x74, 0x7a, 0x09, 0x27, 0xd1, 0x23, 0x23, 0x85, 0x98, 0xf1, 0x70, 0xcf, - 0x52, 0xfe, 0x06, 0x1b, 0xe7, 0xae, 0x07, 0xdf, 0xea, 0x83, 0x6d, 0xd8, 0xf1, 0x28, 0x8e, 0x42, - 0xbe, 0xff, 0x18, 0x7f, 0x50, 0xeb, 0x58, 0x31, 0x46, 0xab, 0x4e, 0xcd, 0x48, 0x30, 0x7b, 0x0d, - 0xe7, 0x37, 0x09, 0x1b, 0xc6, 0x34, 0xed, 0xcb, 0x44, 0x7b, 0xc5, 0xd5, 0xaf, 0xf4, 0xf9, 0x58, - 0x57, 0x17, 0xa9, 0xc1, 0xde, 0xe3, 0xd5, 0xa8, 0x9c, 0xdf, 0x25, 0xfc, 0xee, 0x42, 0x63, 0xaa, - 0xa6, 0x82, 0xdc, 0xd0, 0x11, 0xfd, 0x77, 0xdd, 0xb0, 0x37, 0x3f, 0x7c, 0xff, 0xfa, 0x5d, 0xd7, - 0xab, 0x86, 0xa3, 0xb1, 0xb0, 0xb6, 0x3d, 0xff, 0x42, 0xf4, 0xc2, 0xa5, 0xd4, 0xac, 0xf7, 0x79, - 0x11, 0xfc, 0xe3, 0x75, 0xd3, 0x45, 0x0e, 0xa9, 0x5e, 0x3b, 0x5d, 0xd5, 0x37, 0xa1, 0x6f, 0xa1, - 0x91, 0x91, 0xee, 0x8b, 0xfa, 0x8b, 0x37, 0x9e, 0x3d, 0x73, 0xda, 0xa1, 0x2e, 0x56, 0x5c, 0xed, - 0x3f, 0x22, 0xef, 0x21, 0x9d, 0x18, 0x91, 0x0d, 0x5e, 0x22, 0x50, 0xee, 0x5e, 0x37, 0xfb, 0x4b, - 0xf9, 0xfc, 0xe1, 0x37, 0x30, 0xdb, 0xf3, 0x1f, 0x67, 0x8f, 0xc9, 0x75, 0xf7, 0xd0, 0xef, 0x87, - 0x3b, 0x38, 0xc7, 0x76, 0x85, 0xb8, 0x83, 0x90, 0x60, 0x8e, 0x7c, 0x9d, 0x70, 0x4c, 0x1c, 0xab, - 0x98, 0x90, 0x0e, 0x0e, 0x7a, 0x87, 0x60, 0xb6, 0x6c, 0x52, 0x55, 0xd8, 0xb4, 0x89, 0x96, 0x81, - 0x7c, 0xa0, 0xd6, 0xc2, 0xea, 0xa2, 0x38, 0xa5, 0x1c, 0xcc, 0xb5, 0xea, 0x63, 0xd7, 0xdb, 0xdf, - 0x9f, 0x79, 0x81, 0xf8, 0x6e, 0x3f, 0xce, 0x50, 0xb8, 0xde, 0x7e, 0xaa, 0xdc, 0x65, 0x43, 0x34, - 0xbc, 0x3e, 0x94, 0x52, 0x04, 0xb0, 0x22, 0xda, 0xf2, 0x98, 0x78, 0x41, 0xea, 0x6f, 0xda, 0xae, - 0x3d, 0xc8, 0x48, 0x8e, 0x08, 0x6e, 0x49, 0x1b, 0x7a, 0xd0, 0x45, 0x03, 0x24, 0xb3, 0x63, 0x81, - 0xaa, 0xbd, 0x5e, 0x76, 0x3d, 0xa6, 0xb3, 0xa7, 0x87, 0xdf, 0x06, 0xdf, 0x7c, 0xfb, 0xcd, 0xd3, - 0x13, 0xfc, 0xfb, 0xf2, 0xe8, 0xdb, 0x67, 0xcf, 0x1e, 0x7e, 0x3b, 0xfe, 0xe6, 0x30, 0xf4, 0x5b, - 0x49, 0x76, 0x05, 0x14, 0xf7, 0xe2, 0xe1, 0x37, 0x45, 0x01, 0x4b, 0x93, 0x15, 0x21, 0xf0, 0x72, - 0xa2, 0xd2, 0x3e, 0xf3, 0x66, 0xd0, 0x15, 0x31, 0xd9, 0xb5, 0x02, 0x3d, 0xb5, 0x5f, 0xbe, 0xce, - 0x53, 0xac, 0x3e, 0xd6, 0x4f, 0xb2, 0x4d, 0x05, 0x2a, 0x6d, 0xa4, 0x9c, 0xd4, 0x34, 0xb3, 0x59, - 0xdf, 0xc9, 0x37, 0x05, 0xfc, 0x75, 0x17, 0xda, 0xfd, 0x85, 0xf9, 0xac, 0x2a, 0x4c, 0x56, 0x92, - 0xa7, 0x80, 0x74, 0xac, 0x8e, 0x1b, 0x2e, 0xd3, 0x13, 0x0a, 0x87, 0x43, 0xb3, 0x4c, 0x28, 0xe3, - 0x77, 0xb1, 0xd4, 0xca, 0xef, 0x82, 0xe6, 0x4d, 0x75, 0x31, 0xbe, 0xf5, 0x02, 0xf9, 0x8a, 0x2f, - 0xff, 0x88, 0xf5, 0x6f, 0x68, 0xb8, 0xde, 0xe1, 0xcb, 0x50, 0xeb, 0xf6, 0xd3, 0x13, 0x92, 0x69, - 0x74, 0x75, 0x32, 0xb6, 0xfc, 0x03, 0xfd, 0x4d, 0x8d, 0x1d, 0xb3, 0x54, 0xf1, 0x03, 0x87, 0x28, - 0x3a, 0xe6, 0x40, 0x79, 0xc4, 0x15, 0x41, 0x95, 0xe5, 0x89, 0x2c, 0x6a, 0xa7, 0x17, 0xc9, 0xd2, - 0xa0, 0x10, 0x23, 0xb7, 0x11, 0xc1, 0x51, 0x3e, 0xb5, 0x94, 0x0a, 0x7d, 0x38, 0x03, 0xe9, 0x39, - 0x40, 0xb7, 0xf8, 0xca, 0x42, 0x6a, 0x67, 0xad, 0x2e, 0xb4, 0x46, 0x70, 0x8a, 0xc9, 0x57, 0xa1, - 0x50, 0x7d, 0xd3, 0x00, 0x9a, 0x02, 0xde, 0x3b, 0xf1, 0x42, 0xdc, 0x8f, 0xdf, 0x55, 0xb9, 0xb7, - 0x45, 0xef, 0xe9, 0xa1, 0x20, 0xae, 0xdd, 0x2a, 0x39, 0xd0, 0xb5, 0x07, 0xb9, 0xbd, 0xc0, 0x7f, - 0x28, 0x78, 0xf8, 0x21, 0x86, 0x71, 0xce, 0x66, 0x91, 0x04, 0x26, 0xc5, 0x37, 0x49, 0x52, 0xc0, - 0x9e, 0xf1, 0xe0, 0xe0, 0x40, 0xd3, 0x9a, 0x48, 0x7b, 0x51, 0xcd, 0xfd, 0x9a, 0xdf, 0x19, 0x56, - 0xc4, 0xe9, 0x6c, 0x02, 0x5b, 0x6e, 0x71, 0x1b, 0x03, 0x36, 0xf4, 0x14, 0xca, 0x27, 0xfe, 0x2a, - 0x7d, 0x9f, 0x03, 0xd3, 0xcc, 0x40, 0xaf, 0x7d, 0xf9, 0x04, 0x6f, 0x82, 0x9f, 0xd0, 0x2c, 0xff, - 0xf4, 0x64, 0x7b, 0x01, 0x92, 0x60, 0x01, 0xa9, 0x14, 0x73, 0x11, 0x30, 0x69, 0x20, 0x2d, 0xa0, - 0xaf, 0xfc, 0xa8, 0xf1, 0x7d, 0xba, 0x91, 0xae, 0xfd, 0x8c, 0xb5, 0x6a, 0x2c, 0xc5, 0x88, 0x6a, - 0x9d, 0x21, 0x32, 0x2f, 0x00, 0x2d, 0x97, 0x83, 0x0d, 0x56, 0x7d, 0xda, 0x9f, 0xe0, 0x44, 0x81, - 0xcc, 0x28, 0xe4, 0xc9, 0x84, 0xef, 0x3d, 0x82, 0xc8, 0x0f, 0xd0, 0x16, 0x81, 0x7c, 0xea, 0x6f, - 0xdd, 0xe6, 0x18, 0x1e, 0x98, 0x3f, 0x40, 0x66, 0x38, 0xac, 0xdb, 0x5f, 0xac, 0x70, 0x85, 0x14, - 0x38, 0xe6, 0x6b, 0xde, 0xa4, 0x2c, 0x73, 0xd8, 0x23, 0x05, 0x38, 0xbf, 0xaf, 0x79, 0xef, 0xae, - 0x58, 0xf7, 0x1a, 0x15, 0x0c, 0x06, 0xa0, 0x79, 0xef, 0x3f, 0x8e, 0x9f, 0xc3, 0x1c, 0x3c, 0x2b, - 0xaa, 0x41, 0xe7, 0xf8, 0x39, 0x72, 0xf1, 0xe0, 0xbf, 0xd3, 0xea, 0x36, 0x1d, 0x74, 0xfe, 0x17, - 0xc4, 0x3e, 0x62, 0x3d, 0x82, 0x76, 0x01, 0x00 + 0xe4, 0x73, 0x55, 0x36, 0xfb, 0xf7, 0x9a, 0x97, 0xf9, 0x9c, 0x58, 0xa3, 0xa9, 0xf9, 0x50, 0xea, + 0x7a, 0xd3, 0xff, 0x50, 0x88, 0x7c, 0xc8, 0x7b, 0x1f, 0x8a, 0xe1, 0x0f, 0x3b, 0xde, 0x87, 0x32, + 0x5f, 0x41, 0x39, 0x57, 0x2a, 0x89, 0x8c, 0x08, 0xc5, 0x2d, 0x4e, 0x38, 0x6b, 0x19, 0xa1, 0xf3, + 0x75, 0x22, 0x46, 0x97, 0x20, 0x2b, 0x22, 0xa6, 0x6f, 0x81, 0x4c, 0x63, 0x55, 0xe9, 0xf3, 0xe2, + 0xca, 0x45, 0xa3, 0x1f, 0x93, 0xc8, 0x89, 0x94, 0xeb, 0x00, 0xfd, 0x19, 0xf8, 0x07, 0x45, 0x73, + 0x98, 0xfd, 0x20, 0x6d, 0x61, 0x8e, 0xa4, 0xc7, 0x8c, 0xf1, 0xc8, 0x95, 0x97, 0xf8, 0x1b, 0xb2, + 0x9a, 0x07, 0x86, 0xb0, 0x56, 0x85, 0xa6, 0x1a, 0x81, 0xb7, 0xdd, 0xcf, 0xb8, 0x88, 0xbf, 0xbe, + 0xcb, 0xbd, 0x02, 0x1d, 0x98, 0x87, 0xae, 0xe1, 0x64, 0x51, 0x3a, 0xd8, 0xf1, 0xc5, 0xaf, 0xec, + 0x40, 0x05, 0xcb, 0xf9, 0x95, 0x7a, 0xde, 0x53, 0xa4, 0x28, 0x49, 0xce, 0xfb, 0x5e, 0xfa, 0x09, + 0xc9, 0x64, 0x28, 0x15, 0x12, 0x69, 0x04, 0xbe, 0xa1, 0x7b, 0x9d, 0xb6, 0x49, 0x26, 0x95, 0x82, + 0xee, 0x6c, 0x5b, 0xe2, 0x79, 0xa6, 0x21, 0x56, 0xc9, 0xf3, 0x1c, 0x35, 0xb5, 0x9f, 0xb0, 0x30, + 0xa7, 0x52, 0x73, 0xe8, 0x5e, 0xa7, 0xfd, 0x4d, 0xde, 0x72, 0x40, 0xa4, 0x08, 0x05, 0x35, 0xc7, + 0x23, 0x61, 0xc0, 0xfa, 0xd1, 0x34, 0xd1, 0x49, 0x8b, 0x55, 0x99, 0xf8, 0xe3, 0x24, 0x30, 0xdb, + 0xb9, 0x29, 0x98, 0x78, 0x76, 0x2d, 0x88, 0x70, 0x2d, 0x74, 0x91, 0x69, 0xa4, 0x51, 0xb0, 0xc3, + 0x6d, 0xba, 0xc0, 0x9e, 0xc1, 0xf9, 0x66, 0xed, 0x50, 0xb7, 0x32, 0xbf, 0x50, 0x15, 0x3d, 0xb4, + 0x08, 0xbe, 0xe6, 0x34, 0xa7, 0x41, 0x37, 0x4a, 0x22, 0xfe, 0x58, 0x46, 0x68, 0x01, 0x76, 0xc2, + 0x67, 0x51, 0x58, 0x88, 0xeb, 0x0f, 0x1e, 0x42, 0xa1, 0x21, 0xc2, 0x3f, 0x72, 0x06, 0xc5, 0x3f, + 0x36, 0x39, 0xd4, 0x3b, 0x24, 0x92, 0x31, 0x56, 0x26, 0x60, 0x6d, 0x02, 0xae, 0xe4, 0xf4, 0x04, + 0x7b, 0xec, 0xe1, 0x94, 0xb8, 0x3b, 0x0e, 0xa4, 0x30, 0x4d, 0x7a, 0xfe, 0x5a, 0x92, 0xfa, 0xce, + 0xc1, 0x9c, 0x85, 0x10, 0x0c, 0x44, 0x63, 0xa4, 0xab, 0x38, 0x1e, 0xbe, 0xc1, 0xf8, 0x41, 0x74, + 0x62, 0xd4, 0x7c, 0x0f, 0x33, 0x05, 0x71, 0x8c, 0xf5, 0x7c, 0xd4, 0x43, 0x0d, 0xcf, 0x39, 0xe0, + 0x74, 0x00, 0xe1, 0x7a, 0x69, 0x08, 0x48, 0x97, 0xf8, 0xbb, 0x79, 0x01, 0x13, 0xee, 0x90, 0xed, + 0x91, 0xa0, 0x7d, 0x3d, 0x31, 0xe9, 0xcd, 0x2e, 0x35, 0xdd, 0x57, 0x9c, 0x86, 0x0b, 0x52, 0x2a, + 0xd0, 0x24, 0x7c, 0x05, 0xd5, 0x5c, 0x4c, 0xc2, 0x0c, 0x55, 0xbc, 0x24, 0xe2, 0x33, 0x4c, 0x35, + 0xbd, 0x2a, 0x2c, 0xa4, 0xde, 0xf9, 0x77, 0xde, 0xbd, 0x8f, 0x7c, 0xcc, 0x38, 0xc9, 0x9a, 0xf1, + 0x8d, 0x1c, 0xbb, 0x86, 0x79, 0x94, 0xa3, 0x32, 0x83, 0xbe, 0x18, 0xd3, 0xb1, 0x42, 0x43, 0x3a, + 0xd2, 0xb0, 0x0a, 0xad, 0x5e, 0x92, 0x10, 0xd0, 0x3f, 0xbd, 0x84, 0xf6, 0x7a, 0x89, 0xa5, 0x24, + 0x7f, 0xd6, 0x96, 0x05, 0x16, 0xd2, 0xe7, 0xd4, 0xd3, 0x36, 0x84, 0xb6, 0x65, 0x18, 0xf4, 0x23, + 0x01, 0xd1, 0x1b, 0xb8, 0x28, 0xe2, 0xa8, 0x2f, 0x1b, 0x27, 0x1f, 0x32, 0x55, 0x96, 0x0b, 0x9c, + 0xc7, 0xc5, 0xd4, 0x20, 0x81, 0xef, 0xd2, 0x34, 0xc6, 0xfd, 0x9f, 0x56, 0x19, 0x17, 0xe0, 0x82, + 0xbb, 0x22, 0x8c, 0x85, 0x6e, 0x88, 0x10, 0x0e, 0xda, 0x1d, 0x28, 0xd9, 0x04, 0xca, 0xb7, 0x8a, + 0xfa, 0xf9, 0x42, 0xb8, 0x82, 0xc8, 0x77, 0xd6, 0x1d, 0x50, 0xd7, 0x62, 0x73, 0x04, 0xba, 0x3b, + 0x6a, 0x9e, 0x8b, 0x36, 0x79, 0xb9, 0xea, 0x12, 0xb5, 0x4a, 0x73, 0xce, 0xa8, 0x84, 0xab, 0x2f, + 0xa9, 0xe9, 0x31, 0x00, 0xa4, 0x2c, 0xa9, 0x2a, 0xc8, 0x52, 0x33, 0xfe, 0xaa, 0x2b, 0x71, 0x95, + 0x31, 0x9f, 0x43, 0xb3, 0xce, 0x17, 0x44, 0xeb, 0xe4, 0x4f, 0x1a, 0x9f, 0x6b, 0xdd, 0x45, 0xb3, + 0xa8, 0xb2, 0xae, 0x6f, 0x66, 0x93, 0x33, 0xf3, 0xcb, 0x17, 0x33, 0xe6, 0xfc, 0x11, 0x75, 0x26, + 0xaf, 0x71, 0x71, 0xbf, 0x7c, 0x45, 0x29, 0x2c, 0x9a, 0xff, 0x24, 0xa2, 0xf9, 0x77, 0x4e, 0x3e, + 0x09, 0x42, 0x77, 0xcf, 0xc5, 0x1f, 0xb4, 0x4a, 0x97, 0x76, 0xdb, 0x59, 0x22, 0xd8, 0x93, 0xe5, + 0x9c, 0xb1, 0xb7, 0x1b, 0x75, 0xe2, 0x4a, 0x46, 0xa8, 0xe9, 0xc4, 0xd5, 0x08, 0x00, 0x19, 0x24, + 0x1e, 0x97, 0xaf, 0xbf, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0x89, 0xea, 0xfb, 0x96, 0xb1, 0xb4, 0xf9, + 0x55, 0x23, 0xde, 0x47, 0x1e, 0x54, 0x03, 0x22, 0xfc, 0x9a, 0xe8, 0x9f, 0xbd, 0xc4, 0x8d, 0x9e, + 0x6f, 0x80, 0x6b, 0xfd, 0x0c, 0x59, 0x90, 0xe6, 0x74, 0x2e, 0x8a, 0xec, 0xd8, 0x7c, 0x92, 0x98, + 0x17, 0x8c, 0xcd, 0xec, 0x96, 0x5e, 0xc7, 0xb0, 0x12, 0xb0, 0x38, 0x3b, 0x62, 0x15, 0x1d, 0x50, + 0x88, 0x97, 0xbb, 0x98, 0x25, 0xfb, 0xb3, 0x40, 0x1b, 0xc0, 0xab, 0x3e, 0x85, 0x7a, 0xd6, 0xb3, + 0x2d, 0x8f, 0xf8, 0x96, 0x8c, 0x37, 0xc9, 0xe1, 0xd1, 0x84, 0xb9, 0x84, 0x6c, 0xac, 0x76, 0x40, + 0x14, 0xb8, 0xce, 0xe1, 0x6c, 0xac, 0x33, 0xbf, 0x7d, 0x8d, 0xf2, 0x97, 0xb6, 0x0a, 0x2c, 0xd3, + 0xc8, 0x24, 0x94, 0x94, 0x09, 0xfa, 0x07, 0x8b, 0x13, 0xac, 0xa1, 0x66, 0xa2, 0x6c, 0x66, 0x7f, + 0xfd, 0x32, 0x41, 0xd3, 0xc7, 0xc6, 0xc2, 0xaa, 0x25, 0x24, 0x50, 0x26, 0x16, 0x46, 0x9a, 0xed, + 0x0e, 0x15, 0x3d, 0x09, 0x52, 0x71, 0x88, 0x8c, 0xd4, 0x70, 0x84, 0x05, 0x7d, 0x1e, 0x9d, 0x64, + 0x78, 0xa4, 0x85, 0xea, 0x02, 0x35, 0xd5, 0x8b, 0x8d, 0x83, 0x87, 0x5f, 0xc4, 0x64, 0x58, 0xb5, + 0x55, 0x93, 0xb1, 0x81, 0x47, 0x3c, 0xaf, 0x95, 0x24, 0x57, 0x1a, 0x4f, 0xec, 0xfd, 0x6e, 0x69, + 0x18, 0x91, 0x50, 0x84, 0x78, 0x3c, 0x72, 0x18, 0x0e, 0x50, 0x11, 0xfa, 0x3c, 0x37, 0x81, 0xc0, + 0x80, 0xf9, 0xbb, 0x51, 0x72, 0x08, 0x40, 0x4a, 0x89, 0x65, 0x65, 0x5f, 0xf5, 0xd6, 0x4f, 0x8c, + 0xb3, 0xbc, 0xa2, 0xf0, 0x02, 0x9a, 0xf0, 0x30, 0xe5, 0x8c, 0x1e, 0xd2, 0x26, 0xc2, 0xcb, 0xa5, + 0x39, 0x56, 0x6d, 0xef, 0x50, 0x07, 0xb2, 0xbb, 0x3a, 0x06, 0xe1, 0xdf, 0xf2, 0x62, 0x00, 0x61, + 0x4c, 0x12, 0x2e, 0xf7, 0xb9, 0x1e, 0xca, 0x6a, 0xe8, 0x8d, 0x65, 0x39, 0x9b, 0x53, 0xa3, 0x1d, + 0xca, 0xeb, 0xc5, 0xeb, 0x0f, 0x15, 0x40, 0x7e, 0xc9, 0x84, 0x08, 0x66, 0x96, 0x6d, 0x06, 0x31, + 0xf7, 0x51, 0x25, 0x5e, 0x48, 0xdf, 0x9f, 0x24, 0x16, 0x2d, 0xb8, 0x8c, 0x07, 0x6f, 0xdb, 0x1a, + 0x4c, 0xb2, 0x65, 0x5f, 0xe9, 0xd5, 0xc6, 0xcb, 0xbf, 0x07, 0x57, 0xe8, 0x2e, 0xcf, 0xb3, 0x93, + 0x5d, 0xf5, 0x31, 0xb7, 0xea, 0x63, 0x1e, 0x3f, 0x7a, 0xe1, 0x9b, 0x13, 0x4b, 0x72, 0x5d, 0xaf, + 0x80, 0x70, 0xb0, 0xe2, 0xdb, 0x36, 0x39, 0x46, 0x19, 0xc4, 0x66, 0x5e, 0x92, 0xed, 0x5e, 0xf4, + 0xec, 0xdb, 0x63, 0xf4, 0x93, 0x5e, 0xb0, 0xd7, 0x7a, 0x00, 0x22, 0xd6, 0x5a, 0x56, 0xa4, 0xa5, + 0xe8, 0x71, 0x25, 0x76, 0x76, 0x6e, 0x22, 0xf9, 0xb9, 0xf8, 0xc8, 0x5c, 0x58, 0x5a, 0x6a, 0xd6, + 0xe9, 0xab, 0x93, 0xf1, 0x02, 0x14, 0x15, 0xe3, 0xf1, 0xc6, 0x56, 0x4a, 0xef, 0x0a, 0x88, 0xab, + 0x96, 0xe0, 0x11, 0x16, 0x6f, 0x92, 0x21, 0xb6, 0x6c, 0x7f, 0x59, 0x1f, 0x69, 0x04, 0xed, 0x95, + 0x65, 0x9d, 0x7f, 0xa3, 0xec, 0x68, 0x45, 0xd9, 0xd8, 0x02, 0x2f, 0xab, 0x2b, 0x8b, 0xc5, 0x31, + 0x2d, 0x69, 0xf7, 0x5a, 0x2b, 0xcb, 0xaa, 0x18, 0x0b, 0x38, 0xb6, 0xe4, 0x6b, 0xdb, 0x59, 0x1f, + 0xaf, 0x28, 0x47, 0xee, 0x64, 0x88, 0x96, 0xe4, 0x0e, 0x0f, 0xb2, 0x47, 0x12, 0xb5, 0xcb, 0x76, + 0x12, 0x0b, 0x32, 0xcf, 0xc2, 0x3c, 0xe6, 0xe3, 0xab, 0xf8, 0xb6, 0x3d, 0x09, 0x85, 0xe6, 0xc8, + 0xc2, 0x4e, 0xe3, 0xae, 0x51, 0x7d, 0xde, 0x33, 0x34, 0xfe, 0xf8, 0xee, 0x2b, 0xfb, 0xdc, 0xa5, + 0x1c, 0x74, 0x9d, 0xc7, 0xfd, 0x0a, 0x37, 0x58, 0x26, 0x65, 0xcf, 0xcc, 0xa5, 0x2e, 0xac, 0xf9, + 0x1c, 0x9b, 0x76, 0xd0, 0xb7, 0x6e, 0x15, 0x23, 0x97, 0xd4, 0x0f, 0x0b, 0x1c, 0x5e, 0x4b, 0x28, + 0xda, 0x7e, 0xaf, 0xcc, 0x0a, 0xce, 0xbd, 0x04, 0xa1, 0xc8, 0x00, 0x79, 0x5c, 0x7a, 0xf2, 0xd1, + 0x7b, 0xa8, 0xec, 0x4e, 0xe2, 0xb0, 0xe8, 0x09, 0x4b, 0x7f, 0x8a, 0xc4, 0xc4, 0x3b, 0x58, 0xf4, + 0x02, 0xa2, 0xd1, 0x1b, 0x94, 0x68, 0xcc, 0x02, 0xff, 0x5c, 0xdf, 0x1f, 0x48, 0x74, 0x46, 0x72, + 0x66, 0xac, 0x58, 0x2a, 0xf1, 0xa8, 0x2b, 0xd9, 0x48, 0xba, 0x54, 0x6c, 0xe8, 0xb5, 0x8b, 0xa4, + 0x19, 0x40, 0xf1, 0x94, 0x19, 0xe3, 0x63, 0xd2, 0x60, 0x70, 0x78, 0x86, 0xed, 0x84, 0x2e, 0xc6, + 0x08, 0xec, 0x68, 0xa3, 0xef, 0x51, 0xdf, 0x74, 0x2f, 0x4a, 0x20, 0xb5, 0xa3, 0xb2, 0xfd, 0x0b, + 0x7d, 0x51, 0x7e, 0x54, 0x97, 0xcb, 0x8f, 0x6a, 0xbc, 0x70, 0x58, 0xfb, 0x9d, 0x16, 0x05, 0xce, + 0xd6, 0xef, 0x36, 0xe8, 0xff, 0xf8, 0xbf, 0xb0, 0x41, 0x5f, 0xbe, 0x70, 0x69, 0xff, 0xcf, 0xff, + 0xbd, 0xbd, 0xd0, 0x48, 0xae, 0x25, 0xd5, 0xe5, 0x8d, 0xe7, 0x24, 0x0e, 0xc6, 0x55, 0xae, 0x31, + 0xf2, 0x0d, 0x35, 0x05, 0x51, 0xa6, 0x45, 0xee, 0x9b, 0x5a, 0x3c, 0x97, 0xeb, 0x1d, 0x9f, 0x95, + 0x89, 0x85, 0xdb, 0xb4, 0x71, 0x3e, 0x31, 0xf7, 0x57, 0x68, 0x89, 0x48, 0x32, 0xa2, 0x1a, 0xff, + 0x98, 0x90, 0xad, 0x09, 0x46, 0xce, 0xe1, 0x52, 0xf0, 0xbe, 0xab, 0xa4, 0xe8, 0x13, 0xad, 0xae, + 0x59, 0x5b, 0xe4, 0x2f, 0x46, 0x60, 0xf3, 0x77, 0xb0, 0x70, 0xdf, 0xd5, 0xa9, 0x8b, 0x42, 0xd7, + 0x36, 0x07, 0x82, 0x98, 0x72, 0xd8, 0x5a, 0xa8, 0x87, 0xcf, 0x9c, 0xfd, 0xa4, 0xb7, 0x87, 0x91, + 0x4b, 0x97, 0x54, 0x8d, 0x84, 0xf5, 0xc1, 0x56, 0x10, 0xff, 0x0d, 0x7d, 0x30, 0x27, 0x26, 0x51, + 0xb4, 0xfd, 0x31, 0x0b, 0x49, 0x70, 0x8d, 0xd2, 0xe2, 0xaa, 0x46, 0xfb, 0x43, 0x3a, 0xb3, 0x74, + 0x03, 0x14, 0x83, 0x17, 0x50, 0xe4, 0xa0, 0xd5, 0x9f, 0xec, 0xe2, 0x18, 0x5e, 0xf0, 0x1b, 0x3f, + 0x1c, 0x45, 0x8d, 0x8e, 0x1d, 0x74, 0x8d, 0x7c, 0x87, 0x89, 0xaa, 0xd8, 0x3b, 0x78, 0x53, 0x10, + 0x89, 0x07, 0x6a, 0xd4, 0xdd, 0x98, 0xe4, 0xda, 0xa4, 0xee, 0x6c, 0x16, 0x36, 0x80, 0xd1, 0x7d, + 0x2b, 0x96, 0x7f, 0xfd, 0x72, 0x36, 0x4b, 0x05, 0x7c, 0xae, 0x64, 0xf1, 0xb9, 0x52, 0xc2, 0xe7, + 0x6c, 0x2e, 0x8f, 0x2f, 0xb9, 0x62, 0x71, 0x4b, 0xac, 0x43, 0xd3, 0x36, 0x45, 0x69, 0x5a, 0x37, + 0x48, 0x21, 0x83, 0x14, 0x32, 0x48, 0x21, 0x83, 0x14, 0x32, 0x48, 0x21, 0x83, 0x16, 0x32, 0xf8, + 0x42, 0x2c, 0xb4, 0x57, 0x22, 0x41, 0x5a, 0xe7, 0x85, 0x11, 0xdb, 0x12, 0xbf, 0x89, 0xd5, 0x49, + 0x32, 0xc5, 0xba, 0x14, 0xb1, 0xe0, 0x91, 0x9d, 0x89, 0x70, 0xde, 0x69, 0x32, 0x45, 0xfb, 0x41, + 0x83, 0xfa, 0xc8, 0xd2, 0xcc, 0xa0, 0x3b, 0x8c, 0xd5, 0x4f, 0x32, 0x6f, 0x8d, 0x19, 0x28, 0x2f, + 0xea, 0x7d, 0x13, 0xb8, 0xe0, 0xd8, 0xf9, 0xf5, 0xcb, 0xbf, 0x19, 0x60, 0xec, 0x7c, 0x93, 0x7f, + 0xfd, 0x4a, 0x24, 0xc6, 0x0e, 0x89, 0xb8, 0x7c, 0xaf, 0xb6, 0x9a, 0x80, 0x6f, 0xd5, 0x4d, 0x24, + 0x58, 0x24, 0xe8, 0x15, 0xd1, 0x78, 0xb7, 0xc4, 0xb1, 0x03, 0xaa, 0x13, 0xfc, 0x45, 0x6b, 0x15, + 0xb1, 0x5e, 0x11, 0x63, 0x16, 0x35, 0x61, 0x45, 0x4b, 0xf5, 0x4d, 0xc7, 0x25, 0x86, 0xb3, 0x94, + 0x98, 0xc1, 0x12, 0xc9, 0x74, 0x4b, 0x33, 0x14, 0x7b, 0x7a, 0x43, 0x8c, 0xd3, 0x24, 0x92, 0x6c, + 0x6b, 0x08, 0x5c, 0xc8, 0x16, 0xa5, 0xb1, 0x93, 0xc6, 0xe3, 0x90, 0x8e, 0x83, 0xf6, 0x0e, 0x34, + 0x32, 0xe1, 0x18, 0xb3, 0xeb, 0x2f, 0x7c, 0x4b, 0x1c, 0xcc, 0x47, 0xb2, 0x99, 0xb2, 0x4d, 0x0a, + 0xf9, 0x46, 0x01, 0x3e, 0xb6, 0x2e, 0x29, 0x90, 0xa4, 0xfb, 0x42, 0xe4, 0xdc, 0x67, 0x72, 0x16, + 0x0a, 0xb6, 0xc8, 0xc5, 0x45, 0x49, 0x4a, 0xdc, 0x0b, 0x0d, 0xd5, 0xcc, 0xdd, 0x50, 0xe5, 0x05, + 0xa3, 0x96, 0xa2, 0x86, 0x32, 0x2f, 0xb2, 0xea, 0x47, 0xe3, 0x68, 0xea, 0xfe, 0x6c, 0x73, 0xd3, + 0xe4, 0xf4, 0xa3, 0xb3, 0x95, 0x08, 0x22, 0x03, 0x38, 0xc9, 0x90, 0x68, 0x4f, 0x2f, 0xf0, 0xfa, + 0xf2, 0x25, 0x74, 0x12, 0xdc, 0x49, 0x26, 0xab, 0xdc, 0xe9, 0x49, 0xba, 0x28, 0xb8, 0x24, 0xc8, + 0x92, 0xba, 0xc5, 0x7e, 0xab, 0x6e, 0x2d, 0xc4, 0x44, 0x1c, 0xc9, 0xc0, 0xb0, 0xb2, 0x4a, 0xa7, + 0x49, 0x8e, 0xde, 0x1b, 0xc0, 0x6d, 0xe6, 0x14, 0xc9, 0xe4, 0x3a, 0x41, 0x82, 0xe2, 0xdf, 0x8e, + 0x07, 0x2a, 0x71, 0x61, 0x0f, 0x28, 0x6d, 0x49, 0xd9, 0x22, 0xda, 0x0d, 0xc7, 0x34, 0xd4, 0x35, + 0xab, 0x01, 0x63, 0xa0, 0x92, 0x0a, 0x6c, 0xf5, 0xd5, 0x39, 0x55, 0x7b, 0x8a, 0x5e, 0x0f, 0xd3, + 0x65, 0xd0, 0x2e, 0x2f, 0x3c, 0x29, 0x99, 0xd1, 0x6c, 0x32, 0xd3, 0xdd, 0x33, 0xdc, 0x4c, 0x6e, + 0xb7, 0x81, 0x20, 0xbc, 0x54, 0xb9, 0x46, 0x2e, 0x3d, 0x43, 0xdf, 0x2f, 0x29, 0xaa, 0xca, 0xb0, + 0x08, 0x5a, 0x2a, 0x9e, 0x1e, 0x24, 0x77, 0xa2, 0xa9, 0x69, 0x43, 0xc7, 0x8c, 0xf4, 0x02, 0x33, + 0xf2, 0xd6, 0x19, 0xda, 0xec, 0x1a, 0x33, 0xf2, 0xea, 0xd2, 0xac, 0xfb, 0x0a, 0x06, 0x64, 0xc5, + 0x04, 0xbc, 0x45, 0x3e, 0xb8, 0x2b, 0x4d, 0x4d, 0x0f, 0x3b, 0x16, 0x9e, 0x86, 0x30, 0x3a, 0x91, + 0x8b, 0xcc, 0x40, 0xa2, 0xd5, 0x09, 0xbf, 0x87, 0x99, 0x82, 0xcf, 0x78, 0xef, 0x18, 0x63, 0xce, + 0xe4, 0x2a, 0x44, 0xda, 0x38, 0xd7, 0xf5, 0x5b, 0xe5, 0xda, 0x99, 0xac, 0x2c, 0xc5, 0x9c, 0x8f, + 0x65, 0x64, 0x21, 0x03, 0x5b, 0x92, 0xd9, 0x7d, 0x35, 0xbe, 0x62, 0x51, 0xf7, 0x2f, 0x61, 0x8b, + 0xf8, 0x72, 0x24, 0x82, 0xe3, 0xb0, 0xbc, 0x57, 0x07, 0x60, 0x4c, 0x26, 0xf6, 0x0c, 0xf2, 0xf9, + 0xbb, 0xfb, 0x03, 0x43, 0x7c, 0x07, 0xa7, 0x4d, 0x08, 0x3f, 0x47, 0xb3, 0x4d, 0x96, 0x86, 0xe8, + 0x23, 0x39, 0x60, 0xbd, 0x07, 0x21, 0xe1, 0x1b, 0x65, 0xf6, 0x2e, 0x72, 0xc7, 0x1c, 0x5b, 0xf7, + 0x43, 0xb7, 0x88, 0x10, 0xbb, 0x55, 0xfb, 0x3b, 0x07, 0xf8, 0x07, 0x6b, 0xed, 0xaf, 0xfa, 0xa7, + 0x4f, 0x89, 0xec, 0x17, 0x3d, 0x50, 0xa8, 0x48, 0x4a, 0x99, 0xa5, 0x40, 0xfb, 0xc9, 0x7b, 0x01, + 0xde, 0x7d, 0x0b, 0x26, 0x02, 0x71, 0x88, 0x25, 0x17, 0xed, 0x2f, 0xe8, 0xaf, 0x11, 0x57, 0x99, + 0xc2, 0xd5, 0xb2, 0x50, 0x49, 0xa4, 0x0e, 0xbf, 0x0a, 0x24, 0x22, 0xc5, 0x5b, 0x11, 0x38, 0xeb, + 0xf8, 0xb9, 0x29, 0x78, 0x58, 0x67, 0x06, 0xf1, 0x40, 0xc3, 0x87, 0x57, 0x16, 0x64, 0x20, 0x6e, + 0x2b, 0x34, 0xd8, 0xfd, 0x35, 0x19, 0xb2, 0xd7, 0xb3, 0x35, 0x75, 0x13, 0xf7, 0x82, 0xd7, 0xd7, + 0x93, 0x66, 0x68, 0x77, 0xb4, 0xae, 0xa0, 0xfa, 0x06, 0x49, 0x24, 0xc8, 0x7d, 0x68, 0x77, 0x34, + 0xf8, 0x94, 0x8d, 0x7c, 0x6a, 0x05, 0x9f, 0x72, 0x3f, 0x38, 0xb5, 0x34, 0x11, 0xca, 0x35, 0x0e, + 0x72, 0x61, 0xfc, 0x7b, 0x76, 0x71, 0x92, 0x49, 0x82, 0x45, 0xa2, 0xbd, 0x30, 0x88, 0x79, 0x8d, + 0x57, 0xef, 0x79, 0x76, 0x2c, 0x28, 0xd3, 0x06, 0x69, 0x95, 0xfc, 0x40, 0x93, 0x7d, 0x67, 0x25, + 0x32, 0x6d, 0x1a, 0x3e, 0x79, 0x92, 0xef, 0x49, 0x69, 0x51, 0xff, 0xf7, 0xbf, 0x3b, 0x13, 0x29, + 0x5e, 0xfb, 0xf7, 0x73, 0x68, 0xa1, 0x1c, 0xa8, 0xfb, 0x07, 0xc0, 0xb3, 0x5b, 0xf8, 0xa7, 0x2a, + 0x4b, 0x11, 0x03, 0x40, 0x90, 0x23, 0x87, 0x39, 0x72, 0x91, 0x1c, 0x79, 0x3e, 0x47, 0x1e, 0x73, + 0xe4, 0xab, 0x78, 0x16, 0x9c, 0x44, 0xb7, 0x25, 0x61, 0x62, 0xd8, 0x33, 0x5d, 0x05, 0x34, 0xf4, + 0xcc, 0xf0, 0xf6, 0x06, 0xbd, 0x0f, 0x64, 0x03, 0x2f, 0x2b, 0x57, 0xe1, 0x63, 0xb0, 0x43, 0x32, + 0x40, 0x3f, 0x2b, 0xa1, 0xeb, 0x1f, 0xec, 0xff, 0x24, 0xd6, 0x5a, 0xc0, 0x90, 0x5e, 0xe8, 0x76, + 0x5f, 0x36, 0x8b, 0xb9, 0x31, 0x76, 0x86, 0x6a, 0x98, 0xc3, 0x5e, 0x5f, 0x70, 0x2c, 0xa5, 0x8d, + 0xb7, 0x64, 0x0a, 0x0e, 0x46, 0x5b, 0xa4, 0x41, 0x62, 0x22, 0x45, 0x72, 0x58, 0x84, 0x45, 0x23, + 0xc5, 0x1a, 0xd8, 0x1e, 0x53, 0x28, 0x4f, 0x1e, 0xf3, 0x9c, 0x69, 0xf4, 0x0e, 0x4e, 0xcd, 0xa6, + 0x81, 0xd2, 0xc3, 0x59, 0x2a, 0x98, 0xa5, 0xc1, 0xb5, 0x4c, 0x20, 0xdd, 0x10, 0x80, 0x2a, 0x04, + 0xb3, 0x0d, 0x4c, 0x08, 0xb7, 0xb7, 0xe6, 0x1c, 0x5d, 0x93, 0x45, 0x89, 0x04, 0x0d, 0x20, 0x19, + 0x61, 0x3d, 0x86, 0x17, 0x8d, 0x6c, 0xc9, 0x78, 0x93, 0x80, 0xbb, 0x97, 0x51, 0x81, 0x25, 0x52, + 0xe7, 0xaf, 0x6d, 0x54, 0xd2, 0xdd, 0x89, 0x14, 0xf1, 0x0e, 0x09, 0xcf, 0x8c, 0xd0, 0x5d, 0x5d, + 0x0b, 0xea, 0x02, 0x0b, 0x74, 0xfa, 0x51, 0xcf, 0x2c, 0x6f, 0x07, 0x88, 0x05, 0x05, 0xf8, 0x97, + 0xc8, 0xbb, 0x69, 0x31, 0x67, 0x2c, 0x59, 0xc2, 0xf8, 0xe5, 0xf5, 0x18, 0x27, 0x2d, 0xb2, 0x25, + 0x8a, 0xb1, 0x83, 0xbf, 0xff, 0xa8, 0x3a, 0xbc, 0x83, 0x16, 0xf1, 0xf7, 0x32, 0x58, 0x35, 0xd4, + 0x71, 0x0a, 0x23, 0x02, 0x61, 0x3e, 0xfc, 0xe5, 0xfc, 0xa6, 0x40, 0x4d, 0xf1, 0xf2, 0x7d, 0xcb, + 0x79, 0x39, 0xb3, 0x2c, 0x67, 0x36, 0x94, 0xd3, 0x0c, 0x72, 0xe6, 0xbd, 0x9c, 0x39, 0x96, 0x33, + 0xec, 0xf4, 0xe5, 0xfb, 0xb8, 0x01, 0x4f, 0x00, 0xf1, 0xb1, 0xe6, 0xa0, 0x63, 0x08, 0x25, 0x48, + 0x8e, 0x9a, 0x89, 0x08, 0x6d, 0xf3, 0x29, 0xe4, 0x96, 0x23, 0x4c, 0xae, 0x7d, 0x72, 0x51, 0xc0, + 0x4c, 0xa8, 0x20, 0x2e, 0x96, 0xb7, 0x72, 0xd5, 0x62, 0x12, 0x44, 0x35, 0x0f, 0x6b, 0x0e, 0xf5, + 0x24, 0xd3, 0x81, 0x63, 0x6e, 0x25, 0x42, 0xa9, 0x9f, 0xbc, 0x64, 0x9b, 0xb7, 0xf5, 0x42, 0x42, + 0x95, 0x4f, 0x90, 0x49, 0xb4, 0x65, 0x3a, 0x72, 0x40, 0xc9, 0x38, 0xad, 0xab, 0x59, 0x3e, 0x4d, + 0xf3, 0x27, 0x73, 0x55, 0xdc, 0x19, 0x3a, 0xa0, 0x79, 0x82, 0x40, 0xe7, 0xac, 0x03, 0xbe, 0xb5, + 0xa5, 0x7a, 0x4b, 0xb2, 0xaa, 0xc5, 0xeb, 0x3a, 0xc8, 0x80, 0xfd, 0x46, 0x16, 0x99, 0x0e, 0xd3, + 0x9d, 0x98, 0x96, 0x1b, 0x1b, 0x41, 0x0d, 0x17, 0x5c, 0x0e, 0x83, 0xd4, 0xc3, 0x26, 0x4f, 0x5c, + 0x6b, 0x8a, 0x29, 0xf5, 0x9b, 0xee, 0xfb, 0xee, 0x10, 0x67, 0x3a, 0xfd, 0x3b, 0x24, 0xfe, 0x60, + 0x2e, 0xb4, 0x08, 0x32, 0xa5, 0x26, 0x97, 0x36, 0x51, 0xf2, 0x72, 0x31, 0x34, 0xab, 0xbc, 0xda, + 0x02, 0xb8, 0xf3, 0xc1, 0x89, 0x17, 0xe4, 0x58, 0xa7, 0x58, 0xa5, 0xef, 0x1c, 0x1d, 0x96, 0xa0, + 0x9f, 0x4b, 0xea, 0xe2, 0xbb, 0x1c, 0x04, 0x8a, 0x5b, 0xec, 0x28, 0xc9, 0xc7, 0x7a, 0x89, 0x01, + 0xa9, 0xd0, 0xbb, 0x1f, 0x58, 0x1a, 0xbb, 0x24, 0x20, 0x1c, 0x3f, 0x6d, 0x61, 0x2b, 0x93, 0xa3, + 0x15, 0x22, 0x39, 0xd3, 0x38, 0x32, 0x49, 0x40, 0x4f, 0xbd, 0xc8, 0x76, 0x7d, 0x3a, 0x51, 0xed, + 0xfc, 0x33, 0x35, 0x71, 0x08, 0xbc, 0xe9, 0x81, 0xda, 0x2b, 0x42, 0xb6, 0x05, 0x35, 0x25, 0xe2, + 0xbd, 0x65, 0x73, 0x69, 0xa3, 0xc8, 0xcc, 0x17, 0x6d, 0x72, 0x09, 0x2a, 0xfe, 0xc1, 0x80, 0x1b, + 0xc3, 0x3a, 0x2e, 0x23, 0x91, 0x81, 0x89, 0x59, 0x1e, 0x43, 0xce, 0x50, 0x08, 0xa6, 0x1b, 0x2c, + 0xa2, 0x80, 0xb1, 0x90, 0x9f, 0xa2, 0x4a, 0x87, 0x11, 0x27, 0x35, 0x61, 0x1b, 0xdd, 0x25, 0x8e, + 0xb2, 0x52, 0xa8, 0xc4, 0x27, 0xbf, 0x08, 0x82, 0x1f, 0xd5, 0xc3, 0xbc, 0x22, 0x07, 0xc4, 0xc3, + 0x8d, 0xeb, 0x48, 0x1a, 0xd1, 0xdc, 0xe8, 0xfa, 0x9b, 0xaa, 0x5b, 0x78, 0x06, 0xa6, 0x2e, 0xa6, + 0x30, 0x05, 0xfb, 0x86, 0x41, 0xbf, 0xe9, 0x70, 0x75, 0xc3, 0x33, 0x44, 0xdd, 0x12, 0xf7, 0x27, + 0x64, 0x5e, 0xc0, 0xd3, 0x76, 0x0f, 0x67, 0x82, 0x23, 0xd6, 0x3e, 0x65, 0x25, 0x90, 0x9a, 0x86, + 0x9f, 0x30, 0x7a, 0x23, 0xb7, 0xc0, 0xaa, 0x40, 0x5b, 0xe8, 0x8c, 0x80, 0x70, 0xdc, 0xad, 0x6e, + 0xac, 0x33, 0x72, 0x75, 0x79, 0xef, 0xf8, 0xaa, 0x45, 0x98, 0x6a, 0x2a, 0x06, 0x24, 0x59, 0x59, + 0x15, 0xdd, 0xdd, 0x41, 0x9c, 0x9e, 0x2e, 0x04, 0x08, 0x6b, 0x93, 0xc1, 0xeb, 0xfb, 0xa6, 0x42, + 0x8c, 0x08, 0x3f, 0x08, 0x0c, 0x87, 0x22, 0xd3, 0x83, 0x7e, 0xfd, 0x32, 0x23, 0xae, 0xa9, 0x26, + 0xf1, 0x4c, 0xa5, 0x7b, 0x4c, 0xf8, 0x4c, 0xbd, 0x42, 0xfa, 0x4b, 0x0c, 0xb1, 0xb4, 0xf1, 0xeb, + 0x61, 0x0b, 0x27, 0x0f, 0x12, 0x41, 0x04, 0x16, 0x91, 0xba, 0x98, 0xf4, 0xf6, 0x72, 0x5a, 0xf5, + 0x85, 0x4f, 0x35, 0xb2, 0xdb, 0x35, 0x50, 0x26, 0x30, 0x80, 0xf4, 0x51, 0x33, 0x12, 0xb8, 0xcf, + 0xee, 0x4f, 0x05, 0x52, 0x84, 0x0d, 0x72, 0x0b, 0xf0, 0x83, 0x97, 0xaf, 0x60, 0x5a, 0x9d, 0xfb, + 0x40, 0x5d, 0x4c, 0x5b, 0xc9, 0x79, 0xa8, 0x67, 0x9f, 0x58, 0xd7, 0xb6, 0x06, 0x1c, 0x92, 0x30, + 0xa1, 0x3a, 0x08, 0xf9, 0xda, 0x47, 0x0e, 0x08, 0xe0, 0xd1, 0x78, 0x7a, 0x30, 0x86, 0x3f, 0x9a, + 0x4b, 0xee, 0xc8, 0x63, 0xe7, 0x16, 0x5a, 0x79, 0x7a, 0x74, 0x96, 0xa8, 0x44, 0x02, 0xb3, 0xb5, + 0x7e, 0xa5, 0x54, 0xf0, 0x5f, 0x01, 0x9a, 0x88, 0x11, 0x78, 0x74, 0xe0, 0xab, 0xd4, 0x8f, 0x25, + 0xb1, 0x98, 0x68, 0x3f, 0x81, 0x1b, 0xe8, 0xa2, 0x67, 0x27, 0x73, 0xe8, 0x24, 0x5a, 0x43, 0xef, + 0x5b, 0x7e, 0xd1, 0xfe, 0x1a, 0x6f, 0xd8, 0x0b, 0x06, 0xee, 0x2f, 0x61, 0x07, 0x46, 0xb5, 0xfe, + 0x47, 0x66, 0x2e, 0x24, 0x04, 0x4e, 0x13, 0xcc, 0xd6, 0x38, 0x3d, 0x30, 0xb8, 0x12, 0x85, 0x8b, + 0x72, 0xfc, 0x7b, 0x7a, 0xe9, 0x14, 0xf4, 0xd2, 0x4f, 0x30, 0x73, 0xfc, 0x2a, 0x92, 0x33, 0x4e, + 0xaf, 0xff, 0xf5, 0x8b, 0x57, 0xf9, 0x17, 0xae, 0x56, 0x18, 0xc3, 0x5a, 0x3a, 0x46, 0xcb, 0x2c, + 0xe8, 0xc4, 0x09, 0x5f, 0x8f, 0x95, 0xa2, 0xe1, 0x5d, 0xe7, 0x52, 0x5e, 0xcd, 0x27, 0xbd, 0x3b, + 0x50, 0x68, 0x96, 0xfa, 0x7b, 0x5e, 0x3c, 0x8e, 0x86, 0x8e, 0x5c, 0xac, 0x06, 0x54, 0x79, 0xa7, + 0x44, 0xe7, 0xad, 0xd7, 0xeb, 0xbe, 0xc9, 0x25, 0x7d, 0x71, 0xb9, 0x77, 0x0e, 0x22, 0x0c, 0x30, + 0x1e, 0xcb, 0x74, 0xf0, 0x9c, 0x25, 0xba, 0xfa, 0x10, 0xf5, 0x17, 0x3d, 0x30, 0xc8, 0x1d, 0xdd, + 0xa0, 0x5b, 0x42, 0x8b, 0xf9, 0x5b, 0x16, 0xd0, 0x2c, 0x91, 0x36, 0xcc, 0x71, 0x22, 0x89, 0xb1, + 0xe0, 0xbc, 0x30, 0x6c, 0xbe, 0xda, 0x49, 0xf9, 0x2e, 0x2c, 0x34, 0x5a, 0x07, 0x16, 0xf6, 0xff, + 0xbf, 0xb8, 0x6b, 0x6f, 0x6e, 0x1b, 0x47, 0xf2, 0xff, 0xdf, 0xa7, 0x90, 0xb9, 0x33, 0xb1, 0xb8, + 0xa6, 0x1d, 0xca, 0x4e, 0x66, 0x32, 0x94, 0x29, 0xd7, 0x6c, 0x92, 0xb9, 0x75, 0x6d, 0x36, 0xe7, + 0x1a, 0x67, 0x5e, 0xe5, 0x72, 0xad, 0x25, 0x99, 0xb2, 0x54, 0xa1, 0x49, 0x8e, 0x48, 0x3f, 0xb2, + 0xb2, 0xf6, 0x0b, 0xdc, 0x77, 0xb9, 0xcf, 0x78, 0xdd, 0x8d, 0x57, 0x03, 0x24, 0xf5, 0x48, 0xe6, + 0xf6, 0xaa, 0x76, 0x36, 0x16, 0x48, 0x02, 0x0d, 0xa0, 0x01, 0x34, 0x1a, 0x8d, 0xdf, 0x4f, 0xfc, + 0xf1, 0xec, 0x99, 0x8c, 0xc3, 0x61, 0x1b, 0x55, 0x31, 0x44, 0xd9, 0x91, 0x75, 0x2f, 0xfc, 0xf3, + 0x50, 0x9d, 0x52, 0xe7, 0x3b, 0xb0, 0x6f, 0xa5, 0x38, 0x5e, 0xf3, 0x41, 0x9c, 0xfb, 0xcb, 0xae, + 0x74, 0xb7, 0x18, 0x2c, 0xc5, 0x84, 0x61, 0xaa, 0x1f, 0xbd, 0xa0, 0x70, 0x18, 0xdc, 0xd2, 0x07, + 0x95, 0xb6, 0x04, 0x90, 0x65, 0x41, 0x6d, 0xf2, 0x60, 0x94, 0x26, 0x65, 0x41, 0x71, 0x74, 0xb1, + 0xd9, 0xf9, 0x21, 0xfe, 0x95, 0xfa, 0x70, 0x99, 0x9d, 0x3c, 0x94, 0xb4, 0xf1, 0xee, 0x42, 0xef, + 0xed, 0x2e, 0xbc, 0x7b, 0x2f, 0x42, 0xc2, 0x9a, 0xe5, 0xae, 0x1f, 0x89, 0xf0, 0xa9, 0x52, 0x47, + 0x46, 0xa5, 0x01, 0xd2, 0x5d, 0x25, 0xc8, 0x95, 0x8d, 0x3c, 0x1e, 0x18, 0x92, 0xb8, 0x8f, 0x61, + 0x65, 0xd0, 0x90, 0xc8, 0xa9, 0x34, 0x13, 0x7e, 0x28, 0xea, 0x8e, 0x7e, 0x07, 0x7d, 0x7e, 0xb8, + 0x81, 0xff, 0xe9, 0xc3, 0x0f, 0xfb, 0xaf, 0xbc, 0x65, 0x30, 0xca, 0xaf, 0x3f, 0x45, 0x15, 0x8f, + 0xab, 0xda, 0xc2, 0x53, 0xb4, 0x21, 0x0c, 0x70, 0x25, 0x3c, 0x59, 0x9b, 0xf8, 0x95, 0x50, 0xc3, + 0xb6, 0x74, 0x2d, 0xdd, 0x80, 0xea, 0x4b, 0x77, 0x68, 0xa5, 0xdd, 0x25, 0x0b, 0x8a, 0x19, 0xc4, + 0x66, 0x35, 0x31, 0x1d, 0xe4, 0x37, 0x22, 0x1f, 0x0b, 0xce, 0xfa, 0x82, 0x0c, 0x59, 0x35, 0xbe, + 0x4f, 0xe0, 0x09, 0xc4, 0x16, 0x5a, 0x4a, 0x64, 0x45, 0x98, 0x4a, 0x7c, 0x7b, 0xf5, 0x67, 0x4f, + 0xc4, 0x72, 0xaf, 0x2c, 0x10, 0x87, 0x60, 0xec, 0x7a, 0x76, 0xef, 0xd5, 0xc2, 0xd2, 0x39, 0x0b, + 0x18, 0xd2, 0x9c, 0x1c, 0x40, 0x2b, 0xca, 0x09, 0x73, 0x4d, 0xd4, 0x3c, 0xac, 0x0b, 0xfb, 0x49, + 0xe0, 0xfd, 0xab, 0x23, 0x6c, 0x53, 0xdc, 0xeb, 0xec, 0x79, 0x9d, 0x7f, 0x79, 0x5f, 0x12, 0x44, + 0x4f, 0x79, 0xf2, 0x28, 0xfa, 0xa5, 0xe5, 0x8d, 0x6b, 0xf1, 0xc0, 0x2d, 0x8d, 0xcf, 0xaa, 0xe6, + 0x79, 0x93, 0x38, 0xa4, 0x74, 0xd5, 0x43, 0xb4, 0xad, 0xc0, 0x17, 0xc5, 0xd5, 0xbc, 0x81, 0x19, + 0x4a, 0xa2, 0x00, 0xf3, 0xf9, 0x67, 0xc5, 0xec, 0xf0, 0xf4, 0xa4, 0xbc, 0xb8, 0xc8, 0x19, 0x75, + 0xf8, 0x12, 0xbd, 0x7a, 0xcc, 0xab, 0x26, 0xe1, 0x48, 0xd9, 0xa6, 0x10, 0x05, 0x80, 0x99, 0xb5, + 0x2c, 0x60, 0xfd, 0x49, 0x3c, 0x89, 0x19, 0xbd, 0x2a, 0x78, 0xcf, 0x8d, 0x01, 0xa3, 0x40, 0x07, + 0x7d, 0x74, 0xb6, 0xc8, 0xb3, 0x88, 0x1c, 0x6f, 0x08, 0x03, 0x9c, 0x2d, 0xc9, 0x09, 0xc7, 0x87, + 0xb3, 0xf1, 0xde, 0x90, 0x0b, 0xdf, 0xfa, 0x59, 0x26, 0x37, 0xc2, 0xf1, 0x20, 0x1c, 0xfc, 0x48, + 0xd4, 0x40, 0x0e, 0x20, 0xc4, 0xb5, 0x16, 0x9e, 0xa0, 0x50, 0x5c, 0x45, 0x72, 0xbf, 0x0a, 0x26, + 0xf3, 0x7f, 0x22, 0x2b, 0x3d, 0x55, 0xd6, 0x2c, 0x11, 0xb5, 0x70, 0xb5, 0xf7, 0xa9, 0xc5, 0xe5, + 0xd3, 0x45, 0xd7, 0xdf, 0x0e, 0xfc, 0x9f, 0x7f, 0x72, 0x85, 0xed, 0x0e, 0xd3, 0xa2, 0xb8, 0x2e, + 0xda, 0xf9, 0x0d, 0x19, 0x0f, 0x04, 0xb7, 0x0f, 0x11, 0x0e, 0xd0, 0xee, 0xf8, 0xab, 0x05, 0xf9, + 0x03, 0x07, 0xe1, 0x89, 0x87, 0x5b, 0x00, 0xc2, 0xa3, 0x58, 0x52, 0x2a, 0xc2, 0x73, 0x42, 0x22, + 0x9e, 0xbe, 0xc0, 0x4c, 0x32, 0x01, 0x6d, 0x95, 0x0f, 0xde, 0xdc, 0xcd, 0x97, 0x78, 0xe3, 0x97, + 0xe2, 0x04, 0xaf, 0x22, 0x4f, 0x94, 0x72, 0x2d, 0xae, 0xa5, 0x22, 0x28, 0x21, 0x86, 0x96, 0x72, + 0x99, 0xe1, 0x9b, 0x08, 0x9b, 0x10, 0x84, 0x5a, 0x2e, 0x6b, 0xf2, 0x63, 0xec, 0x87, 0x5d, 0x03, + 0xed, 0x80, 0xdc, 0x51, 0x7f, 0xf9, 0xb0, 0x49, 0xa1, 0x20, 0x56, 0x12, 0x9f, 0xe8, 0xd6, 0x90, + 0xf4, 0x20, 0x4b, 0xaa, 0x87, 0x7c, 0xfe, 0x51, 0x54, 0x07, 0x16, 0x83, 0x0e, 0xbe, 0x8f, 0x7e, + 0x0a, 0xa2, 0x51, 0x00, 0x1b, 0x01, 0xb9, 0x57, 0x3e, 0xe0, 0xdf, 0xa2, 0xda, 0x44, 0xac, 0xb0, + 0x3e, 0x9f, 0x4e, 0x9a, 0x67, 0x37, 0xf0, 0x12, 0xe6, 0x76, 0xe0, 0xa9, 0x5b, 0x2f, 0x0b, 0x74, + 0x86, 0x46, 0x0b, 0x9c, 0x94, 0x23, 0x25, 0xd7, 0x72, 0xd9, 0x67, 0xe0, 0xab, 0xd4, 0xc9, 0xe4, + 0x32, 0x9d, 0x23, 0x14, 0xab, 0x16, 0x7e, 0x4d, 0x07, 0x22, 0xf6, 0xeb, 0xfd, 0x2c, 0x81, 0xa5, + 0x6c, 0xa1, 0x06, 0x1e, 0xdd, 0xe3, 0x13, 0x4f, 0x69, 0xec, 0xe1, 0x90, 0x24, 0xf7, 0xb8, 0xf5, + 0xc8, 0x38, 0xcc, 0xdf, 0xdd, 0xa3, 0x6a, 0xbe, 0xbb, 0x57, 0x17, 0x74, 0x52, 0x99, 0xa5, 0xa7, + 0x03, 0xfa, 0x70, 0x39, 0x35, 0xe9, 0x87, 0x6f, 0x3c, 0xfa, 0x0a, 0x89, 0xea, 0x1d, 0xa2, 0x79, + 0xef, 0x23, 0x7b, 0xc9, 0xbe, 0x9e, 0x39, 0x9b, 0xa0, 0xdf, 0x83, 0xee, 0xa3, 0xb2, 0x77, 0x3a, + 0xc8, 0x3d, 0xe9, 0x0d, 0x47, 0x30, 0xc0, 0xa3, 0x51, 0x3a, 0xcc, 0x28, 0x6a, 0x5e, 0xbc, 0x3a, + 0xd8, 0x15, 0x86, 0xfb, 0xad, 0x95, 0xa5, 0x7b, 0x92, 0x87, 0x82, 0x6c, 0x74, 0x60, 0xb7, 0x14, + 0xec, 0x8f, 0x8e, 0x31, 0x28, 0x3e, 0xaf, 0x87, 0x94, 0x54, 0xab, 0x8c, 0x13, 0x24, 0xcc, 0x51, + 0xb9, 0x81, 0xf8, 0x94, 0x47, 0x15, 0x59, 0xb5, 0xb0, 0xe2, 0x93, 0xdc, 0xa0, 0x27, 0x2c, 0x92, + 0x45, 0x26, 0x51, 0xe3, 0xe3, 0x2c, 0xb6, 0x6e, 0x26, 0xa3, 0xe7, 0xb4, 0xae, 0xc3, 0xa2, 0x9e, + 0xc2, 0xaa, 0x3e, 0x19, 0xc2, 0xdc, 0x05, 0xcb, 0xba, 0x64, 0xac, 0x73, 0x75, 0x43, 0xf4, 0xfe, + 0x42, 0xf7, 0x7e, 0xbd, 0xe3, 0x2d, 0x8d, 0x30, 0xaa, 0x84, 0xd0, 0xbc, 0xf8, 0x31, 0xea, 0xc5, + 0xa9, 0x58, 0xe1, 0x2c, 0xf2, 0x3d, 0xc9, 0xb0, 0x0a, 0x4f, 0x1a, 0x7b, 0x04, 0x3f, 0xd9, 0xa8, + 0x4f, 0x78, 0x2b, 0x9d, 0x3a, 0x8d, 0x24, 0x32, 0x31, 0xcd, 0x54, 0x9b, 0xb9, 0x64, 0x40, 0xb8, + 0xd2, 0x7a, 0x47, 0xe1, 0x57, 0xd6, 0x8d, 0xbe, 0xc5, 0xca, 0xd1, 0x1f, 0xbe, 0xe0, 0x42, 0x54, + 0xed, 0x22, 0x40, 0x9d, 0x29, 0x80, 0xbc, 0xa9, 0x72, 0xf4, 0xda, 0xd6, 0xb5, 0x7b, 0x2f, 0xf3, + 0xe3, 0x35, 0x94, 0x39, 0x35, 0x55, 0x11, 0x57, 0x2c, 0xbc, 0x90, 0xad, 0xd6, 0x90, 0x30, 0xa8, + 0x2c, 0x58, 0x4e, 0x8a, 0x38, 0x55, 0x7b, 0xc4, 0xc6, 0x90, 0xdd, 0x6a, 0xbf, 0x67, 0x82, 0x76, + 0x83, 0x5e, 0xe8, 0xef, 0x6d, 0x72, 0x9b, 0x17, 0xbf, 0x2a, 0xf9, 0x57, 0x51, 0xe8, 0xf7, 0x4b, + 0x7e, 0x5d, 0x97, 0x58, 0x56, 0x9c, 0x5b, 0xd8, 0xe5, 0x78, 0x9e, 0xa7, 0x29, 0xe4, 0x94, 0xff, + 0x8c, 0x4d, 0xbc, 0x18, 0x25, 0xd3, 0xe1, 0xfd, 0x2c, 0x9f, 0x47, 0x9a, 0x91, 0x8f, 0x06, 0x18, + 0xfc, 0x24, 0xa6, 0xc2, 0xa5, 0x0a, 0xcb, 0xd8, 0x00, 0x96, 0x26, 0x89, 0x88, 0x21, 0xad, 0x19, + 0x0f, 0x4c, 0x83, 0x7d, 0x0d, 0x9a, 0x71, 0x97, 0xd6, 0x01, 0x2d, 0xd5, 0x31, 0x96, 0xaa, 0x2d, + 0x30, 0x96, 0x1c, 0x58, 0xa5, 0xf7, 0x60, 0x96, 0xca, 0x1b, 0xe6, 0x1d, 0xba, 0x27, 0xd4, 0x88, + 0xac, 0xc4, 0x30, 0x95, 0x18, 0xc0, 0x07, 0x61, 0xe2, 0x10, 0xaa, 0x71, 0xec, 0x1d, 0xbd, 0xfa, + 0xda, 0xdb, 0x14, 0x61, 0xa9, 0xe5, 0xbb, 0xff, 0x0b, 0xb8, 0xa5, 0xe7, 0x0c, 0x8d, 0x84, 0x8b, + 0xbd, 0x19, 0xee, 0x47, 0xb5, 0x16, 0x50, 0x49, 0xa8, 0xc2, 0x7e, 0x4f, 0x2b, 0x83, 0x0d, 0xa8, + 0x94, 0xb4, 0x81, 0x80, 0x54, 0xed, 0x20, 0x20, 0x95, 0x03, 0x02, 0xb2, 0x8d, 0xb8, 0xeb, 0x10, + 0x95, 0x32, 0x2e, 0x5c, 0xf6, 0x87, 0x09, 0xb7, 0x0d, 0x44, 0x09, 0xe4, 0xd0, 0x67, 0xf0, 0x04, + 0xfd, 0x26, 0xdc, 0x86, 0x69, 0x0d, 0xaf, 0xa4, 0x5a, 0x8f, 0x57, 0xc2, 0x3b, 0xfb, 0x8f, 0x44, + 0x3c, 0xda, 0x1a, 0xe8, 0xa8, 0xfa, 0x1c, 0xa0, 0xa3, 0xb0, 0x05, 0x17, 0xa8, 0x5a, 0x81, 0x0b, + 0x54, 0x7d, 0x06, 0xc8, 0x51, 0xb5, 0x01, 0xc8, 0xd1, 0xed, 0xd4, 0x02, 0x33, 0x12, 0x3f, 0xbf, + 0x48, 0x3a, 0x82, 0x32, 0x37, 0x18, 0x44, 0xad, 0x78, 0x32, 0x96, 0x32, 0x13, 0x98, 0xcc, 0x57, + 0x0b, 0x3d, 0xb2, 0x92, 0x25, 0x05, 0xf0, 0x73, 0xe8, 0x45, 0xf6, 0xed, 0xd8, 0x1b, 0x6c, 0xc0, + 0xe5, 0xc5, 0x34, 0xcf, 0x1b, 0xbc, 0xc6, 0xd8, 0x92, 0x94, 0xa9, 0x52, 0x0d, 0x0b, 0x44, 0x61, + 0x3b, 0xb6, 0xe2, 0x77, 0xa4, 0x3c, 0xb8, 0x41, 0x67, 0xbd, 0x58, 0x81, 0xf7, 0xe1, 0xac, 0x08, + 0x4a, 0xc8, 0x52, 0xef, 0x5b, 0x25, 0x5a, 0x3c, 0x5e, 0x23, 0xba, 0x2b, 0xa3, 0xc3, 0x17, 0xc5, + 0xa3, 0x66, 0x87, 0x0b, 0x71, 0xb4, 0xb4, 0x43, 0x41, 0xae, 0xc4, 0xac, 0x21, 0xb8, 0x8d, 0x1a, + 0x02, 0x24, 0x7a, 0x09, 0x05, 0x54, 0xf3, 0xa6, 0x48, 0xb4, 0xab, 0x51, 0x14, 0xb5, 0x05, 0xb0, + 0x0e, 0x8e, 0xa5, 0xf7, 0x6a, 0x48, 0x03, 0x59, 0xae, 0x3d, 0xa2, 0xa1, 0xc5, 0xff, 0xef, 0x92, + 0xe7, 0xb0, 0x10, 0x8c, 0x59, 0x48, 0x25, 0x56, 0x94, 0x11, 0x9e, 0xad, 0x5f, 0xdf, 0xcd, 0xa3, + 0x0b, 0xb0, 0x51, 0x2e, 0x03, 0xe3, 0x9a, 0x8a, 0x2e, 0xf6, 0x7b, 0x97, 0xb0, 0xd7, 0x40, 0x98, + 0x9a, 0x28, 0x0c, 0xe6, 0x11, 0x6e, 0x35, 0x61, 0xb3, 0x02, 0x1b, 0xe4, 0xbe, 0x65, 0x96, 0x9c, + 0x41, 0x6d, 0x53, 0x1d, 0x76, 0xa2, 0x2e, 0x5c, 0xf6, 0x9b, 0x08, 0x75, 0xb2, 0x16, 0x2e, 0x1d, + 0x4e, 0x97, 0xd3, 0xc9, 0xd4, 0xe5, 0x10, 0x22, 0xbd, 0xc9, 0x4e, 0xc4, 0x3f, 0x91, 0x21, 0xa7, + 0xc4, 0x7b, 0xde, 0x74, 0xc6, 0x97, 0xf2, 0x30, 0x2e, 0xe7, 0xe7, 0x41, 0x51, 0x3e, 0x3d, 0x75, + 0xe9, 0x4a, 0xa2, 0x8d, 0x4d, 0x0a, 0x6a, 0x8f, 0x4c, 0x46, 0x78, 0x9f, 0x18, 0xff, 0xa0, 0x23, + 0x0a, 0x1b, 0x9e, 0x14, 0x6f, 0x4a, 0x6b, 0x74, 0xd2, 0x2b, 0x73, 0xf2, 0xcb, 0x15, 0x72, 0x02, + 0xc2, 0x4c, 0xcf, 0xd2, 0xb7, 0x36, 0x07, 0xa8, 0x07, 0x26, 0x82, 0x3a, 0xa7, 0xa9, 0x0c, 0xdd, + 0x53, 0x69, 0x2b, 0xe7, 0x64, 0x36, 0x2f, 0x61, 0x32, 0xf1, 0x06, 0x8a, 0x0f, 0xa7, 0x23, 0x9b, + 0x43, 0x76, 0x12, 0x05, 0xaf, 0x64, 0xc7, 0xa2, 0x9b, 0x88, 0x1c, 0x53, 0x45, 0x11, 0xf6, 0xb3, + 0xbd, 0x3d, 0x1f, 0xea, 0x24, 0x9a, 0x1d, 0xa6, 0x83, 0xf9, 0x27, 0x68, 0x78, 0x24, 0x23, 0xda, + 0xb3, 0x8b, 0x98, 0xce, 0xff, 0xa9, 0xbc, 0x31, 0xbb, 0x41, 0xc5, 0x2f, 0x51, 0xca, 0x70, 0x94, + 0xaa, 0xf5, 0x8e, 0x20, 0x8d, 0xeb, 0x74, 0x1f, 0xa1, 0x8d, 0xfc, 0x7e, 0xaa, 0x4f, 0x77, 0xf1, + 0xa6, 0x0c, 0x1d, 0x16, 0x34, 0x41, 0xc5, 0x70, 0x7f, 0x29, 0xe1, 0xbd, 0x77, 0x89, 0xc0, 0xc6, + 0x5f, 0x81, 0x95, 0x4f, 0xd9, 0x73, 0xd4, 0xfa, 0xce, 0xd0, 0xcf, 0x74, 0x78, 0x06, 0xf4, 0x15, + 0x72, 0x39, 0x19, 0x24, 0x7a, 0xf6, 0xc0, 0x1f, 0xe0, 0xfd, 0x27, 0xd1, 0x9b, 0xd6, 0x83, 0x88, + 0xb7, 0xd8, 0x85, 0x79, 0x44, 0x2e, 0xf7, 0x4b, 0x8e, 0x6b, 0x2f, 0x3c, 0xb2, 0xdc, 0x4f, 0x03, + 0xd3, 0xc0, 0x59, 0x2a, 0x42, 0x21, 0xad, 0x76, 0xc7, 0x73, 0xe9, 0x71, 0xd2, 0xad, 0xf6, 0x7a, + 0x41, 0x18, 0xe0, 0x75, 0x4e, 0xfd, 0x10, 0xc6, 0x8c, 0xfd, 0xd4, 0x7a, 0x74, 0x51, 0x5d, 0xf2, + 0x97, 0xcd, 0xb0, 0x6a, 0xfb, 0xc6, 0xbc, 0x41, 0x9f, 0x5a, 0x1a, 0xc6, 0xa2, 0x5a, 0x93, 0xb4, + 0x51, 0x4c, 0x73, 0x06, 0xdf, 0x6d, 0x14, 0x1f, 0x83, 0x00, 0x9a, 0x45, 0xb7, 0x9f, 0x34, 0xc8, + 0x89, 0x2f, 0x58, 0xd2, 0x70, 0x76, 0x95, 0x34, 0x39, 0x2b, 0xc5, 0x3d, 0x7f, 0x5b, 0x20, 0x04, + 0xc4, 0xd1, 0xed, 0x5d, 0xd6, 0x6e, 0x46, 0xc2, 0x77, 0x6f, 0xee, 0xe6, 0xea, 0xc3, 0xb2, 0xe6, + 0x59, 0xef, 0xba, 0x6d, 0xc9, 0x7d, 0xf5, 0xbd, 0xf0, 0xcf, 0xa5, 0xee, 0x41, 0x9e, 0xe5, 0x87, + 0xcd, 0x72, 0xb4, 0x5a, 0x7a, 0x93, 0x8c, 0x7f, 0x64, 0xdc, 0xce, 0x2a, 0x97, 0x3e, 0x86, 0x27, + 0x89, 0x9b, 0x51, 0x29, 0x1a, 0xa3, 0xf3, 0xea, 0x86, 0x41, 0x31, 0x05, 0xfc, 0x49, 0x61, 0x3d, + 0x3a, 0xe9, 0xe2, 0x69, 0x0e, 0x4e, 0xaa, 0xb0, 0x87, 0xd3, 0x64, 0xb3, 0x18, 0x13, 0xc7, 0xbe, + 0xc9, 0x7b, 0x57, 0x2d, 0xa0, 0x4c, 0x91, 0xf9, 0xdc, 0xde, 0xad, 0xa9, 0xc2, 0xcc, 0xcd, 0x39, + 0xca, 0xb5, 0xf1, 0x2d, 0x18, 0x7c, 0x6f, 0xb3, 0x6b, 0xf3, 0xe6, 0x9a, 0x92, 0x85, 0x33, 0xc4, + 0x09, 0x82, 0x3d, 0xb3, 0xef, 0xd7, 0xcb, 0x19, 0x4f, 0x4c, 0xf2, 0xa6, 0xad, 0x85, 0xa8, 0x27, + 0x6e, 0x02, 0x2c, 0xb7, 0x25, 0xc3, 0x5b, 0x87, 0xbe, 0x13, 0x06, 0xbd, 0x5c, 0xa7, 0x19, 0x4d, + 0x6b, 0x2f, 0x44, 0x96, 0x56, 0x39, 0x95, 0xad, 0xc4, 0x91, 0x3f, 0x9f, 0xde, 0x4d, 0x26, 0xb0, + 0xaf, 0x22, 0x70, 0xdf, 0xd6, 0xd5, 0xda, 0xf4, 0x16, 0x5f, 0xb1, 0xb1, 0x8f, 0x05, 0x4f, 0x19, + 0x32, 0x25, 0x1b, 0x61, 0x9f, 0x9e, 0x32, 0x8c, 0xfe, 0xae, 0xc1, 0xc6, 0xad, 0x07, 0x8d, 0x63, + 0x00, 0x0c, 0x6b, 0x10, 0xfa, 0x09, 0x06, 0x0e, 0xa7, 0xa8, 0xc9, 0x2c, 0x9b, 0x55, 0x49, 0xfa, + 0x69, 0xb3, 0x1a, 0x14, 0xab, 0xaa, 0x90, 0xa1, 0x03, 0x16, 0xc4, 0x55, 0x82, 0x7f, 0x8e, 0xd4, + 0xa6, 0x73, 0x84, 0x5e, 0xe8, 0xde, 0x51, 0x98, 0x30, 0xb2, 0x18, 0x3b, 0xb4, 0xdc, 0xd3, 0xdf, + 0x1a, 0xe3, 0x51, 0xd6, 0xb1, 0xd1, 0x88, 0x76, 0xed, 0x65, 0x5e, 0x43, 0x66, 0x19, 0xb3, 0xda, + 0xa1, 0x25, 0xdd, 0x3b, 0xfc, 0x96, 0x2c, 0xeb, 0x50, 0x2e, 0xea, 0x42, 0x94, 0x2c, 0xea, 0x41, + 0x45, 0xf1, 0x68, 0xcf, 0x58, 0xb2, 0x0e, 0x8a, 0xbb, 0x37, 0x00, 0xc5, 0x97, 0x21, 0x67, 0x91, + 0xc4, 0x7a, 0xdf, 0x10, 0xe8, 0x3d, 0x4d, 0xb8, 0x74, 0x62, 0x08, 0xb5, 0x74, 0x00, 0xdd, 0x81, + 0x00, 0xc9, 0x62, 0xae, 0x4c, 0x78, 0xfd, 0xd0, 0xfa, 0x05, 0x96, 0x14, 0x15, 0xef, 0xa2, 0xc1, + 0x0f, 0xde, 0x43, 0x4b, 0x72, 0x74, 0x74, 0x17, 0x9f, 0xfd, 0xe5, 0x4b, 0x6c, 0xd3, 0xb2, 0xca, + 0xe7, 0x2a, 0x7a, 0x8e, 0xbf, 0xfd, 0xd5, 0xc2, 0x18, 0x65, 0x2b, 0x4b, 0xa7, 0xb3, 0x0a, 0xea, + 0x74, 0x0b, 0x79, 0xdd, 0xb1, 0xd0, 0xeb, 0xdd, 0xb9, 0xc1, 0x5e, 0xa0, 0x02, 0xe9, 0x60, 0x9d, + 0xc2, 0xe6, 0x08, 0x3a, 0xca, 0x08, 0xde, 0x88, 0xef, 0xef, 0x03, 0x7c, 0xe9, 0x6c, 0x1b, 0xae, + 0x96, 0x0a, 0xb5, 0xa7, 0x5c, 0x43, 0x25, 0x51, 0x53, 0x72, 0x1b, 0x37, 0xe5, 0x54, 0x90, 0x57, + 0x75, 0x46, 0x04, 0x66, 0x93, 0x25, 0x65, 0x29, 0x76, 0x24, 0x06, 0x6e, 0x7d, 0xc5, 0xa8, 0x23, + 0x72, 0xf7, 0x11, 0x0d, 0x3a, 0x39, 0xaa, 0xfe, 0xe0, 0x99, 0x60, 0x8d, 0xf0, 0xe7, 0x18, 0x2b, + 0xa9, 0xdc, 0x49, 0x23, 0x3c, 0xb9, 0xdc, 0x56, 0xfa, 0xf2, 0xff, 0x51, 0xfa, 0xd7, 0xa2, 0x50, + 0x83, 0xb8, 0x98, 0x67, 0x72, 0xa2, 0xdb, 0x46, 0x7e, 0x28, 0xca, 0xdb, 0x52, 0xee, 0x2b, 0x07, + 0x9b, 0x4a, 0x1f, 0x8b, 0xdd, 0x0e, 0x0b, 0xf2, 0xf3, 0xf2, 0xdf, 0x8c, 0xa9, 0xb5, 0x74, 0x28, + 0x07, 0x90, 0x2c, 0x02, 0xaa, 0xf9, 0x2e, 0xb9, 0x86, 0x17, 0xa3, 0x67, 0xd9, 0xa8, 0x2c, 0xfa, + 0x5b, 0x31, 0x44, 0x50, 0x15, 0xd2, 0x5b, 0x7c, 0xc7, 0x1e, 0xce, 0xce, 0x78, 0xbf, 0x62, 0xd7, + 0xa5, 0x04, 0x1c, 0x1a, 0x97, 0x90, 0xc2, 0x4d, 0x1a, 0x37, 0x35, 0xd5, 0x12, 0x9d, 0x62, 0x18, + 0xb3, 0xa3, 0xb9, 0xe6, 0x53, 0x12, 0x56, 0x02, 0x2b, 0x39, 0x3b, 0x9c, 0x8a, 0xed, 0x70, 0x70, + 0xf7, 0xe0, 0x35, 0xce, 0x02, 0x0a, 0x98, 0xe7, 0x6a, 0x33, 0x6c, 0x7a, 0xc1, 0x63, 0x81, 0xfb, + 0x29, 0x84, 0xa2, 0x30, 0xe0, 0xdb, 0x54, 0xf7, 0xea, 0x71, 0x1b, 0xb4, 0x7a, 0xa8, 0xc9, 0x89, + 0x22, 0xfd, 0xdc, 0x0c, 0xb2, 0xde, 0x99, 0xa5, 0x0c, 0x53, 0x6e, 0x87, 0x34, 0x21, 0x5a, 0xe1, + 0xf6, 0x2d, 0x2d, 0x7c, 0x7d, 0x23, 0x10, 0x93, 0xe7, 0xf7, 0x54, 0x31, 0x90, 0xb2, 0x2a, 0xfd, + 0x9e, 0x36, 0xd5, 0xe8, 0xf9, 0xa0, 0x71, 0xe6, 0x9c, 0x7a, 0x83, 0x6e, 0x9a, 0xe0, 0x28, 0x4e, + 0xe8, 0x3c, 0x19, 0xba, 0x19, 0x0f, 0x07, 0x99, 0x9c, 0x62, 0xd6, 0xf3, 0xed, 0xaf, 0xa1, 0xab, + 0xe8, 0x56, 0x1a, 0xb6, 0x2a, 0xad, 0xbf, 0xbb, 0x6a, 0xfd, 0xc5, 0x05, 0x77, 0x57, 0xdb, 0x24, + 0x5f, 0x32, 0x3a, 0xa1, 0x8c, 0x13, 0xef, 0x1c, 0xfa, 0xac, 0x53, 0xe8, 0x1d, 0x29, 0x18, 0xcf, + 0xf9, 0xdc, 0x8b, 0xb0, 0x1f, 0xbc, 0xff, 0xd2, 0xec, 0xf1, 0x0f, 0xb3, 0x6a, 0x2a, 0xc8, 0xe0, + 0xa1, 0xe0, 0x9f, 0x60, 0x56, 0x96, 0x17, 0x39, 0x64, 0xda, 0x72, 0xcb, 0x21, 0x3d, 0x2e, 0x1d, + 0x2b, 0x06, 0x7e, 0xbe, 0x2e, 0x8d, 0x1d, 0x83, 0xf5, 0x7e, 0x7a, 0xaa, 0xbe, 0xd8, 0x02, 0x6b, + 0xea, 0x8f, 0x22, 0x3f, 0xe4, 0x74, 0xb8, 0x87, 0xde, 0xe0, 0xfb, 0xb3, 0xd3, 0x0e, 0x74, 0xe5, + 0xed, 0x30, 0xbb, 0x16, 0x0c, 0x85, 0x8a, 0xe7, 0x5e, 0x7e, 0x31, 0x2c, 0x66, 0xa4, 0xc4, 0xfa, + 0x23, 0x48, 0x20, 0x37, 0x9c, 0x7c, 0x6f, 0xd0, 0x52, 0x4e, 0x8f, 0x97, 0xd3, 0x43, 0xc7, 0x5b, + 0xb9, 0x6c, 0x5b, 0x5c, 0x69, 0x9a, 0xaf, 0xf2, 0xce, 0xe9, 0x9b, 0x36, 0x7b, 0xc9, 0xac, 0x46, + 0xd7, 0xae, 0xf1, 0xa4, 0xcd, 0x25, 0x6a, 0x10, 0xe8, 0x9e, 0x6b, 0x6e, 0x34, 0x1d, 0xbe, 0x0c, + 0xc9, 0x68, 0xea, 0x69, 0xa3, 0x09, 0x3b, 0x37, 0x89, 0x60, 0x8b, 0xfe, 0x8e, 0x9d, 0x24, 0x9d, + 0x75, 0xfd, 0xe5, 0xa0, 0x4d, 0x3c, 0x6a, 0xfa, 0xf5, 0xeb, 0x3f, 0x06, 0xf6, 0x9f, 0x89, 0xe5, + 0x5f, 0x39, 0xb6, 0x57, 0xba, 0xac, 0x94, 0xef, 0x19, 0x6b, 0x6f, 0xa1, 0x08, 0x0b, 0x19, 0x77, + 0xdb, 0x8b, 0xa4, 0xd6, 0xd8, 0xdd, 0x4b, 0xf6, 0x76, 0xaf, 0x93, 0xd4, 0xc6, 0x2f, 0x3e, 0xeb, + 0x52, 0xfa, 0xc6, 0xf0, 0xc5, 0x02, 0x03, 0x79, 0x37, 0xda, 0xdd, 0xd4, 0xd9, 0x79, 0x66, 0x7b, + 0x3b, 0x77, 0x97, 0x5c, 0xf4, 0x66, 0x5d, 0x78, 0x18, 0xce, 0x55, 0xa5, 0xbc, 0x51, 0x21, 0xb0, + 0xe3, 0xc7, 0xac, 0x4f, 0xf1, 0x39, 0x83, 0xf9, 0x56, 0xd5, 0xb7, 0xa7, 0x11, 0xd0, 0x0d, 0xac, + 0x99, 0x27, 0xe7, 0x68, 0xcc, 0xe4, 0xca, 0xd9, 0x9c, 0x49, 0x67, 0xa9, 0x88, 0x36, 0x12, 0x9e, + 0x29, 0xe1, 0x30, 0xed, 0x37, 0x45, 0x15, 0xc2, 0xe0, 0xfd, 0x34, 0xca, 0x2b, 0x41, 0xe0, 0x69, + 0xc7, 0x22, 0x0a, 0x14, 0x93, 0x20, 0xe1, 0x77, 0x54, 0x1b, 0x58, 0x8c, 0xcd, 0xc1, 0x9b, 0x34, + 0x3f, 0xbb, 0xa1, 0xaf, 0x58, 0xa3, 0x39, 0xa0, 0x4e, 0x11, 0xe2, 0x08, 0xf2, 0x61, 0xf7, 0x3c, + 0xc9, 0xc7, 0x77, 0x78, 0xb8, 0x5a, 0xa9, 0x8b, 0x66, 0x04, 0x14, 0x0a, 0x7b, 0xa0, 0x6b, 0x8c, + 0xa9, 0x49, 0xe8, 0xae, 0x15, 0xbb, 0x3d, 0x4d, 0x68, 0x61, 0xf0, 0xb2, 0x48, 0xa2, 0xb0, 0xb0, + 0x8d, 0x0f, 0x19, 0xc7, 0x49, 0x46, 0xe1, 0x26, 0xf2, 0x24, 0xb7, 0x28, 0x7f, 0x10, 0xa1, 0x60, + 0xcd, 0x0d, 0x01, 0xbb, 0xce, 0xda, 0x5e, 0x57, 0xbb, 0xda, 0xaa, 0x46, 0x08, 0x43, 0x98, 0xfc, + 0xf1, 0x79, 0xfd, 0xd4, 0x91, 0xb9, 0xe1, 0xe8, 0x91, 0x71, 0xce, 0x1f, 0x1b, 0x50, 0x7f, 0x7d, + 0x60, 0xf7, 0x2a, 0xfc, 0xda, 0x63, 0x8c, 0xa7, 0x5b, 0xd1, 0x50, 0x39, 0x7b, 0x41, 0x74, 0xcb, + 0xe8, 0xe1, 0x17, 0x48, 0xc6, 0x40, 0xbd, 0x2d, 0xf1, 0xbe, 0x72, 0x9d, 0x35, 0x1a, 0x6d, 0x11, + 0x5d, 0x65, 0xd2, 0x9c, 0xd0, 0x07, 0x3e, 0x4d, 0xfb, 0x09, 0xfa, 0xca, 0x5f, 0xae, 0xe2, 0x6e, + 0xd2, 0x68, 0xf7, 0xc8, 0xe3, 0xba, 0x76, 0xf7, 0x90, 0xee, 0x83, 0xbe, 0xb1, 0x11, 0x26, 0x1c, + 0x72, 0x9b, 0x4f, 0x21, 0xca, 0xeb, 0x5d, 0x3f, 0xbe, 0xd2, 0x87, 0x57, 0x56, 0x9b, 0x1b, 0x89, + 0xde, 0xdc, 0xcd, 0x29, 0xa6, 0xb1, 0x4d, 0xe2, 0x0f, 0xda, 0x5f, 0xd4, 0xf6, 0xc6, 0x9f, 0x40, + 0xc2, 0xbd, 0xde, 0x72, 0xd3, 0x12, 0x55, 0x7f, 0xbf, 0x80, 0xfe, 0x5e, 0x79, 0xb4, 0x64, 0xcf, + 0xee, 0x96, 0x01, 0xa4, 0x84, 0x16, 0x53, 0xfb, 0x37, 0x2f, 0x5f, 0x1e, 0x1d, 0x88, 0xd9, 0x3d, + 0x3c, 0x38, 0x84, 0xc5, 0x38, 0x29, 0xe0, 0x8f, 0x1e, 0xdf, 0x3f, 0x93, 0xc3, 0xad, 0xa6, 0x12, + 0xda, 0xbe, 0x71, 0x1d, 0x6e, 0xcf, 0x7b, 0x48, 0x3f, 0x5e, 0xb6, 0xd4, 0xf8, 0x8f, 0xa8, 0x81, + 0x69, 0x56, 0x55, 0x07, 0x5d, 0x83, 0xb0, 0xb9, 0x06, 0x1f, 0x36, 0xab, 0x80, 0xe5, 0xdf, 0x5b, + 0x5d, 0x8f, 0x15, 0xda, 0x58, 0x5f, 0x4e, 0xb6, 0xd1, 0xc6, 0x1a, 0x24, 0xbe, 0xb2, 0xaa, 0x6b, + 0x1a, 0x62, 0x0e, 0xec, 0x6a, 0x00, 0x9d, 0x62, 0xdc, 0xc9, 0xa9, 0x1c, 0x89, 0xdd, 0xd1, 0x0b, + 0xcf, 0xe2, 0x12, 0x7f, 0xcb, 0xef, 0x3a, 0x59, 0x02, 0xbb, 0xaa, 0x61, 0xd5, 0x01, 0xcb, 0x12, + 0xac, 0xb6, 0x43, 0xe9, 0x0f, 0x28, 0xd1, 0x84, 0xc0, 0xcf, 0x3b, 0x43, 0x6d, 0xd2, 0xed, 0x78, + 0xda, 0xd1, 0x1b, 0x5a, 0x8d, 0x14, 0x5e, 0x22, 0xfe, 0x42, 0xb7, 0xe5, 0x59, 0x5c, 0xcd, 0x05, + 0x24, 0xda, 0x96, 0xeb, 0xc8, 0x8a, 0xf5, 0xc2, 0x1b, 0xd4, 0x22, 0x33, 0xcc, 0x02, 0xa2, 0x8e, + 0x29, 0x7b, 0x61, 0xc8, 0x16, 0x13, 0xf2, 0x55, 0xf0, 0x9d, 0xc9, 0x15, 0xf7, 0x49, 0x87, 0x6a, + 0x66, 0x17, 0xab, 0x8b, 0x5e, 0x5b, 0xfe, 0x5d, 0x6b, 0x04, 0xb7, 0x06, 0x16, 0x6d, 0xdf, 0x0b, + 0xb8, 0x10, 0xf5, 0xf1, 0xba, 0x26, 0xd5, 0x6f, 0xd7, 0xd7, 0x65, 0x25, 0x48, 0xc3, 0xd2, 0xdc, + 0x66, 0xba, 0x94, 0xce, 0x39, 0xa2, 0xb2, 0x5c, 0x94, 0x4b, 0x6f, 0x02, 0xfb, 0x8f, 0x2a, 0x4a, + 0x93, 0x49, 0xd5, 0xdf, 0x74, 0x9e, 0x55, 0x8e, 0x27, 0xa5, 0xdf, 0x1b, 0x16, 0x9c, 0x36, 0x96, + 0x4c, 0x0e, 0x99, 0xcd, 0x8b, 0x96, 0x1a, 0xad, 0x0b, 0xdf, 0x65, 0xa1, 0x60, 0xb4, 0x81, 0x48, + 0x5c, 0xdc, 0x33, 0xb9, 0xd5, 0x30, 0x6e, 0xf8, 0xbe, 0x79, 0xd2, 0xe0, 0xf2, 0xae, 0x9a, 0x60, + 0x8b, 0xe4, 0xdb, 0x87, 0x4d, 0x6f, 0x8b, 0x4b, 0x4a, 0xf2, 0x23, 0x4b, 0x1a, 0xa2, 0xa3, 0x4b, + 0x54, 0x74, 0x37, 0x05, 0x09, 0x1e, 0x83, 0x6e, 0x9f, 0x68, 0x9c, 0xbd, 0xab, 0x88, 0x32, 0xde, + 0x87, 0x44, 0xdc, 0x23, 0x1b, 0x3c, 0x9c, 0x3a, 0xd8, 0x23, 0x01, 0x3c, 0x06, 0xdc, 0x76, 0x52, + 0xe6, 0x10, 0xa8, 0x41, 0x23, 0x82, 0xb1, 0x4c, 0x46, 0x66, 0x5e, 0x84, 0xf0, 0x1c, 0xde, 0xd0, + 0xa2, 0xc1, 0x03, 0x03, 0xcd, 0x61, 0xb5, 0x6e, 0x34, 0xa4, 0x84, 0x8e, 0x2e, 0x2e, 0x97, 0xce, + 0x4d, 0x4c, 0xc1, 0x68, 0x81, 0xb7, 0x31, 0xb1, 0xdc, 0x1b, 0x01, 0x2d, 0x8d, 0xa1, 0xc6, 0x25, + 0x5e, 0x81, 0xc5, 0xeb, 0x2a, 0xa2, 0x69, 0x29, 0x0a, 0xc5, 0xc4, 0x06, 0x56, 0xb5, 0xc2, 0xde, + 0x3e, 0x62, 0x59, 0x6d, 0x5c, 0x15, 0xfd, 0x2f, 0x11, 0xa2, 0x84, 0x0d, 0xe3, 0x12, 0xcd, 0x4b, + 0x79, 0x49, 0x3f, 0x4e, 0x82, 0xd5, 0xb2, 0xac, 0x92, 0xc4, 0x8e, 0x3a, 0x46, 0x79, 0x88, 0xe3, + 0x81, 0x0a, 0xb2, 0xb0, 0x08, 0x39, 0x0b, 0x87, 0x15, 0x92, 0x2c, 0x99, 0x5c, 0x6c, 0x75, 0xd4, + 0x1d, 0xaf, 0xa2, 0xea, 0xca, 0xb5, 0x18, 0x9c, 0xd9, 0x3a, 0x0c, 0x4e, 0x3c, 0x7e, 0x09, 0x77, + 0x62, 0x79, 0x74, 0x9e, 0x5a, 0x05, 0x81, 0x4a, 0xb0, 0x93, 0xa9, 0xa1, 0x0d, 0x33, 0x39, 0x63, + 0x8f, 0x6c, 0xf0, 0x4c, 0xab, 0x56, 0xc1, 0xcc, 0x7a, 0x56, 0x3c, 0xcc, 0x2d, 0xf8, 0x28, 0xc3, + 0xe3, 0x8d, 0xcc, 0xda, 0x78, 0x2f, 0x97, 0x35, 0x57, 0x16, 0x55, 0x01, 0xc5, 0xf9, 0x61, 0x1f, + 0xe1, 0x99, 0x4e, 0x2d, 0x42, 0xa8, 0x44, 0x92, 0x90, 0x0c, 0x9a, 0xfb, 0x3e, 0x4a, 0x83, 0xdb, + 0x59, 0x34, 0x0c, 0x30, 0x42, 0x3e, 0x18, 0xcd, 0x67, 0x51, 0x63, 0xbd, 0x89, 0x2c, 0x45, 0xe3, + 0x93, 0x42, 0x6f, 0xe4, 0xcb, 0x65, 0xdf, 0x41, 0x38, 0x65, 0x30, 0x93, 0xe3, 0x0d, 0x60, 0x26, + 0xaf, 0xd7, 0xc3, 0x4c, 0x06, 0x45, 0xf3, 0x3b, 0xf9, 0xc4, 0x74, 0xc3, 0x9c, 0x94, 0x12, 0x72, + 0x8e, 0xc7, 0x81, 0xf8, 0x1b, 0x72, 0x88, 0xaf, 0xe5, 0xdf, 0xf9, 0x24, 0x2e, 0x96, 0xe2, 0x4f, + 0xd0, 0x0c, 0xba, 0x89, 0x24, 0x38, 0x25, 0x13, 0x3b, 0xa8, 0x7b, 0xce, 0x4f, 0xa6, 0x65, 0x78, + 0xd7, 0xbf, 0x47, 0x87, 0x9c, 0x9e, 0x21, 0xcf, 0x53, 0xf6, 0xf4, 0xb4, 0x53, 0x4b, 0xcf, 0x8e, + 0xe3, 0xd2, 0xbf, 0x56, 0x43, 0x48, 0x80, 0xe1, 0x0b, 0xd5, 0xfb, 0x8c, 0x9e, 0x17, 0xbd, 0x47, + 0x81, 0xe5, 0x2b, 0x60, 0x41, 0x39, 0x52, 0x6c, 0xbe, 0x1e, 0x29, 0x36, 0x15, 0xcd, 0x4f, 0xf4, + 0xe4, 0xf1, 0x30, 0x50, 0x3f, 0xf3, 0xe2, 0xb7, 0xb8, 0x26, 0xc6, 0x10, 0xc5, 0xc8, 0x97, 0xed, + 0x2a, 0x34, 0xdb, 0x40, 0x85, 0xe6, 0x1b, 0xa8, 0xd0, 0x78, 0xbd, 0x0a, 0xa5, 0x5a, 0x85, 0x66, + 0x4a, 0x68, 0x50, 0xa1, 0xb9, 0xfc, 0x1b, 0x54, 0x68, 0x1c, 0x08, 0xf2, 0x6f, 0x91, 0x50, 0x15, + 0x71, 0x1b, 0x6c, 0x2b, 0x46, 0xae, 0x18, 0xa5, 0x4a, 0x2d, 0x74, 0x2c, 0x3d, 0xf9, 0x19, 0x62, + 0xa0, 0x93, 0x26, 0xd3, 0x12, 0xec, 0xc8, 0x29, 0xba, 0xa4, 0x6e, 0x61, 0x39, 0x99, 0x81, 0x0d, + 0x6e, 0x3c, 0xf8, 0xf0, 0x44, 0x1e, 0x5f, 0xc3, 0xda, 0xb7, 0x83, 0x27, 0xd3, 0x2a, 0xab, 0xfd, + 0xfd, 0xd6, 0x99, 0x13, 0x95, 0x20, 0x84, 0x29, 0xd2, 0x9a, 0x87, 0x89, 0xc1, 0x9d, 0x80, 0xde, + 0x1b, 0x3f, 0xc2, 0x69, 0xa1, 0x75, 0x3e, 0xb3, 0xa6, 0x5b, 0xc5, 0x5b, 0xbe, 0x22, 0xaf, 0xdf, + 0xec, 0xac, 0x7e, 0x6b, 0xcf, 0xe9, 0xef, 0xb3, 0x15, 0xf9, 0xc0, 0x24, 0xd5, 0x36, 0x8d, 0xd6, + 0xf3, 0x59, 0x25, 0xd0, 0xad, 0x2d, 0xd0, 0xed, 0x2a, 0x81, 0x90, 0x06, 0x7c, 0x45, 0x4e, 0xf0, + 0xd8, 0xce, 0x0b, 0x12, 0xd0, 0x56, 0x91, 0x4e, 0x94, 0x53, 0xdc, 0xda, 0xbb, 0x79, 0x12, 0x3b, + 0x75, 0x7b, 0x9e, 0x08, 0xe1, 0x66, 0x2f, 0x75, 0x90, 0xb0, 0x2e, 0xcf, 0x0f, 0xc5, 0x8a, 0x1c, + 0xab, 0x22, 0x6a, 0x53, 0xd7, 0x9a, 0x6c, 0xc9, 0xcd, 0xd9, 0xc3, 0x7c, 0x45, 0x5e, 0xb0, 0x48, + 0xec, 0x6c, 0xb1, 0x2a, 0x35, 0xe4, 0xff, 0x97, 0xf9, 0xaa, 0x4e, 0xde, 0x68, 0xfd, 0xb1, 0xaf, + 0x20, 0x69, 0x5e, 0x65, 0x75, 0xf7, 0x96, 0x19, 0x33, 0x0b, 0xbc, 0x81, 0xe5, 0x55, 0x1e, 0xcc, + 0x76, 0x02, 0x4d, 0x26, 0x4e, 0x04, 0x90, 0x00, 0x8c, 0x62, 0xd8, 0xf4, 0x24, 0x81, 0xb9, 0x01, + 0x96, 0xb0, 0x8b, 0x9c, 0xf2, 0xfe, 0x56, 0xed, 0x5a, 0x58, 0x17, 0xb2, 0x4d, 0x61, 0x27, 0xd3, + 0x83, 0xd1, 0xb4, 0xc2, 0xc8, 0xa9, 0x7e, 0xf8, 0x55, 0x0b, 0x23, 0x2e, 0xac, 0xc6, 0xc9, 0x09, + 0x43, 0x49, 0x70, 0x11, 0x0f, 0x76, 0x15, 0xe2, 0x81, 0x8b, 0xdf, 0x18, 0xc9, 0x6e, 0xda, 0xd5, + 0xcc, 0x5e, 0xee, 0xa7, 0x57, 0x6d, 0x9f, 0x5e, 0xf0, 0xa8, 0xed, 0x4b, 0x8e, 0x2b, 0x1d, 0x36, + 0xcc, 0x14, 0x93, 0x47, 0xd3, 0xea, 0x30, 0x65, 0x4e, 0x1e, 0xaf, 0x93, 0x09, 0xd4, 0xd2, 0xe9, + 0x3d, 0x85, 0xed, 0xb9, 0x5d, 0xdd, 0x14, 0x1d, 0x4f, 0x23, 0xce, 0xe7, 0x26, 0x35, 0x5c, 0x99, + 0xc1, 0x76, 0xf5, 0x84, 0xcf, 0xa2, 0xc4, 0xad, 0x16, 0x6a, 0xa4, 0xa3, 0x90, 0x35, 0x35, 0xac, + 0xc3, 0x74, 0xf9, 0xae, 0x6a, 0x23, 0x2e, 0x49, 0xb7, 0x49, 0xb1, 0xcb, 0xc7, 0xc6, 0xbc, 0x2c, + 0x7c, 0xa2, 0xda, 0x48, 0xd1, 0xf8, 0x44, 0x8d, 0x59, 0xce, 0x9a, 0xb3, 0xac, 0x81, 0x1a, 0xd5, + 0xb2, 0x15, 0x37, 0x50, 0xa1, 0x07, 0x25, 0x5a, 0x19, 0xee, 0x8c, 0x9e, 0x9e, 0x92, 0xc1, 0x91, + 0x6f, 0x8f, 0x9b, 0xe5, 0xd2, 0x35, 0x6f, 0x14, 0xa2, 0x11, 0xa1, 0x88, 0xc8, 0x75, 0xf3, 0x88, + 0x7a, 0x5f, 0x0c, 0xa7, 0xf1, 0x51, 0x5c, 0x46, 0x87, 0x3c, 0xe1, 0x10, 0x12, 0xe4, 0x9f, 0xbd, + 0xb8, 0x74, 0xc7, 0x8b, 0x25, 0x96, 0xc0, 0x2f, 0x41, 0xb1, 0x18, 0x92, 0x9a, 0x2b, 0x5b, 0xa9, + 0x65, 0x93, 0x05, 0x97, 0x62, 0x79, 0x3e, 0x8a, 0x77, 0x76, 0x2a, 0x59, 0xb4, 0x4c, 0x3a, 0xa4, + 0x24, 0xf9, 0xa3, 0x87, 0x3f, 0xac, 0xe2, 0x4b, 0xa7, 0xf8, 0x77, 0x79, 0x7d, 0xce, 0xc3, 0x71, + 0x9e, 0xb8, 0x03, 0x80, 0x36, 0xe0, 0x6c, 0xd7, 0x86, 0xe0, 0x69, 0xcb, 0xbe, 0xbc, 0x37, 0xab, + 0x0e, 0x81, 0x61, 0x9e, 0xd8, 0xd1, 0x07, 0xc2, 0x0f, 0x33, 0xb0, 0xe5, 0xf8, 0x2f, 0x83, 0x46, + 0x70, 0x86, 0x0e, 0xa4, 0xc4, 0xf3, 0x8f, 0x63, 0x02, 0x45, 0x97, 0x61, 0xba, 0x92, 0x8b, 0xa4, + 0x0a, 0xd4, 0x47, 0xbe, 0x09, 0x59, 0xfb, 0x3d, 0x35, 0x7f, 0x67, 0x78, 0xc1, 0x4a, 0x45, 0xb3, + 0x82, 0x48, 0x34, 0xaf, 0xe5, 0x19, 0x62, 0xb9, 0x06, 0xcc, 0xaa, 0x78, 0x97, 0x0f, 0x31, 0xd8, + 0x5a, 0x3a, 0xa9, 0x3a, 0xde, 0x9e, 0x3a, 0xe1, 0xdd, 0xf3, 0x3a, 0x5d, 0xba, 0x88, 0xec, 0x7b, + 0x2b, 0xe6, 0x32, 0x3a, 0x54, 0x52, 0x68, 0x95, 0xd0, 0x25, 0xc5, 0xa9, 0x1b, 0xdd, 0x26, 0x8e, + 0xc5, 0xf4, 0xdc, 0xec, 0x43, 0x6d, 0x4f, 0x8f, 0x7b, 0x28, 0x0e, 0xbc, 0xdb, 0x76, 0xda, 0x05, + 0x86, 0xfd, 0xe9, 0xe0, 0xf0, 0x65, 0xe8, 0xc3, 0x30, 0x9e, 0x83, 0x94, 0x32, 0xce, 0xf8, 0xf4, + 0x0d, 0x18, 0x3d, 0x30, 0xd2, 0x47, 0x49, 0x07, 0x4f, 0xce, 0x72, 0xb0, 0x6d, 0x93, 0xb2, 0xc4, + 0x0b, 0x9c, 0x64, 0xec, 0x22, 0x82, 0x51, 0xb7, 0x78, 0xcf, 0x3c, 0x0c, 0xb4, 0x79, 0x97, 0x25, + 0x63, 0x89, 0xef, 0xe3, 0x6e, 0x75, 0xe2, 0xe9, 0x18, 0x5f, 0xcf, 0x44, 0x30, 0xfb, 0x7b, 0xc5, + 0xa9, 0x82, 0xaa, 0x5b, 0x98, 0x9d, 0x4b, 0x93, 0x9f, 0xc2, 0xaf, 0x4e, 0xba, 0xa5, 0x0e, 0x6a, + 0x36, 0x91, 0x75, 0x41, 0x29, 0xda, 0x17, 0xff, 0x25, 0x8e, 0x4a, 0x64, 0x09, 0x18, 0x31, 0x69, + 0x28, 0x56, 0x85, 0x6d, 0xe0, 0x40, 0xff, 0xf8, 0xe3, 0xb2, 0xfe, 0x78, 0x6c, 0x3d, 0x1e, 0x4f, + 0x3f, 0xb2, 0xc7, 0x84, 0x17, 0x64, 0x1e, 0xa7, 0xb7, 0xda, 0xee, 0x25, 0x18, 0x5e, 0x19, 0x69, + 0xd0, 0xd0, 0x1b, 0xec, 0x4d, 0x04, 0x1d, 0xd1, 0xfb, 0x84, 0x8c, 0xe5, 0x36, 0x2c, 0xf4, 0x72, + 0xda, 0xaf, 0xe6, 0x9f, 0x16, 0x25, 0x87, 0x9f, 0xcc, 0xfc, 0xa5, 0xb8, 0x69, 0x2d, 0xba, 0xbd, + 0x44, 0xb5, 0x8d, 0xb3, 0xc0, 0xc0, 0x4e, 0x29, 0x74, 0x3a, 0xc4, 0xed, 0x64, 0x05, 0xe3, 0x49, + 0x9a, 0x85, 0xda, 0x4f, 0xa4, 0x79, 0xaf, 0x5e, 0xf5, 0x3b, 0x42, 0xd5, 0x3b, 0xe4, 0xf0, 0xeb, + 0x7c, 0xc2, 0x5b, 0xcc, 0xec, 0xe0, 0xb7, 0x43, 0xc1, 0xd9, 0x02, 0xf1, 0x81, 0x0d, 0x8f, 0x85, + 0xe7, 0x0f, 0xf6, 0x7b, 0x5b, 0x17, 0x75, 0xfe, 0x09, 0x2c, 0x90, 0x47, 0x09, 0x3a, 0x36, 0xcb, + 0x3a, 0x63, 0x71, 0xe7, 0x1e, 0xab, 0xc7, 0x0b, 0x15, 0xc5, 0x11, 0xe8, 0x56, 0x6d, 0x40, 0x7e, + 0x6e, 0xf5, 0xa4, 0x7b, 0x94, 0x2e, 0x24, 0x17, 0xc3, 0x9b, 0x04, 0xf4, 0x78, 0x82, 0x01, 0x63, + 0xb7, 0xf9, 0xf5, 0x6c, 0xf2, 0x09, 0x47, 0x21, 0xdd, 0x6a, 0x16, 0x43, 0x11, 0x8c, 0x23, 0xa1, + 0x47, 0xf0, 0x4f, 0x81, 0xe3, 0x2c, 0x2e, 0x4e, 0x41, 0x25, 0x60, 0xcb, 0xf8, 0xbe, 0xcf, 0x1c, + 0x0a, 0x32, 0xe8, 0x41, 0x77, 0x56, 0xca, 0x90, 0x62, 0xa0, 0x67, 0x7e, 0x4f, 0xe3, 0xd4, 0x1a, + 0xef, 0xe7, 0x43, 0x42, 0xb0, 0xc5, 0x71, 0x2e, 0x46, 0x78, 0x71, 0x5a, 0x1f, 0xe2, 0x08, 0xd7, + 0x79, 0x90, 0x9f, 0x88, 0xab, 0x00, 0x17, 0xc5, 0xe9, 0x25, 0x4c, 0xcf, 0xd6, 0xdd, 0x01, 0x48, + 0x12, 0x42, 0xd5, 0x93, 0xf3, 0x7a, 0xd2, 0x7d, 0x3d, 0x09, 0x23, 0x02, 0x61, 0x80, 0x98, 0x02, + 0x16, 0x59, 0x54, 0xbc, 0x0f, 0x40, 0x91, 0x22, 0xaf, 0xad, 0xb5, 0x10, 0x9d, 0x2e, 0x49, 0x44, + 0x1b, 0x65, 0xc9, 0x43, 0xfa, 0x89, 0xa6, 0x9f, 0x6b, 0xd5, 0x63, 0x07, 0x1e, 0xac, 0x49, 0xa8, + 0x8a, 0x38, 0xd0, 0x75, 0x41, 0xa8, 0x9a, 0x94, 0x8a, 0x55, 0xfa, 0x3d, 0xb5, 0x9e, 0x41, 0xe3, + 0x60, 0x9a, 0x6f, 0x18, 0x81, 0x14, 0x6a, 0x01, 0x36, 0x87, 0xf1, 0x1f, 0x07, 0x2e, 0xc0, 0x41, + 0x71, 0x5b, 0xbd, 0x83, 0xd6, 0x8c, 0xc3, 0x80, 0x43, 0x1d, 0x48, 0xa8, 0x29, 0x8e, 0x34, 0x20, + 0x62, 0xee, 0xd4, 0xfc, 0x48, 0x54, 0x7d, 0x2a, 0x02, 0x1e, 0x9f, 0x29, 0x45, 0xb2, 0x53, 0xf1, + 0x22, 0x29, 0xd7, 0xa2, 0xcd, 0xa3, 0xf4, 0x3c, 0x81, 0x94, 0x4b, 0xae, 0x45, 0xbc, 0x6d, 0xe6, + 0xe4, 0xdb, 0xdb, 0x26, 0xdf, 0xa3, 0x57, 0x13, 0x71, 0xfe, 0x8f, 0xbe, 0x71, 0x33, 0x31, 0xae, + 0x9c, 0xf8, 0x9c, 0x35, 0xd4, 0x2c, 0x13, 0x52, 0x20, 0x7b, 0x05, 0x55, 0x19, 0xe1, 0x8a, 0xed, + 0xc4, 0xd3, 0x37, 0x79, 0x8b, 0xaf, 0xd1, 0xf9, 0xd5, 0xb7, 0xda, 0x70, 0x9c, 0x4d, 0x4e, 0xba, + 0x76, 0x9e, 0xd7, 0xe8, 0xf6, 0x5c, 0xfa, 0xb6, 0xc6, 0x21, 0x34, 0x56, 0xad, 0x87, 0xb9, 0x9f, + 0xbf, 0xd5, 0xcb, 0x4f, 0xc1, 0xdd, 0xc2, 0xb5, 0x3c, 0xae, 0x03, 0xc5, 0x6e, 0xd1, 0x9c, 0x76, + 0x44, 0xc3, 0x0e, 0x7e, 0xcb, 0x6a, 0x01, 0xe6, 0x96, 0xe5, 0x05, 0x35, 0xe0, 0x58, 0x0b, 0x04, + 0x29, 0x8b, 0x93, 0x3e, 0xbb, 0xd0, 0xd2, 0x86, 0xde, 0x89, 0x91, 0x69, 0x95, 0xdf, 0x74, 0x2c, + 0xf1, 0xf8, 0x48, 0xe0, 0xfe, 0x7d, 0xa4, 0x70, 0x74, 0xab, 0x2a, 0x9f, 0xa1, 0x8e, 0x9f, 0x11, + 0x87, 0x41, 0x77, 0x7e, 0x33, 0x3a, 0xaf, 0xe6, 0xdd, 0x8a, 0x61, 0x73, 0xc2, 0x10, 0x81, 0xa9, + 0x70, 0x8c, 0x24, 0x07, 0xa2, 0x1d, 0xd4, 0x42, 0xe3, 0xc2, 0xfe, 0x07, 0x36, 0xbb, 0x84, 0x0c, + 0x24, 0xd0, 0x8b, 0x50, 0x65, 0xe1, 0x7d, 0xb6, 0xd2, 0x57, 0x10, 0x2f, 0x85, 0x83, 0xd9, 0x28, + 0xc8, 0x6e, 0x60, 0xd4, 0x4d, 0xe3, 0xd0, 0x5c, 0x76, 0x2a, 0x5e, 0x4b, 0x80, 0x46, 0x6f, 0x9e, + 0x11, 0xd5, 0xab, 0xbf, 0x00, 0x2b, 0x71, 0x31, 0x8d, 0x60, 0x15, 0x86, 0xff, 0xee, 0x23, 0x74, + 0xe1, 0xc3, 0xe6, 0x98, 0xdf, 0x29, 0x78, 0x19, 0xda, 0xb4, 0x91, 0x7b, 0x88, 0x0f, 0x77, 0x9d, + 0x2f, 0x92, 0x83, 0x29, 0x7f, 0xed, 0xe8, 0x1b, 0xe7, 0x3d, 0x7f, 0xf9, 0x00, 0x6d, 0x9e, 0x74, + 0x29, 0x71, 0x38, 0x2a, 0xbb, 0xf0, 0xc1, 0x3e, 0x49, 0xe4, 0x1f, 0x63, 0x16, 0x42, 0x38, 0x48, + 0x5c, 0x9a, 0xb6, 0x4c, 0x04, 0x8e, 0x29, 0x36, 0x19, 0x86, 0x5f, 0xb8, 0x1c, 0x35, 0xba, 0xdd, + 0xe4, 0x15, 0x72, 0xde, 0xc2, 0xd0, 0x0d, 0x7d, 0x9b, 0x0a, 0x44, 0xe3, 0xff, 0xce, 0x03, 0x9b, + 0x07, 0x44, 0x3f, 0xb8, 0x09, 0x6c, 0x12, 0x10, 0x83, 0x18, 0x2c, 0x14, 0x08, 0x8c, 0x76, 0x5e, + 0xc4, 0x34, 0x79, 0x3c, 0x27, 0x84, 0x23, 0x86, 0x37, 0xd6, 0xab, 0xb9, 0x25, 0x1d, 0x85, 0xbb, + 0x40, 0x8d, 0xe4, 0xbd, 0xd8, 0xcf, 0xc4, 0x62, 0xb3, 0x07, 0x6b, 0x65, 0x95, 0x9f, 0xcb, 0x6c, + 0xbe, 0x51, 0xd4, 0x22, 0x50, 0xc8, 0x58, 0x4b, 0x52, 0x9a, 0xb4, 0x6c, 0xb2, 0x1e, 0xfa, 0xe7, + 0xc8, 0xf7, 0xfa, 0x82, 0xa8, 0xca, 0x12, 0xfb, 0x2e, 0x09, 0x86, 0x56, 0x4a, 0x39, 0xac, 0xe4, + 0xe1, 0x7b, 0x90, 0xd7, 0xd5, 0x94, 0x37, 0xe3, 0x5f, 0xb5, 0x28, 0xa9, 0x05, 0x06, 0x6b, 0x70, + 0x58, 0x79, 0xf2, 0xcf, 0x3a, 0x39, 0x87, 0x8d, 0xc7, 0x6c, 0x9e, 0x1f, 0xbc, 0x16, 0x12, 0x94, + 0xf7, 0x1f, 0xf2, 0x1f, 0x6f, 0x46, 0x5d, 0xd0, 0xb4, 0x14, 0x34, 0x0d, 0xb4, 0x4c, 0xe9, 0x9a, + 0x9b, 0x6b, 0x96, 0x3c, 0xaa, 0xeb, 0x56, 0xe7, 0xb3, 0x51, 0x4a, 0x8d, 0xdd, 0x48, 0x7f, 0xe6, + 0xb5, 0x50, 0xaa, 0xfd, 0x69, 0x38, 0x1c, 0x76, 0xf6, 0x7b, 0x2f, 0xbf, 0x0e, 0x3a, 0xc8, 0x19, + 0xea, 0xed, 0xc1, 0xb8, 0xde, 0xf3, 0x02, 0xfc, 0xf7, 0x46, 0xfe, 0x3b, 0x82, 0x25, 0x1c, 0xa7, + 0xa3, 0x15, 0x12, 0x0e, 0x9b, 0xe4, 0xfb, 0xf9, 0x0f, 0x91, 0x2f, 0x0c, 0xc3, 0xcd, 0xe4, 0x63, + 0x25, 0xff, 0x4d, 0x37, 0x2c, 0xef, 0xad, 0x8f, 0x49, 0x0a, 0xd6, 0x89, 0x19, 0x25, 0xa0, 0x26, + 0xe2, 0x7e, 0xad, 0xbf, 0xe8, 0xc1, 0x96, 0x4e, 0x1c, 0x9c, 0x7d, 0x4c, 0x3e, 0x21, 0xa6, 0xfd, + 0xb3, 0x67, 0x08, 0xdb, 0x4f, 0x18, 0x73, 0x7c, 0xea, 0x94, 0x17, 0x72, 0x93, 0xc6, 0x2f, 0xb4, + 0xdf, 0xde, 0x7c, 0xa1, 0x33, 0xe1, 0x1c, 0x1a, 0x5c, 0x65, 0x65, 0xa8, 0x94, 0x71, 0x7f, 0xb0, + 0xb1, 0xf2, 0x8d, 0x8f, 0x08, 0x9a, 0xc2, 0x40, 0xd6, 0x43, 0xde, 0xfb, 0x13, 0x62, 0xd5, 0x72, + 0x00, 0x3f, 0x18, 0x0a, 0xd2, 0x60, 0x26, 0xe7, 0xae, 0x79, 0x71, 0x32, 0x19, 0x0e, 0xc3, 0xd0, + 0x33, 0xe0, 0x87, 0x2b, 0x86, 0x59, 0x2c, 0x70, 0x0c, 0x2b, 0x1f, 0x69, 0xdc, 0xcc, 0xa4, 0x72, + 0xe8, 0xec, 0x40, 0xd5, 0xb4, 0x23, 0x97, 0x4f, 0xc4, 0xe1, 0xd2, 0x4a, 0x81, 0xa7, 0x02, 0x32, + 0xb6, 0x0b, 0xf6, 0x5d, 0xd6, 0xf8, 0x81, 0x5d, 0x6b, 0xe5, 0x47, 0x4e, 0xd2, 0xeb, 0xe9, 0x10, + 0x96, 0xb7, 0x14, 0xda, 0xa3, 0xbc, 0x87, 0x8e, 0x84, 0xff, 0xc2, 0xd6, 0x29, 0xfb, 0x4b, 0x98, + 0x8a, 0x9c, 0xde, 0x80, 0xbe, 0x58, 0x2d, 0xc8, 0xd4, 0x52, 0xa5, 0xbf, 0x1a, 0x67, 0x86, 0x95, + 0xcf, 0xf9, 0xda, 0x7c, 0x4a, 0xaf, 0x71, 0x0a, 0x70, 0xf2, 0xf9, 0x79, 0x6d, 0x3e, 0xf7, 0x5e, + 0xe3, 0x9c, 0xe1, 0xe4, 0xf3, 0xb7, 0x7a, 0x3e, 0xdd, 0x85, 0xd0, 0xf8, 0xa8, 0x69, 0x64, 0x2c, + 0x9d, 0xef, 0x71, 0x30, 0x5b, 0x5a, 0xea, 0xac, 0x0b, 0x41, 0x15, 0x37, 0xad, 0x0a, 0x30, 0xe5, + 0x37, 0xad, 0x09, 0x7d, 0xa3, 0x2c, 0x92, 0x8a, 0x58, 0x45, 0xf1, 0x60, 0x28, 0xac, 0x7f, 0x25, + 0xa2, 0x21, 0x9a, 0xa9, 0x93, 0x5d, 0xdd, 0x9c, 0xc7, 0x49, 0xe0, 0xa6, 0xdd, 0x20, 0x0e, 0xbb, + 0x93, 0x36, 0x8a, 0x4b, 0x85, 0xea, 0x2d, 0x1f, 0x39, 0x55, 0xfc, 0xc5, 0x8e, 0x8f, 0xd4, 0xc6, + 0x40, 0xd0, 0x6c, 0xf9, 0x54, 0xb5, 0x31, 0x92, 0xa8, 0x3a, 0x8b, 0x52, 0xe4, 0x0b, 0xb6, 0xf2, + 0x25, 0x8e, 0xc7, 0x4b, 0x8e, 0x8c, 0x45, 0xbb, 0x85, 0x45, 0x47, 0xdd, 0x48, 0x9a, 0x0c, 0xab, + 0x8e, 0x53, 0x26, 0x2c, 0x37, 0x21, 0xda, 0xa4, 0x84, 0x38, 0x07, 0x3d, 0xf4, 0x97, 0x14, 0x66, + 0xcd, 0x2e, 0x02, 0x43, 0xaf, 0x55, 0x19, 0xa2, 0x22, 0x3d, 0xdc, 0xc1, 0x4f, 0x39, 0x22, 0x7a, + 0xa3, 0x57, 0x4d, 0x9b, 0x52, 0xbe, 0x62, 0xd3, 0x73, 0x2d, 0x85, 0x21, 0xf4, 0x42, 0xa9, 0xb0, + 0x4c, 0x67, 0x07, 0xf3, 0x28, 0x0f, 0x86, 0xd0, 0x09, 0x99, 0x49, 0xba, 0xa1, 0xa4, 0x51, 0x9c, + 0x9a, 0xa4, 0x11, 0x25, 0x3d, 0xc0, 0xe2, 0xe6, 0x34, 0x18, 0x15, 0xa2, 0x4e, 0x8c, 0xa1, 0x90, + 0xe8, 0xe2, 0xe2, 0x32, 0xa0, 0xff, 0x5d, 0x2e, 0x97, 0xf2, 0x44, 0x15, 0xa1, 0xda, 0xe9, 0xed, + 0xf8, 0x42, 0x34, 0x4e, 0x7e, 0xe9, 0x9e, 0x98, 0x5a, 0x5e, 0xd4, 0x61, 0x8a, 0x21, 0xb9, 0xcd, + 0xbe, 0xfd, 0xf1, 0xb8, 0xe2, 0x0e, 0x66, 0xdc, 0x0f, 0x10, 0xe6, 0xeb, 0x98, 0xdb, 0x7a, 0x48, + 0xb8, 0xf0, 0x9f, 0x38, 0x3b, 0x48, 0x02, 0x0e, 0xfc, 0xad, 0xc8, 0x3c, 0x9e, 0x3f, 0xbf, 0x99, + 0x55, 0xd3, 0xbb, 0x11, 0x1e, 0x21, 0x3e, 0xff, 0x7e, 0x36, 0x1f, 0xe7, 0x79, 0xfe, 0x71, 0x96, + 0x3c, 0x47, 0xee, 0x96, 0xe7, 0x0f, 0xb3, 0x8f, 0x33, 0xdc, 0x4e, 0xbb, 0xe0, 0xc4, 0x0a, 0x95, + 0xa8, 0xdb, 0x9d, 0x8e, 0xf7, 0xe2, 0xde, 0x2b, 0x7f, 0x70, 0x84, 0x20, 0x8e, 0x5d, 0x2c, 0xd6, + 0x0f, 0xa6, 0xe3, 0xc1, 0xa1, 0xfa, 0x79, 0x14, 0xe2, 0x54, 0xff, 0xe2, 0x45, 0x1c, 0x4f, 0xc7, + 0x94, 0xb2, 0x17, 0x1f, 0x61, 0x4a, 0xf8, 0x8a, 0xa5, 0x40, 0x06, 0xca, 0xba, 0x41, 0x04, 0x1d, + 0xdf, 0xda, 0x37, 0x5c, 0x4d, 0x4b, 0x0c, 0x56, 0x9b, 0x8e, 0x97, 0x41, 0x07, 0x91, 0x87, 0x82, + 0xce, 0xcb, 0xf0, 0x6b, 0x64, 0x35, 0x0c, 0xbe, 0xeb, 0x29, 0x78, 0xe2, 0x6c, 0x32, 0xb7, 0x80, + 0x43, 0x21, 0xe1, 0x47, 0x72, 0x28, 0x0a, 0x7f, 0x27, 0x3e, 0xb7, 0x26, 0x00, 0xda, 0xca, 0x20, + 0x85, 0xb1, 0xdf, 0x57, 0x04, 0x31, 0xed, 0x7b, 0x15, 0x1e, 0x93, 0x84, 0x28, 0x92, 0x93, 0xd9, + 0xfc, 0xb6, 0xf3, 0x63, 0x32, 0xca, 0x73, 0xb9, 0x6d, 0xec, 0x8a, 0xf2, 0xc1, 0x4a, 0xad, 0x11, + 0x9c, 0xc0, 0x56, 0x3c, 0xf6, 0x9e, 0x0b, 0xb7, 0xc4, 0x52, 0x89, 0x7a, 0x6e, 0x83, 0x9c, 0xc2, + 0xc2, 0x5a, 0xda, 0xf3, 0xd3, 0xbc, 0x14, 0xb2, 0x29, 0xd9, 0xcf, 0xfd, 0xcf, 0x94, 0x52, 0x14, + 0x6c, 0x84, 0x3c, 0x27, 0x42, 0x2a, 0x25, 0x43, 0xd0, 0x92, 0xdd, 0xc4, 0xcd, 0x8e, 0xda, 0x52, + 0x1f, 0x96, 0x7a, 0x56, 0x50, 0xcb, 0x42, 0x9c, 0x89, 0x87, 0xe2, 0x38, 0x54, 0x81, 0x70, 0x50, + 0x20, 0xc3, 0x4e, 0xb8, 0xbc, 0x44, 0x40, 0xc0, 0xbf, 0xab, 0x93, 0x21, 0x71, 0xe5, 0x3e, 0x2f, + 0xe2, 0xdb, 0x87, 0x80, 0x25, 0xc0, 0xf7, 0xbf, 0xd2, 0xd6, 0x9d, 0xbd, 0xf2, 0x5b, 0x7c, 0x3b, + 0xe5, 0xd8, 0xdf, 0xbd, 0x7e, 0x22, 0xc3, 0x65, 0x12, 0x27, 0x5c, 0x46, 0x1e, 0xc3, 0xb6, 0xc7, + 0xe9, 0x90, 0xa7, 0x41, 0x9c, 0x6a, 0x94, 0x6f, 0x60, 0xf2, 0xe1, 0x50, 0xb2, 0x05, 0x4b, 0xb7, + 0x01, 0xe8, 0x89, 0x64, 0x07, 0xb6, 0xf0, 0x73, 0xb0, 0xe0, 0xf0, 0xe2, 0x3f, 0xa2, 0x4f, 0x76, + 0xbd, 0x87, 0x94, 0xc0, 0xf2, 0x1f, 0x3d, 0x89, 0x8a, 0x80, 0x06, 0x8c, 0xd8, 0xe1, 0x33, 0x2f, + 0x9f, 0xe0, 0x8a, 0x25, 0xbc, 0xcc, 0x7b, 0x8a, 0xfc, 0xc6, 0x7f, 0x54, 0x17, 0xf2, 0x12, 0xe1, + 0x49, 0x21, 0x3a, 0x07, 0x26, 0xb0, 0xa4, 0xcb, 0x8d, 0x9d, 0xa5, 0xf5, 0xde, 0x62, 0x19, 0xdc, + 0xe8, 0x53, 0x22, 0x51, 0x89, 0x30, 0x90, 0x88, 0x91, 0x4c, 0xcc, 0xb2, 0x26, 0x66, 0xe0, 0x80, + 0xb1, 0x2e, 0x8a, 0x88, 0x67, 0x1c, 0xdc, 0x73, 0x70, 0x45, 0x24, 0xd4, 0xae, 0x6f, 0x1f, 0x03, + 0x61, 0xfe, 0x29, 0x37, 0x4e, 0x12, 0x7c, 0xf7, 0x9d, 0x75, 0x42, 0xe3, 0x0a, 0x46, 0x3e, 0x9b, + 0xcd, 0x78, 0xac, 0x41, 0x94, 0xc7, 0x93, 0x82, 0x4c, 0xe4, 0xbd, 0xc4, 0xa6, 0xb3, 0xfe, 0x02, + 0xe0, 0xd6, 0x66, 0x26, 0xec, 0x95, 0x30, 0xac, 0x25, 0xba, 0xa6, 0x78, 0x83, 0xdb, 0x47, 0x06, + 0xd0, 0xfc, 0x56, 0xab, 0x41, 0xb7, 0x41, 0x1e, 0xc7, 0xe5, 0xc1, 0xed, 0x89, 0xeb, 0xe0, 0xaa, + 0xb5, 0xc6, 0x5e, 0x0f, 0xda, 0x63, 0x19, 0xc0, 0x36, 0x37, 0x42, 0xa0, 0xe0, 0x0d, 0x79, 0xb2, + 0x11, 0x1a, 0xf9, 0xef, 0x82, 0xf8, 0x5d, 0x20, 0x6f, 0x68, 0xde, 0xd4, 0x15, 0x54, 0xbe, 0x35, + 0x28, 0xe7, 0x6d, 0x39, 0x7b, 0x61, 0x5a, 0xca, 0x62, 0xef, 0x10, 0x99, 0xe9, 0xe9, 0xc4, 0xc7, + 0x66, 0x5a, 0x23, 0xa8, 0x4e, 0x9e, 0xf8, 0xdf, 0xff, 0x83, 0xcc, 0x66, 0x91, 0x49, 0x4a, 0xf0, + 0x9d, 0x20, 0x6b, 0xe0, 0x51, 0xad, 0x31, 0x9a, 0x95, 0x09, 0x62, 0xfa, 0x12, 0xd0, 0x8a, 0x1e, + 0x8c, 0x49, 0xfb, 0x96, 0x4a, 0x5f, 0xdf, 0x47, 0xd7, 0xbd, 0xb4, 0x55, 0xdc, 0xb0, 0x46, 0x7d, + 0x81, 0x1f, 0x9b, 0xa8, 0x5a, 0xd1, 0x36, 0x34, 0xad, 0xcc, 0x62, 0xaf, 0x20, 0xee, 0xb7, 0x18, + 0xef, 0x14, 0x86, 0x51, 0xaf, 0x3f, 0x3b, 0xd6, 0xc8, 0x24, 0x33, 0x85, 0x58, 0x9f, 0xc5, 0xe5, + 0xc5, 0xec, 0x32, 0xd8, 0x94, 0xe9, 0x0e, 0x76, 0xf1, 0x3f, 0x15, 0x45, 0x32, 0x7f, 0x3d, 0x44, + 0xb8, 0xe8, 0x7e, 0xe6, 0x48, 0x6f, 0x68, 0xe1, 0x64, 0x15, 0xec, 0xf7, 0x91, 0x26, 0x4e, 0x05, + 0x5f, 0x82, 0x1a, 0x33, 0x66, 0xb3, 0x34, 0x19, 0x66, 0x02, 0xf2, 0xb9, 0x11, 0xec, 0x5b, 0xcc, + 0x58, 0x09, 0x05, 0x4c, 0xce, 0xf2, 0xbb, 0xd2, 0x6e, 0x42, 0xb5, 0x73, 0x41, 0xf8, 0x7e, 0x1e, + 0x6e, 0x89, 0x99, 0xa0, 0x2e, 0xbe, 0xc5, 0xad, 0x5e, 0x17, 0xf7, 0x3b, 0xe2, 0x2f, 0x8f, 0x8e, + 0x83, 0x71, 0xe7, 0x01, 0x7a, 0x46, 0x91, 0xbf, 0xe8, 0x39, 0x14, 0xdc, 0xde, 0x32, 0xe7, 0x03, + 0x44, 0xa1, 0x10, 0x9a, 0x38, 0x4b, 0x2b, 0x62, 0x20, 0x68, 0x68, 0x6e, 0x71, 0xac, 0x4c, 0x51, + 0xf3, 0xea, 0xba, 0xdc, 0x25, 0x05, 0x34, 0xcf, 0xdf, 0x0e, 0xe5, 0x10, 0x48, 0x58, 0x84, 0xa2, + 0x65, 0xb6, 0x53, 0xb6, 0x3f, 0x3c, 0x2a, 0x12, 0x11, 0x87, 0x1f, 0x5e, 0x0e, 0x02, 0x15, 0x96, + 0xac, 0x36, 0x7e, 0xe1, 0xa5, 0xae, 0xab, 0xce, 0xf8, 0x24, 0xd1, 0x56, 0xee, 0x24, 0xad, 0xa2, + 0xad, 0xdb, 0xe0, 0x4b, 0x6b, 0x89, 0x08, 0xcf, 0x95, 0x0e, 0x8f, 0xe0, 0x1c, 0xd4, 0xbc, 0xba, + 0xf9, 0xfc, 0x76, 0x58, 0x7d, 0x3f, 0x37, 0xe6, 0x74, 0x80, 0xe4, 0x7b, 0x06, 0x2a, 0x07, 0xdb, + 0xc0, 0xbe, 0xfb, 0x9b, 0xe0, 0xdd, 0x06, 0x5f, 0x69, 0x29, 0xfd, 0xea, 0x8b, 0x8d, 0x6e, 0xe6, + 0x13, 0x54, 0x36, 0x59, 0xc9, 0x94, 0x1e, 0x5f, 0x64, 0x97, 0x18, 0x0e, 0xd6, 0xad, 0xc4, 0x7b, + 0x32, 0x53, 0xff, 0xb8, 0xf4, 0x35, 0x56, 0x11, 0x98, 0x8b, 0xe9, 0x71, 0xb9, 0x5f, 0xf5, 0x53, + 0x50, 0x7d, 0xf1, 0x16, 0x2d, 0xaf, 0x89, 0xb8, 0x42, 0xb1, 0xdf, 0x13, 0x54, 0x42, 0x35, 0x21, + 0x18, 0x5c, 0xb8, 0xbf, 0xc8, 0x2c, 0xfc, 0x70, 0x5b, 0x9c, 0x6a, 0x8e, 0xd2, 0x30, 0xb0, 0x70, + 0x2e, 0x14, 0x43, 0x6a, 0xb1, 0x65, 0x73, 0xe5, 0x62, 0x2f, 0x4a, 0xf1, 0xf8, 0x05, 0x09, 0x94, + 0xd2, 0x34, 0xaa, 0x0e, 0x47, 0x64, 0x1b, 0x14, 0x11, 0xae, 0x2c, 0x60, 0x7d, 0x12, 0x16, 0xab, + 0x9c, 0xcb, 0x6d, 0x9b, 0xdc, 0xf2, 0x15, 0x92, 0x15, 0x52, 0x6f, 0x64, 0x70, 0x76, 0x1a, 0x60, + 0x8b, 0x5a, 0x3e, 0xe3, 0xb2, 0xd1, 0x67, 0xcc, 0xa9, 0x4f, 0xa1, 0xe3, 0x2b, 0x44, 0xd3, 0xaf, + 0xbf, 0xa5, 0xef, 0x08, 0x08, 0x4b, 0xa2, 0x21, 0x42, 0xda, 0xbc, 0x11, 0x24, 0x03, 0xea, 0x4e, + 0xd5, 0xd9, 0x28, 0xb2, 0xfb, 0x95, 0x89, 0x0f, 0x32, 0xdf, 0x21, 0x7c, 0xa8, 0x3e, 0xc8, 0xce, + 0xfc, 0x13, 0x75, 0x2d, 0x22, 0xbb, 0x8c, 0x0b, 0xf9, 0x87, 0x3e, 0x94, 0x08, 0x8c, 0x0e, 0xea, + 0xb7, 0x08, 0x5a, 0x17, 0xba, 0x50, 0x27, 0x48, 0xc4, 0x13, 0xdf, 0xdc, 0xb0, 0xd0, 0x69, 0xb1, + 0xc1, 0x13, 0xca, 0x08, 0x6c, 0x84, 0xbf, 0x41, 0x80, 0xef, 0x6e, 0x5e, 0x08, 0xff, 0x6b, 0x65, + 0x84, 0x08, 0x2f, 0xea, 0xf6, 0x83, 0xe8, 0x21, 0x7e, 0x26, 0x28, 0x2e, 0x4f, 0x64, 0xc4, 0xcf, + 0xc5, 0xae, 0x4b, 0x64, 0x8a, 0x87, 0xa5, 0xf5, 0x0b, 0x45, 0x56, 0x5a, 0x0c, 0x8b, 0xd9, 0xcf, + 0xb0, 0x83, 0xc9, 0x7c, 0x1d, 0x2f, 0x9f, 0xf1, 0xe3, 0xda, 0x38, 0x45, 0x57, 0x7d, 0x5a, 0x3f, + 0xb5, 0x94, 0xcc, 0x58, 0xe2, 0x03, 0xe7, 0x48, 0x5b, 0x40, 0xd9, 0x53, 0x9c, 0x7e, 0xd6, 0x7a, + 0x32, 0x52, 0xbb, 0x52, 0x22, 0x40, 0x20, 0x18, 0x09, 0x70, 0x4b, 0x0d, 0x14, 0x13, 0xf8, 0xba, + 0xc3, 0x96, 0x65, 0xf5, 0x19, 0x97, 0x43, 0x98, 0x4f, 0x3d, 0xa3, 0x19, 0xd1, 0xf8, 0xd4, 0x6b, + 0x81, 0x39, 0xa3, 0xf4, 0x6e, 0xde, 0x6d, 0x24, 0x01, 0xab, 0x3f, 0xe1, 0xb1, 0x32, 0xe2, 0xe9, + 0x52, 0x20, 0x00, 0xfc, 0xe3, 0x75, 0x9d, 0x92, 0x46, 0xe9, 0x2d, 0xf2, 0x98, 0x06, 0xef, 0xe3, + 0x17, 0x34, 0x0a, 0x67, 0x24, 0x09, 0x98, 0x12, 0x8f, 0xa1, 0x24, 0x53, 0xa0, 0xca, 0x9d, 0xd3, + 0xb1, 0xa1, 0x8a, 0xac, 0x67, 0xd2, 0x0b, 0x9a, 0x81, 0x85, 0xde, 0x24, 0x89, 0xab, 0x83, 0xd7, + 0x1f, 0xf2, 0x3b, 0xe8, 0xa5, 0xf2, 0xc4, 0x4d, 0x40, 0xc2, 0x8f, 0x84, 0xd9, 0x5a, 0xc3, 0xf2, + 0x74, 0x9e, 0x13, 0x9c, 0x97, 0xb2, 0xb6, 0xc4, 0x84, 0x81, 0x74, 0x7a, 0x09, 0x27, 0xd1, 0x23, + 0x23, 0x85, 0x98, 0xf1, 0x70, 0xcf, 0x52, 0xfe, 0x02, 0x1b, 0xe7, 0xae, 0x07, 0xdf, 0xea, 0x83, + 0x6d, 0xd8, 0xf1, 0x28, 0x8e, 0x42, 0xbe, 0xff, 0x18, 0x7f, 0x54, 0xeb, 0x58, 0x31, 0x46, 0xab, + 0x4e, 0xcd, 0x48, 0x30, 0x7b, 0x0d, 0xe7, 0x37, 0x09, 0x1b, 0xc6, 0x34, 0xed, 0xcb, 0x44, 0x7b, + 0xc5, 0xd5, 0xaf, 0xf4, 0xf9, 0x58, 0x57, 0x17, 0xa9, 0xc1, 0xde, 0xe3, 0xd5, 0xa8, 0x9c, 0xdf, + 0x25, 0xfc, 0xee, 0x42, 0x63, 0xaa, 0xa6, 0x82, 0xdc, 0xd0, 0x11, 0xfd, 0xab, 0x6e, 0xd8, 0x9b, + 0xb7, 0x7f, 0x79, 0xfd, 0xbe, 0xeb, 0x55, 0xc3, 0xd1, 0x58, 0x58, 0xdb, 0x9e, 0x7f, 0x21, 0x7a, + 0xe1, 0x52, 0x6a, 0xd6, 0x87, 0xbc, 0x08, 0xfe, 0xf1, 0xba, 0xe9, 0x22, 0x87, 0x54, 0xaf, 0x9d, + 0xae, 0xea, 0x9b, 0xd0, 0xb7, 0xd0, 0xc8, 0x48, 0xf7, 0x45, 0xfd, 0xc5, 0x1b, 0xcf, 0x9e, 0x39, + 0xed, 0x50, 0x17, 0x2b, 0xae, 0xf6, 0x1f, 0x91, 0xf7, 0x90, 0x4e, 0x8c, 0xc8, 0x06, 0x2f, 0x11, + 0x28, 0x77, 0xaf, 0x9b, 0xfd, 0xb9, 0x7c, 0xfe, 0xf0, 0x0b, 0x98, 0xed, 0xf9, 0x0f, 0xb3, 0xc7, + 0xe4, 0xba, 0x7b, 0xe8, 0xf7, 0xc3, 0x1d, 0x9c, 0x63, 0xbb, 0x42, 0xdc, 0x41, 0x48, 0x30, 0x47, + 0xbe, 0x4e, 0x38, 0x26, 0x8e, 0x55, 0x4c, 0x48, 0x07, 0x07, 0xbd, 0x43, 0x30, 0x5b, 0x36, 0xa9, + 0x2a, 0x6c, 0xda, 0x44, 0xcb, 0x40, 0x3e, 0x50, 0x6b, 0x61, 0x75, 0x51, 0x9c, 0x52, 0x0e, 0xe6, + 0x5a, 0xf5, 0xa9, 0xeb, 0xed, 0xef, 0xcf, 0xbc, 0x40, 0x7c, 0xb7, 0x1f, 0x67, 0x28, 0x5c, 0x6f, + 0x3f, 0x55, 0xee, 0xb2, 0x21, 0x1a, 0x5e, 0x1f, 0x4b, 0x29, 0x02, 0x58, 0x11, 0x6d, 0x79, 0x4c, + 0xbc, 0x20, 0xf5, 0x37, 0x6d, 0xd7, 0x1e, 0x64, 0x24, 0x47, 0x04, 0xb7, 0xa4, 0x0d, 0x3d, 0xe8, + 0xa2, 0x01, 0x92, 0xd9, 0xb1, 0x40, 0xd5, 0x5e, 0x2f, 0xbb, 0x1e, 0xd3, 0xd9, 0xd3, 0xc3, 0x2f, + 0x83, 0x6f, 0xbf, 0xfb, 0xf6, 0xe9, 0x09, 0xfe, 0x7d, 0x79, 0xf4, 0xdd, 0xb3, 0x67, 0x0f, 0xbf, + 0x1c, 0x7f, 0x7b, 0x18, 0xfa, 0xad, 0x24, 0xbb, 0x02, 0x8a, 0x7b, 0xf1, 0xf0, 0x8b, 0xa2, 0x80, + 0xa5, 0xc9, 0x8a, 0x10, 0x78, 0x39, 0x51, 0x69, 0x9f, 0x79, 0x33, 0xe8, 0x8a, 0x98, 0xec, 0x5a, + 0x81, 0x9e, 0xda, 0x2f, 0x5f, 0xe7, 0x29, 0x56, 0x1f, 0xeb, 0x27, 0xd9, 0xa6, 0x02, 0x95, 0x36, + 0x52, 0x4e, 0x6a, 0x9a, 0xd9, 0xac, 0xef, 0xe4, 0x9b, 0x02, 0xfe, 0xba, 0x0b, 0xed, 0xfe, 0xc2, + 0x7c, 0x56, 0x15, 0x26, 0x2b, 0xc9, 0x53, 0x40, 0x3a, 0x56, 0xc7, 0x0d, 0x97, 0xe9, 0x09, 0x85, + 0xc3, 0xa1, 0x59, 0x26, 0x94, 0xf1, 0xfb, 0x58, 0x6a, 0xe5, 0xf7, 0x41, 0xf3, 0xa6, 0xba, 0x18, + 0xdf, 0x7a, 0x81, 0x7c, 0xc5, 0x97, 0x7f, 0xc4, 0xfa, 0x37, 0x34, 0x5c, 0xef, 0xf0, 0x65, 0xa8, + 0x75, 0xfb, 0xe9, 0x09, 0xc9, 0x34, 0xba, 0x3a, 0x19, 0x5b, 0xfe, 0x81, 0xfe, 0xa6, 0xc6, 0x8e, + 0x59, 0xaa, 0xf8, 0x81, 0x43, 0x14, 0x1d, 0x73, 0xa0, 0x3c, 0xe2, 0x8a, 0xa0, 0xca, 0xf2, 0x44, + 0x16, 0xb5, 0xd3, 0x8b, 0x64, 0x69, 0x50, 0x88, 0x91, 0xdb, 0x88, 0xe0, 0x28, 0x9f, 0x5a, 0x4a, + 0x85, 0x3e, 0x9c, 0x81, 0xf4, 0x1c, 0xa0, 0x5b, 0x7c, 0x65, 0x21, 0xb5, 0xb3, 0x56, 0x17, 0x5a, + 0x23, 0x38, 0xc5, 0xe4, 0xab, 0x50, 0xa8, 0xbe, 0x69, 0x00, 0x4d, 0x01, 0xef, 0x9d, 0x78, 0x21, + 0xee, 0xc7, 0xef, 0xaa, 0xdc, 0xdb, 0xa2, 0xf7, 0xf4, 0x50, 0x10, 0xd7, 0x6e, 0x95, 0x1c, 0xe8, + 0xda, 0x83, 0xdc, 0x5e, 0xe0, 0x3f, 0x14, 0x3c, 0xfc, 0x10, 0xc3, 0x38, 0x67, 0xb3, 0x48, 0x02, + 0x93, 0xe2, 0x9b, 0x24, 0x29, 0x60, 0xcf, 0x78, 0x70, 0x70, 0xa0, 0x69, 0x4d, 0xa4, 0xbd, 0xa8, + 0xe6, 0x7e, 0xcd, 0xef, 0x0c, 0x2b, 0xe2, 0x74, 0x36, 0x81, 0x2d, 0xb7, 0xb8, 0x8d, 0x01, 0x1b, + 0x7a, 0x0a, 0xe5, 0x13, 0x7f, 0x95, 0xbe, 0xcf, 0x81, 0x69, 0x66, 0xa0, 0xd7, 0xbe, 0x7c, 0x82, + 0x37, 0xc1, 0x4f, 0x68, 0x96, 0x7f, 0x7a, 0xb2, 0xbd, 0x00, 0x49, 0xb0, 0x80, 0x54, 0x8a, 0xb9, + 0x08, 0x98, 0x34, 0x90, 0x16, 0xd0, 0x57, 0x7e, 0xd4, 0xf8, 0x3e, 0xdd, 0x48, 0xd7, 0x7e, 0xc6, + 0x5a, 0x35, 0x96, 0x62, 0x44, 0xb5, 0xce, 0x10, 0x99, 0x17, 0x80, 0x96, 0xcb, 0xc1, 0x06, 0xab, + 0x3e, 0xed, 0x4f, 0x70, 0xa2, 0x40, 0x66, 0x14, 0xf2, 0x64, 0xc2, 0xf7, 0x1e, 0x41, 0xe4, 0x07, + 0x68, 0x8b, 0x40, 0x3e, 0xf5, 0xb7, 0x6e, 0x73, 0x0c, 0x0f, 0xcc, 0x1f, 0x20, 0x33, 0x1c, 0xd6, + 0xed, 0x2f, 0x56, 0xb8, 0x42, 0x0a, 0x1c, 0xf3, 0x35, 0x6f, 0x52, 0x96, 0x39, 0xec, 0x91, 0x02, + 0x9c, 0xdf, 0xd7, 0xbc, 0x77, 0x57, 0xac, 0x7b, 0x8d, 0x0a, 0x06, 0x03, 0xd0, 0xbc, 0xf7, 0x1f, + 0xc7, 0xcf, 0x61, 0x0e, 0x9e, 0x15, 0xd5, 0xa0, 0x73, 0xfc, 0x1c, 0xb9, 0x78, 0xf0, 0xdf, 0x69, + 0x75, 0x9b, 0x0e, 0x3a, 0xff, 0x0b, 0xf4, 0x4b, 0xc6, 0xb0, 0xcd, 0x76, 0x01, 0x00 }; diff --git a/wled00/udp.cpp b/wled00/udp.cpp index bd86f293..cc0cb22b 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -334,9 +334,9 @@ void handleNotifications() if (version > 6) { strip.setColor(2, RGBW32(udpIn[20], udpIn[21], udpIn[22], udpIn[23])); // tertiary color if (version > 9 && version < 200 && udpIn[37] < 255) { // valid CCT/Kelvin value - uint8_t cct = udpIn[38]; + uint16_t cct = udpIn[38]; if (udpIn[37] > 0) { //Kelvin - cct = (((udpIn[37] << 8) + udpIn[38]) - 1900) >> 5; + cct |= (udpIn[37] << 8); } strip.setCCT(cct); } @@ -355,8 +355,10 @@ void handleNotifications() uint16_t ofs = 41 + i*udpIn[40]; //start of segment offset byte uint8_t id = udpIn[0 +ofs]; if (id > strip.getSegmentsNum()) break; + Segment& selseg = strip.getSegment(id); if (!selseg.isActive() || !selseg.isSelected()) continue; //do not apply to non selected segments + uint16_t startY = 0, start = (udpIn[1+ofs] << 8 | udpIn[2+ofs]); uint16_t stopY = 1, stop = (udpIn[3+ofs] << 8 | udpIn[4+ofs]); uint16_t offset = (udpIn[7+ofs] << 8 | udpIn[8+ofs]); @@ -365,7 +367,7 @@ void handleNotifications() continue; } //for (size_t j = 1; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, on, reversed; ignore selected - selseg.options = (selseg.options & 0xFF80) | (udpIn[9 +ofs] & 0x0E); // ignore selected, freeze, reset & transitional + selseg.options = (selseg.options & 0x0071U) | (udpIn[9 +ofs] & 0x0E); // ignore selected, freeze, reset & transitional selseg.setOpacity(udpIn[10+ofs]); if (applyEffects) { strip.setMode(id, udpIn[11+ofs]); @@ -382,7 +384,7 @@ void handleNotifications() if (version > 11) { // when applying synced options ignore selected as it may be used as indicator of which segments to sync // freeze, reset & transitional should never be synced - selseg.options = (selseg.options & 0xFF8F) | (udpIn[28+ofs]<<8) | (udpIn[9 +ofs] & 0x8E); // ignore selected, freeze, reset & transitional + selseg.options = (selseg.options & 0x0071U) | (udpIn[28+ofs]<<8) | (udpIn[9 +ofs] & 0x8E); // ignore selected, freeze, reset & transitional if (applyEffects) { selseg.custom1 = udpIn[29+ofs]; selseg.custom2 = udpIn[30+ofs]; @@ -658,6 +660,12 @@ void sendSysInfoUDP() memcpy((byte *)data + 6, serverDescription, 32); #ifdef ESP8266 data[38] = NODE_TYPE_ID_ESP8266; + #elif defined(CONFIG_IDF_TARGET_ESP32C3) + data[38] = NODE_TYPE_ID_ESP32C3; + #elif defined(CONFIG_IDF_TARGET_ESP32S3) + data[38] = NODE_TYPE_ID_ESP32S3; + #elif defined(CONFIG_IDF_TARGET_ESP32S2) + data[38] = NODE_TYPE_ID_ESP32S2; #elif defined(ARDUINO_ARCH_ESP32) data[38] = NODE_TYPE_ID_ESP32; #else diff --git a/wled00/wled.h b/wled00/wled.h index 4f95c199..66fdce38 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2210220 +#define VERSION 2211020 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG From 17d1ca82a6128b5a5c6515d22462deafaaf6fee4 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Thu, 3 Nov 2022 21:04:40 +0100 Subject: [PATCH 04/10] Update Animated Staircas for 0.14 --- .../Animated_Staircase/Animated_Staircase.h | 55 ++++++++++--------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index 427348d8..818b14b5 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -65,7 +65,7 @@ class Animated_Staircase : public Usermod { // The maximum number of configured segments. // Dynamically updated based on user configuration. byte maxSegmentId = 1; - byte mainSegmentId = 0; + byte minSegmentId = 0; // These values are used by the API to read the // last sensor state, or trigger a sensor @@ -91,8 +91,7 @@ class Animated_Staircase : public Usermod { static const char _topEchoCm[]; static const char _bottomEchoCm[]; - void publishMqtt(bool bottom, const char* state) - { + void publishMqtt(bool bottom, const char* state) { //Check if MQTT Connected, otherwise it will crash the 8266 if (WLED_MQTT_CONNECTED){ char subuf[64]; @@ -102,16 +101,11 @@ class Animated_Staircase : public Usermod { } void updateSegments() { - mainSegmentId = strip.getMainSegmentId(); - for (int i = 0; i < strip.getSegmentsNum(); i++) { + for (int i = minSegmentId; i < maxSegmentId; i++) { Segment &seg = strip.getSegment(i); - if (!seg.isActive()) { - maxSegmentId = i - 1; - break; - } + if (!seg.isActive()) continue; // skip gaps if (i >= onIndex && i < offIndex) { seg.setOption(SEG_OPTION_ON, true); - // We may need to copy mode and colors from segment 0 to make sure // changes are propagated even when the config is changed during a wipe // seg.setMode(mainsegment.mode); @@ -120,8 +114,9 @@ class Animated_Staircase : public Usermod { seg.setOption(SEG_OPTION_ON, false); } // Always mark segments as "transitional", we are animating the staircase - seg.setOption(SEG_OPTION_TRANSITIONAL, true); + //seg.setOption(SEG_OPTION_TRANSITIONAL, true); // not needed anymore } + stateChanged = true; colorUpdated(CALL_MODE_DIRECT_CHANGE); } @@ -207,9 +202,9 @@ class Animated_Staircase : public Usermod { if (onIndex == offIndex) { // Position the indices for a correct on-swipe if (swipe == SWIPE_UP) { - onIndex = mainSegmentId; + onIndex = minSegmentId; } else { - onIndex = maxSegmentId+1; + onIndex = maxSegmentId; } offIndex = onIndex; } @@ -221,7 +216,7 @@ class Animated_Staircase : public Usermod { } void autoPowerOff() { - if (on && ((millis() - lastSwitchTime) > on_time_ms)) { + if ((millis() - lastSwitchTime) > on_time_ms) { // if sensors are still on, do nothing if (bottomSensorState || topSensorState) return; @@ -238,10 +233,12 @@ class Animated_Staircase : public Usermod { if ((millis() - lastTime) > segment_delay_ms) { lastTime = millis(); + byte oldOn = onIndex; + byte oldOff = offIndex; if (on) { // Turn on all segments - onIndex = MAX(mainSegmentId, onIndex - 1); - offIndex = MIN(maxSegmentId + 1, offIndex + 1); + onIndex = MAX(minSegmentId, onIndex - 1); + offIndex = MIN(maxSegmentId, offIndex + 1); } else { if (swipe == SWIPE_UP) { onIndex = MIN(offIndex, onIndex + 1); @@ -249,7 +246,7 @@ class Animated_Staircase : public Usermod { offIndex = MAX(onIndex, offIndex - 1); } } - updateSegments(); + if (oldOn != onIndex || oldOff != offIndex) updateSegments(); // reduce the number of updates to necessary ones } } @@ -287,16 +284,20 @@ class Animated_Staircase : public Usermod { pinMode(topPIRorTriggerPin, OUTPUT); pinMode(topEchoPin, INPUT); } + onIndex = minSegmentId = strip.getMainSegmentId(); // it may not be the best idea to start with main segment as it may not be the first one + offIndex = maxSegmentId = strip.getLastActiveSegmentId() + 1; + + // shorten the strip trnasition time to be equal or shorter than segment delay + transitionDelayTemp = transitionDelay = segment_delay_ms; + strip.setTransition(segment_delay_ms/100); } else { // Restore segment options - for (int i = 0; i < strip.getSegmentsNum(); i++) { + for (int i = 0; i <= strip.getLastActiveSegmentId(); i++) { Segment &seg = strip.getSegment(i); - if (!seg.isActive()) { - maxSegmentId = i - 1; - break; - } + if (!seg.isActive()) continue; // skip vector gaps seg.setOption(SEG_OPTION_ON, true); } + stateChanged = true; colorUpdated(CALL_MODE_DIRECT_CHANGE); DEBUG_PRINTLN(F("Animated Staircase disabled.")); } @@ -332,8 +333,10 @@ class Animated_Staircase : public Usermod { void loop() { if (!enabled || strip.isUpdating()) return; + minSegmentId = strip.getMainSegmentId(); // it may not be the best idea to start with main segment as it may not be the first one + maxSegmentId = strip.getLastActiveSegmentId() + 1; checkSensors(); - autoPowerOff(); + if (on) autoPowerOff(); updateSwipe(); } @@ -392,14 +395,16 @@ class Animated_Staircase : public Usermod { */ void readFromJsonState(JsonObject& root) { if (!initDone) return; // prevent crash on boot applyPreset() + bool en = enabled; JsonObject staircase = root[FPSTR(_name)]; if (!staircase.isNull()) { if (staircase[FPSTR(_enabled)].is()) { - enabled = staircase[FPSTR(_enabled)].as(); + en = staircase[FPSTR(_enabled)].as(); } else { String str = staircase[FPSTR(_enabled)]; // checkbox -> off or on - enabled = (bool)(str!="off"); // off is guaranteed to be present + en = (bool)(str!="off"); // off is guaranteed to be present } + if (en != enabled) enable(en); readSensorsFromJson(staircase); DEBUG_PRINTLN(F("Staircase sensor state read from API.")); } From 0cfda55b3aff7f9bcd489a4798831ae9fb26a3fd Mon Sep 17 00:00:00 2001 From: Benjamin G Date: Thu, 3 Nov 2022 17:01:32 -0500 Subject: [PATCH 05/10] Automatically set PC Mode if unset (#2861) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Automatically set PC Mode if unset based on the UserAgent * slight reduction Reduce flash usage a bit. Co-authored-by: Blaž Kristan --- wled00/data/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/data/index.js b/wled00/data/index.js index 2cd22bbb..255393c4 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -262,7 +262,7 @@ function onLoad() d.addEventListener("visibilitychange", handleVisibilityChange, false); size(); gId("cv").style.opacity=0; - if (localStorage.getItem('pcm') == "true") togglePcMode(true); + if (localStorage.getItem('pcm') == "true" || (!/Mobi/.test(navigator.userAgent) && localStorage.getItem('pcm') == null)) togglePcMode(true); var sls = d.querySelectorAll('input[type="range"]'); for (var sl of sls) { sl.addEventListener('touchstart', toggleBubble); From d30e219d7bcdeae4ffe8f1ea110f0570ab49cdaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Fri, 4 Nov 2022 08:27:35 +0100 Subject: [PATCH 06/10] Faster strip updates. --- usermods/Animated_Staircase/Animated_Staircase.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/usermods/Animated_Staircase/Animated_Staircase.h b/usermods/Animated_Staircase/Animated_Staircase.h index 818b14b5..1ef2c959 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.h +++ b/usermods/Animated_Staircase/Animated_Staircase.h @@ -114,9 +114,10 @@ class Animated_Staircase : public Usermod { seg.setOption(SEG_OPTION_ON, false); } // Always mark segments as "transitional", we are animating the staircase - //seg.setOption(SEG_OPTION_TRANSITIONAL, true); // not needed anymore + //seg.setOption(SEG_OPTION_TRANSITIONAL, true); // not needed anymore as setOption() does it } - stateChanged = true; + strip.trigger(); // force strip refresh + stateChanged = true; // inform external devices/UI of change colorUpdated(CALL_MODE_DIRECT_CHANGE); } @@ -287,9 +288,10 @@ class Animated_Staircase : public Usermod { onIndex = minSegmentId = strip.getMainSegmentId(); // it may not be the best idea to start with main segment as it may not be the first one offIndex = maxSegmentId = strip.getLastActiveSegmentId() + 1; - // shorten the strip trnasition time to be equal or shorter than segment delay + // shorten the strip transition time to be equal or shorter than segment delay transitionDelayTemp = transitionDelay = segment_delay_ms; strip.setTransition(segment_delay_ms/100); + strip.trigger(); } else { // Restore segment options for (int i = 0; i <= strip.getLastActiveSegmentId(); i++) { @@ -297,7 +299,8 @@ class Animated_Staircase : public Usermod { if (!seg.isActive()) continue; // skip vector gaps seg.setOption(SEG_OPTION_ON, true); } - stateChanged = true; + strip.trigger(); // force strip update + stateChanged = true; // inform external dvices/UI of change colorUpdated(CALL_MODE_DIRECT_CHANGE); DEBUG_PRINTLN(F("Animated Staircase disabled.")); } From 71d84fecba1daccf43c9319ee18b3f149156eb6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Fri, 4 Nov 2022 08:33:55 +0100 Subject: [PATCH 07/10] Bugfix. Use default nightLightDelay if ND present. --- wled00/set.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wled00/set.cpp b/wled00/set.cpp index f9abd4e7..78c27cd9 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -947,11 +947,13 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) } else { nightlightActive = true; if (!aNlDef) nightlightDelayMins = getNumVal(&req, pos); + else nightlightDelayMins = nightlightDelayMinsDefault; nightlightStartTime = millis(); } } else if (aNlDef) { nightlightActive = true; + nightlightDelayMins = nightlightDelayMinsDefault; nightlightStartTime = millis(); } From e5f9cfd5b6737f8c3cc9ada870c8b72621bcf42a Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 5 Nov 2022 18:31:38 +0100 Subject: [PATCH 08/10] Add ESP32 variant display in update page. --- wled00/wled.h | 2 +- wled00/xml.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/wled00/wled.h b/wled00/wled.h index 66fdce38..44327176 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2211020 +#define VERSION 2211050 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG diff --git a/wled00/xml.cpp b/wled00/xml.cpp index b6885201..a9c8907b 100644 --- a/wled00/xml.cpp +++ b/wled00/xml.cpp @@ -698,7 +698,13 @@ void getSettingsJS(byte subPage, char* dest) sappends('m',SET_F("(\"sip\")[0]"),(char*)F("WLED ")); olen -= 2; //delete "; oappend(versionString); - #ifdef ARDUINO_ARCH_ESP32 + #if defined(CONFIG_IDF_TARGET_ESP32C3) + oappend(SET_F("
(ESP32-C3")); + #elif defined(CONFIG_IDF_TARGET_ESP32S3) + oappend(SET_F("
(ESP32-S3")); + #elif defined(CONFIG_IDF_TARGET_ESP32S2) + oappend(SET_F("
(ESP32-S2")); + #elif defined(ARDUINO_ARCH_ESP32) oappend(SET_F("
(ESP32")); #else oappend(SET_F("
(ESP8266")); From 1d8c9ac020bfb951129037692625a93b58bff035 Mon Sep 17 00:00:00 2001 From: cschwinne Date: Sun, 6 Nov 2022 16:50:12 +0100 Subject: [PATCH 09/10] Net debug optimizations Fix ESP8266 (unaligned progmem flash string reads) Do not send an extra package for \n in println Only resolve IP/hostname once --- wled00/net_debug.cpp | 40 +++++++++++++++++----------------------- wled00/net_debug.h | 9 ++++----- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/wled00/net_debug.cpp b/wled00/net_debug.cpp index f1242bb1..9f451ca5 100644 --- a/wled00/net_debug.cpp +++ b/wled00/net_debug.cpp @@ -4,16 +4,10 @@ NetworkDebugPrinter NetDebug; -void NetworkDebugPrinter::printchar(char s) { - debugUdp.write(s); -} +void NetworkDebugPrinter::print(const char *s, bool newline) { + if (!WLED_CONNECTED || !udpConnected || s == nullptr) return; -void NetworkDebugPrinter::print(const char *s) { - if (!WLED_CONNECTED || s == nullptr) { - return; - } - IPAddress debugPrintHostIP; - if (!debugPrintHostIP.fromString(netDebugPrintHost)) { + if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) { #ifdef ESP8266 WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750); #else @@ -24,49 +18,49 @@ void NetworkDebugPrinter::print(const char *s) { #endif #endif } + + WiFiUDP debugUdp; debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort); - //for (size_t i=0; i(s), strlen(s)); + if (newline) debugUdp.write('\n'); debugUdp.endPacket(); } -void NetworkDebugPrinter::print(const __FlashStringHelper* s) { - print(reinterpret_cast(s)); +void NetworkDebugPrinter::print(const __FlashStringHelper* s, bool newline) { + char buf[512]; + strncpy_P(buf, (PGM_P)s, 512); + print(buf, newline); } void NetworkDebugPrinter::print(String s) { print(s.c_str()); } -void NetworkDebugPrinter::print(unsigned int n) { +void NetworkDebugPrinter::print(unsigned int n, bool newline) { char s[10]; snprintf_P(s, sizeof(s), PSTR("%d"), n); s[9] = '\0'; - print(s); + print(s, newline); } void NetworkDebugPrinter::println() { - print("\n"); + print("", true); } void NetworkDebugPrinter::println(const char *s) { - print(s); - print("\n"); + print(s, true); } void NetworkDebugPrinter::println(const __FlashStringHelper* s) { - print(s); - print("\n"); + print(s, true); } void NetworkDebugPrinter::println(String s) { - print(s); - print("\n"); + print(s.c_str(), true); } void NetworkDebugPrinter::println(unsigned int n) { - print(n); - print("\n"); + print(n, true); } void NetworkDebugPrinter::printf(const char *fmt...) { diff --git a/wled00/net_debug.h b/wled00/net_debug.h index d15a9f76..1d9aa6c2 100644 --- a/wled00/net_debug.h +++ b/wled00/net_debug.h @@ -6,13 +6,12 @@ class NetworkDebugPrinter { private: - WiFiUDP debugUdp; - void printchar(char c); + IPAddress debugPrintHostIP; public: - void print(const char *s); - void print(const __FlashStringHelper* s); + void print(const char *s, bool newline = false); + void print(const __FlashStringHelper* s, bool newline = false); void print(String s); - void print(unsigned int n); + void print(unsigned int n, bool newline = false); void println(); void println(const char *s); void println(const __FlashStringHelper* s); From 1e104bdd9e343d251fe823c2cefbd2ed98a27fc8 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 7 Nov 2022 16:56:41 +0100 Subject: [PATCH 10/10] Compile time option for PIR sensor off timer --- usermods/PIR_sensor_switch/readme.md | 46 +- .../usermod_PIR_sensor_switch.h | 1005 +++++++++-------- 2 files changed, 512 insertions(+), 539 deletions(-) diff --git a/usermods/PIR_sensor_switch/readme.md b/usermods/PIR_sensor_switch/readme.md index 15a8db08..b023cea5 100644 --- a/usermods/PIR_sensor_switch/readme.md +++ b/usermods/PIR_sensor_switch/readme.md @@ -23,44 +23,7 @@ You can also use usermod's off timer instead of sensor's. In such case rotate th ## Usermod installation -1. Copy the file `usermod_PIR_sensor_switch.h` to the `wled00` directory. -2. Register the usermod by adding `#include "usermod_PIR_sensor_switch.h"` in the top and `registerUsermod(new PIRsensorSwitch());` in the bottom of `usermods_list.cpp`. - -Example **usermods_list.cpp**: - -```cpp -#include "wled.h" -/* - * Register your v2 usermods here! - * (for v1 usermods using just usermod.cpp, you can ignore this file) - */ - -/* - * Add/uncomment your usermod filename here (and once more below) - * || || || - * \/ \/ \/ - */ -//#include "usermod_v2_example.h" -//#include "usermod_temperature.h" -//#include "usermod_v2_empty.h" -#include "usermod_PIR_sensor_switch.h" - -void registerUsermods() -{ - /* - * Add your usermod class name here - * || || || - * \/ \/ \/ - */ - //usermods.add(new MyExampleUsermod()); - //usermods.add(new UsermodTemperature()); - //usermods.add(new UsermodRenameMe()); - usermods.add(new PIRsensorSwitch()); - -} -``` - -**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. +**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 tim by adding `-D PIR_SENSOR_OFF_SEC=30`. ## API to enable/disable the PIR sensor from outside. For example from another usermod. @@ -121,4 +84,9 @@ Have fun - @gegu & @blazoncek 2021-11 * Added information about dynamic configuration options -* Added option to temporary enable/disble usermod from WLED UI (Info dialog) \ No newline at end of file +* Added option to temporary enable/disble usermod from WLED UI (Info dialog) + +2022-11 +* Added compile time option for off timer. +* Added Home Assistant autodiscovery MQTT broadcast. +* Updated info on compiling. \ No newline at end of file diff --git a/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h b/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h index 602c514f..b03a36ce 100644 --- a/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h +++ b/usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h @@ -1,500 +1,505 @@ -#pragma once - -#include "wled.h" - -#ifndef PIR_SENSOR_PIN - // compatible with QuinLED-Dig-Uno - #ifdef ARDUINO_ARCH_ESP32 - #define PIR_SENSOR_PIN 23 // Q4 - #else //ESP8266 boards - #define PIR_SENSOR_PIN 13 // Q4 (D7 on D1 mini) - #endif -#endif - -/* - * This usermod handles PIR sensor states. - * The strip will be switched on and the off timer will be resetted when the sensor goes HIGH. - * When the sensor state goes LOW, the off timer is started and when it expires, the strip is switched off. - * - * - * Usermods allow you to add own functionality to WLED more easily - * See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality - * - * v2 usermods are class inheritance based and can (but don't have to) implement more functions, each of them is shown in this example. - * Multiple v2 usermods can be added to one compilation easily. - */ - -class PIRsensorSwitch : public Usermod -{ -public: - // constructor - PIRsensorSwitch() {} - // destructor - ~PIRsensorSwitch() {} - - //Enable/Disable the PIR sensor - void EnablePIRsensor(bool en) { enabled = en; } - - // Get PIR sensor enabled/disabled state - bool PIRsensorEnabled() { return enabled; } - -private: - - byte prevPreset = 0; - byte prevPlaylist = 0; - - uint32_t offTimerStart = 0; // off timer start time - byte NotifyUpdateMode = CALL_MODE_NO_NOTIFY; // notification mode for stateUpdated(): CALL_MODE_NO_NOTIFY or CALL_MODE_DIRECT_CHANGE - byte sensorPinState = LOW; // current PIR sensor pin state - bool initDone = false; // status of initialization - bool PIRtriggered = false; - unsigned long lastLoop = 0; - - // configurable parameters - bool enabled = true; // PIR sensor enabled - int8_t PIRsensorPin = PIR_SENSOR_PIN; // PIR sensor pin - uint32_t m_switchOffDelay = 600000; // delay before switch off after the sensor state goes LOW (10min) - uint8_t m_onPreset = 0; // on preset - uint8_t m_offPreset = 0; // off preset - bool m_nightTimeOnly = false; // flag to indicate that PIR sensor should activate WLED during nighttime only - bool m_mqttOnly = false; // flag to send MQTT message only (assuming it is enabled) - // flag to enable triggering only if WLED is initially off (LEDs are not on, preventing running effect being overwritten by PIR) - bool m_offOnly = false; - bool m_offMode = offMode; - - // Home Assistant - bool HomeAssistantDiscovery = false; // is HA discovery turned on - - // strings to reduce flash memory usage (used more than twice) - static const char _name[]; - static const char _switchOffDelay[]; - static const char _enabled[]; - static const char _onPreset[]; - static const char _offPreset[]; - static const char _nightTime[]; - static const char _mqttOnly[]; - static const char _offOnly[]; - static const char _haDiscovery[]; - static const char _notify[]; - - /** - * check if it is daytime - * if sunrise/sunset is not defined (no NTP or lat/lon) default to nighttime - */ - bool isDayTime() { - updateLocalTime(); - uint8_t hr = hour(localTime); - uint8_t mi = minute(localTime); - - if (sunrise && sunset) { - if (hour(sunrise)
hr) { - return true; - } else { - if (hour(sunrise)==hr && minute(sunrise)mi) { - return true; - } - } - } - return false; - } - - /** - * switch strip on/off - */ - void switchStrip(bool switchOn) - { - if (m_offOnly && bri && (switchOn || (!PIRtriggered && !switchOn))) return; //if lights on and off only, do nothing - if (PIRtriggered && switchOn) return; //if already on and triggered before, do nothing - PIRtriggered = switchOn; - if (switchOn) { - if (m_onPreset) { - if (currentPlaylist>0 && !offMode) { - prevPlaylist = currentPlaylist; - unloadPlaylist(); - } else if (currentPreset>0 && !offMode) { - prevPreset = currentPreset; - } else { - saveTemporaryPreset(); - prevPlaylist = 0; - prevPreset = 255; - } - applyPreset(m_onPreset, NotifyUpdateMode); - return; - } - // preset not assigned - if (bri == 0) { - bri = briLast; - stateUpdated(NotifyUpdateMode); - } - } else { - if (m_offPreset) { - if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyPreset(m_offPreset, NotifyUpdateMode); - return; - } else if (prevPlaylist) { - if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyPreset(prevPlaylist, NotifyUpdateMode); - prevPlaylist = 0; - return; - } else if (prevPreset) { - if (prevPreset<255) { if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyPreset(prevPreset, NotifyUpdateMode); } - else { if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyTemporaryPreset(); } - prevPreset = 0; - return; - } - // preset not assigned - if (bri != 0) { - briLast = bri; - bri = 0; - stateUpdated(NotifyUpdateMode); - } - } - } - - void publishMqtt(const char* state) - { - //Check if MQTT Connected, otherwise it will crash the 8266 - if (WLED_MQTT_CONNECTED) { - char subuf[64]; - strcpy(subuf, mqttDeviceTopic); - strcat_P(subuf, PSTR("/motion")); - mqtt->publish(subuf, 0, false, state); - } - } - - // Create an MQTT Binary Sensor for Home Assistant Discovery purposes, this includes a pointer to the topic that is published to in the Loop. - void publishHomeAssistantAutodiscovery() - { - if (WLED_MQTT_CONNECTED) { - StaticJsonDocument<600> doc; - char uid[24], json_str[1024], buf[128]; - - sprintf_P(buf, PSTR("%s Motion"), serverDescription); //max length: 33 + 7 = 40 - doc[F("name")] = buf; - sprintf_P(buf, PSTR("%s/motion"), mqttDeviceTopic); //max length: 33 + 7 = 40 - doc[F("stat_t")] = buf; - doc[F("pl_on")] = "on"; - doc[F("pl_off")] = "off"; - sprintf_P(uid, PSTR("%s_motion"), escapedMac.c_str()); - doc[F("uniq_id")] = uid; - doc[F("dev_cla")] = F("motion"); - doc[F("exp_aft")] = 1800; - - JsonObject device = doc.createNestedObject(F("device")); // attach the sensor to the same device - device[F("name")] = serverDescription; - device[F("ids")] = String(F("wled-sensor-")) + mqttClientID; - device[F("mf")] = "WLED"; - device[F("mdl")] = F("FOSS"); - device[F("sw")] = versionString; - - sprintf_P(buf, PSTR("homeassistant/binary_sensor/%s/config"), uid); - DEBUG_PRINTLN(buf); - size_t payload_size = serializeJson(doc, json_str); - DEBUG_PRINTLN(json_str); - - mqtt->publish(buf, 0, true, json_str, payload_size); // do we really need to retain? - } - } - - /** - * Read and update PIR sensor state. - * Initilize/reset switch off timer - */ - bool updatePIRsensorState() - { - bool pinState = digitalRead(PIRsensorPin); - if (pinState != sensorPinState) { - sensorPinState = pinState; // change previous state - - if (sensorPinState == HIGH) { - offTimerStart = 0; - if (!m_mqttOnly && (!m_nightTimeOnly || (m_nightTimeOnly && !isDayTime()))) switchStrip(true); - else if (NotifyUpdateMode != CALL_MODE_NO_NOTIFY) updateInterfaces(CALL_MODE_WS_SEND); - publishMqtt("on"); - } else { - // start switch off timer - offTimerStart = millis(); - if (NotifyUpdateMode != CALL_MODE_NO_NOTIFY) updateInterfaces(CALL_MODE_WS_SEND); - } - return true; - } - return false; - } - - /** - * switch off the strip if the delay has elapsed - */ - bool handleOffTimer() - { - if (offTimerStart > 0 && millis() - offTimerStart > m_switchOffDelay) { - offTimerStart = 0; - if (enabled == true) { - if (!m_mqttOnly && (!m_nightTimeOnly || (m_nightTimeOnly && !isDayTime()))) switchStrip(false); - else if (NotifyUpdateMode != CALL_MODE_NO_NOTIFY) updateInterfaces(CALL_MODE_WS_SEND); - publishMqtt("off"); - } - return true; - } - return false; - } - -public: - //Functions called by WLED - - /** - * setup() is called once at boot. WiFi is not yet connected at this point. - * You can use it to initialize variables, sensors or similar. - */ - void setup() - { - if (enabled) { - // pin retrieved from cfg.json (readFromConfig()) prior to running setup() - if (PIRsensorPin >= 0 && pinManager.allocatePin(PIRsensorPin, false, PinOwner::UM_PIR)) { - // PIR Sensor mode INPUT_PULLUP - pinMode(PIRsensorPin, INPUT_PULLUP); - sensorPinState = digitalRead(PIRsensorPin); - } else { - if (PIRsensorPin >= 0) { - DEBUG_PRINTLN(F("PIRSensorSwitch pin allocation failed.")); - } - PIRsensorPin = -1; // allocation failed - enabled = false; - } - } - initDone = true; - } - - /** - * connected() is called every time the WiFi is (re)connected - * Use it to initialize network interfaces - */ - void connected() - { - } - - /** - * onMqttConnect() is called when MQTT connection is established - */ - void onMqttConnect(bool sessionPresent) { - if (HomeAssistantDiscovery) { - publishHomeAssistantAutodiscovery(); - } - } - - /** - * loop() is called continuously. Here you can check for events, read sensors, etc. - */ - void loop() - { - // only check sensors 4x/s - if (!enabled || millis() - lastLoop < 250 || strip.isUpdating()) return; - lastLoop = millis(); - - if (!updatePIRsensorState()) { - handleOffTimer(); - } - } - - /** - * addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API. - * - * Add PIR sensor state and switch off timer duration to jsoninfo - */ - void addToJsonInfo(JsonObject &root) - { - JsonObject user = root["u"]; - if (user.isNull()) user = root.createNestedObject("u"); - - JsonArray infoArr = user.createNestedArray(FPSTR(_name)); - - String uiDomString; - if (enabled) { - if (offTimerStart > 0) - { - uiDomString = ""; - unsigned int offSeconds = (m_switchOffDelay - (millis() - offTimerStart)) / 1000; - if (offSeconds >= 3600) - { - uiDomString += (offSeconds / 3600); - uiDomString += F("h "); - offSeconds %= 3600; - } - if (offSeconds >= 60) - { - uiDomString += (offSeconds / 60); - offSeconds %= 60; - } - else if (uiDomString.length() > 0) - { - uiDomString += 0; - } - if (uiDomString.length() > 0) - { - uiDomString += F("min "); - } - uiDomString += (offSeconds); - infoArr.add(uiDomString + F("s")); - } else { - infoArr.add(sensorPinState ? F("sensor on") : F("inactive")); - } - } else { - infoArr.add(F("disabled")); - } - - uiDomString = F(" "); - infoArr.add(uiDomString); - - JsonObject sensor = root[F("sensor")]; - if (sensor.isNull()) sensor = root.createNestedObject(F("sensor")); - sensor[F("motion")] = sensorPinState || offTimerStart>0 ? true : false; - } - - /** - * addToJsonState() can be used to add custom entries to the /json/state part of the JSON API (state object). - * Values in the state object may be modified by connected clients - */ -/* - void addToJsonState(JsonObject &root) - { - } -*/ - - /** - * readFromJsonState() can be used to receive data clients send to the /json/state part of the JSON API (state object). - * Values in the state object may be modified by connected clients - */ - - void readFromJsonState(JsonObject &root) - { - if (!initDone) return; // prevent crash on boot applyPreset() - JsonObject usermod = root[FPSTR(_name)]; - if (!usermod.isNull()) { - if (usermod[FPSTR(_enabled)].is()) { - enabled = usermod[FPSTR(_enabled)].as(); - } - } - } - - - /** - * provide the changeable values - */ - void addToConfig(JsonObject &root) - { - JsonObject top = root.createNestedObject(FPSTR(_name)); - top[FPSTR(_enabled)] = enabled; - top[FPSTR(_switchOffDelay)] = m_switchOffDelay / 1000; - top["pin"] = PIRsensorPin; - top[FPSTR(_onPreset)] = m_onPreset; - top[FPSTR(_offPreset)] = m_offPreset; - top[FPSTR(_nightTime)] = m_nightTimeOnly; - top[FPSTR(_mqttOnly)] = m_mqttOnly; - top[FPSTR(_offOnly)] = m_offOnly; - top[FPSTR(_haDiscovery)] = HomeAssistantDiscovery; - top[FPSTR(_notify)] = (NotifyUpdateMode != CALL_MODE_NO_NOTIFY); - DEBUG_PRINTLN(F("PIR config saved.")); - } - - void appendConfigData() - { - oappend(SET_F("addInfo('PIRsensorSwitch:HA-discovery',1,'HA=Home Assistant');")); // 0 is field type, 1 is actual field - oappend(SET_F("addInfo('PIRsensorSwitch:notifications',1,'Periodic WS updates');")); // 0 is field type, 1 is actual field - } - - /** - * restore the changeable values - * readFromConfig() is called before setup() to populate properties from values stored in cfg.json - * - * The function should return true if configuration was successfully loaded or false if there was no configuration. - */ - bool readFromConfig(JsonObject &root) - { - bool oldEnabled = enabled; - int8_t oldPin = PIRsensorPin; - - DEBUG_PRINT(FPSTR(_name)); - JsonObject top = root[FPSTR(_name)]; - if (top.isNull()) { - DEBUG_PRINTLN(F(": No config found. (Using defaults.)")); - return false; - } - - PIRsensorPin = top["pin"] | PIRsensorPin; - - enabled = top[FPSTR(_enabled)] | enabled; - - m_switchOffDelay = (top[FPSTR(_switchOffDelay)] | m_switchOffDelay/1000) * 1000; - - m_onPreset = top[FPSTR(_onPreset)] | m_onPreset; - m_onPreset = max(0,min(250,(int)m_onPreset)); - m_offPreset = top[FPSTR(_offPreset)] | m_offPreset; - m_offPreset = max(0,min(250,(int)m_offPreset)); - - m_nightTimeOnly = top[FPSTR(_nightTime)] | m_nightTimeOnly; - m_mqttOnly = top[FPSTR(_mqttOnly)] | m_mqttOnly; - m_offOnly = top[FPSTR(_offOnly)] | m_offOnly; - HomeAssistantDiscovery = top[FPSTR(_haDiscovery)] | HomeAssistantDiscovery; - - NotifyUpdateMode = top[FPSTR(_notify)] ? CALL_MODE_DIRECT_CHANGE : CALL_MODE_NO_NOTIFY; - - if (!initDone) { - // reading config prior to setup() - DEBUG_PRINTLN(F(" config loaded.")); - } else { - if (oldPin != PIRsensorPin || oldEnabled != enabled) { - // check if pin is OK - if (oldPin != PIRsensorPin && oldPin >= 0) { - // if we are changing pin in settings page - // deallocate old pin - pinManager.deallocatePin(oldPin, PinOwner::UM_PIR); - if (pinManager.allocatePin(PIRsensorPin, false, PinOwner::UM_PIR)) { - pinMode(PIRsensorPin, INPUT_PULLUP); - } else { - // allocation failed - PIRsensorPin = -1; - enabled = false; - } - } - if (enabled) { - sensorPinState = digitalRead(PIRsensorPin); - } - } - DEBUG_PRINTLN(F(" config (re)loaded.")); - } - // use "return !top["newestParameter"].isNull();" when updating Usermod with new features - return !top[FPSTR(_haDiscovery)].isNull(); - } - - /** - * 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. - */ - uint16_t getId() - { - return USERMOD_ID_PIRSWITCH; - } -}; - -// strings to reduce flash memory usage (used more than twice) -const char PIRsensorSwitch::_name[] PROGMEM = "PIRsensorSwitch"; -const char PIRsensorSwitch::_enabled[] PROGMEM = "PIRenabled"; -const char PIRsensorSwitch::_switchOffDelay[] PROGMEM = "PIRoffSec"; -const char PIRsensorSwitch::_onPreset[] PROGMEM = "on-preset"; -const char PIRsensorSwitch::_offPreset[] PROGMEM = "off-preset"; -const char PIRsensorSwitch::_nightTime[] PROGMEM = "nighttime-only"; -const char PIRsensorSwitch::_mqttOnly[] PROGMEM = "mqtt-only"; -const char PIRsensorSwitch::_offOnly[] PROGMEM = "off-only"; -const char PIRsensorSwitch::_haDiscovery[] PROGMEM = "HA-discovery"; -const char PIRsensorSwitch::_notify[] PROGMEM = "notifications"; +#pragma once + +#include "wled.h" + +#ifndef PIR_SENSOR_PIN + // compatible with QuinLED-Dig-Uno + #ifdef ARDUINO_ARCH_ESP32 + #define PIR_SENSOR_PIN 23 // Q4 + #else //ESP8266 boards + #define PIR_SENSOR_PIN 13 // Q4 (D7 on D1 mini) + #endif +#endif + +#ifndef PIR_SENSOR_OFF_SEC + #define PIR_SENSOR_OFF_SEC 600 +#endif + + +/* + * This usermod handles PIR sensor states. + * The strip will be switched on and the off timer will be resetted when the sensor goes HIGH. + * When the sensor state goes LOW, the off timer is started and when it expires, the strip is switched off. + * + * + * Usermods allow you to add own functionality to WLED more easily + * See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality + * + * v2 usermods are class inheritance based and can (but don't have to) implement more functions, each of them is shown in this example. + * Multiple v2 usermods can be added to one compilation easily. + */ + +class PIRsensorSwitch : public Usermod +{ +public: + // constructor + PIRsensorSwitch() {} + // destructor + ~PIRsensorSwitch() {} + + //Enable/Disable the PIR sensor + void EnablePIRsensor(bool en) { enabled = en; } + + // Get PIR sensor enabled/disabled state + bool PIRsensorEnabled() { return enabled; } + +private: + + byte prevPreset = 0; + byte prevPlaylist = 0; + + uint32_t offTimerStart = 0; // off timer start time + byte NotifyUpdateMode = CALL_MODE_NO_NOTIFY; // notification mode for stateUpdated(): CALL_MODE_NO_NOTIFY or CALL_MODE_DIRECT_CHANGE + byte sensorPinState = LOW; // current PIR sensor pin state + bool initDone = false; // status of initialization + bool PIRtriggered = false; + unsigned long lastLoop = 0; + + // configurable parameters + bool enabled = true; // PIR sensor enabled + int8_t PIRsensorPin = PIR_SENSOR_PIN; // PIR sensor pin + uint32_t m_switchOffDelay = PIR_SENSOR_OFF_SEC*1000; // delay before switch off after the sensor state goes LOW (10min) + uint8_t m_onPreset = 0; // on preset + uint8_t m_offPreset = 0; // off preset + bool m_nightTimeOnly = false; // flag to indicate that PIR sensor should activate WLED during nighttime only + bool m_mqttOnly = false; // flag to send MQTT message only (assuming it is enabled) + // flag to enable triggering only if WLED is initially off (LEDs are not on, preventing running effect being overwritten by PIR) + bool m_offOnly = false; + bool m_offMode = offMode; + + // Home Assistant + bool HomeAssistantDiscovery = false; // is HA discovery turned on + + // strings to reduce flash memory usage (used more than twice) + static const char _name[]; + static const char _switchOffDelay[]; + static const char _enabled[]; + static const char _onPreset[]; + static const char _offPreset[]; + static const char _nightTime[]; + static const char _mqttOnly[]; + static const char _offOnly[]; + static const char _haDiscovery[]; + static const char _notify[]; + + /** + * check if it is daytime + * if sunrise/sunset is not defined (no NTP or lat/lon) default to nighttime + */ + bool isDayTime() { + updateLocalTime(); + uint8_t hr = hour(localTime); + uint8_t mi = minute(localTime); + + if (sunrise && sunset) { + if (hour(sunrise)
hr) { + return true; + } else { + if (hour(sunrise)==hr && minute(sunrise)mi) { + return true; + } + } + } + return false; + } + + /** + * switch strip on/off + */ + void switchStrip(bool switchOn) + { + if (m_offOnly && bri && (switchOn || (!PIRtriggered && !switchOn))) return; //if lights on and off only, do nothing + if (PIRtriggered && switchOn) return; //if already on and triggered before, do nothing + PIRtriggered = switchOn; + if (switchOn) { + if (m_onPreset) { + if (currentPlaylist>0 && !offMode) { + prevPlaylist = currentPlaylist; + unloadPlaylist(); + } else if (currentPreset>0 && !offMode) { + prevPreset = currentPreset; + } else { + saveTemporaryPreset(); + prevPlaylist = 0; + prevPreset = 255; + } + applyPreset(m_onPreset, NotifyUpdateMode); + return; + } + // preset not assigned + if (bri == 0) { + bri = briLast; + stateUpdated(NotifyUpdateMode); + } + } else { + if (m_offPreset) { + if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyPreset(m_offPreset, NotifyUpdateMode); + return; + } else if (prevPlaylist) { + if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyPreset(prevPlaylist, NotifyUpdateMode); + prevPlaylist = 0; + return; + } else if (prevPreset) { + if (prevPreset<255) { if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyPreset(prevPreset, NotifyUpdateMode); } + else { if (currentPreset==m_onPreset || currentPlaylist==m_onPreset) applyTemporaryPreset(); } + prevPreset = 0; + return; + } + // preset not assigned + if (bri != 0) { + briLast = bri; + bri = 0; + stateUpdated(NotifyUpdateMode); + } + } + } + + void publishMqtt(const char* state) + { + //Check if MQTT Connected, otherwise it will crash the 8266 + if (WLED_MQTT_CONNECTED) { + char subuf[64]; + strcpy(subuf, mqttDeviceTopic); + strcat_P(subuf, PSTR("/motion")); + mqtt->publish(subuf, 0, false, state); + } + } + + // Create an MQTT Binary Sensor for Home Assistant Discovery purposes, this includes a pointer to the topic that is published to in the Loop. + void publishHomeAssistantAutodiscovery() + { + if (WLED_MQTT_CONNECTED) { + StaticJsonDocument<600> doc; + char uid[24], json_str[1024], buf[128]; + + sprintf_P(buf, PSTR("%s Motion"), serverDescription); //max length: 33 + 7 = 40 + doc[F("name")] = buf; + sprintf_P(buf, PSTR("%s/motion"), mqttDeviceTopic); //max length: 33 + 7 = 40 + doc[F("stat_t")] = buf; + doc[F("pl_on")] = "on"; + doc[F("pl_off")] = "off"; + sprintf_P(uid, PSTR("%s_motion"), escapedMac.c_str()); + doc[F("uniq_id")] = uid; + doc[F("dev_cla")] = F("motion"); + doc[F("exp_aft")] = 1800; + + JsonObject device = doc.createNestedObject(F("device")); // attach the sensor to the same device + device[F("name")] = serverDescription; + device[F("ids")] = String(F("wled-sensor-")) + mqttClientID; + device[F("mf")] = "WLED"; + device[F("mdl")] = F("FOSS"); + device[F("sw")] = versionString; + + sprintf_P(buf, PSTR("homeassistant/binary_sensor/%s/config"), uid); + DEBUG_PRINTLN(buf); + size_t payload_size = serializeJson(doc, json_str); + DEBUG_PRINTLN(json_str); + + mqtt->publish(buf, 0, true, json_str, payload_size); // do we really need to retain? + } + } + + /** + * Read and update PIR sensor state. + * Initilize/reset switch off timer + */ + bool updatePIRsensorState() + { + bool pinState = digitalRead(PIRsensorPin); + if (pinState != sensorPinState) { + sensorPinState = pinState; // change previous state + + if (sensorPinState == HIGH) { + offTimerStart = 0; + if (!m_mqttOnly && (!m_nightTimeOnly || (m_nightTimeOnly && !isDayTime()))) switchStrip(true); + else if (NotifyUpdateMode != CALL_MODE_NO_NOTIFY) updateInterfaces(CALL_MODE_WS_SEND); + publishMqtt("on"); + } else { + // start switch off timer + offTimerStart = millis(); + if (NotifyUpdateMode != CALL_MODE_NO_NOTIFY) updateInterfaces(CALL_MODE_WS_SEND); + } + return true; + } + return false; + } + + /** + * switch off the strip if the delay has elapsed + */ + bool handleOffTimer() + { + if (offTimerStart > 0 && millis() - offTimerStart > m_switchOffDelay) { + offTimerStart = 0; + if (enabled == true) { + if (!m_mqttOnly && (!m_nightTimeOnly || (m_nightTimeOnly && !isDayTime()))) switchStrip(false); + else if (NotifyUpdateMode != CALL_MODE_NO_NOTIFY) updateInterfaces(CALL_MODE_WS_SEND); + publishMqtt("off"); + } + return true; + } + return false; + } + +public: + //Functions called by WLED + + /** + * setup() is called once at boot. WiFi is not yet connected at this point. + * You can use it to initialize variables, sensors or similar. + */ + void setup() + { + if (enabled) { + // pin retrieved from cfg.json (readFromConfig()) prior to running setup() + if (PIRsensorPin >= 0 && pinManager.allocatePin(PIRsensorPin, false, PinOwner::UM_PIR)) { + // PIR Sensor mode INPUT_PULLUP + pinMode(PIRsensorPin, INPUT_PULLUP); + sensorPinState = digitalRead(PIRsensorPin); + } else { + if (PIRsensorPin >= 0) { + DEBUG_PRINTLN(F("PIRSensorSwitch pin allocation failed.")); + } + PIRsensorPin = -1; // allocation failed + enabled = false; + } + } + initDone = true; + } + + /** + * connected() is called every time the WiFi is (re)connected + * Use it to initialize network interfaces + */ + void connected() + { + } + + /** + * onMqttConnect() is called when MQTT connection is established + */ + void onMqttConnect(bool sessionPresent) { + if (HomeAssistantDiscovery) { + publishHomeAssistantAutodiscovery(); + } + } + + /** + * loop() is called continuously. Here you can check for events, read sensors, etc. + */ + void loop() + { + // only check sensors 4x/s + if (!enabled || millis() - lastLoop < 250 || strip.isUpdating()) return; + lastLoop = millis(); + + if (!updatePIRsensorState()) { + handleOffTimer(); + } + } + + /** + * addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API. + * + * Add PIR sensor state and switch off timer duration to jsoninfo + */ + void addToJsonInfo(JsonObject &root) + { + JsonObject user = root["u"]; + if (user.isNull()) user = root.createNestedObject("u"); + + JsonArray infoArr = user.createNestedArray(FPSTR(_name)); + + String uiDomString; + if (enabled) { + if (offTimerStart > 0) + { + uiDomString = ""; + unsigned int offSeconds = (m_switchOffDelay - (millis() - offTimerStart)) / 1000; + if (offSeconds >= 3600) + { + uiDomString += (offSeconds / 3600); + uiDomString += F("h "); + offSeconds %= 3600; + } + if (offSeconds >= 60) + { + uiDomString += (offSeconds / 60); + offSeconds %= 60; + } + else if (uiDomString.length() > 0) + { + uiDomString += 0; + } + if (uiDomString.length() > 0) + { + uiDomString += F("min "); + } + uiDomString += (offSeconds); + infoArr.add(uiDomString + F("s")); + } else { + infoArr.add(sensorPinState ? F("sensor on") : F("inactive")); + } + } else { + infoArr.add(F("disabled")); + } + + uiDomString = F(" "); + infoArr.add(uiDomString); + + JsonObject sensor = root[F("sensor")]; + if (sensor.isNull()) sensor = root.createNestedObject(F("sensor")); + sensor[F("motion")] = sensorPinState || offTimerStart>0 ? true : false; + } + + /** + * addToJsonState() can be used to add custom entries to the /json/state part of the JSON API (state object). + * Values in the state object may be modified by connected clients + */ +/* + void addToJsonState(JsonObject &root) + { + } +*/ + + /** + * readFromJsonState() can be used to receive data clients send to the /json/state part of the JSON API (state object). + * Values in the state object may be modified by connected clients + */ + + void readFromJsonState(JsonObject &root) + { + if (!initDone) return; // prevent crash on boot applyPreset() + JsonObject usermod = root[FPSTR(_name)]; + if (!usermod.isNull()) { + if (usermod[FPSTR(_enabled)].is()) { + enabled = usermod[FPSTR(_enabled)].as(); + } + } + } + + + /** + * provide the changeable values + */ + void addToConfig(JsonObject &root) + { + JsonObject top = root.createNestedObject(FPSTR(_name)); + top[FPSTR(_enabled)] = enabled; + top[FPSTR(_switchOffDelay)] = m_switchOffDelay / 1000; + top["pin"] = PIRsensorPin; + top[FPSTR(_onPreset)] = m_onPreset; + top[FPSTR(_offPreset)] = m_offPreset; + top[FPSTR(_nightTime)] = m_nightTimeOnly; + top[FPSTR(_mqttOnly)] = m_mqttOnly; + top[FPSTR(_offOnly)] = m_offOnly; + top[FPSTR(_haDiscovery)] = HomeAssistantDiscovery; + top[FPSTR(_notify)] = (NotifyUpdateMode != CALL_MODE_NO_NOTIFY); + DEBUG_PRINTLN(F("PIR config saved.")); + } + + void appendConfigData() + { + oappend(SET_F("addInfo('PIRsensorSwitch:HA-discovery',1,'HA=Home Assistant');")); // 0 is field type, 1 is actual field + oappend(SET_F("addInfo('PIRsensorSwitch:notifications',1,'Periodic WS updates');")); // 0 is field type, 1 is actual field + } + + /** + * restore the changeable values + * readFromConfig() is called before setup() to populate properties from values stored in cfg.json + * + * The function should return true if configuration was successfully loaded or false if there was no configuration. + */ + bool readFromConfig(JsonObject &root) + { + bool oldEnabled = enabled; + int8_t oldPin = PIRsensorPin; + + DEBUG_PRINT(FPSTR(_name)); + JsonObject top = root[FPSTR(_name)]; + if (top.isNull()) { + DEBUG_PRINTLN(F(": No config found. (Using defaults.)")); + return false; + } + + PIRsensorPin = top["pin"] | PIRsensorPin; + + enabled = top[FPSTR(_enabled)] | enabled; + + m_switchOffDelay = (top[FPSTR(_switchOffDelay)] | m_switchOffDelay/1000) * 1000; + + m_onPreset = top[FPSTR(_onPreset)] | m_onPreset; + m_onPreset = max(0,min(250,(int)m_onPreset)); + m_offPreset = top[FPSTR(_offPreset)] | m_offPreset; + m_offPreset = max(0,min(250,(int)m_offPreset)); + + m_nightTimeOnly = top[FPSTR(_nightTime)] | m_nightTimeOnly; + m_mqttOnly = top[FPSTR(_mqttOnly)] | m_mqttOnly; + m_offOnly = top[FPSTR(_offOnly)] | m_offOnly; + HomeAssistantDiscovery = top[FPSTR(_haDiscovery)] | HomeAssistantDiscovery; + + NotifyUpdateMode = top[FPSTR(_notify)] ? CALL_MODE_DIRECT_CHANGE : CALL_MODE_NO_NOTIFY; + + if (!initDone) { + // reading config prior to setup() + DEBUG_PRINTLN(F(" config loaded.")); + } else { + if (oldPin != PIRsensorPin || oldEnabled != enabled) { + // check if pin is OK + if (oldPin != PIRsensorPin && oldPin >= 0) { + // if we are changing pin in settings page + // deallocate old pin + pinManager.deallocatePin(oldPin, PinOwner::UM_PIR); + if (pinManager.allocatePin(PIRsensorPin, false, PinOwner::UM_PIR)) { + pinMode(PIRsensorPin, INPUT_PULLUP); + } else { + // allocation failed + PIRsensorPin = -1; + enabled = false; + } + } + if (enabled) { + sensorPinState = digitalRead(PIRsensorPin); + } + } + DEBUG_PRINTLN(F(" config (re)loaded.")); + } + // use "return !top["newestParameter"].isNull();" when updating Usermod with new features + return !top[FPSTR(_haDiscovery)].isNull(); + } + + /** + * 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. + */ + uint16_t getId() + { + return USERMOD_ID_PIRSWITCH; + } +}; + +// strings to reduce flash memory usage (used more than twice) +const char PIRsensorSwitch::_name[] PROGMEM = "PIRsensorSwitch"; +const char PIRsensorSwitch::_enabled[] PROGMEM = "PIRenabled"; +const char PIRsensorSwitch::_switchOffDelay[] PROGMEM = "PIRoffSec"; +const char PIRsensorSwitch::_onPreset[] PROGMEM = "on-preset"; +const char PIRsensorSwitch::_offPreset[] PROGMEM = "off-preset"; +const char PIRsensorSwitch::_nightTime[] PROGMEM = "nighttime-only"; +const char PIRsensorSwitch::_mqttOnly[] PROGMEM = "mqtt-only"; +const char PIRsensorSwitch::_offOnly[] PROGMEM = "off-only"; +const char PIRsensorSwitch::_haDiscovery[] PROGMEM = "HA-discovery"; +const char PIRsensorSwitch::_notify[] PROGMEM = "notifications";