NetDebug: switch between serial/netdebug, store ip and port in settings

pio.ini: enable WLED_DEBUG_HOST in esp32_4MB_M_debug and esp32_16MB_M_debug

audio_reactive, um6050, wled.h
- replace DEBUGOUT.print(x) by DEBUGOUT(x) etc

wled.h: switch between serial/netdebug

cfg.cpp, set.cpp, wled.cpp, xml.cpp
- store netDebugPrintIP and netDebugPrintPort in cfg.json

index.js: rename info tab on off to Net Debug

settings.sync: add netdebug

net_debug.h/cpp: use global netDebugPrintIP remove debugPrintHostIP
This commit is contained in:
Ewoud
2023-02-24 15:40:16 +01:00
parent 6651b412cb
commit bb6662ee35
15 changed files with 1435 additions and 1363 deletions

View File

@@ -938,8 +938,9 @@ build_flags = ${esp32_4MB_M_base.build_flags}
-D WLED_RELEASE_NAME=esp32_4MB_M_debug -D WLED_RELEASE_NAME=esp32_4MB_M_debug
-D WLED_DEBUG ; lots of generic debug messages -D WLED_DEBUG ; lots of generic debug messages
-D SR_DEBUG ; some extra debug messages from audioreactive -D SR_DEBUG ; some extra debug messages from audioreactive
; -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible ;WLEDMM: only setting WLED_DEBUG_HOST is enough, ip and port can be defined in sync settings as well
; -D WLED_DEBUG_NET_PORT=1768 ;; port for network debugging. default = 7868 -D WLED_DEBUG_HOST='"192.168.x.x"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible
-D WLED_DEBUG_PORT=1768 ;; port for network debugging. default = 7868
; -D MIC_LOGGER ; for sound input monitoring & debugging (use arduino serial plotter) ; -D MIC_LOGGER ; for sound input monitoring & debugging (use arduino serial plotter)
monitor_filters = esp32_exception_decoder monitor_filters = esp32_exception_decoder
@@ -951,8 +952,8 @@ build_flags = ${esp32_4MB_M_base.build_flags}
-D WLED_RELEASE_NAME=esp32_16MB_M_debug -D WLED_RELEASE_NAME=esp32_16MB_M_debug
-D WLED_DEBUG ; lots of generic debug messages -D WLED_DEBUG ; lots of generic debug messages
-D SR_DEBUG ; some extra debug messages from audioreactive -D SR_DEBUG ; some extra debug messages from audioreactive
; -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible
; -D WLED_DEBUG_NET_PORT=1768 ;; port for network debugging. default = 7868 -D WLED_DEBUG_PORT=1768 ;; port for network debugging. default = 7868
; -D MIC_LOGGER ; -D MIC_LOGGER
-D CORE_DEBUG_LEVEL=4 ;; 0=none, 1=error, 2=warning, 3=info, 4=debug, 5=verbose -D CORE_DEBUG_LEVEL=4 ;; 0=none, 1=error, 2=warning, 3=info, 4=debug, 5=verbose
board = ${Board_ESP32_16MB.board} board = ${Board_ESP32_16MB.board}
@@ -1306,7 +1307,7 @@ build_flags = ${common.build_flags} ${esp32s2.build_flags}
;-D STATUSLED=-1 ;-D STATUSLED=-1
-D WLED_USE_MY_CONFIG -D WLED_USE_MY_CONFIG
; -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible ; -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible
; -D WLED_DEBUG_NET_PORT=1768 ;; port for network debugging. default = 7868 ; -D WLED_DEBUG_PORT=1768 ;; port for network debugging. default = 7868
; -D WLED_DEBUG ; -D WLED_DEBUG
; -D SR_DEBUG ; -D SR_DEBUG
; -D MIC_LOGGER ; -D MIC_LOGGER

View File

@@ -29,9 +29,9 @@
// #define SR_DEBUG // generic SR DEBUG messages // #define SR_DEBUG // generic SR DEBUG messages
#ifdef SR_DEBUG #ifdef SR_DEBUG
#define DEBUGSR_PRINT(x) DEBUGOUT.print(x) #define DEBUGSR_PRINT(x) DEBUGOUT(x)
#define DEBUGSR_PRINTLN(x) DEBUGOUT.println(x) #define DEBUGSR_PRINTLN(x) DEBUGOUTLN(x)
#define DEBUGSR_PRINTF(x...) DEBUGOUT.printf(x) #define DEBUGSR_PRINTF(x...) DEBUGOUTF(x)
#else #else
#define DEBUGSR_PRINT(x) #define DEBUGSR_PRINT(x)
#define DEBUGSR_PRINTLN(x) #define DEBUGSR_PRINTLN(x)
@@ -55,10 +55,10 @@
#endif #endif
#if defined(MIC_LOGGER) || defined(FFT_SAMPLING_LOG) #if defined(MIC_LOGGER) || defined(FFT_SAMPLING_LOG)
#define PLOT_PRINT(x) DEBUGOUT.print(x) #define PLOT_PRINT(x) DEBUGOUT(x)
#define PLOT_PRINTLN(x) DEBUGOUT.println(x) #define PLOT_PRINTLN(x) DEBUGOUTLN(x)
#define PLOT_PRINTF(x...) DEBUGOUT.printf(x) #define PLOT_PRINTF(x...) DEBUGOUTF(x)
#define PLOT_FLUSH() DEBUGOUT.flush() #define PLOT_FLUSH() DEBUGOUTFlush()
#else #else
#define PLOT_PRINT(x) #define PLOT_PRINT(x)
#define PLOT_PRINTLN(x) #define PLOT_PRINTLN(x)

View File

@@ -65,9 +65,9 @@
#undef DEBUG_PRINTF #undef DEBUG_PRINTF
#ifdef WLED_DEBUG #ifdef WLED_DEBUG
#define DEBUG_PRINT(x) DEBUGOUT.print(x) #define DEBUG_PRINT(x) DEBUGOUT(x)
#define DEBUG_PRINTLN(x) DEBUGOUT.println(x) #define DEBUG_PRINTLN(x) DEBUGOUTLN(x)
#define DEBUG_PRINTF(x...) DEBUGOUT.printf(x) #define DEBUG_PRINTF(x...) DEBUGOUTF(x)
#else #else
#define DEBUG_PRINT(x) #define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x) #define DEBUG_PRINTLN(x)

View File

@@ -18,6 +18,7 @@ void colorRGBtoRGBW(byte* rgb);
uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, byte *buffer, uint8_t bri=255, bool isRGBW=false); uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, byte *buffer, uint8_t bri=255, bool isRGBW=false);
// enable additional debug output // enable additional debug output
//WLEDMM: #define DEBUGOUT(x) netDebugEnabled?NetDebug.print(x):Serial.print(x) not supported in this file as netDebugEnabled not in scope
#if defined(WLED_DEBUG_HOST) #if defined(WLED_DEBUG_HOST)
#include "net_debug.h" #include "net_debug.h"
#define DEBUGOUT NetDebug #define DEBUGOUT NetDebug

View File

@@ -472,6 +472,15 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
CJSON(hueIP[i], if_hue_ip[i]); CJSON(hueIP[i], if_hue_ip[i]);
#endif #endif
//WLEDMM: add netdebug variables
#ifdef WLED_DEBUG_HOST
JsonObject if_ndb = interfaces["ndb"];
JsonArray if_ndb_ip = if_ndb["ip"];
for (byte i = 0; i < 4; i++)
CJSON(netDebugPrintIP[i], if_ndb_ip[i]);
CJSON(netDebugPrintPort, if_ndb["port"]);
#endif
JsonObject if_ntp = interfaces[F("ntp")]; JsonObject if_ntp = interfaces[F("ntp")];
CJSON(ntpEnabled, if_ntp["en"]); CJSON(ntpEnabled, if_ntp["en"]);
getStringFromJson(ntpServerName, if_ntp[F("host")], 33); // "1.wled.pool.ntp.org" getStringFromJson(ntpServerName, if_ntp[F("host")], 33); // "1.wled.pool.ntp.org"
@@ -930,6 +939,16 @@ void serializeConfig() {
} }
#endif #endif
//WLEDMM: add netdebug variables
#ifdef WLED_DEBUG_HOST
JsonObject if_ndb = interfaces.createNestedObject("ndb");
JsonArray if_ndb_ip = if_ndb.createNestedArray("ip");
for (byte i = 0; i < 4; i++) {
if_ndb_ip.add(netDebugPrintIP[i]);
}
if_ndb["port"] = netDebugPrintPort;
#endif
JsonObject if_ntp = interfaces.createNestedObject("ntp"); JsonObject if_ntp = interfaces.createNestedObject("ntp");
if_ntp["en"] = ntpEnabled; if_ntp["en"] = ntpEnabled;
if_ntp[F("host")] = ntpServerName; if_ntp[F("host")] = ntpServerName;

View File

@@ -670,7 +670,7 @@ function populateInfo(i)
cn += `v${i.ver} &nbsp;<i>"${vcn}"</i><p>(WLEDMM_${i.ver} ${i.rel}.bin)</p><p><em>build ${i.vid}</em></p><table> cn += `v${i.ver} &nbsp;<i>"${vcn}"</i><p>(WLEDMM_${i.ver} ${i.rel}.bin)</p><p><em>build ${i.vid}</em></p><table>
${urows} ${urows}
${urows===""?'':'<tr><td colspan=2><hr style="height:1px;border-width:0;color:SeaGreen;background-color:Seagreen"></td></tr>'} ${urows===""?'':'<tr><td colspan=2><hr style="height:1px;border-width:0;color:SeaGreen;background-color:Seagreen"></td></tr>'}
${i.opt&0x100?inforow("Debug","<button class=\"btn btn-xs\" onclick=\"requestJson({'debug':"+(i.opt&0x0080?"false":"true")+"});\"><i class=\"icons "+(i.opt&0x0080?"on":"off")+"\">&#xe08f;</i></button>"):''} ${i.opt&0x100?inforow("Net Debug","<button class=\"btn btn-xs\" onclick=\"requestJson({'debug':"+(i.opt&0x0080?"false":"true")+"});\"><i class=\"icons "+(i.opt&0x0080?"on":"off")+"\">&#xe08f;</i></button>"):''}
${inforow("Build",i.vid)} ${inforow("Build",i.vid)}
${inforow("Signal strength",i.wifi.signal +"% ("+ i.wifi.rssi, " dBm)")} ${inforow("Signal strength",i.wifi.signal +"% ("+ i.wifi.rssi, " dBm)")}
${inforow("Uptime",getRuntimeStr(i.uptime))} ${inforow("Uptime",getRuntimeStr(i.uptime))}

View File

@@ -242,6 +242,19 @@ Baud rate:
<option value=15000>1500000</option> <option value=15000>1500000</option>
</select><br> </select><br>
<i>Keep at 115200 to use Improv. Some boards may not support high rates.</i> <i>Keep at 115200 to use Improv. Some boards may not support high rates.</i>
<h3>Net Debug ☾</h3>
<div id="NoNetDebug" class="hide">
<em style="color:#fa0;">This firmware build does not include Net Debug support.<br></em>
</div>
<div id="NetDebug">
Netcat host IP:<br>
<input name="N0" type="number" class="s" min="0" max="255" > .
<input name="N1" type="number" class="s" min="0" max="255" > .
<input name="N2" type="number" class="s" min="0" max="255" > .
<input name="N3" type="number" class="s" min="0" max="255" ><br>
Netcat host Port:<br>
<input name="NP" type="number" min="0" max="99999" ><br>
</div>
<hr> <hr>
<button type="button" onclick="B()">Back</button><button type="submit">Save</button> <button type="button" onclick="B()">Back</button><button type="submit">Save</button>
</form> </form>

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +1,13 @@
#include "wled.h" #include "wled.h"
#ifdef WLED_DEBUG_HOST #ifdef WLED_DEBUG_HOST //WLEDMM: this looks unnecesarry as .h is not included anyway if no netdebug
size_t NetworkDebugPrinter::write(uint8_t c) { size_t NetworkDebugPrinter::write(uint8_t c) {
if (!WLED_CONNECTED || !netDebugEnabled) return 0; if (!WLED_CONNECTED || !netDebugEnabled) return 0;
if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) { //WLEDMM: init IP moved to initInterfaces
#ifdef ESP8266
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750);
#else
#ifdef WLED_USE_ETHERNET
ETH.hostByName(netDebugPrintHost, debugPrintHostIP);
#else
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP);
#endif
#endif
}
debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort); debugUdp.beginPacket(netDebugPrintIP, netDebugPrintPort); //WLEDMM: using netDebugPrintIP instead of debugPrintHostIP
debugUdp.write(c); debugUdp.write(c);
debugUdp.endPacket(); debugUdp.endPacket();
return 1; return 1;
@@ -26,19 +16,9 @@ size_t NetworkDebugPrinter::write(uint8_t c) {
size_t NetworkDebugPrinter::write(const uint8_t *buf, size_t size) { size_t NetworkDebugPrinter::write(const uint8_t *buf, size_t size) {
if (!WLED_CONNECTED || buf == nullptr || !netDebugEnabled) return 0; if (!WLED_CONNECTED || buf == nullptr || !netDebugEnabled) return 0;
if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) { //WLEDMM: init IP moved to initInterfaces
#ifdef ESP8266
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750);
#else
#ifdef WLED_USE_ETHERNET
ETH.hostByName(netDebugPrintHost, debugPrintHostIP);
#else
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP);
#endif
#endif
}
debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort); debugUdp.beginPacket(netDebugPrintIP, netDebugPrintPort); //WLEDMM: using netDebugPrintIP instead of debugPrintHostIP
size = debugUdp.write(buf, size); size = debugUdp.write(buf, size);
debugUdp.endPacket(); debugUdp.endPacket();
return size; return size;

View File

@@ -7,7 +7,7 @@
class NetworkDebugPrinter : public Print { class NetworkDebugPrinter : public Print {
private: private:
WiFiUDP debugUdp; // needs to be here otherwise UDP messages get truncated upon destruction WiFiUDP debugUdp; // needs to be here otherwise UDP messages get truncated upon destruction
IPAddress debugPrintHostIP; // IPAddress debugPrintHostIP;
public: public:
virtual size_t write(uint8_t c); virtual size_t write(uint8_t c);
virtual size_t write(const uint8_t *buf, size_t s); virtual size_t write(const uint8_t *buf, size_t s);

View File

@@ -350,6 +350,15 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
reconnectHue(); reconnectHue();
#endif #endif
//WLEDMM: add netdebug variables
#ifdef WLED_DEBUG_HOST
for (int i=0;i<4;i++){
String a = "N"+String(i);
netDebugPrintIP[i] = request->arg(a).toInt();
}
netDebugPrintPort = request->arg("NP").toInt();
#endif
t = request->arg(F("BD")).toInt(); t = request->arg(F("BD")).toInt();
if (t >= 96 && t <= 15000) serialBaud = t; if (t >= 96 && t <= 15000) serialBaud = t;
updateBaudRate(serialBaud *100); updateBaudRate(serialBaud *100);

View File

@@ -844,6 +844,35 @@ void WLED::initInterfaces()
} }
#endif #endif
//WLEDMM: add netdebug variables
#ifdef WLED_DEBUG_HOST
if (netDebugPrintIP[0] == 0) {
//WLEDMM: this code moved from net_debug.cpp as we store IP as IPAddress type
if (!netDebugPrintIP && !netDebugPrintIP.fromString(WLED_DEBUG_HOST)) {
#ifdef ESP8266
WiFi.hostByName(WLED_DEBUG_HOST, netDebugPrintIP, 750);
#else
#ifdef WLED_USE_ETHERNET
ETH.hostByName(WLED_DEBUG_HOST, netDebugPrintIP);
#else
WiFi.hostByName(WLED_DEBUG_HOST, netDebugPrintIP);
#endif
#endif
} else {
IPAddress ipAddress = Network.localIP();
netDebugPrintIP[0] = ipAddress[0];
netDebugPrintIP[1] = ipAddress[1];
netDebugPrintIP[2] = ipAddress[2];
}
}
if (netDebugPrintPort == 0)
#ifdef WLED_DEBUG_PORT
netDebugPrintPort = WLED_DEBUG_PORT;
#else
netDebugPrintPort = 7868; //Default value
#endif
#endif
#ifndef WLED_DISABLE_ALEXA #ifndef WLED_DISABLE_ALEXA
// init Alexa hue emulation // init Alexa hue emulation
if (alexaEnabled) if (alexaEnabled)

View File

@@ -722,28 +722,32 @@ WLED_GLOBAL StaticJsonDocument<JSON_BUFFER_SIZE> doc;
WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0); WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
// enable additional debug output // enable additional debug output
//WLEDMM: switch between netdebug and serial
#if defined(WLED_DEBUG_HOST) #if defined(WLED_DEBUG_HOST)
#include "net_debug.h" #include "net_debug.h"
// On the host side, use netcat to receive the log statements: nc -l 7868 -u // On the host side, use netcat to receive the log statements: nc -l 7868 -u
// use -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' or FQDN within quotes // use -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' or FQDN within quotes
#define DEBUGOUT NetDebug WLED_GLOBAL bool netDebugEnabled _INIT(false);
WLED_GLOBAL bool netDebugEnabled _INIT(true); WLED_GLOBAL int netDebugPrintPort _INIT(0);
WLED_GLOBAL char netDebugPrintHost[33] _INIT(WLED_DEBUG_HOST); WLED_GLOBAL IPAddress netDebugPrintIP _INIT_N(((0, 0, 0, 0))); // IP address of the bridge
#ifndef WLED_DEBUG_PORT #define DEBUGOUT(x) netDebugEnabled?NetDebug.print(x):Serial.print(x)
#define WLED_DEBUG_PORT 7868 #define DEBUGOUTLN(x) netDebugEnabled?NetDebug.println(x):Serial.println(x)
#endif #define DEBUGOUTF(x...) netDebugEnabled?NetDebug.printf(x):Serial.printf(x)
WLED_GLOBAL int netDebugPrintPort _INIT(WLED_DEBUG_PORT); #define DEBUGOUTFlush() netDebugEnabled?NetDebug.flush():Serial.flush()
#else #else
#define DEBUGOUT Serial #define DEBUGOUT(x) Serial.print(x)
#define DEBUGOUTLN(x) Serial.println(x)
#define DEBUGOUTF(x...) Serial.printf(x)
#define DEBUGOUTFlush() Serial.flush()
#endif #endif
#ifdef WLED_DEBUG #ifdef WLED_DEBUG
#ifndef ESP8266 #ifndef ESP8266
#include <rom/rtc.h> #include <rom/rtc.h>
#endif #endif
#define DEBUG_PRINT(x) DEBUGOUT.print(x) #define DEBUG_PRINT(x) DEBUGOUT(x)
#define DEBUG_PRINTLN(x) DEBUGOUT.println(x) #define DEBUG_PRINTLN(x) DEBUGOUTLN(x)
#define DEBUG_PRINTF(x...) DEBUGOUT.printf(x) #define DEBUG_PRINTF(x...) DEBUGOUTF(x)
#else #else
#define DEBUG_PRINT(x) #define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x) #define DEBUG_PRINTLN(x)
@@ -760,21 +764,21 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
#ifdef WLED_DEBUG_HOST #ifdef WLED_DEBUG_HOST
#define USER_FLUSH() {} #define USER_FLUSH() {}
#else #else
#define USER_FLUSH() {DEBUGOUT.flush();} #define USER_FLUSH() {DEBUGOUTFlush();}
#endif #endif
#else #else
// if serial is availeable, we use Serial.print directly // if serial is availeable, we use Serial.print directly
#define USER_PRINT(x) { if (canUseSerial()) DEBUGOUT.print(x); } #define USER_PRINT(x) { if (canUseSerial()) DEBUGOUT(x); }
#define USER_PRINTLN(x) { if (canUseSerial()) DEBUGOUT.println(x); } #define USER_PRINTLN(x) { if (canUseSerial()) DEBUGOUTLN(x); }
#define USER_PRINTF(x...) { if (canUseSerial()) DEBUGOUT.printf(x); } #define USER_PRINTF(x...) { if (canUseSerial()) DEBUGOUTF(x); }
#define USER_FLUSH() {DEBUGOUT.flush();} #define USER_FLUSH() {DEBUGOUTFlush();}
#endif #endif
// WLEDMM end // WLEDMM end
#ifdef WLED_DEBUG_FS #ifdef WLED_DEBUG_FS
#define DEBUGFS_PRINT(x) DEBUGOUT.print(x) #define DEBUGFS_PRINT(x) DEBUGOUT(x)
#define DEBUGFS_PRINTLN(x) DEBUGOUT.println(x) #define DEBUGFS_PRINTLN(x) DEBUGOUTLN(x)
#define DEBUGFS_PRINTF(x...) DEBUGOUT.printf(x) #define DEBUGFS_PRINTF(x...) DEBUGOUTF(x)
#else #else
#define DEBUGFS_PRINT(x) #define DEBUGFS_PRINT(x)
#define DEBUGFS_PRINTLN(x) #define DEBUGFS_PRINTLN(x)

View File

@@ -589,11 +589,22 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
#else #else
oappend(SET_F("toggle('Hue');")); // hide Hue Sync settings oappend(SET_F("toggle('Hue');")); // hide Hue Sync settings
#endif #endif
//WLEDMM: add netdebug variables
#ifdef WLED_DEBUG_HOST
sappend('v',SET_F("N0"),netDebugPrintIP[0]);
sappend('v',SET_F("N1"),netDebugPrintIP[1]);
sappend('v',SET_F("N2"),netDebugPrintIP[2]);
sappend('v',SET_F("N3"),netDebugPrintIP[3]);
sappend('v',SET_F("NP"),netDebugPrintPort);
#endif
sappend('v',SET_F("BD"),serialBaud); sappend('v',SET_F("BD"),serialBaud);
#ifdef WLED_ENABLE_LOXONE #ifdef WLED_ENABLE_LOXONE
oappend(SET_F("hideNoLOX();")); // WLEDMM hide "not compiled in" message oappend(SET_F("hideNoLOX();")); // WLEDMM hide "not compiled in" message
#endif #endif
} }
if (subPage == 5) if (subPage == 5)