Gzipped UIs, improving speed and flash usage

This commit is contained in:
cschwinne 2018-11-16 19:59:00 +01:00
parent 2126e42743
commit 071ebe6ef2
19 changed files with 2146 additions and 274 deletions

View File

@ -18,7 +18,7 @@ monitor_speed = 115200
board_build.flash_mode = dout board_build.flash_mode = dout
upload_speed = 921600 upload_speed = 921600
build_flags = build_flags =
; -D VERSION=0.9.0-dev ; -D VERSION=0.8.2-dev
; -D DEBUG ; -D DEBUG
# TODO replace libs in /lib with managed libs in here if possible. # TODO replace libs in /lib with managed libs in here if possible.
# If they are not changed it's just a metter of setting the correfct version and change the import statement # If they are not changed it's just a metter of setting the correfct version and change the import statement
@ -42,12 +42,12 @@ build_flags =
platform = espressif8266@1.7.0 platform = espressif8266@1.7.0
build_flags = build_flags =
-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
-D WLED_DISABLE_MOBILE_UI ; -D WLED_DISABLE_MOBILE_UI
-D WLED_DISABLE_OTA -D WLED_DISABLE_OTA
-D WLED_DISABLE_ALEXA -D WLED_DISABLE_ALEXA
; -D WLED_DISABLE_BLYNK ; -D WLED_DISABLE_BLYNK
; -D WLED_DISABLE_CRONIXIE ; -D WLED_DISABLE_CRONIXIE
; -D WLED_DISABLE_HUESYNC -D WLED_DISABLE_HUESYNC
[common:esp32] [common:esp32]
platform = espressif32@1.5.0 platform = espressif32@1.5.0

View File

@ -1,6 +1,6 @@
![WLED logo](https://raw.githubusercontent.com/Aircoookie/WLED/development/wled_logo.png) ![WLED logo](https://raw.githubusercontent.com/Aircoookie/WLED/development/wled_logo.png)
## Welcome to my project WLED! (v0.8.1) ## Welcome to my project WLED! (v0.8.2-dev)
A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B) LEDs! A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B) LEDs!

View File

@ -2430,8 +2430,6 @@ uint16_t WS2812FX::mode_noise16_2(void)
uint16_t shift_y = SEGMENT_RUNTIME.counter_mode_step/42; uint16_t shift_y = SEGMENT_RUNTIME.counter_mode_step/42;
uint32_t real_x = (i + shift_x) * scale; // calculate the coordinates within the noise field uint32_t real_x = (i + shift_x) * scale; // calculate the coordinates within the noise field
uint32_t real_y = (i + shift_y) * scale; // based on the precalculated positions
uint32_t real_z = 4223;
uint8_t noise = inoise16(real_x, 0, 4223) >> 8; // get the noise data and scale it down uint8_t noise = inoise16(real_x, 0, 4223) >> 8; // get the noise data and scale it down

View File

@ -44,9 +44,9 @@
#define FASTLED_INTERNAL //remove annoying pragma messages #define FASTLED_INTERNAL //remove annoying pragma messages
#include "FastLED.h" #include "FastLED.h"
#define DEFAULT_BRIGHTNESS (uint8_t)50 #define DEFAULT_BRIGHTNESS (uint8_t)127
#define DEFAULT_MODE (uint8_t)0 #define DEFAULT_MODE (uint8_t)0
#define DEFAULT_SPEED (uint16_t)1000 #define DEFAULT_SPEED (uint8_t)128
#define DEFAULT_COLOR (uint32_t)0xFF0000 #define DEFAULT_COLOR (uint32_t)0xFF0000
#define min(a,b) ((a)<(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b))
@ -173,7 +173,7 @@ class WS2812FX {
typedef struct Segment { // 21 bytes typedef struct Segment { // 21 bytes
uint16_t start; uint16_t start;
uint16_t stop; uint16_t stop;
uint16_t speed; uint8_t speed;
uint8_t intensity; uint8_t intensity;
uint8_t palette; uint8_t palette;
uint8_t mode; uint8_t mode;
@ -480,9 +480,9 @@ class WS2812FX {
uint8_t _segment_index = 0; uint8_t _segment_index = 0;
uint8_t _segment_index_palette_last = 99; uint8_t _segment_index_palette_last = 99;
uint8_t _num_segments = 1; uint8_t _num_segments = 1;
segment _segments[MAX_NUM_SEGMENTS] = { // SRAM footprint: 20 bytes per element segment _segments[MAX_NUM_SEGMENTS] = { // SRAM footprint: 21 bytes per element
// start, stop, speed, intensity, palette, mode, options, color[] // start, stop, speed, intensity, palette, mode, options, color[]
{0, 7, DEFAULT_SPEED, 128, 0, FX_MODE_STATIC, NO_OPTIONS, {DEFAULT_COLOR}} { 0, 7, DEFAULT_SPEED, 128, 0, FX_MODE_STATIC, NO_OPTIONS, {DEFAULT_COLOR}}
}; };
segment_runtime _segment_runtimes[MAX_NUM_SEGMENTS]; // SRAM footprint: 17 bytes per element segment_runtime _segment_runtimes[MAX_NUM_SEGMENTS]; // SRAM footprint: 17 bytes per element
}; };

View File

@ -2,7 +2,7 @@
<html> <html>
<head><meta charset="utf-8"><meta name="theme-color" content="#fff"> <head><meta charset="utf-8"><meta name="theme-color" content="#fff">
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico'/> <link rel='shortcut icon' type='image/x-icon' href='/favicon.ico'/>
<title>WLED 0.8.1</title> <title>WLED 0.8.2</title>
<script> <script>
var d=document; var d=document;
var w=window.getComputedStyle(d.querySelector("html")); var w=window.getComputedStyle(d.querySelector("html"));
@ -26,14 +26,17 @@
{ {
return d.getElementById(s); return d.getElementById(s);
} }
function UCol()
function Startup()
{ {
var w=window.getComputedStyle(d.querySelector("html"));
aC = w.getPropertyValue("--aCol"); aC = w.getPropertyValue("--aCol");
bC = w.getPropertyValue("--bCol"); bC = w.getPropertyValue("--bCol");
dC = w.getPropertyValue("--dCol"); dC = w.getPropertyValue("--dCol");
d.querySelector("meta[name=theme-color]").setAttribute("content",bC); d.querySelector("meta[name=theme-color]").setAttribute("content",bC);
}
function Startup()
{
var w=window.getComputedStyle(d.querySelector("html"));
UCol();
CV(0); CV(0);
setInterval('GIO()', 5000); setInterval('GIO()', 5000);
GIO(); GIO();
@ -63,10 +66,18 @@
d.Cf.IX.value = this.responseXML.getElementsByTagName('ix')[0].childNodes[0].nodeValue; d.Cf.IX.value = this.responseXML.getElementsByTagName('ix')[0].childNodes[0].nodeValue;
nla = (this.responseXML.getElementsByTagName('nl')[0].innerHTML)!=0?true:false; nla = (this.responseXML.getElementsByTagName('nl')[0].innerHTML)!=0?true:false;
if(firstload){ if(firstload){
d.Cf.NC.checked = (this.responseXML.getElementsByTagName('nf')[0].innerHTML)!=0?true:false; d.Cf.NC.checked = (this.responseXML.getElementsByTagName('nf')[0].innerHTML)!=0?true:false;
d.Cf.SN.value = this.responseXML.getElementsByTagName('nd')[0].childNodes[0].nodeValue; d.Cf.SN.value = this.responseXML.getElementsByTagName('nd')[0].childNodes[0].nodeValue;
d.Cf.ST.value = this.responseXML.getElementsByTagName('nt')[0].childNodes[0].nodeValue; d.Cf.ST.value = this.responseXML.getElementsByTagName('nt')[0].childNodes[0].nodeValue;
CV(parseInt(this.responseXML.getElementsByTagName('md')[0].childNodes[0].nodeValue)); d.documentElement.style.setProperty("--aCol",this.responseXML.getElementsByTagName('ca')[0].childNodes[0].nodeValue);
d.documentElement.style.setProperty("--bCol",this.responseXML.getElementsByTagName('cb')[0].childNodes[0].nodeValue);
d.documentElement.style.setProperty("--cCol",this.responseXML.getElementsByTagName('cc')[0].childNodes[0].nodeValue);
d.documentElement.style.setProperty("--dCol",this.responseXML.getElementsByTagName('cd')[0].childNodes[0].nodeValue);
d.documentElement.style.setProperty("--sCol",this.responseXML.getElementsByTagName('cs')[0].childNodes[0].nodeValue);
d.documentElement.style.setProperty("--tCol",this.responseXML.getElementsByTagName('ct')[0].childNodes[0].nodeValue);
d.documentElement.style.setProperty("--cFn",this.responseXML.getElementsByTagName('cf')[0].childNodes[0].nodeValue);
UCol();
CV(parseInt(this.responseXML.getElementsByTagName('md')[0].childNodes[0].nodeValue));
}firstload=false; }firstload=false;
nState = 0; nState = 0;
nState = (this.responseXML.getElementsByTagName('nr')[0].innerHTML)!=0?1:0; nState = (this.responseXML.getElementsByTagName('nr')[0].innerHTML)!=0?1:0;
@ -77,6 +88,7 @@
} }
} }
} }
if (firstload) resp+="&IT"
request.open("GET", "win" +resp +nocache, true); request.open("GET", "win" +resp +nocache, true);
request.send(null); request.send(null);
resp=""; resp="";
@ -302,7 +314,6 @@
rr=diffc(r); rr=diffc(r);
gg=diffc(g); gg=diffc(g);
bb=diffc(b); bb=diffc(b);
if(r===v) { if(r===v) {
h=bb-gg; h=bb-gg;
}else if (g===v){ }else if (g===v){

View File

@ -434,7 +434,7 @@
<li onclick="X(72)">Noise 16 3</li> <li onclick="X(72)">Noise 16 3</li>
<li onclick="X(73)">Noise 16 4</li> <li onclick="X(73)">Noise 16 4</li>
<li onclick="X(74)">Colortwinkle</li> <li onclick="X(74)">Colortwinkle</li>
<li onclick="X(75)">Colortwinkle</li>&nbsp; <li onclick="X(75)">Lake</li>&nbsp;
<li><a href="#">Go to top</a></li>&nbsp; <li><a href="#">Go to top</a></li>&nbsp;
<p style="margin-left:-37px">FastLED Palette (Effects 56-73)</p> <p style="margin-left:-37px">FastLED Palette (Effects 56-73)</p>
<li onclick="P(0)">Default</li> <li onclick="P(0)">Default</li>

Binary file not shown.

Binary file not shown.

710
wled00/html_classic.h Normal file
View File

@ -0,0 +1,710 @@
/*
* Binary arrays for the classic desktop UI index page.
* gzip is used for smaller size and improved speeds.
*
* Workflow for creating them from HTML source:
* 1. Minify HTML (https://htmlcompressor.com/compressor/) (optional)
* 2. Compress with gzip (https://online-converting.com/archives/convert-to-gzip/)
* 3. Convert gzip binary to c array (https://sourceforge.net/projects/bin2header/)
* alternative: https://littlevgl.com/image-to-c-array (raw)
* 4. update length value
*/
const uint16_t PAGE_index0_L = 11090;
const char PAGE_index0[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x08, 0x07, 0xb7, 0xee, 0x5b, 0x00, 0x03, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65,
0x73, 0x73, 0x65, 0x64, 0x20, 0x28, 0x35, 0x29, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x00, 0xcc, 0x5a,
0x09, 0x6f, 0xdb, 0xc6, 0xb6, 0xfe, 0x2b, 0xac, 0x82, 0xb6, 0x52, 0x2d, 0xd2, 0xe4, 0x70, 0x97,
0x4c, 0x17, 0x89, 0xdb, 0x2c, 0x40, 0xe2, 0x1a, 0xb1, 0x6f, 0x9b, 0xa2, 0x28, 0x02, 0x8a, 0xa4,
0x2c, 0xc6, 0x14, 0xa9, 0x4b, 0x52, 0x5e, 0xea, 0xfa, 0xbf, 0xbf, 0xef, 0xcc, 0x0c, 0x25, 0x52,
0xde, 0xa4, 0xdc, 0xbe, 0xfb, 0x5e, 0x80, 0x50, 0x9a, 0x39, 0x33, 0x73, 0x96, 0xef, 0x6c, 0x43,
0xf9, 0xe0, 0x9b, 0x9f, 0x7e, 0x39, 0x3a, 0xfb, 0xfd, 0xe4, 0x67, 0x65, 0x56, 0xcf, 0xb3, 0xc3,
0x03, 0xf9, 0x4c, 0xc2, 0xf8, 0xf0, 0x60, 0x9e, 0xd4, 0xa1, 0x12, 0xcd, 0xc2, 0xb2, 0x4a, 0xea,
0x60, 0x59, 0x4f, 0x55, 0x4f, 0xce, 0xe5, 0xe1, 0x3c, 0x09, 0xea, 0x59, 0x32, 0x4f, 0xd4, 0xa8,
0xc8, 0x8a, 0x52, 0x89, 0x8a, 0xbc, 0x4e, 0xf2, 0x3a, 0x78, 0x31, 0x9d, 0x4e, 0x0f, 0x0f, 0xb2,
0x34, 0xbf, 0x50, 0xca, 0x24, 0x0b, 0xbe, 0xaf, 0x66, 0x45, 0x59, 0x47, 0xcb, 0x5a, 0x49, 0xb1,
0xe2, 0x7b, 0xa5, 0xbe, 0x59, 0x24, 0x41, 0x3a, 0x0f, 0xcf, 0x93, 0xfd, 0x6b, 0x95, 0xa6, 0x94,
0x59, 0x99, 0x4c, 0x83, 0xef, 0xf7, 0xa7, 0xe1, 0x25, 0x0d, 0x35, 0x3c, 0xbe, 0xdf, 0x3f, 0x3c,
0xa8, 0xd3, 0x3a, 0x4b, 0x0e, 0x7f, 0x7b, 0xff, 0xf3, 0x4f, 0x8a, 0xae, 0x79, 0x1a, 0x3b, 0xd8,
0x17, 0x33, 0xca, 0x41, 0x15, 0x95, 0xe9, 0xa2, 0x3e, 0xbc, 0x0c, 0x4b, 0x25, 0x0e, 0xe2, 0x22,
0x5a, 0xce, 0xc1, 0x76, 0x4c, 0xc3, 0xab, 0xe0, 0x2a, 0xcd, 0xe3, 0xe2, 0x4a, 0x3b, 0x4f, 0xea,
0xa3, 0x62, 0xbe, 0x58, 0xd6, 0x49, 0x7c, 0x5a, 0xdf, 0x64, 0x49, 0x3f, 0xd6, 0xfe, 0xbd, 0x4c,
0xca, 0x9b, 0xd3, 0x24, 0x4b, 0xa2, 0xba, 0x28, 0xfb, 0x3d, 0xd2, 0xb1, 0x37, 0x18, 0x8c, 0xcb,
0xa4, 0x5a, 0x04, 0xbd, 0x1e, 0xdf, 0x9e, 0x67, 0x61, 0x30, 0x0d, 0xb3, 0x2a, 0x11, 0xa3, 0xb2,
0x33, 0xaa, 0xda, 0xa3, 0xaa, 0x2e, 0x5a, 0xa3, 0xe5, 0xd5, 0x65, 0x9b, 0x36, 0x99, 0x06, 0x75,
0xb9, 0x14, 0x83, 0x69, 0x5a, 0x56, 0x75, 0x56, 0x84, 0xf1, 0x7a, 0x2a, 0x0b, 0xab, 0xba, 0xba,
0x0e, 0x74, 0x71, 0xec, 0x69, 0x1d, 0xd6, 0x89, 0x1c, 0x44, 0x97, 0xf2, 0x4b, 0x36, 0xc7, 0x97,
0xf0, 0x88, 0xe4, 0x9a, 0xf0, 0x67, 0xcc, 0x9f, 0xd3, 0x65, 0x1e, 0xd5, 0x29, 0x2c, 0x76, 0xfe,
0x2e, 0xee, 0x87, 0x83, 0xdb, 0x32, 0xa9, 0x97, 0x65, 0xae, 0xc4, 0xa4, 0xee, 0xcf, 0x59, 0x42,
0x66, 0x78, 0x75, 0xc3, 0x49, 0x77, 0xab, 0xa5, 0xff, 0x3a, 0x2a, 0xb2, 0xfe, 0xe0, 0x16, 0x87,
0x71, 0xab, 0x9c, 0x94, 0xc5, 0x22, 0x29, 0xeb, 0x9b, 0x5f, 0xc3, 0x6c, 0x99, 0xf4, 0x7b, 0xaa,
0x1a, 0x82, 0xde, 0x1b, 0x10, 0x9b, 0x87, 0xe9, 0x13, 0x41, 0x8f, 0x1f, 0xa3, 0xc7, 0x92, 0xbe,
0x69, 0x5f, 0xf2, 0x91, 0x3f, 0x36, 0x7d, 0xe4, 0xcf, 0xde, 0x40, 0x83, 0x1f, 0xbd, 0xac, 0xeb,
0x32, 0x9d, 0x00, 0x9c, 0x7e, 0x4f, 0x3a, 0x4d, 0x6f, 0x38, 0x39, 0x6a, 0x09, 0x0d, 0xa3, 0x94,
0xf5, 0x72, 0x01, 0xb9, 0xc9, 0x1a, 0xe1, 0xee, 0xa8, 0x0a, 0xad, 0xc7, 0x47, 0xbf, 0xf6, 0xf5,
0xc1, 0x18, 0x1c, 0xdf, 0x81, 0x4b, 0x79, 0x19, 0x66, 0xfd, 0xde, 0x9b, 0x77, 0xbf, 0xf4, 0x07,
0xbd, 0xa1, 0xad, 0xeb, 0xa0, 0xf0, 0xc1, 0x9a, 0x2d, 0x1f, 0xde, 0xe6, 0x45, 0x14, 0x46, 0xb3,
0x24, 0xe8, 0x7d, 0xb7, 0xfa, 0xb6, 0xf7, 0x21, 0xac, 0x67, 0x5a, 0x19, 0x42, 0x8a, 0x79, 0x7f,
0xf0, 0x83, 0xa1, 0xf3, 0x7f, 0x63, 0x21, 0x5c, 0x9e, 0x5c, 0x29, 0x9f, 0x3e, 0xbc, 0x7f, 0x5b,
0xd7, 0x8b, 0x8f, 0x09, 0xe4, 0xa9, 0x6a, 0x70, 0x0e, 0xb5, 0x22, 0x2f, 0x11, 0x40, 0x37, 0x15,
0xe1, 0x8b, 0xf8, 0xc9, 0xcf, 0x93, 0xa0, 0x61, 0x04, 0x26, 0xe9, 0xb4, 0x5f, 0xcf, 0xd2, 0x4a,
0xe3, 0x6b, 0x84, 0x0f, 0x04, 0xd6, 0x7a, 0x9a, 0x76, 0x2d, 0xab, 0x20, 0x60, 0x90, 0xb2, 0xb5,
0xb6, 0x5a, 0x14, 0x79, 0x95, 0x80, 0xd9, 0x37, 0x41, 0xbe, 0xcc, 0xb2, 0xc1, 0x6d, 0xac, 0x1d,
0x4d, 0xb5, 0xd3, 0x97, 0xda, 0x25, 0xc1, 0x11, 0x6c, 0xae, 0x6a, 0xf9, 0x45, 0xf5, 0xea, 0xe6,
0x2c, 0x3c, 0x3f, 0x06, 0x1e, 0xfd, 0x5e, 0x18, 0xf5, 0x06, 0x7f, 0xe8, 0x7f, 0x6a, 0xd1, 0x2c,
0xcd, 0xe2, 0xe3, 0x22, 0x4e, 0x2a, 0x1a, 0xe5, 0xf8, 0xc2, 0x51, 0x1d, 0x8b, 0x43, 0x3f, 0xee,
0x76, 0x68, 0x94, 0x6d, 0x73, 0xe8, 0x9b, 0xaf, 0x38, 0xd4, 0x78, 0xee, 0xd0, 0x57, 0x5f, 0x71,
0x28, 0x7b, 0xfc, 0xd0, 0x07, 0xcc, 0xfd, 0xc8, 0x49, 0x57, 0x97, 0x4f, 0xea, 0x7c, 0x18, 0xe8,
0x0d, 0x42, 0xbf, 0xed, 0x26, 0xe2, 0x33, 0x07, 0x8f, 0x29, 0xe1, 0x50, 0x3e, 0xb9, 0x4b, 0x90,
0x74, 0x6e, 0x57, 0xe9, 0xe7, 0x0e, 0xac, 0xce, 0x3e, 0x21, 0xc2, 0x28, 0x1c, 0x92, 0xf8, 0x5d,
0x1e, 0x27, 0xd7, 0xdb, 0xb2, 0x9c, 0x5e, 0x3f, 0xcd, 0x12, 0x47, 0xbf, 0x3e, 0xf9, 0xca, 0xa3,
0x17, 0xdb, 0xb8, 0xc6, 0xa7, 0xdd, 0x4c, 0x54, 0x3d, 0x23, 0x2f, 0x3f, 0xf4, 0xdd, 0x8e, 0x87,
0xa6, 0xcf, 0x1c, 0x4a, 0x05, 0x62, 0x5b, 0xe7, 0xc8, 0x65, 0x40, 0xa4, 0x79, 0x9e, 0x94, 0x6f,
0xcf, 0x3e, 0xbc, 0x1f, 0x7c, 0x13, 0xe8, 0x3f, 0x12, 0x6a, 0x23, 0x51, 0x2b, 0xe0, 0x67, 0xab,
0xea, 0x20, 0xfd, 0xe4, 0xf8, 0x08, 0xac, 0x93, 0xe8, 0x22, 0x89, 0xb7, 0x67, 0x33, 0x7d, 0x86,
0x8d, 0xb0, 0xee, 0xf1, 0x6e, 0x86, 0xc8, 0xe3, 0x6d, 0x20, 0x3b, 0xdb, 0xf1, 0xd0, 0xfa, 0xb9,
0x43, 0x9b, 0x62, 0x2e, 0x37, 0x23, 0x0d, 0x22, 0xcb, 0x53, 0xc5, 0x68, 0xca, 0xce, 0xaa, 0x62,
0x0d, 0xb7, 0x0d, 0xf6, 0xf0, 0x49, 0x9e, 0x83, 0x6d, 0x99, 0x4e, 0x76, 0x62, 0x3a, 0xf9, 0x67,
0x98, 0x46, 0x3b, 0x31, 0x7d, 0x3a, 0xab, 0x6f, 0xcd, 0x34, 0xde, 0x89, 0xe9, 0xd3, 0x7e, 0xb2,
0x35, 0xd3, 0x6a, 0x27, 0xa6, 0xd5, 0x3f, 0xc3, 0xb4, 0xde, 0x89, 0xe9, 0xd3, 0xce, 0xbb, 0x3d,
0xa6, 0xaf, 0xf3, 0xed, 0x79, 0x4e, 0x9f, 0xe1, 0xb9, 0x6e, 0x73, 0x16, 0xd4, 0xa0, 0xa3, 0xcb,
0xd9, 0x36, 0x6d, 0xcc, 0x9f, 0x01, 0x0e, 0x5d, 0xd1, 0xaa, 0x73, 0x15, 0x79, 0x64, 0xd5, 0xa9,
0xca, 0x2f, 0x5b, 0x27, 0xa8, 0xf2, 0xa1, 0x04, 0x65, 0x8c, 0x9a, 0x83, 0xf6, 0xb6, 0x3f, 0xa9,
0x7a, 0xe8, 0x24, 0x86, 0x93, 0xe2, 0xee, 0x8e, 0x23, 0xb4, 0xd8, 0x95, 0xd8, 0x03, 0xc5, 0xa2,
0x8d, 0x5d, 0xdb, 0xa6, 0xab, 0x78, 0x93, 0xdd, 0xf8, 0x5f, 0xbf, 0xa2, 0x5b, 0xc4, 0xbf, 0x8d,
0xd4, 0x4d, 0x47, 0xed, 0xa1, 0x5d, 0x7c, 0x77, 0xd6, 0xbb, 0x43, 0xdf, 0xb7, 0x48, 0x72, 0xb4,
0x99, 0x3f, 0x9f, 0xf5, 0x86, 0x3d, 0xf4, 0xad, 0xbd, 0x3d, 0x4e, 0x96, 0xad, 0xe4, 0x90, 0x12,
0x33, 0x75, 0x87, 0x55, 0x92, 0xc7, 0x7d, 0xde, 0xc3, 0x35, 0x37, 0x90, 0x56, 0x1b, 0x7a, 0xd4,
0x5f, 0x1f, 0xfa, 0x12, 0xdd, 0x67, 0xab, 0xc7, 0x1b, 0x37, 0xf3, 0x1f, 0xe5, 0xfc, 0xc7, 0x8d,
0xf9, 0x37, 0x72, 0xfe, 0xcd, 0xc6, 0xfc, 0x2b, 0x39, 0x2f, 0x9b, 0x25, 0x52, 0x01, 0x7d, 0xc3,
0x9a, 0xcf, 0x6f, 0x92, 0x2e, 0x3b, 0x95, 0x3b, 0xd2, 0xf5, 0x5e, 0x7f, 0xfc, 0xa9, 0x25, 0xd8,
0xeb, 0x4f, 0x62, 0xc7, 0x66, 0xc3, 0xb1, 0xe2, 0x78, 0x2a, 0x17, 0x34, 0x95, 0x7d, 0x45, 0x78,
0x27, 0x09, 0x4d, 0x75, 0x1e, 0x3f, 0xc8, 0x2b, 0xa9, 0x3f, 0xbe, 0x79, 0xd5, 0xdc, 0x00, 0x86,
0xd9, 0x30, 0x1f, 0x7e, 0x19, 0xce, 0x87, 0xc9, 0x30, 0x1a, 0x2e, 0x79, 0xe3, 0x7d, 0x11, 0x88,
0x22, 0xf4, 0x56, 0x1c, 0x32, 0xbc, 0x96, 0xe3, 0x53, 0x39, 0x2e, 0x02, 0x66, 0xdb, 0xe3, 0x2f,
0x01, 0x6f, 0xdd, 0xa7, 0x59, 0x81, 0xeb, 0xc1, 0xc5, 0x0f, 0xce, 0x60, 0x3c, 0x0f, 0xf0, 0xa1,
0x7e, 0x19, 0x27, 0x41, 0xf1, 0x43, 0xdf, 0x50, 0xaf, 0x07, 0xe3, 0x48, 0x7c, 0x9b, 0xff, 0x80,
0xef, 0x4b, 0xf1, 0x9d, 0x86, 0x03, 0x1a, 0x57, 0x57, 0x69, 0x1d, 0xcd, 0xfa, 0x5f, 0xbe, 0x75,
0x06, 0xb7, 0x51, 0x58, 0x25, 0x8a, 0x3e, 0x0a, 0x83, 0x62, 0x98, 0x05, 0xcb, 0x61, 0x1e, 0x24,
0xe3, 0x09, 0xfa, 0xf7, 0x8b, 0x31, 0x27, 0x18, 0x20, 0x44, 0x20, 0x14, 0x9b, 0x04, 0x06, 0x42,
0x22, 0x09, 0xcb, 0x36, 0xc1, 0x94, 0x84, 0x08, 0x84, 0xa2, 0x4d, 0xb0, 0x40, 0x58, 0x82, 0x90,
0x6c, 0x12, 0x6c, 0xc9, 0x9c, 0x08, 0xd1, 0x5d, 0xb7, 0x4f, 0x0f, 0x37, 0x5a, 0xec, 0x6c, 0xa3,
0x3b, 0xce, 0xc7, 0xe4, 0x57, 0x2d, 0x03, 0x9f, 0xb4, 0xc1, 0x3c, 0x11, 0x90, 0x6c, 0xb6, 0x78,
0x9b, 0xa8, 0x20, 0xd3, 0x84, 0xfc, 0x42, 0x82, 0x0b, 0xf0, 0xe0, 0xf6, 0x28, 0x2b, 0xaa, 0xe4,
0x34, 0xa9, 0xeb, 0x34, 0x3f, 0xaf, 0xb0, 0x8c, 0xae, 0xa5, 0xbd, 0x2a, 0x7b, 0x49, 0xb7, 0x3c,
0x9e, 0xfb, 0xe2, 0xb4, 0x5a, 0x64, 0xe1, 0x4d, 0xd0, 0xcb, 0x8b, 0x3c, 0xe9, 0x8d, 0x05, 0xbd,
0x3c, 0x9f, 0x3c, 0xbd, 0x60, 0x56, 0x3d, 0x4d, 0xcf, 0x7e, 0x7b, 0x92, 0x5e, 0x67, 0x9f, 0x9e,
0xa1, 0x9f, 0x3c, 0x43, 0x3f, 0x7e, 0x8c, 0x0e, 0xc5, 0xc3, 0x03, 0xc6, 0x0d, 0xc0, 0x83, 0xe7,
0x71, 0x79, 0x26, 0x59, 0x11, 0x5d, 0xf4, 0x9e, 0xb0, 0x88, 0x5c, 0x20, 0xfd, 0x2b, 0x5c, 0x79,
0xd7, 0x13, 0x36, 0x12, 0x5b, 0xc6, 0xfc, 0xe5, 0x40, 0xc7, 0xf1, 0x1e, 0x37, 0xdb, 0x7a, 0x8b,
0xd1, 0x75, 0xc9, 0xc7, 0x2d, 0x21, 0xb7, 0x74, 0xfc, 0xf4, 0x71, 0xbb, 0xde, 0x5f, 0x6d, 0x8d,
0x1e, 0xb7, 0xa2, 0x54, 0x3a, 0xba, 0x84, 0xb7, 0xce, 0xe3, 0x89, 0x24, 0x4f, 0xd3, 0x2c, 0x0b,
0xfa, 0xd9, 0xfc, 0x50, 0x1f, 0xfc, 0x18, 0x1e, 0x8d, 0xe2, 0xa3, 0xb5, 0xbf, 0xc1, 0x0e, 0x6c,
0x96, 0x5c, 0xf7, 0x29, 0xec, 0x43, 0x91, 0x0b, 0x26, 0x41, 0xf8, 0x77, 0x3f, 0x3a, 0x38, 0xf0,
0x06, 0x7f, 0xf7, 0x93, 0x83, 0x03, 0xc3, 0xa1, 0x0c, 0x4a, 0xef, 0x41, 0x7a, 0x2f, 0x7a, 0x7b,
0x7d, 0xc3, 0x71, 0x5d, 0x97, 0x19, 0xce, 0xde, 0x64, 0xa0, 0xd5, 0xc5, 0x69, 0x5d, 0xc2, 0x35,
0x31, 0x09, 0x49, 0xb2, 0x34, 0x4a, 0xfa, 0x46, 0xcb, 0x97, 0x33, 0x90, 0xca, 0x30, 0x6e, 0xce,
0x96, 0x87, 0x60, 0x36, 0x09, 0x4b, 0x95, 0x28, 0x29, 0x0a, 0x42, 0xbf, 0xb7, 0x37, 0x39, 0xda,
0x43, 0x2a, 0xdf, 0xeb, 0x8a, 0xb2, 0xd7, 0x1b, 0xb4, 0x32, 0x36, 0x25, 0x30, 0x74, 0xf0, 0x93,
0x22, 0xbe, 0x91, 0x3a, 0x4d, 0xc2, 0xe8, 0xe2, 0xbc, 0x2c, 0x96, 0x79, 0x1c, 0x34, 0x7c, 0x5a,
0xc1, 0x3a, 0x6c, 0x05, 0xea, 0xb0, 0x15, 0xa4, 0xfc, 0x5d, 0xc5, 0xdb, 0xd3, 0xed, 0x96, 0x4e,
0xaf, 0xbb, 0x06, 0xe4, 0xe1, 0xbe, 0x99, 0x8d, 0x57, 0x36, 0xc5, 0xdd, 0xa5, 0xbb, 0x1c, 0x77,
0x99, 0x15, 0xa9, 0x7e, 0x94, 0x24, 0xfd, 0x53, 0x94, 0xea, 0xae, 0x93, 0x2e, 0x90, 0x58, 0x8d,
0x15, 0xc6, 0x7c, 0x27, 0x36, 0xac, 0x48, 0xec, 0x1e, 0xe9, 0xbe, 0xcf, 0x3e, 0x70, 0x44, 0xb8,
0xed, 0x11, 0xec, 0x6b, 0xa4, 0x08, 0x8f, 0x1e, 0x70, 0xec, 0xdd, 0xa4, 0x08, 0x8f, 0xee, 0xea,
0xf3, 0xae, 0xbd, 0x5a, 0xf5, 0x79, 0x6d, 0xef, 0xe9, 0xe2, 0xd3, 0x86, 0xfb, 0xf7, 0x1f, 0xc1,
0x47, 0x86, 0xc5, 0x48, 0x26, 0x99, 0x69, 0x31, 0xdd, 0x3c, 0xfd, 0xde, 0x2e, 0xc7, 0x5a, 0xb1,
0x99, 0x97, 0xcf, 0xad, 0x3e, 0x30, 0xee, 0xc5, 0xd5, 0xd9, 0xf9, 0x99, 0x78, 0x09, 0xd5, 0x15,
0x7d, 0x55, 0x0f, 0xce, 0x02, 0xbd, 0x37, 0x6e, 0xbf, 0x5a, 0xd2, 0xc5, 0xab, 0x86, 0x35, 0x9d,
0xf5, 0x1e, 0x6c, 0x11, 0x4e, 0xaf, 0x5e, 0x7f, 0xea, 0xaf, 0x22, 0xf5, 0x01, 0x61, 0xf6, 0x42,
0xca, 0xa2, 0x93, 0x20, 0x50, 0x8d, 0xbf, 0xff, 0xc6, 0x87, 0xeb, 0x34, 0xa1, 0xf7, 0xe0, 0xdb,
0x8b, 0x09, 0x5f, 0x7d, 0x00, 0xd1, 0x1e, 0xa2, 0xea, 0x77, 0x44, 0x3d, 0x74, 0xed, 0x87, 0xc9,
0x8e, 0x7d, 0x47, 0x2d, 0x4b, 0x5b, 0xed, 0xb7, 0xa7, 0xaf, 0x84, 0xe2, 0xd1, 0x25, 0x25, 0x72,
0x7c, 0x0c, 0x7e, 0xe4, 0x6f, 0x09, 0x47, 0x78, 0x22, 0x3b, 0x70, 0x2d, 0xf1, 0x35, 0x9b, 0xa3,
0xd3, 0x6b, 0x69, 0x45, 0x51, 0x70, 0x72, 0x4a, 0x9a, 0xf1, 0x30, 0x7b, 0xfd, 0x5a, 0xda, 0x65,
0xd5, 0x77, 0x77, 0xa6, 0x07, 0x42, 0xcb, 0xce, 0x1c, 0x50, 0xd8, 0xd8, 0x6b, 0xdc, 0x6d, 0xae,
0x39, 0x64, 0xf6, 0xe6, 0x22, 0x66, 0xb7, 0xe4, 0x38, 0x79, 0x59, 0xaf, 0x8a, 0xb6, 0xd8, 0xf9,
0x6a, 0xf5, 0xc6, 0x00, 0x7e, 0xf4, 0xdd, 0xc9, 0xcb, 0xc0, 0x80, 0x1f, 0xd1, 0x27, 0xf0, 0x6b,
0xaf, 0x3b, 0xea, 0xae, 0x3b, 0x92, 0xeb, 0x8e, 0x36, 0xd7, 0xbd, 0xee, 0xae, 0xfb, 0x24, 0xd7,
0x7d, 0xc2, 0xba, 0x96, 0x18, 0xa7, 0x00, 0x1d, 0xa6, 0xe0, 0xe2, 0xf0, 0xa2, 0xb8, 0xf6, 0x9c,
0x93, 0xd3, 0xa0, 0x39, 0xb1, 0xa3, 0x48, 0xd7, 0x7f, 0x4e, 0xde, 0x3f, 0xb2, 0x6a, 0xc3, 0x9d,
0x7e, 0x41, 0x33, 0xbd, 0x6e, 0x30, 0x6e, 0xe9, 0xb5, 0x3b, 0x7f, 0x8f, 0x5e, 0x75, 0x33, 0x16,
0xc2, 0x35, 0x8a, 0x5f, 0x3d, 0x5c, 0xb3, 0xab, 0x7a, 0xba, 0x49, 0x48, 0x73, 0xca, 0xf2, 0xbc,
0x9c, 0x57, 0x93, 0x29, 0x1d, 0x8b, 0x25, 0x65, 0x14, 0xf4, 0xf6, 0x2b, 0xc9, 0x0b, 0x85, 0x79,
0x32, 0x95, 0x2f, 0xd5, 0xd6, 0xcd, 0x4f, 0xb7, 0xdd, 0xb9, 0x5d, 0xff, 0x08, 0xb0, 0x21, 0x4e,
0xfc, 0xa0, 0x38, 0x0d, 0xd7, 0x07, 0x04, 0xe2, 0x92, 0xb6, 0xdd, 0xf4, 0xb4, 0xff, 0x78, 0x97,
0xc5, 0x0d, 0xd9, 0x35, 0xcc, 0x5d, 0x7b, 0xef, 0x31, 0xbd, 0xef, 0xa7, 0x37, 0x55, 0xdf, 0xe0,
0x41, 0x3a, 0x52, 0x3a, 0x5f, 0x59, 0xfe, 0x18, 0x96, 0xdf, 0xeb, 0xbc, 0x13, 0x5a, 0xf5, 0xe5,
0xc7, 0x67, 0x2b, 0xd2, 0x59, 0x87, 0xd4, 0xdf, 0x78, 0x39, 0x45, 0xae, 0x71, 0xfc, 0x5a, 0xb8,
0x06, 0x3e, 0xe1, 0x1a, 0x1d, 0x70, 0xc1, 0x42, 0x7f, 0x38, 0x3b, 0x40, 0x38, 0x92, 0x4d, 0xdc,
0xfb, 0xf6, 0xb8, 0x6c, 0xfc, 0xfb, 0xa1, 0xd9, 0xcc, 0x22, 0xa4, 0x1f, 0x2e, 0x39, 0xab, 0x5b,
0xc5, 0x71, 0xa0, 0x7f, 0xf7, 0xf1, 0x98, 0xfc, 0xb6, 0x53, 0x4f, 0x36, 0xe9, 0x46, 0xaf, 0x5b,
0x2c, 0x5a, 0x74, 0xe3, 0xfe, 0x7e, 0xf3, 0x1e, 0xdd, 0x78, 0x58, 0x03, 0x51, 0x9f, 0x45, 0x7e,
0x4b, 0x86, 0x17, 0xb8, 0x93, 0x84, 0x41, 0x58, 0x9e, 0xf3, 0x7b, 0x3f, 0x5d, 0xa1, 0xf7, 0x71,
0xe9, 0x18, 0xa6, 0xad, 0x29, 0x43, 0x4c, 0x65, 0xad, 0x29, 0x26, 0xa6, 0xa6, 0x43, 0xba, 0x11,
0xf0, 0xeb, 0xc9, 0x3c, 0xbc, 0xee, 0x87, 0xc3, 0x74, 0x98, 0x0d, 0x86, 0xf3, 0x20, 0x57, 0xc5,
0x5c, 0x9a, 0x37, 0x73, 0xd1, 0xfa, 0x97, 0x83, 0x49, 0x93, 0x2d, 0xfb, 0xb9, 0x3a, 0x19, 0xec,
0x3b, 0xfb, 0xf3, 0x3d, 0x63, 0x9f, 0xf1, 0x1b, 0xe9, 0x3c, 0xa0, 0xf7, 0xcd, 0xd3, 0xa0, 0x68,
0x92, 0x75, 0x11, 0xcc, 0xf7, 0x73, 0xdc, 0x73, 0x22, 0xc4, 0xe7, 0xf8, 0x02, 0x1f, 0xe9, 0x00,
0xf7, 0xa1, 0xa8, 0x9f, 0x89, 0x98, 0x0d, 0x82, 0x20, 0xa7, 0xf5, 0x5f, 0xd4, 0x0b, 0xb1, 0x1e,
0x93, 0x69, 0x33, 0xd9, 0x37, 0xf6, 0xcd, 0xc1, 0x5e, 0xa2, 0x7e, 0x59, 0x91, 0xb2, 0x15, 0x89,
0x11, 0xe9, 0x42, 0x4d, 0x70, 0x13, 0xa6, 0x8b, 0x30, 0x25, 0xe7, 0xe9, 0x1e, 0xb2, 0x59, 0xb3,
0x72, 0x7a, 0x88, 0x54, 0x37, 0x55, 0x31, 0xc3, 0x17, 0x14, 0x87, 0xab, 0xd7, 0xe0, 0xf2, 0xae,
0x16, 0x4c, 0xef, 0x3a, 0x77, 0xb5, 0xa0, 0x68, 0x05, 0x19, 0x4f, 0xb2, 0xf7, 0xda, 0xe2, 0x15,
0x3c, 0xbf, 0x3d, 0x86, 0xfb, 0xab, 0xc7, 0x00, 0xff, 0xb8, 0xe1, 0x0b, 0x2d, 0xac, 0x4f, 0x36,
0x3a, 0xd7, 0x15, 0xe1, 0xa8, 0xd7, 0xbd, 0x76, 0xb5, 0x0e, 0x83, 0x6b, 0x6f, 0xf8, 0xc4, 0xf2,
0xe8, 0xf7, 0x7e, 0x93, 0x0c, 0x3b, 0x39, 0xf7, 0xf7, 0x76, 0xc0, 0x1c, 0xfd, 0x2e, 0x02, 0x06,
0x9f, 0xab, 0x9c, 0x8b, 0x44, 0x68, 0x88, 0x8b, 0xd7, 0x89, 0xb1, 0x11, 0x8c, 0x27, 0x4c, 0x12,
0xd8, 0x26, 0xe1, 0x4c, 0x12, 0x9a, 0x18, 0xdd, 0x90, 0xe6, 0x63, 0xeb, 0x5a, 0x77, 0x42, 0x91,
0x28, 0x17, 0x8c, 0x0f, 0xf6, 0xe5, 0x0f, 0xa7, 0xca, 0x01, 0x4f, 0x3f, 0x87, 0xa3, 0xb2, 0x28,
0xea, 0x5b, 0xf1, 0x42, 0x75, 0xf4, 0x22, 0xf6, 0x27, 0xa6, 0xa1, 0x8f, 0xc5, 0xab, 0xce, 0xd1,
0x0b, 0x7d, 0x62, 0x46, 0x76, 0x3c, 0x16, 0x2f, 0x21, 0x47, 0x2f, 0x8c, 0x98, 0xb9, 0xa6, 0x31,
0x16, 0xaf, 0x07, 0x47, 0x2f, 0x4c, 0xe6, 0x45, 0x11, 0x0d, 0x2b, 0xb1, 0x58, 0xa7, 0x8d, 0x75,
0x97, 0x14, 0xbd, 0xce, 0x47, 0xbf, 0x26, 0x65, 0x1c, 0xe6, 0xe1, 0x9d, 0x16, 0xd5, 0x65, 0xf6,
0x79, 0x52, 0x5c, 0xdf, 0xce, 0x11, 0x07, 0x69, 0x3e, 0x0a, 0x97, 0x75, 0x31, 0xbe, 0x4a, 0xe3,
0x7a, 0x36, 0xf2, 0xf4, 0xcb, 0xab, 0xf1, 0xba, 0x5f, 0x16, 0xbf, 0x14, 0x8e, 0x10, 0x60, 0x7d,
0xc1, 0x7c, 0x30, 0x5e, 0x14, 0x55, 0x4a, 0xba, 0x8d, 0xc2, 0x49, 0x55, 0x64, 0xcb, 0x3a, 0x19,
0xd7, 0xc5, 0x62, 0x64, 0xdb, 0xdf, 0x8e, 0xb3, 0x64, 0x5a, 0x8f, 0x6c, 0xfd, 0xdb, 0x71, 0x5d,
0x86, 0x79, 0x35, 0x2d, 0xca, 0xf9, 0x88, 0x7f, 0xcb, 0x90, 0x3a, 0xfa, 0x2a, 0x08, 0x43, 0x7a,
0xa0, 0x57, 0x4e, 0xb3, 0x3a, 0x29, 0x47, 0x71, 0x59, 0x2c, 0xd4, 0x6a, 0x16, 0xc6, 0xc5, 0x15,
0xa8, 0x8b, 0x6b, 0x85, 0x3f, 0xe8, 0xbf, 0x60, 0x47, 0xda, 0x0c, 0x06, 0x77, 0x5a, 0x15, 0x57,
0xb7, 0x42, 0x38, 0x43, 0xc7, 0xe1, 0xb3, 0x24, 0x3d, 0x9f, 0xd5, 0x23, 0x83, 0x5d, 0xce, 0xc6,
0x42, 0x7e, 0x95, 0x04, 0xc0, 0x10, 0x4b, 0x33, 0xa9, 0x92, 0xca, 0x65, 0xe1, 0x7a, 0xc9, 0x89,
0x92, 0xef, 0x6a, 0xcf, 0xc8, 0x5d, 0x52, 0x71, 0xd7, 0xbd, 0xbc, 0xba, 0x7b, 0x81, 0xdb, 0xe1,
0x6d, 0x8b, 0xac, 0x83, 0xbc, 0x36, 0xc6, 0x68, 0xf3, 0x3a, 0x52, 0x17, 0x0a, 0x3f, 0x76, 0x38,
0xc9, 0xb0, 0x68, 0x78, 0x93, 0x64, 0x59, 0x71, 0x35, 0xa0, 0x53, 0x3e, 0xde, 0x6e, 0xbf, 0xad,
0x84, 0x4b, 0xd2, 0x9e, 0x37, 0x3b, 0xec, 0x39, 0x2f, 0x93, 0x24, 0xe7, 0xbb, 0x5e, 0xed, 0xb0,
0x6b, 0x42, 0xdd, 0x10, 0x6d, 0xfa, 0x6d, 0x87, 0x4d, 0x57, 0xb3, 0xb4, 0x16, 0xbb, 0xde, 0x6e,
0xb5, 0x0b, 0xea, 0x0c, 0x8b, 0x92, 0x7e, 0x62, 0x95, 0x06, 0x11, 0xc2, 0x0e, 0xa3, 0x9b, 0x30,
0xe7, 0x12, 0x0c, 0x2f, 0xd3, 0x22, 0x4b, 0xea, 0x95, 0xde, 0xa7, 0x5b, 0x1d, 0x8b, 0x43, 0x6e,
0x5a, 0x6a, 0x1f, 0xef, 0xa0, 0x01, 0x32, 0xf4, 0xbf, 0x97, 0x45, 0x5a, 0x09, 0x2d, 0xce, 0x76,
0xd8, 0xd9, 0x20, 0x8a, 0xdb, 0x6b, 0x91, 0x55, 0xff, 0xb1, 0x6f, 0x7d, 0xfa, 0x2a, 0xb3, 0xbf,
0xdb, 0xd5, 0x97, 0xe8, 0xe6, 0x7b, 0x3b, 0x2d, 0xf2, 0x5a, 0x9d, 0x86, 0xf3, 0x34, 0xbb, 0x69,
0xc2, 0xf7, 0x75, 0x3e, 0x18, 0xbe, 0x4d, 0xb2, 0xcb, 0xa4, 0x4e, 0xa3, 0x70, 0x58, 0x21, 0x32,
0xd5, 0x2a, 0x29, 0xd3, 0xe9, 0xb8, 0x4e, 0xae, 0x6b, 0x35, 0xcc, 0xd2, 0xf3, 0x7c, 0x14, 0x25,
0xf4, 0xe3, 0xfc, 0x53, 0x4e, 0x2f, 0x0e, 0xa3, 0xbc, 0x34, 0x10, 0x4c, 0x07, 0xab, 0x90, 0xa4,
0xf0, 0x94, 0x29, 0x45, 0x6f, 0x27, 0x91, 0x32, 0x59, 0x24, 0x61, 0x3d, 0xca, 0x0b, 0xf9, 0xad,
0x4d, 0x0b, 0xeb, 0x3a, 0x8c, 0x66, 0x54, 0x8b, 0x47, 0xd3, 0xf4, 0x3a, 0x89, 0xc7, 0xed, 0x8c,
0x43, 0x49, 0x6c, 0x70, 0x47, 0x7f, 0x47, 0x70, 0xdb, 0xe2, 0x81, 0x3a, 0x56, 0x86, 0xf3, 0xe4,
0x56, 0x76, 0x6c, 0x23, 0x6a, 0xd8, 0xc6, 0x93, 0xa2, 0x8c, 0x91, 0x54, 0xf4, 0xdd, 0xb2, 0xcb,
0xf8, 0x91, 0x0c, 0x28, 0xb9, 0x39, 0x94, 0x00, 0xfe, 0xe3, 0x84, 0x77, 0x57, 0x5d, 0x9e, 0xdf,
0x52, 0x2f, 0x2a, 0xb5, 0x8a, 0x79, 0x1e, 0x95, 0x29, 0x8d, 0xad, 0xb9, 0x19, 0xfa, 0x25, 0xfa,
0x8c, 0x1d, 0xd3, 0x63, 0x9a, 0x2f, 0x96, 0xf5, 0xed, 0x6e, 0x4a, 0x3f, 0xe2, 0x1b, 0x6b, 0x8f,
0xb8, 0x9b, 0x2c, 0xeb, 0xba, 0xc8, 0xdb, 0x8e, 0xd7, 0x82, 0xbd, 0x03, 0x91, 0x50, 0x46, 0x5a,
0x5f, 0xb3, 0xa3, 0x99, 0x02, 0x23, 0xa5, 0xb1, 0xd2, 0x5e, 0x2f, 0x83, 0x62, 0x52, 0xe0, 0xd0,
0xf9, 0xc8, 0x80, 0x4d, 0xff, 0x69, 0x79, 0xc5, 0x55, 0x73, 0x1b, 0x79, 0xeb, 0x2d, 0xe4, 0xfd,
0xa7, 0xa5, 0xe3, 0x18, 0xfd, 0xc1, 0xff, 0xd6, 0x2a, 0x5f, 0xce, 0x27, 0x49, 0xf9, 0xe7, 0x3f,
0x25, 0xa9, 0x70, 0x22, 0x33, 0x99, 0xb7, 0x79, 0xf0, 0xe4, 0xfb, 0xe7, 0xad, 0x7a, 0x95, 0x4c,
0x2e, 0x52, 0x04, 0xf6, 0x02, 0x31, 0x87, 0xb9, 0x28, 0x11, 0x91, 0x22, 0x5d, 0x5e, 0xb5, 0xa0,
0x88, 0x7e, 0x7f, 0xdf, 0x68, 0x5a, 0x44, 0xcb, 0xea, 0xb6, 0x58, 0xd6, 0x14, 0xf9, 0xa3, 0x87,
0x56, 0x8c, 0x9a, 0xa3, 0x2b, 0xc8, 0x93, 0x94, 0x6a, 0xb9, 0xcc, 0xf3, 0x70, 0x92, 0x25, 0x2a,
0xbc, 0x3f, 0xba, 0x78, 0xac, 0x58, 0x47, 0xcb, 0xb2, 0x82, 0x72, 0x8b, 0x22, 0xdd, 0x4c, 0x31,
0x2d, 0x8d, 0xb6, 0xe0, 0x56, 0xcf, 0x60, 0xc3, 0x1d, 0x3d, 0x7e, 0x1d, 0x61, 0x4d, 0x4e, 0x36,
0x36, 0x6a, 0xbb, 0x58, 0x1e, 0x0a, 0x14, 0xba, 0x92, 0x3e, 0x6d, 0x48, 0x9e, 0xeb, 0xe1, 0xd3,
0x0f, 0x4a, 0x3e, 0x2f, 0xfe, 0x52, 0xf9, 0xe0, 0x7f, 0xcb, 0x34, 0x2d, 0x06, 0xff, 0x6d, 0xb3,
0x6c, 0xa3, 0x7e, 0xf5, 0xb5, 0x7a, 0xf3, 0x3c, 0xba, 0x08, 0x4b, 0xfa, 0x63, 0x42, 0x11, 0x02,
0xb2, 0x15, 0x6d, 0x13, 0xee, 0xcd, 0x3c, 0x26, 0x04, 0x25, 0x5f, 0x15, 0x95, 0x3c, 0x29, 0xdb,
0x81, 0xf7, 0xe2, 0x59, 0xe3, 0xca, 0x9d, 0x4b, 0x00, 0xbf, 0xf3, 0x4e, 0x81, 0xc7, 0xce, 0x56,
0x6d, 0x41, 0x72, 0x87, 0x4b, 0x02, 0xbf, 0x1b, 0xc8, 0x3b, 0x82, 0x92, 0xc6, 0xc1, 0xac, 0xc8,
0x60, 0x8b, 0x2f, 0xc8, 0x2c, 0x7c, 0x86, 0x73, 0xa5, 0xf2, 0xbd, 0x1f, 0x55, 0xd5, 0x61, 0xb3,
0xfe, 0x60, 0x5f, 0xfc, 0xb9, 0x28, 0x35, 0x02, 0x4a, 0x91, 0xf3, 0xdf, 0x8d, 0x57, 0x7f, 0xc5,
0xa7, 0x44, 0xf4, 0x83, 0x6c, 0xf0, 0xf9, 0x33, 0x6a, 0x67, 0x9a, 0x7f, 0xa6, 0xcd, 0x9f, 0x3f,
0xfe, 0xfc, 0xf2, 0xa7, 0xdf, 0x3f, 0x7f, 0x26, 0x46, 0x8b, 0x30, 0x97, 0x2b, 0xe8, 0xd7, 0xda,
0xc3, 0xf7, 0xd8, 0x9b, 0xe6, 0xe7, 0x9a, 0xa6, 0xe1, 0x70, 0xd0, 0x68, 0xc9, 0xe5, 0xb9, 0xc2,
0xf9, 0x04, 0xf7, 0x2b, 0xa3, 0x50, 0x57, 0x6f, 0xb4, 0xd0, 0xc7, 0xc5, 0x65, 0x52, 0x4e, 0x61,
0xf9, 0xd1, 0x2c, 0x8d, 0xe3, 0x24, 0x57, 0x30, 0xac, 0xb0, 0x23, 0x30, 0x34, 0x43, 0xb9, 0x9e,
0x67, 0x79, 0x15, 0xcc, 0xea, 0x7a, 0x31, 0xda, 0xdf, 0xbf, 0xba, 0xba, 0xd2, 0xae, 0x4c, 0xad,
0x28, 0xcf, 0xf7, 0x19, 0x6e, 0x30, 0xfb, 0xe0, 0x02, 0x5e, 0x71, 0x32, 0xad, 0x0e, 0x95, 0xfd,
0xfd, 0xf7, 0xbc, 0x09, 0xa1, 0xbf, 0x48, 0xad, 0xb4, 0xa8, 0x98, 0xef, 0x4f, 0xd1, 0x08, 0x42,
0x92, 0x9b, 0xf9, 0xa4, 0xc8, 0xc8, 0x2c, 0x59, 0x5e, 0xaa, 0x0b, 0xc2, 0x57, 0x15, 0x97, 0x55,
0xe5, 0x32, 0x4d, 0xae, 0x5e, 0x15, 0xd7, 0x41, 0x4f, 0x57, 0x74, 0xc5, 0xd0, 0x99, 0xc5, 0x1f,
0xbd, 0xc3, 0x03, 0x7a, 0x89, 0xac, 0xc4, 0x41, 0xef, 0x83, 0xe5, 0x39, 0x9a, 0xa5, 0x38, 0x86,
0xa5, 0x59, 0x91, 0x8a, 0xa7, 0x61, 0x7a, 0x8a, 0xae, 0x32, 0x5b, 0x73, 0x54, 0xc3, 0xd0, 0x2c,
0xc7, 0x10, 0xdf, 0xe9, 0x71, 0xa9, 0x5a, 0x8e, 0xae, 0x79, 0x91, 0xde, 0xac, 0xe3, 0x0b, 0x18,
0xa7, 0x29, 0xab, 0x55, 0x15, 0x1f, 0x0a, 0x92, 0xb2, 0x22, 0x5d, 0xca, 0xad, 0x0a, 0xdf, 0xea,
0xab, 0x2d, 0xfa, 0x7a, 0xff, 0x5f, 0x10, 0x6c, 0x9f, 0x24, 0xbb, 0x27, 0x9f, 0xef, 0x32, 0xec,
0x56, 0x21, 0xbc, 0x66, 0xbb, 0x90, 0xcf, 0xf0, 0x7d, 0xd5, 0xf4, 0x35, 0xdf, 0xb2, 0x54, 0xe6,
0x1a, 0x9a, 0x6d, 0xe2, 0x40, 0xa6, 0x59, 0xae, 0x8a, 0x75, 0x36, 0xf3, 0x9a, 0x0f, 0x39, 0x69,
0x38, 0x9e, 0xe6, 0x3b, 0xcd, 0x48, 0x6c, 0xc0, 0x21, 0x9e, 0xa5, 0x99, 0xbe, 0xad, 0x30, 0x47,
0xf3, 0x6c, 0x48, 0xe4, 0xc0, 0x04, 0xae, 0xa7, 0xb8, 0xae, 0xe6, 0xb8, 0x38, 0xd6, 0xc4, 0x2a,
0xdf, 0x52, 0x2c, 0x5f, 0x33, 0x6c, 0x15, 0x34, 0xdf, 0xb0, 0xa1, 0x15, 0x0e, 0x72, 0x49, 0x7a,
0x13, 0x5b, 0x61, 0x4c, 0xdf, 0xd1, 0x1c, 0x66, 0xa9, 0x86, 0xe9, 0x68, 0xb6, 0x6e, 0x28, 0x98,
0xb6, 0x6d, 0xd5, 0xd2, 0x74, 0xd3, 0x52, 0x98, 0xab, 0x79, 0xba, 0xad, 0x98, 0x9a, 0xe3, 0x99,
0x0a, 0x0e, 0xf3, 0xc8, 0x60, 0xae, 0xc6, 0x4c, 0xab, 0x52, 0xc5, 0xa4, 0x58, 0xa1, 0x8a, 0x49,
0xb9, 0x04, 0x3a, 0x92, 0x5e, 0xb6, 0xad, 0x58, 0x86, 0xe6, 0xd8, 0x24, 0x87, 0xab, 0xb9, 0x3a,
0xc3, 0x56, 0x58, 0x60, 0x3d, 0x34, 0x0d, 0x5f, 0xd3, 0x19, 0x23, 0x54, 0x3d, 0x30, 0xd5, 0x61,
0x71, 0x48, 0xca, 0x20, 0x93, 0x69, 0x62, 0x61, 0xfb, 0x59, 0xf1, 0xa7, 0xda, 0xa1, 0xab, 0xfc,
0xc9, 0x91, 0x74, 0x34, 0xc3, 0x73, 0x55, 0x1f, 0xc7, 0xda, 0x30, 0x8d, 0xab, 0x99, 0xae, 0xe4,
0x62, 0xa8, 0x82, 0x09, 0xa9, 0x07, 0xb5, 0x98, 0xd0, 0x4b, 0x65, 0x86, 0xc6, 0x1c, 0xd8, 0xd4,
0xd3, 0x98, 0xe7, 0x49, 0xe1, 0x55, 0xa9, 0x1f, 0xad, 0x60, 0x72, 0xb9, 0x42, 0x2b, 0x7c, 0xb9,
0x5c, 0x68, 0xe7, 0x8a, 0xe5, 0x36, 0xb7, 0xb1, 0x05, 0xcc, 0x4d, 0xcd, 0xe0, 0x92, 0xbb, 0x9a,
0x05, 0xc3, 0xc3, 0xe0, 0x1e, 0x13, 0x36, 0x35, 0xf1, 0x09, 0x9b, 0x5a, 0xbe, 0xaf, 0xd8, 0xf0,
0x1b, 0xc3, 0x51, 0x1c, 0x57, 0x33, 0x0c, 0xb1, 0xd3, 0xb5, 0xf9, 0x16, 0x06, 0x33, 0xc8, 0xa1,
0x00, 0xcb, 0x13, 0x3e, 0x0e, 0x0f, 0x11, 0xbe, 0x41, 0x67, 0x41, 0x01, 0x9d, 0x49, 0xe4, 0x15,
0xe9, 0x2a, 0xc2, 0x39, 0x14, 0xfe, 0xe1, 0x48, 0xe7, 0x50, 0xba, 0xce, 0x21, 0x46, 0x2d, 0x7f,
0xdc, 0x17, 0x41, 0x76, 0xb8, 0x19, 0x6d, 0x59, 0x5a, 0xd5, 0x5b, 0x44, 0x99, 0xef, 0x7b, 0xf0,
0x62, 0x0f, 0xf6, 0x64, 0x33, 0xd5, 0x75, 0xbc, 0xe7, 0x42, 0xad, 0x7a, 0x30, 0xb4, 0x66, 0xb4,
0x53, 0x04, 0x10, 0x18, 0xad, 0xe3, 0xcc, 0x58, 0xc7, 0x59, 0xa5, 0xb6, 0x66, 0x9e, 0x8e, 0x2c,
0x21, 0x93, 0xed, 0x98, 0xff, 0xef, 0x64, 0x32, 0x75, 0xf7, 0x29, 0x99, 0xd8, 0xd7, 0xca, 0xc4,
0xbe, 0x4a, 0x26, 0xd7, 0xa1, 0x48, 0xb2, 0x3d, 0x4a, 0x90, 0x16, 0xd3, 0x4c, 0x8b, 0x12, 0x10,
0x4d, 0xaa, 0x26, 0x32, 0x06, 0xf9, 0x13, 0x7d, 0xa7, 0x47, 0xd5, 0x9a, 0x50, 0x56, 0xb3, 0x8a,
0x38, 0x80, 0x93, 0x94, 0x35, 0xa9, 0x35, 0xb1, 0x5e, 0xf6, 0x97, 0xe0, 0xc6, 0x6c, 0x47, 0x68,
0x0e, 0x8f, 0x17, 0x9a, 0x73, 0x05, 0x3c, 0x7b, 0x2d, 0x69, 0x25, 0x26, 0xd6, 0x1a, 0xad, 0x1f,
0x6a, 0x8b, 0xa4, 0xb6, 0x26, 0xd6, 0x66, 0x53, 0x9f, 0xd4, 0x55, 0x16, 0x83, 0x07, 0x74, 0x35,
0xd6, 0xba, 0x62, 0x5e, 0x2e, 0x78, 0x50, 0xe9, 0xea, 0x41, 0xa5, 0x91, 0xff, 0xf9, 0x26, 0xff,
0x49, 0xed, 0x6d, 0x83, 0xfd, 0x1f, 0x6a, 0xef, 0xb9, 0xfa, 0xf3, 0xda, 0x3f, 0x8b, 0xb4, 0xb1,
0x25, 0xd2, 0x2b, 0x1f, 0xff, 0x2f, 0xe9, 0xfa, 0x58, 0x1e, 0x9b, 0x17, 0x45, 0xbe, 0x45, 0x1e,
0xb3, 0x99, 0x05, 0xa1, 0x69, 0x96, 0xa4, 0xd6, 0x35, 0xc3, 0xf5, 0x49, 0x6c, 0x24, 0x4d, 0xdf,
0xf1, 0x54, 0xdb, 0x42, 0x06, 0x07, 0xb6, 0x18, 0xea, 0x3e, 0x6a, 0x8b, 0x6d, 0xa2, 0x8a, 0x54,
0xf2, 0x13, 0x45, 0x45, 0x47, 0x11, 0x6d, 0x46, 0x72, 0x11, 0x95, 0x20, 0xc3, 0xd6, 0x18, 0x92,
0x35, 0xca, 0x03, 0xc3, 0xf1, 0xba, 0x41, 0xbc, 0x1d, 0xcd, 0xf7, 0x91, 0xc6, 0x61, 0x19, 0x1b,
0x85, 0xc2, 0x34, 0x79, 0x39, 0xb7, 0x50, 0x75, 0x1d, 0xd4, 0x00, 0x93, 0x57, 0x68, 0x0f, 0xcd,
0x93, 0x4d, 0x35, 0xd9, 0xd7, 0x4c, 0x66, 0xf3, 0x1c, 0x6f, 0x32, 0x53, 0x41, 0x41, 0xd3, 0x6d,
0x9d, 0x2a, 0x92, 0x85, 0xbe, 0x01, 0xb5, 0xc4, 0xb1, 0x54, 0xdb, 0xd6, 0x2c, 0xd2, 0x06, 0xb5,
0xc4, 0x02, 0x1b, 0xb0, 0x66, 0xb0, 0x9a, 0x8f, 0xc2, 0x82, 0x02, 0xa5, 0xf9, 0xa8, 0xdc, 0x4c,
0xe7, 0x2b, 0x74, 0xcd, 0x34, 0x1d, 0xea, 0x08, 0x7c, 0xb4, 0x19, 0xa8, 0x5f, 0x8c, 0x55, 0xa8,
0x84, 0x54, 0xb9, 0x51, 0x24, 0x50, 0xaa, 0x4c, 0x4d, 0x77, 0x50, 0xda, 0x3d, 0x48, 0x89, 0x08,
0x85, 0x58, 0x3a, 0x26, 0xd1, 0x1c, 0x98, 0x68, 0x69, 0x2c, 0x0f, 0xb5, 0xd3, 0x57, 0x0c, 0x58,
0x1c, 0x15, 0x7a, 0x35, 0xf4, 0x4d, 0x01, 0x2e, 0x8a, 0x14, 0x8a, 0x92, 0x8b, 0x09, 0xa8, 0x0b,
0x31, 0x4d, 0x7c, 0x74, 0x9e, 0xa8, 0x70, 0x96, 0x61, 0x91, 0xe5, 0x71, 0xbe, 0xeb, 0x02, 0x4b,
0x1b, 0x27, 0x18, 0xcd, 0x09, 0xe2, 0x40, 0x0f, 0x52, 0x1b, 0xba, 0x8b, 0x5a, 0x0c, 0x13, 0x90,
0xd4, 0x86, 0x89, 0x6e, 0xc2, 0x72, 0x7c, 0x29, 0x94, 0x90, 0x90, 0x5c, 0xc6, 0xa0, 0x9e, 0x01,
0x64, 0x8b, 0xeb, 0x61, 0x49, 0xa5, 0x22, 0x3a, 0xd5, 0x43, 0xde, 0x23, 0x14, 0x5c, 0x93, 0x0a,
0xa5, 0x67, 0xc1, 0x88, 0x3a, 0x74, 0xf0, 0xa4, 0x65, 0x1c, 0x69, 0x28, 0x9b, 0x8c, 0x68, 0x38,
0x8e, 0x62, 0xc1, 0x87, 0xd0, 0x03, 0xc1, 0x04, 0x36, 0xe2, 0x03, 0xea, 0x01, 0x9a, 0xc6, 0xdc,
0x8d, 0xf9, 0x7d, 0x1d, 0x75, 0x13, 0xb6, 0x80, 0x8e, 0xbe, 0x47, 0xfd, 0x99, 0x66, 0x52, 0x69,
0xdf, 0x00, 0x52, 0x8e, 0xff, 0xfa, 0x00, 0x33, 0xa3, 0x83, 0x72, 0x69, 0xbd, 0xe7, 0x53, 0xb2,
0x43, 0x35, 0x76, 0x2d, 0x83, 0xb0, 0xf5, 0x3d, 0xe4, 0x73, 0x70, 0x31, 0x40, 0x66, 0xf0, 0x31,
0x1d, 0xcd, 0x59, 0x33, 0xb6, 0x18, 0x9d, 0x4b, 0x46, 0x62, 0x0e, 0x64, 0x03, 0xc2, 0x8c, 0x2a,
0xb5, 0x0d, 0x19, 0xc9, 0x2b, 0x3a, 0x4f, 0xc3, 0xf3, 0x79, 0x63, 0xa5, 0x23, 0x79, 0xc3, 0x92,
0x86, 0x25, 0xdb, 0x00, 0xbb, 0x39, 0xa5, 0x39, 0x55, 0xb5, 0x31, 0x4d, 0xc2, 0xfa, 0xd4, 0x44,
0xa0, 0xc9, 0x24, 0xbb, 0xa3, 0x3d, 0xf3, 0x39, 0xd1, 0x40, 0xe3, 0x6a, 0x83, 0x65, 0x33, 0xc4,
0xa7, 0x4f, 0x8d, 0x17, 0x22, 0x8b, 0xc1, 0xd6, 0xd8, 0xad, 0x53, 0xa3, 0x88, 0x28, 0x87, 0xe8,
0x26, 0x50, 0x43, 0xe6, 0xa0, 0x92, 0xe4, 0xa3, 0xe3, 0x71, 0x7c, 0xfe, 0xe1, 0xca, 0x49, 0x6a,
0x9e, 0xc8, 0xc1, 0x9d, 0xd5, 0x58, 0x6c, 0xa2, 0x64, 0x0a, 0x11, 0x0d, 0xd3, 0x00, 0xba, 0x20,
0xea, 0x80, 0x12, 0xdd, 0x4c, 0x57, 0x80, 0x2d, 0x82, 0x38, 0x2a, 0xce, 0xb7, 0x88, 0x61, 0x13,
0x50, 0x91, 0x5b, 0xe9, 0x60, 0xe3, 0xda, 0x76, 0x84, 0x08, 0x30, 0x74, 0x0a, 0x63, 0x0b, 0x61,
0xe8, 0xa9, 0x3a, 0xfa, 0x35, 0xa6, 0x3a, 0xe4, 0x6b, 0x2a, 0xb5, 0x5e, 0x2a, 0xd0, 0xf7, 0x5d,
0x9e, 0x59, 0x3c, 0xdd, 0x24, 0x9c, 0x0d, 0xca, 0xdf, 0xc0, 0xc5, 0xa2, 0x56, 0x0f, 0x0e, 0x83,
0xa0, 0x46, 0xe4, 0x33, 0x83, 0x96, 0xf8, 0x0c, 0x49, 0x11, 0x51, 0x81, 0x86, 0xdc, 0x21, 0xdf,
0x64, 0x8c, 0x08, 0x3e, 0x75, 0xc7, 0x94, 0x07, 0x4d, 0x8b, 0xdc, 0x11, 0xce, 0x0c, 0x3b, 0xf8,
0x0c, 0x7e, 0x47, 0xe0, 0xf9, 0xbc, 0x7d, 0x84, 0x9f, 0xc9, 0x11, 0x1c, 0xdd, 0xf7, 0xc9, 0xc2,
0xb6, 0xc3, 0x8d, 0x44, 0x02, 0x90, 0x61, 0xd1, 0xda, 0x59, 0xdd, 0x27, 0xfc, 0x9b, 0x51, 0xde,
0xc4, 0xc9, 0x3a, 0xf9, 0x29, 0x50, 0x5d, 0x6d, 0x97, 0x87, 0xe1, 0xc3, 0x30, 0x4d, 0x85, 0xfa,
0x74, 0xea, 0xee, 0x28, 0x52, 0x15, 0x50, 0x98, 0x14, 0x87, 0x49, 0xd9, 0x90, 0x78, 0x0c, 0x44,
0x15, 0xf9, 0x14, 0xa3, 0xdc, 0x6f, 0xe9, 0x9e, 0xea, 0x91, 0xd7, 0xd8, 0x42, 0x37, 0x43, 0xaa,
0x4a, 0xd1, 0x66, 0x9a, 0x26, 0x1d, 0xeb, 0x7b, 0x3e, 0xa2, 0xcd, 0x87, 0xb3, 0x3a, 0x54, 0xd2,
0x14, 0x83, 0x78, 0x70, 0xcb, 0xe0, 0x83, 0xb7, 0xef, 0xb8, 0xa4, 0x10, 0xde, 0x26, 0x77, 0x73,
0x17, 0xe7, 0x23, 0xe8, 0xe8, 0x6a, 0x20, 0x47, 0xe8, 0xb9, 0x41, 0xab, 0x54, 0x1e, 0xb9, 0x60,
0x67, 0xaa, 0x9c, 0xe0, 0x71, 0x82, 0xa5, 0x47, 0xc4, 0xc4, 0xe5, 0xb1, 0xce, 0x5c, 0x0a, 0x29,
0xe4, 0x58, 0x46, 0x3a, 0x3b, 0xa6, 0xa7, 0x1a, 0x42, 0x21, 0xce, 0xcc, 0x55, 0x24, 0x36, 0x02,
0x29, 0x45, 0x62, 0x23, 0x90, 0x52, 0x3a, 0xe2, 0x23, 0xc0, 0x04, 0x38, 0x1c, 0x29, 0x45, 0xa0,
0xc3, 0x91, 0x52, 0x04, 0x3a, 0xc2, 0x1c, 0x0a, 0x87, 0xc7, 0xe4, 0x50, 0xf1, 0xd6, 0x1d, 0x49,
0x4f, 0xd8, 0x53, 0xe1, 0xd6, 0x6d, 0x06, 0x02, 0x20, 0xd9, 0x76, 0x37, 0x40, 0x29, 0x2d, 0x88,
0xe8, 0xaa, 0x46, 0x20, 0x39, 0xaa, 0xc0, 0x86, 0x03, 0x45, 0x41, 0xb4, 0x06, 0x5a, 0x15, 0x66,
0xe3, 0x38, 0x21, 0x40, 0x00, 0x0d, 0xe3, 0x38, 0x59, 0x14, 0x0c, 0x2d, 0xb7, 0xe1, 0xd8, 0x08,
0xa0, 0x1c, 0x9e, 0x85, 0x28, 0xa2, 0x05, 0x52, 0x4a, 0xc7, 0x0d, 0x0d, 0x92, 0xce, 0xa7, 0x88,
0x04, 0x52, 0x3c, 0xef, 0x11, 0x3a, 0x84, 0x94, 0xd2, 0x98, 0xcb, 0x11, 0x1f, 0x16, 0x99, 0x99,
0x0e, 0x76, 0x75, 0x9e, 0x10, 0x57, 0x48, 0x21, 0xcb, 0x72, 0x08, 0xe4, 0xa8, 0x02, 0x34, 0x02,
0x24, 0x3e, 0x0f, 0xf3, 0x0b, 0x04, 0x23, 0xb0, 0xf3, 0x38, 0x4a, 0x06, 0xe5, 0x5a, 0xc7, 0xb2,
0x05, 0x4a, 0xb6, 0x60, 0xe4, 0x0b, 0x94, 0x7c, 0x45, 0xe2, 0xc2, 0x51, 0x62, 0x0a, 0xe1, 0x62,
0x4b, 0x90, 0xa4, 0xe4, 0xa6, 0xd2, 0x48, 0x6e, 0xf0, 0xe4, 0xc2, 0x41, 0x22, 0x31, 0x51, 0x0a,
0x38, 0x48, 0xba, 0x27, 0x8c, 0xa1, 0x48, 0xa7, 0x25, 0x60, 0x98, 0x40, 0xc9, 0xe1, 0xd6, 0x44,
0x46, 0xe7, 0x38, 0xb9, 0xcd, 0xa8, 0x09, 0xa2, 0x06, 0xa3, 0x36, 0x36, 0xdd, 0x27, 0xc7, 0x87,
0xb2, 0xa4, 0xc0, 0x86, 0x03, 0x25, 0xb7, 0x4b, 0xa0, 0x14, 0x0e, 0x8e, 0x27, 0x90, 0x52, 0x04,
0x38, 0x1c, 0x29, 0x29, 0x8f, 0x25, 0x85, 0xe3, 0xd8, 0x38, 0x12, 0x29, 0xc5, 0x12, 0x59, 0x55,
0x20, 0x25, 0x14, 0x6c, 0x80, 0x52, 0x04, 0x34, 0x22, 0x88, 0x80, 0x93, 0x0f, 0xcb, 0x0a, 0x9c,
0xa4, 0x63, 0x4b, 0xa4, 0x54, 0x89, 0x8d, 0x40, 0x4a, 0x86, 0x87, 0x44, 0x4a, 0xed, 0x20, 0x55,
0x49, 0x7c, 0x70, 0xad, 0x6e, 0xcd, 0xe3, 0x3e, 0x2d, 0x62, 0x48, 0x21, 0xa4, 0x14, 0x11, 0x42,
0x8a, 0x08, 0x21, 0xa5, 0xcd, 0xc9, 0x97, 0xe9, 0x4d, 0x42, 0x25, 0xd3, 0x9b, 0x80, 0x4a, 0xed,
0x88, 0xce, 0xb3, 0x9b, 0x2d, 0x80, 0xb2, 0x55, 0x89, 0x8d, 0x40, 0x4a, 0x6d, 0x19, 0x83, 0xa9,
0x12, 0x1c, 0x8e, 0x94, 0xda, 0xc1, 0x46, 0x6d, 0x19, 0x17, 0xa3, 0x26, 0x88, 0x64, 0xc4, 0xb4,
0xb3, 0x9d, 0x84, 0x48, 0x57, 0x64, 0xa6, 0x13, 0xd8, 0xc8, 0x6c, 0xd7, 0x05, 0x5a, 0xba, 0x34,
0x01, 0xe5, 0x88, 0x04, 0xd7, 0x00, 0xc5, 0xc5, 0x69, 0xc2, 0x5b, 0x62, 0x23, 0x90, 0x52, 0x25,
0x36, 0x02, 0xa9, 0x55, 0x8a, 0x90, 0xc9, 0x9c, 0xf1, 0x73, 0x09, 0x29, 0x47, 0xa6, 0x38, 0x81,
0x94, 0xda, 0x76, 0x6e, 0x57, 0x64, 0x38, 0x4f, 0x22, 0x25, 0x32, 0x9c, 0xdd, 0x4e, 0x64, 0x4d,
0xb4, 0x78, 0x95, 0x4a, 0xef, 0x3c, 0x44, 0xae, 0xeb, 0x84, 0x17, 0x1a, 0x29, 0xdc, 0xd9, 0xa9,
0xad, 0x94, 0x2f, 0x53, 0xb8, 0xc0, 0x50, 0x99, 0x7a, 0x35, 0x48, 0x4a, 0x75, 0x82, 0x0f, 0xfe,
0xfa, 0x80, 0xab, 0x81, 0x6c, 0xd0, 0x6d, 0x7a, 0x43, 0x61, 0xf3, 0xd4, 0x83, 0x9a, 0x89, 0x08,
0x32, 0x99, 0x78, 0x27, 0x85, 0x5e, 0xca, 0x37, 0xd0, 0xbc, 0xa1, 0x38, 0x93, 0xb3, 0xd2, 0xcb,
0x04, 0x17, 0x28, 0x30, 0x72, 0x1c, 0xdc, 0xf8, 0x75, 0xfe, 0xea, 0xc2, 0x73, 0xf9, 0xab, 0x04,
0xe6, 0x8b, 0xda, 0x63, 0x39, 0xaa, 0x8d, 0xfe, 0x84, 0xa7, 0x42, 0xdd, 0xa5, 0xe5, 0x16, 0x8a,
0x34, 0xb5, 0x77, 0xae, 0x2d, 0x07, 0xa8, 0xf2, 0x86, 0xc7, 0xc4, 0x5b, 0x23, 0xc7, 0x47, 0xa3,
0x43, 0x0d, 0xa1, 0xc5, 0xbb, 0x59, 0xea, 0x97, 0x4c, 0xaa, 0xdb, 0xe2, 0xbb, 0x4b, 0x0d, 0x9a,
0x88, 0x27, 0x7a, 0xbb, 0xc1, 0x38, 0x33, 0xbe, 0xdd, 0x50, 0xe8, 0x2c, 0x8f, 0xfb, 0xbd, 0xcb,
0x53, 0x99, 0x0b, 0x0b, 0x33, 0xec, 0x32, 0xe9, 0x7c, 0xc7, 0x61, 0x8a, 0x94, 0x46, 0xca, 0x66,
0x51, 0x77, 0x44, 0xc6, 0x67, 0xe4, 0x49, 0xa4, 0x11, 0x5a, 0x34, 0xe8, 0x82, 0x0c, 0x2e, 0x47,
0x42, 0x5d, 0xdc, 0x47, 0x44, 0x84, 0x0a, 0x63, 0x18, 0x52, 0xfb, 0x86, 0x1a, 0x09, 0xfd, 0x55,
0x69, 0x0c, 0xa1, 0xbf, 0xca, 0xad, 0xe1, 0xa8, 0x5d, 0x8e, 0xc2, 0x00, 0x0a, 0x59, 0x83, 0x09,
0x03, 0x58, 0x42, 0xe8, 0xc6, 0x00, 0x62, 0x20, 0x8d, 0x20, 0x7a, 0x7c, 0x47, 0x6d, 0x1b, 0x43,
0x9a, 0x41, 0x24, 0x7e, 0x18, 0x82, 0xeb, 0xaf, 0x4a, 0x63, 0xb4, 0x8e, 0x6a, 0xf4, 0x57, 0xa5,
0x35, 0x84, 0x01, 0x54, 0x61, 0x8d, 0x2e, 0x36, 0xc2, 0x00, 0x8a, 0xb0, 0x86, 0xd0, 0x5f, 0xe9,
0xea, 0x2f, 0x87, 0x55, 0x63, 0x00, 0xb5, 0xb1, 0x87, 0xf0, 0x06, 0x69, 0xad, 0x48, 0x5a, 0x80,
0x3a, 0x62, 0x82, 0x94, 0xbb, 0x83, 0xc2, 0xcd, 0x61, 0x49, 0x96, 0x12, 0x00, 0x61, 0x00, 0x85,
0x5b, 0xc3, 0xe6, 0x52, 0xf3, 0x4b, 0x88, 0xee, 0x32, 0x39, 0x90, 0x78, 0xea, 0x8a, 0xb0, 0x84,
0xb4, 0x40, 0xd7, 0x11, 0xc4, 0x77, 0x57, 0x76, 0x57, 0xc2, 0x02, 0x2a, 0xe3, 0xcc, 0xa4, 0x05,
0x84, 0x39, 0xb8, 0x01, 0xfe, 0xa7, 0xb4, 0xab, 0xed, 0x6d, 0x1b, 0x57, 0xd6, 0x7f, 0x85, 0x38,
0x17, 0x38, 0xc8, 0xe2, 0xae, 0x52, 0x91, 0x14, 0x29, 0x69, 0xd1, 0x35, 0xd0, 0x64, 0x6f, 0x5f,
0x0e, 0xb6, 0x6d, 0x90, 0xe4, 0x9e, 0xed, 0xf9, 0x74, 0xa1, 0x28, 0x4a, 0x62, 0x54, 0xb1, 0x03,
0xcb, 0x49, 0x9b, 0xfe, 0xfa, 0x3b, 0xcf, 0x0c, 0x65, 0x4b, 0x8a, 0x99, 0x7a, 0xdb, 0x0f, 0xb1,
0x23, 0x8b, 0x1a, 0x92, 0x33, 0x9c, 0xe1, 0xcc, 0x33, 0x23, 0xc9, 0x2a, 0x66, 0x47, 0x26, 0x0c,
0x50, 0x81, 0x1b, 0x61, 0x34, 0x61, 0x6c, 0xcc, 0x00, 0xc5, 0xdc, 0x08, 0x0b, 0x3c, 0x57, 0x23,
0x76, 0xa8, 0x7e, 0x39, 0x24, 0xbd, 0x36, 0x88, 0x72, 0x24, 0xa3, 0xd3, 0x79, 0xcd, 0xf3, 0x0f,
0xba, 0xa1, 0x82, 0x3a, 0x04, 0x6e, 0x8c, 0x7b, 0x14, 0x06, 0x88, 0x72, 0x08, 0x03, 0xb2, 0x64,
0xc8, 0x80, 0x70, 0xd0, 0x2f, 0x07, 0x99, 0xb3, 0x1a, 0x32, 0x23, 0x7c, 0x8a, 0x09, 0x4b, 0xcb,
0x44, 0xd4, 0x21, 0x30, 0x43, 0xd4, 0x21, 0xf0, 0x52, 0xe6, 0x1f, 0x94, 0x23, 0x30, 0x40, 0x94,
0x43, 0x8d, 0x65, 0x23, 0x0c, 0x10, 0xe5, 0x50, 0x23, 0x75, 0xe8, 0xe7, 0x1f, 0x0e, 0x77, 0xc5,
0xf8, 0xb0, 0x20, 0xde, 0x53, 0x40, 0x53, 0x7f, 0x7f, 0x11, 0x77, 0x71, 0x25, 0x8f, 0xcc, 0x33,
0xba, 0x0e, 0xc4, 0x74, 0x65, 0x10, 0x47, 0xfd, 0x7d, 0x8b, 0xdf, 0xc5, 0x76, 0xeb, 0xfa, 0xbb,
0x1e, 0x57, 0x17, 0x75, 0x97, 0xf7, 0x08, 0x20, 0x6e, 0x9a, 0x6a, 0xb5, 0x0f, 0x9c, 0x39, 0x02,
0xe5, 0xb1, 0xb5, 0x32, 0x9c, 0x7e, 0xe8, 0x68, 0x4b, 0xd1, 0xbc, 0x46, 0xb0, 0x37, 0x01, 0x16,
0x46, 0x04, 0x4d, 0x0d, 0x0a, 0xf2, 0xa6, 0xcd, 0x21, 0x36, 0x40, 0x20, 0xca, 0x05, 0xed, 0x08,
0x82, 0x9b, 0x1b, 0x12, 0x97, 0x36, 0x70, 0x6a, 0x35, 0xc5, 0x1b, 0xcc, 0x3d, 0x9f, 0x91, 0x1b,
0x4c, 0x9b, 0x2b, 0x36, 0x4b, 0x04, 0xb6, 0xf8, 0xa6, 0x5d, 0xca, 0x23, 0xa0, 0x30, 0x0c, 0xf8,
0xeb, 0x62, 0x63, 0x45, 0x2c, 0x85, 0xa5, 0x05, 0xed, 0x06, 0x74, 0x4d, 0xee, 0x10, 0xc7, 0x73,
0xb0, 0x44, 0xfb, 0x42, 0x7f, 0x68, 0x2c, 0x8d, 0xaa, 0x60, 0x56, 0x67, 0xb2, 0x07, 0x68, 0x8a,
0x99, 0x1d, 0x22, 0x4c, 0xea, 0x0b, 0x4e, 0x07, 0x7d, 0x86, 0xff, 0xb1, 0x0c, 0x49, 0x0d, 0x31,
0x65, 0xcb, 0x60, 0x21, 0x14, 0x03, 0x5b, 0xbd, 0x43, 0x0c, 0xaa, 0xa1, 0x20, 0x25, 0x39, 0x5d,
0xb4, 0xab, 0x1a, 0xa7, 0xd9, 0x97, 0xc8, 0x59, 0x4f, 0x33, 0x32, 0x14, 0x19, 0x1c, 0x14, 0x8b,
0x10, 0xde, 0x91, 0xaf, 0x49, 0xdb, 0x9a, 0x4f, 0xfb, 0x9d, 0x00, 0x08, 0x8c, 0x23, 0x97, 0x90,
0x22, 0xd9, 0x60, 0xd2, 0x3d, 0x42, 0x80, 0x1c, 0x99, 0x82, 0xd0, 0x30, 0xf3, 0x82, 0x9b, 0x90,
0x52, 0x64, 0xb9, 0xa2, 0xd0, 0xb9, 0x20, 0x7f, 0x3f, 0x74, 0x27, 0xbd, 0xa7, 0x9b, 0xc3, 0x30,
0x8d, 0x54, 0x86, 0xde, 0x4f, 0x47, 0x0d, 0xa6, 0x43, 0xe7, 0x48, 0x5f, 0x10, 0x7b, 0xa2, 0x67,
0x18, 0x01, 0x57, 0xb0, 0xeb, 0x2c, 0x3c, 0x51, 0x81, 0x27, 0x08, 0xfd, 0x91, 0xef, 0xf0, 0xa4,
0xd5, 0x8e, 0xfc, 0x7e, 0xf8, 0x16, 0x70, 0x9d, 0x49, 0xb2, 0x99, 0xef, 0x99, 0xad, 0x7a, 0x66,
0x6b, 0x58, 0x02, 0xb8, 0x6c, 0x29, 0x69, 0x29, 0xa7, 0x25, 0x52, 0x76, 0x1d, 0x80, 0x9e, 0xe7,
0x30, 0x6b, 0x22, 0x49, 0xd5, 0x4b, 0xd2, 0xc2, 0xdf, 0x21, 0xdb, 0x8f, 0x58, 0x51, 0xa2, 0x08,
0x5e, 0x0a, 0xb2, 0x2e, 0xe4, 0xe0, 0xdb, 0xfb, 0x30, 0x05, 0xe8, 0x47, 0xcd, 0x4b, 0xa3, 0x2c,
0xa0, 0x8e, 0x06, 0x0e, 0x1a, 0xfc, 0x37, 0xaf, 0xb3, 0x70, 0x20, 0x9f, 0xb0, 0x2f, 0x0e, 0x0b,
0x87, 0xa7, 0x6d, 0xc9, 0x49, 0x30, 0x70, 0x24, 0x68, 0xbf, 0x32, 0x48, 0x33, 0xd0, 0xef, 0x96,
0x86, 0x6b, 0x69, 0xca, 0x70, 0xdc, 0x28, 0x9a, 0x2e, 0x34, 0x87, 0xee, 0x64, 0x5d, 0x00, 0x06,
0x91, 0x41, 0x3c, 0xf4, 0x8e, 0xb8, 0x44, 0x1e, 0x06, 0xfb, 0xe3, 0xc4, 0x17, 0x78, 0x79, 0x64,
0x2b, 0x1d, 0x14, 0xa6, 0x3c, 0xb4, 0x05, 0x48, 0x5b, 0x40, 0x22, 0x40, 0xea, 0xc0, 0xbc, 0xd0,
0x38, 0xe9, 0x1b, 0x53, 0xd8, 0x0c, 0x17, 0x1d, 0x71, 0xbd, 0x01, 0x7c, 0x2c, 0x1d, 0xd3, 0xfc,
0x11, 0x05, 0x64, 0x9b, 0xe3, 0x7e, 0x20, 0x69, 0x3f, 0xaf, 0x84, 0xe7, 0xe3, 0x65, 0x3e, 0xa3,
0xcf, 0x22, 0x47, 0x06, 0x86, 0x37, 0x4c, 0xb2, 0x6f, 0xce, 0x23, 0x11, 0x92, 0x03, 0xd0, 0x2a,
0xad, 0xb0, 0xd8, 0x12, 0xeb, 0x4b, 0xb0, 0x14, 0x50, 0x1f, 0x39, 0x49, 0x00, 0x1e, 0x69, 0x54,
0x48, 0xab, 0x10, 0x01, 0x07, 0x20, 0x23, 0x13, 0xd8, 0x86, 0x8f, 0x28, 0xa0, 0x4c, 0x11, 0x68,
0xc0, 0x53, 0x75, 0x3a, 0x9c, 0x4b, 0xe4, 0x5c, 0x8d, 0x7c, 0x4c, 0xe6, 0x3c, 0x12, 0x5a, 0x96,
0x36, 0x5d, 0xe0, 0x31, 0x1a, 0x7d, 0x85, 0x3e, 0x42, 0x9f, 0xfd, 0xf1, 0x1e, 0x26, 0xa3, 0x5b,
0x57, 0xab, 0x3d, 0x2c, 0x46, 0x4e, 0x84, 0x91, 0xa1, 0xd9, 0xda, 0x8c, 0xd4, 0xb1, 0xcd, 0x40,
0xb8, 0xa7, 0x39, 0xb1, 0x44, 0x6b, 0xc3, 0x38, 0xf2, 0x2e, 0x11, 0x8e, 0xb4, 0xa4, 0x93, 0x25,
0x7b, 0xaf, 0x48, 0x50, 0x95, 0xda, 0xf4, 0xc7, 0x2a, 0x1c, 0xc3, 0xa5, 0x01, 0xbd, 0x8c, 0x77,
0x7b, 0x62, 0xb1, 0xd6, 0x9c, 0x7e, 0x42, 0xc2, 0x22, 0x07, 0x7a, 0x42, 0x44, 0xbd, 0x06, 0x16,
0x51, 0xd2, 0x2e, 0x45, 0x8b, 0x26, 0x67, 0xef, 0x3b, 0x45, 0x6f, 0xee, 0x10, 0x74, 0x89, 0x8f,
0xc0, 0x27, 0x1c, 0x5d, 0x53, 0xb6, 0xa4, 0x95, 0x9c, 0xdb, 0x2a, 0x31, 0x30, 0xb0, 0x81, 0xda,
0x50, 0xd0, 0x27, 0xdf, 0xae, 0xa6, 0xc8, 0x27, 0x27, 0x32, 0xf2, 0x59, 0xf2, 0x86, 0xa3, 0x71,
0x00, 0x9c, 0xc4, 0xe4, 0xac, 0xe2, 0xa5, 0xce, 0x3a, 0x0d, 0xdb, 0x63, 0x04, 0x61, 0x33, 0x0c,
0xce, 0x71, 0xc6, 0x2b, 0xb3, 0x45, 0x0b, 0xca, 0x98, 0x0e, 0x3a, 0x72, 0x50, 0x5b, 0x83, 0x93,
0x26, 0x63, 0xe8, 0xb0, 0xce, 0xd8, 0xc9, 0x2e, 0x18, 0xd3, 0x83, 0x64, 0x19, 0x11, 0x86, 0xad,
0x21, 0x66, 0x61, 0x2a, 0x7c, 0xd4, 0x69, 0x58, 0x58, 0x43, 0xae, 0x09, 0xd4, 0x56, 0x4e, 0x29,
0x39, 0xd5, 0x0a, 0x3d, 0x15, 0xe8, 0xa9, 0xd0, 0x9b, 0x92, 0xde, 0xea, 0x52, 0x82, 0x38, 0x72,
0xb2, 0x79, 0x8d, 0x98, 0x0c, 0x91, 0xbd, 0x85, 0x6f, 0x86, 0x21, 0x8a, 0x73, 0x5d, 0x74, 0x02,
0x73, 0x81, 0x95, 0xd6, 0xca, 0xbc, 0x94, 0xcc, 0xab, 0xed, 0xf9, 0xa1, 0x02, 0x3f, 0x94, 0xb0,
0x4b, 0x05, 0x76, 0xd5, 0x60, 0x35, 0x90, 0x2b, 0x00, 0x75, 0xac, 0xdf, 0x50, 0x25, 0x78, 0x76,
0xcc, 0x63, 0x25, 0x3c, 0x26, 0x99, 0x67, 0x1a, 0x71, 0xb8, 0x66, 0x94, 0xc1, 0x53, 0x80, 0x42,
0xa6, 0xc4, 0x32, 0x44, 0x42, 0x6a, 0xc7, 0xff, 0xcb, 0x2e, 0x09, 0x4c, 0x1c, 0x21, 0x08, 0x92,
0x37, 0x05, 0xfc, 0x7e, 0x1a, 0x3a, 0xab, 0x1e, 0x16, 0x08, 0x53, 0xa0, 0x05, 0x02, 0x83, 0x93,
0x01, 0xb9, 0x34, 0x58, 0x43, 0x1e, 0x48, 0x80, 0x73, 0x90, 0x84, 0x43, 0x9c, 0x43, 0xe6, 0xe4,
0xd0, 0x4a, 0xf0, 0x45, 0x4d, 0x60, 0x2a, 0x20, 0x30, 0xec, 0x9c, 0x39, 0x22, 0x3a, 0xe2, 0x16,
0x05, 0x52, 0xad, 0x86, 0xfd, 0xe5, 0x14, 0xa0, 0x7c, 0x1b, 0x18, 0x4a, 0xab, 0x81, 0x33, 0xd3,
0x42, 0xc1, 0x12, 0x4b, 0x8b, 0x14, 0x94, 0x32, 0x06, 0x63, 0xe1, 0x6f, 0x12, 0x91, 0x9c, 0x3d,
0x68, 0x0f, 0xef, 0x1a, 0x21, 0x63, 0xcb, 0x80, 0x21, 0xad, 0x77, 0x52, 0xad, 0x14, 0xcb, 0xba,
0x3f, 0x56, 0xe1, 0x18, 0xe1, 0x8d, 0xe7, 0x9e, 0x2d, 0xfa, 0x4a, 0xc1, 0x2c, 0x8e, 0xab, 0x0b,
0xa1, 0xa3, 0x7a, 0x3a, 0xa1, 0x7b, 0x25, 0xdd, 0x2b, 0x19, 0x55, 0x16, 0xbe, 0x7d, 0xed, 0x82,
0x63, 0x0a, 0xbc, 0x96, 0x56, 0x02, 0x39, 0x95, 0x2c, 0x7c, 0xc7, 0x53, 0x52, 0x61, 0x4a, 0x81,
0x0f, 0x2a, 0xf0, 0x41, 0x09, 0x9b, 0x80, 0x11, 0x30, 0x9b, 0x6a, 0xea, 0xca, 0x20, 0x76, 0x4f,
0x0b, 0x10, 0x41, 0x50, 0xcd, 0xec, 0x0c, 0xbc, 0x95, 0x83, 0x7d, 0x90, 0xc6, 0xd5, 0xb2, 0xeb,
0xf6, 0xc9, 0x17, 0x64, 0xe2, 0x9e, 0x3a, 0x4b, 0x96, 0xae, 0x35, 0x05, 0xad, 0x9b, 0x12, 0x68,
0x2e, 0xbe, 0xb1, 0x2e, 0x81, 0x15, 0xf3, 0xa7, 0x92, 0xff, 0xe1, 0xda, 0xa5, 0xd8, 0x03, 0xac,
0x67, 0x56, 0x96, 0x8c, 0x1e, 0xcb, 0xa7, 0x9c, 0x0b, 0x07, 0x7c, 0x9e, 0x36, 0xeb, 0x36, 0x10,
0x03, 0xfe, 0x3d, 0x22, 0xde, 0xff, 0x5e, 0x27, 0xdb, 0x5e, 0x76, 0xd1, 0x80, 0x15, 0xe2, 0x43,
0x35, 0x68, 0xa7, 0xfa, 0x71, 0x28, 0x69, 0xd3, 0x8e, 0x3b, 0x29, 0xa6, 0x9d, 0xd6, 0x03, 0x12,
0xf9, 0x4e, 0x12, 0xc4, 0x02, 0x5a, 0xe2, 0x98, 0xa8, 0x26, 0x3d, 0x84, 0xcc, 0xb2, 0x92, 0xb3,
0x0a, 0x58, 0x28, 0x7c, 0xd0, 0x69, 0x2b, 0xab, 0x88, 0xb3, 0xde, 0x72, 0x26, 0xc1, 0x99, 0xb2,
0x1d, 0xf7, 0x5a, 0xa8, 0x69, 0xef, 0x42, 0x78, 0x4b, 0x9e, 0x5c, 0x90, 0x01, 0x7d, 0x1d, 0xa5,
0xaf, 0x85, 0x7e, 0x3d, 0x9c, 0xf9, 0x2e, 0x39, 0xd8, 0x76, 0xc2, 0xd5, 0x62, 0x8f, 0x25, 0x52,
0xad, 0x56, 0xcb, 0x2f, 0x5c, 0x24, 0x9c, 0xd4, 0xf3, 0x55, 0xdd, 0x36, 0x7b, 0x2c, 0x97, 0x80,
0x9d, 0x73, 0xca, 0x83, 0x54, 0xa6, 0x1e, 0x60, 0xe8, 0xc8, 0x70, 0x8c, 0xc1, 0x73, 0x15, 0xc0,
0xf3, 0xfe, 0xb8, 0x0b, 0x80, 0xbc, 0x62, 0x40, 0xde, 0x85, 0xd3, 0x28, 0x2f, 0x90, 0xe6, 0xfd,
0xb7, 0x90, 0xd9, 0x1e, 0xf7, 0xc0, 0x7d, 0xb8, 0x4c, 0xa8, 0x94, 0x4f, 0x7a, 0x19, 0x5f, 0x66,
0x92, 0x31, 0x79, 0x93, 0xf4, 0xd7, 0x8d, 0xd2, 0x01, 0xc5, 0x26, 0x1d, 0xb0, 0x69, 0x36, 0x9a,
0x84, 0xd9, 0x64, 0x00, 0xc2, 0x65, 0xfd, 0x1c, 0x26, 0xbd, 0x7c, 0x1b, 0xb9, 0xdc, 0x21, 0x93,
0x94, 0x4a, 0xe2, 0x28, 0x19, 0x66, 0x94, 0x12, 0xfe, 0xec, 0xc2, 0x6f, 0xc9, 0xe0, 0x37, 0xf9,
0x24, 0x07, 0x20, 0x5c, 0x2c, 0xc7, 0x6a, 0xd8, 0x50, 0x48, 0x74, 0xb1, 0x0c, 0xd5, 0xae, 0x70,
0x4a, 0xd3, 0xb0, 0x18, 0x3d, 0xd5, 0x0c, 0x01, 0xb6, 0x86, 0xfc, 0x43, 0xe2, 0x15, 0x3e, 0x79,
0x59, 0xb9, 0xa0, 0xde, 0x03, 0xc5, 0x2b, 0x7a, 0x8d, 0x48, 0xd5, 0x56, 0xf5, 0xc3, 0xc2, 0x9b,
0x6a, 0x0d, 0x19, 0x57, 0xe4, 0x79, 0xe0, 0x98, 0x7a, 0xe4, 0x0b, 0xfd, 0x8d, 0x33, 0x9c, 0x41,
0xaa, 0xfb, 0xba, 0x80, 0x67, 0x4b, 0x0e, 0xa6, 0x05, 0x46, 0x37, 0x49, 0xb8, 0xbc, 0x0d, 0xe4,
0x54, 0x20, 0x5f, 0x6f, 0x47, 0xe2, 0x76, 0x8f, 0x24, 0xc9, 0x78, 0x94, 0xfc, 0x99, 0xb0, 0x92,
0xe5, 0xac, 0x57, 0x1e, 0x46, 0x1c, 0xca, 0xc8, 0x07, 0x5d, 0x32, 0xd4, 0xb2, 0x70, 0x2a, 0xc9,
0x99, 0x35, 0xc9, 0x90, 0x37, 0xb4, 0x0f, 0x04, 0x2b, 0x44, 0xff, 0x70, 0x57, 0x46, 0xb4, 0x4d,
0xff, 0x0d, 0xe5, 0xe2, 0x92, 0xf7, 0xfd, 0xb5, 0xab, 0x80, 0xcf, 0x8e, 0x78, 0x20, 0x68, 0x57,
0x32, 0x52, 0xaf, 0x58, 0x6e, 0x6a, 0xa3, 0x5e, 0xc9, 0x58, 0xbf, 0x26, 0x0a, 0x90, 0x25, 0x13,
0xfd, 0x9a, 0x28, 0x90, 0x57, 0x63, 0xfd, 0x9a, 0xa8, 0x5f, 0x31, 0x51, 0x4b, 0x33, 0x51, 0x5f,
0xa3, 0xc6, 0xfa, 0x35, 0x51, 0x7e, 0xa3, 0x26, 0xfa, 0x35, 0x51, 0xa0, 0x22, 0x19, 0xeb, 0x57,
0xf2, 0xac, 0x7e, 0x4d, 0x74, 0x64, 0x87, 0x32, 0x75, 0x4f, 0xd5, 0x26, 0xe8, 0xd7, 0x58, 0x37,
0x77, 0x64, 0x7b, 0xbb, 0x1d, 0xfa, 0x1a, 0xd7, 0xaf, 0xbc, 0xf0, 0xbc, 0xba, 0x7a, 0xfd, 0x1a,
0x2f, 0xa2, 0x81, 0x86, 0x0d, 0xb7, 0xb6, 0x62, 0xb3, 0x3d, 0x0e, 0x36, 0xd7, 0x3c, 0xd9, 0xad,
0x61, 0x53, 0x05, 0xeb, 0x55, 0x64, 0x52, 0x7a, 0xa3, 0x06, 0xe5, 0x40, 0xdb, 0xb2, 0x84, 0x61,
0x49, 0x8d, 0x68, 0x58, 0xaf, 0x60, 0xc9, 0x54, 0xc3, 0x06, 0x43, 0x71, 0xbb, 0x87, 0xa2, 0x06,
0x2a, 0xa6, 0x86, 0x2a, 0xa6, 0x46, 0x2a, 0x36, 0xdd, 0xc7, 0xb6, 0x1a, 0x36, 0xe4, 0x4d, 0xaf,
0x5f, 0xea, 0x87, 0xf4, 0x6b, 0xb5, 0xac, 0x3f, 0x37, 0xfb, 0x20, 0x21, 0x1e, 0x71, 0xa0, 0x92,
0xe2, 0xc6, 0x24, 0xa7, 0x35, 0xc6, 0x05, 0x11, 0x48, 0x06, 0xb8, 0x9c, 0xb3, 0x8c, 0x9a, 0x33,
0x44, 0x45, 0xb7, 0x3d, 0x54, 0xe1, 0x27, 0x7c, 0x2b, 0xf9, 0x59, 0xf5, 0x3f, 0x6f, 0x0f, 0xfb,
0x16, 0xdf, 0x42, 0x17, 0x5c, 0x12, 0x34, 0x2a, 0x4a, 0x79, 0x52, 0x78, 0xd3, 0x4d, 0xcb, 0x6d,
0x9e, 0xa9, 0x41, 0x79, 0x52, 0xbb, 0xc4, 0x1f, 0xbb, 0x56, 0x20, 0xa4, 0x8a, 0x64, 0x14, 0xd7,
0x7c, 0x78, 0x2e, 0xb7, 0x4b, 0x39, 0xfc, 0xe4, 0xda, 0x09, 0xc4, 0x58, 0xec, 0x4b, 0x78, 0xf1,
0x25, 0x10, 0x74, 0x52, 0x20, 0x25, 0x9f, 0x14, 0x05, 0x38, 0x27, 0x91, 0xa7, 0xa1, 0x18, 0xac,
0x74, 0xec, 0x80, 0x91, 0xe7, 0x99, 0x17, 0x1c, 0x49, 0x19, 0xa4, 0x10, 0xb2, 0x82, 0x97, 0x08,
0x08, 0x59, 0x23, 0x25, 0x7f, 0x06, 0x45, 0x89, 0xb0, 0x30, 0xfd, 0x71, 0x7e, 0x58, 0x00, 0x62,
0x42, 0xe6, 0xa7, 0x44, 0x4d, 0x05, 0xca, 0x4d, 0x00, 0x72, 0x38, 0xef, 0x95, 0x75, 0x52, 0x22,
0x92, 0x33, 0x0c, 0xd5, 0x7f, 0x91, 0x63, 0xad, 0xc9, 0xf1, 0xc9, 0xb8, 0x4c, 0xd3, 0xd2, 0x8a,
0xa1, 0x95, 0x5a, 0x4a, 0x15, 0xa8, 0xa4, 0x52, 0x72, 0x8e, 0xba, 0x13, 0xe0, 0x1d, 0x1a, 0xe9,
0x3b, 0xb2, 0x0b, 0x05, 0x05, 0x87, 0xd6, 0x48, 0x2d, 0x0e, 0x2a, 0x51, 0x0a, 0x5e, 0x65, 0x05,
0xca, 0x01, 0x39, 0x8d, 0x41, 0xae, 0xb7, 0xc6, 0xff, 0x48, 0x14, 0xd0, 0x04, 0x50, 0xce, 0x80,
0xff, 0xbf, 0xbd, 0x37, 0x19, 0x8a, 0x44, 0x10, 0xb8, 0x53, 0x7f, 0x0e, 0x41, 0xb6, 0xc3, 0x77,
0xc8, 0xea, 0x97, 0x92, 0x66, 0xcd, 0x12, 0x52, 0x65, 0x53, 0x18, 0x94, 0x8b, 0x18, 0xcb, 0xa9,
0x5b, 0x24, 0x3d, 0x32, 0x0a, 0x2f, 0x18, 0xf1, 0x32, 0x88, 0xfd, 0x52, 0x89, 0x20, 0x48, 0xe2,
0x8e, 0xb3, 0x1e, 0x88, 0xf5, 0x72, 0xe0, 0x8c, 0xd6, 0x71, 0x56, 0x14, 0x91, 0x1f, 0x00, 0x0a,
0x04, 0x34, 0xf0, 0xf0, 0xc1, 0x0c, 0x8f, 0xf0, 0x81, 0x62, 0x1d, 0xcb, 0xde, 0xac, 0xcb, 0xc0,
0xd2, 0xc4, 0xe6, 0x0c, 0x60, 0xe7, 0x29, 0x63, 0x6f, 0xde, 0x73, 0xe4, 0x48, 0xec, 0xc8, 0x91,
0x3c, 0xcc, 0xa4, 0x10, 0x54, 0xd0, 0x34, 0x1a, 0x7a, 0x0e, 0x49, 0x5a, 0x36, 0xe9, 0x87, 0xbe,
0x30, 0x82, 0x84, 0x50, 0x07, 0x24, 0x15, 0x98, 0x4a, 0xc4, 0x0c, 0xbe, 0xff, 0x42, 0x52, 0x09,
0xf8, 0x4f, 0x0a, 0xf5, 0x44, 0xd6, 0x07, 0xd9, 0x21, 0x3e, 0x88, 0xd7, 0xf3, 0x21, 0x95, 0x8d,
0x7a, 0xd3, 0x4c, 0x8c, 0x09, 0xcd, 0xd5, 0x79, 0x30, 0xc5, 0x01, 0x22, 0xa4, 0xc3, 0x92, 0x42,
0x56, 0x1a, 0x22, 0x22, 0xf5, 0xc2, 0xb0, 0xd2, 0x5a, 0x2f, 0x59, 0x6e, 0x9a, 0x0d, 0x03, 0xf0,
0x05, 0xc3, 0xd0, 0x46, 0xe3, 0xd2, 0x42, 0x84, 0x55, 0x70, 0x7c, 0xc9, 0x11, 0xb3, 0x11, 0xd7,
0x34, 0xe5, 0xb2, 0x53, 0x83, 0x10, 0x18, 0xa1, 0x3c, 0x27, 0x42, 0x50, 0x98, 0x5b, 0x50, 0x74,
0x08, 0x68, 0x8d, 0xce, 0xa1, 0x2a, 0x34, 0x41, 0x5d, 0x08, 0x8a, 0x46, 0x53, 0xae, 0x0d, 0x46,
0x62, 0x0c, 0x51, 0x35, 0xc9, 0x08, 0x45, 0x01, 0x08, 0xc1, 0xa4, 0x24, 0x98, 0xcb, 0xbd, 0x10,
0x38, 0xfb, 0xb0, 0x9f, 0x01, 0x09, 0xe2, 0x8a, 0x97, 0x94, 0x83, 0x37, 0x20, 0x64, 0x9e, 0xd7,
0x32, 0xf0, 0x33, 0x32, 0x71, 0x00, 0xc2, 0x14, 0x86, 0x5c, 0x62, 0x61, 0xa5, 0x16, 0x75, 0x31,
0x0c, 0x32, 0x21, 0x7b, 0x03, 0x2d, 0xe2, 0xb4, 0x21, 0x92, 0xf1, 0x08, 0xb6, 0x30, 0xd0, 0x42,
0x23, 0x2c, 0x04, 0x60, 0x0c, 0xbc, 0x9e, 0x2b, 0x18, 0x38, 0xc9, 0xcb, 0xb3, 0x2c, 0x0f, 0x73,
0x07, 0xaf, 0x1e, 0x90, 0x10, 0x92, 0x89, 0xa5, 0x09, 0x07, 0x34, 0x25, 0xc1, 0x29, 0x6d, 0x40,
0xd4, 0xa5, 0xd8, 0x36, 0xf5, 0xd0, 0x3b, 0x84, 0xdf, 0x29, 0x42, 0x7c, 0x14, 0x72, 0x64, 0x0c,
0xaa, 0x6b, 0x01, 0x88, 0x4a, 0x66, 0x72, 0x86, 0x48, 0x3c, 0x47, 0x6a, 0x92, 0xed, 0x07, 0x63,
0x27, 0x19, 0x92, 0x3c, 0xb9, 0xa4, 0x26, 0x0d, 0x57, 0x40, 0x69, 0x27, 0x1a, 0x49, 0x8a, 0xc8,
0x98, 0x98, 0xe7, 0x70, 0x3c, 0xe3, 0xf5, 0xae, 0x68, 0xe2, 0x80, 0xe6, 0x69, 0x91, 0x72, 0x4a,
0x8b, 0x86, 0x46, 0x6b, 0x1d, 0xdc, 0x41, 0x89, 0xad, 0xe1, 0x14, 0x62, 0xf8, 0x42, 0x5d, 0x18,
0x05, 0xb4, 0xc0, 0x08, 0x6d, 0xdf, 0xc4, 0xc8, 0x15, 0x5c, 0x26, 0x9d, 0x71, 0xf1, 0x14, 0x12,
0xa4, 0xd8, 0x35, 0x90, 0xfe, 0xe6, 0xb2, 0x5e, 0xe9, 0xd6, 0x84, 0x51, 0x68, 0x4e, 0x89, 0x48,
0x49, 0x45, 0x4e, 0x26, 0x84, 0x46, 0xef, 0x0b, 0x8f, 0xb9, 0x70, 0x16, 0x20, 0x47, 0x16, 0x00,
0x13, 0xb3, 0x48, 0x8b, 0x17, 0xa4, 0x20, 0xfc, 0x89, 0xc5, 0x81, 0xe2, 0x2c, 0xe0, 0x24, 0x28,
0x88, 0xa3, 0x21, 0x87, 0x14, 0x4e, 0x8a, 0x1d, 0xc6, 0x21, 0x63, 0x5a, 0x70, 0xc2, 0x34, 0xcf,
0x39, 0xf3, 0x68, 0xb9, 0x9c, 0x2a, 0x47, 0xb7, 0x72, 0x24, 0x10, 0x66, 0xaa, 0x44, 0x41, 0x48,
0x91, 0x72, 0xde, 0x95, 0x32, 0xae, 0x52, 0xc8, 0x53, 0x46, 0x31, 0x91, 0x4d, 0xa3, 0x21, 0x96,
0xaa, 0x60, 0xb0, 0x27, 0x03, 0x24, 0xbd, 0x11, 0x79, 0xbf, 0x04, 0x32, 0xcf, 0x08, 0xb5, 0xcd,
0xd9, 0xdf, 0x21, 0x3d, 0xf5, 0xb0, 0x96, 0x4e, 0xb2, 0x1d, 0x61, 0x31, 0xc9, 0xe2, 0xe2, 0xfc,
0x1f, 0x2d, 0xf4, 0xcc, 0x01, 0x25, 0x07, 0xcc, 0x82, 0xca, 0x8f, 0x32, 0xc5, 0xd2, 0xec, 0x57,
0xa8, 0x2c, 0x58, 0x2b, 0x11, 0x3b, 0xd0, 0x28, 0x54, 0xb9, 0x92, 0x7c, 0x91, 0x3b, 0xa7, 0xd8,
0x0c, 0x10, 0x8b, 0xac, 0x79, 0x23, 0x79, 0x51, 0x9f, 0xb1, 0x79, 0x70, 0x39, 0x4b, 0x0b, 0x38,
0x2e, 0x16, 0x07, 0xf0, 0x00, 0x80, 0x29, 0xa2, 0x4a, 0x76, 0xa3, 0x5a, 0xa4, 0x28, 0x18, 0x2b,
0x0c, 0x91, 0x87, 0xad, 0xf2, 0x5c, 0xef, 0x6e, 0x40, 0x99, 0xe4, 0x13, 0x0e, 0x83, 0xce, 0x3e,
0x48, 0xb1, 0xad, 0x94, 0x18, 0xbe, 0xd7, 0xae, 0xe4, 0x60, 0x96, 0x6c, 0x3d, 0x2c, 0x6b, 0x4d,
0x91, 0x3f, 0xea, 0xc4, 0x60, 0x81, 0xc4, 0x64, 0x15, 0x19, 0x83, 0xa8, 0xec, 0x03, 0xa6, 0xb9,
0xa0, 0x12, 0x30, 0x89, 0x96, 0x13, 0x8d, 0x86, 0x26, 0xef, 0x24, 0x97, 0x03, 0x4c, 0x1d, 0xf8,
0x87, 0xd6, 0x0c, 0xee, 0x39, 0xcf, 0xb6, 0x5c, 0x13, 0x53, 0x1c, 0x2d, 0x1b, 0x57, 0x72, 0xdd,
0x99, 0x15, 0xe4, 0x06, 0xec, 0xf3, 0x0c, 0x64, 0x15, 0x34, 0x7f, 0xd4, 0x8a, 0x5b, 0x86, 0xda,
0x7d, 0x8e, 0x6c, 0xb1, 0x41, 0xf1, 0x95, 0x2a, 0x88, 0x05, 0xb4, 0xdd, 0xd4, 0x34, 0x89, 0x9c,
0x5c, 0x3e, 0x08, 0xc9, 0x81, 0x49, 0xec, 0x88, 0x68, 0xde, 0x17, 0x71, 0x85, 0x16, 0x02, 0xa8,
0x1d, 0xa0, 0xf1, 0xe0, 0x96, 0x00, 0x2e, 0x8d, 0x87, 0x66, 0x70, 0x0a, 0xdc, 0x8a, 0x2a, 0x60,
0x18, 0xd8, 0xa9, 0x89, 0xc9, 0x25, 0x57, 0x14, 0x01, 0x52, 0x2e, 0xb8, 0x10, 0x08, 0x95, 0x8c,
0x16, 0x4c, 0x46, 0xb1, 0x70, 0xc9, 0xb3, 0x03, 0xa0, 0x8f, 0xd9, 0x5a, 0xed, 0xbe, 0xbd, 0xcf,
0x73, 0x2e, 0xae, 0x52, 0x0e, 0x33, 0x04, 0x30, 0x04, 0xf8, 0x95, 0x8c, 0x22, 0xf9, 0xe3, 0x25,
0x74, 0x00, 0x98, 0x22, 0xaf, 0x09, 0xc7, 0xdb, 0x1f, 0x30, 0x65, 0x28, 0x5a, 0x7f, 0x9c, 0x32,
0x7f, 0x91, 0x35, 0x22, 0xf9, 0x6a, 0xe8, 0xb7, 0x85, 0xbd, 0x42, 0x61, 0x01, 0x17, 0x02, 0x32,
0x84, 0x9d, 0xc3, 0x75, 0xb0, 0x2c, 0x53, 0xd2, 0x65, 0x58, 0x73, 0x9a, 0x8c, 0xd7, 0x05, 0x10,
0x5f, 0xa4, 0x99, 0x1d, 0x67, 0x69, 0x88, 0x31, 0xe8, 0x80, 0x3f, 0x51, 0xa9, 0x84, 0xd6, 0xa4,
0x15, 0xb2, 0xab, 0xa0, 0x01, 0xb7, 0xe6, 0x9d, 0xa0, 0x04, 0xba, 0x8f, 0x62, 0x7f, 0xd7, 0xf7,
0x42, 0x7d, 0xe6, 0x44, 0x6a, 0x7b, 0x84, 0xda, 0xad, 0x54, 0x60, 0x4f, 0x44, 0xe9, 0x61, 0x81,
0x79, 0xce, 0x17, 0xcb, 0xe0, 0xf3, 0xc1, 0x64, 0x0c, 0xe7, 0xd3, 0x35, 0x76, 0x33, 0xe8, 0x27,
0x59, 0x03, 0x87, 0x82, 0x2a, 0x20, 0xf9, 0xa8, 0x2f, 0xa2, 0x1d, 0xa3, 0x80, 0xa3, 0x9e, 0x1a,
0xd6, 0x6f, 0xc7, 0xb8, 0x26, 0x6f, 0xac, 0xe4, 0xa3, 0x64, 0xd8, 0xa4, 0x69, 0x77, 0x17, 0x18,
0x4e, 0xda, 0x6c, 0xae, 0xd9, 0x07, 0xad, 0x7e, 0x5c, 0xd4, 0xdf, 0xf1, 0xea, 0xa8, 0x25, 0x3f,
0x7c, 0x49, 0xc2, 0x5b, 0x0a, 0x25, 0xd8, 0x24, 0x67, 0x60, 0x66, 0x19, 0x5c, 0xee, 0xef, 0x20,
0x52, 0x24, 0xfd, 0xc2, 0xf2, 0x6a, 0xa6, 0x2f, 0x94, 0xd7, 0x21, 0x79, 0x95, 0x02, 0x39, 0xe5,
0x8d, 0xa8, 0xc4, 0x6d, 0x06, 0x29, 0x8a, 0xba, 0x38, 0x37, 0x40, 0x0b, 0x96, 0x56, 0x11, 0xe9,
0x0e, 0xe7, 0xe0, 0x69, 0x2b, 0x92, 0x2f, 0xf2, 0x9b, 0x8a, 0x54, 0x72, 0x26, 0x9c, 0x6a, 0x62,
0xe4, 0x05, 0x84, 0xe4, 0x08, 0x7a, 0x6b, 0x78, 0x3b, 0x85, 0x19, 0x26, 0x9e, 0xc0, 0xac, 0x20,
0x63, 0xee, 0xe1, 0x22, 0x02, 0x7b, 0x2c, 0xb8, 0x82, 0xd3, 0x4b, 0x26, 0x2a, 0x84, 0xa3, 0x87,
0x72, 0xd7, 0x09, 0x2a, 0xd7, 0x60, 0xe4, 0x3c, 0xd7, 0x92, 0xb8, 0x32, 0x97, 0x06, 0x85, 0x92,
0xd6, 0x7d, 0x0b, 0xb4, 0x96, 0xf3, 0x49, 0x68, 0x0d, 0xe2, 0x18, 0x42, 0x0e, 0x58, 0x98, 0xef,
0x3c, 0x61, 0xcf, 0x00, 0x43, 0xf0, 0xb8, 0xc9, 0x85, 0x93, 0x31, 0x9b, 0x63, 0x5d, 0x4a, 0x44,
0x87, 0x02, 0x4c, 0x23, 0x65, 0x65, 0xd8, 0x1c, 0xd9, 0x67, 0x93, 0x9a, 0x54, 0x0b, 0x5b, 0xae,
0x4b, 0x66, 0x99, 0xa3, 0xa9, 0xca, 0xd7, 0x1e, 0x4c, 0x1e, 0x81, 0x86, 0xbb, 0x82, 0x09, 0xd7,
0x0e, 0xb3, 0xa6, 0x3f, 0x09, 0x90, 0xb5, 0x83, 0x2c, 0x6a, 0x0c, 0x2c, 0x73, 0x1b, 0xb0, 0x6c,
0xea, 0x07, 0x85, 0x05, 0x65, 0x24, 0x06, 0xf7, 0x5c, 0xbc, 0x4c, 0x96, 0x94, 0xd3, 0xa5, 0x5c,
0xe3, 0x07, 0xef, 0x18, 0x9c, 0xb7, 0xb0, 0x26, 0x41, 0x4c, 0x88, 0x4c, 0x45, 0x32, 0xcc, 0x79,
0x38, 0x1b, 0x16, 0x01, 0x01, 0xb3, 0x1e, 0x6b, 0x83, 0x59, 0xaf, 0x84, 0xd5, 0x28, 0xd4, 0x95,
0x3c, 0x58, 0x7f, 0x2c, 0xac, 0x67, 0x00, 0xcf, 0x49, 0x07, 0x81, 0xf5, 0x49, 0x60, 0x7d, 0xc2,
0xac, 0x37, 0xba, 0x15, 0x96, 0xab, 0xc0, 0x79, 0xf2, 0x1f, 0x07, 0x00, 0x65, 0x39, 0x04, 0x28,
0xcb, 0x38, 0x40, 0x59, 0x0f, 0x71, 0xcf, 0xa1, 0xd4, 0x06, 0x00, 0xe2, 0x90, 0x85, 0xdf, 0x87,
0x64, 0xdb, 0x61, 0x36, 0x7c, 0x0f, 0x74, 0xb5, 0x0b, 0xc7, 0x65, 0xef, 0x3d, 0x0a, 0x15, 0x56,
0xc1, 0xa0, 0x8f, 0x35, 0xf4, 0x50, 0x89, 0x1e, 0xf2, 0x3e, 0x57, 0xa2, 0x94, 0x80, 0xf5, 0xd0,
0xa8, 0xa0, 0x88, 0x4a, 0x14, 0x91, 0xef, 0x2b, 0xe2, 0x4a, 0xf3, 0x5c, 0xb6, 0x5a, 0xd6, 0xc4,
0x4c, 0x89, 0xee, 0x29, 0xd1, 0x44, 0xd3, 0x1f, 0xf6, 0xaa, 0xa8, 0x44, 0x15, 0x13, 0xd1, 0x44,
0x15, 0x34, 0x31, 0x09, 0x9a, 0xc8, 0xba, 0x55, 0x88, 0xb8, 0x35, 0x74, 0x0b, 0xf7, 0x46, 0x89,
0xb8, 0x45, 0xc2, 0x2c, 0xef, 0x7d, 0x62, 0x53, 0x7e, 0x7e, 0xcb, 0x6d, 0xb5, 0xfa, 0xbc, 0x3f,
0xf2, 0x23, 0xe0, 0x46, 0x28, 0xdb, 0xdf, 0xaf, 0x80, 0x39, 0xeb, 0x26, 0x45, 0xcb, 0xd9, 0x04,
0x18, 0xf2, 0x28, 0xdd, 0x67, 0x5a, 0xb6, 0x47, 0x84, 0xc6, 0xe0, 0xe5, 0xa6, 0x61, 0x27, 0x04,
0xec, 0x14, 0x11, 0xea, 0x8f, 0xeb, 0xcd, 0x90, 0xd4, 0xf3, 0x10, 0x6e, 0xb7, 0x17, 0x84, 0x9b,
0xa9, 0x31, 0xc8, 0xb3, 0x39, 0xdd, 0x03, 0x5e, 0x4a, 0x6a, 0xb2, 0x27, 0x44, 0xa6, 0x78, 0xd6,
0xb7, 0x2d, 0xd7, 0xb0, 0x04, 0x7f, 0x1c, 0x36, 0x8d, 0xa2, 0xb4, 0x51, 0x90, 0x76, 0x57, 0x24,
0x05, 0xdf, 0x23, 0xcf, 0x78, 0x28, 0x9e, 0xe3, 0x9c, 0xf4, 0x09, 0xd4, 0xb8, 0x4d, 0x18, 0x0c,
0x8b, 0x58, 0xc6, 0xd6, 0x74, 0xa7, 0x76, 0xee, 0x48, 0x7d, 0x24, 0x13, 0x4d, 0x42, 0x61, 0x0d,
0x1b, 0xcc, 0xf0, 0x6d, 0x43, 0x39, 0x83, 0x7c, 0x17, 0xf5, 0x53, 0xdd, 0x1c, 0x52, 0x18, 0x63,
0xbd, 0xc5, 0x4e, 0x84, 0xd5, 0xb5, 0x6c, 0x9b, 0xb2, 0xfe, 0x56, 0xab, 0x90, 0x2f, 0x49, 0x06,
0xf9, 0x92, 0x64, 0x98, 0x2f, 0xd9, 0x1b, 0x25, 0xbd, 0x5c, 0x7e, 0x59, 0xfc, 0x5d, 0x90, 0xd4,
0x53, 0xc8, 0x89, 0x1b, 0x01, 0x8b, 0x49, 0x0a, 0x62, 0x52, 0xc7, 0x3f, 0x59, 0x3b, 0x45, 0x97,
0x8c, 0x35, 0x61, 0xaa, 0x32, 0x31, 0x55, 0xda, 0xaa, 0x5a, 0x00, 0x47, 0x47, 0x10, 0x6b, 0x31,
0x81, 0x58, 0xcd, 0x04, 0x62, 0x35, 0x63, 0x88, 0x35, 0x9b, 0x40, 0xac, 0x66, 0x02, 0xb1, 0xfa,
0x27, 0xbf, 0x8f, 0x21, 0xd6, 0x7c, 0x0c, 0xb1, 0x6e, 0x52, 0x15, 0x48, 0xce, 0xd2, 0x6a, 0xe6,
0x54, 0x1e, 0xe9, 0xfe, 0xe8, 0x76, 0x96, 0xa7, 0x40, 0x68, 0x17, 0xc3, 0x3f, 0xeb, 0xfe, 0x4e,
0x98, 0x28, 0x0e, 0xda, 0x45, 0xd5, 0x63, 0x67, 0x41, 0x57, 0x9a, 0xf1, 0x86, 0x54, 0x58, 0x2e,
0x12, 0x7b, 0x92, 0x81, 0x90, 0x75, 0xed, 0x76, 0x27, 0xb6, 0x06, 0x5a, 0x11, 0x41, 0x50, 0x9f,
0x00, 0x99, 0x0f, 0x1b, 0x80, 0xb4, 0xbf, 0x0f, 0xfa, 0xc9, 0x9d, 0x92, 0x72, 0x6b, 0xe2, 0x00,
0x36, 0x1d, 0xdc, 0xa0, 0xf8, 0x30, 0x02, 0x48, 0x35, 0x97, 0x2c, 0x31, 0xfd, 0x7d, 0xd0, 0xdc,
0x61, 0x0e, 0x22, 0x20, 0xa3, 0x0c, 0x93, 0x26, 0x43, 0x98, 0xb4, 0x0b, 0x1b, 0xb4, 0x0d, 0xba,
0xc2, 0xfb, 0x0d, 0x9f, 0x11, 0xde, 0xa8, 0x2d, 0x6f, 0xe0, 0x5e, 0xa8, 0x80, 0x8e, 0x6a, 0xd6,
0x43, 0x8d, 0xbb, 0x68, 0x77, 0xaa, 0xd6, 0x0b, 0xb9, 0x09, 0xfd, 0x25, 0xdf, 0x92, 0xfe, 0xf2,
0x72, 0xfe, 0x00, 0x2d, 0x5b, 0x5f, 0x1c, 0x85, 0xdb, 0xe4, 0xf1, 0x68, 0x20, 0x3c, 0x4c, 0x2b,
0xdc, 0x19, 0x8f, 0x73, 0xd7, 0x17, 0x6a, 0xb9, 0xa8, 0xdb, 0x79, 0xfd, 0xf9, 0x77, 0x7e, 0xb6,
0xe7, 0xec, 0xe5, 0x7d, 0xd7, 0xa8, 0xaf, 0x78, 0x0b, 0xd3, 0x6f, 0xfc, 0x7e, 0xa5, 0xff, 0x9a,
0xde, 0xaf, 0x4e, 0xfd, 0x51, 0x93, 0xd9, 0xcb, 0x70, 0xdb, 0x7b, 0x20, 0x74, 0x7b, 0x39, 0x24,
0xc4, 0x4f, 0xcb, 0xdc, 0x4d, 0x0a, 0x37, 0xe3, 0xee, 0x26, 0x71, 0xd7, 0x6d, 0x49, 0x1c, 0xff,
0xfb, 0xc0, 0x44, 0x08, 0x70, 0xfd, 0xdb, 0x6e, 0x0a, 0x57, 0x5f, 0x47, 0x14, 0x6c, 0x84, 0x02,
0xca, 0x61, 0x76, 0x13, 0x58, 0xb4, 0x23, 0x02, 0x59, 0x84, 0x00, 0x6e, 0xc4, 0x8b, 0x10, 0xe8,
0x86, 0x6c, 0xf8, 0x10, 0x63, 0x02, 0x42, 0x9c, 0xdd, 0x04, 0xba, 0xf5, 0x90, 0xc0, 0x59, 0x8c,
0x40, 0xbd, 0xbc, 0x1e, 0x5d, 0x4f, 0x92, 0x9f, 0x3f, 0x6c, 0x24, 0x5e, 0x5f, 0xf6, 0x12, 0xef,
0x1f, 0x9f, 0x36, 0x7b, 0x89, 0x47, 0xfe, 0x30, 0x8f, 0xe8, 0xfb, 0xff, 0x6a, 0x79, 0x0b, 0xd7,
0xf1, 0x15, 0x75, 0x7c, 0xb1, 0xda, 0x5c, 0xd7, 0xb5, 0xaf, 0xc2, 0x75, 0x1d, 0x56, 0x13, 0x3f,
0x2d, 0x42, 0x6d, 0x9f, 0x16, 0xa1, 0xf8, 0x45, 0x5a, 0xbf, 0x1f, 0x71, 0x4a, 0x6b, 0xd1, 0x74,
0x5d, 0xdf, 0xf8, 0xb2, 0x13, 0x7a, 0x67, 0xaf, 0x54, 0x78, 0xea, 0xab, 0xba, 0x9d, 0x2f, 0xf0,
0x59, 0x7d, 0xc5, 0xd3, 0xd4, 0x55, 0xb7, 0x6e, 0xee, 0x7e, 0xd7, 0x98, 0x98, 0xbc, 0xd0, 0x08,
0x4f, 0x14, 0x9f, 0x8c, 0x19, 0x8f, 0xae, 0x1e, 0x0c, 0xe4, 0x74, 0x8f, 0x81, 0xfc, 0xe3, 0xb4,
0xb9, 0x54, 0xfc, 0xda, 0x81, 0x7f, 0x3c, 0x19, 0xc9, 0xe9, 0x4f, 0x8c, 0xa4, 0x7d, 0xb3, 0x4f,
0xe7, 0x6f, 0xf0, 0x80, 0xaf, 0x58, 0xf7, 0x6f, 0x7e, 0xa6, 0xfb, 0xa3, 0x7d, 0xba, 0x3f, 0x22,
0xf2, 0xb1, 0xde, 0x8f, 0x7e, 0xa0, 0xf7, 0xf1, 0x18, 0x6e, 0xba, 0xc1, 0x78, 0xde, 0xee, 0x31,
0x9e, 0xb7, 0x34, 0x9a, 0xe9, 0x30, 0xde, 0xee, 0x18, 0x86, 0x96, 0x41, 0xa4, 0x87, 0xa9, 0x71,
0x83, 0x81, 0x84, 0x87, 0xf6, 0x3f, 0x61, 0xc5, 0xd9, 0x1e, 0x5d, 0x9f, 0x55, 0xeb, 0xfb, 0x55,
0xc5, 0xcf, 0x30, 0x9c, 0x8e, 0xe0, 0xec, 0x87, 0x47, 0x30, 0x19, 0xc7, 0x5f, 0xfb, 0x88, 0xe4,
0x2f, 0x3c, 0x07, 0x2d, 0x26, 0x93, 0xbf, 0x7e, 0x7c, 0x45, 0xac, 0xdb, 0x4f, 0x03, 0x03, 0x4e,
0xf6, 0xfd, 0x7f, 0xae, 0xae, 0x9a, 0x7a, 0xad, 0x4e, 0xaa, 0x45, 0xd3, 0xb2, 0xfe, 0xd2, 0xdf,
0xd6, 0x08, 0xde, 0xae, 0x36, 0x16, 0x84, 0x9f, 0xaa, 0x9c, 0x94, 0x65, 0xcc, 0x8a, 0xa0, 0x42,
0x28, 0x62, 0x4a, 0x97, 0x53, 0x2a, 0x3a, 0x42, 0xe4, 0x49, 0x0d, 0x49, 0x84, 0xe0, 0xed, 0xd5,
0x98, 0xe0, 0xf3, 0xf4, 0x86, 0x69, 0xf3, 0xd8, 0x08, 0x27, 0x04, 0xa3, 0xd3, 0x94, 0x44, 0xe1,
0xd8, 0x5e, 0x6e, 0xb9, 0xc6, 0x8f, 0xe3, 0x12, 0x21, 0x9d, 0x7f, 0x1a, 0xc8, 0xe1, 0x13, 0xe4,
0xb0, 0xbc, 0xe3, 0x75, 0xd5, 0x8b, 0xae, 0x7f, 0x4c, 0xf4, 0xec, 0x8c, 0x1f, 0x6f, 0x75, 0x90,
0xfe, 0xf2, 0xf2, 0x85, 0x34, 0x99, 0x34, 0xd5, 0xb3, 0x23, 0x7e, 0x91, 0x21, 0xcd, 0x32, 0xd2,
0xc2, 0xcc, 0x8e, 0x56, 0x0d, 0xfc, 0x23, 0xda, 0xe8, 0x22, 0x4d, 0xec, 0xec, 0xaf, 0xf9, 0x5d,
0xa3, 0x68, 0x1f, 0x8b, 0x34, 0xc8, 0xa4, 0xc1, 0x29, 0xbf, 0x5f, 0x4e, 0xd1, 0x76, 0x15, 0x69,
0xe7, 0x66, 0xc7, 0xfc, 0xa6, 0xc5, 0x53, 0x75, 0xe0, 0x62, 0x6d, 0xfc, 0xec, 0xec, 0x4b, 0xd3,
0xdc, 0xa9, 0x03, 0x1f, 0x6b, 0x91, 0xcf, 0xfe, 0x78, 0x24, 0x36, 0xcd, 0x6b, 0x75, 0x90, 0xc7,
0xda, 0x14, 0xd2, 0x53, 0xbb, 0x5c, 0x12, 0xa5, 0x22, 0xd6, 0xaa, 0x9c, 0x9d, 0x56, 0xf3, 0xc5,
0xc5, 0xf2, 0x8b, 0x3a, 0x28, 0xa3, 0x1c, 0x4c, 0x67, 0x67, 0x75, 0xb5, 0x20, 0x0e, 0xc6, 0x99,
0xac, 0xa5, 0xc9, 0x57, 0x43, 0xad, 0xa2, 0x8c, 0xd6, 0x66, 0xf6, 0xba, 0xba, 0x24, 0x36, 0xea,
0x28, 0xa3, 0xb5, 0x9d, 0x1d, 0xdf, 0xe0, 0x81, 0xad, 0x07, 0x3a, 0xca, 0x6b, 0x9d, 0x85, 0x36,
0xc7, 0x2d, 0x35, 0x8b, 0xb2, 0x5a, 0xbb, 0xd9, 0xe9, 0xfd, 0x62, 0x31, 0x5f, 0x5c, 0x53, 0xab,
0x28, 0xb3, 0xb5, 0x9f, 0x9d, 0x7f, 0xa1, 0xf5, 0xd1, 0xa2, 0xcb, 0x28, 0xc3, 0x75, 0xbe, 0x69,
0x45, 0x92, 0xd3, 0x51, 0xa6, 0xeb, 0x62, 0xd3, 0x2e, 0xcc, 0x34, 0xca, 0x79, 0x5d, 0x6e, 0x49,
0xbe, 0xa6, 0x86, 0x51, 0xf6, 0x1b, 0x62, 0xff, 0x5d, 0xb5, 0xe2, 0x11, 0x9a, 0xa8, 0x04, 0x8c,
0xde, 0xb4, 0x7a, 0xb7, 0x78, 0xa0, 0x96, 0xf1, 0xe5, 0x6e, 0x86, 0x2d, 0xff, 0x9b, 0x9a, 0x46,
0xa5, 0x61, 0xec, 0xec, 0x6c, 0xbd, 0x5a, 0x5e, 0xa0, 0xe7, 0xa8, 0x38, 0x4c, 0xd6, 0x37, 0x82,
0x3c, 0x4c, 0x54, 0x1e, 0xc6, 0xf5, 0xed, 0xd0, 0x67, 0x54, 0x20, 0xc6, 0x07, 0x85, 0x65, 0x6a,
0x51, 0x89, 0x98, 0x7c, 0xf6, 0x6a, 0x71, 0xb9, 0x5a, 0x42, 0xf7, 0x4d, 0x54, 0x1e, 0xa6, 0xe8,
0x97, 0x93, 0x89, 0x0a, 0xc2, 0x94, 0xa1, 0x0d, 0x49, 0xd6, 0x44, 0xa5, 0x60, 0xd3, 0xbe, 0x55,
0xaf, 0x2f, 0x36, 0x2a, 0x0b, 0xab, 0x43, 0xdb, 0xd7, 0xb4, 0x55, 0x90, 0x59, 0xb1, 0x51, 0x59,
0x58, 0xd3, 0x53, 0xa5, 0x25, 0x60, 0xe3, 0xe6, 0xc7, 0x6e, 0x57, 0x3c, 0x4b, 0xd7, 0x46, 0xa5,
0x61, 0x33, 0xd1, 0xfb, 0xab, 0x7b, 0x62, 0x9f, 0x8d, 0x0a, 0xc3, 0xba, 0xd9, 0xf9, 0xaa, 0xba,
0xba, 0x22, 0x13, 0xf2, 0x27, 0xec, 0x3b, 0xb5, 0x8d, 0x4a, 0xc4, 0xf6, 0x06, 0xe9, 0xf4, 0xc0,
0x46, 0xe5, 0x61, 0xf3, 0x8d, 0xb6, 0x91, 0x0d, 0xb0, 0x51, 0x89, 0xd8, 0x62, 0x46, 0xbe, 0xe2,
0x0b, 0xf6, 0x99, 0x0e, 0x6c, 0x54, 0x28, 0xb6, 0xdc, 0x90, 0x23, 0xb1, 0xd8, 0xa8, 0x58, 0x32,
0xb1, 0x4d, 0x8b, 0x66, 0x45, 0x46, 0x37, 0x2a, 0x90, 0x4c, 0xcf, 0x78, 0x96, 0x37, 0x4b, 0x6c,
0x4a, 0x07, 0x59, 0x54, 0x1e, 0x19, 0x59, 0xa8, 0xf9, 0xaa, 0xf9, 0xb2, 0x5c, 0x7d, 0xee, 0xa8,
0x5d, 0x54, 0x20, 0x99, 0x1d, 0xb4, 0xa3, 0x01, 0x66, 0xf1, 0x8d, 0x01, 0xc6, 0x6a, 0x45, 0x91,
0xd6, 0x6d, 0x05, 0x8a, 0x51, 0x81, 0x64, 0x8e, 0x29, 0xd2, 0x92, 0xa1, 0x5d, 0x94, 0x67, 0x13,
0x95, 0x47, 0xe6, 0x67, 0x6f, 0xc2, 0x73, 0x55, 0xa9, 0x59, 0x54, 0x22, 0x59, 0xde, 0x3f, 0x87,
0x8d, 0x5a, 0x45, 0xe5, 0x91, 0x15, 0xb2, 0x73, 0xbd, 0xfb, 0x48, 0xad, 0xa2, 0xe2, 0xc8, 0xca,
0xd0, 0xea, 0x1d, 0xb5, 0x8a, 0x0a, 0xc3, 0xa5, 0xd2, 0xea, 0x23, 0xd1, 0x72, 0x51, 0x61, 0x38,
0x1d, 0x5a, 0x11, 0x2d, 0x17, 0x95, 0x84, 0x23, 0xcd, 0x20, 0x97, 0xe3, 0x9e, 0x98, 0xe6, 0xa2,
0x62, 0x70, 0x76, 0xf6, 0xb6, 0xc2, 0xc3, 0x76, 0xe1, 0xff, 0x1f, 0xb8, 0xa8, 0x10, 0x5c, 0x46,
0xab, 0x7d, 0x2e, 0xef, 0x38, 0x0e, 0xf6, 0xc0, 0xc5, 0xb7, 0x68, 0xb7, 0x6d, 0x2c, 0xbb, 0xbe,
0x8b, 0x8a, 0xc2, 0xf9, 0x6d, 0x5b, 0x31, 0xf8, 0x2e, 0x2a, 0x0f, 0x97, 0xcb, 0x22, 0x64, 0x81,
0xb8, 0xa8, 0x40, 0x5c, 0x31, 0x7b, 0x77, 0xfc, 0xbf, 0xd4, 0x22, 0x2a, 0x0c, 0x57, 0xce, 0xde,
0xdf, 0xb7, 0xeb, 0xb9, 0x3a, 0x5e, 0xde, 0x36, 0xb4, 0x04, 0x5c, 0x54, 0x20, 0x7e, 0xab, 0x1d,
0xd8, 0x99, 0x7d, 0x54, 0x26, 0x5e, 0xcf, 0x82, 0xeb, 0x12, 0xd8, 0xe3, 0xa3, 0x82, 0xf1, 0x66,
0xf6, 0xb1, 0xab, 0xe7, 0x2d, 0x1e, 0x57, 0x4b, 0xed, 0xa2, 0xb2, 0xf1, 0x76, 0x76, 0xb2, 0x9a,
0x13, 0x4b, 0x4c, 0xaa, 0x1d, 0x35, 0x8c, 0x0a, 0xc7, 0x67, 0xb3, 0x7f, 0xdd, 0x5f, 0x5f, 0x63,
0x7b, 0xf3, 0x51, 0xa1, 0x78, 0x37, 0x3b, 0xa9, 0xda, 0x66, 0xcd, 0x7d, 0xc6, 0x3d, 0x27, 0x2f,
0x4a, 0x44, 0x5d, 0x62, 0xba, 0x51, 0x51, 0xf8, 0x5c, 0x8c, 0xe4, 0x97, 0xea, 0xa1, 0xa1, 0x05,
0xe6, 0xa3, 0xc2, 0xf0, 0xc5, 0xec, 0xe8, 0xe4, 0x3d, 0xb5, 0x88, 0x0a, 0xc3, 0x97, 0xd4, 0x65,
0xdb, 0xaa, 0x0f, 0x78, 0x54, 0xb4, 0x2a, 0xa8, 0x69, 0x54, 0x1a, 0x79, 0x3a, 0x93, 0x56, 0xc0,
0x14, 0xc9, 0x73, 0x8b, 0x4a, 0x23, 0xd7, 0xdb, 0x86, 0x34, 0x8f, 0x3c, 0x2a, 0x8b, 0xdc, 0x6c,
0x1b, 0x5a, 0x6a, 0x18, 0x15, 0x46, 0x6e, 0xb7, 0x0d, 0x33, 0x6a, 0x18, 0x15, 0x46, 0x1e, 0xb6,
0x8f, 0x75, 0xef, 0x13, 0xe5, 0x51, 0x91, 0xe4, 0x6e, 0xf6, 0x67, 0xf5, 0x19, 0x4d, 0x06, 0xf2,
0x00, 0xe0, 0xc5, 0x9e, 0xf9, 0xd6, 0xaf, 0x3f, 0xa3, 0x35, 0xda, 0x35, 0xf5, 0x72, 0x71, 0x59,
0xad, 0x1e, 0x95, 0xe8, 0xca, 0x7a, 0xa9, 0x5e, 0xca, 0xd3, 0x82, 0x25, 0x78, 0x0b, 0xff, 0x6f,
0x00, 0x9f, 0x33, 0xf2, 0xe7, 0x67, 0x1c, 0xc4, 0xbd, 0x7c, 0x21, 0xe7, 0x66, 0xdf, 0xbb, 0x80,
0x82, 0x98, 0x23, 0x3c, 0x58, 0x7a, 0xef, 0x0b, 0xcc, 0x2f, 0x61, 0xcd, 0xef, 0x7d, 0x85, 0xfd,
0x05, 0x4b, 0xfa, 0x96, 0xa6, 0xb1, 0xf7, 0x25, 0xd9, 0x2f, 0xb4, 0x77, 0x56, 0x77, 0xea, 0xe4,
0xc5, 0xd9, 0xf6, 0x1a, 0x62, 0xc0, 0x77, 0x2e, 0x73, 0x74, 0x19, 0xb1, 0x2d, 0xf4, 0x06, 0x76,
0x4d, 0x86, 0xda, 0x07, 0xa4, 0x57, 0x77, 0x9f, 0x04, 0x38, 0x7a, 0x5d, 0x75, 0x6b, 0xbc, 0x68,
0x3d, 0x68, 0xc9, 0xee, 0xa8, 0xea, 0xf5, 0xc9, 0x20, 0xaa, 0x3a, 0x79, 0x2e, 0xaa, 0xfa, 0xa3,
0xb9, 0xaa, 0xc8, 0xc6, 0x44, 0x63, 0xaa, 0xde, 0x5a, 0x3c, 0x52, 0x50, 0x18, 0x0d, 0xab, 0xfa,
0xe1, 0x4b, 0xc8, 0xf3, 0x71, 0xd1, 0x3e, 0x46, 0xc3, 0xab, 0x23, 0xb2, 0x3a, 0x97, 0x0a, 0x2f,
0xa6, 0xe9, 0x19, 0xbc, 0x7b, 0x1f, 0x62, 0xb6, 0x30, 0xbd, 0xee, 0x39, 0x82, 0x6e, 0x4b, 0x70,
0x7b, 0x41, 0x34, 0xdc, 0x3a, 0xa9, 0x56, 0xeb, 0x18, 0x25, 0xb2, 0x14, 0xed, 0xf2, 0xfe, 0x32,
0x1a, 0x64, 0xfd, 0x59, 0x3d, 0x54, 0xd1, 0xd8, 0xea, 0x63, 0xdd, 0x54, 0x8b, 0x78, 0x54, 0xf5,
0x7a, 0xb9, 0x6a, 0xba, 0x28, 0x8f, 0x75, 0x1f, 0x9a, 0xc5, 0xa3, 0xa9, 0xde, 0x17, 0xc5, 0x4b,
0xd2, 0xee, 0x62, 0x72, 0xa0, 0x90, 0xea, 0xec, 0x7e, 0xd1, 0x35, 0xd1, 0x8e, 0xb2, 0xd9, 0xe9,
0xfc, 0xa1, 0x59, 0x5c, 0x36, 0x6d, 0x1b, 0x0f, 0xa5, 0x28, 0x44, 0x6e, 0xbe, 0x45, 0xbb, 0xf0,
0x70, 0xea, 0xd4, 0x3f, 0x15, 0xdc, 0xba, 0x78, 0x08, 0xf5, 0x1f, 0x7e, 0x30, 0xfe, 0xf2, 0x3e,
0x3a, 0x92, 0x82, 0x7c, 0xfa, 0xaa, 0x5d, 0x5e, 0x93, 0x9b, 0x16, 0x8f, 0x9a, 0xce, 0xee, 0xe0,
0x55, 0xc7, 0x83, 0xa5, 0x13, 0xd2, 0x84, 0x26, 0x36, 0x13, 0x84, 0x49, 0xcc, 0x0c, 0x13, 0x8f,
0x8e, 0x8e, 0x9a, 0xa6, 0x8e, 0xd2, 0xb7, 0xb3, 0x7f, 0xcf, 0x17, 0xeb, 0xea, 0x3a, 0xba, 0xea,
0x33, 0xd2, 0x9d, 0x3b, 0x3c, 0x35, 0x77, 0x15, 0x6d, 0x02, 0xc3, 0xb9, 0xb8, 0xec, 0xea, 0x2a,
0x2a, 0x33, 0x04, 0x41, 0x4d, 0x15, 0x1f, 0x45, 0x3e, 0x3b, 0xbb, 0x69, 0x56, 0x17, 0x51, 0x99,
0x52, 0xdc, 0xf3, 0x36, 0xae, 0xbe, 0x14, 0xf1, 0xe0, 0xac, 0xcf, 0xe2, 0xb1, 0xce, 0x1f, 0xab,
0xc7, 0x2f, 0x51, 0xea, 0x14, 0xdf, 0xfc, 0xeb, 0x3e, 0xc6, 0x61, 0x0a, 0x69, 0xde, 0xac, 0x9e,
0x65, 0x11, 0x45, 0x33, 0xa7, 0xcd, 0x97, 0x9b, 0x79, 0x3c, 0x82, 0x39, 0x6f, 0x56, 0xeb, 0x79,
0xdc, 0x0a, 0x58, 0xf1, 0x95, 0xe3, 0xe1, 0xca, 0xbb, 0xba, 0xb9, 0x7a, 0xa6, 0x01, 0xe9, 0xf4,
0x63, 0xb5, 0x88, 0x9e, 0x2e, 0xc4, 0x4f, 0x53, 0x27, 0xb4, 0x05, 0xc6, 0xc3, 0x93, 0x57, 0xf7,
0xeb, 0xfb, 0xdb, 0x98, 0x72, 0x53, 0x58, 0xf2, 0x9e, 0x18, 0x40, 0x5c, 0x88, 0x47, 0x24, 0xd4,
0x60, 0xd5, 0xc4, 0x0c, 0x0b, 0x05, 0x22, 0xa4, 0x2d, 0xb7, 0xd5, 0x75, 0x3c, 0x00, 0xa1, 0xf3,
0x17, 0xed, 0x7d, 0x3c, 0xec, 0xf8, 0x28, 0x88, 0xe8, 0x3f, 0xd5, 0x79, 0x53, 0xc5, 0x84, 0x45,
0x64, 0xce, 0xe7, 0xd5, 0x6d, 0x15, 0x93, 0x34, 0x91, 0x79, 0x75, 0xb7, 0x9a, 0x93, 0x7b, 0x03,
0x8e, 0xec, 0xda, 0xe5, 0x27, 0xe8, 0xec, 0xa7, 0x7d, 0xd0, 0xd9, 0x00, 0x9a, 0x9e, 0xdd, 0x35,
0xcd, 0xe5, 0x53, 0x78, 0xf6, 0xd3, 0xbe, 0xf0, 0xec, 0xa7, 0x1d, 0x28, 0xf5, 0xbb, 0xbf, 0xd1,
0xff, 0xbb, 0xc5, 0xba, 0x59, 0x74, 0xf3, 0xf5, 0xe3, 0x93, 0x31, 0xbc, 0xfb, 0x91, 0x31, 0x4c,
0x80, 0xe2, 0x93, 0x31, 0x50, 0xfc, 0xba, 0x7a, 0x58, 0xae, 0x00, 0x4a, 0x9f, 0x90, 0xcd, 0x6f,
0xd6, 0xdd, 0x13, 0xb0, 0xf8, 0xae, 0x6b, 0x37, 0x1e, 0x00, 0xbf, 0x9d, 0x8d, 0xdf, 0x4b, 0x16,
0x83, 0x8b, 0x27, 0x45, 0x2d, 0xb1, 0x34, 0xde, 0xdd, 0x00, 0x97, 0x0d, 0xef, 0xbf, 0xfb, 0x59,
0xf4, 0xf8, 0xae, 0x5b, 0x3c, 0x25, 0xfa, 0xb3, 0x08, 0xf2, 0x5d, 0xd7, 0x8d, 0x27, 0xcf, 0x2f,
0x59, 0x7e, 0x8e, 0xe6, 0xa0, 0x4c, 0x61, 0x42, 0x12, 0x8c, 0x15, 0xc9, 0x33, 0xe1, 0x77, 0xc1,
0xf5, 0x79, 0xad, 0x06, 0xaf, 0x52, 0xe8, 0x77, 0x13, 0x16, 0xaf, 0x0e, 0xe2, 0x0d, 0xd2, 0xdd,
0x7a, 0xae, 0xc7, 0x18, 0x8f, 0xda, 0xf0, 0x1a, 0x6e, 0x58, 0x75, 0x77, 0xd7, 0x3e, 0x8e, 0x56,
0x16, 0x9f, 0xbe, 0x58, 0x7e, 0x55, 0xe1, 0x45, 0x51, 0xfc, 0x76, 0x3b, 0xe9, 0xf3, 0xe8, 0x78,
0xa6, 0x2e, 0x36, 0x29, 0xba, 0x5f, 0xf7, 0xbd, 0xec, 0x98, 0x2e, 0x13, 0x37, 0x99, 0x76, 0x89,
0x7d, 0x2f, 0x7a, 0x4d, 0x17, 0x35, 0xbc, 0xae, 0xbb, 0xc3, 0xed, 0x04, 0xe0, 0x9e, 0xa9, 0xf5,
0xcd, 0x6a, 0x79, 0x7f, 0x7d, 0xa3, 0xee, 0x64, 0xe5, 0xa9, 0x2d, 0x77, 0xea, 0x47, 0x2d, 0x57,
0x9f, 0xe8, 0xbd, 0xb9, 0xc3, 0xbe, 0xfb, 0x80, 0x82, 0x09, 0x14, 0xcc, 0x0e, 0x0a, 0x6e, 0x27,
0x85, 0x5f, 0xd5, 0x67, 0xa0, 0x49, 0xd8, 0xdf, 0x14, 0x92, 0x1b, 0x43, 0x6a, 0xe7, 0x81, 0xda,
0xf9, 0xae, 0xf1, 0x18, 0x27, 0xfa, 0xe8, 0x44, 0x21, 0xbd, 0x43, 0xae, 0x3e, 0x10, 0xbd, 0xed,
0x7e, 0xdb, 0xcd, 0x2a, 0x61, 0xe9, 0x7f, 0x36, 0xcb, 0x8b, 0x5f, 0xf5, 0x35, 0xc8, 0x3a, 0x3c,
0xe3, 0x88, 0x9f, 0x52, 0xc3, 0x57, 0x2c, 0xf0, 0x8b, 0xe5, 0x72, 0x4d, 0x32, 0x59, 0x5c, 0xcd,
0xaf, 0xb7, 0x2e, 0x38, 0x48, 0x4c, 0x94, 0xfe, 0xc3, 0x58, 0xe9, 0xcf, 0xe7, 0xb7, 0xe4, 0x16,
0xf1, 0x6e, 0xf2, 0x44, 0xdf, 0x17, 0xa3, 0xf4, 0x32, 0xde, 0xf8, 0xf7, 0x37, 0x13, 0xfe, 0x1b,
0x8a, 0x00, 0x83, 0xee, 0xab, 0x96, 0x86, 0x79, 0x39, 0xbf, 0x55, 0x50, 0x8c, 0x7d, 0x17, 0xcd,
0x87, 0x63, 0xa1, 0xa0, 0x3b, 0x0a, 0xd1, 0xf8, 0x3d, 0x19, 0x8a, 0x57, 0xc8, 0x65, 0x9f, 0xc5,
0x3b, 0x40, 0x99, 0x86, 0x23, 0x9e, 0xff, 0xf2, 0xab, 0x32, 0xb4, 0x18, 0xf9, 0xec, 0xba, 0x5a,
0x5d, 0x93, 0x53, 0xbd, 0x5d, 0xd9, 0x87, 0x5b, 0xfb, 0xfb, 0x61, 0x0f, 0xfb, 0xfb, 0x47, 0x2c,
0x47, 0xf8, 0x61, 0x03, 0x5b, 0x8c, 0xd6, 0xcd, 0x56, 0x31, 0x27, 0xc6, 0xfe, 0x7c, 0x1f, 0x63,
0x7f, 0x2e, 0xa3, 0xdd, 0xa6, 0xca, 0x9f, 0xee, 0x38, 0xe7, 0xcf, 0x5a, 0xfb, 0x91, 0x7d, 0x17,
0xf3, 0xf2, 0x02, 0xa9, 0xfb, 0xcd, 0x2f, 0xf2, 0x62, 0x21, 0x29, 0x19, 0xb8, 0x52, 0x78, 0x0b,
0x65, 0x75, 0x41, 0x4e, 0xee, 0x6f, 0x17, 0x6d, 0xb5, 0xf8, 0x4c, 0xad, 0xe4, 0x3c, 0xfd, 0x83,
0x37, 0x2b, 0xe0, 0x35, 0x0b, 0xeb, 0xdb, 0x76, 0xf6, 0xff, 0x0c, 0x32, 0x5d, 0x3f, 0xb1, 0x8b,
0x00, 0x00,
};

1284
wled00/html_mobile.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -188,7 +188,7 @@ Color Theme:
<option value="10">Terminal</option> <option value="10">Terminal</option>
<option value="11">C64</option> <option value="11">C64</option>
<option value="12">Easter</option> <option value="12">Easter</option>
<option value="13">Placeholder</option> <option value="13">Christmas</option>
<option value="14">The End</option> <option value="14">The End</option>
<option value="15" id="co">Custom</option> <option value="15" id="co">Custom</option>
</select><br> </select><br>
@ -411,7 +411,7 @@ HTTP traffic is unencrypted. An attacker in the same network can intercept form
<button type="button" onclick="U()">Manual OTA Update</button><br> <button type="button" onclick="U()">Manual OTA Update</button><br>
Enable ArduinoOTA: <input type="checkbox" name="AO"><br> Enable ArduinoOTA: <input type="checkbox" name="AO"><br>
<h3>About</h3> <h3>About</h3>
<a href="https://github.com/Aircoookie/WLED" target="_blank">WLED</a> version 0.8.1<br><br> <a href="https://github.com/Aircoookie/WLED" target="_blank">WLED</a> version 0.8.2-dev<br><br>
<b>Contributors:</b><br> <b>Contributors:</b><br>
StormPie <i>(Mobile HTML UI)</i><br><br> StormPie <i>(Mobile HTML UI)</i><br><br>
Thank you so much!<br><br> Thank you so much!<br><br>

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@
*/ */
/* /*
* @title WLED project sketch * @title WLED project sketch
* @version 0.8.1 * @version 0.8.2-dev
* @author Christian Schwinne * @author Christian Schwinne
*/ */
@ -11,11 +11,9 @@
//ESP8266-01 (blue) got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.3.0 and the setting 512K(64K SPIFFS). //ESP8266-01 (blue) got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.3.0 and the setting 512K(64K SPIFFS).
//ESP8266-01 (black) has 1MB flash and can thus fit the whole program. Use 1M(64K SPIFFS). //ESP8266-01 (black) has 1MB flash and can thus fit the whole program. Use 1M(64K SPIFFS).
//If you want the OTA update function though, you need to make sure the sketch is smaller than 479kB.
//Uncomment some of the following lines to disable features to compile for ESP8266-01 (max flash size 434kB): //Uncomment some of the following lines to disable features to compile for ESP8266-01 (max flash size 434kB):
//You are required to disable these two features: //You are required to disable over-the-air updates:
//#define WLED_DISABLE_MOBILE_UI
//#define WLED_DISABLE_OTA //#define WLED_DISABLE_OTA
//You need to choose 1-2 of these features to disable: //You need to choose 1-2 of these features to disable:
@ -23,6 +21,7 @@
//#define WLED_DISABLE_BLYNK //#define WLED_DISABLE_BLYNK
//#define WLED_DISABLE_CRONIXIE //#define WLED_DISABLE_CRONIXIE
//#define WLED_DISABLE_HUESYNC //#define WLED_DISABLE_HUESYNC
//#define WLED_DISABLE_MOBILE_UI
//to toggle usb serial debug (un)comment following line(s) //to toggle usb serial debug (un)comment following line(s)
//#define DEBUG //#define DEBUG
@ -56,15 +55,16 @@
#endif #endif
#include "src/dependencies/e131/E131.h" #include "src/dependencies/e131/E131.h"
#include "src/dependencies/pubsubclient/PubSubClient.h" #include "src/dependencies/pubsubclient/PubSubClient.h"
#include "htmls00.h" #include "html_classic.h"
#include "htmls01.h" #include "html_mobile.h"
#include "htmls02.h" #include "html_settings.h"
#include "html_other.h"
#include "WS2812FX.h" #include "WS2812FX.h"
//version code in format yymmddb (b = daily build) //version code in format yymmddb (b = daily build)
#define VERSION 1811091 #define VERSION 1811162
char versionString[] = "0.8.1"; char versionString[] = "0.8.2-dev";
//AP and OTA default passwords (for maximum change them!) //AP and OTA default passwords (for maximum change them!)
@ -287,7 +287,6 @@ bool udpConnected = false, udpRgbConnected = false;
//ui style //ui style
char cssCol[6][9]={"","","","","",""}; char cssCol[6][9]={"","","","","",""};
String cssColorString="";
bool showWelcomePage = false; bool showWelcomePage = false;
//hue //hue
@ -376,7 +375,7 @@ unsigned int ntpLocalPort = 2390;
#define NTP_PACKET_SIZE 48 #define NTP_PACKET_SIZE 48
//string temp buffer //string temp buffer
#define OMAX 1750 #define OMAX 2000
char obuf[OMAX]; char obuf[OMAX];
uint16_t olen = 0; uint16_t olen = 0;

View File

@ -3,7 +3,7 @@
*/ */
//build XML response to HTTP /win API request //build XML response to HTTP /win API request
void XML_response(bool isHTTP) void XML_response(bool isHTTP, bool includeTheme)
{ {
olen = 0; olen = 0;
oappend("<?xml version = \"1.0\" ?><vs><ac>"); oappend("<?xml version = \"1.0\" ?><vs><ac>");
@ -47,7 +47,28 @@ void XML_response(bool isHTTP)
oappendi(useHSB); oappendi(useHSB);
oappend("</md><ds>"); oappend("</md><ds>");
oappend(serverDescription); oappend(serverDescription);
oappend("</ds></vs>"); oappend("</ds>");
if (includeTheme)
{
char cs[6][9];
getThemeColors(cs);
oappend("<th><ca>#");
oappend(cs[0]);
oappend("</ca><cb>#");
oappend(cs[1]);
oappend("</cb><cc>#");
oappend(cs[2]);
oappend("</cc><cd>#");
oappend(cs[3]);
oappend("</cd><cs>#");
oappend(cs[4]);
oappend("</cs><ct>#");
oappend(cs[5]);
oappend("</ct><cf>");
oappend(cssFont);
oappend("</cf></th>");
}
oappend("</vs>");
if (isHTTP) server.send(200, "text/xml", obuf); if (isHTTP) server.send(200, "text/xml", obuf);
} }
@ -320,3 +341,29 @@ void getSettingsJS(byte subPage)
} }
oappend("}</script>"); oappend("}</script>");
} }
//get colors from current theme as c strings
void getThemeColors(char o[][9])
{
switch (currentTheme)
{
// accent color (aCol) background (bCol) panel (cCol) controls (dCol) shadows (sCol) text (tCol)
default: strcpy(o[0], "D9B310"); strcpy(o[1], "0B3C5D"); strcpy(o[2], "1D2731"); strcpy(o[3], "328CC1"); strcpy(o[4], "000"); strcpy(o[5], "328CC1"); break; //night
case 1: strcpy(o[0], "eee"); strcpy(o[1], "ddd"); strcpy(o[2], "b9b9b9"); strcpy(o[3], "049"); strcpy(o[4], "777"); strcpy(o[5], "049"); break; //modern
case 2: strcpy(o[0], "abc"); strcpy(o[1], "fff"); strcpy(o[2], "ddd"); strcpy(o[3], "000"); strcpy(o[4], "0004"); strcpy(o[5], "000"); break; //bright
case 3: strcpy(o[0], "c09f80"); strcpy(o[1], "d7cec7"); strcpy(o[2], "76323f"); strcpy(o[3], "888"); strcpy(o[4], "3334"); strcpy(o[5], "888"); break; //wine
case 4: strcpy(o[0], "3cc47c"); strcpy(o[1], "828081"); strcpy(o[2], "d9a803"); strcpy(o[3], "1e392a"); strcpy(o[4], "000a"); strcpy(o[5], "1e392a"); break; //electric
case 5: strcpy(o[0], "57bc90"); strcpy(o[1], "a5a5af"); strcpy(o[2], "015249"); strcpy(o[3], "88c9d4"); strcpy(o[4], "0004"); strcpy(o[5], "88c9d4"); break; //mint
case 6: strcpy(o[0], "f7c331"); strcpy(o[1], "dcc7aa"); strcpy(o[2], "6b7a8f"); strcpy(o[3], "f7882f"); strcpy(o[4], "0007"); strcpy(o[5], "f7882f"); break; //amber
case 7: strcpy(o[0], "fc3"); strcpy(o[1], "124"); strcpy(o[2], "334"); strcpy(o[3], "f1d"); strcpy(o[4], "f00"); strcpy(o[5], "f1d"); break; //club
case 8: strcpy(o[0], "0ac"); strcpy(o[1], "124"); strcpy(o[2], "224"); strcpy(o[3], "003eff"); strcpy(o[4], "003eff"); strcpy(o[5], "003eff"); break; //air
case 9: strcpy(o[0], "f70"); strcpy(o[1], "421"); strcpy(o[2], "221"); strcpy(o[3], "a50"); strcpy(o[4], "f70"); strcpy(o[5], "f70"); break; //nixie
case 10: strcpy(o[0], "2d2"); strcpy(o[1], "010"); strcpy(o[2], "121"); strcpy(o[3], "060"); strcpy(o[4], "040"); strcpy(o[5], "3f3"); break; //terminal
case 11: strcpy(o[0], "867ADE"); strcpy(o[1], "4033A3"); strcpy(o[2], "483AAA"); strcpy(o[3], "483AAA"); strcpy(o[4], ""); strcpy(o[5], "867ADE"); break; //c64
case 12: strcpy(o[0], "fbe8a6"); strcpy(o[1], "d2fdff"); strcpy(o[2], "b4dfe5"); strcpy(o[3], "f4976c"); strcpy(o[4], ""); strcpy(o[5], "303c6c"); break; //easter
case 13: strcpy(o[0], "d4af37"); strcpy(o[1], "173305"); strcpy(o[2], "308505"); strcpy(o[3], "f21313"); strcpy(o[4], "f002"); strcpy(o[5], "d4af37"); break; //christmas
case 14: strcpy(o[0], "fc7"); strcpy(o[1], "49274a"); strcpy(o[2], "94618e"); strcpy(o[3], "f4decb"); strcpy(o[4], "0008"); strcpy(o[5], "f4decb"); break; //end
case 15: for (int i=0;i<6;i++) strcpy(o[i], cssCol[i]); //custom
}
}

View File

@ -138,7 +138,6 @@ void handleSettingsSet(byte subPage)
strcpy(cssCol[i],server.arg(k).c_str()); strcpy(cssCol[i],server.arg(k).c_str());
} }
strcpy(cssFont,server.arg("CF").c_str()); strcpy(cssFont,server.arg("CF").c_str());
buildCssColorString();
} }
//SYNC //SYNC
@ -280,7 +279,7 @@ void handleSettingsSet(byte subPage)
if (server.hasArg("RS")) //complete factory reset if (server.hasArg("RS")) //complete factory reset
{ {
clearEEPROM(); clearEEPROM();
serveMessage(200, "All Settings erased.", "Connect to WLED-AP to setup again...",255); serveMessage(200, "All Settings erased.", "Connect to WLED-AP to setup again",255);
reset(); reset();
} }
@ -331,7 +330,7 @@ bool handleSet(String req)
} }
pos = req.indexOf("IN"); pos = req.indexOf("IN");
if (pos < 1) XML_response(true); if (pos < 1) XML_response(true, false);
return true; return true;
//if you save a macro in one request, other commands in that request are ignored due to unwanted behavior otherwise //if you save a macro in one request, other commands in that request are ignored due to unwanted behavior otherwise
} }
@ -744,7 +743,7 @@ bool handleSet(String req)
//internal call, does not send XML response //internal call, does not send XML response
pos = req.indexOf("IN"); pos = req.indexOf("IN");
if (pos < 1) XML_response(true); if (pos < 1) XML_response(true, (req.indexOf("IT") > 0)); //include theme if firstload
//do not send UDP notifications this time //do not send UDP notifications this time
pos = req.indexOf("NN"); pos = req.indexOf("NN");
if (pos > 0) if (pos > 0)

View File

@ -24,7 +24,6 @@ void wledInit()
if (!initLedsLast) initStrip(); if (!initLedsLast) initStrip();
DEBUG_PRINT("CSSID: "); DEBUG_PRINT("CSSID: ");
DEBUG_PRINT(clientSSID); DEBUG_PRINT(clientSSID);
buildCssColorString();
userBeginPreConnection(); userBeginPreConnection();
if (strcmp(clientSSID,"Your_Network") == 0) showWelcomePage = true; if (strcmp(clientSSID,"Your_Network") == 0) showWelcomePage = true;

View File

@ -60,7 +60,7 @@ void publishMQTT()
//if you want to use this, increase the MQTT buffer in PubSubClient.h to 350+ //if you want to use this, increase the MQTT buffer in PubSubClient.h to 350+
//it will publish the API response to MQTT //it will publish the API response to MQTT
/*XML_response(false); /*XML_response(false, false);
strcpy(subuf, mqttDeviceTopic); strcpy(subuf, mqttDeviceTopic);
strcat(subuf, "/v"); strcat(subuf, "/v");
mqtt->publish(subuf, obuf);*/ mqtt->publish(subuf, obuf);*/

View File

@ -103,7 +103,7 @@ void initServer()
server.on("/power", HTTP_GET, [](){ server.on("/power", HTTP_GET, [](){
String val = (String)(int)strip.getPowerEstimate(ledCount,strip.getColor(),strip.getBrightness()); String val = (String)(int)strip.getPowerEstimate(ledCount,strip.getColor(),strip.getBrightness());
val += "mA currently"; val += "mA currently";
serveMessage(200,val,"This is just an estimate (does not take into account several factors like effects and wire resistance). It is NOT an accurate measurement!",254); serveMessage(200,val,"This is just an estimate (does not account for factors like effects and wire resistance). It is NOT a measurement!",254);
}); });
server.on("/u", HTTP_GET, [](){ server.on("/u", HTTP_GET, [](){
@ -136,7 +136,7 @@ void initServer()
httpUpdater.setup(&server); httpUpdater.setup(&server);
#else #else
server.on("/update", HTTP_GET, [](){ server.on("/update", HTTP_GET, [](){
serveMessage(500, "Not implemented", "OTA updates are not supported in this build.", 254); serveMessage(500, "Not implemented", "OTA updates are unsupported in this build.", 254);
}); });
#endif #endif
} else } else
@ -185,43 +185,6 @@ void initServer()
#endif #endif
} }
void buildCssColorString()
{
String cs[]={"","","","","",""};
switch (currentTheme)
{
default: cs[0]="D9B310"; cs[1]="0B3C5D"; cs[2]="1D2731"; cs[3]="328CC1"; cs[4]="000"; cs[5]="328CC1"; break; //night
case 1: cs[0]="eee"; cs[1]="ddd"; cs[2]="b9b9b9"; cs[3]="049"; cs[4]="777"; cs[5]="049"; break; //modern
case 2: cs[0]="abc"; cs[1]="fff"; cs[2]="ddd"; cs[3]="000"; cs[4]="0004"; cs[5]="000"; break; //bright
case 3: cs[0]="c09f80"; cs[1]="d7cec7"; cs[2]="76323f"; cs[3]="888"; cs[4]="3334"; cs[5]="888"; break; //wine
case 4: cs[0]="3cc47c"; cs[1]="828081"; cs[2]="d9a803"; cs[3]="1e392a"; cs[4]="000a"; cs[5]="1e392a"; break; //electric
case 5: cs[0]="57bc90"; cs[1]="a5a5af"; cs[2]="015249"; cs[3]="88c9d4"; cs[4]="0004"; cs[5]="88c9d4"; break; //mint
case 6: cs[0]="f7c331"; cs[1]="dcc7aa"; cs[2]="6b7a8f"; cs[3]="f7882f"; cs[4]="0007"; cs[5]="f7882f"; break; //amber
case 7: cs[0]="fc3"; cs[1]="124"; cs[2]="334"; cs[3]="f1d"; cs[4]="f00"; cs[5]="f1d"; break;//club
case 8: cs[0]="0ac"; cs[1]="124"; cs[2]="224"; cs[3]="003eff"; cs[4]="003eff"; cs[5]="003eff"; break;//air
case 9: cs[0]="f70"; cs[1]="421"; cs[2]="221"; cs[3]="a50"; cs[4]="f70"; cs[5]="f70"; break;//nixie
case 10: cs[0]="2d2"; cs[1]="010"; cs[2]="121"; cs[3]="060"; cs[4]="040"; cs[5]="3f3"; break; //terminal
case 11: cs[0]="867ADE"; cs[1]="4033A3"; cs[2]="483AAA"; cs[3]="483AAA"; cs[4]=""; cs[5]="867ADE"; break; //c64
case 12: cs[0]="fbe8a6"; cs[1]="d2fdff"; cs[2]="b4dfe5"; cs[3]="f4976c"; cs[4]=""; cs[5]="303c6c"; break; //c64
case 14: cs[0]="fc7"; cs[1]="49274a"; cs[2]="94618e"; cs[3]="f4decb"; cs[4]="0008"; cs[5]="f4decb"; break; //end
case 15: for (int i=0;i<6;i++)cs[i]=cssCol[i];//custom
}
cssColorString="<style>:root{--aCol:#";
cssColorString+=cs[0];
cssColorString+=";--bCol:#";
cssColorString+=cs[1];
cssColorString+=";--cCol:#";
cssColorString+=cs[2];
cssColorString+=";--dCol:#";
cssColorString+=cs[3];
cssColorString+=";--sCol:#";
cssColorString+=cs[4];
cssColorString+=";--tCol:#";
cssColorString+=cs[5];
cssColorString+=";--cFn:";
cssColorString+=cssFont;
cssColorString+=";}";
}
void serveIndexOrWelcome() void serveIndexOrWelcome()
{ {
@ -253,6 +216,22 @@ void serveRealtimeError(bool settings)
server.send(200, "text/plain", mesg); server.send(200, "text/plain", mesg);
} }
void getCSSColors()
{
char cs[6][9];
getThemeColors(cs);
oappend("<style>:root{--aCol:#"); oappend(cs[0]);
oappend(";--bCol:#"); oappend(cs[1]);
oappend(";--cCol:#"); oappend(cs[2]);
oappend(";--dCol:#"); oappend(cs[3]);
oappend(";--sCol:#"); oappend(cs[4]);
oappend(";--tCol:#"); oappend(cs[5]);
oappend(";--cFn:"); oappend(cssFont);
oappend(";}");
}
void serveIndex() void serveIndex()
{ {
bool serveMobile = false; bool serveMobile = false;
@ -265,25 +244,24 @@ void serveIndex()
return; return;
} }
if (serveMobile) //error message is not gzipped
{ #ifdef WLED_DISABLE_MOBILE_UI
server.setContentLength(strlen_P(PAGE_indexM)); if (!serveMobile) server.sendHeader("Content-Encoding","gzip");
server.send(200, "text/html", ""); #else
server.sendContent_P(PAGE_indexM); server.sendHeader("Content-Encoding","gzip");
} else #endif
{
server.setContentLength(strlen_P(PAGE_index0) + cssColorString.length() + strlen_P(PAGE_index1) + strlen_P(PAGE_index2) + strlen_P(PAGE_index3)); server.send_P(200, "text/html",
server.send(200, "text/html", ""); (serveMobile) ? PAGE_indexM : PAGE_index0,
server.sendContent_P(PAGE_index0); (serveMobile) ? PAGE_indexM_L : PAGE_index0_L);
server.sendContent(cssColorString);
server.sendContent_P(PAGE_index1);
server.sendContent_P(PAGE_index2);
server.sendContent_P(PAGE_index3);
}
} }
void serveMessage(int code, String headl, String subl="", int optionType) void serveMessage(int code, String headl, String subl="", int optionType)
{ {
olen = 0;
getCSSColors();
String messageBody = "<h2>"; String messageBody = "<h2>";
messageBody += headl; messageBody += headl;
messageBody += "</h2>"; messageBody += "</h2>";
@ -305,14 +283,15 @@ void serveMessage(int code, String headl, String subl="", int optionType)
messageBody += "<script>setTimeout(RP," + String((optionType-120)*1000) + ")</script>"; messageBody += "<script>setTimeout(RP," + String((optionType-120)*1000) + ")</script>";
} }
messageBody += "</body></html>"; messageBody += "</body></html>";
server.setContentLength(strlen_P(PAGE_msg0) + cssColorString.length() + strlen_P(PAGE_msg1) + messageBody.length()); server.setContentLength(strlen_P(PAGE_msg0) + olen + strlen_P(PAGE_msg1) + messageBody.length());
server.send(code, "text/html", ""); server.send(code, "text/html", "");
server.sendContent_P(PAGE_msg0); server.sendContent_P(PAGE_msg0);
server.sendContent(cssColorString); server.sendContent(obuf);
server.sendContent_P(PAGE_msg1); server.sendContent_P(PAGE_msg1);
server.sendContent(messageBody); server.sendContent(messageBody);
} }
void serveSettings(byte subPage) void serveSettings(byte subPage)
{ {
if (realtimeActive && !enableRealtimeUI) //do not serve while receiving realtime if (realtimeActive && !enableRealtimeUI) //do not serve while receiving realtime
@ -338,35 +317,38 @@ void serveSettings(byte subPage)
default: pl0 = strlen_P(PAGE_settings0); pl1 = strlen_P(PAGE_settings1); default: pl0 = strlen_P(PAGE_settings0); pl1 = strlen_P(PAGE_settings1);
} }
getSettingsJS(subPage); uint16_t sCssLength = (subPage >0 && subPage <7)?strlen_P(PAGE_settingsCss):0;
int sCssLength = (subPage >0 && subPage <7)?strlen_P(PAGE_settingsCss):0;
server.setContentLength(pl0 + cssColorString.length() + olen + sCssLength + pl1); getSettingsJS(subPage);
getCSSColors();
server.setContentLength(pl0 + olen + sCssLength + pl1);
server.send(200, "text/html", ""); server.send(200, "text/html", "");
switch (subPage) switch (subPage)
{ {
case 1: server.sendContent_P(PAGE_settings_wifi0); break; case 1: server.sendContent_P(PAGE_settings_wifi0); break;
case 2: server.sendContent_P(PAGE_settings_leds0); break; case 2: server.sendContent_P(PAGE_settings_leds0); break;
case 3: server.sendContent_P(PAGE_settings_ui0); break; case 3: server.sendContent_P(PAGE_settings_ui0 ); break;
case 4: server.sendContent_P(PAGE_settings_sync0); break; case 4: server.sendContent_P(PAGE_settings_sync0); break;
case 5: server.sendContent_P(PAGE_settings_time0); break; case 5: server.sendContent_P(PAGE_settings_time0); break;
case 6: server.sendContent_P(PAGE_settings_sec0); break; case 6: server.sendContent_P(PAGE_settings_sec0 ); break;
case 255: server.sendContent_P(PAGE_welcome0); break; case 255: server.sendContent_P(PAGE_welcome0 ); break;
default: server.sendContent_P(PAGE_settings0); default: server.sendContent_P(PAGE_settings0 );
} }
server.sendContent(obuf); server.sendContent(obuf);
server.sendContent(cssColorString);
if (subPage >0 && subPage <7) server.sendContent_P(PAGE_settingsCss); if (subPage >0 && subPage <7) server.sendContent_P(PAGE_settingsCss);
switch (subPage) switch (subPage)
{ {
case 1: server.sendContent_P(PAGE_settings_wifi1); break; case 1: server.sendContent_P(PAGE_settings_wifi1); break;
case 2: server.sendContent_P(PAGE_settings_leds1); break; case 2: server.sendContent_P(PAGE_settings_leds1); break;
case 3: server.sendContent_P(PAGE_settings_ui1); break; case 3: server.sendContent_P(PAGE_settings_ui1 ); break;
case 4: server.sendContent_P(PAGE_settings_sync1); break; case 4: server.sendContent_P(PAGE_settings_sync1); break;
case 5: server.sendContent_P(PAGE_settings_time1); break; case 5: server.sendContent_P(PAGE_settings_time1); break;
case 6: server.sendContent_P(PAGE_settings_sec1); break; case 6: server.sendContent_P(PAGE_settings_sec1 ); break;
case 255: server.sendContent_P(PAGE_welcome1); break; case 255: server.sendContent_P(PAGE_welcome1 ); break;
default: server.sendContent_P(PAGE_settings1); default: server.sendContent_P(PAGE_settings1 );
} }
} }