diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..dd84ea78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore index c61f8f21..c62e74e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,15 @@ clients/web/node_modules/ - clients/web/\.vscode/ + +.pioenvs +.piolibdeps +lib/readme.txt + +*.h.gch +.clang_complete +.gcc-flags.json + +.vscode/* +.pio/* + +*.bin diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..9a80a94a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: python +python: + - "2.7" +sudo: false +cache: + directories: + - "~/.platformio" +env: + - PLATFORMIO_CI_SRC=Arduino/McLighting +install: + - pip install -U platformio + - platformio update +script: + - platformio ci --project-conf=./platformio.ini -v \ No newline at end of file diff --git a/Arduino/McLighting/McLighting.ino b/Arduino/McLighting/McLighting.ino index 91acd0e4..83f18ba8 100644 --- a/Arduino/McLighting/McLighting.ino +++ b/Arduino/McLighting/McLighting.ino @@ -1,129 +1,210 @@ #include "definitions.h" +// *************************************************************************** +// Load library "ticker" for blinking status led, mqtt send and save state +// *************************************************************************** +#include +#include "version.h" // *************************************************************************** // Load libraries for: WebServer / WiFiManager / WebSockets // *************************************************************************** -#include //https://github.com/esp8266/Arduino +#include //https://github.com/esp8266/Arduino // needed for library WiFiManager #include #include -#include //https://github.com/tzapu/WiFiManager - -#include -#include +#include //https://github.com/tzapu/WiFiManager #include -#include -#include //https://github.com/Links2004/arduinoWebSockets +#include +#include //https://github.com/Links2004/arduinoWebSockets #include -// OTA -#ifdef ENABLE_OTA - #include - #include +#if defined(ENABLE_BUTTON_GY33) +// *************************************************************************** +// Load libraries for GY33 and initialize color sensor +// *************************************************************************** + #include //https://github.com/FabLab-Luenen/GY33_MCU/archive/master.zip ; //https://github.com/pasko-zh/brzo_i2c + GY33_MCU tcs; #endif // MQTT -#ifdef ENABLE_MQTT - #include +#if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 +// *************************************************************************** +// Load libraries for PubSubClient +// *************************************************************************** + #include + #include + WiFiClient espClient; + PubSubClient * mqtt_client; + #endif - WiFiClient espClient; - PubSubClient mqtt_client(espClient); + #if ENABLE_MQTT == 1 +// *************************************************************************** +// Load libraries for Amqtt +// *************************************************************************** + #include //https://github.com/marvinroger/async-mqtt-client + //https://github.com/me-no-dev/ESPAsyncTCP + AsyncMqttClient * mqtt_client; + WiFiEventHandler wifiConnectHandler; + WiFiEventHandler wifiDisconnectHandler; + Ticker mqttReconnectTimer; + Ticker wifiReconnectTimer; + #endif + #if defined(ENABLE_HOMEASSISTANT) + Ticker ha_send_data; + #endif #endif - +#if defined(CUSTOM_WS2812FX_ANIMATIONS) // *************************************************************************** -// Instanciate HTTP(80) / WebSockets(81) Server +// Load libraries for E131 support // *************************************************************************** -ESP8266WebServer server(80); -WebSocketsServer webSocket = WebSocketsServer(81); - + #include //https://github.com/me-no-dev/ESPAsyncUDP + #include //https://github.com/forkineye/ESPAsyncE131 + ESPAsyncE131 * e131 = NULL; +#endif +#if defined(ENABLE_REMOTE) // *************************************************************************** -// Load libraries / Instanciate WS2812FX library +// Load libraries for IR remote support // *************************************************************************** -// https://github.com/kitesurfer1404/WS2812FX -#include -WS2812FX strip = WS2812FX(NUMLEDS, PIN, NEO_GRB + NEO_KHZ800); - -// Parameter 1 = number of pixels in strip -// Parameter 2 = Arduino pin number (most are valid) -// Parameter 3 = pixel type flags, add together as needed: -// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) -// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) -// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) -// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) + #include //https://github.com/markszabo/IRremoteESP8266 + #include + #include +#endif -// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across -// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input -// and minimize distance between Arduino and first pixel. Avoid connecting -// on a live circuit...if you must, connect GND first. +#if defined(USE_HTML_MIN_GZ) +#include "htm_index_gz.h" +#include "htm_edit_gz.h" +#include "html_material_icons.h" +#endif // *************************************************************************** -// Load library "ticker" for blinking status led +// Instanciate HTTP(80) / WebSockets(81) Server // *************************************************************************** -#include -Ticker ticker; - -void tick() -{ - //toggle state - int state = digitalRead(BUILTIN_LED); // get the current state of GPIO1 pin - digitalWrite(BUILTIN_LED, !state); // set pin to the opposite state -} +ESP8266WebServer server(80); +WebSocketsServer webSocket = WebSocketsServer(81); +// *************************************************************************** +// Include: OTA +// *************************************************************************** +#if defined(ENABLE_OTA) + #if ENABLE_OTA == 1 + #include + ESP8266HTTPUpdateServer httpUpdater; + #endif + #if ENABLE_OTA == 0 + #include + #include + #endif +#endif // *************************************************************************** -// EEPROM helper +// Load and instanciate WS2812FX library // *************************************************************************** -String readEEPROM(int offset, int len) { - String res = ""; - for (int i = 0; i < len; ++i) - { - res += char(EEPROM.read(i + offset)); - //DBG_OUTPUT_PORT.println(char(EEPROM.read(i + offset))); +#include "WS2812FX.h" // https://github.com/kitesurfer1404/WS2812FX +WS2812FX * strip = NULL; + +#if defined(USE_WS2812FX_DMA) + #include + + #if USE_WS2812FX_DMA == 0 // Uses GPIO3/RXD0/RX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #if !defined(LED_TYPE_WS2811) + NeoPixelBus * dma = NULL ; //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #else + NeoPixelBus * dma = NULL; //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) + #endif + #endif + #if USE_WS2812FX_DMA == 1 // Uses UART1: GPIO1/TXD0/TX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #if !defined(LED_TYPE_WS2811) + NeoPixelBus * dma = NULL; //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #else + NeoPixelBus * dma = NULL; //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) + #endif + #endif + #if USE_WS2812FX_DMA == 2 // Uses UART2: GPIO2/TXD1/D4, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #if !defined(LED_TYPE_WS2811) + NeoPixelBus * dma = NULL; //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #else + NeoPixelBus * dma = NULL; //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) + #endif + #endif + + void initDMA(uint16_t stripSize = NUMLEDS){ + if (dma != NULL) { delete(dma); } + #if USE_WS2812FX_DMA == 0 // Uses GPIO3/RXD0/RX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #if !defined(LED_TYPE_WS2811) + dma = new NeoPixelBus(stripSize); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #else + dma = new NeoPixelBus(stripSize); //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) + #endif + #endif + #if USE_WS2812FX_DMA == 1 // Uses UART1: GPIO1/TXD0/TX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #if !defined(LED_TYPE_WS2811) + dma = new NeoPixelBus(stripSize); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #else + dma = new NeoPixelBus(stripSize); //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) + #endif + #endif + #if USE_WS2812FX_DMA == 2 // Uses UART2: GPIO2/TXD1/D4, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #if !defined(LED_TYPE_WS2811) + dma = new NeoPixelBus(stripSize); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #else + dma = new NeoPixelBus(stripSize); //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) + #endif + #endif + dma->Begin(); } - DBG_OUTPUT_PORT.printf("readEEPROM(): %s\n", res.c_str()); - return res; -} -void writeEEPROM(int offset, int len, String value) { - DBG_OUTPUT_PORT.printf("writeEEPROM(): %s\n", value.c_str()); - for (int i = 0; i < len; ++i) - { - if (i < value.length()) { - EEPROM.write(i + offset, value[i]); - } else { - EEPROM.write(i + offset, NULL); + void DMA_Show(void) { + if(dma->CanShow()) { + memcpy(dma->Pixels(), strip->getPixels(), dma->PixelsSize()); + dma->Dirty(); + dma->Show(); } } +#endif + +Ticker ticker; + + + +void tick() { + //toggle state + uint16_t state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin + digitalWrite(LED_BUILTIN, !state); // set pin to the opposite state } +#if defined(ENABLE_REMOTE) + IRrecv irrecv(ENABLE_REMOTE); + decode_results results; +#endif // *************************************************************************** -// Saved state handling +// Saved state handling in WifiManager // *************************************************************************** // https://stackoverflow.com/questions/9072320/split-string-into-string-array -String getValue(String data, char separator, int index) +String getValue(String data, char separator, uint8_t index) { - int found = 0; - int strIndex[] = {0, -1}; - int maxIndex = data.length()-1; + uint8_t found = 0; + uint8_t strIndex[] = {0, -1}; + uint8_t maxIndex = data.length()-1; - for(int i=0; i<=maxIndex && found<=index; i++){ + for(uint8_t i=0; i<=maxIndex && found<=index; i++){ if(data.charAt(i)==separator || i==maxIndex){ found++; strIndex[0] = strIndex[1]+1; strIndex[1] = (i == maxIndex) ? i+1 : i; } } - - return found>index ? data.substring(strIndex[0], strIndex[1]) : ""; + String return_value = data.substring(strIndex[0], strIndex[1]); + return_value.replace(" ", ""); + return found>index ? return_value : ""; } - // *************************************************************************** // Callback for WiFiManager library when config mode is entered // *************************************************************************** @@ -135,18 +216,12 @@ void configModeCallback (WiFiManager *myWiFiManager) { DBG_OUTPUT_PORT.println(myWiFiManager->getConfigPortalSSID()); //entered config mode, make led toggle faster ticker.attach(0.2, tick); - - uint16_t i; - for (i = 0; i < strip.numPixels(); i++) { - strip.setPixelColor(i, 0, 0, 255); - } - strip.show(); } //callback notifying us of the need to save config void saveConfigCallback () { DBG_OUTPUT_PORT.println("Should save config"); - shouldSaveConfig = true; + updateConfig = true; } // *************************************************************************** @@ -155,44 +230,129 @@ void saveConfigCallback () { #include "spiffs_webserver.h" // *************************************************************************** -// Include: Request handlers +// Include: Custom animations // *************************************************************************** -#include "request_handlers.h" +#include "mode_custom_ws2812fx_animations.h" // Add animations in this file // *************************************************************************** -// Include: Color modes +// Include: helper functions // *************************************************************************** -#include "colormodes.h" +#include "helper_functions.h" +// *************************************************************************** +// Include: other functions +// *************************************************************************** +#include "json_functions.h" +#include "filesystem_functions.h" +#include "request_handlers.h" +#if defined(ENABLE_MQTT) +void initMqtt() { + DBG_OUTPUT_PORT.println("Initializing Mqtt_Client!"); + // *************************************************************************** + // Configure MQTT + // *************************************************************************** + #if ENABLE_MQTT == 0 + mqtt_client = new PubSubClient(espClient); + #endif + #if ENABLE_MQTT == 1 + mqtt_client = new AsyncMqttClient(); + #endif + + #if defined(ENABLE_MQTT_HOSTNAME_CHIPID) + snprintf(mqtt_clientid, sizeof(mqtt_clientid), "%s-%08X", HOSTNAME, ESP.getChipId()); + #else + snprintf(mqtt_clientid, sizeof(mqtt_clientid), "%s", HOSTNAME); + #endif + mqtt_clientid[sizeof(mqtt_clientid) - 1] = 0x00; + snprintf(mqtt_will_topic, sizeof(mqtt_will_topic), "%s/config", mqtt_clientid); + mqtt_will_topic[sizeof(mqtt_will_topic) - 1] = 0x00; + snprintf(mqtt_intopic, sizeof(mqtt_intopic), "%s/in", mqtt_clientid); + mqtt_intopic[sizeof(mqtt_intopic) - 1] = 0x00; + snprintf(mqtt_outtopic, sizeof(mqtt_outtopic), "%s/out", mqtt_clientid); + mqtt_outtopic[sizeof(mqtt_outtopic) - 1] = 0x00; + #if defined(ENABLE_HOMEASSISTANT) + #if defined(MQTT_HOMEASSISTANT_SUPPORT) + snprintf(mqtt_ha_config, sizeof(mqtt_ha_config), "homeassistant/light/%s/config", mqtt_clientid); + mqtt_ha_config[sizeof(mqtt_ha_config) - 1] = 0x00; + #endif + snprintf(mqtt_ha_state_in, sizeof(mqtt_ha_state_in), "home/%s_ha/state/in", mqtt_clientid); + mqtt_ha_state_in[sizeof(mqtt_ha_state_in) - 1] = 0x00; + snprintf(mqtt_ha_state_out, sizeof(mqtt_ha_state_out), "home/%s_ha/state/out", mqtt_clientid); + mqtt_ha_state_out[sizeof(mqtt_ha_state_out) - 1] = 0x00; + #endif + if ((strlen(mqtt_host) != 0) && (mqtt_port != 0)) { + #if ENABLE_MQTT == 0 + DBG_OUTPUT_PORT.printf("MQTT active: %s:%d\r\n", mqtt_host, mqtt_port); + mqtt_client->setServer(mqtt_host, mqtt_port); + mqtt_client->setCallback(onMqttMessage); + #endif + #if ENABLE_MQTT == 1 + DBG_OUTPUT_PORT.printf("AMQTT active: %s:%d\r\n", mqtt_host, mqtt_port); + mqtt_client->onConnect(onMqttConnect); + mqtt_client->onDisconnect(onMqttDisconnect); + mqtt_client->onMessage(onMqttMessage); + if ((strlen(mqtt_user) != 0) || (strlen(mqtt_pass) != 0)) mqtt_client->setCredentials(mqtt_user, mqtt_pass); + mqtt_client->setClientId(mqtt_clientid); + mqtt_client->setWill(mqtt_will_topic, 2, true, mqtt_will_payload, 0); + mqtt_client->setServer(mqtt_host, mqtt_port); + connectToMqtt(); + #endif + } +} +#endif // *************************************************************************** -// MAIN +// MAIN Setup // *************************************************************************** void setup() { - DBG_OUTPUT_PORT.begin(115200); - EEPROM.begin(512); +// system_update_cpu_freq(160); + DBG_OUTPUT_PORT.begin(115200); + delay(500); + DBG_OUTPUT_PORT.println(""); + DBG_OUTPUT_PORT.println("Starting...Main Setup"); // set builtin led pin as output - pinMode(BUILTIN_LED, OUTPUT); + pinMode(LED_BUILTIN, OUTPUT); // button pin setup -#ifdef ENABLE_BUTTON - pinMode(BUTTON,INPUT_PULLUP); +#if defined(ENABLE_BUTTON) + DBG_OUTPUT_PORT.printf("Enabled Button Mode on PIN: %d\r\n", ENABLE_BUTTON); + pinMode(ENABLE_BUTTON,INPUT_PULLUP); +#endif + +#if defined(ENABLE_BUTTON_GY33) + DBG_OUTPUT_PORT.printf("Enabled GY-33 Button Mode on PIN: %d\r\n", ENABLE_BUTTON_GY33); + pinMode(ENABLE_BUTTON_GY33, INPUT_PULLUP); + if (tcs.begin()) { + DBG_OUTPUT_PORT.println("Found GY-33 sensor"); + } else { + DBG_OUTPUT_PORT.println("No GY33 sensor found ... check your I2C connections"); + } #endif + +#if defined(POWER_SUPPLY) + pinMode(POWER_SUPPLY, OUTPUT); // output to control external power supply +#endif + // start ticker with 0.5 because we start in AP mode and try to connect ticker.attach(0.5, tick); - wifi_station_set_hostname(const_cast(HOSTNAME)); - // *************************************************************************** - // Setup: Neopixel + // Setup: SPIFFS // *************************************************************************** - strip.init(); - strip.setBrightness(brightness); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - //strip.setMode(FX_MODE_RAINBOW_CYCLE); - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.start(); + SPIFFS.begin(); + { + Dir dir = SPIFFS.openDir("/"); + while (dir.next()) { + String fileName = dir.fileName(); + size_t fileSize = dir.fileSize(); + DBG_OUTPUT_PORT.printf("FS File: %s, size: %s\r\n", fileName.c_str(), formatBytes(fileSize).c_str()); + } + + FSInfo fs_info; + SPIFFS.info(fs_info); + DBG_OUTPUT_PORT.printf("FS Usage: %d/%d bytes\r\n", fs_info.usedBytes, fs_info.totalBytes); + } // *************************************************************************** // Setup: WiFiManager @@ -200,43 +360,74 @@ void setup() { // The extra parameters to be configured (can be either global or just in the setup) // After connecting, parameter.getValue() will get you the configured value // id/name placeholder/prompt default length - #ifdef ENABLE_MQTT - String settings_available = readEEPROM(134, 1); - if (settings_available == "1") { - readEEPROM(0, 64).toCharArray(mqtt_host, 64); // 0-63 - readEEPROM(64, 6).toCharArray(mqtt_port, 6); // 64-69 - readEEPROM(70, 32).toCharArray(mqtt_user, 32); // 70-101 - readEEPROM(102, 32).toCharArray(mqtt_pass, 32); // 102-133 - DBG_OUTPUT_PORT.printf("MQTT host: %s\n", mqtt_host); - DBG_OUTPUT_PORT.printf("MQTT port: %s\n", mqtt_port); - DBG_OUTPUT_PORT.printf("MQTT user: %s\n", mqtt_user); - DBG_OUTPUT_PORT.printf("MQTT pass: %s\n", mqtt_pass); - } - - WiFiManagerParameter custom_mqtt_host("host", "MQTT hostname", mqtt_host, 64); - WiFiManagerParameter custom_mqtt_port("port", "MQTT port", mqtt_port, 6); - WiFiManagerParameter custom_mqtt_user("user", "MQTT user", mqtt_user, 32); - WiFiManagerParameter custom_mqtt_pass("pass", "MQTT pass", mqtt_pass, 32); + +#if defined(ENABLE_STATE_SAVE) + //Strip Config + (readConfigFS()) ? DBG_OUTPUT_PORT.println("WiFiManager config FS read success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Read failure!"); + delay(250); + (readStateFS()) ? DBG_OUTPUT_PORT.println("Strip state config FS read Success!") : DBG_OUTPUT_PORT.println("Strip state config FS read failure!"); + char _stripSize[6], _fx_options[5], _rgbOrder[5]; //needed tempararily for WiFiManager Settings + WiFiManagerParameter custom_hostname("hostname", "Hostname", HOSTNAME, 64, " maxlength=64"); + #if defined(ENABLE_MQTT) + char _mqtt_port[6]; //needed tempararily for WiFiManager Settings + WiFiManagerParameter custom_mqtt_host("host", "MQTT hostname", mqtt_host, 64, " maxlength=64"); + sprintf(_mqtt_port, "%d", mqtt_port); + WiFiManagerParameter custom_mqtt_port("port", "MQTT port", _mqtt_port, 5, " maxlength=5 type=\"number\""); + WiFiManagerParameter custom_mqtt_user("user", "MQTT user", mqtt_user, 32, " maxlength=32"); + WiFiManagerParameter custom_mqtt_pass("pass", "MQTT pass", mqtt_pass, 32, " maxlength=32 type=\"password\""); + #endif + sprintf(_stripSize, "%d", Config.stripSize); + WiFiManagerParameter custom_strip_size("strip_size", "Number of LEDs", _stripSize, 4, " maxlength=4 type=\"number\""); + #if !defined(USE_WS2812FX_DMA) + char tmp_led_pin[3]; + sprintf(tmp_led_pin, "%d", Config.pin); + WiFiManagerParameter custom_led_pin("led_pin", "LED GPIO", tmp_led_pin, 2, " maxlength=2 type=\"number\""); #endif - + sprintf(_rgbOrder, "%s", Config.RGBOrder); + WiFiManagerParameter custom_rgbOrder("rgbOrder", "RGBOrder", _rgbOrder, 4, " maxlength=4"); + sprintf(_fx_options, "%d", segState.options); + WiFiManagerParameter custom_fxoptions("fxoptions", "fxOptions", _fx_options, 3, " maxlength=3"); +#endif + + //Local intialization. Once its business is done, there is no need to keep it around + wifi_station_set_hostname(const_cast(HOSTNAME)); WiFiManager wifiManager; //reset settings - for testing //wifiManager.resetSettings(); //set callback that gets called when connecting to previous WiFi fails, and enters Access Point mode wifiManager.setAPCallback(configModeCallback); + //set config save notify callback + wifiManager.setSaveConfigCallback(saveConfigCallback); - #ifdef ENABLE_MQTT - //set config save notify callback - wifiManager.setSaveConfigCallback(saveConfigCallback); - + wifiManager.addParameter(&custom_hostname); + #if defined(ENABLE_MQTT) //add all your parameters here wifiManager.addParameter(&custom_mqtt_host); wifiManager.addParameter(&custom_mqtt_port); wifiManager.addParameter(&custom_mqtt_user); wifiManager.addParameter(&custom_mqtt_pass); #endif + wifiManager.addParameter(&custom_strip_size); + #if !defined(USE_WS2812FX_DMA) + wifiManager.addParameter(&custom_led_pin); + #endif + wifiManager.addParameter(&custom_rgbOrder); + wifiManager.addParameter(&custom_fxoptions); + + WiFi.setSleepMode(WIFI_NONE_SLEEP); + + // Uncomment if you want to restart ESP8266 if it cannot connect to WiFi. + // Value in brackets is in seconds that WiFiManger waits until restart +#if defined(WIFIMGR_PORTAL_TIMEOUT) + wifiManager.setConfigPortalTimeout(WIFIMGR_PORTAL_TIMEOUT); +#endif + + // Order is: IP, Gateway and Subnet +#if defined(WIFIMGR_SET_MANUAL_IP) + wifiManager.setSTAStaticIPConfig(IPAddress(_ip[0], _ip[1], _ip[2], _ip[3]), IPAddress(_gw[0], _gw[1], _gw[2], _gw[3]), IPAddress(_sn[0], _sn[1], _sn[2], _sn[3])); +#endif //fetches ssid and pass and tries to connect //if it does not connect it starts an access point with the specified name @@ -245,27 +436,30 @@ void setup() { if (!wifiManager.autoConnect(HOSTNAME)) { DBG_OUTPUT_PORT.println("failed to connect and hit timeout"); //reset and try again, or maybe put it to deep sleep - ESP.reset(); - delay(1000); + //ESP.reset(); //Will be removed when upgrading to standalone offline McLightingUI version + //delay(1000); //Will be removed when upgrading to standalone offline McLightingUI version } - #ifdef ENABLE_MQTT - //read updated parameters - strcpy(mqtt_host, custom_mqtt_host.getValue()); - strcpy(mqtt_port, custom_mqtt_port.getValue()); - strcpy(mqtt_user, custom_mqtt_user.getValue()); - strcpy(mqtt_pass, custom_mqtt_pass.getValue()); - - //save the custom parameters to FS - if (shouldSaveConfig) { - DBG_OUTPUT_PORT.println("Saving WiFiManager config"); - - writeEEPROM(0, 64, mqtt_host); // 0-63 - writeEEPROM(64, 6, mqtt_port); // 64-69 - writeEEPROM(70, 32, mqtt_user); // 70-101 - writeEEPROM(102, 32, mqtt_pass); // 102-133 - writeEEPROM(134, 1, "1"); // 134 --> always "1" - EEPROM.commit(); + //save the custom parameters to FS/EEPROM + #if defined(ENABLE_STATE_SAVE) + strcpy(HOSTNAME, custom_hostname.getValue()); + #if defined(ENABLE_MQTT) + //read updated parameters + strcpy(mqtt_host, custom_mqtt_host.getValue()); + mqtt_port = atoi(custom_mqtt_port.getValue()); + strcpy(mqtt_user, custom_mqtt_user.getValue()); + strcpy(mqtt_pass, custom_mqtt_pass.getValue()); + #endif + strcpy(_stripSize, custom_strip_size.getValue()); + Config.stripSize = constrain(atoi(custom_strip_size.getValue()), 1, MAXLEDS); + #if !defined(USE_WS2812FX_DMA) + checkPin(atoi(custom_led_pin.getValue())); + #endif + strcpy(_rgbOrder, custom_rgbOrder.getValue()); + checkRGBOrder(_rgbOrder); + segState.options = atoi(custom_fxoptions.getValue()); + if (updateConfig) { + (writeConfigFS(updateConfig)) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Save success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Save failure!"); } #endif @@ -273,35 +467,37 @@ void setup() { DBG_OUTPUT_PORT.println("connected...yeey :)"); ticker.detach(); //keep LED on - digitalWrite(BUILTIN_LED, LOW); - + digitalWrite(LED_BUILTIN, LOW); + //switch LED off + //digitalWrite(LED_BUILTIN, HIGH); +#if defined(ENABLE_OTA) + #if ENABLE_OTA == 0 // *************************************************************************** - // Configure OTA + // Configure Arduino OTA // *************************************************************************** - #ifdef ENABLE_OTA DBG_OUTPUT_PORT.println("Arduino OTA activated."); - + // Port defaults to 8266 ArduinoOTA.setPort(8266); - + // Hostname defaults to esp8266-[ChipID] ArduinoOTA.setHostname(HOSTNAME); - + // No authentication by default // ArduinoOTA.setPassword("admin"); - + // Password can be set with it's md5 value as well // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); - + ArduinoOTA.onStart([]() { DBG_OUTPUT_PORT.println("Arduino OTA: Start updating"); }); ArduinoOTA.onEnd([]() { DBG_OUTPUT_PORT.println("Arduino OTA: End"); }); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { + ArduinoOTA.onProgress([](uint16_t progress, uint16_t total) { DBG_OUTPUT_PORT.printf("Arduino OTA Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { @@ -312,27 +508,23 @@ void setup() { else if (error == OTA_RECEIVE_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Receive Failed"); else if (error == OTA_END_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: End Failed"); }); - + ArduinoOTA.begin(); DBG_OUTPUT_PORT.println(""); #endif - - - // *************************************************************************** - // Configure MQTT - // *************************************************************************** - #ifdef ENABLE_MQTT - if (mqtt_host != "" && String(mqtt_port).toInt() > 0) { - snprintf(mqtt_intopic, sizeof mqtt_intopic, "%s/in", HOSTNAME); - snprintf(mqtt_outtopic, sizeof mqtt_outtopic, "%s/out", HOSTNAME); - - DBG_OUTPUT_PORT.printf("MQTT active: %s:%d\n", mqtt_host, String(mqtt_port).toInt()); - - mqtt_client.setServer(mqtt_host, String(mqtt_port).toInt()); - mqtt_client.setCallback(mqtt_callback); - } + #if ENABLE_OTA == 1 + httpUpdater.setup(&server, "/update"); #endif +#endif +#if defined(ENABLE_MQTT) + initMqtt(); +#endif + +#if ENABLE_MQTT == 1 + wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect); + wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect); +#endif // *************************************************************************** // Setup: MDNS responder @@ -346,13 +538,12 @@ void setup() { DBG_OUTPUT_PORT.print("Use http://"); DBG_OUTPUT_PORT.print(HOSTNAME); DBG_OUTPUT_PORT.println(".local/ when you have Bonjour installed."); - +#if !defined(USE_HTML_MIN_GZ) DBG_OUTPUT_PORT.print("New users: Open http://"); DBG_OUTPUT_PORT.print(WiFi.localIP()); - DBG_OUTPUT_PORT.println("/upload to upload the webpages first."); - + DBG_OUTPUT_PORT.println("/upload to upload the webpages first."); +#endif DBG_OUTPUT_PORT.println(""); - // *************************************************************************** // Setup: WebSocket server @@ -360,214 +551,7 @@ void setup() { webSocket.begin(); webSocket.onEvent(webSocketEvent); - - // *************************************************************************** - // Setup: SPIFFS - // *************************************************************************** - SPIFFS.begin(); - { - Dir dir = SPIFFS.openDir("/"); - while (dir.next()) { - String fileName = dir.fileName(); - size_t fileSize = dir.fileSize(); - DBG_OUTPUT_PORT.printf("FS File: %s, size: %s\n", fileName.c_str(), formatBytes(fileSize).c_str()); - } - - FSInfo fs_info; - SPIFFS.info(fs_info); - DBG_OUTPUT_PORT.printf("FS Usage: %d/%d bytes\n\n", fs_info.usedBytes, fs_info.totalBytes); - } - - // *************************************************************************** - // Setup: SPIFFS Webserver handler - // *************************************************************************** - //list directory - server.on("/list", HTTP_GET, handleFileList); - //load editor - server.on("/edit", HTTP_GET, []() { - if (!handleFileRead("/edit.htm")) server.send(404, "text/plain", "FileNotFound"); - }); - //create file - server.on("/edit", HTTP_PUT, handleFileCreate); - //delete file - server.on("/edit", HTTP_DELETE, handleFileDelete); - //first callback is called after the request has ended with all parsed arguments - //second callback handles file uploads at that location - server.on("/edit", HTTP_POST, []() { - server.send(200, "text/plain", ""); - }, handleFileUpload); - //get heap status, analog input value and all GPIO statuses in one json call - server.on("/esp_status", HTTP_GET, []() { - String json = "{"; - json += "\"heap\":" + String(ESP.getFreeHeap()); - // json += ", \"analog\":" + String(analogRead(A0)); - // json += ", \"gpio\":" + String((uint32_t)(((GPI | GPO) & 0xFFFF) | ((GP16I & 0x01) << 16))); - json += "}"; - server.send(200, "text/json", json); - json = String(); - }); - - - //called when the url is not defined here - //use it to load content from SPIFFS - server.onNotFound([]() { - if (!handleFileRead(server.uri())) - handleNotFound(); - }); - - server.on("/upload", handleMinimalUpload); - - server.on("/restart", []() { - DBG_OUTPUT_PORT.printf("/restart\n"); - server.send(200, "text/plain", "restarting..." ); - ESP.restart(); - }); - - server.on("/reset_wlan", []() { - DBG_OUTPUT_PORT.printf("/reset_wlan\n"); - server.send(200, "text/plain", "Resetting WLAN and restarting..." ); - WiFiManager wifiManager; - wifiManager.resetSettings(); - ESP.restart(); - }); - - server.on("/start_config_ap", []() { - DBG_OUTPUT_PORT.printf("/start_config_ap\n"); - server.send(200, "text/plain", "Starting config AP ..." ); - WiFiManager wifiManager; - wifiManager.startConfigPortal(HOSTNAME); - }); - - - // *************************************************************************** - // Setup: SPIFFS Webserver handler - // *************************************************************************** - server.on("/set_brightness", []() { - if (server.arg("c").toInt() > 0) { - brightness = (int) server.arg("c").toInt() * 2.55; - } else { - brightness = server.arg("p").toInt(); - } - if (brightness > 255) { - brightness = 255; - } - if (brightness < 0) { - brightness = 0; - } - strip.setBrightness(brightness); - - if (mode == HOLD) { - mode = ALL; - } - - getStatusJSON(); - }); - - server.on("/get_brightness", []() { - String str_brightness = String((int) (brightness / 2.55)); - server.send(200, "text/plain", str_brightness ); - DBG_OUTPUT_PORT.print("/get_brightness: "); - DBG_OUTPUT_PORT.println(str_brightness); - }); - - server.on("/set_speed", []() { - if (server.arg("d").toInt() >= 0) { - ws2812fx_speed = server.arg("d").toInt(); - ws2812fx_speed = constrain(ws2812fx_speed, 0, 255); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - } - - getStatusJSON(); - }); - - server.on("/get_speed", []() { - String str_speed = String(ws2812fx_speed); - server.send(200, "text/plain", str_speed ); - DBG_OUTPUT_PORT.print("/get_speed: "); - DBG_OUTPUT_PORT.println(str_speed); - }); - - server.on("/get_switch", []() { - server.send(200, "text/plain", (mode == OFF) ? "0" : "1" ); - DBG_OUTPUT_PORT.printf("/get_switch: %s\n", (mode == OFF) ? "0" : "1"); - }); - - server.on("/get_color", []() { - String rgbcolor = String(main_color.red, HEX) + String(main_color.green, HEX) + String(main_color.blue, HEX); - server.send(200, "text/plain", rgbcolor ); - DBG_OUTPUT_PORT.print("/get_color: "); - DBG_OUTPUT_PORT.println(rgbcolor); - }); - - server.on("/status", []() { - getStatusJSON(); - }); - - server.on("/off", []() { - exit_func = true; - mode = OFF; - getArgs(); - getStatusJSON(); - }); - - server.on("/all", []() { - exit_func = true; - mode = ALL; - getArgs(); - getStatusJSON(); - }); - - server.on("/wipe", []() { - exit_func = true; - mode = WIPE; - getArgs(); - getStatusJSON(); - }); - - server.on("/rainbow", []() { - exit_func = true; - mode = RAINBOW; - getArgs(); - getStatusJSON(); - }); - - server.on("/rainbowCycle", []() { - exit_func = true; - mode = RAINBOWCYCLE; - getArgs(); - getStatusJSON(); - }); - - server.on("/theaterchase", []() { - exit_func = true; - mode = THEATERCHASE; - getArgs(); - getStatusJSON(); - }); - - server.on("/theaterchaseRainbow", []() { - exit_func = true; - mode = THEATERCHASERAINBOW; - getArgs(); - getStatusJSON(); - }); - - server.on("/tv", []() { - exit_func = true; - mode = TV; - getArgs(); - getStatusJSON(); - }); - - server.on("/get_modes", []() { - getModesJSON(); - }); - - server.on("/set_mode", []() { - getArgs(); - mode = SET_MODE; - getStatusJSON(); - }); +#include "rest_api.h" server.begin(); @@ -576,113 +560,280 @@ void setup() { MDNS.addService("http", "tcp", 80); } - #ifdef ENABLE_STATE_SAVE - // Load state string from EEPROM - String saved_state_string = readEEPROM(256, 32); - String chk = getValue(saved_state_string, '|', 0); - if (chk == "STA") { - DBG_OUTPUT_PORT.printf("Found saved state: %s\n", saved_state_string.c_str()); - setModeByStateString(saved_state_string); - } - sprintf(last_state, "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d", mode, ws2812fx_mode, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue); + #if defined(ENABLE_BUTTON_GY33) + tcs.setConfig(MCU_LED_06, MCU_WHITE_ON); +// delay(2000); +// tcs.setConfig(MCU_LED_OFF, MCU_WHITE_OFF); #endif + #if defined(ENABLE_REMOTE) + irrecv.enableIRIn(); // Start the receiver + #endif + fx_speed = segState.speed[State.segment]; + brightness_trans = State.brightness; + initStrip(); + strip->setBrightness(0); + DBG_OUTPUT_PORT.println("finished Main Setup!"); } - +// *************************************************************************** +// MAIN Loop +// *************************************************************************** void loop() { - #ifdef ENABLE_BUTTON + #if defined(ENABLE_BUTTON) button(); - #endif + #endif + + #if defined(ENABLE_BUTTON_GY33) + button_gy33(); + #endif + server.handleClient(); webSocket.loop(); - - #ifdef ENABLE_OTA - ArduinoOTA.handle(); + + #if defined(ENABLE_OTA) + #if ENABLE_OTA == 0 + ArduinoOTA.handle(); + #endif #endif - #ifdef ENABLE_MQTT - if (mqtt_host != "" && String(mqtt_port).toInt() > 0 && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) { - if (!mqtt_client.connected()) { - mqtt_reconnect(); + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + if (WiFi.status() != WL_CONNECTED) { + #if defined(ENABLE_HOMEASSISTANT) + ha_send_data.detach(); + #endif + DBG_OUTPUT_PORT.println("WiFi disconnected, reconnecting!"); + WiFi.disconnect(); + WiFi.setSleepMode(WIFI_NONE_SLEEP); + WiFi.mode(WIFI_STA); + WiFi.hostname(HOSTNAME); + WiFi.begin(); } else { - mqtt_client.loop(); + if ((strlen(mqtt_host) != 0) && (mqtt_port != 0) && (mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES)) { + if (!mqtt_client->connected()) { + #if defined(ENABLE_HOMEASSISTANT) + ha_send_data.detach(); + #endif + DBG_OUTPUT_PORT.println("MQTT disconnected, reconnecting!"); + mqtt_reconnect(); + } else { + mqtt_client->loop(); + } + } } - } + #endif + + #if defined(ENABLE_HOMEASSISTANT) + if (new_ha_mqtt_msg) sendState(); + #endif #endif - + + // *************************************************************************** // Simple statemachine that handles the different modes - if (mode == SET_MODE) { - DBG_OUTPUT_PORT.printf("SET_MODE: %d %d\n", ws2812fx_mode, mode); - strip.setMode(ws2812fx_mode); - mode = HOLD; - } - if (mode == OFF) { - strip.setColor(0,0,0); - strip.setMode(FX_MODE_STATIC); - // mode = HOLD; - } - if (mode == ALL) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_STATIC); - mode = HOLD; + // *************************************************************************** + + if ((State.mode == OFF) && ((strip->getBrightness() == 0) || !Config.transEffect)) { + if(strip->isRunning()) { + strip->strip_off(); // Workaround: to be shure, + delay(10); // that strip is really off. Sometimes strip->stop isn't enought + strip->stop(); // should clear memory + for (uint8_t i = 0; i < Config.segments; i++) { + autoCount[i] = 0; + autoDelay[i] = 0; + } + } else { + if (prevmode != State.mode) { // Start temporarily to clear strip + strip->start(); + strip->strip_off(); // Workaround: to be shure, + delay(10); // that strip is really off. Sometimes strip->stop isn't enought + strip->stop(); // should clear memory + for (uint8_t i = 0; i < Config.segments; i++) { + autoCount[i] = 0; + autoDelay[i] = 0; + } + } + } } - if (mode == WIPE) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_COLOR_WIPE); - mode = HOLD; + + if (State.mode == OFF) { + if (prevmode != State.mode) { + #if defined(POWER_SUPPLY) + digitalWrite(POWER_SUPPLY, !POWER_ON); // power off -> external power supply + #endif + if (Config.transEffect) { + brightness_trans = 0; + } + } } - if (mode == RAINBOW) { - strip.setMode(FX_MODE_RAINBOW); - mode = HOLD; +#if defined(POWER_SUPPLY) + if (State.mode != OFF) { + if (prevmode != State.mode) {digitalWrite(POWER_SUPPLY, POWER_ON); } // power on -> external power supply } - if (mode == RAINBOWCYCLE) { - strip.setMode(FX_MODE_RAINBOW_CYCLE); - mode = HOLD; +#endif + + if (State.mode == SET) { + State.mode = HOLD; + // Mode + if ((segState.mode[State.segment] != fx_mode) || prevmode == OFF) { + segState.mode[State.segment] = fx_mode; + strip->strip_off(); + autoCount[State.segment] = 0; + autoDelay[State.segment] = 0; + //strip->setSpeed(State.segment, segState.speed[State.segment]); + //strip->setColors(State.segment, segState.colors[State.segment]); + strip->setMode(State.segment, segState.mode[State.segment]); + //strip->trigger; + } + //Color + /*if (memcmp(segmentState.colors[prevsegment)], strip->getColors(prevsegment), sizeof(segmentState.colors[prevsegment)])) != 0) { + convertColors(); + }*/ + // Brightness + if (strip->getBrightness() != State.brightness) { + brightness_trans = State.brightness; + } + // Speed + if (fx_speed != segState.speed[prevsegment]) { + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK ?%i", segState.speed[prevsegment]); + #endif + } + prevmode = SET; } - if (mode == THEATERCHASE) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_THEATER_CHASE); - mode = HOLD; + + if ((State.mode == HOLD) || ((State.mode == OFF) && (strip->getBrightness() > 0) && Config.transEffect)) { + if(!strip->isRunning()) strip->start(); + strip->service(); + bool playE131 = false; + for (uint8_t i = 0; i < Config.segments; i++) { + if (segState.mode[i] == FX_MODE_CUSTOM_0) { handleAutoPlay(i); } + if (segState.mode[i] == FX_MODE_CUSTOM_3) { playE131 = true; } + } + if (playE131 == true) { handleE131Play(); } } - if (mode == TWINKLERANDOM) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_TWINKLE_RANDOM); - mode = HOLD; + + if (prevmode != State.mode) { + if (segState.mode[prevsegment] != FX_MODE_CUSTOM_0) { + convertColors(); + if (memcmp(hexcolors_trans, strip->getColors(prevsegment), sizeof(hexcolors_trans)) != 0) { + DBG_OUTPUT_PORT.println("Color changed!"); + trans_cnt_max = convertColorsFade(prevsegment); + trans_cnt = 1; + memcpy(segState.colors[prevsegment], hexcolors_trans, sizeof(hexcolors_trans)); + } + strip->setSpeed(prevsegment, convertSpeed(fx_speed)); + } + //strip->setBrightness(brightness_actual); + #if defined(ENABLE_MQTT) + #if defined(ENABLE_HOMEASSISTANT) + if(ha_send_data.active()) ha_send_data.detach(); + ha_send_data.once(DELAY_MQTT_HA_MESSAGE, tickerSendState); + #endif + #endif } - if (mode == THEATERCHASERAINBOW) { - strip.setMode(FX_MODE_THEATER_CHASE_RAINBOW); - mode = HOLD; + + prevmode = State.mode; + + #if defined(ENABLE_STATE_SAVE) + if (updateState){ + (writeStateFS(updateState)) ? DBG_OUTPUT_PORT.println("State FS Save Success!") : DBG_OUTPUT_PORT.println("State FS Save failure!"); + } + if (updateSegState) { + (writeSegmentStateFS(updateSegState, prevsegment)) ? DBG_OUTPUT_PORT.println("Segment State FS Save Success!") : DBG_OUTPUT_PORT.println("Segment State FS Save failure!"); + } + if (updateConfig) { + (writeConfigFS(updateConfig)) ? DBG_OUTPUT_PORT.println("Config FS Save success!"): DBG_OUTPUT_PORT.println("Config FS Save failure!"); + } + #endif + + // Async color transition + if ((segState.mode[prevsegment] != FX_MODE_CUSTOM_0) && (memcmp(hexcolors_trans, strip->getColors(prevsegment), sizeof(hexcolors_trans)) != 0)) { + if (Config.transEffect) { + if ((trans_cnt > 0) && (trans_cnt < trans_cnt_max)) { + if (colorFadeDelay <= millis()) { + uint32_t _hexcolors_new[3] = {}; + _hexcolors_new[0] = trans(hexcolors_trans[0], strip->getColors(prevsegment)[0], trans_cnt, trans_cnt_max); + _hexcolors_new[1] = trans(hexcolors_trans[1], strip->getColors(prevsegment)[1], trans_cnt, trans_cnt_max); + _hexcolors_new[2] = trans(hexcolors_trans[2], strip->getColors(prevsegment)[2], trans_cnt, trans_cnt_max); + strip->setColors(prevsegment, _hexcolors_new); + trans_cnt++; + colorFadeDelay = millis() + TRANS_COLOR_DELAY; + if (State.mode == HOLD) strip->trigger(); + } + } else if (trans_cnt >= trans_cnt_max) { + strip->setColors(prevsegment, hexcolors_trans); + if (State.mode == HOLD) strip->trigger(); + DBG_OUTPUT_PORT.println("Color transition finished!"); + trans_cnt = 0; + } + } else { + strip->setColors(prevsegment, hexcolors_trans); + if (State.mode == HOLD) strip->trigger(); + } } - if (mode == HOLD || mode == CUSTOM) { - if (exit_func) { - exit_func = false; + // Async speed transition + if ((segState.mode[prevsegment] != FX_MODE_CUSTOM_0) && (segState.mode[prevsegment] != FX_MODE_CUSTOM_3) && (fx_speed != segState.speed[prevsegment])) { + if (Config.transEffect) { + //if (true == false) { // disabled for the moment + if (speedFadeDelay <= millis()) { + //DBG_OUTPUT_PORT.print("Speed trans actual: "); + if (fx_speed < segState.speed[prevsegment]) { + fx_speed++; + } + if (fx_speed > segState.speed[prevsegment]) { + fx_speed--; + } + //DBG_OUTPUT_PORT.println(fx_speed); + speedFadeDelay = millis() + TRANS_DELAY; + strip->setSpeed(prevsegment, convertSpeed(fx_speed)); + if (State.mode == HOLD) strip->trigger(); + } + } else { + fx_speed = segState.speed[prevsegment]; + //DBG_OUTPUT_PORT.print("Speed actual: "); + strip->setSpeed(prevsegment, convertSpeed(fx_speed)); + //DBG_OUTPUT_PORT.println(fx_speed); + if (State.mode == HOLD) strip->trigger(); } } - if (mode == TV) { - tv(); + + // Async brightness transition + if (strip->getBrightness() != brightness_trans) { + if (Config.transEffect) { + if(brightnessFadeDelay <= millis()) { + if (strip->getBrightness() < brightness_trans) { + strip->increaseBrightness(1); + } + if (strip->getBrightness() > brightness_trans) { + strip->decreaseBrightness(1); + } + brightnessFadeDelay = millis() + TRANS_DELAY; + if (State.mode == HOLD) strip->trigger(); + } + } else { + brightness_trans = State.brightness; + strip->setBrightness(brightness_trans); + } } - // Only for modes with WS2812FX functionality - if (mode != TV && mode != CUSTOM) { - strip.service(); + // Segment change only if color and speed transitions are finished, because they are segment specific + if (prevsegment != State.segment) { + DBG_OUTPUT_PORT.println("Segment not equal"); + //if ((segState.mode[State.segment] == FX_MODE_CUSTOM_0) || (segState.mode[State.segment] == FX_MODE_CUSTOM_2) || (segState.mode[prevsegment] == FX_MODE_CUSTOM_0)) { + if ((segState.mode[State.segment] == FX_MODE_CUSTOM_0) || (segState.mode[prevsegment] == FX_MODE_CUSTOM_0)) { + fx_speed = segState.speed[State.segment]; + DBG_OUTPUT_PORT.printf("Switched segment from: %i to %i", prevsegment, State.segment); + prevsegment = State.segment; + } else if ((memcmp(hexcolors_trans, strip->getColors(prevsegment), sizeof(hexcolors_trans)) == 0) && (fx_speed == segState.speed[prevsegment])) { + memcpy(hexcolors_trans, segState.colors[State.segment], sizeof(hexcolors_trans)); + fx_speed = segState.speed[State.segment]; + DBG_OUTPUT_PORT.printf("Switched segment from: %i to %i\r\n", prevsegment, State.segment); + prevsegment = State.segment; + } } - #ifdef ENABLE_STATE_SAVE - // Check for state changes - sprintf(current_state, "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d", mode, strip.getMode(), ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue); - - if (strcmp(current_state, last_state) != 0) { - // DBG_OUTPUT_PORT.printf("STATE CHANGED: %s / %s\n", last_state, current_state); - strcpy(last_state, current_state); - time_statechange = millis(); - state_save_requested = true; - } - if (state_save_requested && time_statechange + timeout_statechange_save <= millis()) { - time_statechange = 0; - state_save_requested = false; - writeEEPROM(256, 32, last_state); // 256 --> last_state (reserved 32 bytes) - EEPROM.commit(); - } + #if defined(ENABLE_REMOTE) + handleRemote(); #endif -} +} diff --git a/Arduino/McLighting/WS2812FX.cpp b/Arduino/McLighting/WS2812FX.cpp new file mode 100644 index 00000000..2e49feb7 --- /dev/null +++ b/Arduino/McLighting/WS2812FX.cpp @@ -0,0 +1,1671 @@ +/* + WS2812FX.cpp - Library for WS2812 LED effects. + + Harm Aldick - 2016 + www.aldick.org + + + FEATURES + * A lot of blinken modes and counting + * WS2812FX can be used as drop-in replacement for Adafruit NeoPixel Library + + NOTES + * Uses the Adafruit NeoPixel library. Get it here: + https://github.com/adafruit/Adafruit_NeoPixel + + + + LICENSE + + The MIT License (MIT) + + Copyright (c) 2016 Harm Aldick + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + CHANGELOG + + 2016-05-28 Initial beta release + 2016-06-03 Code cleanup, minor improvements, new modes + 2016-06-04 2 new fx, fixed setColor (now also resets _mode_color) + 2017-02-02 added external trigger functionality (e.g. for sound-to-light) + 2017-02-02 removed "blackout" on mode, speed or color-change + 2017-09-26 implemented segment and reverse features + 2017-11-16 changed speed calc, reduced memory footprint + 2018-02-24 added hooks for user created custom effects +*/ + +#include "WS2812FX.h" + +void WS2812FX::init() { + resetSegmentRuntimes(); + Adafruit_NeoPixel::begin(); +} + +// void WS2812FX::timer() { +// for (int j=0; j < 1000; j++) { +// uint16_t delay = (this->*_modes[_seg->mode])(); +// } +// } + +void WS2812FX::service() { + if(_running || _triggered) { + unsigned long now = millis(); // Be aware, millis() rolls over every 49 days + bool doShow = false; + for(uint8_t i=0; i < _active_segments_len; i++) { + if(_active_segments[i] != INACTIVE_SEGMENT) { + _segment_index = i; + _seg = &_segments[_active_segments[i]]; + _seg_len = (uint16_t)(_seg->stop - _seg->start + 1); + _seg_rt = &_segment_runtimes[i]; + CLR_FRAME_CYCLE; + if(now > _seg_rt->next_time || _triggered) { + SET_FRAME; + doShow = true; + uint16_t delay = (this->*_modes[_seg->mode])(); + _seg_rt->next_time = now + max(delay, SPEED_MIN); + _seg_rt->counter_mode_call++; + } + } + } + if(doShow) { + delay(1); // for ESP32 (see https://forums.adafruit.com/viewtopic.php?f=47&t=117327) + show(); + } + _triggered = false; + } +} + +// overload setPixelColor() functions so we can use gamma correction +// (see https://learn.adafruit.com/led-tricks-gamma-correction/the-issue) +void WS2812FX::setPixelColor(uint16_t n, uint32_t c) { + uint8_t w = (c >> 24) & 0xFF; + uint8_t r = (c >> 16) & 0xFF; + uint8_t g = (c >> 8) & 0xFF; + uint8_t b = c & 0xFF; + setPixelColor(n, r, g, b, w); +} + +void WS2812FX::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b) { + setPixelColor(n, r, g, b, 0); +} + +void WS2812FX::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w) { + if(IS_GAMMA) { + Adafruit_NeoPixel::setPixelColor(n, gamma8(r), gamma8(g), gamma8(b), gamma8(w)); + } else { + Adafruit_NeoPixel::setPixelColor(n, r, g, b, w); + } +} + +void WS2812FX::copyPixels(uint16_t dest, uint16_t src, uint16_t count) { + uint8_t *pixels = getPixels(); + uint8_t bytesPerPixel = getNumBytesPerPixel(); // 3=RGB, 4=RGBW + + memmove(pixels + (dest * bytesPerPixel), pixels + (src * bytesPerPixel), count * bytesPerPixel); +} + +// change the underlying Adafruit_NeoPixel pixels pointer (use with care) +void WS2812FX::setPixels(uint16_t num_leds, uint8_t* ptr) { + free(Adafruit_NeoPixel::pixels); // free existing data (if any) + Adafruit_NeoPixel::pixels = ptr; + Adafruit_NeoPixel::numLEDs = num_leds; + Adafruit_NeoPixel::numBytes = num_leds * ((wOffset == rOffset) ? 3 : 4); +} + +// overload show() functions so we can use custom show() +void WS2812FX::show(void) { + customShow == NULL ? Adafruit_NeoPixel::show() : customShow(); +} + +void WS2812FX::start() { + resetSegmentRuntimes(); + _running = true; +} + +void WS2812FX::stop() { + _running = false; + strip_off(); +} + +void WS2812FX::pause() { + _running = false; +} + +void WS2812FX::resume() { + _running = true; +} + +void WS2812FX::trigger() { + _triggered = true; +} + +void WS2812FX::setMode(uint8_t m) { + setMode(0, m); +} + +void WS2812FX::setMode(uint8_t seg, uint8_t m) { + resetSegmentRuntime(seg); + _segments[seg].mode = constrain(m, 0, MODE_COUNT - 1); +} + +void WS2812FX::setOptions(uint8_t seg, uint8_t o) { + _segments[seg].options = o; +} + +void WS2812FX::setSpeed(uint16_t s) { + setSpeed(0, s); +} + +void WS2812FX::setSpeed(uint8_t seg, uint16_t s) { + _segments[seg].speed = constrain(s, SPEED_MIN, SPEED_MAX); +} + +void WS2812FX::increaseSpeed(uint8_t s) { + uint16_t newSpeed = constrain(_seg->speed + s, SPEED_MIN, SPEED_MAX); + setSpeed(newSpeed); +} + +void WS2812FX::decreaseSpeed(uint8_t s) { + uint16_t newSpeed = constrain(_seg->speed - s, SPEED_MIN, SPEED_MAX); + setSpeed(newSpeed); +} + +void WS2812FX::setColor(uint8_t r, uint8_t g, uint8_t b) { + setColor(((uint32_t)r << 16) | ((uint32_t)g << 8) | b); +} + +void WS2812FX::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { + setColor((((uint32_t)w << 24)| ((uint32_t)r << 16) | ((uint32_t)g << 8)| ((uint32_t)b))); +} + +void WS2812FX::setColor(uint32_t c) { + setColor(0, c); +} + +void WS2812FX::setColor(uint8_t seg, uint32_t c) { + _segments[seg].colors[0] = c; +} + +void WS2812FX::setColors(uint8_t seg, uint32_t* c) { + for(uint8_t i=0; i 1); + + _segments[0].start = 0; + _segments[0].stop = Adafruit_NeoPixel::numLEDs - 1; +} + +void WS2812FX::increaseLength(uint16_t s) { + uint16_t seglen = _segments[0].stop - _segments[0].start + 1; + setLength(seglen + s); +} + +void WS2812FX::decreaseLength(uint16_t s) { + uint16_t seglen = _segments[0].stop - _segments[0].start + 1; + fill(BLACK, _segments[0].start, seglen); + show(); + + if (s < seglen) setLength(seglen - s); +} + +boolean WS2812FX::isRunning() { + return _running; +} + +boolean WS2812FX::isTriggered() { + return _triggered; +} + +boolean WS2812FX::isFrame() { + return isFrame(0); +} + +boolean WS2812FX::isFrame(uint8_t seg) { + uint8_t* ptr = (uint8_t*)memchr(_active_segments, seg, _active_segments_len); + if(ptr == NULL) return false; // segment not active + return (_segment_runtimes[ptr - _active_segments].aux_param2 & FRAME); +} + +boolean WS2812FX::isCycle() { + return isCycle(0); +} + +boolean WS2812FX::isCycle(uint8_t seg) { + uint8_t* ptr = (uint8_t*)memchr(_active_segments, seg, _active_segments_len); + if(ptr == NULL) return false; // segment not active + return (_segment_runtimes[ptr - _active_segments].aux_param2 & CYCLE); +} + +void WS2812FX::setCycle() { + SET_CYCLE; +} + +uint8_t WS2812FX::getMode(void) { + return getMode(0); +} + +uint8_t WS2812FX::getMode(uint8_t seg) { + return _segments[seg].mode; +} + +uint16_t WS2812FX::getSpeed(void) { + return getSpeed(0); +} + +uint16_t WS2812FX::getSpeed(uint8_t seg) { + return _segments[seg].speed; +} + +uint8_t WS2812FX::getOptions(uint8_t seg) { + return _segments[seg].options; +} + +uint16_t WS2812FX::getLength(void) { + return numPixels(); +} + +uint16_t WS2812FX::getNumBytes(void) { + return numBytes; +} + +uint8_t WS2812FX::getNumBytesPerPixel(void) { + return (wOffset == rOffset) ? 3 : 4; // 3=RGB, 4=RGBW +} + +uint8_t WS2812FX::getModeCount(void) { + return MODE_COUNT; +} + +uint8_t WS2812FX::getNumSegments(void) { + return _num_segments; +} + +void WS2812FX::setNumSegments(uint8_t n) { + _num_segments = n; +} + +uint32_t WS2812FX::getColor(void) { + return getColor(0); +} + +uint32_t WS2812FX::getColor(uint8_t seg) { + return _segments[seg].colors[0]; +} + +uint32_t* WS2812FX::getColors(uint8_t seg) { + return _segments[seg].colors; +} + +uint8_t WS2812FX::getSegmentIndex(void) { + return _segment_index; +} + +WS2812FX::Segment* WS2812FX::getSegment(void) { + return _seg; +} + +WS2812FX::Segment* WS2812FX::getSegment(uint8_t seg) { + return &_segments[seg]; +} + +WS2812FX::Segment* WS2812FX::getSegments(void) { + return _segments; +} + +WS2812FX::Segment_runtime* WS2812FX::getSegmentRuntime(void) { + return _seg_rt; +} + +WS2812FX::Segment_runtime* WS2812FX::getSegmentRuntime(uint8_t seg) { + uint8_t* ptr = (uint8_t*)memchr(_active_segments, seg, _active_segments_len); + if(ptr == NULL) return NULL; // segment not active + return &_segment_runtimes[ptr - _active_segments]; +} + +WS2812FX::Segment_runtime* WS2812FX::getSegmentRuntimes(void) { + return _segment_runtimes; +} + +uint8_t* WS2812FX::getActiveSegments(void) { + return _active_segments; +} + +const __FlashStringHelper* WS2812FX::getModeName(uint8_t m) { + if(m < MODE_COUNT) { + return _names[m]; + } else { + return F(""); + } +} + +void WS2812FX::setIdleSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, uint8_t options) { + uint32_t colors[] = {color, 0, 0}; + setIdleSegment(n, start, stop, mode, colors, speed, options); +} + +void WS2812FX::setIdleSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, uint8_t options) { + setSegment(n, start, stop, mode, colors, speed, options); + if(n < _active_segments_len) removeActiveSegment(n);; +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, bool reverse) { + uint32_t colors[] = {color, 0, 0}; + setSegment(n, start, stop, mode, colors, speed, (uint8_t)(reverse ? REVERSE : NO_OPTIONS)); +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, bool reverse) { + setSegment(n, start, stop, mode, colors, speed, (uint8_t)(reverse ? REVERSE : NO_OPTIONS)); +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, uint8_t options) { + uint32_t colors[] = {color, 0, 0}; + setSegment(n, start, stop, mode, colors, speed, options); +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, uint8_t options) { + if(n < _segments_len) { + if(n + 1 > _num_segments) _num_segments = n + 1; + _segments[n].start = start; + _segments[n].stop = stop; + _segments[n].mode = mode; + _segments[n].speed = speed; + _segments[n].options = options; + + setColors(n, (uint32_t*)colors); + + if(n < _active_segments_len) addActiveSegment(n); + } +} + +void WS2812FX::addActiveSegment(uint8_t seg) { + uint8_t* ptr = (uint8_t*)memchr(_active_segments, seg, _active_segments_len); + if(ptr != NULL) return; // segment already active + for(uint8_t i=0; i<_active_segments_len; i++) { + if(_active_segments[i] == INACTIVE_SEGMENT) { + _active_segments[i] = seg; + resetSegmentRuntime(seg); + break; + } + } +} + +void WS2812FX::removeActiveSegment(uint8_t seg) { + for(uint8_t i=0; i<_active_segments_len; i++) { + if(_active_segments[i] == seg) { + _active_segments[i] = INACTIVE_SEGMENT; + } + } +} + +void WS2812FX::swapActiveSegment(uint8_t oldSeg, uint8_t newSeg) { + uint8_t* ptr = (uint8_t*)memchr(_active_segments, newSeg, _active_segments_len); + if(ptr != NULL) return; // if newSeg is already active, don't swap + for(uint8_t i=0; i<_active_segments_len; i++) { + if(_active_segments[i] == oldSeg) { + _active_segments[i] = newSeg; + + // reset all runtime parameters EXCEPT next_time, + // allowing the current animation frame to complete + segment_runtime seg_rt = _segment_runtimes[i]; + seg_rt.counter_mode_step = 0; + seg_rt.counter_mode_call = 0; + seg_rt.aux_param = 0; + seg_rt.aux_param2 = 0; + seg_rt.aux_param3 = 0; + break; + } + } +} + +boolean WS2812FX::isActiveSegment(uint8_t seg) { + uint8_t* ptr = (uint8_t*)memchr(_active_segments, seg, _active_segments_len); + if(ptr != NULL) return true; + return false; +} + +void WS2812FX::resetSegments() { + resetSegmentRuntimes(); + memset(_segments, 0, _segments_len * sizeof(Segment)); + memset(_active_segments, INACTIVE_SEGMENT, _active_segments_len); + _num_segments = 0; +} + +void WS2812FX::resetSegmentRuntimes() { + memset(_segment_runtimes, 0, _active_segments_len * sizeof(Segment_runtime)); +} + +void WS2812FX::resetSegmentRuntime(uint8_t seg) { + uint8_t* ptr = (uint8_t*)memchr(_active_segments, seg, _active_segments_len); + if(ptr == NULL) return; // segment not active + memset(&_segment_runtimes[ptr - _active_segments], 0, sizeof(Segment_runtime)); +} + +/* + * Turns everything off. Doh. + */ +void WS2812FX::strip_off() { + Adafruit_NeoPixel::clear(); + show(); +} + +/* + * Put a value 0 to 255 in to get a color value. + * The colours are a transition r -> g -> b -> back to r + * Inspired by the Adafruit examples. + */ +uint32_t WS2812FX::color_wheel(uint8_t pos) { + pos = 255 - pos; + if(pos < 85) { + return ((uint32_t)(255 - pos * 3) << 16) | ((uint32_t)(0) << 8) | (pos * 3); + } else if(pos < 170) { + pos -= 85; + return ((uint32_t)(0) << 16) | ((uint32_t)(pos * 3) << 8) | (255 - pos * 3); + } else { + pos -= 170; + return ((uint32_t)(pos * 3) << 16) | ((uint32_t)(255 - pos * 3) << 8) | (0); + } +} + +/* + * Returns a new, random wheel index with a minimum distance of 42 from pos. + */ +uint8_t WS2812FX::get_random_wheel_index(uint8_t pos) { + uint8_t r = 0; + uint8_t x = 0; + uint8_t y = 0; + uint8_t d = 0; + + while(d < 42) { + r = random8(); + x = abs(pos - r); + y = 255 - x; + d = min(x, y); + } + + return r; +} + +// fast 8-bit random number generator shamelessly borrowed from FastLED +uint8_t WS2812FX::random8() { + _rand16seed = (_rand16seed * 2053) + 13849; + return (uint8_t)((_rand16seed + (_rand16seed >> 8)) & 0xFF); +} + +// note random8(lim) generates numbers in the range 0 to (lim -1) +uint8_t WS2812FX::random8(uint8_t lim) { + uint8_t r = random8(); + r = ((uint16_t)r * lim) >> 8; + return r; +} + +uint16_t WS2812FX::random16() { + return (uint16_t)random8() * 256 + random8(); +} + +// note random16(lim) generates numbers in the range 0 to (lim - 1) +uint16_t WS2812FX::random16(uint16_t lim) { + uint16_t r = random16(); + r = ((uint32_t)r * lim) >> 16; + return r; +} + +// Return the sum of all LED intensities (can be used for +// rudimentary power calculations) +uint32_t WS2812FX::intensitySum() { + uint8_t *pixels = getPixels(); + uint32_t sum = 0; + for(uint16_t i=0; i colors[0], _seg->start, _seg_len); + SET_CYCLE; + return _seg->speed; +} + + +/* + * Blink/strobe function + * Alternate between color1 and color2 + * if(strobe == true) then create a strobe effect + */ +uint16_t WS2812FX::blink(uint32_t color1, uint32_t color2, bool strobe) { + if(_seg_rt->counter_mode_call & 1) { + uint32_t color = (IS_REVERSE) ? color1 : color2; // off + fill(color, _seg->start, _seg_len); + SET_CYCLE; + return strobe ? _seg->speed - 20 : (_seg->speed / 2); + } else { + uint32_t color = (IS_REVERSE) ? color2 : color1; // on + fill(color, _seg->start, _seg_len); + return strobe ? 20 : (_seg->speed / 2); + } +} + + +/* + * Normal blinking. 50% on/off time. + */ +uint16_t WS2812FX::mode_blink(void) { + return blink(_seg->colors[0], _seg->colors[1], false); +} + + +/* + * Classic Blink effect. Cycling through the rainbow. + */ +uint16_t WS2812FX::mode_blink_rainbow(void) { + return blink(color_wheel(_seg_rt->counter_mode_call & 0xFF), _seg->colors[1], false); +} + + +/* + * Classic Strobe effect. + */ +uint16_t WS2812FX::mode_strobe(void) { + return blink(_seg->colors[0], _seg->colors[1], true); +} + + +/* + * Classic Strobe effect. Cycling through the rainbow. + */ +uint16_t WS2812FX::mode_strobe_rainbow(void) { + return blink(color_wheel(_seg_rt->counter_mode_call & 0xFF), _seg->colors[1], true); +} + + +/* + * Color wipe function + * LEDs are turned on (color1) in sequence, then turned off (color2) in sequence. + * if (bool rev == true) then LEDs are turned off in reverse order + */ +uint16_t WS2812FX::color_wipe(uint32_t color1, uint32_t color2, bool rev) { + if(_seg_rt->counter_mode_step < _seg_len) { + uint32_t led_offset = _seg_rt->counter_mode_step; + if(IS_REVERSE) { + setPixelColor(_seg->stop - led_offset, color1); + } else { + setPixelColor(_seg->start + led_offset, color1); + } + } else { + uint32_t led_offset = _seg_rt->counter_mode_step - _seg_len; + if((IS_REVERSE && !rev) || (!IS_REVERSE && rev)) { + setPixelColor(_seg->stop - led_offset, color2); + } else { + setPixelColor(_seg->start + led_offset, color2); + } + } + + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) % (_seg_len * 2); + + if(_seg_rt->counter_mode_step == 0) SET_CYCLE; + + return (_seg->speed / (_seg_len * 2)); +} + +/* + * Lights all LEDs one after another. + */ +uint16_t WS2812FX::mode_color_wipe(void) { + return color_wipe(_seg->colors[0], _seg->colors[1], false); +} + +uint16_t WS2812FX::mode_color_wipe_inv(void) { + return color_wipe(_seg->colors[1], _seg->colors[0], false); +} + +uint16_t WS2812FX::mode_color_wipe_rev(void) { + return color_wipe(_seg->colors[0], _seg->colors[1], true); +} + +uint16_t WS2812FX::mode_color_wipe_rev_inv(void) { + return color_wipe(_seg->colors[1], _seg->colors[0], true); +} + + +/* + * Turns all LEDs after each other to a random color. + * Then starts over with another color. + */ +uint16_t WS2812FX::mode_color_wipe_random(void) { + if(_seg_rt->counter_mode_step % _seg_len == 0) { // aux_param will store our random color wheel index + _seg_rt->aux_param = get_random_wheel_index(_seg_rt->aux_param); + } + uint32_t color = color_wheel(_seg_rt->aux_param); + return color_wipe(color, color, false) * 2; +} + + +/* + * Random color introduced alternating from start and end of strip. + */ +uint16_t WS2812FX::mode_color_sweep_random(void) { + if(_seg_rt->counter_mode_step % _seg_len == 0) { // aux_param will store our random color wheel index + _seg_rt->aux_param = get_random_wheel_index(_seg_rt->aux_param); + } + uint32_t color = color_wheel(_seg_rt->aux_param); + return color_wipe(color, color, true) * 2; +} + + +/* + * Lights all LEDs in one random color up. Then switches them + * to the next random color. + */ +uint16_t WS2812FX::mode_random_color(void) { + _seg_rt->aux_param = get_random_wheel_index(_seg_rt->aux_param); // aux_param will store our random color wheel index + uint32_t color = color_wheel(_seg_rt->aux_param); + fill(color, _seg->start, _seg_len); + SET_CYCLE; + return _seg->speed; +} + + +/* + * Lights every LED in a random color. Changes one random LED after the other + * to another random color. + */ +uint16_t WS2812FX::mode_single_dynamic(void) { + if(_seg_rt->counter_mode_call == 0) { + for(uint16_t i=_seg->start; i <= _seg->stop; i++) { + setPixelColor(i, color_wheel(random8())); + } + } + + setPixelColor(_seg->start + random16(_seg_len), color_wheel(random8())); + SET_CYCLE; + return _seg->speed; +} + + +/* + * Lights every LED in a random color. Changes all LED at the same time + * to new random colors. + */ +uint16_t WS2812FX::mode_multi_dynamic(void) { + for(uint16_t i=_seg->start; i <= _seg->stop; i++) { + setPixelColor(i, color_wheel(random8())); + } + SET_CYCLE; + return _seg->speed; +} + + +/* + * Does the "standby-breathing" of well known i-Devices. Fixed Speed. + * Use mode "fade" if you like to have something similar with a different speed. + */ +uint16_t WS2812FX::mode_breath(void) { + int lum = _seg_rt->counter_mode_step; + if(lum > 255) lum = 511 - lum; // lum = 15 -> 255 -> 15 + + uint16_t delay; + if(lum == 15) delay = 970; // 970 pause before each breath + else if(lum <= 25) delay = 38; // 19 + else if(lum <= 50) delay = 36; // 18 + else if(lum <= 75) delay = 28; // 14 + else if(lum <= 100) delay = 20; // 10 + else if(lum <= 125) delay = 14; // 7 + else if(lum <= 150) delay = 11; // 5 + else delay = 10; // 4 + + uint32_t color = color_blend(_seg->colors[1], _seg->colors[0], lum); + fill(color, _seg->start, _seg_len); + + _seg_rt->counter_mode_step += 2; + if(_seg_rt->counter_mode_step > (512-15)) { + _seg_rt->counter_mode_step = 15; + SET_CYCLE; + } + return delay; +} + + +/* + * Fades the LEDs between two colors + */ +uint16_t WS2812FX::mode_fade(void) { + int lum = _seg_rt->counter_mode_step; + if(lum > 255) lum = 511 - lum; // lum = 0 -> 255 -> 0 + + uint32_t color = color_blend(_seg->colors[1], _seg->colors[0], lum); + fill(color, _seg->start, _seg_len); + + _seg_rt->counter_mode_step += 4; + if(_seg_rt->counter_mode_step > 511) { + _seg_rt->counter_mode_step = 0; + SET_CYCLE; + } + return (_seg->speed / 128); +} + + +/* + * scan function - runs a block of pixels back and forth. + */ +uint16_t WS2812FX::scan(uint32_t color1, uint32_t color2, bool dual) { + int8_t dir = _seg_rt->aux_param ? -1 : 1; + uint8_t size = 1 << SIZE_OPTION; + + fill(color2, _seg->start, _seg_len); + + for(uint8_t i = 0; i < size; i++) { + if(IS_REVERSE || dual) { + setPixelColor(_seg->stop - _seg_rt->counter_mode_step - i, color1); + } + if(!IS_REVERSE || dual) { + setPixelColor(_seg->start + _seg_rt->counter_mode_step + i, color1); + } + } + + _seg_rt->counter_mode_step += dir; + if(_seg_rt->counter_mode_step == 0) { + _seg_rt->aux_param = 0; + SET_CYCLE; + } + if(_seg_rt->counter_mode_step >= (uint16_t)(_seg_len - size)) _seg_rt->aux_param = 1; + + return (_seg->speed / (_seg_len * 2)); +} + + +/* + * Runs a block of pixels back and forth. + */ +uint16_t WS2812FX::mode_scan(void) { + return scan(_seg->colors[0], _seg->colors[1], false); +} + + +/* + * Runs two blocks of pixels back and forth in opposite directions. + */ +uint16_t WS2812FX::mode_dual_scan(void) { + return scan(_seg->colors[0], _seg->colors[1], true); +} + + +/* + * Cycles all LEDs at once through a rainbow. + */ +uint16_t WS2812FX::mode_rainbow(void) { + uint32_t color = color_wheel(_seg_rt->counter_mode_step); + fill(color, _seg->start, _seg_len); + + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) & 0xFF; + + if(_seg_rt->counter_mode_step == 0) SET_CYCLE; + + return (_seg->speed / 256); +} + + +/* + * Cycles a rainbow over the entire string of LEDs. + */ +uint16_t WS2812FX::mode_rainbow_cycle(void) { + for(uint16_t i=0; i < _seg_len; i++) { + uint32_t color = color_wheel(((i * 256 / _seg_len) + _seg_rt->counter_mode_step) & 0xFF); + setPixelColor(_seg->start + i, color); + } + + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) & 0xFF; + + if(_seg_rt->counter_mode_step == 0) SET_CYCLE; + + return (_seg->speed / 256); +} + + +/* + * Tricolor chase function + */ +uint16_t WS2812FX::tricolor_chase(uint32_t color1, uint32_t color2, uint32_t color3) { + uint8_t sizeCnt = 1 << SIZE_OPTION; + uint8_t sizeCnt2 = sizeCnt + sizeCnt; + uint8_t sizeCnt3 = sizeCnt2 + sizeCnt; + uint16_t index = _seg_rt->counter_mode_step % sizeCnt3; + for(uint16_t i=0; i < _seg_len; i++, index++) { + index = index % sizeCnt3; + + uint32_t color = color3; + if(index < sizeCnt) color = color1; + else if(index < sizeCnt2) color = color2; + + if(IS_REVERSE) { + setPixelColor(_seg->start + i, color); + } else { + setPixelColor(_seg->stop - i, color); + } + } + + _seg_rt->counter_mode_step++; + if(_seg_rt->counter_mode_step % _seg_len == 0) SET_CYCLE; + + return (_seg->speed / _seg_len); +} + + +/* + * Tricolor chase mode + */ +uint16_t WS2812FX::mode_tricolor_chase(void) { + return tricolor_chase(_seg->colors[0], _seg->colors[1], _seg->colors[2]); +} + + +/* + * Alternating white/red/black pixels running. + */ +uint16_t WS2812FX::mode_circus_combustus(void) { + return tricolor_chase(RED, WHITE, BLACK); +} + + +/* + * Theatre-style crawling lights. + * Inspired by the Adafruit examples. + */ +uint16_t WS2812FX::mode_theater_chase(void) { + return tricolor_chase(_seg->colors[0], _seg->colors[1], _seg->colors[1]); +} + + +/* + * Theatre-style crawling lights with rainbow effect. + * Inspired by the Adafruit examples. + */ +uint16_t WS2812FX::mode_theater_chase_rainbow(void) { + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) & 0xFF; + uint32_t color = color_wheel(_seg_rt->counter_mode_step); + return tricolor_chase(color, _seg->colors[1], _seg->colors[1]); +} + + +/* + * Running lights effect with smooth sine transition. + */ +uint16_t WS2812FX::mode_running_lights(void) { + uint8_t size = 1 << SIZE_OPTION; + uint8_t sineIncr = max(1, (256 / _seg_len) * size); + for(uint16_t i=0; i < _seg_len; i++) { + int lum = (int)sine8(((i + _seg_rt->counter_mode_step) * sineIncr)); + uint32_t color = color_blend(_seg->colors[0], _seg->colors[1], lum); + if(IS_REVERSE) { + setPixelColor(_seg->start + i, color); + } else { + setPixelColor(_seg->stop - i, color); + } + } + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) % 256; + if(_seg_rt->counter_mode_step == 0) SET_CYCLE; + return (_seg->speed / _seg_len); +} + + +/* + * twinkle function + */ +uint16_t WS2812FX::twinkle(uint32_t color1, uint32_t color2) { + if(_seg_rt->counter_mode_step == 0) { + fill(color2, _seg->start, _seg_len); + uint16_t min_leds = (_seg_len / 4) + 1; // make sure, at least one LED is on + _seg_rt->counter_mode_step = random(min_leds, min_leds * 2); + SET_CYCLE; + } + + setPixelColor(_seg->start + random16(_seg_len), color1); + + _seg_rt->counter_mode_step--; + return (_seg->speed / _seg_len); +} + +/* + * Blink several LEDs on, reset, repeat. + * Inspired by www.tweaking4all.com/hardware/arduino/arduino-led-strip-effects/ + */ +uint16_t WS2812FX::mode_twinkle(void) { + return twinkle(_seg->colors[0], _seg->colors[1]); +} + +/* + * Blink several LEDs in random colors on, reset, repeat. + * Inspired by www.tweaking4all.com/hardware/arduino/arduino-led-strip-effects/ + */ +uint16_t WS2812FX::mode_twinkle_random(void) { + return twinkle(color_wheel(random8()), _seg->colors[1]); +} + + +/* + * fade out functions + */ +void WS2812FX::fade_out() { + return fade_out(_seg->colors[1]); +} + +void WS2812FX::fade_out(uint32_t targetColor) { + static const uint8_t rateMapH[] = {0, 1, 1, 1, 2, 3, 4, 6}; + static const uint8_t rateMapL[] = {0, 2, 3, 8, 8, 8, 8, 8}; + + uint8_t rate = FADE_RATE; + uint8_t rateH = rateMapH[rate]; + uint8_t rateL = rateMapL[rate]; + + uint32_t color = targetColor; + int w2 = (color >> 24) & 0xff; + int r2 = (color >> 16) & 0xff; + int g2 = (color >> 8) & 0xff; + int b2 = color & 0xff; + + for(uint16_t i=_seg->start; i <= _seg->stop; i++) { + color = getPixelColor(i); // current color + if(rate == 0) { // old fade-to-black algorithm + setPixelColor(i, (color >> 1) & 0x7F7F7F7F); + } else { // new fade-to-color algorithm + int w1 = (color >> 24) & 0xff; + int r1 = (color >> 16) & 0xff; + int g1 = (color >> 8) & 0xff; + int b1 = color & 0xff; + + // calculate the color differences between the current and target colors + int wdelta = w2 - w1; + int rdelta = r2 - r1; + int gdelta = g2 - g1; + int bdelta = b2 - b1; + + // if the current and target colors are almost the same, jump right to the target + // color, otherwise calculate an intermediate color. (fixes rounding issues) + wdelta = abs(wdelta) < 3 ? wdelta : (wdelta >> rateH) + (wdelta >> rateL); + rdelta = abs(rdelta) < 3 ? rdelta : (rdelta >> rateH) + (rdelta >> rateL); + gdelta = abs(gdelta) < 3 ? gdelta : (gdelta >> rateH) + (gdelta >> rateL); + bdelta = abs(bdelta) < 3 ? bdelta : (bdelta >> rateH) + (bdelta >> rateL); + + setPixelColor(i, r1 + rdelta, g1 + gdelta, b1 + bdelta, w1 + wdelta); + } + } +} + + +/* + * color blend function + */ +uint32_t WS2812FX::color_blend(uint32_t color1, uint32_t color2, uint8_t blend) { + if(blend == 0) return color1; + if(blend == 255) return color2; + + uint8_t w1 = (color1 >> 24) & 0xff; + uint8_t r1 = (color1 >> 16) & 0xff; + uint8_t g1 = (color1 >> 8) & 0xff; + uint8_t b1 = color1 & 0xff; + + uint8_t w2 = (color2 >> 24) & 0xff; + uint8_t r2 = (color2 >> 16) & 0xff; + uint8_t g2 = (color2 >> 8) & 0xff; + uint8_t b2 = color2 & 0xff; + + uint32_t w3 = ((w2 * blend) + (w1 * (255U - blend))) / 256U; + uint32_t r3 = ((r2 * blend) + (r1 * (255U - blend))) / 256U; + uint32_t g3 = ((g2 * blend) + (g1 * (255U - blend))) / 256U; + uint32_t b3 = ((b2 * blend) + (b1 * (255U - blend))) / 256U; + + return ((w3 << 24) | (r3 << 16) | (g3 << 8) | (b3)); +} + + +/* + * twinkle_fade function + */ +uint16_t WS2812FX::twinkle_fade(uint32_t color) { + fade_out(); + + if(random8(3) == 0) { + uint8_t size = 1 << SIZE_OPTION; + uint16_t index = _seg->start + random16(_seg_len - size); + fill(color, index, size); + SET_CYCLE; + } + return (_seg->speed / 8); +} + + +/* + * Blink several LEDs on, fading out. + */ +uint16_t WS2812FX::mode_twinkle_fade(void) { + return twinkle_fade(_seg->colors[0]); +} + + +/* + * Blink several LEDs in random colors on, fading out. + */ +uint16_t WS2812FX::mode_twinkle_fade_random(void) { + return twinkle_fade(color_wheel(random8())); +} + +/* + * Sparkle function + * color1 = background color + * color2 = sparkle color + */ +uint16_t WS2812FX::sparkle(uint32_t color1, uint32_t color2) { + if(_seg_rt->counter_mode_step == 0) { + fill(color1, _seg->start, _seg_len); + } + + uint8_t size = 1 << SIZE_OPTION; + fill(color1, _seg->start + _seg_rt->aux_param3, size); + + _seg_rt->aux_param3 = random16(_seg_len - size); // aux_param3 stores the random led index + fill(color2, _seg->start + _seg_rt->aux_param3, size); + + SET_CYCLE; + return (_seg->speed / 32); +} + + +/* + * Blinks one LED at a time. + * Inspired by www.tweaking4all.com/hardware/arduino/arduino-led-strip-effects/ + */ +uint16_t WS2812FX::mode_sparkle(void) { + return sparkle(_seg->colors[1], _seg->colors[0]); +} + + +/* + * Lights all LEDs in the color. Flashes white pixels randomly. + * Inspired by www.tweaking4all.com/hardware/arduino/arduino-led-strip-effects/ + */ +uint16_t WS2812FX::mode_flash_sparkle(void) { + return sparkle(_seg->colors[0], WHITE); +} + + +/* + * Like flash sparkle. With more flash. + * Inspired by www.tweaking4all.com/hardware/arduino/arduino-led-strip-effects/ + */ +uint16_t WS2812FX::mode_hyper_sparkle(void) { + fill(_seg->colors[0], _seg->start, _seg_len); + + uint8_t size = 1 << SIZE_OPTION; + for(uint8_t i=0; i<8; i++) { + fill(WHITE, _seg->start + random16(_seg_len - size), size); + } + + SET_CYCLE; + return (_seg->speed / 32); +} + + +/* + * Strobe effect with different strobe count and pause, controlled by speed. + */ +uint16_t WS2812FX::mode_multi_strobe(void) { + fill(_seg->colors[1], _seg->start, _seg_len); + + uint16_t delay = 200 + ((9 - (_seg->speed % 10)) * 100); + uint16_t count = 2 * ((_seg->speed / 100) + 1); + if(_seg_rt->counter_mode_step < count) { + if((_seg_rt->counter_mode_step & 1) == 0) { + fill(_seg->colors[0], _seg->start, _seg_len); + delay = 20; + } else { + delay = 50; + } + } + + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) % (count + 1); + if(_seg_rt->counter_mode_step == 0) SET_CYCLE; + return delay; +} + + +/* + * color chase function. + * color1 = background color + * color2 and color3 = colors of two adjacent leds + */ +uint16_t WS2812FX::chase(uint32_t color1, uint32_t color2, uint32_t color3) { + uint8_t size = 1 << SIZE_OPTION; + for(uint8_t i=0; icounter_mode_step + i) % _seg_len; + uint16_t b = (a + size) % _seg_len; + uint16_t c = (b + size) % _seg_len; + if(IS_REVERSE) { + setPixelColor(_seg->stop - a, color1); + setPixelColor(_seg->stop - b, color2); + setPixelColor(_seg->stop - c, color3); + } else { + setPixelColor(_seg->start + a, color1); + setPixelColor(_seg->start + b, color2); + setPixelColor(_seg->start + c, color3); + } + } + + if(_seg_rt->counter_mode_step + (size * 3) == _seg_len) SET_CYCLE; + + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) % _seg_len; + return (_seg->speed / _seg_len); +} + + +/* + * Bicolor chase mode + */ +uint16_t WS2812FX::mode_bicolor_chase(void) { + return chase(_seg->colors[0], _seg->colors[1], _seg->colors[2]); +} + + +/* + * White running on _color. + */ +uint16_t WS2812FX::mode_chase_color(void) { + return chase(_seg->colors[0], WHITE, WHITE); +} + + +/* + * Black running on _color. + */ +uint16_t WS2812FX::mode_chase_blackout(void) { + return chase(_seg->colors[0], BLACK, BLACK); +} + + +/* + * _color running on white. + */ +uint16_t WS2812FX::mode_chase_white(void) { + return chase(WHITE, _seg->colors[0], _seg->colors[0]); +} + + +/* + * White running followed by random color. + */ +uint16_t WS2812FX::mode_chase_random(void) { + if(_seg_rt->counter_mode_step == 0) { + _seg_rt->aux_param = get_random_wheel_index(_seg_rt->aux_param); + } + return chase(color_wheel(_seg_rt->aux_param), WHITE, WHITE); +} + + +/* + * Rainbow running on white. + */ +uint16_t WS2812FX::mode_chase_rainbow_white(void) { + uint16_t n = _seg_rt->counter_mode_step; + uint16_t m = (_seg_rt->counter_mode_step + 1) % _seg_len; + uint32_t color2 = color_wheel(((n * 256 / _seg_len) + (_seg_rt->counter_mode_call & 0xFF)) & 0xFF); + uint32_t color3 = color_wheel(((m * 256 / _seg_len) + (_seg_rt->counter_mode_call & 0xFF)) & 0xFF); + + return chase(WHITE, color2, color3); +} + + +/* + * White running on rainbow. + */ +uint16_t WS2812FX::mode_chase_rainbow(void) { + uint8_t color_sep = 256 / _seg_len; + uint8_t color_index = _seg_rt->counter_mode_call & 0xFF; + uint32_t color = color_wheel(((_seg_rt->counter_mode_step * color_sep) + color_index) & 0xFF); + + return chase(color, WHITE, WHITE); +} + + +/* + * Black running on rainbow. + */ +uint16_t WS2812FX::mode_chase_blackout_rainbow(void) { + uint8_t color_sep = 256 / _seg_len; + uint8_t color_index = _seg_rt->counter_mode_call & 0xFF; + uint32_t color = color_wheel(((_seg_rt->counter_mode_step * color_sep) + color_index) & 0xFF); + + return chase(color, BLACK, BLACK); +} + +/* + * running white flashes function. + * color1 = background color + * color2 = flash color + */ +uint16_t WS2812FX::chase_flash(uint32_t color1, uint32_t color2) { + const static uint8_t flash_count = 4; + uint8_t flash_step = _seg_rt->counter_mode_call % ((flash_count * 2) + 1); + + if(flash_step < (flash_count * 2)) { + uint32_t color = (flash_step % 2 == 0) ? color2 : color1; + uint16_t n = _seg_rt->counter_mode_step; + uint16_t m = (_seg_rt->counter_mode_step + 1) % _seg_len; + if(IS_REVERSE) { + setPixelColor(_seg->stop - n, color); + setPixelColor(_seg->stop - m, color); + } else { + setPixelColor(_seg->start + n, color); + setPixelColor(_seg->start + m, color); + } + return 30; + } else { + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) % _seg_len; + if(_seg_rt->counter_mode_step == 0) { + // update aux_param so mode_chase_flash_random() will select the next color + _seg_rt->aux_param = get_random_wheel_index(_seg_rt->aux_param); + SET_CYCLE; + } + } + return (_seg->speed / _seg_len); +} + +/* + * White flashes running on _color. + */ +uint16_t WS2812FX::mode_chase_flash(void) { + return chase_flash(_seg->colors[0], WHITE); +} + + +/* + * White flashes running, followed by random color. + */ +uint16_t WS2812FX::mode_chase_flash_random(void) { + return chase_flash(color_wheel(_seg_rt->aux_param), WHITE); +} + + +/* + * Alternating pixels running function. + */ +uint16_t WS2812FX::running(uint32_t color1, uint32_t color2) { + uint8_t size = 2 << SIZE_OPTION; + uint32_t color = (_seg_rt->counter_mode_step & size) ? color1 : color2; + + if(IS_REVERSE) { + copyPixels(_seg->start, _seg->start + 1, _seg_len - 1); + setPixelColor(_seg->stop, color); + } else { + copyPixels(_seg->start + 1, _seg->start, _seg_len - 1); + setPixelColor(_seg->start, color); + } + + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) % _seg_len; + if(_seg_rt->counter_mode_step == 0) SET_CYCLE; + return (_seg->speed / _seg_len); +} + + +/* + * Alternating color/white pixels running. + */ +uint16_t WS2812FX::mode_running_color(void) { + return running(_seg->colors[0], _seg->colors[1]); +} + + +/* + * Alternating red/blue pixels running. + */ +uint16_t WS2812FX::mode_running_red_blue(void) { + return running(RED, BLUE); +} + + +/* + * Alternating red/green pixels running. + */ +uint16_t WS2812FX::mode_merry_christmas(void) { + return running(RED, GREEN); +} + +/* + * Alternating orange/purple pixels running. + */ +uint16_t WS2812FX::mode_halloween(void) { + return running(PURPLE, ORANGE); +} + + +/* + * Random colored pixels running. + */ +uint16_t WS2812FX::mode_running_random(void) { + uint8_t size = 2 << SIZE_OPTION; + if((_seg_rt->counter_mode_step) % size == 0) { + _seg_rt->aux_param = get_random_wheel_index(_seg_rt->aux_param); + } + + uint32_t color = color_wheel(_seg_rt->aux_param); + + return running(color, color); +} + + +/* + * K.I.T.T. + */ +uint16_t WS2812FX::mode_larson_scanner(void) { + fade_out(); + + if(_seg_rt->counter_mode_step < _seg_len) { + if(IS_REVERSE) { + setPixelColor(_seg->stop - _seg_rt->counter_mode_step, _seg->colors[0]); + } else { + setPixelColor(_seg->start + _seg_rt->counter_mode_step, _seg->colors[0]); + } + } else { + uint16_t index = (_seg_len * 2) - _seg_rt->counter_mode_step - 2; + if(IS_REVERSE) { + setPixelColor(_seg->stop - index, _seg->colors[0]); + } else { + setPixelColor(_seg->start + index, _seg->colors[0]); + } + } + + _seg_rt->counter_mode_step++; + if(_seg_rt->counter_mode_step >= (uint16_t)((_seg_len * 2) - 2)) { + _seg_rt->counter_mode_step = 0; + SET_CYCLE; + } + + return (_seg->speed / (_seg_len * 2)); +} + + +/* + * Firing comets from one end. + */ +uint16_t WS2812FX::mode_comet(void) { + fade_out(); + + if(IS_REVERSE) { + setPixelColor(_seg->stop - _seg_rt->counter_mode_step, _seg->colors[0]); + } else { + setPixelColor(_seg->start + _seg_rt->counter_mode_step, _seg->colors[0]); + } + + _seg_rt->counter_mode_step = (_seg_rt->counter_mode_step + 1) % _seg_len; + if(_seg_rt->counter_mode_step == 0) SET_CYCLE; + + return (_seg->speed / _seg_len); +} + + +/* + * Fireworks function. + */ +uint16_t WS2812FX::fireworks(uint32_t color) { + fade_out(); + +// for better performance, manipulate the Adafruit_NeoPixels pixels[] array directly + uint8_t *pixels = getPixels(); + uint8_t bytesPerPixel = getNumBytesPerPixel(); // 3=RGB, 4=RGBW + uint16_t startPixel = _seg->start * bytesPerPixel + bytesPerPixel; + uint16_t stopPixel = _seg->stop * bytesPerPixel ; + for(uint16_t i=startPixel; i > 2) + + pixels[i] + + (pixels[i + bytesPerPixel] >> 2); + pixels[i] = tmpPixel > 255 ? 255 : tmpPixel; + } + + uint8_t size = 2 << SIZE_OPTION; + if(!_triggered) { + for(uint16_t i=0; istart + random16(_seg_len - size); + fill(color, index, size); + SET_CYCLE; + } + } + } else { + for(uint16_t i=0; istart + random16(_seg_len - size); + fill(color, index, size); + SET_CYCLE; + } + } + + return (_seg->speed / _seg_len); +} + +/* + * Firework sparks. + */ +uint16_t WS2812FX::mode_fireworks(void) { + uint32_t color = BLACK; + do { // randomly choose a non-BLACK color from the colors array + color = _seg->colors[random8(MAX_NUM_COLORS)]; + } while (color == BLACK); + return fireworks(color); +} + +/* + * Random colored firework sparks. + */ +uint16_t WS2812FX::mode_fireworks_random(void) { + return fireworks(color_wheel(random8())); +} + + +/* + * Fire flicker function + */ +uint16_t WS2812FX::fire_flicker(int rev_intensity) { + byte w = (_seg->colors[0] >> 24) & 0xFF; + byte r = (_seg->colors[0] >> 16) & 0xFF; + byte g = (_seg->colors[0] >> 8) & 0xFF; + byte b = (_seg->colors[0] & 0xFF); + byte lum = max(w, max(r, max(g, b))) / rev_intensity; + for(uint16_t i=_seg->start; i <= _seg->stop; i++) { + int flicker = random8(lum); + setPixelColor(i, max(r - flicker, 0), max(g - flicker, 0), max(b - flicker, 0), max(w - flicker, 0)); + } + + SET_CYCLE; + return (_seg->speed / _seg_len); +} + +/* + * Random flickering. + */ +uint16_t WS2812FX::mode_fire_flicker(void) { + return fire_flicker(3); +} + +/* +* Random flickering, less intensity. +*/ +uint16_t WS2812FX::mode_fire_flicker_soft(void) { + return fire_flicker(6); +} + +/* +* Random flickering, more intensity. +*/ +uint16_t WS2812FX::mode_fire_flicker_intense(void) { + return fire_flicker(1); +} + + +/* + * ICU mode + */ +uint16_t WS2812FX::mode_icu(void) { + uint16_t dest = _seg_rt->counter_mode_step & 0xFFFF; + + setPixelColor(_seg->start + dest, _seg->colors[0]); + setPixelColor(_seg->start + dest + _seg_len/2, _seg->colors[0]); + + if(_seg_rt->aux_param3 == dest) { // pause between eye movements + if(random8(6) == 0) { // blink once in a while + setPixelColor(_seg->start + dest, BLACK); + setPixelColor(_seg->start + dest + _seg_len/2, BLACK); + return 200; + } + _seg_rt->aux_param3 = random16(_seg_len/2); + SET_CYCLE; + return 1000 + random16(2000); + } + + setPixelColor(_seg->start + dest, BLACK); + setPixelColor(_seg->start + dest + _seg_len/2, BLACK); + + if(_seg_rt->aux_param3 > _seg_rt->counter_mode_step) { + _seg_rt->counter_mode_step++; + dest++; + } else if (_seg_rt->aux_param3 < _seg_rt->counter_mode_step) { + _seg_rt->counter_mode_step--; + dest--; + } + + setPixelColor(_seg->start + dest, _seg->colors[0]); + setPixelColor(_seg->start + dest + _seg_len/2, _seg->colors[0]); + + return (_seg->speed / _seg_len); +} + +/* + * Custom modes + */ +uint16_t WS2812FX::mode_custom_0() { + return customModes[0](); +} +uint16_t WS2812FX::mode_custom_1() { + return customModes[1](); +} +uint16_t WS2812FX::mode_custom_2() { + return customModes[2](); +} +uint16_t WS2812FX::mode_custom_3() { + return customModes[3](); +} +uint16_t WS2812FX::mode_custom_4() { + return customModes[4](); +} +uint16_t WS2812FX::mode_custom_5() { + return customModes[5](); +} +uint16_t WS2812FX::mode_custom_6() { + return customModes[6](); +} +uint16_t WS2812FX::mode_custom_7() { + return customModes[7](); +} +uint16_t WS2812FX::mode_custom_8() { + return customModes[8](); +} +uint16_t WS2812FX::mode_custom_9() { + return customModes[9](); +} +/* + * Custom mode helpers + */ +void WS2812FX::setCustomMode(uint16_t (*p)()) { + customModes[0] = p; +} + +uint8_t WS2812FX::setCustomMode(const __FlashStringHelper* name, uint16_t (*p)()) { + static uint8_t custom_mode_index = 0; + return setCustomMode(custom_mode_index++, name, p); +} + +uint8_t WS2812FX::setCustomMode(uint8_t index, const __FlashStringHelper* name, uint16_t (*p)()) { + if((uint8_t)(FX_MODE_CUSTOM_0 + index) < MODE_COUNT) { + _names[FX_MODE_CUSTOM_0 + index] = name; // store the custom mode name + customModes[index] = p; // store the custom mode + + return (FX_MODE_CUSTOM_0 + index); + } + return 0; +} + +/* + * Custom show helper + */ +void WS2812FX::setCustomShow(void (*p)()) { + customShow = p; +} diff --git a/Arduino/McLighting/WS2812FX.h b/Arduino/McLighting/WS2812FX.h new file mode 100644 index 00000000..975681d7 --- /dev/null +++ b/Arduino/McLighting/WS2812FX.h @@ -0,0 +1,681 @@ +/* + WS2812FX.h - Library for WS2812 LED effects. + + Harm Aldick - 2016 + www.aldick.org + FEATURES + * A lot of blinken modes and counting + * WS2812FX can be used as drop-in replacement for Adafruit NeoPixel Library + NOTES + * Uses the Adafruit NeoPixel library. Get it here: + https://github.com/adafruit/Adafruit_NeoPixel + LICENSE + The MIT License (MIT) + Copyright (c) 2016 Harm Aldick + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + CHANGELOG + 2016-05-28 Initial beta release + 2016-06-03 Code cleanup, minor improvements, new modes + 2016-06-04 2 new fx, fixed setColor (now also resets _mode_color) + 2017-02-02 added external trigger functionality (e.g. for sound-to-light) +*/ + +#ifndef WS2812FX_h +#define WS2812FX_h + +#define FSH(x) (__FlashStringHelper*)(x) + +#include + +#define DEFAULT_BRIGHTNESS (uint8_t)50 +#define DEFAULT_MODE (uint8_t)0 +#define DEFAULT_SPEED (uint16_t)1000 +#define DEFAULT_COLOR (uint32_t)0xFF0000 +#define DEFAULT_COLORS { RED, GREEN, BLUE } +#define COLORS(...) (const uint32_t[]){__VA_ARGS__} + +#if defined(ESP8266) || defined(ESP32) + //#pragma message("Compiling for ESP") + #define SPEED_MIN (uint16_t)2 +#else + //#pragma message("Compiling for Arduino") + #define SPEED_MIN (uint16_t)10 +#endif +#define SPEED_MAX (uint16_t)65535 + +#define BRIGHTNESS_MIN (uint8_t)0 +#define BRIGHTNESS_MAX (uint8_t)255 + +/* each segment uses 36 bytes of SRAM memory, so if you're compile fails + because of insufficient flash memory, decreasing MAX_NUM_SEGMENTS may help */ +#define MAX_NUM_SEGMENTS 10 +#define MAX_NUM_ACTIVE_SEGMENTS 10 +#define INACTIVE_SEGMENT 255 /* max uint_8 */ +#define MAX_NUM_COLORS 3 /* number of colors per segment */ +#define MAX_CUSTOM_MODES 10 + +// some common colors +#define RED (uint32_t)0xFF0000 +#define GREEN (uint32_t)0x00FF00 +#define BLUE (uint32_t)0x0000FF +#define WHITE (uint32_t)0xFFFFFF +#define BLACK (uint32_t)0x000000 +#define YELLOW (uint32_t)0xFFFF00 +#define CYAN (uint32_t)0x00FFFF +#define MAGENTA (uint32_t)0xFF00FF +#define PURPLE (uint32_t)0x400080 +#define ORANGE (uint32_t)0xFF3000 +#define PINK (uint32_t)0xFF1493 +#define GRAY (uint32_t)0x101010 +#define ULTRAWHITE (uint32_t)0xFFFFFFFF +#define DIM(c) (uint32_t)((c >> 2) & 0x3f3f3f3f) // color at 25% intensity +#define DARK(c) (uint32_t)((c >> 4) & 0x0f0f0f0f) // color at 6% intensity + + +// segment options +// bit 7: reverse animation +// bits 4-6: fade rate (0-7) +// bit 3: gamma correction +// bits 1-2: size +// bits 0: TBD +#define NO_OPTIONS (uint8_t)B00000000 +#define REVERSE (uint8_t)B10000000 +#define IS_REVERSE ((_seg->options & REVERSE) == REVERSE) +#define FADE_XFAST (uint8_t)B00010000 +#define FADE_FAST (uint8_t)B00100000 +#define FADE_MEDIUM (uint8_t)B00110000 +#define FADE_SLOW (uint8_t)B01000000 +#define FADE_XSLOW (uint8_t)B01010000 +#define FADE_XXSLOW (uint8_t)B01100000 +#define FADE_GLACIAL (uint8_t)B01110000 +#define FADE_RATE ((_seg->options >> 4) & 7) +#define GAMMA (uint8_t)B00001000 +#define IS_GAMMA ((_seg->options & GAMMA) == GAMMA) +#define SIZE_SMALL (uint8_t)B00000000 +#define SIZE_MEDIUM (uint8_t)B00000010 +#define SIZE_LARGE (uint8_t)B00000100 +#define SIZE_XLARGE (uint8_t)B00000110 +#define SIZE_OPTION ((_seg->options >> 1) & 3) + +// segment runtime options (aux_param2) +#define FRAME (uint8_t)B10000000 +#define SET_FRAME (_seg_rt->aux_param2 |= FRAME) +#define CLR_FRAME (_seg_rt->aux_param2 &= ~FRAME) +#define CYCLE (uint8_t)B01000000 +#define SET_CYCLE (_seg_rt->aux_param2 |= CYCLE) +#define CLR_CYCLE (_seg_rt->aux_param2 &= ~CYCLE) +#define CLR_FRAME_CYCLE (_seg_rt->aux_param2 &= ~(FRAME | CYCLE)) + +#define MODE_COUNT (sizeof(_names)/sizeof(_names[0])) + +#define FX_MODE_STATIC 0 +#define FX_MODE_BLINK 1 +#define FX_MODE_BREATH 2 +#define FX_MODE_COLOR_WIPE 3 +#define FX_MODE_COLOR_WIPE_INV 4 +#define FX_MODE_COLOR_WIPE_REV 5 +#define FX_MODE_COLOR_WIPE_REV_INV 6 +#define FX_MODE_COLOR_WIPE_RANDOM 7 +#define FX_MODE_RANDOM_COLOR 8 +#define FX_MODE_SINGLE_DYNAMIC 9 +#define FX_MODE_MULTI_DYNAMIC 10 +#define FX_MODE_RAINBOW 11 +#define FX_MODE_RAINBOW_CYCLE 12 +#define FX_MODE_SCAN 13 +#define FX_MODE_DUAL_SCAN 14 +#define FX_MODE_FADE 15 +#define FX_MODE_THEATER_CHASE 16 +#define FX_MODE_THEATER_CHASE_RAINBOW 17 +#define FX_MODE_RUNNING_LIGHTS 18 +#define FX_MODE_TWINKLE 19 +#define FX_MODE_TWINKLE_RANDOM 20 +#define FX_MODE_TWINKLE_FADE 21 +#define FX_MODE_TWINKLE_FADE_RANDOM 22 +#define FX_MODE_SPARKLE 23 +#define FX_MODE_FLASH_SPARKLE 24 +#define FX_MODE_HYPER_SPARKLE 25 +#define FX_MODE_STROBE 26 +#define FX_MODE_STROBE_RAINBOW 27 +#define FX_MODE_MULTI_STROBE 28 +#define FX_MODE_BLINK_RAINBOW 29 +#define FX_MODE_CHASE_WHITE 30 +#define FX_MODE_CHASE_COLOR 31 +#define FX_MODE_CHASE_RANDOM 32 +#define FX_MODE_CHASE_RAINBOW 33 +#define FX_MODE_CHASE_FLASH 34 +#define FX_MODE_CHASE_FLASH_RANDOM 35 +#define FX_MODE_CHASE_RAINBOW_WHITE 36 +#define FX_MODE_CHASE_BLACKOUT 37 +#define FX_MODE_CHASE_BLACKOUT_RAINBOW 38 +#define FX_MODE_COLOR_SWEEP_RANDOM 39 +#define FX_MODE_RUNNING_COLOR 40 +#define FX_MODE_RUNNING_RED_BLUE 41 +#define FX_MODE_RUNNING_RANDOM 42 +#define FX_MODE_LARSON_SCANNER 43 +#define FX_MODE_COMET 44 +#define FX_MODE_FIREWORKS 45 +#define FX_MODE_FIREWORKS_RANDOM 46 +#define FX_MODE_MERRY_CHRISTMAS 47 +#define FX_MODE_FIRE_FLICKER 48 +#define FX_MODE_FIRE_FLICKER_SOFT 49 +#define FX_MODE_FIRE_FLICKER_INTENSE 50 +#define FX_MODE_CIRCUS_COMBUSTUS 51 +#define FX_MODE_HALLOWEEN 52 +#define FX_MODE_BICOLOR_CHASE 53 +#define FX_MODE_TRICOLOR_CHASE 54 +#define FX_MODE_ICU 55 +#define FX_MODE_CUSTOM 56 // keep this for backward compatiblity +#define FX_MODE_CUSTOM_0 56 // custom modes need to go at the end +#define FX_MODE_CUSTOM_1 57 +#define FX_MODE_CUSTOM_2 58 +#define FX_MODE_CUSTOM_3 59 +#define FX_MODE_CUSTOM_4 60 +#define FX_MODE_CUSTOM_5 61 +#define FX_MODE_CUSTOM_6 62 +#define FX_MODE_CUSTOM_7 63 +#define FX_MODE_CUSTOM_8 64 +#define FX_MODE_CUSTOM_9 65 + +// create GLOBAL names to allow WS2812FX to compile with sketches and other libs +// that store strings in PROGMEM (get rid of the "section type conflict with __c" +// errors once and for all. Amen.) +const char name_0[] PROGMEM = "Static"; +const char name_1[] PROGMEM = "Blink"; +const char name_2[] PROGMEM = "Breath"; +const char name_3[] PROGMEM = "Color Wipe"; +const char name_4[] PROGMEM = "Color Wipe Inverse"; +const char name_5[] PROGMEM = "Color Wipe Reverse"; +const char name_6[] PROGMEM = "Color Wipe Reverse Inverse"; +const char name_7[] PROGMEM = "Color Wipe Random"; +const char name_8[] PROGMEM = "Random Color"; +const char name_9[] PROGMEM = "Single Dynamic"; +const char name_10[] PROGMEM = "Multi Dynamic"; +const char name_11[] PROGMEM = "Rainbow"; +const char name_12[] PROGMEM = "Rainbow Cycle"; +const char name_13[] PROGMEM = "Scan"; +const char name_14[] PROGMEM = "Dual Scan"; +const char name_15[] PROGMEM = "Fade"; +const char name_16[] PROGMEM = "Theater Chase"; +const char name_17[] PROGMEM = "Theater Chase Rainbow"; +const char name_18[] PROGMEM = "Running Lights"; +const char name_19[] PROGMEM = "Twinkle"; +const char name_20[] PROGMEM = "Twinkle Random"; +const char name_21[] PROGMEM = "Twinkle Fade"; +const char name_22[] PROGMEM = "Twinkle Fade Random"; +const char name_23[] PROGMEM = "Sparkle"; +const char name_24[] PROGMEM = "Flash Sparkle"; +const char name_25[] PROGMEM = "Hyper Sparkle"; +const char name_26[] PROGMEM = "Strobe"; +const char name_27[] PROGMEM = "Strobe Rainbow"; +const char name_28[] PROGMEM = "Multi Strobe"; +const char name_29[] PROGMEM = "Blink Rainbow"; +const char name_30[] PROGMEM = "Chase White"; +const char name_31[] PROGMEM = "Chase Color"; +const char name_32[] PROGMEM = "Chase Random"; +const char name_33[] PROGMEM = "Chase Rainbow"; +const char name_34[] PROGMEM = "Chase Flash"; +const char name_35[] PROGMEM = "Chase Flash Random"; +const char name_36[] PROGMEM = "Chase Rainbow White"; +const char name_37[] PROGMEM = "Chase Blackout"; +const char name_38[] PROGMEM = "Chase Blackout Rainbow"; +const char name_39[] PROGMEM = "Color Sweep Random"; +const char name_40[] PROGMEM = "Running Color"; +const char name_41[] PROGMEM = "Running Red Blue"; +const char name_42[] PROGMEM = "Running Random"; +const char name_43[] PROGMEM = "Larson Scanner"; +const char name_44[] PROGMEM = "Comet"; +const char name_45[] PROGMEM = "Fireworks"; +const char name_46[] PROGMEM = "Fireworks Random"; +const char name_47[] PROGMEM = "Merry Christmas"; +const char name_48[] PROGMEM = "Fire Flicker"; +const char name_49[] PROGMEM = "Fire Flicker (soft)"; +const char name_50[] PROGMEM = "Fire Flicker (intense)"; +const char name_51[] PROGMEM = "Circus Combustus"; +const char name_52[] PROGMEM = "Halloween"; +const char name_53[] PROGMEM = "Bicolor Chase"; +const char name_54[] PROGMEM = "Tricolor Chase"; +const char name_55[] PROGMEM = "ICU"; +const char name_56[] PROGMEM = "Custom 0"; // custom modes need to go at the end +const char name_57[] PROGMEM = "Custom 1"; +const char name_58[] PROGMEM = "Custom 2"; +const char name_59[] PROGMEM = "Custom 3"; +const char name_60[] PROGMEM = "Custom 4"; +const char name_61[] PROGMEM = "Custom 5"; +const char name_62[] PROGMEM = "Custom 6"; +const char name_63[] PROGMEM = "Custom 7"; +const char name_64[] PROGMEM = "Custom 8"; +const char name_65[] PROGMEM = "Custom 9"; + +static const __FlashStringHelper* _names[] = { + FSH(name_0), + FSH(name_1), + FSH(name_2), + FSH(name_3), + FSH(name_4), + FSH(name_5), + FSH(name_6), + FSH(name_7), + FSH(name_8), + FSH(name_9), + FSH(name_10), + FSH(name_11), + FSH(name_12), + FSH(name_13), + FSH(name_14), + FSH(name_15), + FSH(name_16), + FSH(name_17), + FSH(name_18), + FSH(name_19), + FSH(name_20), + FSH(name_21), + FSH(name_22), + FSH(name_23), + FSH(name_24), + FSH(name_25), + FSH(name_26), + FSH(name_27), + FSH(name_28), + FSH(name_29), + FSH(name_30), + FSH(name_31), + FSH(name_32), + FSH(name_33), + FSH(name_34), + FSH(name_35), + FSH(name_36), + FSH(name_37), + FSH(name_38), + FSH(name_39), + FSH(name_40), + FSH(name_41), + FSH(name_42), + FSH(name_43), + FSH(name_44), + FSH(name_45), + FSH(name_46), + FSH(name_47), + FSH(name_48), + FSH(name_49), + FSH(name_50), + FSH(name_51), + FSH(name_52), + FSH(name_53), + FSH(name_54), + FSH(name_55), + FSH(name_56), + FSH(name_57), + FSH(name_58), + FSH(name_59), + FSH(name_60), + FSH(name_61), + FSH(name_62), + FSH(name_63), + FSH(name_64), + FSH(name_65) +}; + +class WS2812FX : public Adafruit_NeoPixel { + + public: + typedef uint16_t (WS2812FX::*mode_ptr)(void); + + // segment parameters + typedef struct Segment { // 20 bytes + uint16_t start; + uint16_t stop; + uint16_t speed; + uint8_t mode; + uint8_t options; + uint32_t colors[MAX_NUM_COLORS]; + } segment; + + // segment runtime parameters + typedef struct Segment_runtime { // 16 bytes + unsigned long next_time; + uint32_t counter_mode_step; + uint32_t counter_mode_call; + uint8_t aux_param; // auxilary param (usually stores a color_wheel index) + uint8_t aux_param2; // auxilary param (usually stores bitwise options) + uint16_t aux_param3; // auxilary param (usually stores a segment index) + } segment_runtime; + + WS2812FX(uint16_t num_leds, uint8_t pin, neoPixelType type, + uint8_t max_num_segments=MAX_NUM_SEGMENTS, + uint8_t max_num_active_segments=MAX_NUM_ACTIVE_SEGMENTS) + : Adafruit_NeoPixel(num_leds, pin, type) { + + brightness = DEFAULT_BRIGHTNESS + 1; // Adafruit_NeoPixel internally offsets brightness by 1 + _running = false; + + _segments_len = max_num_segments; + _active_segments_len = max_num_active_segments; + + // create all the segment arrays and init to zeros + _segments = new segment[_segments_len](); + _active_segments = new uint8_t[_active_segments_len](); + _segment_runtimes = new segment_runtime[_active_segments_len](); + + // init segment pointers + _seg = _segments; + _seg_rt = _segment_runtimes; + + resetSegments(); + setSegment(0, 0, num_leds - 1, DEFAULT_MODE, DEFAULT_COLOR, DEFAULT_SPEED, NO_OPTIONS); + } + + void +// timer(void), + init(void), + service(void), + start(void), + stop(void), + pause(void), + resume(void), + strip_off(void), + fade_out(void), + fade_out(uint32_t), + setMode(uint8_t m), + setMode(uint8_t seg, uint8_t m), + setOptions(uint8_t seg, uint8_t o), + setCustomMode(uint16_t (*p)()), + setCustomShow(void (*p)()), + setSpeed(uint16_t s), + setSpeed(uint8_t seg, uint16_t s), + increaseSpeed(uint8_t s), + decreaseSpeed(uint8_t s), + setColor(uint8_t r, uint8_t g, uint8_t b), + setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w), + setColor(uint32_t c), + setColor(uint8_t seg, uint32_t c), + setColors(uint8_t seg, uint32_t* c), + setBrightness(uint8_t b), + increaseBrightness(uint8_t s), + decreaseBrightness(uint8_t s), + setLength(uint16_t b), + increaseLength(uint16_t s), + decreaseLength(uint16_t s), + trigger(void), + setCycle(void), + setNumSegments(uint8_t n), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, bool reverse), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, uint8_t options), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, bool reverse), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, uint8_t options), + setIdleSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, uint8_t options), + setIdleSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, uint8_t options), + addActiveSegment(uint8_t seg), + removeActiveSegment(uint8_t seg), + swapActiveSegment(uint8_t oldSeg, uint8_t newSeg), + resetSegments(void), + resetSegmentRuntimes(void), + resetSegmentRuntime(uint8_t), + setPixelColor(uint16_t n, uint32_t c), + setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b), + setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w), + copyPixels(uint16_t d, uint16_t s, uint16_t c), + setPixels(uint16_t, uint8_t*), + show(void); + + boolean + isRunning(void), + isTriggered(void), + isFrame(void), + isFrame(uint8_t), + isCycle(void), + isCycle(uint8_t), + isActiveSegment(uint8_t seg); + + uint8_t + random8(void), + random8(uint8_t), + getMode(void), + getMode(uint8_t), + getModeCount(void), + setCustomMode(const __FlashStringHelper* name, uint16_t (*p)()), + setCustomMode(uint8_t i, const __FlashStringHelper* name, uint16_t (*p)()), + getNumSegments(void), + get_random_wheel_index(uint8_t), + getOptions(uint8_t), + getNumBytesPerPixel(void), + getSegmentIndex(void); + + uint16_t + random16(void), + random16(uint16_t), + getSpeed(void), + getSpeed(uint8_t), + getLength(void), + getNumBytes(void); + + uint32_t + color_wheel(uint8_t), + getColor(void), + getColor(uint8_t), + intensitySum(void); + + uint32_t* getColors(uint8_t); + uint32_t* intensitySums(void); + uint8_t* getActiveSegments(void); + + const __FlashStringHelper* getModeName(uint8_t m); + + WS2812FX::Segment* getSegment(void); + + WS2812FX::Segment* getSegment(uint8_t); + + WS2812FX::Segment* getSegments(void); + + WS2812FX::Segment_runtime* getSegmentRuntime(void); + + WS2812FX::Segment_runtime* getSegmentRuntime(uint8_t); + + WS2812FX::Segment_runtime* getSegmentRuntimes(void); + + // mode helper functions + uint16_t + blink(uint32_t, uint32_t, bool strobe), + color_wipe(uint32_t, uint32_t, bool), + twinkle(uint32_t, uint32_t), + twinkle_fade(uint32_t), + sparkle(uint32_t, uint32_t), + chase(uint32_t, uint32_t, uint32_t), + chase_flash(uint32_t, uint32_t), + running(uint32_t, uint32_t), + fireworks(uint32_t), + fire_flicker(int), + tricolor_chase(uint32_t, uint32_t, uint32_t), + scan(uint32_t, uint32_t, bool); + + uint32_t + color_blend(uint32_t, uint32_t, uint8_t); + + // builtin modes + uint16_t + mode_static(void), + mode_blink(void), + mode_blink_rainbow(void), + mode_strobe(void), + mode_strobe_rainbow(void), + mode_color_wipe(void), + mode_color_wipe_inv(void), + mode_color_wipe_rev(void), + mode_color_wipe_rev_inv(void), + mode_color_wipe_random(void), + mode_color_sweep_random(void), + mode_random_color(void), + mode_single_dynamic(void), + mode_multi_dynamic(void), + mode_breath(void), + mode_fade(void), + mode_scan(void), + mode_dual_scan(void), + mode_theater_chase(void), + mode_theater_chase_rainbow(void), + mode_rainbow(void), + mode_rainbow_cycle(void), + mode_running_lights(void), + mode_twinkle(void), + mode_twinkle_random(void), + mode_twinkle_fade(void), + mode_twinkle_fade_random(void), + mode_sparkle(void), + mode_flash_sparkle(void), + mode_hyper_sparkle(void), + mode_multi_strobe(void), + mode_chase_white(void), + mode_chase_color(void), + mode_chase_random(void), + mode_chase_rainbow(void), + mode_chase_flash(void), + mode_chase_flash_random(void), + mode_chase_rainbow_white(void), + mode_chase_blackout(void), + mode_chase_blackout_rainbow(void), + mode_running_color(void), + mode_running_red_blue(void), + mode_running_random(void), + mode_larson_scanner(void), + mode_comet(void), + mode_fireworks(void), + mode_fireworks_random(void), + mode_merry_christmas(void), + mode_halloween(void), + mode_fire_flicker(void), + mode_fire_flicker_soft(void), + mode_fire_flicker_intense(void), + mode_circus_combustus(void), + mode_bicolor_chase(void), + mode_tricolor_chase(void), + mode_icu(void), + mode_custom_0(void), + mode_custom_1(void), + mode_custom_2(void), + mode_custom_3(void), + mode_custom_4(void), + mode_custom_5(void), + mode_custom_6(void), + mode_custom_7(void), + mode_custom_8(void), + mode_custom_9(void); + + private: + uint16_t _rand16seed; + uint16_t (*customModes[MAX_CUSTOM_MODES])(void) { + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; } + }; + void (*customShow)(void) = NULL; + + boolean + _running, + _triggered; + + segment* _segments; // array of segments (20 bytes per element) + segment_runtime* _segment_runtimes; // array of segment runtimes (16 bytes per element) + uint8_t* _active_segments; // array of active segments (1 bytes per element) + + uint8_t _segments_len = 0; // size of _segments array + uint8_t _active_segments_len = 0; // size of _segments_runtime and _active_segments arrays + uint8_t _num_segments = 0; // number of configured segments in the _segments array + uint8_t _segment_index = 0; + + segment* _seg; // currently active segment (20 bytes) + segment_runtime* _seg_rt; // currently active segment runtime (16 bytes) + + uint16_t _seg_len; // num LEDs in the currently active segment +}; + +// define static array of member function pointers. +// function pointers MUST be in the same order as the corresponding name in the _name array. +static WS2812FX::mode_ptr _modes[MODE_COUNT] = { + &WS2812FX::mode_static, + &WS2812FX::mode_blink, + &WS2812FX::mode_breath, + &WS2812FX::mode_color_wipe, + &WS2812FX::mode_color_wipe_inv, + &WS2812FX::mode_color_wipe_rev, + &WS2812FX::mode_color_wipe_rev_inv, + &WS2812FX::mode_color_wipe_random, + &WS2812FX::mode_random_color, + &WS2812FX::mode_single_dynamic, + &WS2812FX::mode_multi_dynamic, + &WS2812FX::mode_rainbow, + &WS2812FX::mode_rainbow_cycle, + &WS2812FX::mode_scan, + &WS2812FX::mode_dual_scan, + &WS2812FX::mode_fade, + &WS2812FX::mode_theater_chase, + &WS2812FX::mode_theater_chase_rainbow, + &WS2812FX::mode_running_lights, + &WS2812FX::mode_twinkle, + &WS2812FX::mode_twinkle_random, + &WS2812FX::mode_twinkle_fade, + &WS2812FX::mode_twinkle_fade_random, + &WS2812FX::mode_sparkle, + &WS2812FX::mode_flash_sparkle, + &WS2812FX::mode_hyper_sparkle, + &WS2812FX::mode_strobe, + &WS2812FX::mode_strobe_rainbow, + &WS2812FX::mode_multi_strobe, + &WS2812FX::mode_blink_rainbow, + &WS2812FX::mode_chase_white, + &WS2812FX::mode_chase_color, + &WS2812FX::mode_chase_random, + &WS2812FX::mode_chase_rainbow, + &WS2812FX::mode_chase_flash, + &WS2812FX::mode_chase_flash_random, + &WS2812FX::mode_chase_rainbow_white, + &WS2812FX::mode_chase_blackout, + &WS2812FX::mode_chase_blackout_rainbow, + &WS2812FX::mode_color_sweep_random, + &WS2812FX::mode_running_color, + &WS2812FX::mode_running_red_blue, + &WS2812FX::mode_running_random, + &WS2812FX::mode_larson_scanner, + &WS2812FX::mode_comet, + &WS2812FX::mode_fireworks, + &WS2812FX::mode_fireworks_random, + &WS2812FX::mode_merry_christmas, + &WS2812FX::mode_fire_flicker, + &WS2812FX::mode_fire_flicker_soft, + &WS2812FX::mode_fire_flicker_intense, + &WS2812FX::mode_circus_combustus, + &WS2812FX::mode_halloween, + &WS2812FX::mode_bicolor_chase, + &WS2812FX::mode_tricolor_chase, + &WS2812FX::mode_icu, + &WS2812FX::mode_custom_0, + &WS2812FX::mode_custom_1, + &WS2812FX::mode_custom_2, + &WS2812FX::mode_custom_3, + &WS2812FX::mode_custom_4, + &WS2812FX::mode_custom_5, + &WS2812FX::mode_custom_6, + &WS2812FX::mode_custom_7, + &WS2812FX::mode_custom_8, + &WS2812FX::mode_custom_9 +}; +#endif diff --git a/Arduino/McLighting/colormodes.h b/Arduino/McLighting/colormodes.h deleted file mode 100644 index 2d73c5ea..00000000 --- a/Arduino/McLighting/colormodes.h +++ /dev/null @@ -1,99 +0,0 @@ -// *************************************************************************** -// Color modes -// *************************************************************************** - -int dipInterval = 10; -int darkTime = 250; -unsigned long currentDipTime; -unsigned long dipStartTime; -unsigned long currentMillis; -int ledState = LOW; -long previousMillis = 0; -int led = 5; -int interval = 2000; -int twitch = 50; -int dipCount = 0; -int analogLevel = 100; -boolean timeToDip = false; -int ledStates[NUMLEDS]; - - -void hsb2rgbAN1(uint16_t index, uint8_t sat, uint8_t bright, uint8_t myled) { - // Source: https://blog.adafruit.com/2012/03/14/constant-brightness-hsb-to-rgb-algorithm/ - uint8_t temp[5], n = (index >> 8) % 3; - temp[0] = temp[3] = (uint8_t)(( (sat ^ 255) * bright) / 255); - temp[1] = temp[4] = (uint8_t)((((( (index & 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); - temp[2] = (uint8_t)(((((((index & 255) ^ 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); - - strip.setPixelColor(myled, temp[n + 2], temp[n + 1], temp[n]); -} - - -void updateLed (int led, int brightness) { - ledStates[led] = brightness; - - for (int i=0; i interval) - { - previousMillis = currentMillis; - interval = random(750,4001);//Adjusts the interval for more/less frequent random light changes - twitch = random(40,100);// Twitch provides motion effect but can be a bit much if too high - dipCount = dipCount++; - } - if(currentMillis-previousMillis dipInterval) - { - DBG_OUTPUT_PORT.println("dip"); - timeToDip = true; - dipCount = 0; - dipStartTime = millis(); - darkTime = random(50,150); - dipInterval = random(5,250);// cycles of flicker - } - //strip.show(); - } - } - else - { - DBG_OUTPUT_PORT.println("Dip Time"); - currentDipTime = millis(); - if (currentDipTime - dipStartTime < darkTime) - { - for (int i=3; i + + + SPIFFS Editor + + + + + +
+
+
+ + + + diff --git a/Arduino/McLighting/data/edit.htm.gz b/Arduino/McLighting/data/edit.htm.gz index 69ce414f..03cc7007 100644 Binary files a/Arduino/McLighting/data/edit.htm.gz and b/Arduino/McLighting/data/edit.htm.gz differ diff --git a/Arduino/McLighting/data/favicon.ico b/Arduino/McLighting/data/favicon.ico index 71b25fe6..1c55beaf 100644 Binary files a/Arduino/McLighting/data/favicon.ico and b/Arduino/McLighting/data/favicon.ico differ diff --git a/Arduino/McLighting/data/favicon.ico.gz b/Arduino/McLighting/data/favicon.ico.gz new file mode 100644 index 00000000..9e0ba66b Binary files /dev/null and b/Arduino/McLighting/data/favicon.ico.gz differ diff --git a/Arduino/McLighting/data/index.htm b/Arduino/McLighting/data/index.htm index 6aa58cc3..7b1c6920 100644 --- a/Arduino/McLighting/data/index.htm +++ b/Arduino/McLighting/data/index.htm @@ -1,97 +1,2660 @@ - - - - ESP Monitor - - + - - -
- - - - -
-
-
-
- + if (post) xhr.open("POST", url, true); + else xhr.open("GET", url, true); + xhr.send(post); +} + +function getModes() { + document.getElementById("percentage").innerHTML = "0%"; + document.getElementById("percentage-done").setAttribute("stroke-dasharray", "0,100"); + document.getElementById("modal-content").innerHTML = language.en.loadModes; + xhttp("http://" + host + "/get_modes", false, function(e) { + console.log("Getting modes list via REST:", e); + if (e && e.substring(0,6) !== "ERROR!") { + modes = JSON.parse(e); + if (typeof modes[0] !== "undefined") { + modes.forEach(item => { + if (item.name && item.name.length > 0) { + data.modes.push({ title: item.name, id: item.mode }); + } + }); + } + } else { + console.error(e); + document.getElementById("percentage").innerHTML = language.en.error; + showSnackbar(language.en.loadError, "error", 5000); + } + }); + +} + +function showModes(mode, index) { + //console.log("Mode: " + mode.title + " - ID: " + mode.id + " - Hidden: " + mode.hidden); + var div = document.createElement("DIV"); + var spn = document.createElement("SPAN"); + var ico = document.createElement("I"); + var btn = document.createElement("BUTTON"); + var biv = document.createElement("DIV"); + var txt = document.createTextNode(mode.title + " (" + mode.id + ")"); + biv.appendChild(txt); + biv.className = "btn__content"; + btn.appendChild(biv); + btn.type = "button"; + btn.id = mode.id; + btn.onclick = function() { set_mode(mode.id); }; + btn.className = "elevation-6 btn"; + btn.style.backgroundColor = settings.theme_btn; + ico.className = "icon icon--link material-icons"; + ico.innerHTML = (mode.hidden === true) ? "check_box_outline_blank" : "check_box"; + ico.onclick = function() { toggle(mode, this); }; + spn.className = "hidden"; + spn.appendChild(ico); + div.appendChild(spn); + div.appendChild(btn); + div.className = "flex xs12 sm6 md4 lg3 xl2" + ((mode.hidden === true) ? " hidden" : ""); + document.getElementById("modes").appendChild(div); +} +function readSettings() { + document.getElementById("percentage").innerHTML = "33%"; + document.getElementById("percentage-done").setAttribute("stroke-dasharray", "25,100"); + document.getElementById("modal-content").innerHTML = language.en.loadSettings; + xhttp("http://" + host + "/uistate.json", false, function(e) { + console.log("Read Settings: ", e); + tmpsettings = (e && e.substring(0,6) !== "ERROR!") ? JSON.parse(e) : {}; + // Replace default settings with saved ones + for (var set in settings) { + if (!settings.hasOwnProperty(set)) continue; + if (typeof(tmpsettings[set]) !== "undefined") settings[set] = tmpsettings[set]; + } + applySettings(); + if (e && e.substring(0,6) !== "ERROR!") { + connectAdditionalNodes(); + } else { + console.warn("ERROR loading settings", e); + saveSettings(); + } + }); +} + +function applySettings() { + // Make sure language contains all the words from English translation. + if (settings.lang !== "en") { + for (var word in language.en) { + if (!language.en.hasOwnProperty(word)) continue; + //console.log(word); + if (typeof(language[settings.lang][word]) === "undefined") language[settings.lang][word] = language.en[word]; + } + } + translate(document.body); + document.title = language[settings.lang].title; + data.modes.forEach(mode => { + console.log("something"); + mode.hidden = false; + if (settings.visibility.indexOf(mode.id) > -1) { + mode.hidden = true; + //this.$set(this.modes, index, mode); + } + showModes(mode); + }); + //console.log(data.modes); +} +function saveSettings() { + var formData = new FormData(); + var blob = new Blob([JSON.stringify(settings)], {type: 'application/json'}); + formData.append('settings', blob, '/uistate.json'); + + //console.log("Sending: ", formData); + xhttp("http://" + host + "/edit", formData, function(e) { + if (e && e.substring(0,6) !== "ERROR!") { + console.log("SUCCESS saveSettings()", e, settings); + showSnackbar(language[settings.lang].saved, "success", 3000); + connectAdditionalNodes(); + data.edit_mode = false; + } else { + console.error("ERROR saveSettings()", e); + showSnackbar(language[settings.lang].savedError, "error", 5000); + } + }); +} +function toggle(mode, el) { + mode.hidden = !mode.hidden; + el.innerHTML = (mode.hidden) ? "check_box_outline_blank" : "check_box"; + var pos = settings.visibility.indexOf(mode.id); + if (!mode.hidden && pos > -1) { + settings.visibility.splice(pos, 1); + } else if (mode.hidden && pos === -1) { + settings.visibility.push(mode.id); + } + //console.log("Hidden items: " + settings.visibility); +} + +function onSelectColNum(colnum) { + data.color_num = colnum; + console.log("selected color:" + colnum); + // Show selected color number + var x = document.getElementsByClassName("color_wheel_legend"); + for (var i = 0; i < x.length; i++) { + x[i].className = x[i].className.replace(/\belevation-9\b/g, "elevation-3"); + } + x = document.getElementById("colorSel" + colnum); + x.className = x.className.replace(/\belevation-3\b/g, "elevation-9"); + // Set ColorPicker and Sliders to selected color + red.value = segstate.color["r" + (colnum > 1 ? colnum : "")]; + green.value = segstate.color["g" + (colnum > 1 ? colnum : "")]; + blue.value = segstate.color["b" + (colnum > 1 ? colnum : "")]; + white.value = segstate.color["w" + (colnum > 1 ? colnum : "")]; + initSliderColors(); + changeRangeNumVal(); + colorNumVals(); +} +function initSettings() { + // Add languages to language select + var lang = document.getElementById("language"); + for (var code in language) { + if (!language.hasOwnProperty(code)) continue; + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = language[code].lang_name; + lang.appendChild(option); + } + lang.value = settings.lang; + lang.addEventListener('change', ()=>{ + //do something here + }); + var wsmessage = document.getElementById("wsmessage"); + wsmessage.value = ""; + wsmessage.addEventListener('change', ()=>{ + ws_send(wsmessage.value); + wsmessage.value = ""; + }); + var hostname = document.getElementById("hostname"); + hostname.value = config.hostname; + hostname.addEventListener('change', ()=>{ + config.hostname = hostname.value; + ws_send("Ch" + config.hostname); + }); + var mqtt_host = document.getElementById("mqtt_host"); + mqtt_host.value = config.mqtt_host; + mqtt_host.addEventListener('change', ()=>{ + config.mqtt_host = mqtt_host.value; + ws_send("Cmh" + config.mqtt_host); + }); + var mqtt_port = document.getElementById("mqtt_port"); + mqtt_port.value = config.mqtt_port; + mqtt_port.addEventListener('change', ()=>{ + config.mqtt_port = mqtt_port.value; + ws_send("Cmp" + config.mqtt_port); + }); + var mqtt_user = document.getElementById("mqtt_user"); + mqtt_user.value = config.mqtt_user; + mqtt_user.addEventListener('change', ()=>{ + config.mqtt_user = mqtt_user.value; + ws_send("Cmu" + config.mqtt_user); + }); + var mqtt_pass = document.getElementById("mqtt_pass"); + mqtt_pass.value = config.mqtt_pass; + mqtt_pass.addEventListener('change', ()=>{ + config.mqtt_pass = mqtt_pass.value; + ws_send("Cmw" + config.mqtt_pass); + }); + var selsegment = document.getElementById("selectseg"); + for(var i = 0; i < config.ws_seg; i++) { + var option = document.createElement("OPTION"); + option.setAttribute("value", i); + option.innerHTML = i; + selsegment.appendChild(option); + } + selsegment.value = state.segment; + selsegment.addEventListener('change', ()=>{ + state.segment = selsegment.value; + ws_send("Ss" + state.segment); + }); + var num_segments = document.getElementById("selectsegcnt"); + num_segments.value = config.ws_seg; + num_segments.addEventListener('change', ()=>{ + config.ws_seg = num_segments.value; + ws_send("Css" + config.ws_seg); + while (selsegment.firstChild) { + selsegment.removeChild(selsegment.firstChild); + } + for(var i = 0; i < config.ws_seg; i++) { + var option = document.createElement("OPTION"); + option.setAttribute("value", i); + option.innerHTML = i; + selsegment.appendChild(option); + } + selsegment.value = state.segment; + }); + var pin = document.getElementById("selectpin"); + pin.value = config.ws_pin; + pin.addEventListener('change', ()=>{ + config.ws_pin = pin.value; + ws_send("Csp" + config.ws_pin); + }); + var rgbo = document.getElementById("selectrgbo"); + for (var code in selectrgbo) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectrgbo[code]; + rgbo.appendChild(option); + } + rgbo.value = config.ws_rgbo; + rgbo.addEventListener('change', ()=>{ + config.ws_rgbo = rgbo.value; + ws_send("Csr" + config.ws_rgbo); + }); + var start = document.getElementById("segstart"); + start.setAttribute("max",config.ws_cnt-1); + start.value = segstate.start; + start.addEventListener('change', ()=>{ + segstate.start = start.value; + ws_send("S[" + segstate.start); + }); + var stop = document.getElementById("segstop"); + stop.setAttribute("max",config.ws_cnt-1); + stop.value = segstate.stop; + stop.addEventListener('change', ()=>{ + segstate.stop = stop.value; + ws_send("S]" + segstate.stop); + }); + var count = document.getElementById("selectcount"); + count.value = config.ws_cnt; + count.addEventListener('change', ()=>{ + config.ws_cnt = count.value; + ws_send("Csc" + config.ws_cnt); + start.setAttribute("max",config.ws_cnt-1); + stop.setAttribute("max",config.ws_cnt-1); + }); + var optrev = document.getElementById("selectoptrev"); + for (var code in selectoptrev) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptrev[code]; + optrev.appendChild(option); + } + optrev.value = (segstate.ws_fxopt & 128); + optrev.addEventListener('change', ()=>{ + segstate.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("So" + segstate.ws_fxopt); + }); + var optfade = document.getElementById("selectoptfade"); + for (var code in selectoptfade) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptfade[code]; + optfade.appendChild(option); + } + optfade.value = (segstate.ws_fxopt & 112); + optfade.addEventListener('change', ()=>{ + segstate.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("So" + segstate.ws_fxopt); + }); + var optgamma = document.getElementById("selectoptgamma"); + for (var code in selectoptgamma) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptgamma[code]; + optgamma.appendChild(option); + } + optgamma.value = (segstate.ws_fxopt & 8); + optgamma.addEventListener('change', ()=>{ + segstate.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("So" + segstate.ws_fxopt); + }); + var optsize = document.getElementById("selectoptsize"); + for (var code in selectoptsize) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptsize[code]; + optsize.appendChild(option); + } + optsize.value = (segstate.ws_fxopt & 6) + optsize.addEventListener('change', ()=>{ + segstate.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("So" + segstate.ws_fxopt); + }); + slavenodes.value = settings.slave_nodes; + lang.addEventListener('change', ()=>{ + settings.lang = lang.options[lang.selectedIndex].value; + }); + var picker = document.getElementById("pickerstyle"); + picker.checked = (settings.picker_type === "circle"); + redrawColorPicker(); // Redraw colorpicker to saved settings + picker.addEventListener('change', ()=>{ + settings.picker_type = (picker.checked) ? "circle" : "wheel"; + redrawColorPicker(); + }); + var settransitionEffects = document.getElementById("set-transitionEffects"); + settransitionEffects.checked = config.ws_trans; + settransitionEffects.addEventListener('change', ()=>{ + config.ws_trans = settransitionEffects.checked; + if (settransitionEffects.checked) { + document.getElementById("settransitionEffectsbgcolor").style.backgroundColor = settings.theme_btn; + ws_send("Ce1"); + } else { + document.getElementById("settransitionEffectsbgcolor").style.backgroundColor = ""; + ws_send("Ce0"); + } + }); + var colmain = document.getElementById("color-main"); + colmain.value = settings.theme_color; + colmain.addEventListener('change', ()=>{ + settings.theme_color = colmain.value; + var hexcolor = settings.theme_color; + var yiq = ((parseInt(hexcolor.substr(1,2),16)*299)+(parseInt(hexcolor.substr(3,2),16)*587)+(parseInt(hexcolor.substr(5,2),16)*114))/1000; + document.getElementById("toolbar").style.backgroundColor = settings.theme_color; + document.getElementById("footer").style.backgroundColor = settings.theme_color; + document.getElementById("toolbar").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("footer").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("footer-link").style.color = (yiq >= 125) ? '#111' : '#EEE'; + }); + var colfont = document.getElementById("color-font"); + colfont.value = settings.theme_font; + colfont.addEventListener('change', ()=>{ + settings.theme_font = colfont.value; + document.getElementById("modes").style.color = settings.theme_font; + }); + var colback = document.getElementById("color-back"); + colback.value = settings.theme_back; + colback.addEventListener('change', ()=>{ + settings.theme_back = colback.value; + document.getElementById("container").style.backgroundColor = settings.theme_back; + document.getElementById("language").style.backgroundColor = settings.theme_back; + document.getElementById("selectseg").style.backgroundColor = settings.theme_back; + document.getElementById("selectrgbo").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptrev").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptfade").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptgamma").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptsize").style.backgroundColor = settings.theme_back; + // Set text/icon color depending on background darkness + var hexcolor = settings.theme_back; + var yiq = ((parseInt(hexcolor.substr(1,2),16)*299)+(parseInt(hexcolor.substr(3,2),16)*587)+(parseInt(hexcolor.substr(5,2),16)*114))/1000; + var icons = document.getElementsByClassName("icon--link"); + for (var i = 0; i < icons.length; i++) { + icons[i].style.color = (yiq >= 125) ? '#222' : '#EEE'; + } + document.getElementById("selectSegLbl").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("wsmessageLbl").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("redNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("greenNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("blueNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("whiteNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("brightNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("speedNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("settings").style.color = (yiq >= 125) ? '#111' : '#EEE'; + }); + var colbtn = document.getElementById("color-btn"); + colbtn.value = settings.theme_btn; + colbtn.addEventListener('change', ()=>{ + settings.theme_btn = colbtn.value; + document.getElementById("settings-save").style.backgroundColor = settings.theme_btn; + document.getElementById("pickerbgcolor").style.backgroundColor = settings.theme_btn; + if (settransitionEffects.checked) document.getElementById("settransitionEffectsbgcolor").style.backgroundColor = settings.theme_btn; + select_active_button(); + }); + var colbtns = document.getElementById("color-btnsel"); + colbtns.value = settings.theme_btnsel; + colbtns.addEventListener('change', ()=>{ + settings.theme_btnsel = colbtns.value; + select_active_button(); + }); + // Set interface colors + var event = new Event('change'); + colmain.dispatchEvent(event); + colfont.dispatchEvent(event); + colback.dispatchEvent(event); + + document.getElementById("settings-open").addEventListener('click', ()=>{ + var icons = document.getElementsByClassName("icon--link"); + var set = document.getElementById("settings"); + var arr = set.className.split(" "); + if (arr.indexOf("hidden") === -1) { + set.className += " hidden"; + // hide checkboxes and disabled buttons + data.modes.map(mode => { + if (mode.hidden) { + document.getElementById(mode.id).parentNode.className += " hidden"; + } + }); + for (var i = 0; i < icons.length; i++) { + icons[i].parentNode.className += "hidden"; + } + } else { + set.className = set.className.replace(/\b hidden\b/g, ""); + // show checkboxes and all buttons + data.modes.map(mode => { + if (mode.hidden) { + var parent = document.getElementById(mode.id).parentNode; + parent.className = parent.className.replace(/\b hidden\b/g, ""); + } + }); + for (var i = 0; i < icons.length; i++) { + icons[i].parentNode.className = icons[i].parentNode.className.replace(/\bhidden\b/g, ""); + } + } + }); + document.getElementById("settings-save").addEventListener('click', ()=>{ + settings.slave_nodes = document.getElementById("slavenodes").value; + saveSettings(); + var icons = document.getElementsByClassName("icon--link"); + data.modes.map(mode => { + if (mode.hidden) { + document.getElementById(mode.id).parentNode.className += " hidden"; + } + }); + for (var i = 0; i < icons.length; i++) { + icons[i].parentNode.className += " hidden"; + } + + + document.getElementById("settings").className += " hidden"; + }); +} + +function showSnackbar(msg, why, time) { + var x = document.getElementById("snackbar"); + x.innerHTML = msg; + x.style.backgroundColor = (why === "error") ? "#ad2727" : "#4caf50"; + // Animation is timed with classname (3000, 5000 or 15000) + x.className = "show" + time; + setTimeout(function(){ x.className = x.className.replace("show" + time, ""); }, time); +} + +/* WebSocket code */ +let ws_options = { + connectionTimeout: 1000, + maxRetries: 2, + reconnectionDelayGrowFactor: 2, + debug: true +}; +function disconnectAllAdditionalNodes() { + // Close potentially open connections + data.additional_connections.forEach((conn) => { + conn.close(1000, "Manually closed::disconnectAllAdditionalNode()", {keepClosed: true}); + }); + data.additional_connections = []; + data.num_additional_connections = 0; + var con = document.getElementById("additional-con"); + var arr = con.className.split(" "); + if (arr.indexOf("hidden") === -1) { + con.className += " hidden"; + } +} +function connectAdditionalNodes() { + disconnectAllAdditionalNodes(); + + // Connect to the configured nodes + let nodes = settings.slave_nodes.split(";"); + nodes.forEach((host) => { + host = host.trim(); + if (host !== "") { + let conn = new ReconnectingWebSocket("ws://" + host + ":81", "arduino", ws_options); + console.log("Connecting to additional node", host); + data.additional_connections.push(conn); + + conn.onopen = () => { + console.log("Connected to additional node", host); + data.num_additional_connections++; + var con = document.getElementById("additional-con"); + con.className = con.className = ""; + con.innerHTML = "+" + data.num_additional_connections; + }; + conn.onclose = () => { + console.log("Disconnected to additional node", host); + data.num_additional_connections--; + var con = document.getElementById("additional-con"); + con.innerHTML = "+" + data.num_additional_connections; + if (data.num_additional_connections <= 1) { + con.className = "hidden"; + } + }; + conn.onerror = () => { + console.log("Error on additional node", host); + }; + } + }); +} +function ws_reconnect() { + //data.connection.reconnect(); + ws_connect(); + var con = document.getElementById("connection-failed"); + con.className = "hidden"; +} + +function ws_connect() { + data.connection = new ReconnectingWebSocket(ws_url, "arduino", ws_options); + document.getElementById("percentage").innerHTML = "66%"; + document.getElementById("percentage-done").setAttribute("stroke-dasharray", "75,100"); + document.getElementById("modal-content").innerHTML = language[settings.lang].loadWebsock; + + // When the connection is open, send some data to the server + data.connection.onopen = function() { + console.log("WebSocket open"); + data.is_connected = true; + var con = document.getElementById("disconnected"); + con.className = "hidden"; + con = document.getElementById("connected"); + con.className = con.className = ""; + document.getElementById("percentage").innerHTML = "100%"; + document.getElementById("percentage-done").setAttribute("stroke-dasharray", "100,100"); + document.getElementById("modal-content").innerHTML = language[settings.lang].loadReady; + }; + + // When the connection is open, send some data to the server + data.connection.onclose = function() { + console.log("WebSocket closed"); + data.is_connected = false; + clearInterval(data.refresh_interval); + }; + + // Log errors + data.connection.onerror = function(error) { + console.error("WebSocket error", error); + data.is_connected = false; + if (data.connection.retryCount >= ws_options.maxRetries) { + var con = document.getElementById("disconnected"); + con.className = ""; + con = document.getElementById("connected"); + con.className = con.className = "hidden"; + var con = document.getElementById("connection-failed"); + con.className = con.className = ""; + showSnackbar(language[settings.lang].connectError1 + ws_options.maxRetries + language[settings.lang].connectError2, "error", 15000); + } + }; + + // Log messages from the server + data.connection.onmessage = function(e) { + console.log("WebSocket from server: ", e.data); + console.log("data.init: ", data.init); + try { + var res = JSON.parse(e.data); +// document.getElementById('modal').style.display = "none"; + // console.log("res", res); + if (res) { + if (typeof res.segment !== "undefined") { state.segment= res.segment; document.getElementById("selectseg").value = state.segment; } + if (typeof res.mode !== "undefined") { state.mode = res.mode; } + if (typeof res.brightness !== "undefined") { + state.brightness = res.brightness; + // init ColorSliderVals + bright.value = res.brightness; + } + // Segment Status starts here + if (typeof res.start !== "undefined") { segstate.start= res.start; document.getElementById("segstart").value = segstate.start; } + if (typeof res.stop !== "undefined") { segstate.stop = res.stop; document.getElementById("segstop").value = segstate.stop; } + if (typeof res.fx_mode !== "undefined") { segstate.mode = res.fx_mode; } + if (typeof res.speed !== "undefined") { + segstate.speed = res.speed; + // init SliderVals + speed.value = res.speed; + } + if (typeof res.color !== "undefined") { + segstate.color.w = res.color[0]; + segstate.color.r = res.color[1]; + segstate.color.g = res.color[2]; + segstate.color.b = res.color[3]; + segstate.color.hex = rgbToHex([res.color[0], res.color[1], res.color[2], res.color[3]]); + segstate.color.w2 = res.color[4]; + segstate.color.r2 = res.color[5]; + segstate.color.g2 = res.color[6]; + segstate.color.b2 = res.color[7]; + segstate.color.hex2 = rgbToHex([res.color[4], res.color[5], res.color[6], res.color[7]]); + segstate.color.w3 = res.color[8]; + segstate.color.r3 = res.color[9]; + segstate.color.g3 = res.color[10]; + segstate.color.b3 = res.color[11]; + segstate.color.hex3 = rgbToHex([res.color[8], res.color[9], res.color[10], res.color[11]]); + // init ColorSliderVals + if (data.color_num === 1) { + red.value = segstate.color.r; + green.value = segstate.color.g; + blue.value = segstate.color.b; + white.value = segstate.color.w; + } + if (data.color_num === 2) { + red.value = segstate.color.r2; + green.value = segstate.color.g2; + blue.value = segstate.color.b2; + white.value = segstate.color.w2; + } + if (data.color_num === 3) { + red.value = segstate.color.r3; + green.value = segstate.color.g3; + blue.value = segstate.color.b3; + white.value = segstate.color.w3; + } + } + // Config starts here + if (typeof res.hostname !== "undefined") { config.hostname = res.hostname; document.getElementById("hostname").value = config.hostname; } + if (typeof res.mqtt_host !== "undefined") { config.mqtt_host = res.mqtt_host; document.getElementById("mqtt_host").value = config.mqtt_host; } + if (typeof res.mqtt_port !== "undefined") { config.mqtt_port = res.mqtt_port; document.getElementById("mqtt_port").value = config.mqtt_port; } + if (typeof res.mqtt_user !== "undefined") { config.mqtt_user = res.mqtt_user; document.getElementById("mqtt_user").value = config.mqtt_user; } + if (typeof res.mqtt_pass !== "undefined") { config.mqtt_pass = res.mqtt_pass; document.getElementById("mqtt_pass").value = config.mqtt_pass; } + if (typeof res.ws_seg !== "undefined") { config.ws_seg = res.ws_seg; document.getElementById("selectsegcnt").value = config.ws_seg; } + if (typeof res.ws_cnt !== "undefined") { config.ws_cnt = res.ws_cnt; document.getElementById("selectcount").value = config.ws_cnt; } + if (typeof res.ws_rgbo !== "undefined") { + config.ws_rgbo = res.ws_rgbo; + document.getElementById("selectrgbo").value = config.ws_rgbo; + config.enable_rgbw = config.ws_rgbo.includes("W"); + if (config.enable_rgbw) { + document.getElementById("white").parentNode.className = ""; + } else { + document.getElementById("white").parentNode.className = "hidden"; + white.value = 0; + segstate.color.w = 0; + segstate.color.w2 = 0; + segstate.color.w3 = 0; + } + + } + if (typeof res.ws_pin !== "undefined") { config.ws_pin = res.ws_pin; document.getElementById("selectpin").value = config.ws_pin; } + if (typeof res.ws_trans !== "undefined") { config.ws_trans = res.ws_trans; document.getElementById("set-transitionEffects").value = config.ws_trans; } + if (typeof res.ws_fxopt !== "undefined") { + segstate.ws_fxopt = res.ws_fxopt; + document.getElementById("selectoptrev").value = (segstate.ws_fxopt & 128); + document.getElementById("selectoptfade").value = (segstate.ws_fxopt & 112); + document.getElementById("selectoptgamma").value = (segstate.ws_fxopt & 8); + document.getElementById("selectoptsize").value = (segstate.ws_fxopt & 6); + } + // Modes starts here + if (typeof res[0] !== "undefined") { + res.forEach(item => { + if (item.name && item.name.length > 0) { + data.modes.push({ title: item.name, id: item.mode }); + } + }); + } + // init Color Vals + colorNumVals(); + initSliderColors(); + // init Change Range Val + changeRangeNumVal(); + // init Colors controls + // init display Colors + displayColors(true); + console.log("displayColors finished!"); + select_active_button(); + console.log("select_active_button finished!"); + } + if (data.init == true) { + console.log("Initializing..."); + // Set selected mode button + //document.getElementById(segstate.mode).style.backgroundColor = settings.theme_btnsel; + // Close Loading Modal + setTimeout(() => { + document.getElementById('modal').style.display = "none"; + document.getElementById('container').style.display = ""; + }, 50); + initSettings(); + initcolorSliders(); + data.init = false; + data.refresh_interval = setInterval(() => ws_send("$"), 10000); + } + } catch (e) {} + }; +} + +function ws_send(message) { + console.log("WS send: ", message); + data.connection.send(message); + if ((message!="$") && (message!="~") + && (message!="C") && (message.indexOf("Ch") == -1) && (message.indexOf("Csc") == -1) && (message.indexOf("Csp") == -1) && (message.indexOf("Csr") == -1) + && (message.indexOf("S[") == -1) && (message.indexOf("S]") == -1)) { + data.additional_connections.forEach((conn) => { + console.log("WS send additional to: ", conn.url); + conn.send(message); + }); + } +} +function disable_color_selection(status) { + data.color_disabled = status; + document.getElementById("red").disabled = status; + document.getElementById("redNum").disabled = status; + document.getElementById("red").disabled = status; + document.getElementById("green").disabled = status; + document.getElementById("greenNum").disabled = status; + document.getElementById("blue").disabled = status; + document.getElementById("blueNum").disabled = status; + document.getElementById("white").disabled = status; + document.getElementById("whiteNum").disabled = status; + if (status) { + } +} + +function select_active_button() { + btns = document.getElementsByClassName("btn"); + for (i = 0; i < btns.length; i++) { + btns[i].style.backgroundColor = settings.theme_btn; + } + if (state.mode != 1 || (state.mode == 1 && segstate.mode != 57)) { // CUSTOM WS MODE + wsmess = document.getElementById("message"); + var arr = wsmess.className.split(" "); + if (arr.indexOf("hidden") === -1) { + wsmess.className += " hidden"; + } + segments = document.getElementById("segments"); + segments.className = segments.className.replace(/\b hidden\b/g, ""); + } + if (state.mode >= 1) { + document.getElementById(segstate.mode).style.backgroundColor = settings.theme_btnsel; + document.getElementById("on").style.backgroundColor = settings.theme_btnsel; + if (segstate.mode == 56) { // AUTOPLAY + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(true); + } else if (segstate.mode == 57) { //CUSTOM_WS + wsmess = document.getElementById("message"); + wsmess.className = wsmess.className.replace(/\b hidden\b/g, ""); + sements = document.getElementById("segments"); + var arr = segments.className.split(" "); + if (arr.indexOf("hidden") === -1) { + segments.className += " hidden"; + } + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(true); + } else if (segstate.mode == 58) { //TV + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(false); + } else if (segstate.mode == 59) { //E1.31 + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(true); + } else if (segstate.mode == 60) { //Fire2012 + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(false); + } else { + disable_modebuttons(false); + disable_color_selection(false); + disable_bright_selection(false); + disable_speed_selection(false); + } + } else if (state.mode == 0) { + document.getElementById("off").style.backgroundColor = settings.theme_btnsel; + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(true); + disable_speed_selection(true); + } +} + +function disable_bright_selection(status) { + document.getElementById("bright").disabled = status; + document.getElementById("brightNum").disabled = status; +} + +function disable_speed_selection(status) { + document.getElementById("speed").disabled = status; + document.getElementById("speedNum").disabled = status; +} + +function disable_modebuttons(status) { + data.modes.forEach(mode => { + //if (settings.visibility.indexOf(mode.id) > -1) { + document.getElementById(mode.id).disabled = status; + }); +} + +function set_mode(mode_id) { + if (Number.isInteger(mode_id)) { + state.mode = 1; + segstate.mode = mode_id; + } else { + // For named modes + if (mode_id == "off") { + state.mode = 0; + } + } + select_active_button(); + ws_send("/" + mode_id); + ws_send("$"); +} +function set_speed() { + ws_send("?" + segstate.speed); +} +function set_brightness() { + ws_send("%" + state.brightness); +} +function set_color() { + if (data.color_num === 1) { + ws_send("#" + rgbToHex([segstate.color.w, segstate.color.r, segstate.color.g, segstate.color.b])); + } + if (data.color_num === 2) { + ws_send("##" + rgbToHex([segstate.color.w2, segstate.color.r2, segstate.color.g2, segstate.color.b2])); + } + if (data.color_num === 3) { + ws_send("###" + rgbToHex([segstate.color.w3, segstate.color.r3, segstate.color.g3, segstate.color.b3])); + } +} + +/* ColorPicker Code */ +var canvas = document.getElementById('color_wheel_canvas'); +var context = canvas.getContext('2d'); + +function componentToHex(c) { + return ("0" + Number(c).toString(16)).slice(-2).toUpperCase(); +} + +function rgbToHex(rgb) { + return (componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]) + componentToHex(rgb[3])); +} + +function onSelectColor(event) { + if (!data.color_disabled) { + var pos; + event.preventDefault(); + + if (event.type === "touchmove") { + var el = event.target; + pos = { + x: Math.round(event.targetTouches[0].pageX - el.offsetLeft), + y: Math.round(event.targetTouches[0].pageY - el.offsetTop) + }; + } + if (event.type === "click") { + pos = { + x: Math.round(event.offsetX), + y: Math.round(event.offsetY) + }; + } + + var color = context.getImageData(pos.x, pos.y, 1, 1).data; + var hex_color = rgbToHex(color); + var colnum = (data.color_num === 1) ? "" : data.color_num; + segstate.color["hex" + colnum] = hex_color; + segstate.color["r" + colnum] = color[0]; + segstate.color["g" + colnum] = color[1]; + segstate.color["b" + colnum] = color[2]; + segstate.color["w" + colnum] = 0; + red.value = color[0]; + green.value = color[1]; + blue.value = color[2]; + white.value = 0; + displayColors(); + initSliderColors(); + changeRangeNumVal(); + colorNumVals(); +} +} +function redrawColorPicker() { + if (context) { + context.clearRect(0, 0, canvas.width, canvas.height); + } + + if (settings.picker_type === "circle") { + drawCircle(); + } else { + drawWheel(); + } +} + + /** + * Draws color ring + */ +function drawWheel() { + var centerX = canvas.width / 2; + var centerY = canvas.height / 2; + // console.log(centerX, centerY, canvas.width, canvas.height); + var innerRadius = canvas.width / 4.5; + var outerRadius = (canvas.width - 10) / 2; + // outer border + context.beginPath(); + // outer circle + context.arc(centerX, centerY, outerRadius, 0, 2 * Math.PI, false); + // draw the outer border: (gets drawn around the circle!) + context.lineWidth = 4; + context.strokeStyle = "#000000"; + context.stroke(); + context.closePath(); + + // fill with beautiful colors + // taken from here: http://stackoverflow.com/questions/18265804/building-a-color-wheel-in-html5 + for (var angle = 0; angle <= 360; angle += 1) { + var startAngle = (angle - 2) * Math.PI / 180; + var endAngle = angle * Math.PI / 180; + context.beginPath(); + context.moveTo(centerX, centerY); + context.arc( + centerX, + centerY, + outerRadius, + startAngle, + endAngle, + false + ); + context.closePath(); + context.fillStyle = "hsl(" + angle + ", 100%, 50%)"; + context.fill(); + context.closePath(); + } + + // inner border + context.beginPath(); + // this.context.arc(centerX, centerY, radius, startAngle, endAngle, counterClockwise); + context.arc(centerX, centerY, innerRadius, 0, 2 * Math.PI, false); + // fill the center + var my_gradient = context.createLinearGradient(0, 0, 170, 0); + my_gradient.addColorStop(0, "black"); + my_gradient.addColorStop(1, "white"); + + context.fillStyle = my_gradient; + context.fillStyle = "white"; + context.fill(); + + // draw the inner line + context.lineWidth = 2; + context.strokeStyle = "#000000"; + context.stroke(); + context.closePath(); +} + + /** + * Draws color circle + */ +function drawCircle() { + let radius = canvas.width / 2; + let image = context.createImageData(2 * radius, 2 * radius); + let idata = image.data; + + for (let x = -radius; x < radius; x++) { + for (let y = -radius; y < radius; y++) { + let [r, phi] = xy2polar(x, y); + + if (r > radius) { + // skip all (x,y) coordinates that are outside of the circle + continue; + } + + let deg = rad2deg(phi); + + // Figure out the starting index of this pixel in the image data array. + let rowLength = 2 * radius; + let adjustedX = x + radius; // convert x from [-50, 50] to [0, 100] (the coordinates of the image data array) + let adjustedY = y + radius; // convert y from [-50, 50] to [0, 100] (the coordinates of the image data array) + let pixelWidth = 4; // each pixel requires 4 slots in the data array + let index = (adjustedX + (adjustedY * rowLength)) * pixelWidth; + + let hue = deg; + let saturation = r / radius; + let value = 1.0; + + let [red, green, blue] = hsv2rgb(hue, saturation, value); + let alpha = 255; + + idata[index] = red; + idata[index + 1] = green; + idata[index + 2] = blue; + idata[index + 3] = alpha; + } + } + this.context.putImageData(image, 0, 0); +} +function xy2polar(x, y) { + let r = Math.sqrt(x * x + y * y); + let phi = Math.atan2(y, x); + return [r, phi]; +} +function rad2deg(rad) { + // rad in [-π, π] range + // return degree in [0, 360] range + return ((rad + Math.PI) / (2 * Math.PI)) * 360; +} +function hsv2rgb(hue, saturation, value) { + let chroma = value * saturation; + let hue1 = hue / 60; + let x = chroma * (1 - Math.abs((hue1 % 2) - 1)); + let r1, g1, b1; + + if (hue1 >= 0 && hue1 <= 1) { + ([r1, g1, b1] = [chroma, x, 0]); + } else if (hue1 >= 1 && hue1 <= 2) { + ([r1, g1, b1] = [x, chroma, 0]); + } else if (hue1 >= 2 && hue1 <= 3) { + ([r1, g1, b1] = [0, chroma, x]); + } else if (hue1 >= 3 && hue1 <= 4) { + ([r1, g1, b1] = [0, x, chroma]); + } else if (hue1 >= 4 && hue1 <= 5) { + ([r1, g1, b1] = [x, 0, chroma]); + } else if (hue1 >= 5 && hue1 <= 6) { + ([r1, g1, b1] = [chroma, 0, x]); + } + + let m = value - chroma; + let [r, g, b] = [r1 + m, g1 + m, b1 + m]; + + // Change r,g,b values from [0,1] to [0,255] + return [255 * r, 255 * g, 255 * b]; +} + +function translate(node) { + if (node.nodeType === 3 && node.data in language.en) { + node.data = language[settings.lang][node.data]; + } + if (node.nodeType === 1 && node.nodeName !== "SCRIPT") { + for (var i = 0; i < node.childNodes.length; i++) { + translate(node.childNodes[i]); + } + } +} +document.addEventListener("DOMContentLoaded", function(event) { + // Code to run since DOM is loaded and ready + getModes(); + setTimeout(function() { + readSettings(); + }, 500); + setTimeout(function() { + ws_connect(); + ws_send("$"); + canvas.width = 400; + canvas.height = 400; + redrawColorPicker(); + }, 1000); +}); + + \ No newline at end of file diff --git a/Arduino/McLighting/data/index.htm.gz b/Arduino/McLighting/data/index.htm.gz new file mode 100644 index 00000000..c777c419 Binary files /dev/null and b/Arduino/McLighting/data/index.htm.gz differ diff --git a/Arduino/McLighting/data/material.woff2 b/Arduino/McLighting/data/material.woff2 new file mode 100644 index 00000000..d9c6038f Binary files /dev/null and b/Arduino/McLighting/data/material.woff2 differ diff --git a/Arduino/McLighting/definitions.h b/Arduino/McLighting/definitions.h index 2309066d..cf82f8f0 100644 --- a/Arduino/McLighting/definitions.h +++ b/Arduino/McLighting/definitions.h @@ -1,37 +1,145 @@ +#define USE_WS2812FX_DMA 0 // 0 = Used PIN is ignored & set to RX/GPIO3; 1 = Used PIN is ignored & set to TX/GPIO1; 2 = Used PIN is ignored & set to D4/GPIO2; Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX + // or comment it out +#if defined(USE_WS2812FX_DMA) + #define MAXLEDS 384 // due to memory limit of esp8266 at the moment only 384 leds are supported in DMA Mode. More can crash if mqtt is used. +#else + #define MAXLEDS 4096 +#endif // Neopixel -#define PIN 5 // PIN (5 / D1) where neopixel / WS2811 strip is attached -#define NUMLEDS 24 // Number of leds in the strip -//#define BUILTIN_LED 2 // ESP-12F has the built in LED on GPIO2, see https://github.com/esp8266/Arduino/issues/2192 -#define BUTTON 4 // Input pin (4 / D2) for switching the LED strip on / off, connect this PIN to ground to trigger button. +#define LED_PIN 3 // PIN (15 / D8) where neopixel / WS2811 strip is attached; is configurable, if USE_WS2812FX_DMA is not defined. Just for the start +#define NUMLEDS 50 // Number of leds in the; is configurable just for the start +#define RGBORDER "GRBW" // RGBOrder; is configurable just for the start +#define FX_OPTIONS 48 // ws2812fx Options 48 = SIZE_SMALL + FADE_MEDIUM is configurable just for the start; for WS2812FX setSegment OPTIONS, see: https://github.com/kitesurfer1404/WS2812FX/blob/master/extras/WS2812FX%20Users%20Guide.md +//#define LED_TYPE_WS2811 // Uncomment, if LED type uses 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) +#define LED_BUILTIN 2 // ESP-12F has the built in LED on GPIO2, see https://github.com/esp8266/Arduino/issues/2192 +char HOSTNAME[65] = "McLightingRGBW"; // Friedly hostname is configurable just for the start. Hostname should not contain spaces as this can break Home Assistant discovery if used. + +#define ENABLE_OTA 1 // If defined, enable Arduino OTA code. If set to 0 enable Arduino OTA code, if set to 1 enable ESP8266HTTPUpdateServer OTA code. +#define ENABLE_MQTT 1 // If defined use MQTT OR AMQTT, if set to 0 enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API, if set to 1, enable Async MQTT code, see: https://github.com/marvinroger/async-mqtt-client +//#define ENABLE_MQTT_HOSTNAME_CHIPID // Uncomment/comment to add ESPChipID to end of MQTT hostname +//#define ENABLE_MQTT_INCLUDE_IP // uncomment/comment to add the IP-adress to the MQTT message +#define ENABLE_HOMEASSISTANT // If defined, enable Homeassistant integration, ENABLE_MQTT must be active +#define MQTT_HOMEASSISTANT_SUPPORT // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth +#define DELAY_MQTT_HA_MESSAGE 5 // HA Status is send after DELAY_MQTT_HA_MESSAGE seconds, to save bandwith + +//#define ENABLE_BUTTON 14 // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control, the value defines the input pin (14 / D5) for switching the LED strip on / off, connect this PIN to ground to trigger button. +//#define ENABLE_BUTTON_GY33 12 // If defined, enable button handling code for GY-33 color sensor to scan color. The value defines the input pin (12 / D6) for read color data with RGB sensor, connect this PIN to ground to trigger button. +//#define POWER_SUPPLY 12 // PIN (12 / D6) If defined, enable output to control external power supply +#if defined(POWER_SUPPLY) + #define POWER_ON HIGH // Define the output state to turn on the power supply, either HIGH or LOW. Opposite will be uses for power off. +#endif +#define ENABLE_REMOTE 13 // If defined, enable Remote Control via TSOP31238. The value defines the input pin (13 / D7) for TSOP31238 Out + +#if defined(ENABLE_BUTTON_GY33) + #define GAMMA 2.5 // Gamma correction for GY-33 sensor +#endif + +#define ENABLE_STATE_SAVE // If defined, load saved state on reboot and save state on SPIFFS + +#define CUSTOM_WS2812FX_ANIMATIONS // uncomment and put animations in "custom_ws2812fx_animations.h" +#define USE_HTML_MIN_GZ // uncomment for using index.htm & edit.htm from PROGMEM instead of SPIFFS + +#define TRANS_COLOR_DELAY 5 // Delay for color transition +#define TRANS_DELAY 10 // Delay for brightness and speed transition + + // Experimental: Enable transitions of color, brightness and speed. It does not work properly for all effects. +bool transEffectOverride = false; +uint8_t trans_cnt = 0; +int trans_cnt_max = 0; +unsigned long colorFadeDelay = 0; +unsigned long brightnessFadeDelay = 0; +unsigned long speedFadeDelay = 0; + +#if defined(CUSTOM_WS2812FX_ANIMATIONS) + #define MULTICAST false + #define START_UNIVERSE 1 // First DMX Universe to listen for + uint8_t END_UNIVERSE = START_UNIVERSE; // Total number of Universes to listen for, starting at UNIVERSE + +#endif +uint8_t prevsegment = 0; + +#if defined(ENABLE_REMOTE) + uint8_t selected_color = 1; + uint64_t last_remote_cmd; + enum RMT_BTN {ON_OFF, MODE_UP, MODE_DOWN, RED_UP, RED_DOWN, GREEN_UP, GREEN_DOWN, BLUE_UP, BLUE_DOWN, WHITE_UP, WHITE_DOWN, BRIGHTNESS_UP, BRIGHTNESS_DOWN, SPEED_UP, SPEED_DOWN, COL_M, COL_B, COL_X, AUTOMODE, CUST_1, CUST_2, CUST_3, SEG_UP, SEG_DOWN, REPEATCMD, BTN_CNT}; + // Change your IR Commands here. You can see them in console, after you pressed a button on the remote + uint64_t rmt_commands[BTN_CNT] = {0xF7C03F, 0xF7708F, 0xF7F00F, 0xF720DF, 0xF710EF, 0xF7A05F, 0xF7906F, 0xF7609F, 0xF750AF, 0xF7E01F, 0xF7D02F, 0xF730CF, 0xF7B04F, 0xF748B7, 0xF7C837, 0xF700FF, 0xF7807F, 0xF740BF, 0xF708F7, 0xF78877, 0xF728D7, 0xF7A857, 0xF76897, 0xF7E817, 0xFFFFFFFFFFFFFFFF}; +#endif +#define WIFIMGR_PORTAL_TIMEOUT 180 +//#define WIFIMGR_SET_MANUAL_IP + +#if defined(WIFIMGR_SET_MANUAL_IP) + uint8_t _ip[4] = {192,168,0,128}; + uint8_t _gw[4] = {192,168,0,1}; + uint8_t _sn[4] = {255,255,255,0}; +#endif + +#if defined(MQTT_HOMEASSISTANT_SUPPORT) + #define MQTT_HOME_ASSISTANT_0_87_SUPPORT // Comment if using HA version < 0.87 +#endif -const char HOSTNAME[] = "ESP8266_01"; // Friedly hostname +#if defined(USE_WS2812FX_DMA) && (USE_WS2812FX_DMA < 0 || USE_WS2812FX_DMA > 2) +#error "Definition of USE_WS2812FX_DMA is wrong!" +#endif -#define ENABLE_OTA // If defined, enable Arduino OTA code. -#define ENABLE_MQTT // If defined, enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API -// #define ENABLE_BUTTON // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control +#if defined(ENABLE_MQTT) and ENABLE_MQTT < 0 and ENABLE_MQTT > 1 +#error "Definition of ENABLE_MQTT is wrong!" +#endif + +#if defined(ENABLE_MQTT) and ENABLE_MQTT < 0 and ENABLE_MQTT > 1 +#error "Definition of ENABLE_MQTT is wrong!" +#endif + +#if defined(ENABLE_HOMEASSISTANT) and !defined(ENABLE_MQTT) +#error "To use HA, you have to either enable PubCubClient or AsyncMQTT" +#endif +#if !defined(ENABLE_HOMEASSISTANT) and defined(MQTT_HOMEASSISTANT_SUPPORT) +#error "To use HA support, you have to either enable Homeassistant component" +#endif // parameters for automatically cycling favorite patterns -uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds) - {0xff0000, 200, 1, 5.0}, // blink red for 5 seconds - {0x00ff00, 200, 3, 10.0}, // wipe green for 10 seconds - {0x0000ff, 200, 11, 5.0}, // dual scan blue for 5 seconds - {0x0000ff, 200, 42, 15.0} // fireworks for 15 seconds +uint32_t autoParams[][6] = { // main_color, back_color, xtra_color, speed, mode, duration (milliseconds) + {0x00ff0000, 0x0000ff00, 0x00000000, 200, 1, 5000}, // blink red/geen for 5 seconds + {0x0000ff00, 0x000000ff, 0x00000000, 180, 3, 10000}, // wipe green/blue for 10 seconds + {0x000000ff, 0x00ff0000, 0x00000000, 100, 14, 10000}, // dual scan blue on red for 10 seconds + {0x000000ff, 0x00ff0000, 0x00000000, 100, 45, 15000}, // fireworks blue/red for 15 seconds + {0x00ff0000, 0x0000ff00, 0x000000ff, 40, 54, 15000} // tricolor chase red/green/blue for 15 seconds }; -#ifdef ENABLE_MQTT - #define MQTT_MAX_PACKET_SIZE 256 - #define MQTT_MAX_RECONNECT_TRIES 4 - - int mqtt_reconnect_retries = 0; - char mqtt_intopic[strlen(HOSTNAME) + 4]; // Topic in will be: /in - char mqtt_outtopic[strlen(HOSTNAME) + 5]; // Topic out will be: /out - - const char mqtt_clientid[] = "ESP8266Client"; // MQTT ClientID - - char mqtt_host[64] = ""; - char mqtt_port[6] = ""; - char mqtt_user[32] = ""; - char mqtt_pass[32] = ""; +#if defined(ENABLE_MQTT) + char mqtt_buf[80]; + char mqtt_will_topic[sizeof(HOSTNAME) + 7]; // Topic 'will' will be:HOSTNAME "/status"; + const char mqtt_will_payload[] = "OFFLINE"; + char mqtt_intopic[sizeof(HOSTNAME) + 3]; // Topic 'in' will be: /in + char mqtt_outtopic[sizeof(HOSTNAME) + 4]; // Topic 'out' will be: /out + bool mqtt_lwt_boot_flag = true; + #if ENABLE_MQTT == 0 + #define MQTT_MAX_PACKET_SIZE 512 + #define MQTT_MAX_RECONNECT_TRIES 4 + uint8_t mqtt_reconnect_retries = 0; + uint8_t qossub = 0; // PubSubClient can sub qos 0 or 1 + #endif + + #if ENABLE_MQTT == 1 + uint8_t qossub = 0; // AMQTT can sub qos 0 or 1 or 2 + uint8_t qospub = 0; // AMQTT can pub qos 0 or 1 or 2 + #endif + + #if defined(ENABLE_HOMEASSISTANT) + char mqtt_ha_config[20 + sizeof(HOSTNAME) + 7]; // Topic config will be: "homeassistant/light//config" + char mqtt_ha_state_in[5 + sizeof(HOSTNAME) + 12]; // Topic in will be: "home/_ha/state/in" + char mqtt_ha_state_out[5 + sizeof(HOSTNAME) + 13]; // Topic in will be: "home/_ha/state/out" + const char* on_cmd = "ON"; + const char* off_cmd = "OFF"; + bool new_ha_mqtt_msg = false; + uint16_t color_temp = 327; // min is 154 and max is 500 + #endif + + char mqtt_clientid[sizeof(HOSTNAME) + 9]; + char mqtt_host[65] = ""; //is configurable just for the start + uint16_t mqtt_port = 1883; //is configurable just for the start + char mqtt_user[33] = ""; //is configurable just for the start + char mqtt_pass[33] = ""; //is configurable just for the start #endif @@ -40,51 +148,89 @@ uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds) // *************************************************************************** #define DBG_OUTPUT_PORT Serial // Set debug output port -// List of all color modes -enum MODE { SET_MODE, HOLD, OFF, ALL, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW, TV, CUSTOM }; - -MODE mode = RAINBOW; // Standard mode that is active when software starts +uint8_t autoCount[10] = {}; // Global variable for storing the counter for automated playback for each segment +unsigned long autoDelay[10] = {}; // Global variable for storing the time to next auto effect for each segment +struct { + uint16_t start = 0; + uint16_t stop = NUMLEDS - 1; + uint8_t mode[10] = {}; // Global variable for storing the WS2812FX mode to set for each segment + uint8_t speed[10] = {}; // Global variable for storing the speed for effects --> smaller == slower + uint32_t colors[10][3] = {}; // 2 dim. Color array for setting colors of WS2812FX + uint8_t options = FX_OPTIONS; +} segState; -int ws2812fx_speed = 196; // Global variable for storing the delay between color changes --> smaller == faster -int brightness = 196; // Global variable for storing the brightness (255 == 100%) - -int ws2812fx_mode = 0; // Helper variable to set WS2812FX modes - -bool exit_func = false; // Global helper variable to get out of the color modes when mode changes - -bool shouldSaveConfig = false; // For WiFiManger custom config - -struct ledstate // Data structure to store a state of a single led +// List of all color modes +enum MODE {OFF, HOLD, SET}; +MODE prevmode = HOLD; // Do not change + +struct { + uint8_t segment = 0; // Actual selected segment + MODE mode = SET; // Standard mode that is active when software starts + uint8_t brightness = 196; // Global variable for storing the brightness (255 == 100%) +} State; + +struct { + uint8_t segments = 1; + uint16_t stripSize = NUMLEDS; + char RGBOrder[5] = RGBORDER; + #if defined(USE_WS2812FX_DMA) + #if USE_WS2812FX_DMA == 0 + uint8_t pin = 3; + #endif + #if USE_WS2812FX_DMA == 1 + uint8_t pin = 1; + #endif + #if USE_WS2812FX_DMA == 2 + uint8_t pin = 2; + #endif + #else + uint8_t pin = LED_PIN; + #endif + bool transEffect = false; +} Config; + +uint8_t fx_speed = 196; // Global variable for storing the speed for effects while fading --> smaller == slower +uint8_t fx_mode = 0; +uint8_t brightness_trans = 0; // Global variable for storing the brightness before change +uint32_t hexcolors_trans[3] = {}; // Color array of colors of WS2812FX before fading +struct ledstate // Data structure to store a state of a single led { uint8_t red; uint8_t green; uint8_t blue; + uint8_t white; }; -typedef struct ledstate LEDState; // Define the datatype LEDState -LEDState ledstates[NUMLEDS]; // Get an array of led states to store the state of the whole strip -LEDState main_color = { 255, 0, 0 }; // Store the "main color" of the strip used in single color modes +typedef struct ledstate LEDState; // Define the datatype LEDState +uint8_t* ledstates; // Set a pointer to get an array of led states to store the state of the whole strip +LEDState main_color = { 255, 0, 0, 0 }; // Store the "main color" of the strip used in single color modes +LEDState back_color = { 0, 0, 0, 0 }; // Store the "2nd color" of the strip used in single color modes +LEDState xtra_color = { 0, 0, 0, 0 }; // Store the "3rd color" of the strip used in single color modes -#define ENABLE_STATE_SAVE // If defined, save state on reboot -#ifdef ENABLE_STATE_SAVE - char current_state[32]; // Keeps the current state representation - char last_state[32]; // Save the last state as string representation - unsigned long time_statechange = 0; // Time when the state last changed - int timeout_statechange_save = 5000; // Timeout in ms to wait before state is saved - bool state_save_requested = false; // State has to be saved after timeout -#endif +bool updateConfig = false; // For WiFiManger custom config and config // Button handling -#ifdef ENABLE_BUTTON - #define BTN_MODE_SHORT "STA| 1| 0|245|196|255|255|255" // Static white - #define BTN_MODE_MEDIUM "STA| 1| 48|245|196|255|102| 0" // Fire flicker - #define BTN_MODE_LONG "STA| 1| 46|253|196|255|102| 0" // Fireworks random - - unsigned long keyPrevMillis = 0; + +#if defined(ENABLE_BUTTON) || defined(ENABLE_BUTTON_GY33) const unsigned long keySampleIntervalMs = 25; +#endif + +#if defined(ENABLE_BUTTON) +//#define BTN_MODE_SHORT "STA|mo|fxm| s| b| r1| g1| b1| w1| r2| g2| b2| w2| r3| g3| b3| w3" // Example + #define BTN_MODE_SHORT "STA| 5| 0|196|255| 0| 0| 0|255| 0| 0| 0| 0| 0| 0| 0| 0" // Static white + #define BTN_MODE_MEDIUM "STA| 5| 48|196|200|255|102| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0" // Fire flicker + #define BTN_MODE_LONG "STA| 5| 46|196|200|255|102| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0" // Fireworks random + unsigned long keyPrevMillis = 0; byte longKeyPressCountMax = 80; // 80 * 25 = 2000 ms byte mediumKeyPressCountMin = 20; // 20 * 25 = 500 ms byte KeyPressCount = 0; byte prevKeyState = HIGH; // button is active low - boolean buttonState = false; -#endif +#endif + +#if defined(ENABLE_BUTTON_GY33) + unsigned long keyPrevMillis_gy33 = 0; + byte longKeyPressCountMax_gy33 = 80; // 80 * 25 = 2000 ms + byte mediumKeyPressCountMin_gy33 = 20; // 20 * 25 = 500 ms + byte KeyPressCount_gy33 = 0; + byte prevKeyState_gy33 = HIGH; // button is active low +#endif diff --git a/Arduino/McLighting/filesystem_functions.h b/Arduino/McLighting/filesystem_functions.h new file mode 100644 index 00000000..994b5830 --- /dev/null +++ b/Arduino/McLighting/filesystem_functions.h @@ -0,0 +1,262 @@ +#if defined(ENABLE_STATE_SAVE) + + Ticker save_state; + Ticker save_seg_state; + Ticker save_conf; + + bool updateState = false; + bool updateSegState = false; + + void tickerSaveState(){ + updateState = true; + } + + void tickerSaveConfig(){ + updateConfig = true; + } + + void tickerSaveSegmentState(){ + updateSegState = true; + } + + // Write configuration to FS JSON + bool writeConfigFS(bool save){ + if (save) { + //FS save + DBG_OUTPUT_PORT.println("Saving config: "); + File configFile = SPIFFS.open("/config.json", "w"); + if (!configFile) { + DBG_OUTPUT_PORT.println("Failed!"); + save_conf.detach(); + updateConfig = false; + return false; + } + DBG_OUTPUT_PORT.println(listConfigJSON()); + configFile.print(listConfigJSON()); + configFile.close(); + save_conf.detach(); + updateConfig = false; + return true; + //end save + } else { + DBG_OUTPUT_PORT.println("SaveConfig is false!"); + return false; + } + } + + // Read search_str to FS + bool readConfigFS() { + //read configuration from FS JSON + if (SPIFFS.exists("/config.json")) { + //file exists, reading and loading + DBG_OUTPUT_PORT.print("Reading config file... "); + File configFile = SPIFFS.open("/config.json", "r"); + if (configFile) { + DBG_OUTPUT_PORT.println("Opened!"); + size_t size = configFile.size(); + std::unique_ptr buf(new char[size]); + configFile.readBytes(buf.get(), size); + configFile.close(); + #if defined(ENABLE_MQTT) + const size_t bufferSize = JSON_OBJECT_SIZE(11) + 150; + #else + const size_t bufferSize = JSON_OBJECT_SIZE(7) + 100; + #endif + DynamicJsonDocument jsonBuffer(bufferSize); + DeserializationError error = deserializeJson(jsonBuffer, buf.get()); + DBG_OUTPUT_PORT.print("Config: "); + if (!error) { + DBG_OUTPUT_PORT.println("Parsed!"); + JsonObject root = jsonBuffer.as(); + serializeJson(root, DBG_OUTPUT_PORT); + DBG_OUTPUT_PORT.println(""); + strcpy(HOSTNAME, root["hostname"]); + #if defined(ENABLE_MQTT) + strcpy(mqtt_host, root["mqtt_host"]); + mqtt_port = root["mqtt_port"].as(); + strcpy(mqtt_user, root["mqtt_user"]); + strcpy(mqtt_pass, root["mqtt_pass"]); + #endif + Config.segments = constrain(root["ws_seg"].as(), 1, MAX_NUM_SEGMENTS - 1); + Config.stripSize = constrain(root["ws_cnt"].as(), 1, MAXLEDS); + char _rgbOrder[5]; + strcpy(_rgbOrder, root["ws_rgbo"]); + checkRGBOrder(_rgbOrder); + uint8_t temp_pin; + checkPin((uint8_t) root["ws_pin"]); + Config.transEffect = root["ws_trans"].as(); + jsonBuffer.clear(); + return true; + } else { + DBG_OUTPUT_PORT.print("Failed to load json config: "); + DBG_OUTPUT_PORT.println(error.c_str()); + jsonBuffer.clear(); + } + } else { + DBG_OUTPUT_PORT.println("Failed to open /config.json"); + } + } else { + DBG_OUTPUT_PORT.println("Coudnt find config.json"); + writeConfigFS(true); + } + //end read + return false; + } + + bool writeStateFS(bool save){ + if (save) { + //save the strip state to FS JSON + DBG_OUTPUT_PORT.print("Saving state: "); + //SPIFFS.remove("/stripstate.json") ? DBG_OUTPUT_PORT.println("removed file") : DBG_OUTPUT_PORT.println("failed removing file"); + File configFile = SPIFFS.open("/stripstate.json", "w"); + if (!configFile) { + DBG_OUTPUT_PORT.println("Failed!"); + save_state.detach(); + updateState = false; + return false; + } + DBG_OUTPUT_PORT.println(listStateJSON()); + configFile.print(listStateJSON()); + configFile.close(); + char filename[28]; + save_state.detach(); + updateState = false; + return true; + //end save + } else { + DBG_OUTPUT_PORT.println("SaveState is false!"); + return false; + } + } + + bool readStateFS() { + //read strip state from FS JSON + if (SPIFFS.exists("/stripstate.json")) { + //file exists, reading and loading + DBG_OUTPUT_PORT.print("Reading state file... "); + File configFile = SPIFFS.open("/stripstate.json", "r"); + if (configFile) { + DBG_OUTPUT_PORT.println("Opened!"); + size_t size = configFile.size(); + // Allocate a buffer to store contents of the file. + std::unique_ptr buf(new char[size]); + configFile.readBytes(buf.get(), size); + configFile.close(); + const size_t bufferSize = JSON_OBJECT_SIZE(3) + 50; + DynamicJsonDocument jsonBuffer(bufferSize); + DeserializationError error = deserializeJson(jsonBuffer, buf.get()); + DBG_OUTPUT_PORT.print("Config: "); + if (!error) { + DBG_OUTPUT_PORT.print("Parsed"); + JsonObject root = jsonBuffer.as(); + serializeJson(root, DBG_OUTPUT_PORT); + DBG_OUTPUT_PORT.println(""); + State.segment = root["segment"]; + State.mode = static_cast(root["mode"].as()); + State.brightness = root["brightness"]; + jsonBuffer.clear(); + return true; + } else { + DBG_OUTPUT_PORT.print("Failed to load json config: "); + DBG_OUTPUT_PORT.println(error.c_str()); + jsonBuffer.clear(); + } + } else { + DBG_OUTPUT_PORT.println("Failed to open \"/stripstate.json\""); + } + } else { + DBG_OUTPUT_PORT.println("Couldn't find \"/stripstate.json\""); + writeStateFS(true); + } + //end read + return false; + } + + bool writeSegmentStateFS(bool save, uint8_t seg){ + if (save) { + //save the segment state to FS JSON + DBG_OUTPUT_PORT.print("Saving segment state: "); + char filename[28]; + snprintf(filename, 28, "/stripstate_segment_%02i.json", seg); + filename[27] = 0x00; + File configFile = SPIFFS.open(filename, "w"); + if (!configFile) { + DBG_OUTPUT_PORT.println("Failed!"); + save_seg_state.detach(); + updateSegState = false; + return false; + } + DBG_OUTPUT_PORT.println(listSegmentStateJSON(seg)); + configFile.print(listSegmentStateJSON(seg)); + configFile.close(); + save_seg_state.detach(); + updateSegState = false; + return true; + //end save + } else { + DBG_OUTPUT_PORT.println("SaveSegmentState is false!"); + return false; + } + } + + bool readSegmentStateFS(uint8_t _seg) { + //read strip state from FS JSON + char filename[28]; + snprintf(filename, 28, "/stripstate_segment_%02i.json", _seg); + filename[27] = 0x00; + if (SPIFFS.exists(filename)) { + //file exists, reading and loading + DBG_OUTPUT_PORT.printf("Reading segmentstate file: %s\r\n", filename); + File configFile = SPIFFS.open(filename, "r"); + if (configFile) { + DBG_OUTPUT_PORT.println("Opened!"); + size_t size = configFile.size(); + // Allocate a buffer to store contents of the file. + std::unique_ptr buf(new char[size]); + configFile.readBytes(buf.get(), size); + configFile.close(); + const size_t bufferSize = JSON_ARRAY_SIZE(12) + JSON_OBJECT_SIZE(7) + 100; + DynamicJsonDocument jsonBuffer(bufferSize); + DeserializationError error = deserializeJson(jsonBuffer, buf.get()); + DBG_OUTPUT_PORT.print("Config: "); + if (!error) { + DBG_OUTPUT_PORT.print("Parsed"); + JsonObject root = jsonBuffer.as(); + serializeJson(root, DBG_OUTPUT_PORT); + DBG_OUTPUT_PORT.println(""); + segState.start = constrain(root["start"].as(), 0, Config.stripSize - 1) ; + segState.stop = constrain(root["stop"].as(), 0, Config.stripSize - 1); + segState.mode[_seg] = root["fx_mode"].as(); + segState.speed[_seg] = root["speed"].as(); + main_color.white = root["color"][0].as(); + main_color.red = root["color"][1].as(); + main_color.green = root["color"][2].as(); + main_color.blue = root["color"][3].as(); + back_color.white = root["color"][4].as(); + back_color.red = root["color"][5].as(); + back_color.green = root["color"][6].as(); + back_color.blue = root["color"][7].as(); + xtra_color.white = root["color"][8].as(); + xtra_color.red = root["color"][9].as(); + xtra_color.green = root["color"][10].as(); + xtra_color.blue = root["color"][11].as(); + segState.options = constrain(root["ws_fxopt"].as(), 0, 255) & 0xFE; + convertColors(); + jsonBuffer.clear(); + return true; + } else { + DBG_OUTPUT_PORT.print("Failed to load json config: "); + DBG_OUTPUT_PORT.println(error.c_str()); + jsonBuffer.clear(); + } + } else { + DBG_OUTPUT_PORT.printf("Failed to open \"/%s\"\r\n", filename); + } + } else { + DBG_OUTPUT_PORT.printf("Couldn't find \"/%s\"", filename); + writeSegmentStateFS(true, _seg); + } + //end read + return false; + } +#endif diff --git a/Arduino/McLighting/helper_functions.h b/Arduino/McLighting/helper_functions.h new file mode 100644 index 00000000..61eee633 --- /dev/null +++ b/Arduino/McLighting/helper_functions.h @@ -0,0 +1,335 @@ +// Prototypes +bool readSegmentStateFS(uint8_t _seg); +// End Prototypes + +void getACK(char *buffer) { + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", buffer ); +} + +// Call convertColors whenever main_color, back_color or xtra_color changes. +void convertColors() { + hexcolors_trans[0] = (uint32_t)(main_color.white << 24) | (main_color.red << 16) | (main_color.green << 8) | main_color.blue; + hexcolors_trans[1] = (uint32_t)(back_color.white << 24) | (back_color.red << 16) | (back_color.green << 8) | back_color.blue; + hexcolors_trans[2] = (uint32_t)(xtra_color.white << 24) | (xtra_color.red << 16) | (xtra_color.green << 8) | xtra_color.blue; +} + +/*uint32_t* convertColors2(uint8_t _w, uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _w2, uint8_t _r2, uint8_t _g2, uint8_t _b2, uint8_t _w3, uint8_t _r3, uint8_t _g3, uint8_t _b3) { + uint32_t _hexcolors[3] = {}; + _hexcolors[0] = (uint32_t)(_w << 24) | (_r << 16) | (_g << 8) | _b; + _hexcolors[1] = (uint32_t)(_w2 << 24) | (_r2 << 16) | (_g2 << 8) | _b2; + _hexcolors[2] = (uint32_t)(_w3 << 24) | (_r3 << 16) | (_g3 << 8) | _b3; + return _hexcolors; +}*/ + +uint16_t convertSpeed(uint8_t _mcl_speed) { + uint16_t _fx_speed = 0; + if (_mcl_speed < 50) { + _fx_speed = 65535 - (_mcl_speed * 1000); + } else if (_mcl_speed < 100) { + _fx_speed = 16675 - ((_mcl_speed-49) * 250); + } else if (_mcl_speed < 150) { + _fx_speed = 4075 - ((_mcl_speed-99) * 50); + } else if (_mcl_speed < 200) { + _fx_speed = 1550 - ((_mcl_speed-149) * 25); + } else { + _fx_speed = 280 - ((_mcl_speed-199) * 5); + } + _fx_speed = constrain(_fx_speed, SPEED_MIN, SPEED_MAX); + return _fx_speed; +} + +/*uint8_t unconvertSpeed(uint16_t _fx_speed) { + uint16_t _mcl_speed = 0; + if (_fx_speed <= 280) { + _mcl_speed = ((280 - _fx_speed)/5) + 199; + } else if (_fx_speed < 1550) { + _mcl_speed = ((1550 - _fx_speed)/25) + 149; + } else if (_fx_speed < 4075) { + _mcl_speed = ((4075 - _fx_speed)/50) + 99; + } else if (_mcl_speed < 16500) { + _mcl_speed = ((16675 - _fx_speed)/250) + 49; + } else { + _mcl_speed = ((65535 - _fx_speed)/1000); + } + return _mcl_speed; +}*/ + +bool checkPin(uint8_t pin) { + #if defined(USE_WS2812FX_DMA) + #if USE_WS2812FX_DMA == 0 + pin = 3; + #endif + #if USE_WS2812FX_DMA == 1 + pin = 1; + #endif + #if USE_WS2812FX_DMA == 2 + pin = 2; + #endif + #endif + if (((pin >= 0 && pin <= 5) || (pin >= 12 && pin <= 16)) && (pin != Config.pin)) { + Config.pin = pin; + return true; + } + return false; +} + +neoPixelType checkRGBOrder(char rgbOrder[5]) { + for( uint8_t i=0 ; i < sizeof(rgbOrder) ; ++i ) rgbOrder[i] = toupper(rgbOrder[i]) ; + DBG_OUTPUT_PORT.printf("Checking RGB Order: %s ...", rgbOrder); + neoPixelType returnOrder = 0; + if (strcmp(rgbOrder, "GRB") == 0) { + returnOrder = NEO_GRB; + } else if (strcmp(rgbOrder, "GBR") == 0) { + returnOrder = NEO_GBR; + } else if (strcmp(rgbOrder, "RGB") == 0) { + returnOrder = NEO_RGB; + } else if (strcmp(rgbOrder, "RBG") == 0) { + returnOrder = NEO_RBG; + } else if (strcmp(rgbOrder, "BRG") == 0) { + returnOrder = NEO_BRG; + } else if (strcmp(rgbOrder, "BGR") == 0) { + returnOrder = NEO_BGR; + } else if (strcmp(rgbOrder, "WGRB") == 0) { + returnOrder = NEO_WGRB; + } else if (strcmp(rgbOrder, "WGBR") == 0) { + returnOrder = NEO_WGBR; + } else if (strcmp(rgbOrder, "WRGB") == 0) { + returnOrder = NEO_WRGB; + } else if (strcmp(rgbOrder, "WRBG") == 0) { + returnOrder = NEO_WRBG; + } else if (strcmp(rgbOrder, "WBRG") == 0) { + returnOrder = NEO_WBRG; + } else if (strcmp(rgbOrder, "WBGR") == 0) { + returnOrder = NEO_WBGR; + } else if (strcmp(rgbOrder, "GWRB") == 0) { + returnOrder = NEO_GWRB; + } else if (strcmp(rgbOrder, "GWBR") == 0) { + returnOrder = NEO_GWBR; + } else if (strcmp(rgbOrder, "RWGB") == 0) { + returnOrder = NEO_RWGB; + } else if (strcmp(rgbOrder, "RWBG") == 0) { + returnOrder = NEO_RWBG; + } else if (strcmp(rgbOrder, "BWRG") == 0) { + returnOrder = NEO_BWRG; + } else if (strcmp(rgbOrder, "BWGR") == 0) { + returnOrder = NEO_BWGR; + } else if (strcmp(rgbOrder, "GRWB") == 0) { + returnOrder = NEO_GRWB; + } else if (strcmp(rgbOrder, "GBWR") == 0) { + returnOrder = NEO_GBWR; + } else if (strcmp(rgbOrder, "RGWB") == 0) { + returnOrder = NEO_RGWB; + } else if (strcmp(rgbOrder, "RBWG") == 0) { + returnOrder = NEO_RBWG; + } else if (strcmp(rgbOrder, "BRWG") == 0){ + returnOrder = NEO_BRWG; + } else if (strcmp(rgbOrder, "BGWR") == 0) { + returnOrder = NEO_GRBW; + } else if (strcmp(rgbOrder, "GRBW") == 0) { + returnOrder = NEO_GRBW; + } else if (strcmp(rgbOrder, "GBWR") == 0) { + returnOrder = NEO_GBRW; + } else if (strcmp(rgbOrder, "RGBW") == 0) { + returnOrder = NEO_RGBW; + } else if (strcmp(rgbOrder, "RBGW") == 0) { + returnOrder = NEO_RBGW; + } else if (strcmp(rgbOrder, "BRGW") == 0) { + returnOrder = NEO_BRGW; + } else if (strcmp(rgbOrder, "BGRW") == 0) { + returnOrder = NEO_BGRW; + } else { + DBG_OUTPUT_PORT.print("invalid input!"); + uint16_t check = checkRGBOrder(Config.RGBOrder); + if (check != 0) { + returnOrder = static_cast(check); + strcpy(rgbOrder, Config.RGBOrder); + } else { + returnOrder = static_cast(checkRGBOrder(RGBORDER)); + strcpy(rgbOrder, RGBORDER); + } + } + DBG_OUTPUT_PORT.println("success!"); + strcpy(Config.RGBOrder, rgbOrder); + return returnOrder; +} + +// function to Initialize the strip +void initStrip(uint16_t _stripSize = Config.stripSize, uint8_t _num_segments = Config.segments, char _RGBOrder[5] = Config.RGBOrder, uint8_t _pin = Config.pin){ + DBG_OUTPUT_PORT.println("Initializing strip!"); +/*#if defined(USE_WS2812FX_DMA) + if (dma != NULL) { + delete(dma); + } +#endif*/ + if (strip != NULL) { + strip->strip_off(); + delay(10); + if(strip->isRunning()) strip->stop(); + strip->resetSegments(); + strip->resetSegmentRuntimes(); + delete(strip); + Config.stripSize = _stripSize; + strcpy(Config.RGBOrder, _RGBOrder); + Config.pin = _pin; + } + + if (ledstates != NULL) { + delete(ledstates); + } + ledstates = new uint8_t [_stripSize]; + +#if !defined(LED_TYPE_WS2811) + strip = new WS2812FX(_stripSize, _pin, checkRGBOrder(_RGBOrder) + NEO_KHZ800); +#else + strip = new WS2812FX(_stripSize, _pin, checkRGBOrder(_RGBOrder) + NEO_KHZ400); +#endif + // Parameter 1 = number of pixels in strip + // Parameter 2 = Arduino pin number (most are valid) + // Parameter 3 = pixel type flags, add together as needed: + // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) + // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) + // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) + + // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across + // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input + // and minimize distance between Arduino and first pixel. Avoid connecting + // on a live circuit...if you must, connect GND first. + strip->init(); + #if defined(USE_WS2812FX_DMA) + initDMA(_stripSize); + strip->setCustomShow(DMA_Show); + #endif + //parameters: index, start, stop, mode, color, speed, options + for (uint8_t _seg=0; _seg < Config.segments; _seg++) { + if (_seg != State.segment) { // Read actual segment last + (readSegmentStateFS(_seg)) ? DBG_OUTPUT_PORT.println("Segment state config FS read Success!") : DBG_OUTPUT_PORT.println("Segment state config FS read failure!"); + memcpy(segState.colors[_seg], hexcolors_trans, sizeof(hexcolors_trans)); + strip->setSegment(_seg, segState.start, segState.stop, segState.mode[_seg], segState.colors[_seg], convertSpeed(segState.speed[_seg]), segState.options); + } + } + //read actual segment last to set all vars correctly + (readSegmentStateFS(State.segment)) ? DBG_OUTPUT_PORT.println("Segment state config FS read Success!") : DBG_OUTPUT_PORT.println("Segment state config FS read failure!"); + memcpy(segState.colors[State.segment], hexcolors_trans, sizeof(hexcolors_trans)); + strip->setSegment(State.segment, segState.start, segState.stop , segState.mode[State.segment], hexcolors_trans, convertSpeed(segState.speed[State.segment]), segState.options); + fx_speed = segState.speed[State.segment]; + fx_mode = segState.mode[State.segment]; + brightness_trans = State.brightness; + prevsegment = State.segment; + strip->setCustomMode(0, F("Autoplay"), handleAuto); + strip->setCustomMode(1, F("Custom WS"), handleCustomWS); + strip->setCustomMode(9, F("Segment OFF"), handleSegmentOFF); + #if defined(CUSTOM_WS2812FX_ANIMATIONS) + strip->setCustomMode(2, F("TV"), handleTV); + strip->setCustomMode(3, F("E1.31"), handleE131); + strip->setCustomMode(4, F("Fire 2012"), handleFire2012); + strip->setCustomMode(5, F("Gradient"), handleGradient); + DBG_OUTPUT_PORT.print("Number of Segments: "); + DBG_OUTPUT_PORT.println(strip->getNumSegments()); + + if (e131 != NULL) { delete(e131); } + e131 = new ESPAsyncE131(END_UNIVERSE - START_UNIVERSE + 1); + float universe_leds = 170.0; // a universe has only 512 (0..511) channels: 3*170 or 4*128 <= 512 + if (strstr(Config.RGBOrder, "W") != NULL) { + //universe_leds = 128.0; + } + float float_enduni = _stripSize/universe_leds; + uint8_t END_UNIVERSE = _stripSize/universe_leds; + if (float_enduni > END_UNIVERSE) { + END_UNIVERSE = END_UNIVERSE +1; + } + + // if (e131.begin(E131_UNICAST)) // Listen via Unicast + if (e131->begin(E131_MULTICAST, START_UNIVERSE, END_UNIVERSE)) {// Listen via Multicast + DBG_OUTPUT_PORT.println(F("Listening for data...")); + } else { + DBG_OUTPUT_PORT.println(F("*** e131.begin failed ***")); + } + #endif +} + +void getSegmentParams(uint8_t _seg) { + segState.start = strip->getSegment(_seg)->start; + segState.stop = strip->getSegment(_seg)->stop; + //segState.mode[_seg] = strip->getMode(_seg); + //segState.speed[_seg] = unconvertSpeed(strip->getSpeed(_seg)); + //fx_mode = segState.mode[_seg]; + //fx_speed = segState.speed[_seg]; + main_color.white = ((segState.colors[_seg][0] >> 24) & 0xFF); + main_color.red = ((segState.colors[_seg][0] >> 16) & 0xFF); + main_color.green = ((segState.colors[_seg][0] >> 8) & 0xFF); + main_color.blue = ((segState.colors[_seg][0]) & 0xFF); + back_color.white = ((segState.colors[_seg][1] >> 24) & 0xFF); + back_color.red = ((segState.colors[_seg][1] >> 16) & 0xFF); + back_color.green = ((segState.colors[_seg][1] >> 8) & 0xFF); + back_color.blue = ((segState.colors[_seg][1]) & 0xFF); + xtra_color.white = ((segState.colors[_seg][2] >> 24) & 0xFF); + xtra_color.red = ((segState.colors[_seg][2] >> 16) & 0xFF); + xtra_color.green = ((segState.colors[_seg][2] >> 8) & 0xFF); + xtra_color.blue = ((segState.colors[_seg][2] >> 0) & 0xFF); + segState.options = strip->getOptions(_seg); +} + +void setSegmentSize() { + strip->strip_off(); + delay(10); + if(strip->isRunning()) strip->stop(); + strip->resetSegmentRuntimes(); + strip->setSegment(State.segment, segState.start, segState.stop , segState.mode[State.segment], hexcolors_trans, convertSpeed(segState.speed[State.segment]), segState.options); +} + +uint8_t calculateColorTransitionSteps(uint8_t _seg) { + //compare all colors and calculate steps + int _trans_cnt_max = 0; + int _calculate_max[4] = {}; + for (uint8_t i=0; i<3; i++){ + for (uint8_t j=0; j<4; j++) { + _calculate_max[j] = ((strip->getColors(_seg)[i] >> ((3-j)*8)) & 0xFF) - ((hexcolors_trans[i] >> ((3-j)*8)) & 0xFF); + _calculate_max[j] = abs(_calculate_max[j]); + _trans_cnt_max = max(_trans_cnt_max, _calculate_max[j]); + } + } + return _trans_cnt_max; +} + +uint8_t convertColorsFade(uint8_t _seg) { + if (Config.transEffect) { + if (trans_cnt > 1) { + //memcpy(segState.colors[_seg], strip->getColors(_seg), sizeof(segState.colors[_seg])); + DBG_OUTPUT_PORT.println("Color transistion aborted. Restarting...!"); + trans_cnt = 1; + } + return calculateColorTransitionSteps(_seg); + } else { + return 0; + } +} + +uint32_t scale_wrgb(uint32_t wrgb, uint8_t level) { + uint8_t w = (uint16_t)(((wrgb >> 24) & 0xFF) * level / 255); + uint8_t r = (uint16_t)(((wrgb >> 16) & 0xFF) * level / 255); + uint8_t g = (uint16_t)(((wrgb >> 8) & 0xFF) * level / 255); + uint8_t b = (uint16_t)(((wrgb) & 0xFF) * level / 255); + return (w << 24) | (r << 16) | (g << 8) | b; +} + +uint32_t trans(uint32_t _newcolor, uint32_t _oldcolor, uint8_t _level, uint8_t _steps) { + if (_steps == 0) { _steps = 1; }; + _level = (uint16_t)(_level * 255 / _steps); + _newcolor = scale_wrgb(_newcolor, _level); + _oldcolor = scale_wrgb(_oldcolor, 255-_level); + return _newcolor + _oldcolor; +} + +#if defined(ENABLE_MQTT) + void sendmqtt() { + #if ENABLE_MQTT == 0 + mqtt_client->publish(mqtt_outtopic, mqtt_buf); + #endif + #if ENABLE_MQTT == 1 + mqtt_client->publish(mqtt_outtopic, qospub, false, mqtt_buf); + #endif + memset(mqtt_buf,0,sizeof(mqtt_buf)); + } +#endif diff --git a/Arduino/McLighting/htm_edit_gz.h b/Arduino/McLighting/htm_edit_gz.h new file mode 100644 index 00000000..193a9b03 --- /dev/null +++ b/Arduino/McLighting/htm_edit_gz.h @@ -0,0 +1,468 @@ +#include +#define edit_htm_gz_len 5563 +static const char edit_htm_gz[] PROGMEM ={ + 0x1f, 0x8b, 0x08, 0x08, 0x79, 0x1c, 0x96, 0x5d, 0x04, 0x00, 0x65, 0x64, + 0x69, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x00, 0xed, 0x1d, 0x6b, 0x57, 0xea, + 0x46, 0xf0, 0x7b, 0xcf, 0xe9, 0x7f, 0x48, 0xd3, 0x87, 0x50, 0x9e, 0xa2, + 0xd7, 0x2a, 0x6a, 0x5b, 0x40, 0x40, 0x45, 0x8a, 0x08, 0x2a, 0xda, 0xd7, + 0x09, 0xc9, 0x02, 0xd1, 0x90, 0xc4, 0x24, 0x08, 0x7a, 0x6b, 0x7f, 0x7b, + 0x67, 0x1f, 0x79, 0x27, 0x10, 0xd4, 0x3e, 0x4f, 0xb9, 0xed, 0x25, 0xec, + 0xce, 0xcc, 0xce, 0xcc, 0xce, 0xce, 0xce, 0xce, 0xee, 0xe6, 0x1e, 0x7c, + 0x76, 0xd4, 0xa9, 0xf5, 0x6f, 0xce, 0xeb, 0xdc, 0xc4, 0x9a, 0x2a, 0xdf, + 0x7e, 0xfa, 0xc9, 0x01, 0xfe, 0xe6, 0x14, 0x41, 0x1d, 0x1f, 0xf2, 0x48, + 0xe5, 0xa1, 0x84, 0xe3, 0x0e, 0x26, 0x48, 0x90, 0xc8, 0x13, 0x3c, 0x5b, + 0xb2, 0xa5, 0xa0, 0x6f, 0x7b, 0xe7, 0x27, 0x8d, 0x46, 0x8f, 0xab, 0x4b, + 0xb2, 0xa5, 0x19, 0x07, 0x05, 0x52, 0x68, 0x43, 0x98, 0xd6, 0x93, 0x82, + 0x38, 0xeb, 0x49, 0x47, 0x87, 0xbc, 0x85, 0x16, 0x56, 0x41, 0x34, 0x4d, + 0x9e, 0x9b, 0x22, 0x49, 0x16, 0x0e, 0x79, 0x53, 0x34, 0x10, 0xa3, 0x4b, + 0x3e, 0x79, 0x51, 0x53, 0x31, 0x50, 0x1b, 0xa9, 0x33, 0xee, 0x23, 0x94, + 0xb2, 0xcf, 0x73, 0x4e, 0x56, 0x25, 0xb4, 0x28, 0x73, 0x5b, 0xc5, 0xe2, + 0xbe, 0x5b, 0xac, 0x6b, 0xa6, 0x6c, 0xc9, 0x9a, 0x5a, 0xe6, 0x84, 0xa1, + 0xa9, 0x29, 0x33, 0x0b, 0x79, 0x2a, 0x15, 0x34, 0xb2, 0xca, 0xdc, 0x07, + 0x7d, 0xe1, 0x29, 0x1b, 0x6a, 0x86, 0x84, 0x8c, 0x32, 0xb7, 0xa9, 0x2f, + 0x38, 0x40, 0x90, 0x25, 0xee, 0xf3, 0xed, 0xed, 0x6d, 0x2f, 0x80, 0x20, + 0xde, 0x8f, 0x0d, 0x6d, 0xa6, 0x4a, 0x39, 0x51, 0x53, 0x34, 0x00, 0xfd, + 0xbc, 0xf1, 0x01, 0xff, 0xf1, 0xc0, 0x48, 0xb2, 0xa9, 0x2b, 0xc2, 0x53, + 0x99, 0x53, 0x35, 0x15, 0xf9, 0x88, 0x2f, 0x72, 0xe6, 0x44, 0x90, 0xb4, + 0x79, 0x99, 0x2b, 0xc2, 0x9f, 0xcd, 0x22, 0xb4, 0x62, 0x8c, 0x87, 0x42, + 0x8a, 0x2b, 0x66, 0xd9, 0x7f, 0xf9, 0x6d, 0x2e, 0xed, 0x41, 0x19, 0x81, + 0xb8, 0x39, 0x53, 0x7e, 0x46, 0xc0, 0x52, 0xc9, 0xe6, 0xd4, 0xad, 0x19, + 0x09, 0x53, 0x59, 0x81, 0x86, 0x4c, 0x41, 0x35, 0x73, 0x26, 0x32, 0xe4, + 0x51, 0x10, 0x62, 0x8e, 0xe4, 0xf1, 0xc4, 0x2a, 0x0f, 0x35, 0x45, 0x72, + 0xaa, 0x5e, 0x22, 0xb5, 0x39, 0x53, 0xbc, 0x0a, 0x55, 0x64, 0x13, 0x1a, + 0xc6, 0x5d, 0x13, 0x12, 0xc3, 0xd2, 0x74, 0xe0, 0x3f, 0xa0, 0x48, 0x7f, + 0xc9, 0x54, 0x30, 0xc6, 0xb2, 0xea, 0x2f, 0xd3, 0x05, 0x49, 0x92, 0xd5, + 0x31, 0x14, 0x2e, 0x67, 0x04, 0x9a, 0xc6, 0x8c, 0x84, 0xbb, 0xd0, 0x40, + 0x8a, 0x60, 0xc9, 0x8f, 0xc8, 0xdb, 0x8e, 0xac, 0xe6, 0xe6, 0xb2, 0x64, + 0x4d, 0xca, 0xdc, 0x4e, 0xd1, 0xa7, 0x1e, 0x71, 0x66, 0x98, 0xd0, 0x3b, + 0x80, 0x2e, 0x03, 0x65, 0x63, 0x45, 0x93, 0xa6, 0x2e, 0xa8, 0xde, 0x46, + 0x69, 0xd7, 0xb2, 0xbe, 0x0f, 0xf7, 0xab, 0xac, 0x2a, 0xb2, 0x8a, 0x72, + 0x43, 0x45, 0x13, 0xef, 0xa3, 0x24, 0xdc, 0xd1, 0x17, 0x2b, 0x65, 0x2c, + 0x4f, 0xb4, 0x47, 0x64, 0x70, 0x1f, 0x3d, 0x16, 0xc5, 0x1a, 0x5c, 0x81, + 0xc2, 0x98, 0x75, 0x78, 0xac, 0xd7, 0xeb, 0x0e, 0x8a, 0x8b, 0x68, 0x9a, + 0x39, 0x0b, 0x86, 0xce, 0xa3, 0x8c, 0xe6, 0xd0, 0xb3, 0x59, 0x7f, 0x09, + 0x51, 0x71, 0x88, 0xef, 0xd5, 0x5d, 0x18, 0x36, 0x0a, 0x57, 0xc8, 0xe8, + 0xa6, 0x65, 0x55, 0x9f, 0x59, 0xdc, 0xc7, 0x84, 0x23, 0x52, 0xd3, 0x05, + 0x51, 0xb6, 0x9e, 0xa0, 0xd1, 0xd5, 0x94, 0x3f, 0xfa, 0x0d, 0x1d, 0x33, + 0x64, 0x4c, 0x05, 0x85, 0xdb, 0xc4, 0x43, 0xf7, 0x0a, 0x19, 0x92, 0xa0, + 0x0a, 0x59, 0xae, 0x62, 0xc8, 0x02, 0x48, 0xdf, 0x8b, 0x1a, 0x1f, 0xb9, + 0xa9, 0xf6, 0x9c, 0x9b, 0x41, 0x29, 0xd4, 0x28, 0x48, 0xb4, 0x42, 0x86, + 0x0e, 0x83, 0x67, 0x78, 0x2f, 0x5b, 0x4b, 0x61, 0x3c, 0x75, 0x49, 0x75, + 0x12, 0x67, 0x6c, 0xc5, 0xe2, 0x28, 0x99, 0x01, 0xc7, 0x93, 0xb5, 0x8d, + 0xca, 0x25, 0x83, 0xcd, 0x27, 0x27, 0x21, 0x51, 0x33, 0x04, 0xaa, 0x76, + 0xb0, 0x33, 0x64, 0x28, 0x72, 0x12, 0x46, 0x69, 0xe7, 0x65, 0xc0, 0xbd, + 0x0f, 0x91, 0x02, 0xdf, 0xc4, 0x43, 0x84, 0x0d, 0x84, 0xfc, 0x29, 0x81, + 0x77, 0x4a, 0x4a, 0xf1, 0x77, 0x42, 0x29, 0x34, 0xae, 0x92, 0xea, 0x8f, + 0xb0, 0x93, 0x8d, 0x2a, 0x2c, 0x97, 0x87, 0x68, 0xa4, 0x19, 0x88, 0xfb, + 0xf8, 0x06, 0x3d, 0x12, 0x1e, 0xcb, 0xc0, 0x93, 0x30, 0x54, 0x90, 0x64, + 0x8b, 0x1f, 0x45, 0x52, 0x42, 0x23, 0x61, 0xa6, 0x58, 0x51, 0x06, 0x9c, + 0xdf, 0x49, 0xda, 0x90, 0x38, 0x41, 0xe2, 0x3d, 0x92, 0xca, 0xaa, 0x66, + 0xa5, 0x9c, 0x56, 0xd3, 0xf1, 0x3a, 0x22, 0x4e, 0x67, 0x35, 0xf1, 0xf5, + 0x94, 0xe4, 0xf5, 0x41, 0x33, 0x43, 0x49, 0xf1, 0x92, 0x60, 0x09, 0x65, + 0x79, 0x2a, 0x8c, 0x51, 0x41, 0x57, 0xc7, 0xfb, 0x43, 0xc1, 0x44, 0x3b, + 0xdb, 0x59, 0xf9, 0xaa, 0xda, 0xb9, 0x98, 0x17, 0x5b, 0xcd, 0xb1, 0x56, + 0x81, 0xcf, 0x0f, 0xbd, 0xcb, 0x49, 0xfd, 0x72, 0x0c, 0x4f, 0x55, 0xfc, + 0xb3, 0x36, 0xae, 0x55, 0x6e, 0xf0, 0x43, 0xa3, 0x83, 0xe6, 0x97, 0xf8, + 0xa1, 0x39, 0xb8, 0x68, 0x5c, 0x1f, 0x5f, 0xf4, 0x87, 0xa5, 0xdb, 0xa2, + 0x54, 0x6a, 0x3c, 0xdd, 0x76, 0xab, 0xd5, 0xdb, 0xe6, 0x9e, 0x7c, 0xdb, + 0xab, 0x9e, 0x0e, 0xaf, 0x1b, 0xea, 0xed, 0xd5, 0xa9, 0x72, 0x73, 0x7d, + 0xf1, 0x41, 0x14, 0x15, 0xe5, 0x1c, 0x23, 0xe8, 0x8b, 0xd3, 0x8b, 0x7a, + 0xe3, 0x12, 0xfd, 0x60, 0x98, 0x4a, 0x7b, 0x73, 0x56, 0x2c, 0x56, 0xba, + 0xe3, 0x26, 0xb8, 0xf7, 0x27, 0x41, 0x69, 0x34, 0x3a, 0xad, 0x4c, 0x4d, + 0x39, 0x39, 0x69, 0x75, 0x5b, 0x4f, 0x0f, 0x97, 0x57, 0xdd, 0xc7, 0x7e, + 0xbd, 0xbe, 0x75, 0x34, 0xad, 0x4c, 0xce, 0xe6, 0x95, 0xc9, 0xe5, 0x6e, + 0xf7, 0x56, 0x3b, 0xde, 0xae, 0x94, 0xba, 0xa5, 0x71, 0xbb, 0xd7, 0x10, + 0x44, 0xb4, 0xdd, 0xae, 0x59, 0xa7, 0xbb, 0xbd, 0xf3, 0x6a, 0x63, 0x5e, + 0xb9, 0xbf, 0x98, 0xc9, 0xc7, 0x2d, 0xbd, 0xb2, 0x63, 0x5e, 0xfc, 0x50, + 0x38, 0x9b, 0x7d, 0xf3, 0xdc, 0xfc, 0x20, 0x6f, 0x6e, 0xdf, 0x8b, 0x96, + 0x70, 0xf9, 0x70, 0xd1, 0x9c, 0x34, 0x07, 0xea, 0x6c, 0xaf, 0x53, 0x38, + 0xb7, 0xbe, 0x69, 0x3f, 0x9b, 0x6d, 0xf9, 0x5e, 0x79, 0x6c, 0x64, 0xf6, + 0xac, 0xd2, 0xfd, 0x75, 0xff, 0xe8, 0xf1, 0xe9, 0xc4, 0xa8, 0x98, 0x95, + 0xa2, 0xd0, 0xba, 0xb8, 0x90, 0x37, 0xfb, 0xc5, 0x5a, 0x61, 0x72, 0xba, + 0x7d, 0x76, 0x39, 0xb4, 0x3e, 0x14, 0x76, 0x8d, 0x1f, 0xf4, 0xeb, 0x2b, + 0x45, 0xdf, 0xbd, 0xe8, 0x19, 0x7b, 0xa7, 0xdb, 0xc5, 0xe1, 0xf6, 0xee, + 0x68, 0xd1, 0x10, 0xfa, 0xdd, 0xbd, 0xcc, 0xc8, 0xda, 0xad, 0xdf, 0xee, + 0xb4, 0x4f, 0x6f, 0x86, 0xc5, 0xce, 0x7d, 0x46, 0x52, 0x6f, 0x9a, 0xfa, + 0xf4, 0x7c, 0x3c, 0x98, 0xb7, 0x4e, 0x2a, 0x8f, 0x67, 0x8b, 0xdd, 0xc7, + 0x9b, 0x81, 0xf8, 0xa1, 0x29, 0xb5, 0x2b, 0xdd, 0xd3, 0x71, 0xb7, 0x7e, + 0xaf, 0xdf, 0x5d, 0xf4, 0x27, 0x5b, 0x3b, 0xfd, 0x5e, 0xe9, 0x32, 0x73, + 0x74, 0x7d, 0x5d, 0x38, 0xda, 0xfc, 0xe6, 0x7a, 0x76, 0x33, 0x9e, 0xee, + 0xea, 0xf3, 0xd3, 0xa7, 0x9b, 0x4d, 0x55, 0xbf, 0x35, 0x6f, 0x5b, 0x9d, + 0xc5, 0xc9, 0xb4, 0x73, 0xb5, 0x79, 0x52, 0x98, 0x6c, 0x67, 0x3a, 0x3b, + 0x8f, 0xf5, 0xf1, 0x87, 0x66, 0xed, 0xb6, 0xaa, 0x8f, 0xa7, 0x95, 0x9d, + 0xc9, 0x60, 0x77, 0x7e, 0xdc, 0xba, 0x3c, 0x3e, 0xba, 0xa8, 0x0e, 0xba, + 0x37, 0xb2, 0xd8, 0xdd, 0x36, 0x14, 0x71, 0xab, 0x3f, 0x2a, 0x5e, 0xb5, + 0xcd, 0xdd, 0xa3, 0xe3, 0x6a, 0x6f, 0x77, 0x67, 0xbb, 0x51, 0xba, 0x69, + 0x98, 0xfa, 0xdd, 0xf8, 0xf2, 0xe6, 0xae, 0x35, 0x28, 0x54, 0x9e, 0xb7, + 0xc6, 0xa6, 0xd4, 0x95, 0x4a, 0x08, 0x55, 0x8f, 0xe7, 0x53, 0xa9, 0x79, + 0x3d, 0x38, 0x16, 0xc7, 0xd5, 0x66, 0xef, 0xfe, 0x76, 0xd0, 0x19, 0x68, + 0x13, 0xb1, 0x3e, 0x40, 0xc3, 0x0b, 0xad, 0x2b, 0x56, 0xc6, 0x77, 0x0f, + 0x10, 0x88, 0xfd, 0x70, 0x93, 0xa9, 0x5c, 0x3d, 0xcd, 0xb6, 0x6e, 0xb7, + 0xcc, 0x4a, 0xeb, 0x61, 0xd4, 0xd2, 0x9a, 0x6d, 0x13, 0xcd, 0xab, 0xa8, + 0x7e, 0xd2, 0x39, 0x1f, 0x77, 0x17, 0x8b, 0xf3, 0xd3, 0x93, 0x3b, 0xb1, + 0x79, 0xbc, 0xf3, 0x60, 0x9d, 0x15, 0x8a, 0x15, 0xa9, 0x72, 0xf4, 0xdc, + 0x6a, 0xaa, 0xb3, 0xd9, 0x51, 0xa6, 0x64, 0x9d, 0xb5, 0xbe, 0xe9, 0xee, + 0x1e, 0x4d, 0x8e, 0x8f, 0x87, 0x9d, 0xea, 0x75, 0xa6, 0x55, 0x7f, 0x16, + 0x8f, 0xcf, 0x66, 0x37, 0xe2, 0x6e, 0xa9, 0x7d, 0x5f, 0xbf, 0x44, 0xf7, + 0x67, 0xf2, 0x7c, 0xf6, 0x78, 0x75, 0x9c, 0x19, 0xcf, 0xba, 0xd5, 0xee, + 0x73, 0xa7, 0xb9, 0x3d, 0x90, 0x2a, 0xc3, 0xdd, 0x7a, 0x47, 0xbc, 0x10, + 0x1f, 0xba, 0x8f, 0x47, 0xf7, 0x37, 0x25, 0xb9, 0x76, 0x36, 0x5b, 0xd4, + 0x6b, 0xa7, 0xdb, 0x5b, 0xa7, 0xda, 0xb0, 0x3d, 0xd0, 0x66, 0xd6, 0x43, + 0x73, 0x7c, 0x24, 0x94, 0xfa, 0xdf, 0x5c, 0x3e, 0x9c, 0xb5, 0xe6, 0xd6, + 0x5e, 0xeb, 0xe2, 0x69, 0xb6, 0x68, 0x5d, 0x55, 0x9f, 0x1e, 0xae, 0x06, + 0x83, 0x87, 0x13, 0xad, 0x56, 0xbb, 0xac, 0x55, 0x1e, 0x26, 0x97, 0x1d, + 0x59, 0xeb, 0x5f, 0xd7, 0xbe, 0x69, 0x6e, 0xf7, 0xbb, 0xf5, 0xce, 0x51, + 0xb1, 0x72, 0xfe, 0x54, 0x2a, 0x7c, 0xd3, 0x2c, 0x0d, 0xf4, 0xd9, 0xe6, + 0xe9, 0x76, 0x46, 0x59, 0xa0, 0xee, 0x76, 0x7f, 0x50, 0x1d, 0x9e, 0xf4, + 0x8f, 0x74, 0xed, 0x0a, 0x29, 0x60, 0x19, 0xd5, 0xab, 0xc6, 0x70, 0x3e, + 0xfb, 0xa0, 0xb5, 0xdb, 0xa7, 0x97, 0xd5, 0x89, 0x36, 0x78, 0xfa, 0x60, + 0x4d, 0xa5, 0x0b, 0xb1, 0x3d, 0x7f, 0x9a, 0x9e, 0x97, 0x3a, 0x67, 0x5d, + 0xe1, 0xec, 0x6e, 0xb1, 0x57, 0x78, 0x54, 0xab, 0xda, 0xce, 0xd5, 0x56, + 0x6b, 0x47, 0x7e, 0xae, 0xf4, 0xa7, 0x3d, 0xb5, 0x2d, 0x14, 0x8f, 0x1e, + 0xbe, 0x19, 0x21, 0xe3, 0x44, 0x9b, 0x9c, 0x4e, 0x8c, 0x4d, 0xbd, 0xb8, + 0xf9, 0x6c, 0x28, 0xcf, 0xdb, 0x7b, 0xc6, 0x6d, 0x63, 0xbb, 0x03, 0x5d, + 0x70, 0x7a, 0x3f, 0x28, 0x6d, 0x3d, 0x5e, 0x75, 0x9f, 0x6f, 0xf4, 0xcc, + 0x7c, 0x78, 0xd3, 0xbc, 0x2a, 0xb4, 0xf4, 0x41, 0xeb, 0xee, 0x11, 0x06, + 0xf4, 0xae, 0x65, 0x9e, 0xb4, 0x6a, 0x46, 0xfb, 0x87, 0xca, 0x4d, 0x63, + 0x71, 0x57, 0x6a, 0xb6, 0x7a, 0x1f, 0x6e, 0xaf, 0x17, 0xe3, 0x6d, 0x34, + 0x6f, 0x99, 0xa7, 0x23, 0xa1, 0xd9, 0x3e, 0xb9, 0xf9, 0xd0, 0x1a, 0x3c, + 0x9c, 0x3f, 0xef, 0x9e, 0x55, 0xab, 0x77, 0x3b, 0x99, 0xa7, 0xa3, 0xc7, + 0xab, 0xf3, 0x6f, 0xf6, 0xe0, 0x5b, 0x2f, 0xec, 0x35, 0xf6, 0xb4, 0x93, + 0xc5, 0x56, 0x47, 0x36, 0x8f, 0xaf, 0xe7, 0xe8, 0x9b, 0x8e, 0xa0, 0x14, + 0x8f, 0x17, 0x35, 0x18, 0x44, 0x5d, 0x18, 0x91, 0xf5, 0x93, 0x2e, 0x0c, + 0xc8, 0xfa, 0x09, 0x0c, 0x4d, 0x52, 0x34, 0x81, 0xbf, 0x4e, 0x70, 0x05, + 0x2d, 0xaa, 0xc3, 0xcf, 0x09, 0x85, 0x9d, 0x1f, 0xed, 0xd6, 0x0b, 0xd5, + 0xdb, 0x71, 0xe5, 0xbc, 0xf8, 0x30, 0x69, 0xdd, 0x6d, 0x19, 0x83, 0xce, + 0x37, 0x15, 0xfc, 0xa9, 0x2b, 0x8d, 0xfe, 0x7d, 0x6f, 0xd6, 0x9d, 0xd6, + 0x6a, 0x7c, 0x1a, 0x5c, 0x73, 0xce, 0x40, 0x3a, 0x12, 0xac, 0x57, 0xba, + 0x1e, 0x3c, 0x3b, 0x25, 0x76, 0x47, 0xab, 0x02, 0xad, 0x09, 0x0d, 0x6a, + 0xb9, 0xcd, 0x1d, 0x5f, 0xcc, 0x47, 0x60, 0x63, 0xea, 0x60, 0x5a, 0xb4, + 0x64, 0x51, 0x50, 0x72, 0x82, 0x22, 0x8f, 0x61, 0xd6, 0x9a, 0xca, 0x92, + 0xa4, 0x24, 0x9d, 0x6c, 0xa2, 0x5d, 0x65, 0xce, 0x8d, 0x65, 0x36, 0x77, + 0xf5, 0x45, 0x92, 0xa0, 0x25, 0x56, 0x62, 0x12, 0xe8, 0xe1, 0x28, 0x86, + 0xe7, 0x3d, 0x4c, 0x93, 0xd0, 0x96, 0x89, 0x12, 0x9a, 0x78, 0xd9, 0xa4, + 0x8b, 0x67, 0xdf, 0xe4, 0x72, 0x46, 0xf1, 0x4f, 0x48, 0xe5, 0xb6, 0x92, + 0x4f, 0xe0, 0xf6, 0x9c, 0xc5, 0x65, 0x92, 0xcc, 0x28, 0xfe, 0x66, 0xa8, + 0x2c, 0xe1, 0x66, 0x0a, 0x5f, 0x73, 0x34, 0xda, 0xe2, 0x04, 0xe9, 0x4e, + 0x10, 0x41, 0x17, 0x1c, 0x04, 0x55, 0x53, 0xfc, 0x4d, 0xa3, 0x2b, 0xcd, + 0xe0, 0x86, 0xb3, 0xf1, 0x48, 0x5e, 0x70, 0x5f, 0x17, 0x6c, 0xa4, 0xef, + 0xc9, 0x2a, 0x91, 0xa3, 0x8b, 0x44, 0x4e, 0x50, 0x25, 0x2e, 0x65, 0xc7, + 0x6c, 0x78, 0x65, 0x20, 0x01, 0xcf, 0x22, 0xca, 0xe9, 0xf2, 0x02, 0x29, + 0x39, 0x12, 0xff, 0x94, 0x8b, 0x69, 0x86, 0xcb, 0x78, 0x0d, 0x8b, 0x48, + 0xca, 0x83, 0x11, 0xa0, 0xa0, 0xc2, 0x5c, 0x48, 0x65, 0x60, 0x25, 0x36, + 0x97, 0x39, 0xc6, 0x65, 0xce, 0xe6, 0x32, 0xc7, 0xb8, 0x94, 0xd5, 0x91, + 0xac, 0xca, 0x16, 0xe2, 0x36, 0x4d, 0x5b, 0x5e, 0x57, 0x62, 0xc6, 0xbe, + 0x4d, 0xfe, 0x1e, 0x3d, 0x8d, 0x0c, 0x61, 0x8a, 0xcc, 0xc4, 0xd4, 0x5d, + 0x22, 0x3e, 0x7e, 0x47, 0x86, 0x36, 0x85, 0x22, 0x56, 0x1d, 0x13, 0xdf, + 0x3b, 0xbc, 0xf8, 0xc0, 0x2c, 0x2d, 0x39, 0xa2, 0x4f, 0x9e, 0x90, 0x60, + 0x9f, 0xcf, 0x74, 0x45, 0x13, 0x24, 0xb2, 0xb8, 0x49, 0x18, 0xf8, 0x87, + 0x96, 0x94, 0x06, 0x1e, 0xc4, 0xab, 0x56, 0x99, 0x6c, 0xa8, 0x97, 0x76, + 0xe3, 0xbd, 0x40, 0x69, 0xdb, 0xad, 0x73, 0x05, 0xca, 0x11, 0x5a, 0x64, + 0xfd, 0x1d, 0x3d, 0x32, 0xa2, 0xd7, 0x7f, 0xb4, 0x14, 0x2f, 0xb8, 0xc2, + 0xab, 0xbb, 0xcf, 0xb1, 0xfd, 0xac, 0x29, 0x70, 0x80, 0xf1, 0xa1, 0x66, + 0x59, 0xda, 0x74, 0x99, 0xd0, 0xae, 0x4f, 0x28, 0x15, 0x29, 0xef, 0xa1, + 0x9e, 0xc2, 0x24, 0xc3, 0xcc, 0x21, 0x92, 0x78, 0xc9, 0x72, 0x9f, 0xeb, + 0x06, 0x31, 0xf2, 0xb7, 0x31, 0x6a, 0x77, 0x4e, 0x22, 0xde, 0x09, 0xa7, + 0x61, 0x96, 0x5c, 0x4e, 0x96, 0x75, 0x00, 0xd1, 0x75, 0x58, 0xca, 0x0f, + 0x61, 0x8a, 0x07, 0x05, 0xbc, 0x2e, 0x75, 0x93, 0x4a, 0xa2, 0x21, 0xeb, + 0x96, 0x93, 0x36, 0x1a, 0xcd, 0x54, 0x11, 0x8b, 0xc8, 0x89, 0x06, 0x4c, + 0x61, 0xa8, 0x21, 0x2b, 0xe8, 0x92, 0x19, 0x69, 0x8a, 0x0d, 0xb1, 0x2c, + 0x87, 0x7b, 0x30, 0xcb, 0x51, 0x55, 0xa5, 0x3d, 0x6c, 0x3d, 0x0a, 0x06, + 0xb7, 0x98, 0x2a, 0xc7, 0x96, 0xa5, 0xef, 0xfb, 0x4a, 0xd9, 0x72, 0xe6, + 0x90, 0x93, 0x34, 0x71, 0x86, 0x69, 0xe4, 0x29, 0xf9, 0x3a, 0xa5, 0x98, + 0xe2, 0x49, 0x3d, 0xef, 0xcd, 0xe7, 0x90, 0x92, 0x3c, 0x4e, 0x76, 0x01, + 0x1a, 0x3f, 0x02, 0x3e, 0xf8, 0x50, 0xed, 0x14, 0xd6, 0x14, 0xb2, 0xae, + 0x60, 0x88, 0x91, 0xa0, 0x98, 0x28, 0x04, 0xa0, 0x0a, 0x53, 0x5c, 0x49, + 0x82, 0x74, 0x0f, 0xba, 0xcb, 0xc6, 0x18, 0x59, 0x8c, 0x87, 0xea, 0xd3, + 0x89, 0x64, 0x4b, 0x98, 0xce, 0x0b, 0xba, 0x8e, 0x54, 0xa9, 0x36, 0x91, + 0x15, 0x29, 0x45, 0x48, 0xa5, 0x03, 0x02, 0xe9, 0x82, 0x35, 0x59, 0x4b, + 0x1e, 0x8c, 0x90, 0x97, 0x25, 0xcc, 0x0d, 0x1d, 0xf5, 0x39, 0x5c, 0xc2, + 0x07, 0x20, 0x1c, 0x81, 0xf1, 0x6a, 0x34, 0x58, 0xe9, 0x88, 0x13, 0x89, + 0xc9, 0xd6, 0x58, 0x57, 0x82, 0x32, 0x23, 0x40, 0x85, 0x57, 0x0b, 0x8c, + 0xc9, 0x05, 0xe5, 0x1d, 0xce, 0xc0, 0x6c, 0xd5, 0x25, 0x12, 0x53, 0x00, + 0x9f, 0xc8, 0xb4, 0x28, 0x2f, 0xab, 0x2a, 0x32, 0x8e, 0xfb, 0xed, 0x33, + 0xc0, 0xde, 0xa0, 0xc6, 0xb4, 0xf1, 0x5a, 0xd6, 0x28, 0xc9, 0x20, 0x73, + 0xd3, 0x7b, 0x49, 0x36, 0xd6, 0xe3, 0x8d, 0xa0, 0xf8, 0x59, 0x6b, 0xdf, + 0x1f, 0xc9, 0xc6, 0xab, 0x39, 0x23, 0x04, 0xc3, 0x8c, 0x61, 0xc3, 0x5d, + 0x97, 0x33, 0x8c, 0x13, 0x64, 0x0d, 0x0f, 0xc4, 0x37, 0xf0, 0x86, 0x49, + 0x86, 0x4d, 0xd8, 0x10, 0xe2, 0x59, 0xa3, 0x16, 0xe8, 0xc1, 0x21, 0xf0, + 0x3e, 0xb6, 0x78, 0x8e, 0x3b, 0x37, 0x90, 0x69, 0x72, 0x35, 0xcb, 0x50, + 0x72, 0x3d, 0x0e, 0x22, 0x1b, 0xc8, 0xaf, 0x3e, 0xa2, 0x2c, 0x2d, 0xb8, + 0x25, 0x05, 0xe0, 0xa3, 0x34, 0x56, 0xd0, 0x9b, 0xc8, 0x23, 0x8b, 0x15, + 0x1b, 0x48, 0xd2, 0xde, 0x60, 0xa0, 0x86, 0x40, 0x39, 0x0b, 0x38, 0xad, + 0x09, 0x78, 0x9e, 0x73, 0xcd, 0xb4, 0xce, 0x0d, 0x4d, 0x04, 0xc6, 0x2e, + 0xd0, 0xc3, 0x0c, 0x99, 0x56, 0x2a, 0xed, 0x9b, 0xfa, 0xe5, 0x11, 0x97, + 0x62, 0x5e, 0x2a, 0x0f, 0x22, 0x4b, 0x4f, 0x3d, 0x0b, 0xe4, 0xe6, 0x0e, + 0x0f, 0xb9, 0x6d, 0x1b, 0xd0, 0x05, 0x75, 0x20, 0x4d, 0x00, 0x9a, 0x99, + 0xdc, 0x67, 0x87, 0xd8, 0x4f, 0xa7, 0x39, 0x41, 0x41, 0x06, 0x28, 0xa9, + 0x7e, 0x71, 0xd1, 0xb9, 0xf8, 0x91, 0xcf, 0xf8, 0xa1, 0x32, 0xfc, 0xcf, + 0x65, 0xce, 0x2d, 0x04, 0x1d, 0xe9, 0x9a, 0x6a, 0xa2, 0x3e, 0x68, 0x94, + 0xb2, 0xed, 0x7e, 0x90, 0x62, 0xda, 0xd1, 0xa0, 0xfb, 0x21, 0x0e, 0x16, + 0xd0, 0x46, 0x80, 0x39, 0x39, 0x87, 0xd1, 0x98, 0x22, 0x23, 0xfc, 0x11, + 0x0f, 0xed, 0x20, 0x81, 0x97, 0x15, 0xf1, 0x46, 0xd8, 0xa7, 0x53, 0x82, + 0x7e, 0x51, 0x19, 0xab, 0xd0, 0xa9, 0x2a, 0xcc, 0x34, 0x83, 0xf6, 0x19, + 0xfe, 0x65, 0xab, 0xcf, 0xdf, 0xa4, 0x2d, 0x95, 0xa6, 0x12, 0xe5, 0x61, + 0x89, 0x91, 0x38, 0x81, 0x7d, 0x0d, 0x50, 0x61, 0x4c, 0x07, 0x50, 0x7c, + 0xd7, 0xf4, 0xb0, 0x05, 0x4c, 0x8f, 0xc0, 0x27, 0xb3, 0xf6, 0x1a, 0xec, + 0xa7, 0xbf, 0x25, 0x07, 0x8a, 0xf5, 0x7d, 0x8a, 0xfa, 0xbd, 0x2c, 0xa7, + 0xc7, 0x30, 0x04, 0x40, 0x29, 0xfe, 0xfc, 0xb2, 0x0f, 0x20, 0x7c, 0x01, + 0xcf, 0x4e, 0x7c, 0x34, 0xa0, 0x89, 0x89, 0xd9, 0xc4, 0x09, 0x48, 0x58, + 0x67, 0xc1, 0xf1, 0x08, 0xe2, 0x8a, 0x8a, 0x2c, 0xde, 0x73, 0x87, 0x8e, + 0x3a, 0x53, 0x28, 0x68, 0x57, 0x9e, 0x6e, 0xca, 0x93, 0x5d, 0x96, 0xce, + 0x28, 0xc5, 0xe7, 0xf9, 0x34, 0xd8, 0xd6, 0x21, 0x04, 0xf4, 0x69, 0xb0, + 0x7a, 0x6b, 0x66, 0xa8, 0x5e, 0xa6, 0x58, 0x9f, 0x2c, 0xeb, 0x64, 0x36, + 0xd1, 0xe6, 0xb1, 0xe3, 0xbc, 0x34, 0x94, 0x18, 0xb0, 0x97, 0xa0, 0x73, + 0x5b, 0x9b, 0x63, 0x05, 0xa9, 0x63, 0x98, 0xd4, 0x0e, 0xb8, 0x92, 0xcd, + 0x68, 0xa8, 0xdf, 0xa8, 0x9b, 0x75, 0x71, 0x02, 0xc4, 0xa0, 0xda, 0x2f, + 0xf7, 0x67, 0x44, 0x6e, 0xda, 0x68, 0x08, 0x52, 0x11, 0x4c, 0xeb, 0xc4, + 0x86, 0x2e, 0x30, 0x2d, 0x15, 0x23, 0xdb, 0xe6, 0x58, 0xcb, 0x18, 0xcd, + 0x9c, 0x0d, 0x4d, 0xcb, 0x80, 0xe0, 0x26, 0x05, 0x9b, 0x40, 0x51, 0x74, + 0xfc, 0xca, 0x7b, 0x89, 0x51, 0x76, 0xc0, 0x5b, 0xbf, 0x84, 0xe6, 0xad, + 0x64, 0xfa, 0xa3, 0x71, 0x06, 0xb6, 0x10, 0x93, 0x29, 0x90, 0x8a, 0x11, + 0x90, 0x39, 0x4a, 0xa8, 0x97, 0x7f, 0xdf, 0x00, 0x24, 0x71, 0x54, 0x96, + 0xf3, 0x08, 0xfd, 0x63, 0xf1, 0xe7, 0xac, 0xc7, 0x20, 0x96, 0x8e, 0xcc, + 0x4e, 0xef, 0x5d, 0x86, 0x26, 0x69, 0x1d, 0xa4, 0xa7, 0x32, 0xbf, 0xb2, + 0x7b, 0xe2, 0x2c, 0x1c, 0x83, 0xd2, 0x30, 0x2b, 0x20, 0x25, 0x09, 0xbe, + 0x42, 0xe0, 0xe0, 0xd1, 0x01, 0xb2, 0x90, 0xfa, 0xae, 0xfc, 0x53, 0x3e, + 0xf5, 0xe3, 0x2f, 0xf9, 0x9f, 0x33, 0xe9, 0xf4, 0x77, 0x5f, 0x14, 0xf2, + 0x68, 0x81, 0xc4, 0x94, 0x4d, 0x2b, 0xfd, 0xe3, 0xe6, 0xcf, 0x21, 0x4c, + 0x5c, 0x41, 0x50, 0xf3, 0x5f, 0xa7, 0x7f, 0xca, 0x13, 0xd4, 0x95, 0x78, + 0x20, 0x10, 0x8e, 0x0f, 0xb5, 0x11, 0xc1, 0xc6, 0xa3, 0x8b, 0x6c, 0x52, + 0x8c, 0x60, 0x1d, 0x27, 0x45, 0x0c, 0x32, 0x0c, 0x64, 0x4b, 0xfd, 0x2d, + 0xb7, 0x9b, 0x66, 0x6d, 0x92, 0x2f, 0xff, 0x30, 0xda, 0x0d, 0xcc, 0x2a, + 0x5e, 0x35, 0x84, 0xe4, 0x7e, 0x89, 0x64, 0x09, 0xab, 0x62, 0x25, 0x47, + 0x00, 0x43, 0xf4, 0xcf, 0xe3, 0xcd, 0x70, 0x3e, 0x4d, 0x70, 0xe8, 0x2f, + 0x3e, 0x62, 0x5e, 0xf4, 0x61, 0xdc, 0xe9, 0x68, 0xcc, 0x30, 0xc8, 0xaf, + 0x31, 0x1f, 0xcb, 0xb2, 0xfb, 0x98, 0xe1, 0xc0, 0x0d, 0xc1, 0xdf, 0x80, + 0xb5, 0x54, 0x04, 0xd7, 0x80, 0x69, 0x63, 0x05, 0x9e, 0xfb, 0xed, 0x37, + 0x8f, 0x59, 0xc7, 0xf8, 0xaa, 0xa0, 0x84, 0x1e, 0x32, 0x84, 0x48, 0xc6, + 0x66, 0xc4, 0xdf, 0x38, 0x15, 0x6e, 0x09, 0xae, 0xfb, 0xc3, 0xdf, 0x4f, + 0xcb, 0x38, 0xca, 0x6c, 0xa6, 0x9d, 0xe6, 0xd6, 0xc9, 0x41, 0x04, 0x82, + 0x83, 0x3e, 0x44, 0x1e, 0x76, 0xd0, 0x15, 0xb7, 0xc4, 0xb3, 0x17, 0xa4, + 0x87, 0xb1, 0x51, 0x1b, 0xcf, 0x40, 0xf8, 0x40, 0xcc, 0x49, 0x02, 0x9b, + 0x0b, 0x4d, 0x5b, 0xb6, 0x14, 0x94, 0xe4, 0x47, 0x2f, 0x9a, 0x8d, 0x02, + 0x70, 0x20, 0xb2, 0xf9, 0x03, 0x5b, 0x02, 0x79, 0x13, 0x51, 0xaf, 0x8e, + 0x23, 0x6d, 0xd2, 0xb4, 0xb9, 0x88, 0x80, 0x09, 0x4f, 0xb9, 0x47, 0xda, + 0x5c, 0xc5, 0xdf, 0xc4, 0x48, 0xa8, 0x2a, 0x56, 0x35, 0xb6, 0x21, 0x31, + 0x9c, 0x1c, 0x49, 0x56, 0x6d, 0xa4, 0xf3, 0xa6, 0x21, 0xb2, 0x6e, 0xcd, + 0xf0, 0xdf, 0xd9, 0xb5, 0x87, 0x96, 0x31, 0xf3, 0xad, 0x6a, 0x5f, 0x96, + 0xb0, 0x71, 0x4e, 0x35, 0xba, 0x06, 0x17, 0x3c, 0xed, 0x3d, 0x1e, 0x5a, + 0xc7, 0x0b, 0xfe, 0x3c, 0xcb, 0x15, 0x63, 0xed, 0xe1, 0xed, 0x43, 0xdf, + 0xf8, 0xb1, 0xfb, 0x34, 0x0c, 0x4a, 0x32, 0xca, 0x91, 0xb0, 0xfe, 0x25, + 0xca, 0x81, 0x3c, 0x1d, 0x73, 0x20, 0xe6, 0x21, 0xbf, 0x91, 0x21, 0x72, + 0x6e, 0xf0, 0x1c, 0x21, 0x76, 0xc8, 0x4f, 0x85, 0x05, 0x3b, 0x7b, 0xb0, + 0x59, 0x2c, 0x7e, 0xb9, 0xcf, 0xc1, 0x6f, 0x96, 0x76, 0xa2, 0x05, 0x76, + 0x9e, 0x56, 0x98, 0x59, 0xda, 0xbe, 0x93, 0xd2, 0xa6, 0xa9, 0x6c, 0x9e, + 0x2b, 0x7c, 0xbb, 0x91, 0x40, 0x45, 0x60, 0xfa, 0x4a, 0x43, 0x53, 0x20, + 0x4d, 0x81, 0x8f, 0x00, 0xa4, 0x70, 0x5a, 0xdd, 0xd5, 0x94, 0xc7, 0x02, + 0xf1, 0xce, 0xfc, 0x32, 0xeb, 0x9b, 0x29, 0x81, 0x99, 0x09, 0x29, 0x3e, + 0x93, 0xc1, 0xe8, 0xe9, 0x90, 0x33, 0x17, 0x08, 0x13, 0x4b, 0xc8, 0x2a, + 0x72, 0x80, 0x2c, 0xa6, 0xe3, 0x23, 0x4c, 0x49, 0x84, 0x49, 0xcb, 0x66, + 0x8d, 0xe6, 0x90, 0x97, 0x0c, 0x37, 0x22, 0x69, 0x9e, 0xe5, 0x9a, 0x23, + 0xe6, 0x28, 0x5d, 0x95, 0xde, 0xc4, 0x1b, 0xa1, 0x90, 0x0e, 0x4e, 0x45, + 0x8c, 0xb3, 0xb0, 0xa3, 0x27, 0xe0, 0xfe, 0x95, 0xe2, 0x01, 0xde, 0xd5, + 0xf8, 0xb6, 0xa6, 0x29, 0x8a, 0xa0, 0x9b, 0xe8, 0xa0, 0x40, 0x7e, 0xf2, + 0xfb, 0x11, 0x78, 0x09, 0xc2, 0x2e, 0xf8, 0x24, 0x53, 0x45, 0x38, 0x2f, + 0xe4, 0x72, 0xef, 0x10, 0x18, 0x6a, 0xd2, 0x93, 0x87, 0x8a, 0x59, 0x7d, + 0xaa, 0xd9, 0x8e, 0x26, 0xb5, 0xe1, 0x39, 0x56, 0xb2, 0x91, 0x76, 0xe6, + 0x52, 0x1c, 0x3f, 0xf8, 0xf1, 0x0d, 0x34, 0x85, 0xf3, 0x04, 0x4c, 0x5b, + 0x4a, 0x68, 0x8d, 0xe6, 0xfc, 0x76, 0x7b, 0x05, 0xaf, 0xee, 0xcc, 0xc9, + 0x3a, 0xdd, 0x12, 0xd1, 0x31, 0x94, 0x48, 0x10, 0x8c, 0x96, 0x46, 0x75, + 0xc0, 0x05, 0x5d, 0x52, 0xda, 0xfa, 0x8f, 0xc4, 0x4b, 0xd8, 0x01, 0x64, + 0x2c, 0x21, 0x61, 0xb4, 0xd2, 0x2c, 0x61, 0xb1, 0x0e, 0x05, 0x3f, 0x68, + 0x52, 0x64, 0x37, 0x60, 0x12, 0x79, 0x11, 0x0b, 0x03, 0x10, 0xde, 0x20, + 0x8d, 0xdb, 0x4a, 0x13, 0xfa, 0x5e, 0xd5, 0x06, 0xa1, 0x7f, 0x2c, 0xfd, + 0x9c, 0x0e, 0x12, 0x25, 0x11, 0x70, 0x13, 0x59, 0x04, 0x96, 0x39, 0x81, + 0x7f, 0x56, 0xff, 0xb3, 0xf9, 0x3f, 0xe9, 0xa0, 0xa9, 0x2f, 0xe0, 0x6f, + 0xe9, 0x2f, 0x1c, 0x32, 0x78, 0x56, 0xda, 0xff, 0xbf, 0xbb, 0xdf, 0xad, + 0xbb, 0x83, 0xfe, 0x98, 0xa4, 0x7f, 0xdf, 0xe6, 0x90, 0x29, 0x09, 0x3f, + 0x10, 0x29, 0x8b, 0xb4, 0x20, 0x92, 0x73, 0x75, 0x2c, 0x28, 0x8c, 0x94, + 0xcc, 0x80, 0xec, 0xac, 0x77, 0x5d, 0x59, 0x62, 0x03, 0xde, 0xdc, 0xb6, + 0x2b, 0x84, 0xdb, 0x0d, 0x94, 0x40, 0xb4, 0x37, 0x81, 0x48, 0xf7, 0x9c, + 0x66, 0xd5, 0x29, 0x14, 0x0d, 0x74, 0xa3, 0x3a, 0x93, 0x41, 0x86, 0xa3, + 0xf2, 0x03, 0x6e, 0x33, 0xed, 0xc3, 0xb6, 0x83, 0x2e, 0x86, 0x11, 0x24, + 0x46, 0x46, 0x62, 0x14, 0x82, 0x1b, 0x76, 0xc7, 0x36, 0x96, 0x0e, 0x12, + 0x75, 0xfb, 0xfb, 0x6f, 0xb3, 0xbd, 0x97, 0x70, 0xc6, 0x06, 0x29, 0x38, + 0x75, 0xfc, 0x26, 0x6b, 0x63, 0x34, 0xfc, 0x50, 0xac, 0x30, 0xca, 0xde, + 0x8e, 0x20, 0xd8, 0xb6, 0x9c, 0x49, 0x3e, 0x84, 0x95, 0x2c, 0x9b, 0x46, + 0x47, 0x36, 0x25, 0xc5, 0x76, 0x24, 0xfe, 0x21, 0x8a, 0x5d, 0x12, 0x82, + 0x12, 0xe1, 0xfe, 0x43, 0x01, 0x28, 0x89, 0xf2, 0x70, 0xda, 0x1a, 0xe4, + 0x62, 0xbd, 0x10, 0xec, 0x25, 0x8a, 0x16, 0x39, 0x71, 0xc1, 0xf2, 0xc3, + 0x31, 0x82, 0x30, 0x52, 0xa2, 0x0c, 0x5b, 0x44, 0xfa, 0xf3, 0x9f, 0xe8, + 0xe2, 0x89, 0x1f, 0xa1, 0xda, 0x3a, 0xc1, 0x47, 0x01, 0x5f, 0xa3, 0x2e, + 0xb6, 0xc0, 0x7b, 0x0f, 0x8d, 0x79, 0xd6, 0x8b, 0xff, 0x48, 0x75, 0x05, + 0xad, 0x17, 0x2f, 0x88, 0xdf, 0x3c, 0x27, 0xda, 0x44, 0xfc, 0x60, 0x76, + 0x69, 0xa4, 0x9f, 0x62, 0x75, 0xb6, 0xca, 0x43, 0x88, 0x89, 0xe7, 0x46, + 0x6f, 0x9e, 0xe0, 0x9f, 0xe5, 0xac, 0xfe, 0x9f, 0x05, 0xfe, 0x24, 0xc5, + 0xc6, 0xcd, 0x02, 0xe6, 0x44, 0x9b, 0xd7, 0xdc, 0xb6, 0x52, 0x88, 0xce, + 0x03, 0x59, 0x58, 0xc8, 0x93, 0x4d, 0xd8, 0x8f, 0xe1, 0x3d, 0x95, 0x47, + 0x0a, 0xbf, 0x4e, 0x52, 0x8c, 0xa0, 0xe2, 0xe3, 0x5c, 0xb0, 0xa2, 0xee, + 0x6b, 0xb0, 0x6d, 0x10, 0x90, 0xc2, 0xad, 0xf9, 0x2e, 0xb6, 0xa6, 0xec, + 0xd6, 0xd8, 0x0f, 0xac, 0x3d, 0x17, 0x28, 0xa6, 0xc9, 0x33, 0x38, 0xb0, + 0x12, 0x6e, 0xd3, 0xad, 0xfa, 0x2e, 0xb6, 0x6a, 0x75, 0xab, 0x18, 0x2a, + 0xd4, 0xac, 0x42, 0x1b, 0x44, 0x79, 0x30, 0x18, 0x00, 0x1d, 0x40, 0x4e, + 0x37, 0x1e, 0x1a, 0x1f, 0xc5, 0xf1, 0x00, 0xdf, 0x50, 0xe0, 0xb0, 0x40, + 0xae, 0xea, 0xfd, 0xc9, 0x45, 0x9f, 0xad, 0xc4, 0x20, 0x84, 0x12, 0x65, + 0x1b, 0x24, 0x5f, 0xb5, 0x02, 0x9c, 0x89, 0x81, 0xbf, 0x80, 0xa9, 0x0d, + 0x7d, 0xb1, 0x02, 0x9e, 0x0a, 0x02, 0x7f, 0xbb, 0xd0, 0x3e, 0xd3, 0x67, + 0x36, 0xe5, 0x0f, 0x3d, 0x5c, 0x2a, 0xee, 0x7a, 0x28, 0x10, 0xf1, 0xba, + 0xd9, 0xb2, 0x04, 0x18, 0xbe, 0xae, 0xf4, 0xb9, 0x04, 0x17, 0x2f, 0x6c, + 0x9b, 0x24, 0xe1, 0xc7, 0x1d, 0x7a, 0x65, 0xd2, 0x46, 0x23, 0x13, 0x59, + 0xd7, 0xb8, 0x22, 0x04, 0x4e, 0xf3, 0x81, 0x51, 0xf0, 0xc7, 0xa4, 0x26, + 0x4e, 0x4f, 0x9a, 0x3a, 0xd5, 0xe0, 0x66, 0x09, 0x1c, 0x76, 0x8e, 0xf6, + 0x22, 0xae, 0xae, 0x5c, 0xdb, 0x39, 0x20, 0x1d, 0x80, 0x33, 0xfc, 0x6e, + 0xd9, 0xb7, 0x5c, 0x8a, 0xf6, 0x0a, 0x65, 0x3c, 0xed, 0xad, 0xbd, 0x01, + 0x0c, 0xe8, 0x03, 0x5f, 0x11, 0x46, 0x20, 0xfd, 0xc2, 0x38, 0x87, 0x89, + 0xfe, 0x2f, 0x9d, 0x63, 0x83, 0xaa, 0x77, 0x3f, 0x2f, 0xeb, 0x7a, 0x2c, + 0x37, 0xf1, 0x7f, 0x86, 0x04, 0xba, 0x44, 0xcb, 0x92, 0x5d, 0x9f, 0x2c, + 0x87, 0xef, 0xd3, 0x45, 0x44, 0xb0, 0x00, 0xb6, 0xd6, 0x54, 0x02, 0xf0, + 0xf4, 0xe8, 0x53, 0x2a, 0x45, 0xc8, 0x73, 0x74, 0x8f, 0x25, 0xfd, 0x1d, + 0xcf, 0x97, 0x89, 0xbd, 0x65, 0xe0, 0x57, 0x86, 0x6c, 0x79, 0x81, 0xc9, + 0x9f, 0x69, 0x73, 0x64, 0xd4, 0xe0, 0x1e, 0x45, 0x2a, 0x64, 0x55, 0xf4, + 0x14, 0xed, 0x92, 0xb6, 0xf1, 0x64, 0xe3, 0x6f, 0x9d, 0xa2, 0xe4, 0xb1, + 0xa6, 0x6a, 0xf4, 0xe8, 0x30, 0xdb, 0xd3, 0xf2, 0xb5, 0x14, 0x66, 0xd8, + 0x67, 0xe8, 0x84, 0x46, 0x18, 0x26, 0xd1, 0x04, 0xe6, 0x8f, 0xa1, 0x99, + 0x2e, 0xd2, 0x2b, 0xc3, 0x5c, 0x06, 0x48, 0x1b, 0x5d, 0x11, 0x6a, 0x3a, + 0xc0, 0x4b, 0x43, 0x41, 0x1b, 0x2a, 0xb1, 0xc1, 0x38, 0x42, 0x32, 0x03, + 0x05, 0x15, 0xcf, 0x96, 0x8a, 0x8a, 0xf2, 0x78, 0x6b, 0x00, 0x54, 0x7c, + 0x44, 0xcf, 0xa2, 0x39, 0x6a, 0x75, 0x01, 0x4c, 0x18, 0x34, 0xb0, 0x37, + 0xad, 0x0b, 0x63, 0x72, 0x4a, 0x38, 0x08, 0x11, 0x35, 0x7d, 0x32, 0xb6, + 0xb3, 0x24, 0x31, 0x15, 0x9e, 0x90, 0x83, 0x7b, 0xec, 0x04, 0x7e, 0x2d, + 0xb3, 0xaf, 0x1a, 0x02, 0x6c, 0x26, 0xfb, 0x0c, 0xdf, 0xbe, 0x5e, 0xf4, + 0x76, 0xe3, 0xc7, 0x38, 0x24, 0xb7, 0xb6, 0xd6, 0x69, 0x41, 0x8e, 0xe2, + 0x38, 0xc7, 0x01, 0xc9, 0x2f, 0xb8, 0x15, 0xcb, 0x87, 0x61, 0xde, 0x61, + 0x64, 0xb9, 0x9b, 0xb8, 0xce, 0x65, 0xae, 0xcf, 0x30, 0x21, 0x67, 0x2b, + 0x97, 0xe7, 0xbe, 0xfa, 0xca, 0xd5, 0x09, 0x6b, 0xd7, 0xfe, 0x8d, 0xf9, + 0xb3, 0x9f, 0xf9, 0xe5, 0xe3, 0x88, 0x20, 0xae, 0x3f, 0xaa, 0x49, 0x7d, + 0xe4, 0xb0, 0xc6, 0x47, 0xc9, 0x0e, 0x1d, 0x3d, 0xfc, 0x15, 0xe3, 0x9e, + 0xb4, 0x95, 0xe4, 0xf4, 0x01, 0x51, 0x2b, 0x85, 0x16, 0xed, 0x7d, 0x92, + 0xbf, 0x21, 0x23, 0x4a, 0xda, 0x5e, 0x73, 0xd4, 0x63, 0xa9, 0x93, 0xfa, + 0xb6, 0xcf, 0x56, 0x88, 0xe8, 0x54, 0xbb, 0xd9, 0xe5, 0xbf, 0x25, 0x33, + 0x4c, 0x38, 0x88, 0x77, 0xa8, 0x2b, 0xf9, 0x26, 0x1b, 0x49, 0x6b, 0xe8, + 0xf0, 0x9f, 0xe0, 0x39, 0x6d, 0x99, 0xb3, 0x84, 0xfb, 0xa0, 0xef, 0x7c, + 0xbd, 0xeb, 0x84, 0xc3, 0xe5, 0x67, 0xb0, 0x3c, 0x4c, 0xd1, 0x5c, 0xbf, + 0xb3, 0xc0, 0xb1, 0xd0, 0xd4, 0x7c, 0x7b, 0xbe, 0x8b, 0x12, 0x4d, 0x90, + 0xf3, 0x52, 0xc0, 0x65, 0x90, 0x46, 0x6d, 0x63, 0x09, 0x9e, 0x5d, 0x4a, + 0x91, 0xfd, 0x53, 0x00, 0x2a, 0xee, 0xc3, 0xd7, 0x01, 0x20, 0xc0, 0x77, + 0x26, 0x13, 0x91, 0xd8, 0x26, 0x64, 0x6c, 0x6a, 0x3f, 0xca, 0x3f, 0xef, + 0x47, 0x43, 0xd4, 0x95, 0xf0, 0xea, 0x13, 0x97, 0x33, 0x37, 0x7d, 0x68, + 0x1f, 0x54, 0x0f, 0x8d, 0x02, 0x86, 0x0d, 0x2d, 0x44, 0x06, 0x5b, 0x84, + 0x06, 0xf6, 0x4d, 0xec, 0x11, 0x87, 0x5d, 0x49, 0xed, 0xd4, 0xa6, 0x1c, + 0x9a, 0xcf, 0x02, 0xb4, 0xc3, 0x04, 0x57, 0xec, 0x2d, 0x52, 0xc2, 0x91, + 0x36, 0xb3, 0xda, 0x42, 0x82, 0x59, 0xc3, 0x8f, 0x6b, 0x1d, 0x9c, 0xc2, + 0x28, 0xe4, 0xf0, 0xd3, 0x2b, 0x4f, 0x1a, 0x99, 0x73, 0xd9, 0x02, 0x05, + 0x00, 0x5c, 0x84, 0x3f, 0x02, 0xb7, 0x0f, 0xc7, 0xeb, 0xe1, 0x6c, 0x73, + 0x39, 0xaa, 0x8a, 0x1c, 0x46, 0x5a, 0x52, 0xa5, 0xc4, 0xd5, 0xdd, 0x99, + 0xf1, 0x35, 0x9a, 0x1a, 0x57, 0x27, 0xc6, 0x36, 0x15, 0x8b, 0xa1, 0xeb, + 0xb1, 0x55, 0x66, 0x2c, 0x0f, 0x8b, 0x30, 0xe3, 0xee, 0xb0, 0x27, 0x3e, + 0x39, 0xe1, 0xb1, 0x62, 0x1b, 0x87, 0x7a, 0x94, 0x04, 0xbe, 0x82, 0x85, + 0xa9, 0xff, 0x5c, 0x53, 0x80, 0x5b, 0xdb, 0xb1, 0x3d, 0xa7, 0xc7, 0x56, + 0x8d, 0xe5, 0x51, 0x5c, 0x95, 0x2c, 0x6a, 0x7f, 0xad, 0xae, 0xad, 0x89, + 0x6c, 0x7a, 0x4f, 0x8b, 0x7b, 0x66, 0x1a, 0x47, 0xe5, 0xfe, 0x5d, 0xb8, + 0xe0, 0x7e, 0xd6, 0x46, 0x61, 0x83, 0x6c, 0x9e, 0x85, 0x0e, 0xb4, 0x51, + 0x6a, 0x50, 0xcd, 0x5a, 0x0f, 0x1e, 0xca, 0xf2, 0x4d, 0xca, 0x76, 0xa1, + 0x77, 0x62, 0x2e, 0xd2, 0x89, 0x39, 0x3c, 0x2d, 0x3b, 0xd0, 0x59, 0x12, + 0xb0, 0x26, 0xd8, 0x21, 0xa7, 0xcc, 0x90, 0xaf, 0xd0, 0xa9, 0xb8, 0xb0, + 0x38, 0x98, 0xe2, 0xfb, 0x6e, 0x60, 0xff, 0x09, 0x41, 0x4a, 0xfc, 0xe6, + 0x75, 0xf8, 0xec, 0x5e, 0xcc, 0x19, 0x35, 0x9c, 0x4c, 0xad, 0x0d, 0x59, + 0x3f, 0x87, 0x6d, 0xc7, 0xb5, 0x04, 0x5a, 0xfb, 0xaa, 0x6b, 0x10, 0xf1, + 0x17, 0x21, 0xc2, 0x90, 0xdc, 0xbb, 0x5d, 0x8d, 0x08, 0xdb, 0xc1, 0xeb, + 0x8c, 0x38, 0xd6, 0x94, 0xdf, 0xc9, 0xa0, 0x13, 0x9b, 0x75, 0xb4, 0x50, + 0xef, 0x67, 0xe2, 0xef, 0x65, 0xe8, 0x7f, 0x9a, 0xb9, 0x27, 0x33, 0x7a, + 0xc7, 0xf4, 0x03, 0x05, 0xc9, 0x9c, 0x66, 0xdc, 0x3c, 0xe4, 0xee, 0x23, + 0x38, 0xe7, 0xab, 0xff, 0x9c, 0x2b, 0x30, 0x64, 0x3c, 0xba, 0x6d, 0xbc, + 0xd7, 0xd1, 0x7b, 0x76, 0xf7, 0x85, 0xd1, 0x5d, 0x7a, 0xd0, 0xfe, 0xa8, + 0x7e, 0x56, 0xef, 0xd7, 0xdf, 0x76, 0xd4, 0x3e, 0x42, 0x83, 0x60, 0x44, + 0xb5, 0xa1, 0x13, 0xf3, 0xff, 0xc9, 0x0e, 0xa7, 0x50, 0x10, 0xc1, 0x3e, + 0x0c, 0x92, 0xbf, 0x82, 0x31, 0xb0, 0xda, 0x1f, 0x1d, 0x52, 0x7f, 0x14, + 0xb3, 0x36, 0x39, 0xed, 0x75, 0x7e, 0xc0, 0x06, 0x0f, 0x4b, 0xfe, 0x48, + 0xd7, 0xb3, 0xd6, 0xad, 0xaa, 0xb0, 0x6e, 0x98, 0x4d, 0xfb, 0x5b, 0x5d, + 0xc3, 0xbc, 0xbc, 0x68, 0x6b, 0x98, 0x1a, 0xe9, 0x91, 0x24, 0xc8, 0xc4, + 0x2c, 0x9a, 0x75, 0x7a, 0xfd, 0x02, 0x47, 0xfa, 0xdf, 0xc1, 0xf5, 0x97, + 0x43, 0x9e, 0x1c, 0xd4, 0xa5, 0x79, 0xb5, 0x25, 0x36, 0xa2, 0xce, 0x14, + 0xb6, 0x0c, 0x70, 0x3b, 0x07, 0xf8, 0x30, 0x2c, 0xbb, 0x73, 0x42, 0xea, + 0x49, 0xec, 0x13, 0xa9, 0xc9, 0x90, 0x00, 0x66, 0x7f, 0xf5, 0xd9, 0x74, + 0xf2, 0x52, 0x3c, 0xe7, 0x1a, 0x32, 0x1d, 0x0b, 0x59, 0xf2, 0x4a, 0xbd, + 0x2c, 0x90, 0x80, 0x42, 0xf8, 0x7a, 0xd2, 0xd9, 0xb0, 0x0e, 0x1b, 0xef, + 0x19, 0x00, 0x36, 0xe0, 0xda, 0x7f, 0x83, 0x0e, 0xa1, 0x90, 0x1f, 0x70, + 0xc7, 0x28, 0xa1, 0x49, 0x2e, 0xda, 0x2a, 0x82, 0xac, 0xf2, 0xef, 0x74, + 0xeb, 0xe3, 0x5d, 0xa3, 0x56, 0xb2, 0x80, 0x09, 0xf2, 0xc9, 0x0d, 0x41, + 0x4f, 0xf7, 0xfb, 0xb1, 0x8b, 0x17, 0x07, 0x83, 0x2e, 0x65, 0x56, 0x20, + 0xdc, 0x99, 0x1e, 0xf8, 0x3b, 0xe1, 0x51, 0xa0, 0x57, 0xc5, 0x57, 0x60, + 0x89, 0x1e, 0x24, 0xf1, 0x57, 0x58, 0xad, 0xac, 0x80, 0x07, 0x88, 0x75, + 0x31, 0xe2, 0x97, 0x39, 0xe6, 0x92, 0x3a, 0x7d, 0xa2, 0xbf, 0x6e, 0x5d, + 0xa7, 0xa9, 0x6b, 0xae, 0xaa, 0xa8, 0x30, 0xb8, 0x97, 0x13, 0x7a, 0x15, + 0x7b, 0x20, 0x10, 0xcc, 0xb0, 0x27, 0x0e, 0x1b, 0x10, 0xbd, 0x55, 0xec, + 0x4f, 0xd1, 0xa6, 0x59, 0x29, 0x8c, 0x31, 0x72, 0x07, 0x2f, 0x4f, 0x6e, + 0xd5, 0xc4, 0x50, 0x20, 0x2d, 0x05, 0x29, 0xf8, 0x6c, 0x8d, 0x41, 0xc4, + 0x0e, 0x9c, 0x74, 0x12, 0x3e, 0xc9, 0xa8, 0x0c, 0x35, 0x43, 0x8a, 0x9d, + 0x5b, 0xee, 0x53, 0x18, 0xd9, 0xf1, 0x7c, 0xe2, 0xaf, 0xe5, 0x7c, 0x7a, + 0x6f, 0xcc, 0x43, 0xae, 0xdb, 0x55, 0xa1, 0x4b, 0x8b, 0x09, 0xeb, 0xd8, + 0x57, 0xda, 0x8f, 0x64, 0x8f, 0xf2, 0xb0, 0x3c, 0xee, 0x90, 0x77, 0xdd, + 0x37, 0x76, 0x87, 0xfb, 0xbe, 0x4a, 0xb6, 0x75, 0x03, 0x75, 0xf0, 0x2a, + 0x92, 0x3c, 0xfe, 0xe1, 0x5c, 0x37, 0x09, 0xc8, 0x55, 0x28, 0xe8, 0x70, + 0x37, 0xef, 0x3f, 0x70, 0x71, 0xd9, 0x3b, 0x25, 0x2e, 0x11, 0xc7, 0x71, + 0x86, 0x59, 0x0e, 0x5f, 0x1d, 0x24, 0xfe, 0xf9, 0x4f, 0x0a, 0xbb, 0xfe, + 0x92, 0x8b, 0x8f, 0x18, 0xa5, 0xaa, 0x68, 0xc3, 0xd4, 0x8f, 0xb8, 0x00, + 0x6e, 0x3e, 0x7e, 0x24, 0x12, 0x95, 0xa9, 0x3d, 0xbd, 0xa4, 0x93, 0xc5, + 0x67, 0xef, 0x75, 0x11, 0xb2, 0x50, 0x80, 0xc1, 0x19, 0x1b, 0x8c, 0xbc, + 0x9b, 0x2d, 0xad, 0xbe, 0xe4, 0x95, 0xe4, 0x82, 0xd1, 0xab, 0xee, 0x29, + 0x39, 0x97, 0x8f, 0x92, 0xc5, 0x7e, 0x94, 0x10, 0xe8, 0x8e, 0xbe, 0x05, + 0x23, 0xb5, 0xda, 0x8e, 0xe9, 0x79, 0x88, 0x10, 0x22, 0x1f, 0x5c, 0xb9, + 0xd9, 0x10, 0x24, 0x28, 0xed, 0xc1, 0xe8, 0xa6, 0x21, 0xee, 0xda, 0x83, + 0x82, 0x44, 0x43, 0x13, 0x74, 0x69, 0xb0, 0x33, 0xd0, 0xaf, 0x1a, 0x07, + 0x09, 0x46, 0x42, 0xa8, 0xfb, 0x09, 0x81, 0xe5, 0x91, 0x21, 0xe5, 0xcb, + 0x1b, 0x0e, 0x26, 0x0c, 0x08, 0x99, 0xbb, 0x0c, 0x3a, 0xdc, 0xcf, 0x0e, + 0x9d, 0xc8, 0xc4, 0xee, 0x1a, 0xdc, 0xf5, 0x3d, 0x60, 0x8a, 0xe8, 0x0e, + 0xab, 0xbb, 0xad, 0x49, 0xa0, 0x6d, 0x70, 0x9b, 0x85, 0x29, 0x3c, 0x31, + 0xf7, 0xed, 0xa5, 0xed, 0xf6, 0x4c, 0x1f, 0x26, 0x0d, 0x06, 0x8b, 0xe7, + 0x0f, 0x0c, 0x4c, 0xbe, 0x23, 0xa0, 0xbf, 0x20, 0x76, 0xd3, 0x23, 0x67, + 0x7e, 0x64, 0x32, 0x8b, 0x9d, 0xd0, 0x77, 0x4c, 0x3d, 0xb9, 0xb0, 0x71, + 0x1c, 0x5d, 0x9a, 0xa8, 0xa7, 0x8d, 0xac, 0x3e, 0xbc, 0xe1, 0x27, 0x45, + 0x34, 0xb1, 0x1a, 0x05, 0x60, 0x7b, 0x90, 0xb1, 0x4f, 0x95, 0xa2, 0x19, + 0x3f, 0x86, 0xf3, 0x21, 0x0a, 0xfc, 0x6f, 0x55, 0x44, 0xfc, 0x52, 0xde, + 0x33, 0x98, 0xc3, 0x1c, 0xca, 0x61, 0xe8, 0x1e, 0x6c, 0xe3, 0x9c, 0xc3, + 0xb2, 0xdf, 0x6a, 0x93, 0x4b, 0x71, 0x29, 0x67, 0xe7, 0x26, 0x68, 0x89, + 0xda, 0x74, 0x0a, 0xf7, 0x42, 0xcc, 0x3c, 0x2c, 0x78, 0x6a, 0xf4, 0x39, + 0x15, 0x30, 0x29, 0xec, 0x87, 0xca, 0xdc, 0x06, 0x7e, 0x25, 0x07, 0x83, + 0xd8, 0xc8, 0xfa, 0x21, 0x86, 0x10, 0x29, 0xb4, 0x10, 0xbc, 0x3e, 0xee, + 0xe3, 0x5c, 0x56, 0x01, 0x94, 0xbe, 0xa6, 0x63, 0x23, 0x8b, 0x5f, 0x9d, + 0x26, 0xc2, 0x6f, 0x86, 0x06, 0x45, 0x2f, 0x01, 0x4c, 0x1c, 0xea, 0x96, + 0xdd, 0xb5, 0x1e, 0xbb, 0x28, 0x1a, 0xca, 0x6a, 0xf8, 0x67, 0x82, 0xac, + 0xa3, 0x41, 0x7b, 0xa0, 0xc1, 0xfe, 0x34, 0x4f, 0x66, 0x85, 0x90, 0xc5, + 0x05, 0x1b, 0xc4, 0x86, 0xde, 0x51, 0xf1, 0x2b, 0x9c, 0x89, 0x46, 0x3c, + 0xd6, 0xf7, 0x26, 0xe5, 0xe0, 0xd7, 0x93, 0xac, 0xa3, 0x9c, 0xdb, 0xb0, + 0x72, 0x6e, 0x5f, 0xad, 0x9c, 0x08, 0x7b, 0xc2, 0x3f, 0x2e, 0x81, 0xa7, + 0xb6, 0xa0, 0x42, 0xd6, 0xdc, 0x80, 0x02, 0xcc, 0x21, 0xb1, 0x82, 0xbf, + 0x4b, 0x45, 0x06, 0x5a, 0x4f, 0x45, 0xf4, 0x35, 0x2f, 0x61, 0x45, 0xd1, + 0x8a, 0x3f, 0x5b, 0x5d, 0x06, 0x7a, 0x5f, 0x75, 0x31, 0x6f, 0xea, 0xc4, + 0xbc, 0xd1, 0xc7, 0x75, 0x3c, 0x29, 0xf7, 0xe8, 0x65, 0xa5, 0x1d, 0x9c, + 0xdb, 0x95, 0xfb, 0xaf, 0x0c, 0xb5, 0x93, 0xc7, 0xbb, 0xef, 0xe2, 0x7e, + 0xe3, 0xe5, 0x7f, 0x09, 0xae, 0xe2, 0x59, 0x1b, 0xee, 0x3a, 0x3e, 0xb4, + 0x8a, 0xd7, 0xd4, 0x2a, 0x1c, 0x63, 0x3b, 0xc3, 0x67, 0xa4, 0x03, 0x57, + 0xca, 0xf1, 0xff, 0x26, 0x08, 0xf5, 0xf1, 0x25, 0xfc, 0x8e, 0x22, 0x0b, + 0x57, 0x80, 0x79, 0xc1, 0x81, 0x6c, 0xd0, 0xb6, 0x48, 0x36, 0xbf, 0xf3, + 0x13, 0x03, 0xe1, 0xe4, 0xa3, 0xae, 0x00, 0xef, 0xa9, 0xc2, 0x8f, 0xdf, + 0x7d, 0xf5, 0x73, 0x06, 0x16, 0xe2, 0x87, 0xf0, 0x95, 0x3e, 0x84, 0x87, + 0xaf, 0x7e, 0xfe, 0x3a, 0x5d, 0x18, 0xcb, 0x59, 0xb7, 0x53, 0xa6, 0x59, + 0x78, 0x75, 0x60, 0x96, 0xbe, 0xa3, 0x82, 0xfb, 0x48, 0xda, 0xfb, 0x11, + 0x4a, 0x7e, 0x06, 0xda, 0xa4, 0x70, 0xdf, 0xee, 0xf5, 0x70, 0x54, 0xef, + 0xcb, 0x3e, 0x38, 0xd1, 0x4a, 0x96, 0xd0, 0x20, 0xaf, 0x87, 0x60, 0x8f, + 0x58, 0x77, 0xec, 0x91, 0x4d, 0x4c, 0xe1, 0xbb, 0xef, 0xbe, 0x7d, 0xda, + 0x14, 0x8f, 0x8b, 0x78, 0xdb, 0x2b, 0x7a, 0xe0, 0xa3, 0xde, 0xbe, 0xc6, + 0xcf, 0xd8, 0x13, 0x20, 0x60, 0xbc, 0x30, 0x9a, 0xad, 0xbc, 0x83, 0x02, + 0x5d, 0xa9, 0xfb, 0x5f, 0xf1, 0x46, 0x2f, 0x67, 0xe3, 0xee, 0x34, 0xcb, + 0x90, 0x5d, 0x93, 0xd4, 0x3b, 0x13, 0xc2, 0x19, 0x6d, 0x26, 0x8d, 0x14, + 0x48, 0x20, 0x61, 0x7f, 0x50, 0x10, 0xee, 0x84, 0x05, 0xa4, 0x87, 0x86, + 0x66, 0x01, 0x9b, 0xc4, 0x66, 0x7e, 0x33, 0xbf, 0x87, 0x9f, 0xf2, 0x90, + 0x09, 0xf0, 0xfe, 0xb3, 0x03, 0x9e, 0x5c, 0x00, 0x1c, 0x31, 0xc0, 0x49, + 0x35, 0xeb, 0x90, 0x9f, 0x59, 0xa3, 0xdc, 0x2e, 0xff, 0xad, 0xa7, 0x6d, + 0xcc, 0x88, 0xf3, 0x0f, 0x1c, 0x1c, 0xe0, 0x13, 0x8c, 0x9c, 0x46, 0xef, + 0xbd, 0xf3, 0x5e, 0x4b, 0xd8, 0xe7, 0x6d, 0x3e, 0xe1, 0x4c, 0x23, 0x27, + 0x43, 0xad, 0x2d, 0x28, 0xa6, 0x06, 0x65, 0xc1, 0x6a, 0x2c, 0x7c, 0x74, + 0x15, 0xeb, 0x9b, 0xe8, 0x4a, 0x3b, 0x5c, 0x75, 0xae, 0xa5, 0xdb, 0x17, + 0xcd, 0xc9, 0xbb, 0xb4, 0x03, 0x38, 0x32, 0xb9, 0xb8, 0x8f, 0xd1, 0xfc, + 0x57, 0xf9, 0x19, 0xee, 0x86, 0x0f, 0x77, 0x03, 0x70, 0x29, 0x02, 0x93, + 0x1a, 0xcb, 0x0a, 0x8f, 0x07, 0x05, 0xf6, 0x6f, 0x3f, 0xfc, 0x01, 0x35, + 0x65, 0x9f, 0x7f, 0x0d, 0x62, 0x00, 0x00 +}; diff --git a/Arduino/McLighting/htm_index_gz.h b/Arduino/McLighting/htm_index_gz.h new file mode 100644 index 00000000..2da4ace5 --- /dev/null +++ b/Arduino/McLighting/htm_index_gz.h @@ -0,0 +1,1724 @@ +#include +#define index_htm_gz_len 20635 +static const char index_htm_gz[] PROGMEM ={ + 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x7c, 0x95, 0x5f, 0x04, 0x00, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x00, 0xe4, 0x5d, 0x59, 0x77, + 0x1b, 0x4b, 0x11, 0x7e, 0xe7, 0x1c, 0xfe, 0xc3, 0x5c, 0x05, 0x12, 0x09, + 0x24, 0x59, 0x8b, 0x6d, 0x1c, 0x3b, 0xf2, 0x25, 0xc9, 0x75, 0x42, 0x20, + 0xcb, 0x25, 0x0e, 0x04, 0x08, 0x39, 0x66, 0x24, 0xb5, 0xa4, 0xc1, 0xa3, + 0x19, 0x31, 0x33, 0xf2, 0x12, 0xe3, 0x7f, 0xc2, 0x39, 0xbc, 0xf0, 0xc2, + 0x1f, 0xe0, 0x89, 0x27, 0xf8, 0x63, 0x7c, 0x55, 0xdd, 0x3d, 0x3d, 0xab, + 0x16, 0x2f, 0x62, 0xf3, 0xcd, 0x95, 0x34, 0xdd, 0xd5, 0x55, 0xd5, 0xd5, + 0xd5, 0xd5, 0xd5, 0xd5, 0xcb, 0x3c, 0xf9, 0xea, 0x9b, 0x77, 0xcf, 0x3f, + 0xfc, 0xfa, 0xdb, 0x23, 0x6b, 0x12, 0x4d, 0xdd, 0xc3, 0xef, 0x7e, 0xe7, + 0x89, 0xfa, 0xb6, 0xf0, 0xf7, 0x64, 0x22, 0xec, 0xa1, 0xfa, 0xcd, 0xcf, + 0x91, 0x13, 0xb9, 0xe2, 0xf0, 0xcd, 0xe0, 0xb5, 0x33, 0x9e, 0x44, 0x8e, + 0x37, 0x7e, 0xb2, 0xc5, 0x29, 0x49, 0x90, 0xa9, 0x88, 0x6c, 0x6b, 0x30, + 0xb1, 0x83, 0x50, 0x44, 0xbd, 0xca, 0x2f, 0x3e, 0xbc, 0x68, 0xec, 0x55, + 0x72, 0xf9, 0x9e, 0x3d, 0x15, 0xbd, 0xca, 0x99, 0x23, 0xce, 0x67, 0x7e, + 0x10, 0x55, 0xac, 0x81, 0xef, 0x45, 0xc2, 0x03, 0xfc, 0xb9, 0x33, 0x8c, + 0x26, 0xbd, 0xa1, 0x38, 0x73, 0x06, 0xa2, 0xc1, 0x0f, 0x75, 0xcb, 0xf1, + 0x9c, 0xc8, 0xb1, 0xdd, 0x46, 0x38, 0xb0, 0x5d, 0xd1, 0x6b, 0x37, 0x5b, + 0x65, 0xf8, 0xa6, 0x7e, 0xdf, 0x71, 0x51, 0x4c, 0xf4, 0x1b, 0xf6, 0x6c, + 0xd6, 0x18, 0xd8, 0x33, 0xbb, 0xef, 0x8a, 0x04, 0xf6, 0x4b, 0x11, 0xe6, + 0xca, 0xa2, 0xde, 0xd1, 0xac, 0x21, 0xfe, 0x30, 0x77, 0xce, 0x7a, 0x95, + 0x81, 0x3d, 0x98, 0x88, 0x06, 0xc1, 0x07, 0xbe, 0x9b, 0x28, 0x38, 0xb5, + 0x2f, 0x1a, 0xf6, 0x58, 0xf4, 0x5a, 0x15, 0x6b, 0xeb, 0x46, 0x08, 0x3c, + 0xbf, 0xc1, 0x59, 0xcb, 0xca, 0x8b, 0x8b, 0x99, 0x13, 0x80, 0x4b, 0x53, + 0x72, 0x29, 0xc9, 0x7c, 0x91, 0x8f, 0x62, 0x58, 0xb7, 0x5a, 0x6d, 0xeb, + 0xa7, 0xb6, 0x67, 0x75, 0x5a, 0x9d, 0x96, 0xd5, 0xde, 0x6f, 0xb5, 0xf0, + 0xcf, 0x7a, 0xf9, 0xe6, 0xc3, 0x32, 0x6c, 0xb3, 0xc0, 0x1e, 0x4f, 0xed, + 0xe5, 0x9c, 0xbb, 0x8e, 0x77, 0x6a, 0x05, 0xc2, 0xed, 0x55, 0xc2, 0x09, + 0x9a, 0x70, 0x30, 0x8f, 0x2c, 0x07, 0x65, 0x2a, 0xd6, 0x24, 0x10, 0xa3, + 0x5e, 0x65, 0x6b, 0x64, 0x9f, 0xd1, 0x73, 0x13, 0x1f, 0x15, 0x2b, 0xba, + 0x9c, 0xa1, 0x79, 0x9c, 0x29, 0x44, 0xb8, 0x75, 0xd1, 0xa0, 0xf4, 0x52, + 0x6c, 0x68, 0x38, 0x34, 0x61, 0xe4, 0xcf, 0x07, 0x93, 0x46, 0x0a, 0x61, + 0x36, 0xa3, 0x39, 0xf3, 0xc6, 0xa9, 0xc6, 0x0c, 0xa3, 0xcb, 0x94, 0x26, + 0x16, 0xff, 0xfa, 0xf1, 0x08, 0x15, 0x6b, 0x8c, 0xec, 0x81, 0xb0, 0xae, + 0x28, 0x5d, 0x3d, 0x4e, 0x1d, 0xf7, 0x72, 0xdf, 0x7a, 0xf4, 0xc6, 0x8e, + 0x44, 0x00, 0x5d, 0xb3, 0x5e, 0x81, 0x42, 0xf8, 0xe8, 0x20, 0x86, 0x60, + 0xe4, 0xfb, 0x96, 0xe7, 0x07, 0x53, 0xdb, 0x35, 0xc9, 0xe7, 0x82, 0x3a, + 0xc2, 0xbe, 0xb5, 0xdd, 0x6a, 0x71, 0x62, 0x18, 0x0c, 0xf6, 0xad, 0x79, + 0xe0, 0x56, 0xb7, 0xa6, 0x0a, 0x53, 0xf3, 0xdc, 0x1f, 0x8d, 0x3a, 0x35, + 0x80, 0x07, 0x48, 0xaa, 0x3e, 0xe2, 0xc7, 0x47, 0x35, 0x40, 0x5f, 0x7f, + 0xf7, 0x3b, 0xdf, 0xfd, 0x4e, 0x53, 0xc3, 0x71, 0x9d, 0xc2, 0xb5, 0x78, + 0x92, 0xc4, 0x35, 0x53, 0x4b, 0x79, 0x0d, 0x9d, 0x2f, 0x48, 0xed, 0x6c, + 0xcf, 0x2e, 0x38, 0x0d, 0x22, 0x17, 0x8d, 0x89, 0x42, 0xd1, 0x96, 0x49, + 0x22, 0x02, 0xa9, 0x46, 0x38, 0xb3, 0x07, 0xe8, 0xdb, 0x29, 0x0c, 0x91, + 0xb8, 0x88, 0x1a, 0x51, 0x60, 0x7b, 0x21, 0x55, 0x84, 0xb2, 0x3c, 0xc1, + 0x19, 0x43, 0x27, 0x9c, 0xb9, 0x36, 0xf8, 0x74, 0x3c, 0xc6, 0xd8, 0x77, + 0xfd, 0xc1, 0x29, 0xe7, 0x9c, 0x4f, 0x9c, 0x48, 0x30, 0x32, 0x66, 0xe6, + 0x3c, 0xb0, 0x67, 0x32, 0xdd, 0x0f, 0x86, 0x0d, 0x7a, 0x4a, 0x11, 0x18, + 0x42, 0x87, 0x07, 0x91, 0xe3, 0x7b, 0xfb, 0x96, 0x1b, 0x05, 0x9c, 0x44, + 0x1d, 0xf9, 0xd4, 0x89, 0x1a, 0x52, 0x1c, 0xc2, 0x8e, 0xe6, 0x01, 0xf0, + 0x81, 0x47, 0x30, 0x17, 0x42, 0x30, 0xae, 0x33, 0xb6, 0x1f, 0xe5, 0x21, + 0xc3, 0xa9, 0xef, 0x47, 0x13, 0xae, 0x80, 0xed, 0x91, 0xe1, 0x70, 0xec, + 0x50, 0x0c, 0xb5, 0xc0, 0x7f, 0x20, 0x45, 0xdc, 0xb7, 0x07, 0xa7, 0xe3, + 0xc0, 0x9f, 0x7b, 0xc3, 0x46, 0x20, 0x66, 0xc0, 0x4d, 0xcc, 0xa8, 0x9f, + 0x8c, 0x72, 0x66, 0x0f, 0x87, 0x8c, 0x43, 0x36, 0xec, 0xd4, 0x0e, 0xc6, + 0x8e, 0x27, 0x9f, 0xae, 0x81, 0xa5, 0x6e, 0xed, 0xdb, 0x23, 0x08, 0x0b, + 0xdf, 0x7d, 0x01, 0x91, 0x28, 0x6d, 0x32, 0xac, 0xf4, 0xfd, 0x0b, 0x92, + 0x38, 0xa3, 0x70, 0xbc, 0x09, 0x5a, 0x90, 0xf1, 0xe2, 0xaf, 0x20, 0x47, + 0x22, 0x25, 0xc3, 0xab, 0xd1, 0x98, 0x16, 0xdb, 0xed, 0x34, 0x77, 0xbe, + 0xcf, 0xf9, 0x7d, 0x7f, 0x78, 0x99, 0xcf, 0x6f, 0x37, 0x77, 0xc4, 0x94, + 0x51, 0xa7, 0xda, 0x14, 0xe9, 0xbb, 0x9c, 0x9a, 0x56, 0x16, 0xad, 0xa8, + 0x69, 0x25, 0xab, 0xbc, 0x87, 0x65, 0x3d, 0xb7, 0x2f, 0x2b, 0xf5, 0xca, + 0x4f, 0x84, 0x7b, 0x26, 0x22, 0x67, 0x60, 0xbf, 0x15, 0x73, 0x91, 0x7c, + 0xb6, 0x64, 0x42, 0xfc, 0x5c, 0x7f, 0x4a, 0x4a, 0x59, 0x0f, 0xa1, 0x12, + 0x8d, 0x10, 0x95, 0x18, 0x29, 0xbc, 0x03, 0xdf, 0xf5, 0x83, 0xfd, 0x07, + 0x9d, 0x4e, 0x47, 0x32, 0x3d, 0x8f, 0x22, 0xdf, 0xab, 0x5b, 0x9f, 0xa4, + 0x0d, 0x90, 0x8f, 0x95, 0xcf, 0x71, 0x42, 0x20, 0xd0, 0xa2, 0x89, 0xe7, + 0x70, 0xde, 0x9f, 0x3a, 0x32, 0x01, 0x16, 0x34, 0x51, 0x42, 0xd6, 0x7c, + 0x30, 0x0f, 0x42, 0xa0, 0xb7, 0x66, 0xbe, 0xe3, 0x41, 0xfc, 0x07, 0x29, + 0x1a, 0x8e, 0x37, 0x9b, 0x47, 0x75, 0xcb, 0x9f, 0x45, 0xd4, 0xb4, 0xb3, + 0xba, 0x15, 0x0a, 0x17, 0x4a, 0x55, 0x67, 0xed, 0xb5, 0x03, 0x61, 0x9b, + 0xee, 0x65, 0x44, 0x6f, 0x6d, 0xfd, 0xc0, 0x3a, 0x9e, 0x89, 0x81, 0x33, + 0xba, 0xe4, 0x1c, 0x9d, 0x61, 0x7b, 0x30, 0x11, 0xfe, 0x88, 0x3b, 0xae, + 0x05, 0x3c, 0x53, 0x58, 0xc3, 0xd0, 0xfa, 0xc1, 0x56, 0x82, 0xa2, 0x44, + 0xe7, 0x9f, 0x89, 0x60, 0xe4, 0xfa, 0xe7, 0xfb, 0xd6, 0x99, 0x13, 0x3a, + 0x18, 0x70, 0x18, 0xe5, 0xd3, 0xe1, 0x10, 0x55, 0x0b, 0xad, 0xdf, 0xe9, + 0xec, 0xdf, 0x59, 0xa8, 0xa8, 0x15, 0xf9, 0xd6, 0xef, 0x26, 0xce, 0x70, + 0x28, 0xbc, 0xdf, 0x81, 0x90, 0xf5, 0xea, 0xc8, 0xda, 0xdb, 0x7a, 0xbc, + 0xd5, 0x6e, 0x6d, 0xb5, 0xdb, 0x69, 0xdc, 0xfb, 0xfb, 0x8d, 0xa9, 0xff, + 0x05, 0x1a, 0x3d, 0x98, 0x87, 0x0d, 0xc7, 0xf3, 0x44, 0x90, 0x93, 0x61, + 0x1e, 0x24, 0x2b, 0xd5, 0x3c, 0x44, 0x4e, 0xce, 0x79, 0x10, 0xd5, 0x41, + 0xd0, 0x4b, 0x45, 0xa0, 0x6d, 0x49, 0xbe, 0x4b, 0x18, 0x46, 0x4d, 0xf9, + 0x00, 0xb9, 0x9b, 0xe5, 0xd2, 0x9f, 0x47, 0xa4, 0xf3, 0xc4, 0x92, 0x61, + 0x3a, 0xc3, 0x60, 0x9d, 0x3d, 0x9b, 0xb5, 0x15, 0x90, 0x08, 0x98, 0xee, + 0x6c, 0xcf, 0x60, 0x19, 0x60, 0xfe, 0xc8, 0x96, 0x49, 0x14, 0xdc, 0xca, + 0xcf, 0xfd, 0x80, 0xcc, 0x96, 0x15, 0x4d, 0x04, 0x9a, 0xd3, 0x86, 0xfb, + 0xe1, 0x44, 0x97, 0xd4, 0xc8, 0x2c, 0x37, 0x6b, 0xe0, 0x3a, 0x83, 0x53, + 0xf2, 0x41, 0x78, 0x04, 0x0c, 0xa9, 0xc5, 0x9d, 0x77, 0xc7, 0xe9, 0x86, + 0xd6, 0x5a, 0x0a, 0x7a, 0x25, 0x76, 0x96, 0x29, 0xbd, 0x70, 0x02, 0xd8, + 0x99, 0x0b, 0x8c, 0x34, 0x3f, 0xac, 0x5b, 0xaf, 0x48, 0xf7, 0x3d, 0xa8, + 0xd3, 0xd1, 0xc5, 0x0c, 0xbd, 0x0d, 0xd2, 0x68, 0xb7, 0x1b, 0x40, 0x9b, + 0xef, 0x0d, 0xf9, 0x3e, 0x90, 0xb3, 0x7f, 0xb2, 0xc3, 0x5a, 0x4c, 0x74, + 0x06, 0x08, 0x2f, 0x3a, 0xc8, 0x29, 0x80, 0xb1, 0xf7, 0x0c, 0x9d, 0x31, + 0x5c, 0xfb, 0x18, 0x04, 0xa8, 0x96, 0xc3, 0xfa, 0x77, 0xbf, 0xf3, 0x49, + 0xff, 0xfe, 0x2c, 0x1b, 0x88, 0xc6, 0x92, 0xe8, 0x12, 0x4d, 0xd2, 0xdc, + 0x96, 0xc0, 0xcd, 0x7e, 0xe4, 0x9d, 0x9c, 0x48, 0xf7, 0x42, 0x55, 0xda, + 0x86, 0x25, 0xf7, 0x1a, 0x18, 0x2d, 0xa6, 0x30, 0xeb, 0x03, 0x41, 0x95, + 0x4b, 0xb2, 0x10, 0xd8, 0x43, 0x67, 0x1e, 0x1a, 0x9a, 0x79, 0x36, 0xd2, + 0x23, 0xd1, 0xc8, 0x15, 0x3c, 0xc4, 0xf1, 0x0f, 0x8c, 0x6d, 0x56, 0xcb, + 0xb2, 0xe7, 0x91, 0xcf, 0x49, 0xbf, 0x9f, 0x87, 0x11, 0x7a, 0x7a, 0x43, + 0xd1, 0x37, 0xe4, 0x8c, 0x8d, 0x4f, 0x82, 0xcf, 0xfc, 0xd0, 0xe1, 0x41, + 0x89, 0x9c, 0x13, 0x3b, 0x72, 0xce, 0x58, 0x08, 0x2c, 0x2b, 0x99, 0x41, + 0x15, 0xeb, 0x86, 0x30, 0x4b, 0x7d, 0x67, 0xd0, 0xe8, 0x8b, 0x2f, 0x8e, + 0x08, 0xaa, 0xad, 0x66, 0x67, 0xa7, 0x8e, 0xf4, 0x3d, 0xfa, 0xc0, 0xaf, + 0x76, 0x6d, 0xe1, 0x78, 0xc8, 0x5e, 0x6e, 0x5c, 0x15, 0x23, 0xa4, 0xb5, + 0x64, 0xb3, 0x3b, 0xbb, 0x28, 0x1c, 0x8e, 0xa5, 0x2c, 0x0c, 0x95, 0x4e, + 0xbb, 0xa5, 0x20, 0xf5, 0xd0, 0xdf, 0xa5, 0xa2, 0x46, 0x5a, 0x2d, 0x55, + 0xfd, 0xac, 0xdf, 0xd0, 0x86, 0xdf, 0x90, 0x77, 0x3d, 0x76, 0x5a, 0xad, + 0x95, 0xc5, 0x0a, 0x3a, 0xd6, 0x9e, 0x42, 0x62, 0x4c, 0x89, 0xd5, 0xd6, + 0xf4, 0xa7, 0x8e, 0xd7, 0x50, 0x5c, 0xee, 0x11, 0x5c, 0xa6, 0x7f, 0xc7, + 0xbd, 0x63, 0x28, 0x06, 0x7e, 0x60, 0x93, 0xf0, 0x59, 0x2d, 0x6f, 0xd6, + 0x22, 0x75, 0xa9, 0x41, 0x56, 0x7b, 0x1a, 0x2e, 0x6a, 0x68, 0xd8, 0x6e, + 0x1a, 0xeb, 0xdc, 0x06, 0x35, 0x03, 0x32, 0xa7, 0x30, 0xdd, 0xae, 0x48, + 0xf9, 0x1c, 0xf3, 0x10, 0xcd, 0x20, 0x3b, 0x99, 0xe1, 0x87, 0xfe, 0xc8, + 0x62, 0x15, 0xe7, 0xaa, 0xec, 0xb0, 0x38, 0x37, 0xfe, 0xcb, 0xe5, 0x1a, + 0xdd, 0x68, 0x48, 0x3f, 0x4b, 0xaa, 0x88, 0x69, 0xf5, 0xa4, 0xf7, 0x71, + 0x90, 0xce, 0x62, 0x7a, 0xd4, 0xc4, 0x3a, 0x2b, 0xdb, 0x61, 0xf2, 0xee, + 0x8b, 0xea, 0x3e, 0x32, 0x27, 0x2e, 0x6f, 0x52, 0x92, 0x4f, 0x71, 0x33, + 0x1b, 0xe5, 0x89, 0x75, 0x6e, 0xaf, 0xf5, 0xfd, 0x94, 0x6f, 0x60, 0x3d, + 0x78, 0xf1, 0xe2, 0x85, 0x4a, 0xc9, 0xdb, 0xa1, 0xaf, 0x9c, 0x29, 0xcd, + 0x09, 0x6d, 0x65, 0x86, 0x62, 0x4d, 0xd7, 0x65, 0xb7, 0x07, 0xf6, 0x68, + 0xa7, 0x65, 0xa0, 0x8c, 0x50, 0x9a, 0x73, 0x18, 0xe9, 0x60, 0x60, 0x87, + 0xec, 0x8c, 0x19, 0x95, 0xdf, 0x95, 0x2a, 0x9f, 0x37, 0xae, 0x1a, 0x3e, + 0x2d, 0x58, 0x1f, 0xe6, 0x73, 0xaa, 0x25, 0x2b, 0x9f, 0x4c, 0x2f, 0xc1, + 0x5f, 0xa0, 0x5c, 0x66, 0x93, 0x62, 0x94, 0xc7, 0xee, 0x87, 0xbe, 0x3b, + 0x8f, 0x44, 0x4a, 0x26, 0x5a, 0x7b, 0x13, 0x2a, 0x6e, 0x92, 0x26, 0xba, + 0x27, 0x19, 0x74, 0x12, 0xc2, 0xa4, 0xe4, 0x9c, 0xd1, 0x5c, 0xef, 0xdf, + 0x89, 0x25, 0xfc, 0x05, 0xa3, 0xe3, 0x90, 0x9a, 0x65, 0x3b, 0x23, 0xf2, + 0xd1, 0x68, 0x54, 0x2a, 0xf2, 0x07, 0xe2, 0x71, 0x5b, 0xec, 0x76, 0x17, + 0x4b, 0x3e, 0x0f, 0x15, 0xb3, 0xeb, 0xba, 0x0d, 0x4c, 0xf8, 0xbd, 0xb1, + 0xd8, 0x97, 0xce, 0xed, 0xc4, 0x1e, 0xfa, 0xe7, 0x2a, 0xd7, 0x24, 0x50, + 0x67, 0xef, 0xc2, 0x06, 0xec, 0xe0, 0xff, 0x46, 0x1b, 0x1f, 0xc1, 0xb8, + 0x6f, 0x57, 0x5b, 0x75, 0xfa, 0xaf, 0xd9, 0xa9, 0xa1, 0x6b, 0xb2, 0x89, + 0x20, 0x03, 0x85, 0x9f, 0xc9, 0xcc, 0xf6, 0x36, 0xe7, 0xb6, 0x29, 0x77, + 0x2f, 0x9f, 0xdb, 0x51, 0xb3, 0x29, 0x9a, 0x6b, 0x96, 0x5b, 0xcd, 0x52, + 0xf3, 0xb8, 0xe6, 0x5c, 0x43, 0xff, 0x2d, 0x87, 0xcc, 0xcc, 0xba, 0x96, + 0x1a, 0xca, 0xf4, 0x8c, 0xec, 0x46, 0x66, 0xad, 0xc8, 0x68, 0xb1, 0xda, + 0x2b, 0xb5, 0x4e, 0x08, 0x8a, 0x3f, 0x1a, 0x0d, 0x9a, 0x79, 0x97, 0xba, + 0xd6, 0xb9, 0xf9, 0x69, 0x73, 0x3a, 0x44, 0x09, 0x30, 0x48, 0x45, 0xb4, + 0x72, 0xc9, 0xd6, 0xe8, 0xec, 0x80, 0x03, 0xf5, 0xc1, 0xbc, 0x94, 0x22, + 0x18, 0xda, 0xc1, 0x69, 0xbe, 0x7c, 0xab, 0x6e, 0xd1, 0x3f, 0xae, 0x8f, + 0x2a, 0x0b, 0xb7, 0xe7, 0x03, 0x1c, 0xab, 0x37, 0xfe, 0x10, 0xb3, 0xdf, + 0xaa, 0xd1, 0xdb, 0x1a, 0xbb, 0x3a, 0x0f, 0xa6, 0x9c, 0x7e, 0x95, 0x36, + 0xdf, 0x23, 0xe7, 0x82, 0x27, 0x7b, 0x89, 0xae, 0xd0, 0x4e, 0x0e, 0x39, + 0x88, 0x20, 0xcc, 0x90, 0xb4, 0x03, 0x2d, 0x63, 0xbf, 0xea, 0xb5, 0x3f, + 0xe0, 0xb1, 0x04, 0xae, 0x3e, 0x79, 0x71, 0xa4, 0xaf, 0xc0, 0x2e, 0x67, + 0xc3, 0xa3, 0x48, 0xf7, 0x38, 0x2e, 0xd4, 0x4a, 0x0e, 0xa4, 0xed, 0x96, + 0xea, 0x73, 0xb2, 0xc1, 0xe2, 0x04, 0x33, 0x1f, 0x88, 0x4d, 0x61, 0xaa, + 0xcb, 0x99, 0x2a, 0x4b, 0xfd, 0xad, 0x49, 0xef, 0xce, 0x76, 0x5d, 0x02, + 0x92, 0x12, 0x91, 0x0c, 0xe4, 0x4b, 0x25, 0xd5, 0x1e, 0xfe, 0x94, 0x2c, + 0xfa, 0xcc, 0xa5, 0x72, 0xe7, 0x5b, 0xda, 0xd5, 0xd2, 0x6e, 0x60, 0x93, + 0xc5, 0xa3, 0x15, 0xcd, 0x78, 0x97, 0x4a, 0x2b, 0x8c, 0xe2, 0x15, 0x5a, + 0x84, 0x91, 0xa0, 0xff, 0x90, 0x9b, 0x37, 0xec, 0xc6, 0x1a, 0x91, 0x10, + 0xb3, 0x9a, 0xbe, 0x5d, 0xe8, 0x27, 0xec, 0xb6, 0x52, 0x0e, 0x3a, 0x77, + 0x65, 0x58, 0x4a, 0x67, 0x68, 0x3d, 0xd8, 0xdb, 0xdb, 0xe3, 0x2c, 0x33, + 0x58, 0xc4, 0xb1, 0x11, 0xe2, 0xdd, 0x76, 0x94, 0xb3, 0x6f, 0xdc, 0xb9, + 0x36, 0xcb, 0x7a, 0x21, 0x6f, 0xaa, 0xc7, 0x49, 0x41, 0xa0, 0xc3, 0xfb, + 0x73, 0x48, 0x60, 0xb1, 0x93, 0xd8, 0x66, 0x24, 0x71, 0x92, 0x8c, 0x50, + 0x18, 0x3f, 0x2d, 0x67, 0xbc, 0x0d, 0xe6, 0x66, 0xe0, 0x9f, 0x1b, 0x0e, + 0x1b, 0x89, 0x48, 0x06, 0x32, 0x72, 0x90, 0xcd, 0x40, 0x40, 0x41, 0x42, + 0x51, 0x5a, 0xa2, 0xa1, 0x00, 0xd2, 0x25, 0xd1, 0x30, 0xf3, 0xa9, 0x57, + 0x5c, 0x48, 0xe6, 0x15, 0xc1, 0x6b, 0x62, 0x8b, 0xca, 0x2d, 0xa4, 0x77, + 0x68, 0x35, 0xa9, 0x94, 0x2c, 0x4f, 0x51, 0xd0, 0x84, 0xfa, 0xa7, 0x0b, + 0x90, 0x9c, 0x00, 0x96, 0x16, 0x1f, 0x7d, 0x2a, 0x30, 0xf8, 0x31, 0x67, + 0xdc, 0xd3, 0x1a, 0x5d, 0x02, 0xcb, 0x8c, 0x0c, 0xd0, 0x87, 0xae, 0xfa, + 0xbf, 0xd1, 0x49, 0x8f, 0x0d, 0x2d, 0x39, 0x38, 0xa8, 0xdc, 0x6d, 0xfc, + 0xdf, 0xca, 0x02, 0xb4, 0xb7, 0x25, 0x04, 0xeb, 0xd5, 0x5e, 0x21, 0x44, + 0xa7, 0x96, 0xf0, 0x2c, 0xca, 0x74, 0x71, 0x77, 0x77, 0x37, 0xc7, 0xed, + 0x6e, 0x31, 0xb7, 0x66, 0x24, 0x2b, 0xe1, 0x56, 0x0d, 0x66, 0x4b, 0xd9, + 0x6d, 0xaf, 0xc6, 0x6f, 0x9a, 0xa9, 0xc7, 0xc5, 0x4c, 0xed, 0x28, 0xb2, + 0x8d, 0x6e, 0x16, 0xdf, 0x8f, 0x14, 0xc5, 0xc7, 0x44, 0x91, 0x04, 0x9c, + 0x63, 0x7b, 0x27, 0x21, 0xe4, 0x36, 0x21, 0xc9, 0x35, 0x43, 0xb7, 0x54, + 0x84, 0xdd, 0xc5, 0x22, 0x6c, 0x77, 0x8a, 0xd9, 0xfd, 0x91, 0x6a, 0xad, + 0xc6, 0x76, 0xa1, 0x0c, 0x63, 0x56, 0x09, 0xae, 0x53, 0x2a, 0xc4, 0x1d, + 0xca, 0xa5, 0xec, 0xed, 0x35, 0x85, 0xd8, 0xde, 0x29, 0x66, 0x6b, 0x4f, + 0xc9, 0xa9, 0xb1, 0x53, 0xca, 0x96, 0xa4, 0xb9, 0x90, 0x2d, 0x16, 0x21, + 0xa1, 0xda, 0x59, 0x89, 0x2d, 0xea, 0x34, 0x75, 0xb2, 0x79, 0x13, 0xc7, + 0x1d, 0xb2, 0x5f, 0x82, 0xbe, 0x47, 0xc1, 0xca, 0xbc, 0x89, 0x2a, 0xed, + 0x8a, 0x0f, 0x22, 0xdf, 0xc7, 0x30, 0x22, 0xcd, 0xa5, 0xf1, 0x1d, 0xcc, + 0x3c, 0x29, 0x5f, 0x57, 0x96, 0x5b, 0xb9, 0x1a, 0xab, 0xdc, 0x9d, 0xe5, + 0x5a, 0xdc, 0x2a, 0xd1, 0xe2, 0x45, 0xb3, 0xab, 0x74, 0x05, 0xd2, 0x9e, + 0x64, 0x3c, 0x5e, 0xd3, 0x30, 0x5c, 0x8f, 0x9f, 0xc8, 0xf9, 0xd6, 0x22, + 0x53, 0xb5, 0x5d, 0x31, 0x98, 0x90, 0xb7, 0xfc, 0xc6, 0xab, 0xe6, 0xd1, + 0x22, 0x8b, 0x95, 0x57, 0xb6, 0x80, 0x33, 0xe3, 0xc9, 0xb5, 0xca, 0xe7, + 0xc1, 0xf9, 0x08, 0x7a, 0xab, 0xd9, 0xea, 0x88, 0xe9, 0xc2, 0xe9, 0xbf, + 0x71, 0x17, 0x64, 0x5c, 0xd0, 0xcc, 0x54, 0x4c, 0x8e, 0x70, 0x5d, 0x67, + 0x16, 0x3a, 0x61, 0x21, 0x8b, 0xfb, 0x9e, 0x1f, 0x55, 0xf7, 0x47, 0x4e, + 0x10, 0x46, 0x0d, 0xd6, 0x9e, 0x9a, 0x75, 0x65, 0xc6, 0x46, 0x96, 0x9f, + 0x64, 0x5b, 0x29, 0xc9, 0xc8, 0xf7, 0xc1, 0x63, 0x41, 0xbc, 0x3a, 0xef, + 0x19, 0x98, 0x69, 0x5f, 0x51, 0x66, 0xb1, 0xac, 0xef, 0x7a, 0x46, 0x1a, + 0xeb, 0x4e, 0x4a, 0x75, 0x4c, 0xeb, 0xb1, 0xb1, 0x32, 0xdd, 0xa9, 0x74, + 0x1e, 0x9b, 0x98, 0x32, 0x9a, 0xaa, 0xe9, 0x3c, 0xd5, 0xb5, 0x72, 0x20, + 0xa5, 0xd9, 0x66, 0x3e, 0x97, 0x8b, 0xa3, 0x18, 0xe2, 0xc9, 0x1e, 0xd8, + 0xec, 0x64, 0x9c, 0xf7, 0xe6, 0x36, 0xcf, 0x7b, 0xea, 0xed, 0x9a, 0x2a, + 0xb5, 0x3a, 0x34, 0x7b, 0x47, 0x3f, 0x9e, 0x8a, 0xa1, 0x63, 0x5b, 0xbe, + 0xe7, 0x5e, 0x5a, 0xe1, 0x20, 0x10, 0xc2, 0xc3, 0x72, 0xc7, 0xd0, 0xaa, + 0x26, 0xdc, 0x94, 0xc7, 0x34, 0xf3, 0x55, 0xda, 0x90, 0x75, 0xa6, 0x52, + 0x26, 0xe4, 0x71, 0x4b, 0x6b, 0xf5, 0x35, 0xb0, 0xaf, 0x84, 0xbb, 0xdd, + 0xd9, 0xdd, 0x5e, 0x0d, 0x79, 0xbb, 0xbd, 0xb7, 0xb3, 0x36, 0xf6, 0xc7, + 0xad, 0x55, 0xb1, 0xff, 0x68, 0x55, 0xec, 0x89, 0xea, 0xee, 0x3c, 0x2e, + 0x46, 0x9e, 0x57, 0xac, 0x3c, 0x62, 0x78, 0xea, 0x39, 0x76, 0x5b, 0x1a, + 0x19, 0xe9, 0x4b, 0xf3, 0x22, 0x6c, 0xcb, 0x47, 0xe5, 0x0a, 0xf5, 0x6d, + 0x74, 0x5d, 0x78, 0xb6, 0xcd, 0x6e, 0xea, 0xaf, 0xf3, 0xfd, 0x83, 0x04, + 0xd0, 0x38, 0x60, 0x93, 0x7c, 0x90, 0xa9, 0x60, 0x69, 0xb1, 0xeb, 0x24, + 0xbd, 0x4e, 0x9e, 0x1e, 0xb1, 0xdf, 0xdc, 0x4d, 0xfd, 0x6d, 0xaf, 0x46, + 0x30, 0x5f, 0xae, 0x80, 0x62, 0xb7, 0x88, 0x62, 0x67, 0x67, 0x35, 0x0a, + 0x80, 0xcb, 0x63, 0xdc, 0x2e, 0xc2, 0xd8, 0xed, 0x66, 0x6a, 0xbf, 0x1a, + 0x81, 0x7c, 0xb1, 0x3c, 0xbd, 0x9d, 0x22, 0x7a, 0xdb, 0xed, 0x74, 0xdd, + 0x7f, 0xb4, 0x1a, 0xbd, 0x7c, 0xb1, 0x3c, 0xbd, 0xdd, 0x22, 0x7a, 0x3b, + 0xad, 0xd5, 0x08, 0x00, 0x2e, 0x8f, 0xf1, 0x47, 0x85, 0x18, 0xb3, 0xfa, + 0xb2, 0xbb, 0x22, 0x85, 0x7c, 0xb9, 0x3c, 0xc5, 0xbd, 0x22, 0x8a, 0xbb, + 0x19, 0x7d, 0x59, 0x91, 0x60, 0xbe, 0x58, 0x9e, 0xde, 0xe3, 0x22, 0x7a, + 0x3f, 0x5a, 0x51, 0xcb, 0x7e, 0x54, 0xa4, 0x65, 0xed, 0x56, 0x61, 0xd7, + 0xcc, 0xe8, 0xcb, 0x8a, 0x3d, 0x25, 0x57, 0xac, 0x88, 0x60, 0xa1, 0x2d, + 0x78, 0xdc, 0xbe, 0x91, 0xcc, 0x1e, 0xb7, 0x97, 0xcb, 0xac, 0x5d, 0x6c, + 0x0c, 0x5a, 0x2b, 0x6a, 0x1a, 0x01, 0xae, 0x66, 0xf4, 0x76, 0x69, 0xd0, + 0x48, 0x19, 0xbe, 0x70, 0xba, 0x59, 0xc3, 0x17, 0x4e, 0x37, 0x6d, 0xf8, + 0xc2, 0xe9, 0x5d, 0x1b, 0xbe, 0x70, 0xba, 0x59, 0xc3, 0x17, 0x4e, 0x37, + 0x6b, 0xf8, 0xc2, 0xe9, 0x5d, 0x1b, 0xbe, 0x70, 0xba, 0x69, 0xc3, 0x17, + 0x4e, 0x37, 0x6b, 0xf8, 0xc2, 0xe9, 0x5d, 0x1b, 0xbe, 0x70, 0xba, 0x61, + 0xc3, 0x17, 0x4e, 0x37, 0x6c, 0xf8, 0xc2, 0xe9, 0xc6, 0x0c, 0x9f, 0x76, + 0xab, 0x0d, 0xf1, 0xe9, 0x70, 0xb3, 0x86, 0x6f, 0x3a, 0xdc, 0xb4, 0xe1, + 0x9b, 0x0e, 0xef, 0xda, 0xf0, 0x4d, 0x87, 0x9b, 0x35, 0x7c, 0xd3, 0xe1, + 0x66, 0x0d, 0xdf, 0x74, 0x78, 0xd7, 0x86, 0x6f, 0x3a, 0xdc, 0xb4, 0xe1, + 0x9b, 0x0e, 0x37, 0x6b, 0xf8, 0xa6, 0xc3, 0xbb, 0x36, 0x7c, 0xd3, 0xe1, + 0x86, 0x0d, 0xdf, 0x74, 0xb8, 0x61, 0xc3, 0x37, 0x1d, 0x6e, 0xcc, 0xf0, + 0xc5, 0x73, 0x7e, 0x43, 0xdd, 0x1d, 0x6f, 0xd6, 0xf2, 0xb9, 0xe3, 0x4d, + 0x5b, 0x3e, 0x77, 0x7c, 0xd7, 0x96, 0xcf, 0x1d, 0x6f, 0xd6, 0xf2, 0xb9, + 0xe3, 0xcd, 0x5a, 0x3e, 0x77, 0x7c, 0xd7, 0x96, 0xcf, 0x1d, 0x6f, 0xda, + 0xf2, 0xb9, 0xe3, 0xcd, 0x5a, 0x3e, 0x77, 0x7c, 0xd7, 0x96, 0xcf, 0x1d, + 0x6f, 0xd8, 0xf2, 0xb9, 0xe3, 0x0d, 0x5b, 0x3e, 0x77, 0xbc, 0x39, 0xcb, + 0x17, 0xc7, 0x23, 0xcd, 0x4c, 0xdb, 0xdd, 0xac, 0xe5, 0xbb, 0x70, 0x37, + 0x6d, 0xf9, 0x2e, 0xdc, 0xbb, 0xb6, 0x7c, 0x17, 0xee, 0x66, 0x2d, 0xdf, + 0x85, 0xbb, 0x59, 0xcb, 0x77, 0xe1, 0xde, 0xb5, 0xe5, 0xbb, 0x70, 0x37, + 0x6d, 0xf9, 0x2e, 0xdc, 0xcd, 0x5a, 0xbe, 0x0b, 0xf7, 0xae, 0x2d, 0xdf, + 0x85, 0xbb, 0x61, 0xcb, 0x77, 0xe1, 0x6e, 0xd8, 0xf2, 0x5d, 0xb8, 0xf7, + 0x62, 0xf9, 0x16, 0xad, 0x99, 0xec, 0x3c, 0x4e, 0xac, 0x99, 0xc8, 0x95, + 0xca, 0xc6, 0x45, 0xd8, 0xa0, 0x22, 0x99, 0x5d, 0xa8, 0x72, 0xb5, 0x39, + 0xb9, 0xc2, 0x6d, 0x08, 0x35, 0x69, 0xfd, 0x53, 0x2e, 0xb5, 0xa4, 0x58, + 0x6c, 0xe7, 0x16, 0xc4, 0x15, 0x8d, 0x42, 0xdc, 0x12, 0x82, 0x37, 0x6f, + 0xd9, 0xb4, 0x54, 0x83, 0xf3, 0x1b, 0xf2, 0x4c, 0xc0, 0x0f, 0xb6, 0x68, + 0x05, 0xdd, 0x09, 0x06, 0x38, 0x29, 0x46, 0x47, 0x10, 0xa3, 0x93, 0x13, + 0xf9, 0xa4, 0x96, 0x86, 0x3d, 0x67, 0xaa, 0x36, 0x0e, 0x27, 0x81, 0x1a, + 0x23, 0x07, 0x26, 0x1f, 0x2b, 0x6e, 0x72, 0x23, 0x8c, 0xdc, 0x6f, 0x4f, + 0xc7, 0x31, 0xf8, 0xe0, 0x58, 0x62, 0xbf, 0x68, 0xe0, 0x47, 0xd8, 0xcc, + 0x56, 0x6d, 0x3c, 0x6e, 0x0d, 0xc5, 0x58, 0xee, 0xbe, 0xea, 0xd4, 0xad, + 0x2e, 0x20, 0x53, 0x80, 0x0d, 0x1f, 0xab, 0xd4, 0x4e, 0xbc, 0x56, 0xca, + 0x70, 0xdb, 0x72, 0x5b, 0x56, 0x8e, 0x3d, 0xc7, 0x1b, 0xf9, 0x8b, 0x98, + 0xd3, 0x27, 0x0f, 0x88, 0x3d, 0xe0, 0x3e, 0xb7, 0x83, 0x61, 0x78, 0x90, + 0xde, 0x58, 0x7f, 0x90, 0xe6, 0x52, 0xfe, 0x74, 0xc1, 0xe8, 0xaf, 0xab, + 0xd8, 0xb3, 0x21, 0xa6, 0x6a, 0xc5, 0xf0, 0xc7, 0xa7, 0xe2, 0x72, 0x14, + 0xe0, 0x9c, 0x64, 0x98, 0xaf, 0xbc, 0xda, 0x30, 0x00, 0x4e, 0xac, 0x10, + 0x07, 0x17, 0x4f, 0x05, 0xf6, 0xe8, 0x85, 0xc8, 0x0d, 0x6c, 0x22, 0x40, + 0xda, 0x72, 0x60, 0x5d, 0xe7, 0xb0, 0xe4, 0xb9, 0xd4, 0x78, 0xe4, 0x77, + 0xcc, 0xa4, 0xde, 0x82, 0x57, 0xca, 0x66, 0x2d, 0xa1, 0x22, 0x74, 0x1c, + 0xc7, 0xc3, 0x86, 0x34, 0xda, 0xc7, 0xb0, 0x65, 0x7d, 0xf0, 0xed, 0x30, + 0x92, 0xdb, 0xfd, 0x42, 0x4e, 0x55, 0x44, 0xf8, 0xac, 0x8d, 0x3c, 0x6e, + 0x91, 0x5a, 0x38, 0x4f, 0x8c, 0xd9, 0x1d, 0xde, 0x9e, 0x96, 0x5b, 0x09, + 0xc7, 0x6e, 0x14, 0x2c, 0x18, 0x96, 0xed, 0x7b, 0x43, 0xff, 0x46, 0x56, + 0x7e, 0xdb, 0xac, 0xd9, 0x39, 0xb7, 0x68, 0x17, 0x7e, 0x87, 0x11, 0x67, + 0x97, 0x10, 0x57, 0xdc, 0xa0, 0x48, 0xec, 0xf1, 0x18, 0x60, 0x76, 0x1c, + 0x76, 0x0b, 0x36, 0xd8, 0xb5, 0x7f, 0xa4, 0x56, 0xf2, 0x8d, 0x44, 0x9a, + 0x38, 0x82, 0x79, 0xde, 0x6d, 0xb5, 0x5a, 0x39, 0xd1, 0xc8, 0xdf, 0x99, + 0x1d, 0xeb, 0x09, 0x4d, 0x1b, 0xd9, 0x43, 0xe1, 0x78, 0xb4, 0x7b, 0x34, + 0xac, 0xf3, 0x03, 0x76, 0x72, 0xf1, 0x93, 0xd5, 0xc1, 0x07, 0x97, 0x5a, + 0x07, 0x3a, 0xc7, 0xd4, 0xce, 0xdd, 0x32, 0xb5, 0xbd, 0x16, 0x53, 0xdb, + 0x25, 0x4c, 0xb5, 0xef, 0x98, 0xab, 0xf6, 0x7a, 0x6c, 0x31, 0xb8, 0xea, + 0x93, 0x9a, 0x4e, 0xdc, 0xab, 0x54, 0x39, 0x65, 0x20, 0x03, 0xda, 0x88, + 0xae, 0xf6, 0x9e, 0x26, 0x7b, 0xfc, 0xb5, 0xee, 0x66, 0x46, 0x4b, 0x92, + 0x7d, 0x4d, 0x75, 0xd5, 0x7b, 0x41, 0x9a, 0xe3, 0x58, 0x57, 0xce, 0x60, + 0x2f, 0xc1, 0x60, 0x08, 0xe4, 0x89, 0x6b, 0xec, 0xf7, 0x82, 0x15, 0x16, + 0xe5, 0x3d, 0x75, 0x72, 0x31, 0xb4, 0xc2, 0x73, 0x27, 0x1a, 0x4c, 0xac, + 0x06, 0xf6, 0x7f, 0x87, 0x11, 0xce, 0xb6, 0xd3, 0xae, 0x5f, 0x9c, 0x6d, + 0x1e, 0x9c, 0xea, 0x6d, 0xbf, 0x4d, 0x05, 0x71, 0x55, 0xb8, 0x6d, 0x69, + 0xc9, 0x91, 0x57, 0xd3, 0xef, 0xd3, 0x96, 0xc7, 0x3c, 0x6b, 0xaf, 0x28, + 0x77, 0x08, 0x47, 0xed, 0x3f, 0x8a, 0x19, 0x90, 0xa7, 0xb7, 0xac, 0xcc, + 0x19, 0xaa, 0x24, 0x8e, 0x56, 0x0a, 0x41, 0x4b, 0x97, 0xc6, 0x26, 0x3c, + 0x39, 0xbe, 0x96, 0x1d, 0x4b, 0xc8, 0xef, 0xf3, 0x36, 0xfb, 0x9b, 0xb3, + 0xdb, 0x9e, 0x03, 0x83, 0xdc, 0x1c, 0x85, 0x68, 0x95, 0xd9, 0xce, 0x7e, + 0xbf, 0x8f, 0xac, 0x92, 0xed, 0x2f, 0xdb, 0xb2, 0x87, 0xe4, 0xd3, 0x0c, + 0xd7, 0xea, 0x24, 0xed, 0x42, 0xe6, 0xe3, 0x7d, 0xf3, 0x95, 0x4a, 0xaa, + 0xfe, 0x9d, 0xdd, 0xa4, 0x84, 0xd5, 0xb3, 0xa9, 0x8e, 0x14, 0xaf, 0xa9, + 0xc3, 0x76, 0xd9, 0x08, 0x20, 0xb7, 0x69, 0xdd, 0xac, 0x1a, 0xdc, 0x64, + 0xfb, 0xac, 0x4e, 0x50, 0xb5, 0x1f, 0x5a, 0x71, 0x63, 0x14, 0x53, 0x4a, + 0x16, 0xe2, 0x83, 0x8d, 0xa6, 0x48, 0xc1, 0xbe, 0x44, 0x79, 0xfe, 0x61, + 0x11, 0x21, 0x23, 0xbf, 0x34, 0xf7, 0xf9, 0x11, 0xf7, 0x57, 0x55, 0x12, + 0x4f, 0x4d, 0xd6, 0x72, 0x1a, 0x2e, 0x85, 0x59, 0x9c, 0x6f, 0x1a, 0xb0, + 0xc9, 0xf5, 0x03, 0xfd, 0xec, 0xc8, 0xa8, 0x14, 0x3c, 0x0f, 0x9b, 0x62, + 0x39, 0x7f, 0xa8, 0x45, 0x95, 0x80, 0x6c, 0xd0, 0x6a, 0xea, 0x28, 0x54, + 0x69, 0xd7, 0xcc, 0x9d, 0x9c, 0xe7, 0x03, 0xca, 0xa9, 0x7d, 0xaa, 0x1d, + 0xb3, 0x4f, 0xd5, 0xb6, 0xed, 0x45, 0xe7, 0xe8, 0xcc, 0x1e, 0xf7, 0x94, + 0xd0, 0xd5, 0x19, 0x51, 0x6e, 0x41, 0x7d, 0x44, 0x74, 0x21, 0xfa, 0x52, + 0x02, 0xb1, 0x57, 0x62, 0x14, 0x54, 0x1b, 0x2b, 0xc6, 0xae, 0xad, 0x8c, + 0xf4, 0x7d, 0x38, 0xa9, 0xa1, 0x92, 0xae, 0x52, 0x0c, 0x6e, 0xb3, 0x2d, + 0xc9, 0xab, 0x0b, 0x6d, 0x63, 0x65, 0x3e, 0x4a, 0x6a, 0xda, 0x56, 0x3b, + 0x02, 0xb3, 0xd8, 0xf7, 0x55, 0x9b, 0x5c, 0xa5, 0xba, 0xdb, 0xa3, 0x37, + 0xd8, 0x8d, 0x68, 0xc9, 0xa6, 0x0b, 0xc9, 0xdc, 0xca, 0x6d, 0x9a, 0xd6, + 0x73, 0xe6, 0x15, 0xff, 0xd8, 0x27, 0xb2, 0xbc, 0xf9, 0xb4, 0x4f, 0x00, + 0x7d, 0x11, 0x9d, 0xd3, 0x2c, 0xa2, 0x05, 0x50, 0x3a, 0x0f, 0x02, 0x73, + 0x46, 0xa7, 0x2b, 0x54, 0x3e, 0x7c, 0x20, 0xe1, 0x0e, 0xc3, 0x47, 0x59, + 0x4f, 0x2b, 0xe9, 0x6c, 0xa5, 0xaa, 0xb2, 0x4d, 0x55, 0xe9, 0xf2, 0x5f, + 0x2c, 0x25, 0xd7, 0xee, 0x0b, 0x57, 0x1e, 0xc8, 0xe6, 0x9f, 0x69, 0xa9, + 0xec, 0xa5, 0xcd, 0x41, 0xec, 0x0a, 0xe6, 0xfd, 0xb8, 0x14, 0x13, 0x4f, + 0x9f, 0x3e, 0x4d, 0xd8, 0x6d, 0x6e, 0xd1, 0x42, 0x2d, 0xc9, 0x8b, 0x9c, + 0x46, 0x14, 0x11, 0x31, 0xb7, 0x1d, 0xc3, 0x6d, 0x4e, 0x75, 0xa4, 0x00, + 0x70, 0xda, 0x58, 0xf2, 0x5c, 0x3a, 0x9c, 0xe8, 0x6a, 0x6a, 0x89, 0x31, + 0x0a, 0x39, 0x42, 0xe9, 0x46, 0xc8, 0x63, 0xbd, 0x5a, 0xa1, 0x86, 0xed, + 0x76, 0x3b, 0x3f, 0x12, 0x19, 0xc9, 0x71, 0xdd, 0xe2, 0x93, 0x58, 0x39, + 0x2b, 0x99, 0x3b, 0x26, 0x6c, 0x46, 0x38, 0xde, 0x62, 0x4a, 0x6d, 0x95, + 0x3e, 0xba, 0x29, 0x67, 0x6c, 0x0b, 0x7a, 0x61, 0x79, 0x47, 0xcc, 0x5a, + 0x5a, 0x05, 0x62, 0xb5, 0x68, 0x77, 0xa4, 0xb0, 0xc3, 0xdc, 0x8e, 0x66, + 0x23, 0xfd, 0x16, 0xff, 0x91, 0x10, 0x17, 0x0a, 0x4c, 0xda, 0xdd, 0xab, + 0x12, 0xe6, 0x76, 0x5a, 0x7b, 0x83, 0xd1, 0x20, 0xd3, 0x2d, 0x03, 0x56, + 0x7b, 0x85, 0xb2, 0xb4, 0x41, 0x18, 0xea, 0xf3, 0x95, 0x19, 0xa1, 0x62, + 0x8d, 0xcc, 0x77, 0xc3, 0x52, 0x79, 0x25, 0xe6, 0xea, 0xe5, 0x35, 0xdd, + 0xe6, 0xbf, 0xba, 0x54, 0xbf, 0x6c, 0x32, 0xf1, 0xbe, 0x88, 0xc1, 0x7a, + 0x3e, 0x69, 0x7f, 0x5f, 0x8f, 0x1c, 0xb2, 0x54, 0x23, 0x9a, 0x40, 0x56, + 0x5c, 0x93, 0xf8, 0x0c, 0x7c, 0x92, 0x49, 0x0d, 0x5d, 0x90, 0x79, 0x6d, + 0xb1, 0xdc, 0xd4, 0x90, 0xc6, 0x78, 0x52, 0x02, 0x5b, 0x8b, 0x78, 0x3c, + 0xd0, 0xb7, 0x32, 0x03, 0xfd, 0x76, 0x91, 0x5c, 0x09, 0xee, 0xfb, 0x45, + 0xde, 0x4e, 0x4e, 0x9f, 0x1f, 0x0c, 0xf8, 0xaf, 0x4c, 0x41, 0x05, 0xff, + 0x15, 0x8a, 0x7f, 0x7b, 0x45, 0xf1, 0x3f, 0xe8, 0xb3, 0x1b, 0xa5, 0xba, + 0xfc, 0x27, 0xd8, 0xd6, 0x9e, 0x4c, 0x31, 0xe3, 0x47, 0xde, 0x97, 0x8a, + 0xb5, 0xf7, 0x41, 0x38, 0x13, 0x18, 0xe4, 0x93, 0xa5, 0x39, 0x65, 0xa5, + 0xc2, 0x5b, 0x3f, 0x50, 0x06, 0xfa, 0xe3, 0x44, 0x08, 0x37, 0x31, 0x94, + 0x9c, 0x9c, 0x53, 0xc2, 0xc9, 0xc0, 0xf6, 0xce, 0xec, 0x50, 0x63, 0x2a, + 0x3b, 0x8d, 0xac, 0xc3, 0x9f, 0xbc, 0x49, 0xd8, 0x84, 0x92, 0xf2, 0xc9, + 0xc6, 0x94, 0x19, 0x97, 0x78, 0xf9, 0x41, 0xe9, 0xd8, 0x53, 0xb1, 0x67, + 0x8d, 0x09, 0xe4, 0xc2, 0xe7, 0x0b, 0x1b, 0xc5, 0x47, 0x03, 0xc9, 0xdf, + 0x28, 0x3f, 0x5b, 0xad, 0xd4, 0x3d, 0x59, 0x43, 0x57, 0x8c, 0x85, 0x76, + 0x49, 0x8c, 0xce, 0x74, 0xbf, 0x9f, 0x39, 0x7d, 0xbb, 0xad, 0xcd, 0x4d, + 0x7e, 0x28, 0x58, 0xe4, 0xef, 0x97, 0xec, 0xde, 0xcf, 0x69, 0x5d, 0x6a, + 0xc4, 0x57, 0x27, 0x10, 0x9b, 0x3b, 0x81, 0x98, 0x16, 0xb9, 0x02, 0x2d, + 0x93, 0x93, 0x9c, 0x51, 0x34, 0xf7, 0x74, 0x6a, 0xa9, 0x8d, 0x37, 0x1a, + 0xbc, 0xc8, 0xf7, 0xb8, 0x4e, 0xdc, 0x99, 0xb4, 0xa5, 0x2f, 0x4d, 0x92, + 0x4f, 0x89, 0xeb, 0xbe, 0x9e, 0xd0, 0x6d, 0x33, 0x87, 0x09, 0xd0, 0xa1, + 0x73, 0x66, 0x39, 0x43, 0x5c, 0xa0, 0x81, 0x80, 0x1d, 0x04, 0x7f, 0x82, + 0x50, 0x94, 0x07, 0xce, 0x2a, 0xf2, 0xaa, 0x8b, 0x5e, 0x45, 0x4b, 0x89, + 0x1a, 0xa2, 0xa2, 0x0a, 0xc6, 0x85, 0x27, 0xed, 0x43, 0x05, 0x0f, 0x22, + 0xed, 0x6c, 0xee, 0xec, 0xf0, 0x8d, 0x33, 0x08, 0xfc, 0xd0, 0x1f, 0x45, + 0xaf, 0x8e, 0x9e, 0x6c, 0xcd, 0x92, 0x64, 0xb7, 0x40, 0xb7, 0x88, 0x0d, + 0x3e, 0xdd, 0xa8, 0xe9, 0xa4, 0x72, 0x07, 0xae, 0x1d, 0x86, 0x0c, 0x60, + 0x8e, 0x3f, 0x6a, 0xc0, 0x14, 0x70, 0x78, 0x36, 0xb6, 0xe8, 0x0a, 0x32, + 0x74, 0xec, 0x5e, 0x05, 0x5d, 0x97, 0x16, 0x14, 0xf6, 0xba, 0xad, 0xc7, + 0x7b, 0x7b, 0xbb, 0x9d, 0xe4, 0xef, 0x8a, 0xd4, 0x9b, 0x5e, 0xa5, 0xd3, + 0x6a, 0x55, 0x94, 0xca, 0xa8, 0x87, 0x8b, 0xa9, 0xeb, 0x81, 0x16, 0x5d, + 0xa0, 0xb5, 0xbf, 0xb5, 0x75, 0x7e, 0x7e, 0xde, 0x3c, 0xef, 0x36, 0xfd, + 0x60, 0xbc, 0x85, 0xdc, 0xd6, 0x16, 0x08, 0x68, 0xc2, 0x39, 0xe2, 0x32, + 0x7a, 0xa6, 0xc2, 0x6d, 0xbd, 0xca, 0x03, 0x31, 0xa2, 0xff, 0x2a, 0x3a, + 0xfe, 0xa6, 0x28, 0x82, 0x36, 0xc5, 0xe7, 0x7a, 0x15, 0x96, 0xaa, 0x35, + 0x00, 0xa3, 0x58, 0xb8, 0x79, 0xdc, 0xde, 0xd9, 0x7e, 0xbc, 0xdd, 0x6d, + 0x23, 0xe1, 0x32, 0x93, 0x10, 0xe0, 0x79, 0x27, 0xf1, 0xbc, 0xb5, 0x98, + 0x3e, 0x8b, 0x92, 0x0e, 0xc1, 0x43, 0x46, 0xf6, 0x18, 0x61, 0x3f, 0x22, + 0xa3, 0x25, 0x58, 0x14, 0x48, 0xad, 0x18, 0x8e, 0x5b, 0x2d, 0x7b, 0x30, + 0x68, 0xe7, 0x39, 0xce, 0x86, 0x10, 0x89, 0xc5, 0x56, 0x1d, 0xa3, 0x58, + 0x9c, 0x43, 0xbd, 0x08, 0x97, 0xb3, 0xf5, 0x2a, 0x6c, 0xb6, 0xee, 0xad, + 0x8a, 0x63, 0x5d, 0x91, 0x7c, 0xc8, 0x55, 0x37, 0x4b, 0x61, 0x39, 0xea, + 0x5d, 0x69, 0xc1, 0x80, 0xaf, 0x2c, 0x5b, 0x97, 0xcc, 0xc5, 0x4e, 0x45, + 0x9e, 0x81, 0x99, 0x02, 0x8c, 0x82, 0xf0, 0x82, 0xaa, 0x06, 0x82, 0x78, + 0x0c, 0xa0, 0x9e, 0xaa, 0xa3, 0x7a, 0x83, 0x89, 0x0f, 0xae, 0xe5, 0xe5, + 0x11, 0x95, 0x38, 0x98, 0x07, 0x40, 0x5c, 0x8d, 0xd7, 0x6e, 0x7d, 0xff, + 0xc9, 0x16, 0xc1, 0xad, 0xc4, 0x52, 0x4a, 0xab, 0x0b, 0xb9, 0xea, 0xb4, + 0x6e, 0xcd, 0x55, 0xa7, 0x72, 0xb8, 0x90, 0xa5, 0x27, 0x5b, 0xe3, 0xa2, + 0xfe, 0x44, 0xfa, 0x6e, 0xd2, 0x4d, 0xf7, 0x5d, 0xa5, 0x3b, 0xeb, 0x00, + 0x1d, 0x28, 0x97, 0x81, 0xc4, 0x07, 0x35, 0x56, 0x33, 0x39, 0x9e, 0x2d, + 0x8b, 0xc9, 0xc3, 0x52, 0xa6, 0x50, 0xd2, 0x08, 0xd3, 0xc8, 0x95, 0x3e, + 0x5a, 0x96, 0x4e, 0x23, 0x8b, 0xac, 0x92, 0xca, 0x42, 0xd7, 0x34, 0x07, + 0xd6, 0xb4, 0xcb, 0x4c, 0x51, 0xf6, 0xa0, 0x5a, 0xcc, 0x8b, 0x1a, 0x7e, + 0x68, 0x57, 0x8d, 0xc6, 0xb1, 0x12, 0x1e, 0x3a, 0xf7, 0x85, 0x1a, 0xd3, + 0xad, 0x87, 0x2c, 0xae, 0x15, 0xca, 0xf2, 0xc2, 0x4b, 0x2c, 0xde, 0xa2, + 0x9c, 0x85, 0x98, 0x00, 0xe4, 0xe9, 0x56, 0x40, 0xe7, 0x8d, 0xc4, 0x30, + 0x36, 0x13, 0x72, 0xe0, 0x43, 0x79, 0xc7, 0xb2, 0x31, 0xe3, 0x6e, 0xc8, + 0x67, 0x70, 0x1b, 0xcc, 0x8d, 0x2d, 0x49, 0xdf, 0x02, 0x50, 0x39, 0x3c, + 0x77, 0x46, 0xce, 0x93, 0x2d, 0xe7, 0xf0, 0xa1, 0xd7, 0x0f, 0x67, 0x07, + 0xf2, 0x93, 0x89, 0xe8, 0x02, 0xe9, 0x25, 0xa6, 0xca, 0x21, 0x55, 0x19, + 0x95, 0x25, 0x90, 0x43, 0xc9, 0xce, 0x61, 0xcc, 0x8a, 0x4a, 0x96, 0x5f, + 0x4b, 0x6b, 0x00, 0xad, 0x89, 0x4b, 0xae, 0xc9, 0x75, 0x88, 0x4e, 0x65, + 0xbb, 0x27, 0xc4, 0xfc, 0x09, 0xee, 0xf1, 0xbb, 0x6d, 0x05, 0xc0, 0xc9, + 0x0d, 0xeb, 0x00, 0xf5, 0xe4, 0x39, 0x91, 0xb4, 0x05, 0xd9, 0xa6, 0x58, + 0x15, 0x8b, 0x24, 0x4e, 0x78, 0x10, 0x33, 0x71, 0xdc, 0xa2, 0x36, 0x55, + 0x17, 0x9d, 0xf9, 0xde, 0x73, 0xba, 0xca, 0x0a, 0xf7, 0x73, 0x86, 0x27, + 0x81, 0x50, 0xe5, 0xaa, 0x35, 0x12, 0x5f, 0x99, 0xac, 0xe8, 0xc0, 0x1c, + 0x66, 0x89, 0xe2, 0xdc, 0x48, 0x49, 0xd6, 0x3a, 0x2e, 0x1f, 0x57, 0x99, + 0x89, 0x2c, 0xa8, 0xbb, 0xd6, 0xcc, 0x74, 0x1a, 0x3a, 0xf8, 0x82, 0xe1, + 0x5f, 0x1d, 0xfa, 0x87, 0xb3, 0xc2, 0x87, 0xd0, 0x97, 0x75, 0x51, 0x3e, + 0x70, 0xcb, 0x87, 0x27, 0xb0, 0x41, 0x3e, 0xee, 0x9f, 0x49, 0x37, 0x97, + 0x43, 0x08, 0xab, 0xf4, 0xd2, 0xbc, 0x9d, 0x2a, 0x70, 0xd7, 0x16, 0x0e, + 0x40, 0xd2, 0x2d, 0xe7, 0x26, 0xca, 0x7b, 0xeb, 0x15, 0x34, 0xc6, 0x40, + 0x36, 0x86, 0xef, 0x1d, 0xb3, 0xf7, 0xcb, 0x3e, 0x7e, 0x55, 0x9c, 0x01, + 0x75, 0x8d, 0xb2, 0xf9, 0x92, 0xcc, 0x29, 0x5c, 0xd3, 0x12, 0x10, 0x48, + 0x5a, 0xe2, 0x52, 0x4c, 0x94, 0xd5, 0xc8, 0x70, 0x00, 0x24, 0xed, 0x58, + 0x39, 0x0a, 0xfc, 0xeb, 0xc4, 0xc9, 0x74, 0x62, 0xe0, 0x79, 0x8e, 0xbf, + 0xb7, 0xf3, 0x69, 0xb5, 0x5d, 0x5b, 0x50, 0x6b, 0xa3, 0x9a, 0x87, 0x8c, + 0x5f, 0xf7, 0x94, 0xf6, 0xbe, 0x4c, 0x35, 0xbc, 0xfc, 0x44, 0x5c, 0xb4, + 0x0b, 0x54, 0x7c, 0x15, 0xa5, 0x59, 0x58, 0xc1, 0xce, 0x6a, 0x15, 0xec, + 0x96, 0x57, 0xb0, 0x73, 0x93, 0x0a, 0x76, 0x8a, 0x2a, 0xd8, 0xb9, 0x8f, + 0x0a, 0x76, 0x6f, 0x5d, 0xc1, 0xee, 0x4d, 0x2a, 0xd8, 0x2d, 0xaa, 0x60, + 0xf7, 0x96, 0x15, 0xe4, 0xbc, 0x15, 0x4d, 0xc5, 0xa2, 0xbe, 0xbe, 0xb7, + 0x4a, 0x8f, 0xd6, 0xf1, 0x8a, 0xb8, 0x67, 0xc7, 0x85, 0x96, 0x9a, 0x02, + 0xd4, 0x96, 0xaf, 0xc2, 0x58, 0xc9, 0x67, 0x59, 0xd4, 0x82, 0x26, 0x40, + 0x5b, 0x39, 0x5c, 0xda, 0xf2, 0x5b, 0xcb, 0x35, 0x63, 0x19, 0x69, 0x0e, + 0x37, 0xd0, 0x96, 0x03, 0x78, 0xe9, 0x34, 0x4e, 0x06, 0x34, 0x44, 0x71, + 0xe2, 0xb2, 0x92, 0x32, 0x54, 0x29, 0x03, 0xe5, 0x32, 0xce, 0x56, 0x41, + 0x25, 0x18, 0x0d, 0x74, 0x68, 0x69, 0x9d, 0x65, 0xf1, 0x33, 0xdb, 0x9d, + 0xa3, 0x3c, 0x42, 0xc7, 0xfa, 0xf6, 0x60, 0x8e, 0x10, 0x55, 0x68, 0x81, + 0x9f, 0xef, 0x44, 0x86, 0x69, 0xe6, 0xec, 0x18, 0x77, 0x65, 0x73, 0x02, + 0x19, 0x07, 0x82, 0x06, 0x47, 0xfe, 0xba, 0xa5, 0x50, 0x18, 0xc7, 0xbd, + 0x89, 0x85, 0xb1, 0x6f, 0x50, 0x30, 0x7d, 0x70, 0x57, 0x39, 0xa4, 0xcf, + 0x5b, 0x8a, 0x85, 0x50, 0xdc, 0x9b, 0x54, 0x08, 0xf9, 0x06, 0x85, 0x42, + 0x2b, 0x8a, 0xa0, 0x47, 0x5f, 0xb7, 0x15, 0x0b, 0xe1, 0xb8, 0x3f, 0xb9, + 0x10, 0xf6, 0x4d, 0x0a, 0x46, 0x46, 0x41, 0x63, 0xcb, 0xa8, 0x43, 0x5d, + 0x7b, 0xea, 0x66, 0x98, 0xae, 0xfc, 0x3e, 0x58, 0xcb, 0x47, 0xb7, 0xf4, + 0x05, 0x65, 0x10, 0x78, 0x1f, 0x53, 0x7d, 0xf8, 0x39, 0x43, 0x11, 0x92, + 0xd3, 0x45, 0x6e, 0xe8, 0x2d, 0xc5, 0x2f, 0x19, 0xbe, 0x37, 0xf9, 0x4b, + 0xf4, 0x1b, 0x6c, 0x00, 0x0e, 0x24, 0xdf, 0xad, 0xfc, 0x69, 0x9e, 0x33, + 0x15, 0xc1, 0x1d, 0x08, 0x1b, 0xcc, 0xdd, 0xe3, 0x80, 0x01, 0xec, 0xb7, + 0x1f, 0x32, 0x24, 0x26, 0x31, 0xe6, 0xab, 0xa1, 0x2b, 0xab, 0xf9, 0xff, + 0x14, 0x51, 0x38, 0x58, 0x5a, 0xa7, 0xf5, 0x26, 0x32, 0xab, 0x3a, 0x3b, + 0x1d, 0x55, 0x77, 0x76, 0xe9, 0x8e, 0xc5, 0xf8, 0x75, 0xdf, 0x5d, 0xc4, + 0x23, 0xe2, 0xb2, 0x31, 0x28, 0xa2, 0xb2, 0x2b, 0x10, 0x66, 0xe2, 0xb2, + 0x4c, 0x82, 0x12, 0x24, 0x14, 0x0b, 0x27, 0xb5, 0x94, 0x1f, 0x13, 0x2f, + 0x5f, 0x19, 0x2c, 0x0a, 0x61, 0xab, 0x30, 0xfe, 0x63, 0xac, 0xf0, 0x58, + 0xe4, 0x0c, 0x49, 0x64, 0x2b, 0xb0, 0xf7, 0x64, 0x6b, 0x85, 0xfe, 0xb1, + 0x75, 0x7b, 0xdf, 0x4a, 0x46, 0xea, 0x70, 0xfb, 0x37, 0x22, 0x87, 0x79, + 0xb5, 0x50, 0x2b, 0x05, 0xb7, 0xd4, 0x0e, 0x36, 0xd8, 0xa1, 0x22, 0xb2, + 0xbc, 0x21, 0xcf, 0xc3, 0x37, 0x12, 0x74, 0xb5, 0x86, 0x34, 0xbd, 0x52, + 0x61, 0xac, 0xa4, 0x09, 0xde, 0xae, 0xe5, 0x78, 0x45, 0x93, 0x02, 0xb7, + 0xf7, 0xd7, 0x14, 0xeb, 0xcc, 0x0f, 0x74, 0xda, 0x2d, 0x27, 0xf4, 0xc9, + 0xa5, 0x09, 0xbc, 0x8e, 0xa3, 0xb4, 0xff, 0x4a, 0x72, 0x45, 0x44, 0x63, + 0x0c, 0xfa, 0x3a, 0xd1, 0xf5, 0x94, 0x47, 0x72, 0xb2, 0x34, 0x1a, 0xb9, + 0xa2, 0x41, 0x29, 0x33, 0x22, 0xdb, 0x09, 0xc3, 0xf0, 0x1a, 0x26, 0x76, + 0xbe, 0x54, 0xa9, 0x92, 0x16, 0xc1, 0x55, 0x25, 0x8a, 0x0d, 0xc2, 0xd2, + 0xde, 0xbc, 0x6a, 0xb4, 0x33, 0xcf, 0xb0, 0xd9, 0x47, 0x70, 0x34, 0x1a, + 0x91, 0x51, 0x32, 0x3c, 0x97, 0x21, 0xcb, 0x4e, 0xd9, 0x12, 0x77, 0xc6, + 0x2e, 0xef, 0xa3, 0x3c, 0xf6, 0x69, 0x76, 0xe4, 0x9e, 0xbe, 0xca, 0xba, + 0x1d, 0x4f, 0xef, 0x4c, 0xac, 0x68, 0xa5, 0x68, 0xe4, 0x6a, 0xb1, 0x12, + 0x4e, 0x9a, 0x67, 0x6b, 0x14, 0x39, 0x0c, 0xfd, 0xb1, 0xdc, 0xcd, 0x94, + 0x9e, 0xec, 0x5a, 0xbc, 0x34, 0xb3, 0xc2, 0x24, 0x9d, 0xfe, 0x96, 0x8f, + 0xf4, 0x37, 0xe9, 0xaa, 0xcb, 0xdb, 0x54, 0xaa, 0xca, 0xb7, 0x88, 0x54, + 0x88, 0xe0, 0x9e, 0x9b, 0x33, 0x51, 0x5e, 0xed, 0x78, 0xa1, 0xf8, 0x26, + 0x6f, 0xea, 0x48, 0xbc, 0x8a, 0x03, 0x8f, 0x40, 0xc5, 0x71, 0x15, 0x59, + 0xab, 0x7b, 0x50, 0x83, 0x19, 0x57, 0x97, 0x78, 0x59, 0x1a, 0x3f, 0x30, + 0x8d, 0x6f, 0x0a, 0xde, 0x61, 0x73, 0xb3, 0x50, 0x56, 0x96, 0x8a, 0x5c, + 0x84, 0xbb, 0x0f, 0x9b, 0x5e, 0xaa, 0x28, 0x2b, 0x39, 0x37, 0x3f, 0xf1, + 0xc3, 0x88, 0x16, 0x52, 0xa4, 0x02, 0xad, 0xd4, 0x20, 0x66, 0x40, 0x9c, + 0xc8, 0xc2, 0xf7, 0x3b, 0x1e, 0xae, 0x5d, 0x6f, 0x8b, 0xae, 0xfb, 0x58, + 0xa9, 0xf2, 0x6f, 0x7e, 0xfe, 0xe1, 0x03, 0x09, 0xe0, 0x46, 0x95, 0x9f, + 0xfe, 0x21, 0x8a, 0x4e, 0x20, 0x81, 0x5b, 0xfa, 0x71, 0xf7, 0x50, 0xfb, + 0xd5, 0x5a, 0x9e, 0x2a, 0xff, 0xad, 0x1f, 0xac, 0x53, 0x79, 0x39, 0x41, + 0xc9, 0x4c, 0x2a, 0x76, 0x77, 0x76, 0xba, 0x3b, 0x09, 0x91, 0xe0, 0x1c, + 0xd3, 0x7f, 0x9e, 0x48, 0x76, 0x57, 0x16, 0xc9, 0x2f, 0xc2, 0xa5, 0xd6, + 0x74, 0x81, 0x3e, 0xd0, 0xa6, 0x9c, 0xff, 0xe2, 0xca, 0x7f, 0x8b, 0xb2, + 0x6b, 0x54, 0x7e, 0x06, 0x70, 0x7a, 0x9f, 0x55, 0x42, 0x00, 0x94, 0xf4, + 0x6f, 0x11, 0xc0, 0x2a, 0xa1, 0xef, 0x5b, 0xfa, 0x7e, 0xdd, 0xf4, 0xa4, + 0xf0, 0xb9, 0x77, 0xe3, 0xbe, 0xd3, 0x56, 0x7d, 0xe7, 0x71, 0x25, 0x3d, + 0x51, 0x1c, 0x78, 0xb7, 0xec, 0x3a, 0x3b, 0x37, 0x92, 0xdd, 0xaa, 0x95, + 0x7e, 0xee, 0xcf, 0x6f, 0x5e, 0xe7, 0x8c, 0xbd, 0x30, 0xf5, 0x1e, 0xf8, + 0xf3, 0xff, 0xec, 0x6a, 0xbf, 0x7f, 0xf9, 0xec, 0xdd, 0xea, 0x3e, 0xbe, + 0xfc, 0x89, 0x9d, 0x7b, 0xfe, 0x06, 0xbd, 0xfc, 0x6e, 0xca, 0x23, 0xf4, + 0x6e, 0xdb, 0x46, 0xed, 0xdd, 0x64, 0x03, 0xe1, 0x78, 0xe9, 0xbf, 0xa3, + 0x79, 0x36, 0xd0, 0xa3, 0x77, 0x95, 0xd8, 0xc6, 0xc7, 0x91, 0x7d, 0xfb, + 0x91, 0xf0, 0x07, 0xbf, 0x0f, 0xcf, 0x10, 0x29, 0xe4, 0xb7, 0x6e, 0xea, + 0xe0, 0x58, 0x18, 0xd9, 0xb7, 0x1d, 0x0e, 0x1f, 0xdf, 0x48, 0x7a, 0x2b, + 0x56, 0xdb, 0x9f, 0xdd, 0x4f, 0xad, 0xfd, 0xd9, 0xbf, 0xa3, 0xd2, 0x1b, + 0x50, 0x99, 0x64, 0x4f, 0x7b, 0xf7, 0xed, 0x87, 0xf7, 0x47, 0xbf, 0x5c, + 0xd7, 0x34, 0xe0, 0x05, 0x7d, 0x38, 0x6a, 0xfd, 0x6f, 0x32, 0x0e, 0x60, + 0xf9, 0xc5, 0xd3, 0x6f, 0x8e, 0x6e, 0xc0, 0x33, 0x8e, 0x24, 0x6e, 0x32, + 0x6e, 0x91, 0x61, 0xfa, 0xe5, 0xd3, 0x37, 0x6f, 0x9e, 0xde, 0x80, 0xeb, + 0xb1, 0x3d, 0x9d, 0xda, 0xff, 0x3e, 0xb6, 0x8f, 0x5f, 0xfd, 0xe6, 0x26, + 0xb2, 0xc6, 0xcc, 0xf1, 0xae, 0x65, 0x7d, 0xdf, 0x5d, 0xa3, 0xdc, 0xc7, + 0xd4, 0x87, 0x64, 0xe4, 0x09, 0x19, 0xe5, 0x72, 0x9a, 0x6d, 0x39, 0xca, + 0xe1, 0x5c, 0x38, 0x83, 0xd7, 0xb8, 0x8b, 0x6e, 0x91, 0x27, 0x2e, 0x57, + 0xd8, 0x8f, 0xf1, 0xc6, 0xa6, 0x61, 0x91, 0x9f, 0x53, 0x36, 0x4d, 0xc5, + 0x03, 0xcc, 0x3e, 0x83, 0x29, 0x00, 0x2b, 0x7a, 0x41, 0x45, 0x9d, 0xcb, + 0x5a, 0x91, 0xc6, 0x0b, 0xcc, 0xfa, 0x57, 0xa2, 0x41, 0xe1, 0x81, 0x1b, + 0xd2, 0x78, 0x86, 0x9d, 0xa2, 0x2b, 0xd1, 0xa0, 0x93, 0x11, 0x37, 0xa5, + 0x11, 0xad, 0x26, 0xaa, 0x7e, 0x74, 0x53, 0x49, 0x81, 0x02, 0xb6, 0xd6, + 0xac, 0x4a, 0x04, 0xda, 0xb2, 0x16, 0x1d, 0x46, 0xbb, 0x66, 0xff, 0xb8, + 0x2b, 0xc5, 0x76, 0xed, 0x33, 0xf1, 0x96, 0x42, 0xe0, 0x6b, 0x8c, 0xab, + 0x66, 0x12, 0xc9, 0xc5, 0x3d, 0x14, 0xbf, 0x8b, 0x49, 0x94, 0x3e, 0x58, + 0xa1, 0x8e, 0xfd, 0xf2, 0xeb, 0x44, 0xee, 0x69, 0x50, 0x8d, 0xa5, 0x15, + 0x6f, 0x9a, 0x4c, 0x45, 0xf2, 0x1b, 0x21, 0xaa, 0xa5, 0x57, 0x26, 0x65, + 0x7e, 0x6c, 0xde, 0x92, 0xef, 0x9a, 0xa1, 0xf7, 0x3e, 0x26, 0xde, 0xef, + 0x97, 0x7c, 0x57, 0xe6, 0x92, 0x75, 0x58, 0x7e, 0xf9, 0x59, 0x76, 0x31, + 0x96, 0xa8, 0x62, 0x2d, 0x96, 0xbf, 0x8f, 0x15, 0x2b, 0xf1, 0x7e, 0xcb, + 0x55, 0xd7, 0x42, 0x32, 0x10, 0xf2, 0xfd, 0x11, 0x5c, 0x3b, 0xf9, 0x33, + 0x6e, 0xa8, 0xf8, 0x34, 0x3b, 0x8b, 0xb9, 0x44, 0x60, 0x87, 0x4f, 0x6c, + 0x7e, 0xa5, 0xb7, 0x3c, 0x35, 0x11, 0xe2, 0xd8, 0xc4, 0xd8, 0xc1, 0x31, + 0xaf, 0x3e, 0x8e, 0xed, 0x4c, 0xb7, 0x5e, 0xd8, 0xfd, 0xd7, 0x76, 0xbf, + 0xf1, 0x7a, 0x8e, 0x8d, 0xa3, 0xde, 0x96, 0x79, 0xcf, 0x7c, 0x25, 0x41, + 0x8e, 0x5f, 0x59, 0x06, 0x51, 0xa2, 0x69, 0xe9, 0x0d, 0xf3, 0x27, 0x7d, + 0xd7, 0xc6, 0xf3, 0xe1, 0xb7, 0x81, 0xff, 0x7b, 0x1a, 0x46, 0x26, 0x3e, + 0xc5, 0xf2, 0xec, 0x43, 0x1c, 0xf2, 0xff, 0xc7, 0x5f, 0x71, 0x0c, 0xac, + 0xfd, 0x58, 0xd6, 0xc9, 0x5a, 0x67, 0xcf, 0x73, 0x61, 0x13, 0xfa, 0x33, + 0xe1, 0x95, 0x34, 0xa1, 0x6e, 0x36, 0xa5, 0x69, 0xb7, 0x6f, 0xb7, 0xb8, + 0xad, 0x9c, 0x78, 0x7f, 0x6c, 0xae, 0xa5, 0xa4, 0x38, 0x16, 0xed, 0xae, + 0xc7, 0x5d, 0x3e, 0xce, 0x2c, 0x39, 0x4e, 0x3a, 0x23, 0xab, 0x8a, 0x7d, + 0xb3, 0x78, 0x45, 0x1d, 0x36, 0xe7, 0x36, 0x29, 0x56, 0xf3, 0x74, 0x0c, + 0x16, 0x9b, 0x7c, 0x11, 0xc9, 0xbb, 0x51, 0xf5, 0xd1, 0x9b, 0xe3, 0x57, + 0x47, 0x8f, 0x6a, 0x5f, 0xf5, 0x7a, 0x8d, 0xb6, 0xf5, 0xc7, 0x3f, 0x5a, + 0x06, 0x16, 0xe7, 0xfb, 0x7e, 0x89, 0xb0, 0x33, 0xb4, 0xd4, 0x00, 0x7f, + 0x08, 0x9c, 0x21, 0x4a, 0x6f, 0x3d, 0xaa, 0x59, 0x87, 0xf1, 0x3b, 0x10, + 0xcc, 0x1f, 0x55, 0x05, 0xaf, 0x70, 0x6e, 0xba, 0xfe, 0xb8, 0x5a, 0xc1, + 0x9b, 0x8e, 0x87, 0x22, 0x92, 0x9b, 0xae, 0x6b, 0x07, 0x69, 0xc0, 0x21, + 0x4e, 0x61, 0x4e, 0x89, 0x0d, 0x34, 0xe8, 0x91, 0x7c, 0xd3, 0xf2, 0xb3, + 0xcb, 0x57, 0xc3, 0x6a, 0xee, 0xac, 0x51, 0xad, 0xc9, 0x9a, 0xd6, 0xd4, + 0x67, 0xa3, 0x7b, 0xd6, 0x23, 0xee, 0x27, 0x8f, 0x56, 0x45, 0x18, 0xaf, + 0xa3, 0x15, 0xa1, 0x9a, 0xa0, 0x36, 0x49, 0x4c, 0xa9, 0x83, 0x52, 0x4a, + 0x94, 0x79, 0xe1, 0xf2, 0x29, 0x3b, 0xbd, 0x10, 0x86, 0x3a, 0x8e, 0x1c, + 0x8f, 0x97, 0x57, 0x42, 0x80, 0xfe, 0x00, 0xf7, 0xd7, 0x58, 0xd8, 0x56, + 0x61, 0xc1, 0xab, 0xc0, 0x29, 0xe9, 0x73, 0x4f, 0x1f, 0x1d, 0xe0, 0xf3, + 0xac, 0x0c, 0xf0, 0xdc, 0x9f, 0x5d, 0xd2, 0x65, 0x4b, 0x71, 0x8e, 0xe0, + 0x83, 0xd2, 0x15, 0x52, 0xb5, 0xea, 0x91, 0x37, 0x76, 0x9d, 0x70, 0x52, + 0xb3, 0xce, 0xa4, 0xe8, 0xeb, 0x19, 0x48, 0x27, 0x6a, 0x32, 0x92, 0x57, + 0x23, 0xcb, 0x4e, 0xa2, 0xb6, 0x9c, 0x10, 0x53, 0x94, 0x30, 0x84, 0xcc, + 0xf8, 0x75, 0xeb, 0x61, 0x9d, 0x90, 0x5e, 0xf2, 0x0b, 0x76, 0x88, 0x45, + 0x7b, 0xee, 0xf2, 0xab, 0xa8, 0x15, 0x7e, 0x20, 0xe1, 0xb3, 0x81, 0x98, + 0xc5, 0x58, 0xae, 0xae, 0x49, 0x4f, 0x37, 0xa7, 0xf0, 0xf6, 0x13, 0x2d, + 0xcb, 0x00, 0x27, 0x14, 0xf3, 0xc6, 0x1d, 0x0c, 0xaa, 0x7c, 0xa5, 0x6e, + 0xb2, 0x69, 0x9b, 0x3b, 0x65, 0x99, 0xbe, 0x9b, 0xcc, 0x55, 0xe5, 0x4c, + 0xe6, 0x2f, 0x5e, 0x59, 0xbf, 0xec, 0x56, 0x11, 0x5f, 0xf8, 0x58, 0x4b, + 0xc2, 0xc5, 0xdb, 0xe2, 0x01, 0x1c, 0xff, 0x4e, 0x02, 0xa0, 0xd9, 0x92, + 0x30, 0xf2, 0x31, 0x0f, 0x16, 0xef, 0x35, 0x07, 0xcc, 0x7b, 0xfd, 0xbb, + 0x80, 0xd0, 0x51, 0x10, 0xf8, 0x41, 0x1b, 0x40, 0x08, 0xf0, 0xb8, 0x43, + 0x38, 0x56, 0x91, 0xca, 0x61, 0x31, 0x19, 0x76, 0x9b, 0x16, 0x74, 0x1e, + 0xc7, 0x31, 0xcb, 0x50, 0x74, 0x80, 0x02, 0x22, 0xc0, 0x2a, 0x79, 0xd3, + 0xfa, 0xd6, 0xa5, 0x33, 0xca, 0x38, 0x55, 0x29, 0x5b, 0xf4, 0xfd, 0xd1, + 0xf3, 0x77, 0x6f, 0xdf, 0x1e, 0x3d, 0xff, 0xa0, 0xde, 0x1f, 0x4d, 0x88, + 0xa3, 0x00, 0x6d, 0x3f, 0x86, 0x42, 0x36, 0x93, 0x08, 0x5d, 0xdc, 0x6a, + 0xf5, 0x86, 0x46, 0x40, 0x20, 0xd3, 0x37, 0x5c, 0x4d, 0xe9, 0xd9, 0x6a, + 0x36, 0x01, 0x68, 0x6d, 0x6d, 0xe1, 0xb5, 0x88, 0x4e, 0x18, 0x37, 0x55, + 0x03, 0xc7, 0xaa, 0x08, 0x06, 0x49, 0x60, 0xdc, 0xa8, 0x07, 0x2e, 0xf0, + 0x52, 0x76, 0x84, 0x33, 0x18, 0x2f, 0x12, 0x2f, 0x45, 0x54, 0x4b, 0x13, + 0x53, 0x23, 0x43, 0x92, 0x9e, 0x2a, 0x78, 0x6f, 0x24, 0x9f, 0xfb, 0xde, + 0xc8, 0x19, 0x27, 0x08, 0x0e, 0x38, 0x61, 0x2e, 0x5f, 0xec, 0x2b, 0xa9, + 0xa6, 0x4b, 0x7c, 0x14, 0xfd, 0x10, 0x5d, 0x9d, 0xda, 0x48, 0x0a, 0x9c, + 0x95, 0x5b, 0x26, 0x8a, 0x28, 0x2c, 0x2a, 0xf2, 0x1e, 0xc7, 0x19, 0x2f, + 0x51, 0x80, 0xbf, 0x8b, 0x00, 0xb8, 0xcd, 0x00, 0xc0, 0xdf, 0x9c, 0x02, + 0xa4, 0xe6, 0x16, 0x1f, 0x29, 0x75, 0xbc, 0x7c, 0x8a, 0x5b, 0xd2, 0xb4, + 0xd6, 0x3d, 0xc8, 0x44, 0x24, 0x39, 0x49, 0xb2, 0xa9, 0x4c, 0x1f, 0xb2, + 0x3e, 0xca, 0x5f, 0xc9, 0xcc, 0xa9, 0x39, 0x36, 0x09, 0x80, 0x57, 0x23, + 0xb2, 0x33, 0x68, 0x3a, 0xb0, 0x4a, 0x8c, 0xa9, 0xbd, 0x1a, 0x78, 0x05, + 0x38, 0x86, 0x44, 0xa4, 0xb0, 0xbc, 0xbc, 0x08, 0x33, 0x1b, 0xdf, 0x1b, + 0xc7, 0xfa, 0x79, 0x2a, 0xc4, 0x8c, 0xae, 0x67, 0x98, 0xc2, 0xac, 0xa3, + 0x9c, 0x1d, 0x59, 0xa9, 0xde, 0x39, 0xf4, 0x45, 0xe8, 0x3d, 0x8a, 0xc8, + 0x8c, 0x9c, 0x02, 0x2c, 0xff, 0xea, 0xf1, 0x94, 0xa2, 0x63, 0xa2, 0x32, + 0x9f, 0x61, 0x99, 0xda, 0x6f, 0x0c, 0xc9, 0x3e, 0x29, 0xfb, 0x8d, 0x37, + 0x9b, 0x9e, 0xe2, 0xaa, 0x88, 0x49, 0x00, 0x3e, 0xea, 0xf1, 0x9b, 0xcc, + 0x21, 0xf1, 0xa3, 0xe1, 0x58, 0xa4, 0x1a, 0x85, 0x1d, 0x5e, 0x6a, 0x62, + 0xfa, 0x4e, 0x77, 0xe4, 0x21, 0x35, 0x64, 0xba, 0x77, 0xf3, 0xf6, 0x56, + 0x24, 0xbf, 0xa4, 0xef, 0x64, 0x06, 0xed, 0xf0, 0x44, 0xfa, 0x33, 0x7c, + 0x25, 0x93, 0x79, 0xf2, 0x44, 0x92, 0xc4, 0x77, 0x32, 0x83, 0x9a, 0xe5, + 0x04, 0xc8, 0xc0, 0x32, 0x11, 0xc7, 0x9e, 0x41, 0x24, 0x64, 0x6e, 0xb4, + 0x50, 0xd9, 0x24, 0x21, 0x8f, 0x6e, 0xb4, 0xc8, 0x16, 0x77, 0x21, 0xec, + 0xb2, 0xb2, 0x94, 0x27, 0x0b, 0xb6, 0x92, 0xc5, 0xe2, 0x38, 0x3a, 0xca, + 0x1d, 0xcb, 0x39, 0xb0, 0xda, 0x4c, 0x96, 0x84, 0xd2, 0xb1, 0x39, 0x00, + 0xbd, 0xa0, 0x77, 0x7c, 0x59, 0xaf, 0x8f, 0xbe, 0xc1, 0xb5, 0x45, 0xaa, + 0xb4, 0x18, 0x96, 0x96, 0xf1, 0x67, 0xd4, 0xbd, 0xec, 0xd5, 0x4a, 0xe8, + 0xfd, 0x41, 0x2c, 0x1e, 0xdd, 0xa9, 0x2c, 0x9d, 0x96, 0xe7, 0x5a, 0x0f, + 0x78, 0x86, 0x75, 0x99, 0x92, 0x07, 0x36, 0x4b, 0xac, 0x04, 0xac, 0x7e, + 0xe6, 0xa1, 0xcc, 0x5a, 0x24, 0xa0, 0xe8, 0xa7, 0x75, 0x2c, 0x02, 0x0c, + 0x7b, 0xc5, 0x70, 0xdf, 0xfa, 0x2c, 0x10, 0x1a, 0x0d, 0xf9, 0x67, 0x16, + 0xca, 0xac, 0x64, 0x69, 0x6c, 0xf4, 0x3b, 0x47, 0x38, 0xbd, 0xee, 0xa3, + 0x41, 0xbf, 0x55, 0x8b, 0x3a, 0x19, 0x50, 0xb3, 0xe8, 0x01, 0xc0, 0xb7, + 0xdc, 0xb4, 0x24, 0xd5, 0x63, 0xb5, 0xff, 0x2f, 0x0d, 0x6d, 0x56, 0x0b, + 0x48, 0x42, 0x30, 0x0c, 0x33, 0x6e, 0x05, 0x4e, 0x49, 0x41, 0x9a, 0x00, + 0x3b, 0x00, 0xf1, 0x65, 0xbd, 0xa3, 0x19, 0x4d, 0x0a, 0x24, 0x0e, 0x6a, + 0xc7, 0xa8, 0x5e, 0x7e, 0xfb, 0xea, 0x9d, 0x45, 0x09, 0x79, 0xb0, 0x77, + 0x33, 0x76, 0x3e, 0x62, 0x50, 0xf5, 0x9c, 0x81, 0x34, 0xb1, 0x3b, 0xa2, + 0x2a, 0xaf, 0x3d, 0xcc, 0x82, 0x98, 0x58, 0x19, 0xa9, 0x1e, 0x6c, 0x96, + 0x75, 0x4c, 0x9b, 0x26, 0x73, 0x60, 0x26, 0x3a, 0x45, 0x5d, 0x91, 0xa2, + 0x4d, 0xe8, 0xc6, 0x81, 0x7a, 0xc9, 0x68, 0x16, 0xda, 0x04, 0x85, 0x00, + 0xac, 0x44, 0x67, 0x1d, 0x3b, 0x5f, 0xb2, 0xd4, 0x4d, 0x70, 0xc4, 0x68, + 0x18, 0x1f, 0xa5, 0x1f, 0xc1, 0x71, 0x97, 0x66, 0x22, 0x5d, 0xa7, 0x38, + 0xc4, 0x01, 0x78, 0xbc, 0x34, 0x38, 0xd3, 0xd0, 0x71, 0x70, 0x82, 0x72, + 0xc5, 0x45, 0xba, 0x09, 0xe2, 0xa8, 0x02, 0x99, 0x0c, 0x73, 0x35, 0x44, + 0x1e, 0x24, 0xf2, 0x08, 0x82, 0x47, 0xef, 0x0c, 0x71, 0x33, 0xa3, 0x27, + 0x76, 0x75, 0x3f, 0x93, 0xa0, 0x29, 0xc8, 0xe4, 0x96, 0x95, 0x18, 0x54, + 0x96, 0xb7, 0x66, 0x9c, 0x9a, 0x02, 0x97, 0x9b, 0x26, 0xc8, 0x20, 0xd2, + 0x8f, 0x8c, 0x31, 0x13, 0x4c, 0xed, 0x23, 0x7d, 0x27, 0x33, 0x72, 0x3b, + 0x7c, 0xa8, 0xce, 0x71, 0x9a, 0xa5, 0x13, 0x33, 0xde, 0x14, 0x45, 0xaf, + 0xc9, 0x0d, 0xa3, 0x5e, 0x85, 0x96, 0x3b, 0x23, 0xf3, 0x4d, 0xcf, 0x49, + 0x30, 0x33, 0xb5, 0x07, 0xd4, 0xd3, 0xf8, 0x08, 0x62, 0x62, 0xc0, 0xb0, + 0x8e, 0x09, 0xc4, 0x62, 0x18, 0xab, 0xfa, 0xdb, 0xca, 0xc1, 0x6f, 0x2b, + 0xa8, 0x32, 0xce, 0x51, 0xd3, 0x38, 0x98, 0xf2, 0xf0, 0x92, 0x33, 0x52, + 0x72, 0x9a, 0x8e, 0xa9, 0x9c, 0x4e, 0xc8, 0x00, 0xb2, 0xed, 0xd7, 0x79, + 0x32, 0x21, 0x0b, 0x91, 0x1e, 0xca, 0x29, 0x29, 0xe1, 0xc5, 0x94, 0x0d, + 0xe1, 0x06, 0xc5, 0x4c, 0x4e, 0x1e, 0x7f, 0xe2, 0xb3, 0x91, 0x4a, 0x4e, + 0x25, 0x2b, 0x12, 0xe8, 0x5a, 0x01, 0x7b, 0x6e, 0xa9, 0x33, 0xfc, 0x56, + 0xa0, 0xe3, 0x22, 0x61, 0x18, 0xde, 0xaf, 0x3f, 0x8c, 0xce, 0xda, 0xf7, + 0x3d, 0x4c, 0xbc, 0x16, 0xf8, 0xc3, 0x9e, 0x03, 0xeb, 0x1d, 0x03, 0x96, + 0x79, 0xc4, 0xbf, 0x04, 0x00, 0x8d, 0xfa, 0xfe, 0x0c, 0xf0, 0xf3, 0xf3, + 0x45, 0x7e, 0xf1, 0xcf, 0xa0, 0x39, 0x31, 0x52, 0x87, 0x90, 0x5a, 0xf0, + 0x29, 0x92, 0x9e, 0xf1, 0x62, 0x9f, 0xf8, 0x54, 0xc0, 0x5a, 0x8e, 0x05, + 0xe4, 0xdc, 0xc7, 0xaf, 0x61, 0xd3, 0x7a, 0x29, 0xfa, 0xc1, 0xdc, 0x39, + 0xb5, 0x60, 0x56, 0x32, 0x6c, 0x58, 0xa7, 0x9e, 0x3f, 0xb3, 0xfc, 0x69, + 0xfc, 0x0c, 0x4d, 0xe4, 0x72, 0x81, 0x28, 0xf7, 0x93, 0xf9, 0x1b, 0xcd, + 0x31, 0x14, 0xf7, 0xe1, 0x9d, 0x65, 0x9c, 0xe4, 0x57, 0x74, 0x79, 0xa0, + 0xeb, 0xe2, 0x49, 0x78, 0xf7, 0x4a, 0x33, 0xf6, 0x92, 0x9f, 0x1b, 0xef, + 0x58, 0x30, 0xc5, 0xc5, 0x2e, 0xb2, 0x19, 0xc2, 0x43, 0xd3, 0x60, 0x0b, + 0x1c, 0xe4, 0x9f, 0xb9, 0xb6, 0x1d, 0x2c, 0xf0, 0x8f, 0x5f, 0x50, 0x50, + 0xbc, 0xef, 0xfc, 0x5e, 0x91, 0x3e, 0xb3, 0x3d, 0xed, 0x24, 0x0b, 0xed, + 0x23, 0xab, 0x96, 0xd5, 0x8d, 0x76, 0x0f, 0x02, 0x11, 0x09, 0x66, 0x4a, + 0x3c, 0x64, 0xd4, 0x22, 0x1c, 0x4c, 0xe6, 0xe7, 0x0b, 0xdd, 0xe4, 0xa7, + 0xb8, 0x35, 0x6c, 0x8e, 0x0e, 0x83, 0x1a, 0x21, 0xe6, 0x32, 0x98, 0x80, + 0x9c, 0x10, 0x21, 0xee, 0xe7, 0x19, 0x13, 0x6b, 0xa8, 0x02, 0xd4, 0x9c, + 0xa7, 0xcf, 0xcd, 0xb4, 0x27, 0x7c, 0x2e, 0x82, 0xd3, 0x88, 0x3b, 0x41, + 0xa1, 0x1f, 0x6c, 0x54, 0x9a, 0x2e, 0x3e, 0x1b, 0xd9, 0x51, 0xe8, 0x0b, + 0xec, 0x30, 0xfc, 0xfd, 0xa9, 0x71, 0x83, 0xbf, 0xf8, 0x36, 0x68, 0x4b, + 0x3f, 0x18, 0xae, 0x83, 0xf6, 0x84, 0xf3, 0x1e, 0x30, 0x37, 0x89, 0x98, + 0x17, 0x79, 0xc0, 0xbe, 0x5f, 0xe2, 0x02, 0xfb, 0x25, 0x2e, 0xb0, 0x3d, + 0x3f, 0x2f, 0xf4, 0x81, 0x9d, 0xa8, 0xdc, 0x03, 0x7e, 0x09, 0xa4, 0xe4, + 0xbd, 0x4e, 0xc9, 0x7b, 0x9d, 0xf8, 0x63, 0xf0, 0x3e, 0x2c, 0x77, 0x7b, + 0xb3, 0x05, 0x5c, 0x9b, 0x0b, 0x2c, 0x77, 0x77, 0xa1, 0x2f, 0x4b, 0x3c, + 0xde, 0x23, 0xda, 0xe9, 0x28, 0xc8, 0x75, 0x62, 0xa5, 0x9b, 0xcc, 0x9d, + 0xa1, 0x33, 0x16, 0xba, 0x90, 0xae, 0x71, 0xde, 0xe9, 0xb5, 0xa3, 0x95, + 0x8b, 0x15, 0x7b, 0xbe, 0xd3, 0xd5, 0x3d, 0x5f, 0xaa, 0xc5, 0x07, 0xdb, + 0x76, 0x37, 0xe9, 0xf8, 0x0a, 0x6f, 0x55, 0xbf, 0x77, 0x2c, 0x95, 0x12, + 0x72, 0xf4, 0x6c, 0x7b, 0xba, 0x82, 0xf7, 0x7b, 0x6e, 0xa3, 0x4b, 0x9c, + 0xfb, 0x77, 0xe9, 0xff, 0xa2, 0x1d, 0x58, 0x39, 0x6e, 0xe3, 0xd7, 0xae, + 0xe0, 0x21, 0x67, 0x5d, 0x5f, 0x1f, 0xcf, 0xe2, 0x7f, 0xc1, 0xf3, 0x25, + 0x0d, 0x9b, 0xd9, 0x30, 0x4f, 0xb6, 0x75, 0x4a, 0x66, 0x41, 0x78, 0xa5, + 0xae, 0xef, 0x53, 0x77, 0x2c, 0xa6, 0xe8, 0x8c, 0x0b, 0xbc, 0xdf, 0xd3, + 0xb0, 0xdc, 0xfd, 0x7d, 0x8a, 0xb6, 0x17, 0x01, 0x1c, 0xe0, 0x72, 0xff, + 0xf7, 0x67, 0x18, 0x9d, 0x11, 0x08, 0x5f, 0xe0, 0xff, 0xbe, 0x14, 0xa7, + 0x98, 0xf0, 0xa3, 0xff, 0x11, 0xe8, 0x72, 0xef, 0x97, 0x6a, 0xc7, 0xd6, + 0xce, 0x3a, 0x75, 0xc4, 0x97, 0x05, 0x0e, 0xf0, 0xa9, 0x70, 0x0b, 0x1d, + 0x60, 0x67, 0xb9, 0xff, 0xfb, 0xee, 0x0c, 0xb5, 0x42, 0xc7, 0x0d, 0x05, + 0x27, 0x09, 0x6f, 0x81, 0xfb, 0x4b, 0x5f, 0x16, 0xfb, 0xc0, 0xe4, 0x71, + 0x2c, 0xf5, 0x7f, 0x51, 0x87, 0xc4, 0x38, 0x41, 0xc3, 0xe1, 0xdc, 0x35, + 0xce, 0xef, 0x58, 0x60, 0x40, 0x12, 0x14, 0x26, 0x5f, 0xe8, 0xfd, 0xa6, + 0x3c, 0x0a, 0x7f, 0x06, 0x42, 0xb6, 0x57, 0xe4, 0x04, 0x67, 0xe0, 0x80, + 0x9d, 0x8c, 0x6d, 0x0e, 0x34, 0x3f, 0x70, 0x4f, 0x44, 0xa4, 0xf1, 0xe6, + 0xc6, 0xea, 0x95, 0x7c, 0x61, 0xa9, 0x7f, 0x19, 0x6f, 0x78, 0x28, 0x4a, + 0xbd, 0xe1, 0x6f, 0xc4, 0x3c, 0x0a, 0x07, 0xf7, 0x1c, 0x1a, 0x26, 0xdf, + 0x66, 0xbe, 0xc4, 0x15, 0xc6, 0x12, 0x00, 0x9a, 0xd1, 0x8b, 0xca, 0x9c, + 0xe0, 0x8f, 0x0e, 0xf9, 0xed, 0xc6, 0x4d, 0x5a, 0xe2, 0x05, 0x7b, 0xd0, + 0x6b, 0x8f, 0xbd, 0x86, 0xa9, 0x93, 0xf4, 0x7f, 0x13, 0x7e, 0x96, 0xf5, + 0x13, 0x6c, 0x8f, 0xb7, 0x44, 0xb8, 0xd8, 0x23, 0x9e, 0xda, 0x2e, 0x87, + 0xf5, 0xe7, 0xc0, 0xd5, 0xb4, 0x9e, 0x09, 0x6f, 0x1e, 0x7d, 0x11, 0xd6, + 0xc7, 0x57, 0x47, 0xdf, 0x1c, 0xbd, 0xb7, 0x7e, 0x79, 0xf4, 0xfe, 0xd9, + 0xab, 0xb7, 0xdf, 0x1c, 0xbd, 0xad, 0x5b, 0xf3, 0x29, 0xa1, 0xf2, 0xfc, + 0xc1, 0x84, 0x4a, 0x7c, 0x99, 0x73, 0xeb, 0x39, 0x0b, 0x9d, 0xe1, 0xd7, + 0x64, 0xb2, 0xf0, 0xe0, 0xdc, 0x57, 0xf4, 0x56, 0xa9, 0x6e, 0x4c, 0xeb, + 0xc8, 0x91, 0x7a, 0x39, 0x27, 0xbd, 0xbc, 0x2f, 0xa2, 0xd2, 0x07, 0xd6, + 0x24, 0x7f, 0xb6, 0x7a, 0xbc, 0x58, 0xcd, 0x2f, 0x20, 0xdc, 0x95, 0xa2, + 0xc5, 0x2f, 0x44, 0x10, 0x39, 0xe3, 0xd2, 0x70, 0x31, 0x43, 0x4c, 0x5c, + 0xa8, 0x4c, 0x5f, 0x38, 0x53, 0xeb, 0x35, 0x7b, 0xc4, 0xa4, 0x41, 0x4f, + 0x75, 0xd8, 0x38, 0x6c, 0x90, 0xec, 0xeb, 0xe8, 0x77, 0x51, 0x24, 0x64, + 0xcb, 0x99, 0xb6, 0xbe, 0x97, 0xb9, 0x82, 0x48, 0x32, 0xb6, 0x20, 0x7c, + 0x3c, 0x5f, 0xe4, 0x17, 0x7f, 0x44, 0x2f, 0xc1, 0x80, 0x84, 0x35, 0x2c, + 0x8c, 0x9a, 0xd0, 0x1f, 0x5c, 0xd1, 0x3b, 0xe7, 0x39, 0x34, 0x78, 0xae, + 0x83, 0x2f, 0x44, 0x35, 0xa3, 0x73, 0x5c, 0x4b, 0x83, 0x5e, 0xed, 0x88, + 0x11, 0x2c, 0x1b, 0x5c, 0xcb, 0x11, 0xa9, 0xfb, 0x33, 0xae, 0x27, 0xc4, + 0x70, 0x2a, 0x14, 0x02, 0xba, 0x08, 0xb4, 0x8e, 0xaf, 0x30, 0x4c, 0xb9, + 0xd0, 0xaa, 0xe3, 0x38, 0xd3, 0xbc, 0xf7, 0x6c, 0x8d, 0xe6, 0xde, 0x29, + 0x09, 0xcf, 0x81, 0xf4, 0x35, 0x4a, 0x4f, 0x4c, 0xa6, 0x0a, 0x25, 0xae, + 0xaf, 0xc7, 0x2f, 0xfb, 0x34, 0x9a, 0x43, 0xcd, 0xf0, 0xeb, 0x99, 0x72, + 0xa9, 0xcf, 0x91, 0xf7, 0xa5, 0xf9, 0xac, 0x99, 0x8f, 0x2e, 0x0f, 0xc5, + 0x82, 0xf8, 0xf2, 0x0b, 0x3b, 0xe8, 0x8b, 0x22, 0xef, 0x3a, 0x2a, 0x76, + 0xae, 0xff, 0xf9, 0xf7, 0x32, 0xe7, 0xba, 0xd0, 0xb7, 0x16, 0xce, 0x3f, + 0xff, 0x5c, 0xee, 0x5d, 0x3f, 0x3d, 0xfd, 0x22, 0xc8, 0x35, 0x09, 0x10, + 0x7c, 0xa7, 0x7a, 0x59, 0x6f, 0xd9, 0x37, 0xf2, 0x40, 0xef, 0x9f, 0x7f, + 0xfb, 0xe7, 0x9f, 0x45, 0x50, 0xe6, 0x68, 0x2f, 0x2a, 0x7b, 0xea, 0xd2, + 0x63, 0x50, 0xe6, 0x72, 0x1b, 0x97, 0xe3, 0xfc, 0x9f, 0x7f, 0x99, 0x40, + 0x82, 0x65, 0x0e, 0x77, 0xec, 0x6f, 0xc3, 0x94, 0xa0, 0x8d, 0x19, 0x1a, + 0xe3, 0x65, 0xec, 0xe6, 0x95, 0x78, 0xdc, 0x22, 0xfa, 0xb2, 0x7a, 0xb9, + 0xdb, 0x04, 0x9b, 0x67, 0x01, 0xfc, 0x53, 0x2c, 0x34, 0xcc, 0x43, 0x55, + 0x91, 0x4d, 0xba, 0xdd, 0xf3, 0x7f, 0x5b, 0xbc, 0xf9, 0xa9, 0xf7, 0xc5, + 0x9e, 0xb8, 0x5a, 0x9a, 0x62, 0xa5, 0x60, 0xb3, 0x2c, 0xb3, 0xd8, 0x97, + 0x7e, 0x2f, 0x1c, 0x74, 0xef, 0x91, 0x0f, 0xb7, 0xf1, 0xe6, 0xbe, 0x79, + 0x71, 0xcc, 0x59, 0x78, 0x89, 0x56, 0xba, 0x13, 0x2f, 0xfc, 0x25, 0x39, + 0x53, 0xe7, 0xcd, 0x55, 0xfc, 0xf0, 0x9f, 0xc1, 0x0f, 0x6f, 0xae, 0xe4, + 0x82, 0xbf, 0xe4, 0x4e, 0xb7, 0xd0, 0x0b, 0x7f, 0x15, 0x07, 0x9e, 0xc9, + 0x6e, 0xa4, 0xea, 0xb5, 0x30, 0x06, 0x6d, 0xdf, 0x2c, 0x06, 0xfd, 0x13, + 0x0e, 0x74, 0x8f, 0x17, 0xc4, 0xa0, 0x3f, 0x60, 0x55, 0x67, 0xb1, 0x0b, + 0xae, 0x3b, 0xa0, 0xc5, 0xa0, 0x8b, 0x9c, 0x70, 0xaa, 0xd2, 0xb9, 0x0d, + 0xd8, 0xcb, 0x59, 0xa6, 0x5e, 0x79, 0x27, 0xfc, 0x67, 0x81, 0x70, 0xc2, + 0x22, 0x1f, 0xfc, 0xbd, 0x3d, 0x5c, 0xe6, 0x82, 0xff, 0xf3, 0x4f, 0xfd, + 0x84, 0x0f, 0x8e, 0xe9, 0xc1, 0x52, 0x17, 0x1c, 0xe3, 0xc1, 0x99, 0xb3, + 0xd0, 0x07, 0x3f, 0x17, 0x4e, 0x04, 0x80, 0x25, 0x01, 0x68, 0xed, 0x01, + 0x2e, 0xf2, 0xc0, 0x33, 0x2e, 0x0c, 0xae, 0x87, 0x70, 0x60, 0x66, 0x82, + 0x42, 0x27, 0x3c, 0x05, 0x0a, 0xec, 0x1a, 0x38, 0xfa, 0x2a, 0x0b, 0x5d, + 0xe8, 0x31, 0x1c, 0x2b, 0x70, 0xf6, 0x1a, 0xd2, 0x74, 0xcb, 0x7c, 0x86, + 0x15, 0xc2, 0xd5, 0x08, 0x4d, 0xfd, 0x44, 0x87, 0xab, 0xe5, 0xab, 0x94, + 0xb0, 0x93, 0x45, 0x6e, 0xe9, 0x30, 0xe7, 0x31, 0xcc, 0xa6, 0x8e, 0x97, + 0xef, 0x9f, 0xa1, 0x24, 0x3e, 0x35, 0xda, 0x97, 0xcf, 0xde, 0x23, 0x01, + 0x9f, 0x3a, 0x01, 0x6d, 0x20, 0x5b, 0x22, 0x4e, 0x78, 0xf6, 0x12, 0x09, + 0xf8, 0xd4, 0x09, 0xcf, 0xde, 0x53, 0x02, 0x3e, 0xe3, 0x84, 0x97, 0x84, + 0x03, 0x9f, 0x3a, 0xe1, 0xa3, 0x24, 0x43, 0x5f, 0x71, 0x92, 0x24, 0x44, + 0x5f, 0x71, 0x92, 0x24, 0x45, 0x5f, 0x71, 0x92, 0x24, 0x46, 0x5f, 0x71, + 0x92, 0x24, 0x87, 0x2f, 0x93, 0x24, 0x09, 0xd2, 0x57, 0x5c, 0x8d, 0x8f, + 0x4c, 0x91, 0xbe, 0x4c, 0x92, 0xac, 0xda, 0xc7, 0x44, 0xdd, 0x3e, 0x32, + 0x45, 0xfa, 0x8a, 0x79, 0xff, 0xc8, 0xe8, 0xe9, 0xcb, 0x24, 0xc9, 0xfa, + 0x7c, 0x4c, 0xa0, 0x7f, 0xff, 0x91, 0x0a, 0xd2, 0x97, 0x11, 0xdc, 0x47, + 0x82, 0xa2, 0x2f, 0x23, 0x3a, 0x86, 0xa2, 0x2f, 0x23, 0xbc, 0x8f, 0x52, + 0x7a, 0x1f, 0x13, 0xe2, 0xe3, 0x24, 0xfa, 0x32, 0x02, 0x64, 0x5c, 0xf4, + 0x65, 0x28, 0x72, 0x8f, 0xa0, 0xaf, 0x1c, 0xc5, 0x62, 0x28, 0xd3, 0x5c, + 0x94, 0x44, 0x5f, 0x86, 0x22, 0x27, 0xe1, 0xab, 0x30, 0x29, 0xad, 0x33, + 0x66, 0xa3, 0xbe, 0xd1, 0x9a, 0xd6, 0x3e, 0x3e, 0x2a, 0x6f, 0xdf, 0xbd, + 0x7f, 0xf3, 0xf4, 0xb5, 0xc6, 0xd0, 0xee, 0xec, 0x11, 0x99, 0x23, 0x4c, + 0x59, 0x8e, 0x8f, 0xb2, 0x38, 0xcc, 0xc6, 0x79, 0x85, 0x44, 0x62, 0x21, + 0x1c, 0x6f, 0x8f, 0x62, 0x0c, 0xbb, 0x48, 0x20, 0x3b, 0x7f, 0xf2, 0xab, + 0x17, 0x4f, 0x8f, 0x3f, 0xe8, 0xe4, 0x6e, 0x47, 0x27, 0x27, 0x53, 0xb7, + 0xf7, 0x74, 0xea, 0x9b, 0xa3, 0x6f, 0x5e, 0xfd, 0xe2, 0x8d, 0x4e, 0xdf, + 0xdd, 0xd6, 0xe9, 0xc7, 0xaf, 0xdf, 0xc5, 0xd5, 0xdb, 0x6b, 0xc5, 0xa8, + 0x93, 0xc9, 0x8f, 0x0d, 0xc5, 0x64, 0x7a, 0xbb, 0x1d, 0x93, 0x7c, 0xf9, + 0xfa, 0xe9, 0xf3, 0x57, 0x4f, 0x5f, 0xc7, 0xf5, 0x31, 0x35, 0x32, 0x9b, + 0xea, 0x65, 0x95, 0x4c, 0x8d, 0x2c, 0x1e, 0x82, 0x62, 0xd2, 0x48, 0xe3, + 0x84, 0xac, 0x4c, 0xcc, 0x06, 0xf7, 0x34, 0x02, 0x8c, 0x4b, 0x60, 0x1e, + 0x92, 0x8d, 0x45, 0xdb, 0x91, 0xa9, 0xd9, 0xaa, 0x6e, 0xeb, 0xe4, 0xd7, + 0x4f, 0xdf, 0xbf, 0x3c, 0x8a, 0x05, 0xa0, 0x53, 0x7f, 0x25, 0x93, 0x0d, + 0xe7, 0xb4, 0x43, 0xed, 0x2b, 0xda, 0xe2, 0x65, 0xe6, 0xbd, 0x74, 0xb7, + 0x6d, 0xbc, 0x77, 0xa6, 0xda, 0x70, 0x9c, 0x91, 0x68, 0x4e, 0xb1, 0x2a, + 0xf6, 0xfb, 0xb0, 0xc6, 0x80, 0x05, 0x5b, 0x33, 0x67, 0x88, 0xfd, 0xd3, + 0x2e, 0xc6, 0xad, 0x62, 0x24, 0x89, 0x2d, 0x64, 0xef, 0x13, 0x00, 0x70, + 0xef, 0x8e, 0x39, 0xbf, 0x07, 0x07, 0x9f, 0xe3, 0x62, 0xd5, 0xda, 0x55, + 0x85, 0xb6, 0x8a, 0xd0, 0x7c, 0x07, 0x7b, 0xb1, 0x0e, 0xa8, 0x84, 0x30, + 0xb9, 0x51, 0xdd, 0xab, 0x5d, 0x05, 0x22, 0x9a, 0x07, 0x5e, 0x55, 0xf4, + 0xde, 0xf5, 0xc9, 0xce, 0x35, 0x31, 0x03, 0x82, 0x91, 0x8b, 0x7c, 0xda, + 0x7b, 0xf9, 0x6e, 0xf4, 0xc7, 0x3f, 0x5e, 0x9d, 0x9c, 0xcc, 0xe8, 0xf9, + 0xe4, 0x64, 0xff, 0xd3, 0xe7, 0x6b, 0xb2, 0xa0, 0xf4, 0xe2, 0x01, 0x04, + 0x23, 0x9f, 0xd2, 0x7d, 0xd3, 0x0f, 0x1f, 0xc6, 0xd8, 0x44, 0x3d, 0xaa, + 0x5d, 0x89, 0x66, 0x0c, 0xde, 0x8b, 0xae, 0xff, 0xf8, 0xc7, 0x74, 0xee, + 0x08, 0xf7, 0x62, 0x12, 0x0f, 0x1e, 0xbf, 0xa3, 0xa4, 0x16, 0x35, 0x27, + 0x76, 0xf8, 0xee, 0xdc, 0x03, 0xbd, 0x19, 0x4c, 0xfa, 0x65, 0xd5, 0xab, + 0x3d, 0x7c, 0x58, 0x15, 0x9f, 0xbc, 0xcf, 0xbd, 0x08, 0x1f, 0xb5, 0xeb, + 0x1a, 0xb3, 0x78, 0x7d, 0xa0, 0xb0, 0xa0, 0x8c, 0xe4, 0x39, 0x7e, 0xf6, + 0x51, 0x43, 0xda, 0x7f, 0xd3, 0x84, 0x14, 0x50, 0xc9, 0x39, 0x9a, 0x3b, + 0x00, 0x5d, 0xc1, 0x60, 0xf5, 0xa8, 0xc9, 0xac, 0xa8, 0xb7, 0x50, 0xe0, + 0xde, 0xeb, 0x5e, 0xcf, 0xfb, 0x5a, 0x55, 0x73, 0xc0, 0x53, 0x04, 0x50, + 0xdc, 0xaf, 0xfa, 0x49, 0x30, 0xf3, 0xbb, 0x8e, 0xfb, 0x54, 0x2d, 0xbf, + 0x76, 0xcd, 0x0c, 0x1b, 0xa1, 0x69, 0x89, 0x59, 0xc9, 0xaa, 0x29, 0x2e, + 0xd4, 0x3e, 0xd9, 0xa8, 0xce, 0x4f, 0x8c, 0x50, 0x5c, 0x5f, 0x57, 0x6b, + 0x75, 0xbf, 0x67, 0xa0, 0x13, 0xec, 0xab, 0x26, 0x20, 0x0a, 0x7e, 0x4f, + 0x34, 0x07, 0x78, 0x1d, 0x6e, 0x95, 0x8a, 0xd6, 0x2b, 0x3c, 0xcb, 0xac, + 0x20, 0xf3, 0x8f, 0x7f, 0xa4, 0x84, 0x03, 0x45, 0xd3, 0x6f, 0xaa, 0x60, + 0x79, 0x2f, 0xd2, 0xbf, 0xea, 0x7e, 0x93, 0x81, 0x41, 0xd5, 0xbf, 0x56, + 0x60, 0x51, 0xd5, 0xab, 0x8b, 0x5a, 0xdd, 0xbb, 0x46, 0xfd, 0xea, 0xc1, + 0x02, 0xda, 0x75, 0x1f, 0xd4, 0x7d, 0xec, 0xf2, 0x6e, 0x41, 0x36, 0x11, + 0x84, 0x1f, 0xf5, 0xda, 0xa2, 0x5b, 0xab, 0xc7, 0x69, 0x1e, 0xd2, 0xb0, + 0x8b, 0xb6, 0x52, 0x63, 0xdd, 0x09, 0xd2, 0x4c, 0x0e, 0x5c, 0x3f, 0xc4, + 0xcc, 0xce, 0xcf, 0x30, 0x19, 0x34, 0x31, 0x75, 0x7d, 0x8e, 0x45, 0x60, + 0xaf, 0xf7, 0x55, 0xab, 0x1e, 0xa0, 0x6d, 0x86, 0xe0, 0x17, 0x3f, 0x20, + 0xf2, 0xd0, 0xf7, 0x7a, 0x5e, 0x3d, 0x28, 0x64, 0xd4, 0x49, 0x0a, 0xd9, + 0x19, 0x55, 0x31, 0x05, 0xe0, 0x2d, 0x9e, 0x58, 0x81, 0xfe, 0xaa, 0x07, + 0x61, 0x92, 0xd2, 0xc5, 0x3a, 0x5e, 0x93, 0x18, 0x4c, 0xc2, 0x75, 0x3d, + 0xec, 0x5d, 0xe1, 0x8c, 0x98, 0xea, 0x11, 0x8c, 0xe7, 0x1b, 0x41, 0x97, + 0x4f, 0xb4, 0xc5, 0x76, 0x1d, 0x1d, 0xae, 0x28, 0xa3, 0xfb, 0xc3, 0x6d, + 0xd1, 0xfd, 0xc1, 0x1b, 0x3b, 0x9a, 0x34, 0xe1, 0x46, 0x0d, 0xfd, 0x69, + 0xb5, 0x46, 0xa0, 0xbf, 0x98, 0xd1, 0xbe, 0xc2, 0xfd, 0x1d, 0xd1, 0xad, + 0x07, 0xd9, 0x52, 0x2f, 0x31, 0x1b, 0x7e, 0x61, 0x93, 0xa2, 0xed, 0xb7, + 0x9b, 0xdd, 0xba, 0xc9, 0xfd, 0x80, 0x22, 0x08, 0x01, 0xee, 0x6f, 0xa3, + 0x14, 0xf3, 0x11, 0x05, 0x14, 0x12, 0x6f, 0x6f, 0xb5, 0xea, 0x43, 0xd1, + 0x9f, 0x8f, 0xf7, 0xbf, 0x6a, 0x5f, 0x1f, 0x64, 0x75, 0x27, 0xd1, 0x20, + 0x02, 0x8a, 0xc4, 0xea, 0x90, 0x11, 0xfe, 0xd5, 0xb5, 0x14, 0xbe, 0xdf, + 0x63, 0x21, 0xb3, 0x6a, 0x9d, 0xb8, 0x0e, 0x79, 0xa5, 0x22, 0x40, 0x9d, + 0xb9, 0xf5, 0xd1, 0x37, 0xeb, 0x4a, 0x21, 0xe8, 0x27, 0x6d, 0x9f, 0xa6, + 0x6f, 0x6e, 0x21, 0xea, 0xb7, 0x75, 0x59, 0x0c, 0xe4, 0x83, 0x4b, 0x9e, + 0xbd, 0x60, 0xd3, 0xb1, 0x4a, 0x0b, 0x27, 0xb4, 0x0f, 0x33, 0x96, 0x0e, + 0xda, 0x4c, 0x65, 0xa8, 0x84, 0xd7, 0x10, 0x6f, 0xef, 0x2b, 0x0d, 0xdd, + 0x47, 0x64, 0x32, 0xb8, 0xfc, 0x20, 0x37, 0x66, 0xbb, 0x7e, 0xbf, 0xa2, + 0xd2, 0x99, 0xd2, 0x73, 0xe8, 0x86, 0x18, 0x1a, 0x60, 0xc5, 0xd1, 0xcf, + 0xe7, 0x02, 0x87, 0x29, 0x3e, 0x7d, 0x96, 0xa9, 0xbe, 0xc7, 0xb0, 0x3d, + 0x59, 0x4d, 0x9d, 0xc6, 0xb5, 0xc8, 0xa4, 0xa9, 0xe2, 0x99, 0x54, 0xaa, + 0x5b, 0x2a, 0xe9, 0x64, 0x82, 0xa6, 0x73, 0xc5, 0x3b, 0xa4, 0xa7, 0x54, + 0xdd, 0x6f, 0x9e, 0xb0, 0xe0, 0xab, 0x15, 0x2a, 0x62, 0xf1, 0x85, 0xbc, + 0x4a, 0x91, 0xa3, 0x1e, 0x32, 0x7d, 0x39, 0x95, 0x6a, 0xc6, 0x0d, 0x5e, + 0x07, 0xde, 0xb8, 0x33, 0x7c, 0x9d, 0xc8, 0xd8, 0x8f, 0x0e, 0x06, 0xd0, + 0xe7, 0x40, 0x35, 0x71, 0xd5, 0x8f, 0x85, 0xa3, 0x52, 0x6a, 0x75, 0x24, + 0xcd, 0x19, 0x56, 0xa5, 0xf4, 0x60, 0x47, 0x35, 0x78, 0xde, 0x76, 0x00, + 0x1a, 0x17, 0xfa, 0x23, 0xba, 0x00, 0xa6, 0x91, 0x7c, 0x5d, 0xf7, 0x18, + 0xc3, 0x79, 0xd8, 0x4c, 0xc8, 0x17, 0x09, 0xe6, 0x09, 0xd9, 0x29, 0x71, + 0x36, 0x61, 0x4b, 0x8f, 0x30, 0x3d, 0x37, 0xc8, 0x45, 0x8c, 0x5d, 0x62, + 0x0a, 0x71, 0xd5, 0x2c, 0x12, 0xaf, 0x81, 0x39, 0xdf, 0x12, 0xbe, 0x12, + 0xe4, 0xc3, 0x87, 0xea, 0x17, 0x95, 0x47, 0xaa, 0x51, 0xac, 0x26, 0x25, + 0xe6, 0xa9, 0x44, 0x49, 0x2a, 0x64, 0x0b, 0x8e, 0x48, 0xac, 0xaf, 0x55, + 0x29, 0x52, 0x61, 0x50, 0xbc, 0x4e, 0x35, 0x8c, 0x0a, 0x36, 0x94, 0xb4, + 0x8d, 0xe2, 0x4c, 0x37, 0x0f, 0x73, 0xa6, 0xd2, 0xc0, 0x9c, 0x79, 0xc8, + 0xf1, 0xa7, 0xd2, 0xef, 0x84, 0x45, 0x9e, 0x3b, 0x94, 0x30, 0xc8, 0x9a, + 0xa9, 0xd8, 0xab, 0x0b, 0x45, 0x56, 0x32, 0x63, 0xc2, 0xdf, 0x55, 0xa5, + 0x90, 0x95, 0x0f, 0xaf, 0xde, 0x1c, 0xbd, 0xfb, 0xc5, 0x87, 0x0a, 0x54, + 0x28, 0x86, 0xfd, 0xba, 0x12, 0x49, 0x4d, 0xa8, 0xec, 0x4b, 0x30, 0x59, + 0x4b, 0x46, 0xfc, 0xf0, 0x61, 0xfc, 0x93, 0x6b, 0x68, 0xc8, 0x5e, 0x88, + 0x81, 0x25, 0x69, 0xc7, 0x75, 0xae, 0x64, 0x44, 0xc0, 0xd9, 0x37, 0x14, + 0x00, 0x61, 0xd2, 0xcc, 0x67, 0xa4, 0xf1, 0x1c, 0xfd, 0xb3, 0xac, 0xb9, + 0xa8, 0xef, 0x26, 0x1b, 0xeb, 0x24, 0xd9, 0x31, 0x42, 0x1a, 0xea, 0x72, + 0x16, 0x05, 0x55, 0x34, 0xa4, 0x64, 0xd5, 0x19, 0x0b, 0xd2, 0xd5, 0xcf, + 0x7c, 0xe3, 0x52, 0xea, 0x6d, 0x9b, 0x76, 0x1e, 0xb8, 0x3d, 0xa1, 0x7e, + 0xf3, 0xa8, 0x8e, 0x79, 0x7b, 0xa8, 0x06, 0xe7, 0xb8, 0xf7, 0xf7, 0x3c, + 0xf5, 0x6c, 0x64, 0xa1, 0x28, 0x28, 0x47, 0x41, 0x0e, 0x41, 0xda, 0x45, + 0x01, 0x89, 0x8a, 0xda, 0x5b, 0xfe, 0xea, 0x2d, 0xe6, 0x12, 0x57, 0x18, + 0xef, 0xf7, 0xf3, 0xfd, 0xbb, 0x75, 0x5d, 0xc7, 0x22, 0x03, 0x82, 0x85, + 0x34, 0xd1, 0xde, 0x87, 0x45, 0x55, 0x5b, 0xae, 0xf5, 0x33, 0xc4, 0x5f, + 0x8a, 0xfe, 0xdd, 0xb7, 0x47, 0x6f, 0x4b, 0x11, 0xb7, 0x6f, 0x81, 0xf8, + 0xf9, 0xeb, 0x77, 0xc7, 0x8b, 0x98, 0xee, 0xdc, 0x12, 0xf7, 0xd1, 0x37, + 0xa5, 0xa8, 0xbb, 0x37, 0x46, 0x1d, 0xfb, 0x63, 0xab, 0x09, 0x5e, 0x34, + 0x0d, 0xd0, 0x9d, 0xd0, 0xa4, 0xd6, 0x58, 0x40, 0x8d, 0xb2, 0xef, 0x84, + 0x8e, 0x6a, 0x9c, 0x05, 0xa4, 0x08, 0xe2, 0xae, 0x6a, 0x25, 0x9b, 0x6b, + 0x01, 0x31, 0x09, 0x70, 0x27, 0xb4, 0xcc, 0x18, 0x56, 0x4a, 0x4f, 0xf6, + 0xc0, 0xf3, 0xf0, 0x6b, 0xfa, 0x91, 0x19, 0x06, 0xf7, 0xb3, 0x7e, 0x07, + 0x1c, 0x3d, 0x46, 0x62, 0xac, 0x53, 0x16, 0x02, 0xbd, 0x5e, 0x23, 0x22, + 0x97, 0xd6, 0xe0, 0x34, 0x00, 0xb5, 0x3b, 0xa9, 0x9a, 0x71, 0xa7, 0x4a, + 0xab, 0xc6, 0xbe, 0x25, 0xdc, 0xc1, 0x6a, 0xd6, 0x01, 0xab, 0xb7, 0xee, + 0x86, 0x87, 0xfe, 0x1c, 0x21, 0x3e, 0x2c, 0xa9, 0x3c, 0x9d, 0x2e, 0xe4, + 0x23, 0xef, 0x90, 0x35, 0x51, 0x68, 0x3e, 0x10, 0xd5, 0xe4, 0x3c, 0x46, + 0x83, 0x57, 0xe4, 0x0a, 0x59, 0xa5, 0xa7, 0xfd, 0xee, 0xe8, 0x6b, 0xf1, + 0x43, 0xcc, 0x39, 0x10, 0xad, 0x1c, 0xe3, 0xc0, 0x67, 0x64, 0x25, 0xe6, + 0x81, 0xcf, 0xe0, 0x05, 0xca, 0x5c, 0xbe, 0x82, 0x8c, 0x7f, 0xf5, 0x2f, + 0x23, 0xf1, 0x9a, 0x61, 0xeb, 0xe2, 0x1a, 0x35, 0xfd, 0x61, 0x35, 0xdf, + 0xc4, 0x69, 0xc6, 0xf7, 0xef, 0x48, 0x1c, 0xe2, 0x02, 0x43, 0x41, 0x48, + 0x96, 0x7d, 0x0d, 0x6d, 0x33, 0x85, 0xf6, 0x2b, 0x95, 0x3b, 0x61, 0x43, + 0x8f, 0x37, 0x6b, 0x30, 0xa1, 0x8b, 0xdc, 0x15, 0x0b, 0x01, 0xad, 0xb1, + 0x62, 0xad, 0x29, 0x5a, 0xa7, 0xdf, 0x99, 0x42, 0xfb, 0x77, 0x6e, 0x4a, + 0xe7, 0xc1, 0x3a, 0xe2, 0x98, 0x07, 0xab, 0x49, 0x22, 0x41, 0xa2, 0x29, + 0x27, 0x16, 0x29, 0x85, 0x36, 0xb3, 0x29, 0x41, 0xb1, 0x05, 0x9e, 0xde, + 0x16, 0x4d, 0x59, 0x5a, 0xc5, 0xb3, 0x21, 0x3d, 0x97, 0xc9, 0xfb, 0x39, + 0x8b, 0x64, 0x87, 0x33, 0x9d, 0x94, 0xaa, 0xac, 0xa8, 0x81, 0x60, 0x8a, + 0xcc, 0x16, 0x5b, 0xb5, 0xb4, 0x53, 0xb5, 0x8f, 0x17, 0x49, 0x31, 0x0a, + 0x8b, 0x1f, 0x87, 0x95, 0x22, 0x20, 0x9c, 0x76, 0xf9, 0x03, 0x75, 0xde, + 0x21, 0xdd, 0x48, 0x80, 0xc5, 0xbd, 0xb8, 0x23, 0x56, 0x6a, 0xd7, 0x29, + 0x51, 0xc4, 0xf3, 0xd6, 0x8c, 0x38, 0x16, 0xcf, 0xf9, 0xf2, 0xd3, 0xb8, + 0xfc, 0xac, 0xd1, 0x98, 0xd6, 0xe5, 0x35, 0x57, 0xdd, 0xde, 0xf8, 0xc9, + 0xcc, 0x44, 0xd6, 0xe3, 0x92, 0x15, 0x35, 0x09, 0xe9, 0xaa, 0xf0, 0x44, + 0x26, 0xe5, 0x8d, 0x2e, 0xe4, 0xa0, 0x27, 0x39, 0xe0, 0x91, 0x99, 0xe9, + 0x1b, 0x09, 0x12, 0x22, 0xb8, 0xf0, 0x8a, 0xbe, 0x99, 0x23, 0x81, 0x81, + 0x34, 0xa0, 0x12, 0xb2, 0x84, 0xcd, 0x1b, 0xce, 0xd9, 0x3c, 0x9c, 0xa0, + 0x54, 0x86, 0x4d, 0x9c, 0x3d, 0x4d, 0x79, 0xa3, 0x19, 0xc1, 0x67, 0xe6, + 0xed, 0x9f, 0xc4, 0xe7, 0x87, 0x0f, 0xf3, 0x69, 0x12, 0x77, 0x94, 0x6b, + 0x4c, 0x7a, 0xc3, 0xcc, 0xba, 0xd8, 0xab, 0xf9, 0xc4, 0x5e, 0x01, 0x45, + 0xbc, 0x11, 0x0e, 0x0b, 0x3b, 0x45, 0xf3, 0x48, 0x6e, 0xcd, 0xeb, 0x4c, + 0x3d, 0x95, 0x90, 0x0c, 0x7d, 0x13, 0xd6, 0x93, 0x73, 0xfc, 0x5e, 0xeb, + 0x20, 0x7a, 0x62, 0x63, 0x4d, 0x8d, 0xd7, 0xa2, 0xd5, 0x90, 0x71, 0x10, + 0xfd, 0xf0, 0x87, 0x35, 0xf1, 0x29, 0xfa, 0xdc, 0x8b, 0x73, 0xf0, 0x70, + 0x90, 0x72, 0xc5, 0x9b, 0x8c, 0xf8, 0xe1, 0xc3, 0xc4, 0x59, 0x66, 0x3a, + 0x0a, 0xed, 0x5e, 0x56, 0x55, 0x4a, 0xfd, 0x13, 0x96, 0x11, 0x8e, 0x0f, + 0x2b, 0x9f, 0x29, 0xdc, 0x37, 0xb0, 0xa3, 0x7c, 0x1b, 0x9c, 0xc0, 0xba, + 0xbc, 0x85, 0x35, 0xe7, 0x48, 0x4d, 0x92, 0x45, 0xc9, 0x5e, 0x8a, 0x1c, + 0x38, 0x15, 0xcd, 0x05, 0xe1, 0x9d, 0x6c, 0x34, 0x60, 0x51, 0x24, 0x08, + 0xb1, 0x37, 0x20, 0x2b, 0x0a, 0x32, 0xd5, 0x03, 0x83, 0xc5, 0x07, 0x96, + 0xc2, 0x40, 0x94, 0x5f, 0x77, 0xa8, 0xb8, 0x7d, 0x91, 0x2f, 0x3e, 0x30, + 0xc5, 0x1d, 0x14, 0x2f, 0x0c, 0x70, 0x39, 0xf5, 0x79, 0x2f, 0xd0, 0xa1, + 0xa5, 0x6c, 0x97, 0x3d, 0x6c, 0x41, 0x13, 0x90, 0x2f, 0xa3, 0x5c, 0x33, + 0xff, 0xbc, 0xea, 0xe5, 0xba, 0x75, 0xa3, 0x5d, 0xab, 0x1d, 0x0e, 0x18, + 0x6e, 0x50, 0xab, 0xa7, 0xba, 0x82, 0x47, 0x6f, 0xc3, 0x1b, 0x12, 0x99, + 0x4a, 0x7d, 0x5e, 0xab, 0xcf, 0x33, 0xf2, 0x3e, 0xb7, 0x9d, 0xa8, 0x58, + 0xce, 0x9a, 0x1f, 0x8a, 0xa2, 0x62, 0x3c, 0xc0, 0x1e, 0x6f, 0x91, 0x9a, + 0xc7, 0x25, 0xe2, 0x23, 0x51, 0x3d, 0xd3, 0x72, 0x55, 0xb4, 0x6b, 0x49, + 0xcb, 0xfe, 0x22, 0x70, 0x13, 0xaa, 0xcf, 0x71, 0xc2, 0x9c, 0xb3, 0x22, + 0x54, 0x70, 0x50, 0xd1, 0xa5, 0x56, 0x86, 0xfa, 0x9c, 0xd1, 0x2c, 0xf3, + 0x80, 0xe0, 0x75, 0xf9, 0x44, 0x09, 0xc9, 0x39, 0x34, 0xa2, 0xca, 0x20, + 0x79, 0xff, 0xa7, 0x0c, 0x65, 0xc4, 0xf0, 0x51, 0x33, 0xc2, 0xca, 0xa1, + 0x86, 0x89, 0xae, 0xa3, 0x09, 0x5d, 0x6b, 0x73, 0xc4, 0xb3, 0x7a, 0x2c, + 0x69, 0x9f, 0xd9, 0x74, 0x93, 0xc6, 0x2f, 0xde, 0xbf, 0xce, 0x58, 0x69, + 0x6d, 0xf2, 0x4a, 0x44, 0x48, 0x98, 0xbf, 0xca, 0xc5, 0xe2, 0x1e, 0x3e, + 0x2c, 0xb4, 0xe1, 0xb5, 0xab, 0x82, 0xa8, 0x5d, 0x4b, 0x46, 0xbb, 0x32, + 0x8a, 0xef, 0xc1, 0x43, 0x33, 0x11, 0x4a, 0xa8, 0xae, 0x89, 0x38, 0x7e, + 0x1d, 0x26, 0x72, 0xf6, 0x11, 0xa9, 0x05, 0x68, 0x2e, 0xc4, 0x99, 0x54, + 0xca, 0x00, 0x25, 0xf2, 0x31, 0xd0, 0xa0, 0x3e, 0x47, 0xc1, 0x38, 0x36, + 0x5b, 0xb7, 0x4d, 0x81, 0xf9, 0xd7, 0x4e, 0xb5, 0xb6, 0x3f, 0xa7, 0xba, + 0xe5, 0x54, 0xb5, 0xe7, 0xd7, 0x52, 0xca, 0x07, 0x56, 0xac, 0x40, 0xf2, + 0x82, 0x6f, 0xda, 0x8c, 0x02, 0xfb, 0x9d, 0x73, 0xa4, 0x2b, 0x87, 0x3d, + 0x0a, 0x42, 0x1f, 0xe0, 0x15, 0xe5, 0xe2, 0xaa, 0x00, 0xed, 0x0f, 0x7f, + 0x98, 0x56, 0x69, 0xc5, 0x6e, 0x1e, 0x93, 0x56, 0x7d, 0x69, 0x6e, 0xb5, + 0xa5, 0xa5, 0xc1, 0x3e, 0x56, 0x99, 0x38, 0x12, 0x5d, 0x9d, 0xf4, 0x6c, + 0xc4, 0xbd, 0x3b, 0x30, 0x91, 0x13, 0x3d, 0x35, 0xab, 0xa5, 0x9a, 0xfd, + 0xad, 0x6f, 0xc9, 0x76, 0x8f, 0xc5, 0x20, 0xaf, 0xa1, 0xa0, 0x15, 0xe5, + 0x33, 0x07, 0x1b, 0xcb, 0x54, 0x2c, 0x72, 0xc2, 0x56, 0x50, 0x76, 0xa5, + 0x6a, 0x8d, 0x15, 0xa9, 0x20, 0x62, 0x98, 0xea, 0x01, 0x55, 0xc1, 0xd1, + 0x8d, 0xda, 0x75, 0x16, 0x9c, 0x56, 0x60, 0x52, 0x83, 0xf8, 0xd7, 0x22, + 0x1b, 0xc7, 0xdd, 0x47, 0xe1, 0x9c, 0x24, 0xae, 0x80, 0x0d, 0x46, 0x2c, + 0x8e, 0x92, 0xec, 0x03, 0x26, 0x7e, 0x20, 0x27, 0x8b, 0x46, 0xcb, 0x5e, + 0x32, 0xf1, 0x6b, 0xea, 0xd7, 0x36, 0x77, 0x5d, 0x93, 0x58, 0xdb, 0x57, + 0xa9, 0x28, 0x91, 0x9b, 0x72, 0xa5, 0xa2, 0x99, 0x39, 0xb6, 0x28, 0x05, + 0x23, 0x68, 0x52, 0xe8, 0x06, 0x66, 0xa5, 0x98, 0xaa, 0xd0, 0xe1, 0x2b, + 0x0d, 0x82, 0xbe, 0x36, 0x60, 0x43, 0x72, 0x9d, 0xec, 0x74, 0x19, 0xb0, + 0x54, 0xd7, 0x4b, 0xaa, 0x89, 0x8e, 0xd9, 0xe9, 0x58, 0x57, 0x3e, 0x5e, + 0x58, 0xe5, 0x05, 0xa2, 0xaa, 0xfc, 0xad, 0x03, 0x7f, 0x0a, 0x30, 0x3f, + 0x68, 0x3a, 0x61, 0xa1, 0x43, 0x46, 0x0a, 0x5b, 0xe0, 0xa2, 0x2e, 0x71, + 0x3a, 0x15, 0xab, 0x79, 0x4d, 0x3d, 0x80, 0x2e, 0x5f, 0x15, 0xf8, 0x9b, + 0xf9, 0xf8, 0x1e, 0x73, 0xcf, 0x21, 0x33, 0xcd, 0x30, 0x46, 0xd4, 0xc1, + 0x84, 0x6c, 0x6a, 0x4e, 0x60, 0x26, 0x56, 0x5d, 0x2a, 0x2d, 0x09, 0x62, + 0xf1, 0xbd, 0x2d, 0xb5, 0xbc, 0xdf, 0xd8, 0x4a, 0x63, 0xcc, 0xc7, 0xee, + 0x32, 0x52, 0xa9, 0x28, 0x39, 0xb3, 0xec, 0x69, 0xb1, 0xf0, 0xeb, 0xa8, + 0x99, 0x48, 0x02, 0x97, 0xfb, 0xf4, 0x91, 0xc2, 0x9a, 0x13, 0x47, 0x96, + 0x59, 0x13, 0x10, 0x30, 0x7c, 0x67, 0x8a, 0x54, 0x8c, 0x8c, 0x8b, 0xbc, + 0x2e, 0xb9, 0x94, 0x50, 0xc9, 0xad, 0x3b, 0x2c, 0x29, 0xa5, 0x56, 0xca, + 0xf2, 0x8d, 0xb0, 0xa4, 0x5c, 0xfc, 0x62, 0x8b, 0x82, 0x78, 0xfa, 0xd2, + 0xb2, 0x72, 0x09, 0x31, 0xaf, 0xb6, 0x69, 0xd5, 0x94, 0xdd, 0x6e, 0x2d, + 0x91, 0x49, 0xf8, 0xbc, 0xbc, 0x90, 0xbe, 0xae, 0xb0, 0x50, 0x64, 0x7d, + 0x49, 0xa1, 0xd0, 0xcd, 0xc4, 0x84, 0x82, 0x37, 0x95, 0x51, 0xb2, 0x23, + 0xa6, 0x84, 0x94, 0xcc, 0x60, 0x31, 0xe5, 0x97, 0x86, 0x72, 0x20, 0x99, + 0xa5, 0x22, 0xa2, 0x85, 0x45, 0x62, 0xfc, 0x8b, 0xb7, 0x2e, 0xd0, 0x4d, + 0xdf, 0xd8, 0xb1, 0x80, 0xc3, 0x75, 0x78, 0x05, 0x3e, 0x1c, 0xe1, 0x01, + 0x6f, 0x76, 0x6e, 0xea, 0x2b, 0xd0, 0x01, 0x47, 0xb7, 0x0b, 0x49, 0xa8, + 0x5e, 0xcf, 0xaa, 0x10, 0x84, 0x4b, 0x8f, 0x15, 0xba, 0x49, 0xc8, 0xa4, + 0x57, 0xf4, 0x45, 0x41, 0x1a, 0x63, 0xa5, 0xfd, 0xb8, 0xd3, 0x6c, 0xef, + 0xee, 0x35, 0xdb, 0x78, 0x77, 0x71, 0xa7, 0xdd, 0xad, 0xc8, 0x97, 0x94, + 0xf3, 0xf2, 0x39, 0xa6, 0x93, 0x34, 0xaa, 0x10, 0xd4, 0x39, 0x6d, 0x48, + 0xa8, 0x58, 0x3f, 0xe4, 0x62, 0xf8, 0xaa, 0xec, 0xef, 0xb5, 0x2b, 0x9a, + 0xbb, 0xf8, 0xa8, 0xaf, 0xd9, 0x53, 0xe1, 0xda, 0xbc, 0xef, 0xd9, 0x6c, + 0x1f, 0x8b, 0xe8, 0x58, 0xf8, 0xc9, 0x48, 0xee, 0xc0, 0x7b, 0xf0, 0x82, + 0xff, 0xd2, 0x79, 0x7a, 0x7b, 0xf0, 0x83, 0x16, 0xfe, 0xb2, 0x99, 0x74, + 0x9d, 0x1c, 0xe5, 0x75, 0xf9, 0x2f, 0x93, 0x17, 0x79, 0xb2, 0xd8, 0x5e, + 0xeb, 0x79, 0x2b, 0x97, 0x85, 0x4d, 0x1f, 0x92, 0x22, 0xb0, 0xc6, 0xb9, + 0x67, 0x4e, 0xe8, 0xf4, 0x1d, 0xd7, 0x89, 0xb0, 0xe7, 0xfc, 0xd3, 0x67, + 0x99, 0xa8, 0x8e, 0x80, 0x9f, 0x50, 0xfb, 0xd2, 0xf6, 0x36, 0x7d, 0xb4, + 0x3b, 0xde, 0xf8, 0x76, 0xe2, 0xa9, 0x9d, 0x6f, 0xbc, 0xbd, 0x43, 0xd6, + 0x5c, 0x86, 0x1f, 0x4c, 0xbd, 0x27, 0x66, 0xf7, 0xab, 0x2e, 0x1b, 0xdf, + 0xd4, 0x9e, 0x4d, 0x9b, 0xf1, 0xbe, 0xd6, 0x96, 0x4a, 0x8a, 0x2f, 0xf0, + 0xce, 0x81, 0xc1, 0x45, 0x30, 0x69, 0xd4, 0x26, 0x21, 0xed, 0x29, 0x6e, + 0x9b, 0xe7, 0x81, 0x47, 0x78, 0xcc, 0x33, 0xed, 0x36, 0x4b, 0x97, 0xc0, + 0x1d, 0xba, 0x29, 0x08, 0xde, 0x23, 0xb8, 0x8f, 0x83, 0x92, 0xf0, 0x90, + 0x54, 0xaa, 0xf0, 0x28, 0x84, 0x42, 0x65, 0xcf, 0x55, 0x86, 0xa9, 0x65, + 0x48, 0xf3, 0xe8, 0xb8, 0x92, 0x7c, 0xea, 0x34, 0x46, 0xa7, 0x0f, 0xf6, + 0x99, 0x04, 0xf9, 0x2a, 0x2d, 0x8f, 0xf7, 0x4c, 0xb7, 0x80, 0xc4, 0x68, + 0xc9, 0x38, 0x83, 0x08, 0x8f, 0x49, 0x11, 0xd0, 0xbd, 0xad, 0xf2, 0xc9, + 0x50, 0xa1, 0x6d, 0x1a, 0x3a, 0x9b, 0xce, 0x81, 0x99, 0x7c, 0xa5, 0x2f, + 0x57, 0xe7, 0xfb, 0xad, 0xba, 0x15, 0xd0, 0xc7, 0x98, 0x3e, 0xfa, 0xf4, + 0x31, 0x11, 0x17, 0xfb, 0x95, 0x96, 0xfa, 0xc3, 0x86, 0xff, 0xf3, 0x0e, + 0x03, 0xf1, 0xe7, 0x98, 0x3f, 0xfb, 0x1d, 0x05, 0xd7, 0x49, 0x03, 0x76, + 0x19, 0x90, 0x3f, 0xc7, 0xfc, 0xd9, 0xef, 0x2a, 0xc0, 0x6e, 0x02, 0xf0, + 0xda, 0x88, 0x72, 0x74, 0x01, 0x2f, 0x5a, 0x57, 0x54, 0x57, 0x15, 0x17, + 0xb0, 0x24, 0x76, 0x28, 0xe1, 0x52, 0x2a, 0x40, 0xd0, 0xc5, 0x63, 0x49, + 0xd6, 0x4f, 0x10, 0xc7, 0x8a, 0x9b, 0x51, 0x9e, 0xe4, 0x4d, 0x28, 0xa3, + 0x71, 0xa1, 0x53, 0x32, 0x30, 0xef, 0x1e, 0x3e, 0x31, 0x10, 0xc9, 0x72, + 0x40, 0x7a, 0x52, 0x0c, 0x64, 0x24, 0xe7, 0x84, 0x3a, 0x5d, 0x0c, 0xd3, + 0x4a, 0x80, 0xed, 0xfb, 0x98, 0xc7, 0x4c, 0x4e, 0x78, 0x13, 0x2c, 0x9c, + 0xd5, 0x8c, 0xb4, 0x4f, 0xd4, 0x4e, 0xd1, 0x61, 0x4e, 0x43, 0x28, 0x6e, + 0xf2, 0x2a, 0x3a, 0xe0, 0x93, 0x15, 0xf4, 0x0e, 0x32, 0xba, 0x60, 0x69, + 0x16, 0x90, 0xa7, 0x44, 0xa7, 0x26, 0xa2, 0x50, 0x5e, 0x81, 0xe2, 0xd1, + 0x15, 0x3f, 0x66, 0x47, 0xd4, 0x2f, 0x71, 0x8e, 0xd9, 0x75, 0x6d, 0xeb, + 0xa7, 0xa1, 0x45, 0xdb, 0xa1, 0x79, 0xcb, 0xaf, 0x75, 0xac, 0xde, 0xf7, + 0xd9, 0xbf, 0xb4, 0x5e, 0x22, 0x61, 0x6c, 0x5b, 0xbf, 0x74, 0x70, 0xe8, + 0xc6, 0xff, 0xee, 0x77, 0x68, 0x8b, 0x13, 0xf0, 0xcb, 0x43, 0x5e, 0x43, + 0x0b, 0x11, 0x99, 0xe0, 0xf2, 0x58, 0x6e, 0xe9, 0x0a, 0xbe, 0xfb, 0x9d, + 0x78, 0xdb, 0xc4, 0x1f, 0xc2, 0x6a, 0xc8, 0xa9, 0x47, 0x6e, 0x4d, 0x35, + 0x80, 0x74, 0x08, 0xcd, 0xcd, 0x64, 0xa9, 0xa2, 0x06, 0x5a, 0x9a, 0x3e, + 0x26, 0x22, 0xd3, 0x98, 0x2d, 0xbe, 0x2a, 0x11, 0x17, 0x8a, 0xb9, 0xf0, + 0xd7, 0x03, 0xd0, 0xed, 0x11, 0x85, 0x47, 0x0f, 0xf0, 0xf3, 0x51, 0xad, + 0x2e, 0x8f, 0x29, 0xe8, 0x34, 0x7e, 0x40, 0x2a, 0x9f, 0x51, 0xd0, 0x89, + 0xf4, 0x1b, 0x69, 0x7c, 0x40, 0x21, 0x4e, 0xa4, 0x07, 0x4a, 0x55, 0x9d, + 0x45, 0x27, 0xcb, 0x27, 0xa4, 0x4b, 0x65, 0xd7, 0xc9, 0x78, 0x20, 0x6a, + 0x07, 0x56, 0xcc, 0x5b, 0x44, 0x0d, 0x9d, 0x65, 0x0d, 0xc7, 0x11, 0x7e, + 0x69, 0xbb, 0xba, 0x90, 0x4c, 0x88, 0x79, 0x4c, 0x67, 0xea, 0x24, 0xcd, + 0x6c, 0x3a, 0x57, 0xa5, 0x68, 0xae, 0x33, 0xb9, 0x3a, 0xc9, 0xb0, 0x9f, + 0xce, 0x8f, 0xd3, 0xe2, 0x7a, 0xa4, 0xf3, 0x75, 0x12, 0x2a, 0x94, 0x90, + 0xb5, 0x6a, 0xfe, 0x6f, 0xe4, 0x95, 0x70, 0x5c, 0x27, 0xa9, 0x74, 0x2a, + 0x45, 0x97, 0x4e, 0xbd, 0x8e, 0x35, 0x83, 0x82, 0x5f, 0x8d, 0x62, 0xe4, + 0xf1, 0xba, 0xaf, 0x69, 0x72, 0xc6, 0x27, 0x7a, 0xef, 0x1e, 0x92, 0x3f, + 0xc7, 0x32, 0x29, 0x02, 0xe0, 0x8c, 0xcf, 0x5a, 0x2e, 0x45, 0x10, 0x94, + 0xfe, 0x59, 0xcb, 0xa6, 0x10, 0x82, 0x33, 0x3e, 0x1b, 0xf9, 0x14, 0xc1, + 0xc8, 0x1c, 0x00, 0x1d, 0x28, 0x95, 0x53, 0x55, 0x52, 0xf7, 0xab, 0x18, + 0x85, 0xd6, 0x19, 0xcf, 0x39, 0xbd, 0x6a, 0xbb, 0xc0, 0x25, 0xbb, 0x5f, + 0x3c, 0x96, 0xd3, 0xd8, 0xff, 0x15, 0x32, 0x38, 0x61, 0x85, 0x7b, 0xf8, + 0xe4, 0x2b, 0x89, 0x31, 0x9c, 0xb3, 0xa1, 0x6a, 0xc6, 0xe6, 0x48, 0xdf, + 0xcb, 0xd7, 0x8f, 0x2f, 0x62, 0x61, 0xa2, 0xa0, 0xf7, 0x3b, 0x8c, 0x0b, + 0xd5, 0xef, 0x5d, 0x41, 0x7a, 0x4d, 0xbe, 0x09, 0xf5, 0xba, 0x6e, 0x7d, + 0xef, 0x8a, 0x45, 0x95, 0x78, 0x26, 0xc1, 0xa8, 0xc7, 0xda, 0xef, 0x0e, + 0x56, 0xe5, 0x04, 0x2f, 0x24, 0x2e, 0xe2, 0xc4, 0x81, 0x81, 0x0a, 0x7e, + 0xf2, 0xe1, 0xcd, 0x6b, 0x72, 0x3f, 0x1e, 0x10, 0x04, 0x58, 0xf8, 0xe0, + 0x03, 0xba, 0xfa, 0x89, 0xe4, 0xab, 0x28, 0xd5, 0xad, 0x98, 0x27, 0xd5, + 0xa8, 0xfa, 0xc1, 0x70, 0xf3, 0x39, 0x79, 0xe7, 0x21, 0x24, 0x7d, 0x0c, + 0x43, 0x24, 0xc5, 0x6c, 0x92, 0x53, 0x3e, 0x99, 0xb4, 0x66, 0xc9, 0x52, + 0x32, 0x05, 0xac, 0x14, 0xce, 0x38, 0xad, 0x2b, 0x4a, 0x97, 0x1e, 0x4c, + 0x15, 0xdd, 0x14, 0xd2, 0xd8, 0x69, 0xe9, 0xe2, 0xd7, 0x16, 0xc5, 0x21, + 0xd6, 0x6a, 0x99, 0x76, 0x65, 0x69, 0x4b, 0xe8, 0xc1, 0x54, 0x8a, 0xac, + 0x19, 0x80, 0x64, 0x2e, 0x71, 0x5c, 0x94, 0xd8, 0x5f, 0xb3, 0x6d, 0x88, + 0x97, 0x7c, 0x5b, 0x64, 0x90, 0x62, 0x78, 0x5c, 0x19, 0x27, 0xbd, 0xed, + 0x7b, 0xfd, 0xfa, 0x75, 0x0a, 0x2b, 0x58, 0x98, 0xda, 0xef, 0xac, 0x59, + 0xc5, 0xce, 0x8a, 0x55, 0xec, 0xac, 0x8c, 0x94, 0x5e, 0xf8, 0xbd, 0x7e, + 0x1d, 0xbb, 0x85, 0x75, 0x2c, 0x4c, 0xed, 0x77, 0xd7, 0xac, 0x63, 0x77, + 0xc5, 0x3a, 0x76, 0xb5, 0xd6, 0x9a, 0xb1, 0x90, 0xef, 0xd4, 0x84, 0xf9, + 0x66, 0x18, 0x0a, 0x61, 0xc5, 0x77, 0xab, 0x9d, 0x4f, 0x30, 0xf6, 0x7d, + 0xf3, 0xee, 0x0d, 0x3c, 0x0a, 0x7d, 0x36, 0xd2, 0xd8, 0x2d, 0x09, 0x2f, + 0x4d, 0x7f, 0x58, 0x55, 0x43, 0xb1, 0x19, 0xa6, 0x64, 0xd7, 0xb4, 0x7a, + 0xa6, 0xff, 0x4a, 0xca, 0xb2, 0x13, 0xa7, 0x61, 0x64, 0x5a, 0x12, 0x8a, + 0x7b, 0x77, 0x1a, 0x88, 0x93, 0x92, 0x30, 0x66, 0xec, 0x32, 0x40, 0x9c, + 0x96, 0x86, 0x32, 0x43, 0x98, 0x01, 0x53, 0x89, 0x49, 0x38, 0x33, 0x92, + 0x19, 0x30, 0x99, 0xa6, 0xa0, 0x8a, 0x05, 0x56, 0x28, 0x25, 0x23, 0x24, + 0x86, 0x95, 0x2e, 0x0f, 0x2b, 0x87, 0x11, 0x14, 0xf0, 0xc8, 0xf7, 0x97, + 0xf5, 0xc7, 0x0a, 0x11, 0xa7, 0xab, 0x71, 0x2d, 0xa7, 0x5a, 0x85, 0x36, + 0xba, 0x85, 0x95, 0xf6, 0xdf, 0x25, 0xc5, 0xba, 0xa8, 0x64, 0xab, 0x9e, + 0xb6, 0xe8, 0x5c, 0xd6, 0x08, 0x7b, 0x71, 0x51, 0x14, 0xce, 0x9a, 0x7f, + 0xd3, 0x04, 0x8b, 0xf9, 0x65, 0x10, 0x4d, 0xb3, 0xec, 0xd1, 0x60, 0x35, + 0x4d, 0xb6, 0x18, 0xad, 0x84, 0xd1, 0x88, 0x16, 0x3f, 0x1b, 0xcc, 0xe4, + 0xcb, 0xf2, 0xa5, 0xc0, 0xbd, 0x04, 0x11, 0x9c, 0xb9, 0x75, 0x87, 0x7c, + 0xaa, 0xe9, 0x53, 0xeb, 0xf3, 0x81, 0x19, 0x72, 0x93, 0x28, 0xac, 0xc3, + 0x9e, 0xd5, 0xde, 0x4b, 0xdd, 0xc3, 0xcb, 0x88, 0x9a, 0x1c, 0xe2, 0x7d, + 0x6b, 0x4f, 0xa1, 0x2e, 0xe9, 0x04, 0x5a, 0x32, 0xc0, 0xb8, 0x8e, 0x0d, + 0x17, 0x5b, 0xbf, 0xed, 0xeb, 0x37, 0x27, 0xff, 0xb6, 0xbf, 0x35, 0xae, + 0x5b, 0x15, 0x3c, 0x62, 0xbf, 0xff, 0x69, 0x25, 0x3d, 0x86, 0xdc, 0x1c, + 0x37, 0x21, 0x53, 0xa8, 0x35, 0x25, 0x83, 0xfb, 0xbb, 0xdf, 0x89, 0x35, + 0x4e, 0xbd, 0x90, 0x2e, 0xaf, 0x72, 0x37, 0xd4, 0xb7, 0x9b, 0x2a, 0xdb, + 0x4d, 0x35, 0xed, 0x3e, 0xd4, 0xec, 0x4e, 0x75, 0x4c, 0x9b, 0x88, 0xc1, + 0x84, 0x5e, 0x90, 0x6c, 0x05, 0xfc, 0xc9, 0xf9, 0x34, 0xe3, 0x51, 0x86, + 0x55, 0xfa, 0xf5, 0xc6, 0x48, 0x28, 0xe8, 0xf7, 0xf8, 0x50, 0xe6, 0x2c, + 0x6f, 0x4e, 0xf3, 0xb1, 0xac, 0x47, 0xb2, 0xd4, 0xa3, 0xba, 0x55, 0xad, + 0xf5, 0x0e, 0xaf, 0x52, 0x1e, 0xd0, 0xd4, 0x3e, 0xc5, 0x21, 0x10, 0x5c, + 0x66, 0x12, 0x9b, 0x72, 0x1b, 0xbf, 0xe9, 0x70, 0x2b, 0xcd, 0x70, 0xfa, + 0x38, 0x6b, 0x4e, 0xb3, 0x9a, 0x16, 0x66, 0x71, 0x74, 0x1c, 0x3a, 0x75, + 0x52, 0x3b, 0xb6, 0x7d, 0xfc, 0x66, 0x44, 0x49, 0x7c, 0xaf, 0x1a, 0xf3, + 0x91, 0xf0, 0xc7, 0xb4, 0x82, 0xe9, 0xee, 0x92, 0xf6, 0xf0, 0x38, 0x1e, + 0xd5, 0xae, 0x59, 0xd9, 0x41, 0x30, 0x39, 0x22, 0x2c, 0x47, 0xd0, 0xc9, + 0x23, 0xe8, 0xac, 0x87, 0xa1, 0x9b, 0xc7, 0xd0, 0x2d, 0xc1, 0x90, 0xb7, + 0xd5, 0x26, 0x33, 0xe3, 0xa5, 0xc7, 0x9d, 0xab, 0x96, 0xec, 0x0e, 0x9b, + 0x6c, 0x2a, 0x26, 0x58, 0xdc, 0x58, 0x09, 0x5e, 0x94, 0xcf, 0x7c, 0x8b, + 0x06, 0x1b, 0xeb, 0xe1, 0x79, 0x55, 0x81, 0x77, 0xf2, 0x28, 0x3a, 0xeb, + 0xe2, 0xe8, 0xe6, 0x71, 0x74, 0x35, 0x8e, 0x3b, 0x6d, 0x36, 0xb2, 0x34, + 0x9b, 0x6c, 0x35, 0xa2, 0x57, 0xdc, 0x68, 0x86, 0x13, 0x39, 0xb5, 0xb9, + 0x45, 0x93, 0xf5, 0x95, 0xb3, 0xb4, 0xaa, 0xb4, 0x3b, 0x79, 0x0c, 0x9d, + 0x35, 0x51, 0x74, 0xf3, 0x28, 0xba, 0x0a, 0xc5, 0x9d, 0xb6, 0x17, 0xd9, + 0xf1, 0x8d, 0x36, 0x18, 0x11, 0x2c, 0x69, 0xb1, 0x04, 0x2f, 0x32, 0x56, + 0x70, 0x9b, 0x36, 0x3b, 0x57, 0xbe, 0xeb, 0xca, 0x12, 0xef, 0xe4, 0x51, + 0x74, 0xd6, 0xc5, 0xd1, 0xcd, 0xe3, 0xe8, 0x2a, 0x1c, 0x77, 0xdb, 0x6c, + 0x72, 0xa0, 0xdc, 0x64, 0xbb, 0x49, 0x8a, 0xc5, 0x0d, 0x97, 0xe4, 0x46, + 0x87, 0x70, 0xf2, 0x4d, 0x27, 0xc5, 0x62, 0x82, 0xdd, 0xb1, 0xcb, 0xb8, + 0x9e, 0x64, 0x74, 0x3c, 0xe2, 0x59, 0x8c, 0xe8, 0x6e, 0x83, 0x12, 0x86, + 0xc1, 0x7c, 0x64, 0xa2, 0x66, 0xa6, 0x36, 0x9b, 0xf5, 0x23, 0x98, 0x60, + 0xb1, 0xf0, 0x13, 0xbc, 0xa8, 0xe8, 0x61, 0x4e, 0xf4, 0x46, 0x29, 0x39, + 0x3f, 0x33, 0x0f, 0xcb, 0x8b, 0xf6, 0x98, 0x72, 0xef, 0x56, 0xaa, 0x4c, + 0xb0, 0x58, 0xa0, 0xd7, 0xc6, 0x71, 0x4b, 0xd7, 0xcc, 0x53, 0x95, 0x1a, + 0xcc, 0x03, 0x7c, 0x27, 0x82, 0x77, 0x2a, 0x47, 0x4f, 0x24, 0x48, 0x54, + 0xa9, 0x79, 0x84, 0xed, 0x62, 0xef, 0x6c, 0x55, 0x5f, 0x56, 0xf4, 0x49, + 0xaf, 0xb6, 0x35, 0x29, 0xe5, 0xf3, 0xa7, 0x4a, 0xe2, 0x82, 0x9b, 0x4a, + 0x2a, 0xd4, 0x95, 0x42, 0xdb, 0x53, 0x74, 0x53, 0x33, 0x8a, 0x1c, 0xf1, + 0x27, 0x56, 0x6b, 0x5d, 0xd2, 0x74, 0x39, 0xce, 0x1a, 0x74, 0x93, 0x11, + 0xf9, 0x14, 0xa4, 0x14, 0x5d, 0xb1, 0xf0, 0xda, 0xbb, 0xab, 0x4b, 0x8f, + 0xde, 0xf0, 0xf9, 0xff, 0x2c, 0xbf, 0xad, 0xad, 0xcc, 0x4a, 0x0a, 0xbd, + 0x77, 0x25, 0xc0, 0x66, 0x9c, 0x4c, 0xd4, 0x81, 0x0d, 0xba, 0x82, 0xc1, + 0x7c, 0xc2, 0xcc, 0x7f, 0xe5, 0xaa, 0x4d, 0x8f, 0x37, 0xea, 0xb1, 0x29, + 0x88, 0x4d, 0x80, 0x66, 0x12, 0x9d, 0xbb, 0xc0, 0x4e, 0xf0, 0xac, 0x85, + 0xcd, 0x84, 0xd5, 0x3b, 0xb4, 0xae, 0x4a, 0x8d, 0xff, 0xaa, 0x96, 0x31, + 0x37, 0xeb, 0x49, 0xe7, 0x9a, 0xe8, 0x52, 0xce, 0xa0, 0x7e, 0x80, 0xcd, + 0x1b, 0xd3, 0x1d, 0x7b, 0xde, 0x73, 0xc6, 0xa1, 0xaa, 0x14, 0xf9, 0xdc, + 0xb9, 0xe5, 0x7c, 0xcb, 0x14, 0x30, 0x73, 0x28, 0x62, 0x94, 0xf6, 0xbc, + 0xc8, 0x5a, 0x73, 0xa1, 0x54, 0xd7, 0x4e, 0xb8, 0xf2, 0xff, 0x43, 0xf5, + 0xe7, 0xfa, 0xac, 0x25, 0x01, 0x72, 0xdb, 0xfe, 0x87, 0x04, 0x40, 0xd5, + 0x59, 0xab, 0xfe, 0xe4, 0x00, 0xfd, 0x2f, 0x09, 0x80, 0xea, 0xb3, 0x9e, + 0x04, 0xa4, 0x57, 0xb1, 0x8e, 0x08, 0xfe, 0x23, 0x2a, 0x2a, 0xd9, 0x5e, + 0xab, 0xa6, 0x18, 0xe9, 0xd7, 0xb3, 0x76, 0x9b, 0xaa, 0x0b, 0x18, 0x5b, + 0xd9, 0x70, 0x5d, 0x27, 0x2f, 0x22, 0x79, 0x35, 0x9d, 0xc9, 0x15, 0x02, + 0x5b, 0x85, 0xe9, 0x87, 0x82, 0xd2, 0xb7, 0x52, 0x83, 0xef, 0x05, 0xdd, + 0x42, 0x52, 0x9d, 0x07, 0x18, 0x71, 0x67, 0x3e, 0x5d, 0xd0, 0x4d, 0x1b, + 0xf4, 0x28, 0x06, 0x56, 0xb3, 0xcc, 0x50, 0x01, 0xa8, 0x40, 0x0d, 0x14, + 0xbf, 0x7a, 0xf3, 0xfa, 0x27, 0x28, 0xf1, 0x5e, 0xfc, 0x01, 0xa1, 0xac, + 0x48, 0xd7, 0x8c, 0x00, 0x70, 0xa4, 0x97, 0x0f, 0x63, 0xb0, 0xc7, 0x26, + 0x85, 0x83, 0x32, 0x49, 0x8f, 0x2a, 0x35, 0x0f, 0x91, 0x1b, 0xa2, 0xcc, + 0xf1, 0x0d, 0x9e, 0x88, 0x6c, 0x5b, 0x0f, 0x1f, 0x5a, 0x9c, 0x41, 0x58, + 0xe6, 0xa1, 0x9c, 0xe1, 0xb4, 0x0a, 0x5f, 0x7b, 0x16, 0xc9, 0xd1, 0x4b, + 0xa1, 0x09, 0x67, 0x3e, 0xb6, 0x00, 0xd1, 0x95, 0x5f, 0x8a, 0xa3, 0x24, + 0x29, 0x0d, 0xfd, 0x15, 0xb0, 0x3d, 0x7a, 0x04, 0x1a, 0x71, 0x52, 0xcd, + 0x60, 0x36, 0x7f, 0xb1, 0x0c, 0x62, 0xa8, 0x04, 0x4e, 0xe3, 0x14, 0x2c, + 0x2c, 0x59, 0x39, 0x9e, 0x0f, 0x06, 0x18, 0xf1, 0xff, 0x55, 0xde, 0x91, + 0x36, 0xb7, 0x4e, 0x03, 0x3f, 0xf3, 0x2f, 0x4c, 0x38, 0x9e, 0x03, 0x49, + 0x9a, 0xa4, 0xaf, 0xe5, 0x08, 0x81, 0x81, 0x72, 0x3d, 0x86, 0x6b, 0xe8, + 0xe3, 0x9a, 0x4e, 0xe7, 0x4d, 0x92, 0xba, 0xa9, 0x21, 0x4d, 0x82, 0xed, + 0xd0, 0x16, 0x28, 0xc3, 0x3f, 0xe4, 0x2f, 0xb1, 0xbb, 0x92, 0xac, 0xdb, + 0x96, 0xcd, 0x0b, 0x67, 0x07, 0x5e, 0x12, 0x69, 0x77, 0xb5, 0x5a, 0xad, + 0x56, 0xab, 0x6b, 0xf5, 0x6c, 0xc7, 0x42, 0x86, 0x9f, 0x4e, 0x3a, 0xb5, + 0xc2, 0xe9, 0x2a, 0xe4, 0xdf, 0xfb, 0xe2, 0x8b, 0xcf, 0xbe, 0x78, 0x36, + 0xb2, 0x9e, 0xd2, 0x62, 0xe5, 0x19, 0x65, 0xdd, 0x2b, 0x8b, 0xd9, 0xd8, + 0xca, 0x5d, 0x6a, 0x2f, 0xba, 0xfc, 0xdf, 0xf9, 0xfc, 0x33, 0x8c, 0xfb, + 0x13, 0x91, 0x06, 0x14, 0x99, 0xf4, 0xbf, 0x89, 0x33, 0x09, 0xf6, 0xc1, + 0x7b, 0x2e, 0x28, 0x02, 0x40, 0xa5, 0x65, 0x64, 0x2d, 0xd7, 0x6e, 0x99, + 0x14, 0x14, 0x2f, 0x95, 0xb5, 0xfe, 0x33, 0xde, 0xdd, 0xab, 0x6d, 0x92, + 0x2d, 0xe0, 0x07, 0xb8, 0x4e, 0xe6, 0xf6, 0xd5, 0xf0, 0x85, 0x0e, 0x2f, + 0x2a, 0x00, 0xb9, 0x7f, 0xb1, 0x59, 0x23, 0x05, 0x70, 0xbf, 0xde, 0x2e, + 0x8a, 0x2c, 0x9d, 0xef, 0x8a, 0x84, 0x8e, 0xf4, 0x6f, 0xbe, 0x87, 0xbc, + 0x59, 0x7e, 0x35, 0xcb, 0x32, 0xbc, 0xcf, 0x00, 0x64, 0x7b, 0x23, 0x38, + 0xde, 0xd3, 0xad, 0x23, 0x0d, 0x67, 0x50, 0x66, 0xab, 0x3e, 0xd7, 0x02, + 0x83, 0x35, 0xe1, 0xec, 0x0d, 0xc0, 0x49, 0x28, 0x03, 0xc3, 0x32, 0x82, + 0xbc, 0x57, 0x75, 0xf0, 0x5f, 0xe3, 0x3c, 0xdd, 0x01, 0x14, 0xf1, 0xe4, + 0x1a, 0x41, 0x81, 0x0d, 0x76, 0x24, 0x47, 0xf6, 0x91, 0x84, 0xc4, 0xe4, + 0x7c, 0xda, 0xef, 0x03, 0xf0, 0x28, 0xe5, 0x1b, 0x65, 0xab, 0x14, 0xa8, + 0xfd, 0x98, 0xce, 0xe0, 0xc1, 0xb3, 0xd3, 0xc7, 0xaf, 0x03, 0x25, 0x6b, + 0xb1, 0x21, 0x41, 0x2d, 0x87, 0x89, 0xd3, 0x6e, 0xce, 0x6e, 0x34, 0xc0, + 0x8a, 0xfa, 0x71, 0x97, 0x3a, 0x00, 0x57, 0x9d, 0x8e, 0xa5, 0xf9, 0x44, + 0x1a, 0x2a, 0xf6, 0xd1, 0xe9, 0x67, 0x9f, 0x0e, 0xb6, 0xb3, 0x8c, 0x6e, + 0xe7, 0x3b, 0x7a, 0x13, 0xbf, 0x19, 0x71, 0xcd, 0x37, 0x4a, 0x18, 0x51, + 0x19, 0xb2, 0x85, 0x35, 0x35, 0xfe, 0x31, 0x90, 0xf2, 0x32, 0x3f, 0x8c, + 0x3d, 0xd7, 0xc2, 0x86, 0x7a, 0xfe, 0x80, 0x3c, 0x81, 0x0d, 0xd6, 0xb3, + 0x6b, 0xaa, 0x41, 0xf9, 0x83, 0x5f, 0x27, 0x92, 0x6f, 0x20, 0x56, 0xfc, + 0xd1, 0x0a, 0x07, 0x95, 0xcd, 0x6e, 0x55, 0xfd, 0xcc, 0xa3, 0x22, 0x4b, + 0x6a, 0xbd, 0x28, 0xbd, 0x60, 0x3f, 0x09, 0x0e, 0x8d, 0xa7, 0x9f, 0x24, + 0xa8, 0xb4, 0x33, 0xb9, 0x71, 0xc7, 0x16, 0x0d, 0xca, 0x83, 0x3e, 0x04, + 0xbf, 0xd0, 0x28, 0x15, 0xdc, 0xaf, 0x82, 0x8c, 0xa8, 0x41, 0x31, 0xbf, + 0xda, 0xdc, 0x9c, 0xae, 0xc1, 0x5e, 0xcc, 0x67, 0x59, 0xac, 0x02, 0x97, + 0x81, 0x76, 0x7b, 0x91, 0x38, 0x0a, 0x0b, 0xd3, 0xdb, 0xe1, 0xd0, 0x65, + 0x3b, 0x30, 0xcd, 0xe8, 0xd7, 0x44, 0x98, 0x75, 0x6c, 0x10, 0x1f, 0x48, + 0x93, 0x5e, 0xab, 0x14, 0xed, 0x02, 0x43, 0x9c, 0xa6, 0xba, 0x00, 0x08, + 0xb2, 0xc7, 0x4e, 0x80, 0xc0, 0x03, 0x6a, 0x0b, 0xec, 0x0a, 0x51, 0x3f, + 0x7a, 0xf4, 0xae, 0x92, 0x91, 0x5e, 0xf0, 0xd4, 0x0f, 0xe9, 0x09, 0x4f, + 0x25, 0xe7, 0x8a, 0x12, 0xba, 0xca, 0xde, 0x1d, 0x3e, 0x33, 0x3a, 0x15, + 0x12, 0x13, 0x41, 0x9d, 0xb8, 0xd0, 0xe2, 0xce, 0xbb, 0x8f, 0xbe, 0xea, + 0xa8, 0xd0, 0xf9, 0x76, 0x5d, 0x01, 0x7d, 0xfa, 0xf9, 0xdb, 0x9f, 0x02, + 0xb8, 0xb6, 0x31, 0x58, 0x01, 0xfe, 0x48, 0x83, 0x9d, 0x17, 0x55, 0xa4, + 0xdf, 0xf9, 0xf2, 0xf1, 0xe3, 0xcf, 0x74, 0xe2, 0xf3, 0x46, 0x9c, 0x17, + 0xb7, 0x85, 0x05, 0x4d, 0xa3, 0x1c, 0x6e, 0x53, 0xc6, 0x86, 0x3c, 0x63, + 0x43, 0x94, 0x5d, 0x41, 0x0a, 0x0b, 0xc5, 0x1b, 0x75, 0x09, 0x1c, 0x4d, + 0xc0, 0x3d, 0xce, 0x18, 0xc8, 0x2a, 0x59, 0xda, 0xfe, 0x62, 0x47, 0x7b, + 0x56, 0x95, 0x03, 0x41, 0x9a, 0x86, 0x0f, 0x48, 0x5d, 0x25, 0x0b, 0x2c, + 0x02, 0xa2, 0x8a, 0x07, 0x5b, 0x65, 0x0e, 0x32, 0x32, 0x15, 0x2c, 0xc9, + 0x64, 0x8a, 0xfe, 0x01, 0xa7, 0x70, 0x21, 0xcf, 0x5a, 0x71, 0x41, 0xe0, + 0x98, 0x63, 0xe0, 0xba, 0x8b, 0xc4, 0xd2, 0xd8, 0x34, 0x1e, 0xf4, 0x55, + 0x0b, 0xf5, 0x1e, 0xc7, 0x28, 0x67, 0xe5, 0xe5, 0xa1, 0x61, 0x8e, 0x04, + 0x0d, 0xae, 0x13, 0xa7, 0xad, 0x61, 0xfc, 0xa7, 0x4f, 0x0f, 0xe1, 0x9a, + 0x4f, 0xc7, 0x4a, 0x34, 0xad, 0x3b, 0xc6, 0x8a, 0xb2, 0xd2, 0x88, 0x4d, + 0x23, 0x65, 0xf4, 0x56, 0xd4, 0xa1, 0x25, 0x8e, 0x27, 0xf3, 0xcd, 0xed, + 0x13, 0x58, 0x65, 0x02, 0x8a, 0x09, 0x7f, 0x50, 0x37, 0x7a, 0x5d, 0xc9, + 0x53, 0xc8, 0xfa, 0x04, 0x54, 0x6c, 0x96, 0xcb, 0x55, 0xc2, 0x3a, 0x1d, + 0x79, 0x3e, 0x52, 0x42, 0xa0, 0xe4, 0x86, 0x84, 0x18, 0x23, 0x1d, 0x99, + 0xad, 0x35, 0x21, 0x94, 0x52, 0x0e, 0x7f, 0x86, 0x76, 0x00, 0xa8, 0x2f, + 0x6b, 0x5e, 0xa8, 0x59, 0x5a, 0x79, 0xda, 0x03, 0xf5, 0xc7, 0xd1, 0xf5, + 0xc5, 0xc3, 0x68, 0x05, 0xbb, 0x35, 0xb7, 0xab, 0x31, 0xaa, 0x65, 0xec, + 0x17, 0x4e, 0xc4, 0x12, 0x49, 0x18, 0x41, 0x43, 0x32, 0x8c, 0x9d, 0x5d, + 0x8d, 0x2b, 0x60, 0xc5, 0x5c, 0x91, 0xcb, 0x12, 0x19, 0x41, 0x1d, 0x45, + 0x17, 0xec, 0x43, 0x98, 0x0e, 0xc8, 0xe1, 0xe1, 0x7e, 0x3c, 0x90, 0xf1, + 0xd1, 0xd3, 0x77, 0x41, 0x78, 0x85, 0x03, 0xbc, 0x90, 0x5d, 0xca, 0x16, + 0x56, 0xbf, 0xcb, 0x37, 0xeb, 0x66, 0x8e, 0x08, 0x46, 0x70, 0x8f, 0x64, + 0x50, 0x57, 0xd3, 0xf7, 0x28, 0xae, 0xb7, 0xf2, 0x96, 0x40, 0x98, 0x1b, + 0xf2, 0x96, 0xee, 0x71, 0x80, 0x1a, 0xfc, 0x7c, 0xaf, 0x4f, 0x98, 0xbe, + 0x60, 0x87, 0x1c, 0xca, 0x57, 0x75, 0xcb, 0x12, 0x6e, 0xd2, 0xe2, 0x8a, + 0x05, 0x81, 0x8d, 0x40, 0xee, 0xb9, 0x44, 0xba, 0x84, 0x0e, 0x1f, 0xf3, + 0x2b, 0x0b, 0x30, 0x3a, 0x95, 0x18, 0x5d, 0x97, 0xb3, 0xfd, 0xac, 0xc8, + 0x35, 0xc3, 0x12, 0x42, 0x7a, 0xb7, 0x8b, 0xd5, 0x87, 0xdc, 0x5d, 0xe2, + 0x75, 0x85, 0x62, 0xa5, 0xd2, 0xb8, 0xf4, 0x77, 0xde, 0xb5, 0x7d, 0x22, + 0x2d, 0x1f, 0x24, 0x63, 0xa2, 0xb8, 0x9f, 0x44, 0xa6, 0x5b, 0xd0, 0xa5, + 0x1a, 0x3f, 0x05, 0x1f, 0x8f, 0xcf, 0x12, 0xe4, 0xbb, 0x72, 0x38, 0x8e, + 0x20, 0xe5, 0x50, 0xdf, 0x05, 0x63, 0xdd, 0xf3, 0xd9, 0x47, 0xb4, 0x32, + 0xde, 0xb1, 0xd5, 0x75, 0xc1, 0x0e, 0x01, 0x1c, 0xbb, 0xdd, 0x0b, 0xc3, + 0xb9, 0x30, 0x2b, 0x2d, 0xbd, 0x8a, 0xe8, 0x13, 0xb1, 0x0d, 0x21, 0x5f, + 0x50, 0xe6, 0x8f, 0x4d, 0xe7, 0x11, 0x9e, 0x97, 0x05, 0xbb, 0xce, 0x9e, + 0x62, 0x8e, 0x2e, 0xb3, 0xcd, 0xb5, 0x78, 0x79, 0x59, 0x7d, 0xb4, 0x79, + 0x20, 0x27, 0x42, 0xda, 0x1a, 0x2d, 0x93, 0x5a, 0xb2, 0x46, 0x89, 0xd9, + 0x5a, 0x44, 0x44, 0x41, 0x8d, 0xd4, 0x0e, 0xe7, 0xd6, 0x24, 0x05, 0xc0, + 0x54, 0x26, 0xa4, 0xe1, 0xd6, 0x26, 0xdb, 0x67, 0x22, 0x58, 0xaf, 0xbe, + 0x79, 0xd7, 0x99, 0x11, 0x0d, 0x94, 0x6f, 0x6a, 0x2a, 0x5f, 0x25, 0xbc, + 0x6e, 0x47, 0x28, 0xcd, 0xd4, 0x46, 0xf9, 0x21, 0x44, 0x99, 0xc4, 0xa5, + 0xc1, 0x9a, 0x6f, 0x2e, 0xee, 0x4c, 0x2b, 0xc6, 0x9d, 0x92, 0xa9, 0xaf, + 0x64, 0x96, 0x0f, 0x48, 0xd2, 0x5d, 0xd7, 0xa6, 0x0a, 0xf8, 0x8b, 0x4f, + 0x15, 0x9e, 0xd1, 0xac, 0x4f, 0xf9, 0xca, 0xae, 0x36, 0xcd, 0xd5, 0x86, + 0x16, 0x32, 0x66, 0x82, 0xb6, 0xd5, 0xd8, 0xf2, 0x46, 0x90, 0x78, 0x62, + 0xbd, 0x74, 0x36, 0x60, 0x6e, 0xd1, 0x1f, 0xc9, 0x66, 0x75, 0xd2, 0x2e, + 0x32, 0x47, 0xcb, 0xd1, 0x64, 0xfd, 0x79, 0x28, 0x82, 0xa6, 0xed, 0xac, + 0x2a, 0xdc, 0x27, 0xee, 0x11, 0x7e, 0xd7, 0xd9, 0xbb, 0x0d, 0x2f, 0x5a, + 0x5b, 0xc8, 0xb1, 0x55, 0x42, 0x4a, 0xc9, 0x18, 0xea, 0xf4, 0x2e, 0xa6, + 0x2d, 0xdb, 0x80, 0x38, 0xaf, 0xdf, 0x05, 0x3c, 0xbe, 0x76, 0xf3, 0x3e, + 0xff, 0x19, 0x6b, 0xfe, 0xe8, 0x6a, 0x33, 0xe7, 0xf9, 0xef, 0xc0, 0xd7, + 0xf8, 0x8c, 0x8c, 0x31, 0x33, 0x28, 0xe9, 0xe5, 0x5d, 0x29, 0xb9, 0xee, + 0x79, 0x2f, 0xfa, 0x99, 0xdd, 0x99, 0x7a, 0x80, 0x3d, 0x34, 0x65, 0x57, + 0xd3, 0x0e, 0x70, 0x04, 0x79, 0x20, 0x78, 0x2e, 0x4b, 0xe4, 0xc3, 0x73, + 0xfc, 0x40, 0xa0, 0x3f, 0xe8, 0x51, 0x49, 0xbd, 0xe8, 0x81, 0x36, 0xf6, + 0xd0, 0x56, 0x83, 0x73, 0xd6, 0x70, 0xca, 0x6e, 0x91, 0xd0, 0x08, 0x23, + 0xa8, 0x76, 0xeb, 0x07, 0xb6, 0x04, 0x0c, 0x9b, 0x82, 0x61, 0x8c, 0x69, + 0x4f, 0xc3, 0x7e, 0x2a, 0x2c, 0x7e, 0x79, 0x72, 0xf2, 0xde, 0xe9, 0xa9, + 0xd1, 0x00, 0x68, 0x05, 0x7b, 0x72, 0xc0, 0x09, 0x99, 0x92, 0x99, 0xbd, + 0x83, 0x46, 0x34, 0xf0, 0x11, 0x72, 0xb6, 0x86, 0x04, 0x14, 0x0f, 0x69, + 0x72, 0xd6, 0xd8, 0x96, 0x97, 0xdd, 0x0b, 0xc4, 0xc2, 0x5c, 0x6b, 0xd1, + 0x3f, 0x82, 0x0d, 0x3e, 0x9b, 0xac, 0x32, 0x81, 0x38, 0x6a, 0xda, 0xbe, + 0x7e, 0x4d, 0xe6, 0x9f, 0x8a, 0xba, 0xeb, 0x3e, 0x70, 0xc2, 0x76, 0x08, + 0xed, 0x8e, 0xfa, 0xac, 0xf2, 0xb3, 0x5c, 0xd1, 0xf2, 0x7a, 0xeb, 0xcd, + 0x9d, 0x74, 0xe8, 0x3a, 0xb8, 0x60, 0x0a, 0x74, 0x42, 0x4c, 0x8b, 0xb2, + 0xfe, 0xa6, 0x32, 0x06, 0xfa, 0x87, 0x44, 0x2c, 0xc3, 0xe3, 0xa4, 0x99, + 0x63, 0x9f, 0x4b, 0x62, 0x80, 0xef, 0x45, 0x23, 0xfd, 0xc0, 0x28, 0x11, + 0xb6, 0xe9, 0xe2, 0x40, 0x10, 0x42, 0x19, 0x17, 0x49, 0x4c, 0x56, 0xef, + 0x9d, 0x9d, 0x92, 0xcd, 0xcc, 0x69, 0xe1, 0x24, 0xa7, 0xf9, 0xb9, 0x8b, + 0x9e, 0x3d, 0xa2, 0x6f, 0xd6, 0xa7, 0xe2, 0xb1, 0x07, 0x58, 0xc8, 0x86, + 0x55, 0xd5, 0x15, 0x6c, 0x68, 0x96, 0x6c, 0x99, 0x07, 0x52, 0x22, 0x96, + 0xcf, 0x19, 0xd1, 0xca, 0x2f, 0x5f, 0xd7, 0x26, 0xf0, 0xd7, 0x81, 0x01, + 0x0e, 0x2c, 0x6d, 0x66, 0x74, 0x0a, 0x1a, 0x18, 0xe9, 0x80, 0xfc, 0xd4, + 0x82, 0xb2, 0x9e, 0x0d, 0xa5, 0x38, 0x3c, 0xee, 0xfc, 0x9d, 0xbb, 0x13, + 0x31, 0xa3, 0x89, 0x3b, 0x8c, 0x25, 0xba, 0x1f, 0x0a, 0x9b, 0xb7, 0x4b, + 0xb0, 0x47, 0x62, 0xd0, 0x91, 0x8e, 0x41, 0x0a, 0x84, 0x86, 0x13, 0xf8, + 0x78, 0x23, 0xba, 0xe5, 0x4b, 0x54, 0xf0, 0x0b, 0x42, 0xde, 0xa8, 0x32, + 0xbf, 0x3d, 0x4b, 0xcf, 0xd5, 0xa9, 0x12, 0x25, 0xb8, 0xcf, 0xf0, 0xca, + 0x59, 0xed, 0x6b, 0xfc, 0x1c, 0xaf, 0x4c, 0x39, 0xec, 0x18, 0x8d, 0x03, + 0xb5, 0xa8, 0xbf, 0x9f, 0x60, 0xcb, 0xe8, 0x56, 0xe7, 0xa5, 0x8e, 0x91, + 0x43, 0x8b, 0x91, 0xd7, 0x3a, 0xaa, 0xb8, 0x13, 0x7e, 0xa5, 0x8b, 0x3d, + 0x76, 0x11, 0xcd, 0xd6, 0x17, 0xe5, 0x8e, 0x74, 0xb1, 0x31, 0x1a, 0x02, + 0xb0, 0xf4, 0xd3, 0xa5, 0xc6, 0xb9, 0xa3, 0xb3, 0x4e, 0x86, 0xfc, 0x72, + 0x0d, 0x81, 0x7e, 0x31, 0x82, 0x8e, 0xc9, 0x7f, 0xd0, 0xec, 0xf0, 0x5c, + 0x3d, 0x66, 0xe9, 0x25, 0xb2, 0x0c, 0x23, 0x32, 0x07, 0x6c, 0x2f, 0x8d, + 0x79, 0x18, 0x0d, 0xdc, 0x52, 0xf3, 0x13, 0xb9, 0x09, 0x23, 0xe2, 0xdb, + 0x33, 0xf3, 0xef, 0x31, 0xd9, 0xfb, 0x4b, 0xf7, 0xc6, 0xb6, 0xbf, 0xd3, + 0x81, 0x86, 0xb1, 0xa2, 0x74, 0xc9, 0xa8, 0x79, 0xc4, 0x0f, 0xde, 0x4e, + 0xb2, 0x87, 0x60, 0x46, 0x95, 0x7a, 0x09, 0x44, 0xab, 0x4b, 0xd0, 0x3e, + 0x93, 0xea, 0x2b, 0x53, 0xf9, 0x4e, 0x27, 0xd9, 0xf4, 0x90, 0x11, 0xd3, + 0xed, 0x21, 0x23, 0x5d, 0x0a, 0x62, 0x53, 0xb5, 0xd8, 0x06, 0xcf, 0xce, + 0x3c, 0x92, 0x8b, 0x6d, 0xf8, 0xc7, 0x71, 0x8c, 0xd9, 0x38, 0x35, 0x56, + 0xa7, 0x47, 0x8c, 0xda, 0xc0, 0xce, 0x09, 0xf6, 0x19, 0xc2, 0x9e, 0x0f, + 0xca, 0xb7, 0xf7, 0x24, 0x16, 0x81, 0x68, 0x8b, 0x11, 0x8c, 0x8c, 0xd1, + 0x55, 0x09, 0x4a, 0x68, 0x89, 0x36, 0x1a, 0x4e, 0x24, 0x40, 0xa3, 0x33, + 0x59, 0x17, 0x9b, 0xa8, 0x74, 0x86, 0xa3, 0xab, 0x24, 0x4b, 0x0c, 0xef, + 0x91, 0xa6, 0x2d, 0x39, 0x0f, 0x90, 0x50, 0xd5, 0x92, 0x1c, 0x48, 0x36, + 0xa5, 0x44, 0x13, 0x1c, 0x83, 0xae, 0x9a, 0x59, 0x0d, 0x78, 0xa5, 0x9b, + 0xec, 0xe0, 0x0b, 0x1a, 0x64, 0x45, 0x69, 0xde, 0x12, 0xed, 0x0a, 0x89, + 0x6b, 0xf7, 0x95, 0xf5, 0xe1, 0x30, 0xb2, 0x3a, 0x22, 0x41, 0xd0, 0xe6, + 0x97, 0xf9, 0x07, 0x22, 0x5d, 0x07, 0x6b, 0x52, 0x33, 0x9d, 0x10, 0x90, + 0x36, 0xca, 0x9a, 0xd8, 0x42, 0xe8, 0x9c, 0x5c, 0x81, 0x4d, 0x30, 0x31, + 0xbb, 0x8e, 0xca, 0xca, 0x80, 0x02, 0x55, 0xb5, 0x2d, 0x81, 0x44, 0x75, + 0x25, 0x9a, 0x59, 0xdf, 0x32, 0xc3, 0x04, 0x6c, 0x5e, 0x63, 0x95, 0x35, + 0x49, 0xc6, 0x5f, 0xe7, 0x6b, 0xac, 0xb4, 0x85, 0xec, 0xaf, 0xf5, 0x76, + 0x93, 0xd5, 0xd7, 0x1a, 0x80, 0x64, 0xad, 0x45, 0x8a, 0x5d, 0x6b, 0x91, + 0x61, 0x00, 0xb6, 0xad, 0x35, 0x67, 0x4d, 0x7c, 0xaf, 0xac, 0xf5, 0x16, + 0x6a, 0x6d, 0x22, 0xfb, 0x6b, 0x4d, 0x51, 0x21, 0x6a, 0x6b, 0x8d, 0x40, + 0xb2, 0xd6, 0x22, 0xc5, 0xaa, 0xb5, 0xc8, 0x30, 0x01, 0x5b, 0xd6, 0x9a, + 0xb1, 0x26, 0xc9, 0x54, 0xd5, 0x7a, 0x07, 0xb5, 0xb6, 0x90, 0x2b, 0xda, + 0x1a, 0xbc, 0x8f, 0xda, 0x5a, 0x23, 0x90, 0xac, 0xb5, 0x48, 0xb1, 0x6a, + 0x2d, 0x32, 0x4c, 0xc0, 0x96, 0xb5, 0x66, 0xac, 0x49, 0x32, 0x55, 0xb5, + 0xc6, 0xa1, 0xde, 0x42, 0x76, 0xd6, 0x1a, 0x86, 0x5a, 0x1e, 0x4b, 0xc3, + 0x5f, 0x6d, 0xe1, 0xea, 0x02, 0xa0, 0x3a, 0xc2, 0x1a, 0x3e, 0xa7, 0x28, + 0x8f, 0xd8, 0x58, 0x0a, 0xc7, 0x73, 0xcf, 0xc3, 0x66, 0x5a, 0x33, 0x66, + 0xa6, 0x32, 0x5b, 0xa9, 0x6a, 0xfd, 0x10, 0x29, 0x61, 0xcb, 0x66, 0x65, + 0xbe, 0x14, 0x4f, 0x9d, 0x18, 0x60, 0x4d, 0x3a, 0xb0, 0x46, 0x08, 0x08, + 0x4b, 0x22, 0xfe, 0x26, 0x3d, 0xcd, 0xa1, 0x45, 0x75, 0x4c, 0x57, 0x73, + 0x52, 0x24, 0x0e, 0x9e, 0x9f, 0x07, 0x35, 0xe8, 0x62, 0x2d, 0xcd, 0x96, + 0x8a, 0x2c, 0xaa, 0xad, 0xb7, 0xaa, 0x0d, 0xd8, 0x42, 0x9b, 0x19, 0x29, + 0x20, 0xad, 0x91, 0xf1, 0x6b, 0x73, 0x8e, 0x75, 0xd7, 0x91, 0xb5, 0xe1, + 0x1a, 0x5a, 0x31, 0x89, 0x62, 0x45, 0x8a, 0x97, 0x69, 0x96, 0x17, 0xd4, + 0xb8, 0xd6, 0x92, 0x89, 0x84, 0xe2, 0xe1, 0xaa, 0x08, 0xcc, 0x83, 0x6c, + 0xcf, 0xff, 0xdb, 0x69, 0xfe, 0x9f, 0xd1, 0xfe, 0x66, 0x3d, 0x20, 0xa0, + 0x17, 0x04, 0xf7, 0x04, 0xa5, 0xda, 0x0d, 0x7a, 0x84, 0xa6, 0x8d, 0xdb, + 0x74, 0x5d, 0xaf, 0x84, 0x00, 0x24, 0x6a, 0x8c, 0x08, 0x0e, 0xc5, 0x83, + 0x54, 0x99, 0xdf, 0x4a, 0xdf, 0x18, 0x23, 0xf0, 0x6f, 0x95, 0x9a, 0x89, + 0x01, 0x52, 0xe2, 0x38, 0xbb, 0x18, 0x06, 0x3a, 0xaa, 0xaf, 0x15, 0x42, + 0xf9, 0xa7, 0x23, 0x12, 0x66, 0xff, 0x26, 0x32, 0x60, 0x66, 0x21, 0xd9, + 0x61, 0x73, 0x0b, 0x05, 0x1a, 0x13, 0xeb, 0xcd, 0x25, 0x41, 0xd9, 0x0d, + 0x87, 0xc9, 0x13, 0x09, 0xd1, 0xaa, 0xe9, 0xb8, 0xb8, 0xf1, 0xa3, 0xaa, + 0xf1, 0x70, 0xaa, 0x6e, 0x60, 0xb9, 0xc7, 0xbb, 0x62, 0x56, 0xed, 0xcd, + 0xb1, 0x59, 0xb3, 0x74, 0xe6, 0x18, 0x86, 0x21, 0x5b, 0x08, 0x09, 0xda, + 0xe9, 0xc9, 0xd2, 0x16, 0x18, 0xbc, 0x56, 0x83, 0xb7, 0x27, 0xe1, 0x94, + 0x2c, 0x41, 0x1a, 0xb9, 0x7c, 0x3a, 0x11, 0xa0, 0x8a, 0x9f, 0x55, 0xa3, + 0xc5, 0x19, 0x48, 0xc3, 0xc0, 0xf2, 0x48, 0x63, 0xb3, 0xad, 0x15, 0xc6, + 0x66, 0x2b, 0x65, 0x01, 0x3f, 0x1a, 0x89, 0x02, 0xc0, 0x6d, 0x49, 0x40, + 0xaa, 0x02, 0xd0, 0x4e, 0x0e, 0xc4, 0x37, 0x7e, 0x54, 0x48, 0xe1, 0x5c, + 0x97, 0x02, 0x00, 0x3b, 0x85, 0xb0, 0xd8, 0xec, 0x42, 0xbc, 0x1f, 0x04, + 0x93, 0x5a, 0x41, 0xbf, 0x2c, 0x95, 0xa7, 0xfa, 0x4b, 0x88, 0x46, 0x6e, + 0x81, 0x46, 0x03, 0x68, 0x12, 0x7e, 0x95, 0xca, 0x2f, 0x74, 0x95, 0x5f, + 0x48, 0x97, 0xa0, 0x8d, 0xda, 0xb6, 0x68, 0x5e, 0x4d, 0x8a, 0xec, 0xe5, + 0xc8, 0x7a, 0x31, 0x32, 0xb8, 0x2a, 0xd3, 0x28, 0xa1, 0xfe, 0x41, 0xc6, + 0x91, 0x31, 0x64, 0x99, 0x47, 0x96, 0x5c, 0x6f, 0x20, 0x39, 0x9c, 0xd0, + 0x97, 0xb8, 0xd4, 0x4a, 0x11, 0xcc, 0x2d, 0x7a, 0x11, 0xdf, 0xd5, 0x44, + 0x2c, 0x09, 0xde, 0x40, 0x79, 0x6c, 0x7a, 0x53, 0xbd, 0xcc, 0x5f, 0x22, + 0xfe, 0x2c, 0xa7, 0xfc, 0xcd, 0x1f, 0xb5, 0x94, 0x09, 0xec, 0x8d, 0xca, + 0x8a, 0x0e, 0xb5, 0x01, 0x8d, 0xb3, 0x8b, 0xf2, 0xa8, 0x03, 0x95, 0x16, + 0xa4, 0x0f, 0x08, 0x18, 0xa0, 0x10, 0x08, 0xf6, 0xcf, 0xd2, 0x08, 0xe4, + 0xc8, 0x52, 0x09, 0x9e, 0x1e, 0xa4, 0x13, 0x08, 0x58, 0xa3, 0x14, 0xa3, + 0x31, 0xa2, 0x49, 0xf8, 0x26, 0x4b, 0x42, 0xff, 0x44, 0xad, 0x20, 0xea, + 0x41, 0x6a, 0x41, 0x90, 0x01, 0x7a, 0x41, 0x70, 0xff, 0x2c, 0xc5, 0x20, + 0x96, 0x2c, 0xcd, 0x10, 0x19, 0x41, 0xaa, 0x41, 0x90, 0xd5, 0xba, 0x01, + 0xe6, 0x42, 0x07, 0xff, 0x97, 0xab, 0x06, 0x10, 0x0b, 0x33, 0x18, 0x00, + 0x18, 0x62, 0x30, 0x00, 0xec, 0x1f, 0x66, 0x30, 0x90, 0x23, 0x5b, 0x2d, + 0x28, 0x3d, 0xcc, 0x60, 0x00, 0x60, 0x8d, 0xc1, 0x38, 0xee, 0xaa, 0xc0, + 0xff, 0x5a, 0x6b, 0x41, 0xc1, 0x6f, 0x29, 0xf6, 0xad, 0xbd, 0x53, 0xa1, + 0x04, 0xc6, 0x6d, 0xb7, 0x61, 0xa1, 0x9f, 0xb6, 0x9a, 0x32, 0x74, 0x26, + 0xf2, 0xfc, 0x8c, 0x7e, 0x88, 0x9d, 0xc2, 0x47, 0xb8, 0x77, 0x7e, 0xce, + 0x58, 0x70, 0xcf, 0x70, 0x17, 0xdf, 0x57, 0xaf, 0x93, 0x32, 0x08, 0x3c, + 0x05, 0x2c, 0x55, 0x96, 0xa5, 0x0d, 0x68, 0x1f, 0x9f, 0xae, 0x92, 0xcb, + 0x23, 0x41, 0x4a, 0x3c, 0x60, 0x76, 0x74, 0x8a, 0x3d, 0xc5, 0xdf, 0x51, + 0x6e, 0xc1, 0x66, 0xb3, 0x1b, 0x65, 0x8f, 0x13, 0xf6, 0xdb, 0xe8, 0x54, + 0x22, 0xa5, 0xb3, 0x9d, 0x38, 0xce, 0x54, 0xb1, 0xe1, 0xa7, 0x11, 0x05, + 0x71, 0x59, 0x78, 0xa3, 0xa5, 0x57, 0x27, 0x6f, 0xc0, 0xb3, 0x5e, 0x0b, + 0x38, 0xb5, 0x50, 0x32, 0x1b, 0x95, 0xa1, 0x8c, 0x39, 0xd7, 0x6e, 0xce, + 0x3d, 0x0b, 0x92, 0x05, 0x9d, 0xeb, 0xa2, 0x63, 0x24, 0xef, 0x5d, 0x5e, + 0x26, 0x8b, 0xba, 0x95, 0xac, 0xa2, 0x6f, 0x21, 0x08, 0x71, 0x39, 0xa9, + 0x09, 0x8e, 0x35, 0xbf, 0x9d, 0xa0, 0xbc, 0x48, 0x2d, 0x97, 0xb9, 0x88, + 0x0a, 0x14, 0x53, 0xc5, 0x85, 0x75, 0x36, 0xcc, 0x0f, 0x0a, 0xb6, 0x2c, + 0xf0, 0x92, 0x86, 0x8b, 0xca, 0x7c, 0x49, 0xca, 0xd1, 0xe9, 0x36, 0x3f, + 0x92, 0x6e, 0x4f, 0x3e, 0x92, 0x11, 0x88, 0x38, 0xda, 0xd7, 0x9f, 0x79, + 0x1c, 0x68, 0xcf, 0xf5, 0xee, 0x74, 0xfc, 0xf5, 0x1c, 0x3e, 0xcd, 0x7a, + 0x2a, 0xf5, 0x72, 0xce, 0x43, 0x57, 0xd7, 0xb3, 0x74, 0x5d, 0x7b, 0x8e, + 0xa2, 0x8f, 0x50, 0x42, 0xc3, 0x05, 0x96, 0x6d, 0x25, 0x95, 0x00, 0xe7, + 0x2a, 0x68, 0xa3, 0x15, 0x34, 0x17, 0x31, 0x28, 0x43, 0x29, 0xd3, 0xda, + 0x19, 0xbf, 0x4a, 0x6e, 0x09, 0xac, 0x8a, 0x15, 0x09, 0x7d, 0x97, 0xfe, + 0x80, 0xa6, 0x24, 0xa6, 0xf3, 0xd6, 0x8f, 0x60, 0xf8, 0x15, 0xe8, 0xfc, + 0x20, 0x5c, 0x3c, 0xea, 0x8d, 0xbb, 0xbd, 0xd1, 0x71, 0xf7, 0xa5, 0xf1, + 0x6b, 0xaf, 0x75, 0x5f, 0xf6, 0xc3, 0x1d, 0x0a, 0xb8, 0xa3, 0x57, 0x5f, + 0xa9, 0x82, 0x3b, 0x12, 0x70, 0xa3, 0xd1, 0xc3, 0x6e, 0xf7, 0x60, 0x04, + 0xe7, 0xbc, 0x42, 0x22, 0x5a, 0x16, 0x9b, 0xcd, 0x6a, 0x3e, 0x6b, 0xd0, + 0x79, 0xa8, 0xd0, 0x10, 0xca, 0x97, 0x9b, 0x4d, 0x91, 0xec, 0x83, 0xb0, + 0xc9, 0xb2, 0x68, 0x95, 0x18, 0x64, 0x4e, 0x81, 0x03, 0xc7, 0x47, 0x68, + 0xb3, 0x1f, 0x3c, 0x37, 0x1a, 0x8d, 0x1e, 0x44, 0xaf, 0xc3, 0x97, 0xf7, + 0xde, 0x7b, 0xef, 0x41, 0x08, 0x65, 0x62, 0x79, 0x7f, 0x84, 0xe9, 0x96, + 0x4b, 0x3b, 0xea, 0x66, 0x7f, 0xc2, 0xd0, 0xff, 0xf5, 0xfd, 0x09, 0xa1, + 0x44, 0x7f, 0x12, 0x58, 0xbe, 0xfe, 0x84, 0x79, 0x2a, 0x64, 0xa3, 0x25, + 0x1e, 0x9b, 0x16, 0x70, 0xa7, 0x97, 0x18, 0x22, 0x26, 0x3a, 0x78, 0x6b, + 0x0a, 0xc8, 0x45, 0xdc, 0x23, 0x15, 0xd4, 0xb1, 0x7a, 0xa9, 0x20, 0x94, + 0x90, 0x8a, 0xc0, 0xf2, 0x49, 0x05, 0xf3, 0x74, 0xc8, 0xf6, 0x52, 0x61, + 0xdc, 0x09, 0x3a, 0xe1, 0x52, 0xe1, 0x87, 0xef, 0x9b, 0xf4, 0x25, 0x04, + 0x08, 0x21, 0x2d, 0x4e, 0xde, 0x3c, 0x7d, 0xca, 0xe5, 0x3e, 0xdc, 0xbe, + 0x48, 0xe3, 0x42, 0xf8, 0xbe, 0x68, 0xb3, 0xc9, 0xc1, 0x1e, 0xa9, 0xc3, + 0x5c, 0x63, 0x6f, 0x32, 0x17, 0x53, 0x97, 0x3d, 0xd2, 0x87, 0x99, 0x50, + 0x7b, 0xf6, 0xf9, 0x69, 0xc6, 0x22, 0xb9, 0x2d, 0x0e, 0xe8, 0x06, 0x20, + 0xeb, 0xe7, 0x17, 0xc9, 0x96, 0x9d, 0x45, 0x8f, 0x20, 0x49, 0xd2, 0x8c, + 0x30, 0xd8, 0x2a, 0xc6, 0xdb, 0x0a, 0x1d, 0x8c, 0x11, 0xf5, 0x9f, 0x3d, + 0x16, 0x8b, 0xa8, 0xb8, 0x79, 0xc8, 0xf1, 0x58, 0x79, 0x3d, 0x52, 0x4e, + 0xdc, 0x3d, 0x47, 0x63, 0x89, 0xa6, 0xf7, 0x78, 0x2c, 0xfc, 0x31, 0x08, + 0x38, 0x15, 0x5b, 0x37, 0x02, 0x8d, 0xc7, 0x63, 0xe7, 0xf8, 0x76, 0x1f, + 0xac, 0x24, 0xa7, 0xc9, 0x12, 0x62, 0xfd, 0xb6, 0x1b, 0xeb, 0xe0, 0x2f, + 0xe0, 0x1c, 0xdd, 0x7e, 0xc8, 0xb3, 0xe8, 0x45, 0x7b, 0x20, 0x4c, 0x47, + 0x69, 0xf7, 0x43, 0x1a, 0x0f, 0xd8, 0xee, 0x87, 0x32, 0x1e, 0xbb, 0xdd, + 0x13, 0x69, 0x16, 0x3b, 0x66, 0x3f, 0xb4, 0xf3, 0x6d, 0xb2, 0xaf, 0x66, + 0x14, 0xc6, 0xa6, 0x1d, 0x69, 0xcb, 0x5f, 0x29, 0x02, 0x26, 0x45, 0x00, + 0xa4, 0x79, 0x2b, 0x85, 0x77, 0x4a, 0x04, 0x59, 0x2a, 0xdc, 0x9f, 0x98, + 0x0f, 0x11, 0x63, 0x9c, 0x4a, 0xb8, 0xa3, 0x22, 0x88, 0xf4, 0x61, 0x75, + 0xa6, 0xc9, 0xf8, 0x50, 0xac, 0x43, 0xa8, 0xb3, 0x55, 0x99, 0xfa, 0x49, + 0xaf, 0x4d, 0xbd, 0xd1, 0x4a, 0xc4, 0x53, 0x9e, 0x82, 0x57, 0x72, 0xc3, + 0x6c, 0xe5, 0x93, 0xd9, 0xa2, 0x48, 0x61, 0xdd, 0x8f, 0xdd, 0xeb, 0x8f, + 0xbb, 0x7e, 0x65, 0xc9, 0x83, 0xb4, 0x05, 0xa8, 0x1a, 0x0a, 0x93, 0x7b, + 0x35, 0x86, 0xa0, 0x35, 0xd8, 0x26, 0x0b, 0x42, 0x4e, 0x6a, 0x50, 0x8a, + 0x56, 0x6a, 0xe3, 0xfa, 0x72, 0x07, 0x81, 0x5e, 0x4d, 0xba, 0x9c, 0x2d, + 0x12, 0x1e, 0x3d, 0xbd, 0x49, 0x48, 0x3d, 0x3e, 0x8f, 0xf7, 0x46, 0x72, + 0x92, 0x93, 0x9c, 0x1a, 0x10, 0x6c, 0x50, 0x0f, 0x08, 0x5c, 0xbd, 0x09, + 0xeb, 0x0d, 0xec, 0xd1, 0x46, 0x97, 0x58, 0x57, 0xa0, 0xd2, 0x42, 0xaa, + 0x4f, 0xd7, 0x3f, 0x10, 0x97, 0xb2, 0xa7, 0xf5, 0xfc, 0x59, 0x78, 0xb3, + 0x8c, 0x2b, 0xae, 0xbc, 0xb3, 0x42, 0xd7, 0xa2, 0x60, 0x0b, 0x21, 0xea, + 0x98, 0xb7, 0xa3, 0x01, 0xb8, 0xbc, 0x87, 0x25, 0x62, 0x21, 0x74, 0xed, + 0x2b, 0x51, 0xf4, 0xa7, 0xd3, 0x8c, 0x5e, 0x9e, 0xca, 0xa8, 0x04, 0xd6, + 0x6d, 0x4f, 0xcc, 0x48, 0x58, 0xd0, 0x4a, 0xb8, 0x0f, 0x96, 0xe4, 0x74, + 0xe3, 0x45, 0x3c, 0x98, 0x15, 0x31, 0xd5, 0xc9, 0x15, 0x24, 0xfd, 0x86, + 0xeb, 0xf5, 0x6c, 0xab, 0xde, 0x6e, 0x8d, 0xf4, 0x3f, 0xf3, 0x22, 0x97, + 0xc5, 0x67, 0x9d, 0x2d, 0x12, 0xb7, 0xb8, 0xf0, 0x36, 0x3d, 0xa4, 0x7d, + 0x0a, 0x3f, 0xc3, 0xea, 0x65, 0x38, 0x51, 0x9a, 0xda, 0xff, 0x39, 0xd7, + 0x4e, 0x75, 0xef, 0xfc, 0x6c, 0x71, 0xae, 0x9a, 0x86, 0xd4, 0xd1, 0xdb, + 0x8d, 0x74, 0xc3, 0x7d, 0x9f, 0x89, 0x57, 0x9b, 0xdf, 0x65, 0xea, 0x74, + 0xad, 0x66, 0xa5, 0x9b, 0x8b, 0x66, 0xb3, 0xce, 0x56, 0xab, 0xbf, 0xaa, + 0x45, 0x51, 0xae, 0x4c, 0x3a, 0xd1, 0xb4, 0x49, 0xf3, 0x4e, 0xdc, 0xe4, + 0x08, 0x40, 0x97, 0x0d, 0x25, 0xb5, 0x13, 0xcf, 0xdf, 0xa9, 0x1d, 0x53, + 0x5f, 0xbe, 0x5d, 0x8b, 0xea, 0x4a, 0xdc, 0xdb, 0x6b, 0xc1, 0xb5, 0xd1, + 0x37, 0x34, 0xc7, 0xa1, 0x89, 0xa9, 0x74, 0xed, 0x9c, 0x55, 0xd9, 0x3c, + 0xb9, 0xf9, 0x06, 0xa5, 0x18, 0xa3, 0x93, 0x71, 0xed, 0xf6, 0x29, 0x4f, + 0xd8, 0xc2, 0x54, 0x39, 0x44, 0x8d, 0x1b, 0x68, 0x6d, 0x98, 0x51, 0x52, + 0x5b, 0xec, 0x29, 0xce, 0x31, 0x9b, 0xb0, 0xa1, 0xb0, 0x20, 0xbf, 0x05, + 0xf8, 0x84, 0x72, 0x0c, 0xf3, 0x95, 0xe1, 0x8b, 0x7f, 0xa1, 0x5f, 0xa1, + 0xbe, 0xce, 0x97, 0x18, 0x54, 0xfe, 0xae, 0x17, 0xe1, 0xc3, 0xb1, 0x50, + 0xa7, 0xda, 0x4b, 0xac, 0xbc, 0x7c, 0x4e, 0xa0, 0x6c, 0xea, 0x5b, 0x6d, + 0x7b, 0x1c, 0xc8, 0x8a, 0x74, 0xaf, 0x83, 0x18, 0x43, 0xb1, 0x38, 0x5e, + 0x8a, 0x2b, 0xda, 0xb4, 0xdd, 0xf8, 0xdc, 0xec, 0x62, 0xfc, 0xca, 0xf8, + 0x15, 0xda, 0x6f, 0x7c, 0xee, 0xe1, 0x62, 0x76, 0x79, 0x34, 0xec, 0x48, + 0xef, 0xe8, 0xed, 0x75, 0x7a, 0x3d, 0xa3, 0x4a, 0xa4, 0x39, 0x31, 0x7c, + 0xc1, 0x42, 0xb4, 0x90, 0x08, 0xe8, 0x8a, 0x54, 0x8c, 0x37, 0xd9, 0xd9, + 0x65, 0xef, 0x08, 0x4a, 0x19, 0xe1, 0x97, 0xae, 0xeb, 0x5e, 0x6a, 0x07, + 0xc5, 0x00, 0x1b, 0xd7, 0x44, 0x86, 0x97, 0xe0, 0x7e, 0x06, 0x3c, 0xe0, + 0x42, 0xab, 0x46, 0x8c, 0xd9, 0x86, 0xe8, 0x9e, 0x8b, 0x54, 0x86, 0xcd, + 0x54, 0x1f, 0x6c, 0x07, 0xe5, 0xa0, 0x50, 0x99, 0x2b, 0xf8, 0x71, 0x93, + 0x8b, 0x17, 0xf4, 0xe5, 0x5b, 0x9f, 0xf6, 0xd3, 0xf7, 0xd1, 0x08, 0x6b, + 0xc6, 0x72, 0x95, 0xa7, 0xf4, 0xa3, 0x31, 0x4f, 0xcb, 0x12, 0x89, 0xf3, + 0x6e, 0xb2, 0x9a, 0xdd, 0x7d, 0x90, 0x6d, 0x6e, 0xde, 0x9f, 0xe1, 0xd3, + 0x94, 0x12, 0x88, 0x5e, 0x5a, 0x66, 0x6f, 0x88, 0x02, 0x5b, 0x13, 0xfd, + 0x75, 0x40, 0x71, 0xe1, 0x7f, 0xb5, 0xd2, 0xef, 0xfc, 0xeb, 0x77, 0x3c, + 0xe9, 0xd5, 0xe4, 0x68, 0xbb, 0x29, 0x40, 0x17, 0x52, 0x18, 0xc0, 0xee, + 0xe8, 0x6d, 0x6e, 0x85, 0xe1, 0x5c, 0xb9, 0x76, 0xed, 0x7c, 0x42, 0x54, + 0xc6, 0xe1, 0x88, 0x31, 0xd1, 0x0a, 0x7c, 0x0a, 0x69, 0xfc, 0x85, 0x71, + 0xaa, 0x72, 0xd4, 0xf9, 0x64, 0xb6, 0xde, 0x51, 0x49, 0x94, 0x7a, 0xf1, + 0xfa, 0xeb, 0x15, 0xcc, 0x52, 0xd8, 0x80, 0x9f, 0xbf, 0x4f, 0x92, 0xed, + 0x09, 0x01, 0xb3, 0xca, 0xde, 0x2b, 0xbe, 0x76, 0x2d, 0x7b, 0xd0, 0x0a, + 0x67, 0xe7, 0x2a, 0x98, 0xff, 0x31, 0x54, 0xb4, 0x0f, 0xda, 0x64, 0xa5, + 0x72, 0x5a, 0x2b, 0x69, 0xf4, 0x01, 0x92, 0xba, 0x8e, 0xee, 0x7a, 0x42, + 0xaa, 0xcf, 0xf5, 0x6c, 0xec, 0x76, 0x02, 0xad, 0x1a, 0xd3, 0xa0, 0x5f, + 0xea, 0xe5, 0xb5, 0xf2, 0x35, 0x7d, 0x8d, 0x82, 0x00, 0x4d, 0xa9, 0x21, + 0x04, 0x46, 0x01, 0x67, 0x61, 0x7a, 0xc4, 0x37, 0xcf, 0x77, 0x18, 0xc9, + 0x9f, 0x06, 0x20, 0x06, 0x07, 0x8a, 0xcf, 0x7e, 0x7a, 0x8e, 0x81, 0x88, + 0xda, 0x4f, 0x44, 0xed, 0x19, 0xb4, 0x54, 0x1d, 0xbc, 0xe1, 0x67, 0xaa, + 0x0e, 0xa6, 0xf1, 0x5b, 0x92, 0x03, 0xe8, 0x1e, 0xd7, 0x56, 0x48, 0x23, + 0x02, 0xa0, 0x08, 0x1c, 0x76, 0xec, 0x0d, 0xe0, 0x88, 0x84, 0xc0, 0xe7, + 0x57, 0x5f, 0x88, 0xfe, 0x04, 0x9c, 0x95, 0x1d, 0x37, 0x76, 0xbf, 0x60, + 0x0d, 0x3a, 0x3a, 0xcb, 0x2e, 0x76, 0xe9, 0x7a, 0x03, 0x5f, 0x65, 0x77, + 0x86, 0xd2, 0xfd, 0xd1, 0x3d, 0x4e, 0x4a, 0xea, 0x28, 0x28, 0xa9, 0x1a, + 0x54, 0x4f, 0x20, 0x83, 0xf4, 0x4d, 0x02, 0x7e, 0xa5, 0xe5, 0xa1, 0x28, + 0x31, 0x81, 0x21, 0x59, 0x25, 0x63, 0x54, 0x3c, 0xea, 0xa9, 0x53, 0x3d, + 0xd6, 0x70, 0x1d, 0x83, 0xc9, 0x45, 0x38, 0x7f, 0x01, 0x3d, 0xe6, 0xe5, + 0x97, 0x0d, 0x9c, 0x3f, 0xd7, 0x77, 0x0c, 0xee, 0x55, 0x4b, 0x6d, 0xfd, + 0xee, 0x74, 0xdc, 0x48, 0x7a, 0x40, 0xb6, 0x97, 0xa1, 0x71, 0xeb, 0x2a, + 0x61, 0xfa, 0x11, 0x13, 0xa7, 0xb4, 0xc9, 0x5a, 0x05, 0x8b, 0xfb, 0x5d, + 0xe8, 0x5f, 0x7b, 0x91, 0x78, 0xbf, 0xbf, 0x57, 0x89, 0xff, 0x59, 0xe1, + 0x89, 0xae, 0x59, 0x67, 0x69, 0xdf, 0x98, 0x46, 0xd2, 0xc0, 0xd5, 0x35, + 0x7d, 0x27, 0x7c, 0x16, 0xea, 0x6e, 0x3b, 0x72, 0x49, 0x82, 0xdb, 0xee, + 0x3d, 0x82, 0xde, 0xac, 0x03, 0x1b, 0xed, 0x3e, 0x20, 0x0c, 0x0d, 0x58, + 0x91, 0x72, 0x44, 0x57, 0xc7, 0x5f, 0x12, 0x93, 0x94, 0xcb, 0x40, 0x02, + 0x89, 0x52, 0x00, 0xb3, 0x4c, 0x0a, 0x1f, 0x9b, 0x24, 0xc9, 0xfe, 0xe5, + 0x2c, 0x5d, 0x25, 0x32, 0x18, 0x89, 0x57, 0xb6, 0xc4, 0xb0, 0xce, 0xb2, + 0xc5, 0xb0, 0xce, 0x6e, 0xb5, 0x6d, 0x05, 0xfc, 0x5d, 0xb6, 0xf2, 0xd8, + 0xd2, 0xda, 0xa9, 0x94, 0x3f, 0xc4, 0xe2, 0xf1, 0xf1, 0x7e, 0x42, 0x2c, + 0xbe, 0xf2, 0x14, 0x43, 0x2c, 0x1a, 0x21, 0x8c, 0x28, 0xdc, 0x22, 0x48, + 0x26, 0x07, 0xc9, 0xa8, 0x43, 0xeb, 0xd7, 0x57, 0xc9, 0x9a, 0x0d, 0xaa, + 0x52, 0xa4, 0x69, 0x4e, 0x1e, 0x58, 0x8f, 0xa2, 0xbb, 0x53, 0xd0, 0x06, + 0x92, 0x3a, 0x1f, 0x7e, 0x21, 0x35, 0xfb, 0x31, 0xc9, 0x5c, 0xad, 0x21, + 0x47, 0x04, 0x3b, 0x8c, 0xba, 0xad, 0xe3, 0x65, 0x3b, 0x51, 0x69, 0xf6, + 0x14, 0x4f, 0x7d, 0x0d, 0x5e, 0x46, 0x32, 0x6b, 0x60, 0x6f, 0xa4, 0x83, + 0xc1, 0x95, 0xaf, 0x41, 0xe7, 0x0e, 0x53, 0x6e, 0x4e, 0xb7, 0xd5, 0x78, + 0x11, 0xa0, 0x39, 0xa6, 0xde, 0x81, 0x72, 0xbc, 0xd0, 0x90, 0x44, 0xb8, + 0xf2, 0x01, 0x71, 0xa6, 0x7d, 0x21, 0x05, 0xb4, 0xd5, 0x40, 0x0c, 0xc6, + 0x79, 0x27, 0xdc, 0xc5, 0xbd, 0xea, 0x21, 0x8d, 0x95, 0x4d, 0x15, 0x91, + 0x4d, 0x07, 0x6a, 0x55, 0xd1, 0x0c, 0x48, 0x46, 0x0f, 0x37, 0xc1, 0xee, + 0x35, 0x30, 0x34, 0x5b, 0xb1, 0x71, 0x27, 0x4b, 0x2e, 0xb3, 0x24, 0xbf, + 0x7a, 0x92, 0xf2, 0xd4, 0xae, 0xab, 0xd2, 0x1f, 0x6f, 0x96, 0x11, 0x8d, + 0x0b, 0xb9, 0xaf, 0x16, 0x94, 0xab, 0xd6, 0x82, 0x12, 0x9c, 0x55, 0xa1, + 0x1c, 0xb5, 0x32, 0x22, 0x4e, 0x19, 0x7d, 0x36, 0xad, 0x12, 0x0e, 0xa0, + 0xf6, 0xc8, 0x50, 0x64, 0x77, 0x27, 0x74, 0x13, 0xee, 0xcd, 0xa9, 0x62, + 0x49, 0x07, 0x72, 0xf6, 0x48, 0x9c, 0x35, 0x74, 0x0b, 0xbc, 0xdd, 0x14, + 0xfe, 0xea, 0x5d, 0xae, 0x56, 0x1d, 0x35, 0xa8, 0xb3, 0x0a, 0xa3, 0xd0, + 0xb8, 0x42, 0xc6, 0xc8, 0xd7, 0xa6, 0xec, 0x4e, 0x9b, 0x28, 0x75, 0xbc, + 0x5c, 0xf2, 0x1d, 0x46, 0xd1, 0xcb, 0xee, 0x16, 0x82, 0xf4, 0x10, 0xfc, + 0xb1, 0x12, 0xe8, 0x6e, 0x64, 0x45, 0xba, 0xf3, 0xe8, 0x32, 0x3f, 0x4f, + 0xc0, 0xa2, 0x99, 0x06, 0xf4, 0xd1, 0x32, 0xd8, 0x4f, 0x50, 0x20, 0x5f, + 0xa9, 0xd9, 0x48, 0x9e, 0x93, 0x66, 0x01, 0x7d, 0x07, 0x48, 0x1b, 0x39, + 0x7c, 0x46, 0x8f, 0xbe, 0x49, 0x45, 0x62, 0x70, 0x29, 0x02, 0x2b, 0x7f, + 0xa9, 0x75, 0x01, 0x95, 0x76, 0xe9, 0x6c, 0x66, 0xbe, 0x2c, 0x20, 0xcb, + 0x38, 0x38, 0x08, 0x5a, 0x44, 0x7c, 0x40, 0x36, 0xf2, 0x81, 0xd8, 0xcf, + 0xe4, 0x2f, 0xed, 0x60, 0xe3, 0xae, 0xd1, 0x24, 0xdb, 0xeb, 0xf9, 0x1a, + 0xe7, 0x50, 0x3e, 0x70, 0x0c, 0xff, 0xba, 0xa2, 0xaa, 0x42, 0xb2, 0xd3, + 0x71, 0x95, 0x11, 0x57, 0x11, 0x53, 0xdc, 0xba, 0x77, 0xbc, 0x77, 0xa0, + 0x5f, 0xcb, 0x9f, 0xaa, 0xd0, 0x93, 0x28, 0xe8, 0x20, 0x9a, 0xfb, 0x7e, + 0x7f, 0x74, 0x5f, 0xcb, 0x14, 0xae, 0xad, 0xfa, 0x39, 0xa2, 0xdc, 0x69, + 0x09, 0x18, 0x42, 0x50, 0xbe, 0x23, 0x68, 0x92, 0xf5, 0x3a, 0xf7, 0xf6, + 0x0b, 0x89, 0x06, 0x25, 0xcf, 0x1e, 0x05, 0x7f, 0x42, 0x3d, 0x3a, 0x91, + 0x2f, 0x94, 0x61, 0x38, 0x33, 0x07, 0xb0, 0xf1, 0x90, 0x63, 0x48, 0x01, + 0x76, 0x4d, 0x69, 0xfb, 0x96, 0xb7, 0xe1, 0x29, 0x3d, 0x2f, 0xc3, 0x6e, + 0xec, 0xe6, 0x14, 0x3e, 0xab, 0x56, 0x30, 0x04, 0x6b, 0xc9, 0x04, 0xe0, + 0x7e, 0x36, 0xae, 0x7d, 0x4f, 0x25, 0xf8, 0x24, 0xe4, 0xd2, 0xbb, 0xfb, + 0xe2, 0x7a, 0x50, 0xeb, 0xe3, 0xed, 0x61, 0x9b, 0x25, 0x93, 0x27, 0x80, + 0x99, 0x96, 0xe0, 0x93, 0x80, 0xab, 0xe7, 0xee, 0x0b, 0xe4, 0x21, 0x0c, + 0x5d, 0xde, 0x3e, 0xf1, 0x69, 0x24, 0xd0, 0xb2, 0x94, 0x12, 0xc0, 0x43, + 0xf5, 0x92, 0x8e, 0xce, 0x04, 0xab, 0xa4, 0xf5, 0x74, 0xa4, 0xa4, 0x51, + 0xa3, 0x8c, 0x95, 0x7a, 0x68, 0x3e, 0x69, 0x29, 0xa9, 0x86, 0x69, 0xa0, + 0x51, 0x27, 0x3a, 0x3e, 0x10, 0x5c, 0x27, 0xfb, 0xa5, 0x58, 0x49, 0x04, + 0x1f, 0xac, 0x0f, 0xc2, 0xca, 0x34, 0xac, 0x51, 0x20, 0xd6, 0x52, 0xc3, + 0x1a, 0x07, 0x62, 0xcd, 0x35, 0xac, 0xc3, 0x40, 0x2c, 0x38, 0xb2, 0xc8, + 0x82, 0x4f, 0x3c, 0xde, 0x7c, 0x98, 0xdc, 0xc6, 0x67, 0x6a, 0x1d, 0x7b, + 0x1a, 0xef, 0x3d, 0x8d, 0xa7, 0x9e, 0x56, 0xd6, 0x79, 0x37, 0xac, 0xb4, + 0x9b, 0xb1, 0xc6, 0xe4, 0xc3, 0x40, 0x26, 0x33, 0x1d, 0xed, 0x28, 0x10, + 0x6d, 0xa9, 0xa3, 0x1d, 0x07, 0xa2, 0xcd, 0x75, 0xb4, 0x57, 0x02, 0xd1, + 0x40, 0x92, 0x63, 0x8f, 0x28, 0x1f, 0x6a, 0xe2, 0x3a, 0xd2, 0x7e, 0x1d, + 0xe3, 0x2f, 0x59, 0x58, 0xb8, 0x28, 0x0f, 0x35, 0x2e, 0x5f, 0x0d, 0xe4, + 0x32, 0xd3, 0xd1, 0x5e, 0x0b, 0x44, 0x5b, 0xea, 0x68, 0xa3, 0xd0, 0x0e, + 0x30, 0x37, 0xf0, 0x42, 0xbb, 0x00, 0x08, 0xf3, 0xd0, 0x23, 0xcc, 0x57, + 0x35, 0x81, 0xbd, 0xa6, 0x6b, 0xa9, 0xa1, 0xb4, 0x23, 0x10, 0xe7, 0xd3, + 0x18, 0x0e, 0x7d, 0x0f, 0x4a, 0xfb, 0x2d, 0x62, 0x65, 0xe0, 0xd5, 0x41, + 0xe6, 0x61, 0x2a, 0xaa, 0x09, 0xb6, 0x3a, 0x58, 0xfa, 0x10, 0xab, 0x03, + 0xac, 0x0e, 0xe6, 0x7e, 0x3c, 0x7f, 0x50, 0x55, 0x52, 0x33, 0x8e, 0x18, + 0x60, 0x6e, 0x2b, 0x04, 0x35, 0x6e, 0x2d, 0xa8, 0x71, 0x6b, 0x49, 0x8d, + 0xdb, 0x8a, 0x6a, 0xdc, 0x5a, 0x56, 0xe3, 0x46, 0xc2, 0xf2, 0xc8, 0xea, + 0xb0, 0xb5, 0xac, 0x0e, 0x5b, 0xcb, 0xea, 0xb0, 0xad, 0xac, 0x0e, 0x5b, + 0xcb, 0xea, 0x30, 0x5c, 0x56, 0x6e, 0xe7, 0xf2, 0x84, 0x36, 0xd2, 0x1a, + 0x39, 0x95, 0x65, 0xe8, 0x50, 0x87, 0x17, 0x60, 0x85, 0x17, 0x8d, 0xa6, + 0x1a, 0xce, 0x24, 0x24, 0x06, 0xaa, 0x27, 0xe8, 0x69, 0x90, 0xcb, 0x25, + 0xa3, 0x7c, 0xfa, 0x99, 0x93, 0x30, 0x53, 0x1d, 0x67, 0x12, 0x14, 0xb3, + 0xd4, 0x17, 0xa3, 0x34, 0xc8, 0xfb, 0x15, 0x21, 0x35, 0x6b, 0xf9, 0x23, + 0x98, 0xa9, 0x86, 0x53, 0xcb, 0x1f, 0xc0, 0x78, 0xf8, 0x83, 0xac, 0x30, + 0xef, 0x5c, 0x46, 0xce, 0xf4, 0xf3, 0x27, 0x61, 0xa6, 0x3a, 0xce, 0x24, + 0x28, 0x0e, 0xa8, 0x37, 0xee, 0x67, 0x30, 0x7f, 0x14, 0xe3, 0xd2, 0xcf, + 0x9f, 0x84, 0x99, 0xea, 0x38, 0x93, 0x28, 0x24, 0x62, 0xa7, 0x37, 0x42, + 0x67, 0x08, 0x7f, 0x3c, 0x6a, 0x61, 0x54, 0xd1, 0x39, 0x04, 0xcc, 0x54, + 0x41, 0x08, 0x99, 0x72, 0x2f, 0xd6, 0x46, 0xe3, 0x4a, 0x5a, 0x81, 0x9c, + 0x01, 0x85, 0x5a, 0xce, 0x00, 0x46, 0x72, 0xb6, 0x08, 0x58, 0x0c, 0x58, + 0x6c, 0x76, 0x1e, 0xc6, 0x16, 0x61, 0xcb, 0x01, 0x22, 0x7a, 0x5b, 0x14, + 0x3c, 0xab, 0xe0, 0x65, 0x48, 0x4c, 0xc1, 0xb1, 0x8c, 0x25, 0xd7, 0xe4, + 0x00, 0xaa, 0x76, 0x07, 0xce, 0x17, 0x9f, 0xae, 0x9a, 0x93, 0x64, 0x8d, + 0x47, 0x69, 0x11, 0xf2, 0xc6, 0x42, 0x1d, 0xa4, 0xb0, 0x12, 0xbd, 0xbb, + 0x48, 0x72, 0x58, 0xbf, 0x92, 0xcb, 0x80, 0x2e, 0xa1, 0xd8, 0xc4, 0x4a, + 0x11, 0x34, 0xab, 0x10, 0x0d, 0x1a, 0x1d, 0xf5, 0xf0, 0x5a, 0xfd, 0xa6, + 0xb5, 0x72, 0x62, 0x75, 0x3f, 0x85, 0x2a, 0x8b, 0xa9, 0x61, 0x83, 0xdd, + 0x50, 0x80, 0x06, 0xb8, 0xba, 0x37, 0x4d, 0xe1, 0xc7, 0x4d, 0x11, 0x0e, + 0xab, 0x10, 0x40, 0xcb, 0x83, 0x46, 0x5c, 0x5b, 0xf5, 0xb7, 0xe9, 0xba, + 0xb6, 0x4f, 0x22, 0xcc, 0x54, 0x41, 0xa8, 0xed, 0x93, 0x00, 0xe3, 0xd4, + 0x64, 0x48, 0x0f, 0xec, 0x91, 0x74, 0x39, 0xa3, 0x82, 0x2d, 0x09, 0x33, + 0xd5, 0x50, 0x26, 0x8d, 0x43, 0x70, 0xd8, 0x6c, 0x12, 0xa5, 0x50, 0x6b, + 0x4b, 0x71, 0x61, 0xc2, 0x4d, 0x87, 0x23, 0x7a, 0x8d, 0x46, 0x69, 0xd2, + 0xec, 0xec, 0xba, 0x71, 0xc5, 0x35, 0x38, 0x72, 0x5b, 0x73, 0xfa, 0x78, + 0xc9, 0xb5, 0xb6, 0x80, 0xd1, 0xb8, 0x7d, 0x01, 0xfc, 0x9a, 0x6b, 0x60, + 0x2c, 0xa9, 0xe6, 0xf4, 0xe1, 0x9a, 0x6b, 0x6d, 0x05, 0x8e, 0xe1, 0x8c, + 0x63, 0x50, 0x3f, 0xc2, 0x87, 0xd5, 0xc0, 0xc0, 0x34, 0x5a, 0x0d, 0x85, + 0xb5, 0x98, 0x60, 0x35, 0x89, 0xb2, 0xff, 0xd1, 0x23, 0xc0, 0x12, 0xd6, + 0x3b, 0xb5, 0x8f, 0x9c, 0xb3, 0x7a, 0xff, 0x8b, 0xf1, 0xf4, 0xe7, 0x7d, + 0x25, 0xc4, 0x53, 0x12, 0x7f, 0x59, 0xfe, 0x0b, 0xfa, 0x17, 0x48, 0x1a, + 0x90, 0xb5, 0xef, 0xd7, 0x3b, 0x39, 0xcf, 0xe9, 0x6d, 0x8e, 0x6c, 0xb3, + 0xca, 0xfd, 0x80, 0x62, 0x63, 0x86, 0x10, 0x6c, 0x38, 0x91, 0xcf, 0xab, + 0xc0, 0xde, 0x12, 0xaf, 0x39, 0xbd, 0xa3, 0xa1, 0x44, 0x97, 0x50, 0x4c, + 0x7e, 0x95, 0x5c, 0xd0, 0x4b, 0xe7, 0xf4, 0xd0, 0xb4, 0xef, 0xf2, 0x16, + 0x65, 0x6a, 0x94, 0x5c, 0x90, 0x06, 0x41, 0x7f, 0x43, 0xca, 0xe9, 0x31, + 0x55, 0x54, 0x3c, 0x61, 0x5a, 0x7b, 0xf8, 0xe8, 0x11, 0x40, 0xa7, 0xb3, + 0x55, 0xfa, 0x13, 0xec, 0x0d, 0x0e, 0x06, 0x03, 0xab, 0x14, 0x79, 0xb3, + 0x4c, 0xbe, 0x96, 0x43, 0x0a, 0xc9, 0xf8, 0x73, 0x01, 0xfb, 0x2c, 0x84, + 0xb6, 0xc6, 0xde, 0xe4, 0xea, 0x1f, 0x14, 0x6c, 0x73, 0x25, 0x4f, 0x13, + 0x7f, 0xcc, 0x5f, 0x7a, 0x04, 0x3b, 0x61, 0xaa, 0x92, 0x71, 0x2e, 0x9b, + 0xce, 0x63, 0x35, 0xbd, 0xb5, 0xd4, 0x6c, 0x6f, 0xaf, 0x96, 0x5a, 0x19, + 0x96, 0xc2, 0x45, 0xd1, 0x79, 0xe4, 0x0c, 0x0f, 0xa4, 0x7b, 0xbb, 0x1c, + 0x13, 0x96, 0xbf, 0x4f, 0x2e, 0xe4, 0x7a, 0x9d, 0x1b, 0x48, 0xea, 0x8c, + 0x3c, 0x18, 0x80, 0xaa, 0xe9, 0x3c, 0xd9, 0xc0, 0x9a, 0x47, 0x9c, 0x7e, + 0x60, 0xf2, 0x94, 0xd1, 0x91, 0x9e, 0xef, 0x74, 0x7b, 0x74, 0xd0, 0x7c, + 0x58, 0xf9, 0xfa, 0xf8, 0x02, 0x2f, 0x05, 0x46, 0xb4, 0xfb, 0x2b, 0x37, + 0x97, 0xed, 0xd3, 0x60, 0x44, 0x93, 0xef, 0x1a, 0x93, 0x1e, 0xdb, 0x9b, + 0xc4, 0xa7, 0x11, 0x02, 0xd1, 0x7e, 0xaf, 0x00, 0x9c, 0xb8, 0xf7, 0x9f, + 0x55, 0x62, 0xea, 0x81, 0x68, 0x91, 0xf6, 0xec, 0x14, 0xb9, 0x47, 0x7b, + 0xae, 0xa4, 0xfc, 0xda, 0xe9, 0x12, 0xa4, 0x91, 0x7c, 0xa2, 0x03, 0xca, + 0x03, 0xd5, 0x27, 0x57, 0x90, 0x43, 0x67, 0xa9, 0x7d, 0x00, 0xf9, 0xa2, + 0x16, 0x62, 0x5b, 0x0b, 0x91, 0x09, 0x08, 0xc9, 0x9d, 0x0d, 0x76, 0x7a, + 0x56, 0x43, 0xe7, 0xf4, 0xbc, 0x04, 0x20, 0xe9, 0x86, 0x9c, 0x12, 0xae, + 0x3c, 0x79, 0xef, 0x6b, 0x1e, 0xf5, 0x58, 0x63, 0xb1, 0xa1, 0xc6, 0x42, + 0xf4, 0xc1, 0x2e, 0x5b, 0x39, 0x8e, 0x4a, 0xd8, 0x4d, 0x25, 0x47, 0x33, + 0xe7, 0xd1, 0x73, 0x71, 0xbb, 0xf1, 0x09, 0x5b, 0x16, 0x44, 0x23, 0x45, + 0xe9, 0x71, 0x4e, 0xbb, 0xa8, 0xae, 0x87, 0xdc, 0x18, 0x06, 0x6d, 0xbc, + 0x31, 0x20, 0x20, 0x5c, 0x17, 0xde, 0x00, 0x1c, 0x9a, 0x36, 0x68, 0x30, + 0x78, 0xb5, 0xc4, 0x6c, 0x83, 0x46, 0xab, 0x96, 0xad, 0x11, 0x5b, 0xf2, + 0x8a, 0x0b, 0x9e, 0x6d, 0xf1, 0x5a, 0x16, 0x89, 0xb3, 0xc7, 0x56, 0x65, + 0x22, 0x62, 0x4d, 0xa1, 0x60, 0x15, 0x4c, 0xd5, 0xb9, 0x37, 0xad, 0x93, + 0x7b, 0x4c, 0x17, 0xe0, 0xf3, 0x22, 0xec, 0xca, 0x1b, 0xc0, 0x31, 0x2f, + 0x81, 0x6e, 0x8c, 0xc9, 0xdb, 0x62, 0x40, 0xc0, 0x7f, 0x59, 0x0c, 0x32, + 0xe9, 0x9e, 0x58, 0x83, 0xe1, 0x53, 0x74, 0x1b, 0xbd, 0x7e, 0x89, 0x38, + 0x9d, 0x11, 0x8d, 0xa2, 0x5f, 0x7e, 0xd1, 0xd2, 0xa6, 0x90, 0x86, 0x46, + 0x03, 0x06, 0x6c, 0x1d, 0xf2, 0xe8, 0x15, 0xb4, 0x15, 0x6c, 0xe8, 0xfd, + 0xf2, 0xf4, 0xf1, 0x67, 0x9f, 0x44, 0xd0, 0xc7, 0x3f, 0xf9, 0xec, 0xdd, + 0xf7, 0x8c, 0xc7, 0xb2, 0x2a, 0x2f, 0x13, 0xf2, 0xae, 0xed, 0xbe, 0x3f, + 0xcd, 0xf1, 0x9f, 0xfa, 0x15, 0x6a, 0x46, 0xb6, 0xd1, 0x8d, 0xba, 0xb0, + 0x67, 0x53, 0x18, 0x0c, 0x30, 0x67, 0x23, 0x6a, 0x8b, 0x22, 0x22, 0xb1, + 0xd1, 0x0d, 0x57, 0x77, 0x93, 0xbd, 0xc9, 0x77, 0xd2, 0x60, 0x98, 0xde, + 0xb3, 0xab, 0xe5, 0xad, 0xf7, 0x66, 0xdd, 0x28, 0x76, 0x03, 0x51, 0x05, + 0x76, 0xb1, 0x22, 0xc6, 0x49, 0x0b, 0x50, 0xaa, 0x63, 0xa8, 0x0c, 0xdd, + 0xcf, 0xfb, 0xf2, 0xf1, 0x67, 0x9f, 0x7f, 0xfc, 0xf6, 0xb7, 0x7a, 0xcb, + 0x09, 0xf3, 0x8e, 0xe0, 0xfc, 0xb6, 0x73, 0x8c, 0x7e, 0x8a, 0xe9, 0x99, + 0x7b, 0xc7, 0x01, 0xf0, 0x83, 0xbd, 0xb0, 0xec, 0x90, 0x8e, 0x04, 0xae, + 0xa6, 0x4c, 0x67, 0x29, 0x7c, 0x94, 0xe5, 0x9a, 0x9a, 0xbb, 0x96, 0xaf, + 0xb0, 0x5a, 0xb2, 0x7e, 0xf3, 0xe4, 0xeb, 0x53, 0x86, 0xf6, 0xe7, 0xba, + 0x8d, 0x4b, 0xb3, 0x45, 0x1f, 0x6a, 0xa6, 0x69, 0x52, 0x77, 0xdb, 0xe9, + 0xbc, 0xde, 0x89, 0x39, 0x48, 0x6d, 0x37, 0x6e, 0xd5, 0x95, 0x95, 0x2e, + 0x16, 0xd0, 0xa1, 0xa9, 0x5d, 0xfe, 0x9b, 0x1a, 0xf5, 0x2a, 0xd3, 0xa8, + 0xc7, 0x5f, 0xfd, 0x6b, 0xaa, 0x87, 0xc0, 0xe1, 0xf5, 0x7b, 0x8d, 0x8f, + 0x35, 0xef, 0x8d, 0x06, 0x87, 0xa3, 0x7f, 0x4d, 0x1d, 0x9b, 0x34, 0xe1, + 0xf1, 0x90, 0x57, 0xf1, 0xfd, 0x34, 0x4b, 0xc6, 0xc3, 0xd1, 0xf8, 0x5f, + 0x53, 0x4b, 0x06, 0x5c, 0xfb, 0x4e, 0xf7, 0x9f, 0xae, 0x01, 0x02, 0xff, + 0x65, 0x55, 0xb0, 0x5e, 0xad, 0xd6, 0x5b, 0x6b, 0xd8, 0x28, 0xae, 0x40, + 0x67, 0x73, 0x79, 0xd9, 0x62, 0x90, 0x44, 0x92, 0xad, 0x24, 0xd8, 0x54, + 0x0f, 0x6c, 0x41, 0x36, 0x40, 0xf0, 0x2b, 0xbd, 0xed, 0x2d, 0x7b, 0x4b, + 0x51, 0xdd, 0xec, 0x80, 0xa0, 0x67, 0x6d, 0xfc, 0x7d, 0x86, 0xe9, 0x75, + 0xf8, 0x6d, 0x46, 0x65, 0xed, 0x5a, 0xf0, 0x09, 0x78, 0xed, 0xe6, 0x6d, + 0x84, 0xd8, 0x94, 0x4b, 0x45, 0x23, 0x9c, 0x73, 0xdd, 0x6b, 0xed, 0xc6, + 0xb3, 0x1d, 0x39, 0x03, 0xcc, 0x0e, 0xea, 0x78, 0xc8, 0x0b, 0xf1, 0xe2, + 0x0d, 0xf8, 0x7a, 0xcf, 0x50, 0x60, 0xd8, 0xf5, 0xa8, 0x08, 0x29, 0x91, + 0x14, 0x54, 0x19, 0x42, 0x7e, 0x82, 0xc5, 0xfd, 0x2c, 0xfd, 0x5e, 0x90, + 0xca, 0x3c, 0x01, 0xef, 0x20, 0xc7, 0x45, 0xa7, 0x65, 0x92, 0x95, 0x40, + 0x2a, 0x3b, 0xfa, 0x81, 0xf2, 0x91, 0xee, 0x8b, 0x6b, 0x79, 0x1c, 0x1b, + 0x20, 0xdc, 0x46, 0x0b, 0xdc, 0xd0, 0xf7, 0xa1, 0x7f, 0xc2, 0x0a, 0x3c, + 0x5f, 0xe7, 0xcc, 0xb5, 0x49, 0x87, 0x28, 0x1d, 0xcd, 0x01, 0x75, 0x70, + 0xc9, 0x85, 0xcd, 0xc7, 0xd0, 0xb6, 0x2d, 0xf0, 0x51, 0x1b, 0xd0, 0xab, + 0x5c, 0x4e, 0xa3, 0x8b, 0xe2, 0xbc, 0x40, 0x9a, 0x27, 0x2a, 0x0b, 0x6d, + 0x24, 0x45, 0x43, 0x86, 0xa4, 0x45, 0x72, 0x1a, 0x5a, 0x42, 0xbf, 0x05, + 0x74, 0x8c, 0x23, 0xc7, 0x2e, 0x74, 0x79, 0x60, 0xdd, 0x41, 0xe3, 0x05, + 0xa0, 0x61, 0x1d, 0xa5, 0x77, 0x51, 0x21, 0xd3, 0xc3, 0x08, 0x04, 0x9f, + 0x04, 0x2c, 0x4b, 0x79, 0x0e, 0x4b, 0x91, 0x87, 0x18, 0xcd, 0x8d, 0xd9, + 0x9e, 0x75, 0x84, 0xcb, 0x4a, 0x59, 0x5a, 0x29, 0xf3, 0xf3, 0xae, 0x62, + 0x99, 0x82, 0x0f, 0xdd, 0x49, 0x9e, 0x6a, 0x98, 0x1a, 0xdb, 0x5c, 0xd9, + 0x49, 0x4b, 0x3b, 0x69, 0x3e, 0x0e, 0x65, 0xec, 0xd0, 0xc3, 0x58, 0x1d, + 0x67, 0x87, 0x36, 0x67, 0x76, 0xd2, 0xd2, 0x4e, 0x9a, 0x1f, 0x6a, 0x9c, + 0xdd, 0xe3, 0x27, 0x8b, 0x41, 0xa2, 0xbd, 0xa5, 0x7f, 0x22, 0xa2, 0x90, + 0xd0, 0x2d, 0xa9, 0xd9, 0xfa, 0xc7, 0x59, 0xd5, 0xb4, 0xe1, 0x01, 0xab, + 0x13, 0xbd, 0x02, 0xf1, 0x84, 0x41, 0x53, 0xd8, 0x39, 0x7e, 0xc5, 0x0a, + 0xc3, 0xda, 0x02, 0x36, 0xcb, 0x40, 0xdc, 0x13, 0x96, 0x16, 0x3f, 0x18, + 0x5f, 0x10, 0x9c, 0x16, 0x6b, 0xe2, 0x7a, 0xbb, 0x59, 0x03, 0x61, 0x56, + 0xef, 0x45, 0x29, 0x9e, 0x2c, 0x29, 0x76, 0xd9, 0x3a, 0x8a, 0x3b, 0x43, + 0x14, 0x0c, 0xb3, 0x1c, 0x90, 0x3d, 0x28, 0x36, 0xa7, 0x45, 0x06, 0x36, + 0x2e, 0x86, 0xd8, 0xb2, 0x30, 0x22, 0xaf, 0x52, 0x98, 0x0a, 0xf5, 0xc7, + 0x98, 0xfe, 0xe5, 0x76, 0x0b, 0x1b, 0x56, 0xb3, 0x3c, 0x89, 0x2d, 0xb3, + 0x24, 0x05, 0x0b, 0x5f, 0xac, 0x22, 0x24, 0x0f, 0x02, 0x04, 0x36, 0x1d, + 0xbb, 0x50, 0xaa, 0x23, 0x63, 0xe4, 0xcb, 0x18, 0xfb, 0x32, 0xa0, 0x01, + 0x6c, 0x7e, 0x36, 0xeb, 0x53, 0x32, 0x1b, 0xd4, 0x06, 0x2c, 0x9c, 0x9e, + 0xd6, 0xcd, 0x9e, 0x75, 0xac, 0x70, 0x6a, 0x21, 0x79, 0xb6, 0x1b, 0x61, + 0x84, 0x09, 0x79, 0xb0, 0xcd, 0xe8, 0xf3, 0xdd, 0xe4, 0x72, 0xb6, 0x5b, + 0x15, 0x24, 0x01, 0x49, 0x8d, 0x81, 0xc8, 0x67, 0x47, 0x8a, 0xcd, 0x6e, + 0x71, 0x85, 0x0f, 0xa4, 0x4a, 0x93, 0x27, 0xe8, 0x52, 0xec, 0x42, 0x0e, + 0x3f, 0xcb, 0xa0, 0xed, 0xa4, 0xdd, 0xc3, 0x32, 0x21, 0xd3, 0x70, 0x9b, + 0x6e, 0x5f, 0x8f, 0x3e, 0x99, 0x15, 0x57, 0x03, 0x72, 0x88, 0x62, 0x15, + 0xf3, 0x31, 0x96, 0x42, 0x1b, 0xb8, 0x83, 0x2d, 0x4c, 0x76, 0xbf, 0x89, + 0xfa, 0x40, 0x7d, 0x00, 0x86, 0x16, 0x4c, 0xcb, 0xc7, 0xc9, 0x65, 0xd1, + 0xed, 0xe9, 0x94, 0xee, 0x42, 0x29, 0x7d, 0x2b, 0x29, 0x61, 0xde, 0xb6, + 0xab, 0x98, 0x66, 0xa1, 0xea, 0xfe, 0xca, 0x53, 0x18, 0x2d, 0xac, 0x78, + 0x8b, 0x8a, 0xb1, 0x22, 0xbf, 0x09, 0xe1, 0x9c, 0x81, 0x7e, 0xeb, 0xe6, + 0x4d, 0xb6, 0x23, 0x8f, 0x9d, 0xca, 0xbb, 0x0d, 0xf5, 0xb4, 0x47, 0xd7, + 0x50, 0xc7, 0x77, 0xa1, 0xfd, 0x63, 0xe0, 0x6b, 0x70, 0xdb, 0x8b, 0xf0, + 0xe3, 0x0e, 0x36, 0x63, 0xe0, 0xbf, 0x2e, 0x5d, 0x66, 0x43, 0x42, 0x32, + 0x08, 0xf4, 0x13, 0x4e, 0x43, 0x2a, 0x39, 0x25, 0x18, 0xa1, 0x33, 0xc9, + 0x00, 0xf9, 0xec, 0x37, 0x84, 0x5b, 0xc2, 0x38, 0x4b, 0x7a, 0x26, 0xc3, + 0x37, 0x0c, 0xca, 0x59, 0x07, 0x4a, 0x84, 0x1e, 0xc9, 0x49, 0x9e, 0x47, + 0x53, 0xc9, 0x82, 0x07, 0x21, 0xd3, 0xc1, 0xc5, 0x0d, 0x0b, 0x0f, 0xf4, + 0xd2, 0x05, 0x3d, 0xf2, 0x41, 0xcf, 0x5d, 0xd0, 0x63, 0x1f, 0xf4, 0x8d, + 0x02, 0x2d, 0xc7, 0x74, 0x79, 0xae, 0x58, 0xe7, 0xce, 0x38, 0x3a, 0x6c, + 0x33, 0x23, 0x4f, 0x07, 0xdb, 0x45, 0xdb, 0x67, 0xa2, 0xec, 0x2d, 0x69, + 0x6c, 0x21, 0xef, 0x76, 0xbb, 0x7f, 0xe3, 0xdc, 0xb9, 0x85, 0x6f, 0xec, + 0xa3, 0xd8, 0xef, 0xf1, 0x68, 0xe6, 0x85, 0x6b, 0x9b, 0xd6, 0x09, 0x84, + 0x06, 0xd2, 0x9d, 0xe8, 0x2f, 0x30, 0x74, 0xc3, 0xb0, 0x17, 0xc1, 0x7f, + 0xdc, 0x8c, 0xdf, 0xa4, 0x17, 0xc5, 0x55, 0xf9, 0xeb, 0x2a, 0x41, 0xbf, + 0x41, 0x19, 0x58, 0x04, 0xed, 0x90, 0xd7, 0x8e, 0xd4, 0x52, 0x89, 0x4d, + 0x4a, 0x87, 0x6a, 0xd8, 0x8e, 0x9c, 0x04, 0xfa, 0x1a, 0x07, 0x9b, 0x58, + 0x29, 0xb1, 0x2c, 0xf4, 0xe0, 0xa5, 0x97, 0x38, 0xe8, 0x4b, 0xd1, 0xbb, + 0x00, 0x99, 0xf3, 0x4e, 0x85, 0xa3, 0x84, 0xc8, 0x38, 0x90, 0xb2, 0x51, + 0xa8, 0x69, 0x16, 0x75, 0x91, 0xe0, 0x4e, 0xe8, 0x37, 0xd1, 0x54, 0xab, + 0x71, 0x74, 0x10, 0x8d, 0x27, 0x26, 0xd0, 0xb7, 0x00, 0xa4, 0x09, 0x42, + 0x40, 0xd9, 0xf7, 0x41, 0x39, 0xd5, 0x9e, 0xc0, 0x0c, 0x92, 0x27, 0x96, + 0x44, 0x17, 0xf3, 0xbf, 0x80, 0xcd, 0xf0, 0x5d, 0x6e, 0xb3, 0xf4, 0x70, + 0x70, 0xa4, 0x80, 0xc2, 0x6e, 0xb8, 0x02, 0x1a, 0x6b, 0xb0, 0x7d, 0xd8, + 0xc3, 0xed, 0xea, 0xec, 0x11, 0x78, 0x34, 0xdf, 0x64, 0xa0, 0x70, 0x98, + 0x28, 0x9b, 0x7e, 0x9e, 0x2c, 0xd3, 0xf5, 0xe7, 0x60, 0xc9, 0xe2, 0xae, + 0x09, 0xce, 0xda, 0x4e, 0x07, 0x9f, 0x65, 0x0b, 0xbb, 0x7e, 0x2a, 0x37, + 0xa4, 0x3f, 0x63, 0x68, 0x16, 0xb2, 0x8e, 0x9f, 0x3f, 0xea, 0xb1, 0x4d, + 0x69, 0x49, 0x9c, 0xda, 0x02, 0xef, 0x1b, 0x6b, 0x4c, 0xbd, 0x1e, 0xc5, + 0x60, 0x06, 0x73, 0xca, 0x5c, 0x47, 0x33, 0xb2, 0xaa, 0x08, 0xc4, 0x99, + 0x78, 0xb6, 0xab, 0xb3, 0xb1, 0x4a, 0xd7, 0xc9, 0xd7, 0x54, 0xd9, 0x69, + 0xf4, 0x70, 0xa2, 0xe7, 0xb1, 0x78, 0x09, 0xa7, 0x38, 0x6f, 0x87, 0xdc, + 0xce, 0x73, 0x43, 0xfa, 0xeb, 0x38, 0xa1, 0xe2, 0xae, 0x91, 0x4c, 0x41, + 0x05, 0x4a, 0x71, 0x94, 0x3c, 0x5f, 0xa6, 0xab, 0x15, 0x0b, 0x36, 0x37, + 0x4f, 0x66, 0xbb, 0x22, 0xbd, 0xdc, 0xad, 0x44, 0x78, 0x5e, 0x01, 0x52, + 0xcc, 0xbe, 0x4f, 0xd6, 0x74, 0xdb, 0x99, 0xce, 0x38, 0xbd, 0x1e, 0x5d, + 0x15, 0xc5, 0x16, 0xa2, 0x45, 0xe5, 0x05, 0xac, 0x1d, 0xc0, 0xb8, 0x9b, + 0x5d, 0xae, 0x36, 0x37, 0x60, 0x95, 0xae, 0x0f, 0x7e, 0xd8, 0x25, 0x39, + 0xed, 0xc7, 0x1e, 0x8c, 0x5e, 0x1d, 0x1f, 0x1f, 0xbd, 0x3a, 0x7c, 0x78, + 0x30, 0xdf, 0xa5, 0x2b, 0x3c, 0x03, 0xd1, 0x9f, 0xf5, 0x89, 0x6c, 0x9f, + 0xfc, 0xac, 0x7e, 0xba, 0xee, 0x5f, 0x15, 0xd7, 0xab, 0x23, 0xe3, 0x61, + 0x3c, 0x30, 0x0e, 0x2b, 0x66, 0x62, 0xf8, 0xd7, 0x37, 0xc0, 0xc9, 0x3c, + 0x2e, 0x7f, 0xbd, 0x6c, 0xf8, 0xe7, 0xf2, 0x9d, 0xe4, 0xb7, 0x39, 0x62, + 0xcc, 0x00, 0xfb, 0xe0, 0x33, 0xcb, 0x96, 0x02, 0x8d, 0x19, 0xbd, 0x6a, + 0x06, 0xec, 0x07, 0x4f, 0x55, 0x20, 0x11, 0x8e, 0x07, 0xdc, 0xa7, 0x51, + 0x76, 0x2e, 0xba, 0x20, 0x8f, 0x37, 0x96, 0x0e, 0x09, 0x50, 0x53, 0xd7, + 0xf4, 0x41, 0x57, 0x60, 0xd9, 0xa9, 0x40, 0x42, 0x4f, 0x55, 0x75, 0xd2, + 0xc8, 0x91, 0xa2, 0x30, 0x32, 0xa0, 0xb2, 0xae, 0x64, 0x52, 0x60, 0x99, + 0x24, 0x58, 0xf5, 0xa9, 0x8d, 0x9d, 0x8b, 0xda, 0x53, 0xea, 0xe3, 0x55, + 0xbe, 0x8a, 0x61, 0x4c, 0x12, 0x6d, 0x85, 0xdb, 0xe9, 0x18, 0x2a, 0x04, + 0x0f, 0x89, 0xbc, 0xd0, 0xed, 0x78, 0xb0, 0xe3, 0xb0, 0x42, 0xef, 0xa5, + 0xca, 0xa2, 0x31, 0x69, 0xd2, 0xe5, 0x8b, 0xab, 0x34, 0x1f, 0x54, 0xf7, + 0xf2, 0x8c, 0x09, 0x53, 0x95, 0x9f, 0x14, 0x19, 0x50, 0xdf, 0x21, 0xdc, + 0xc9, 0x0a, 0xae, 0xfd, 0xdf, 0xa4, 0xd8, 0xe3, 0x43, 0x2c, 0x07, 0x70, + 0x19, 0x6e, 0x39, 0x50, 0x12, 0x68, 0x14, 0x38, 0xba, 0xb4, 0x86, 0xd7, + 0x77, 0x4f, 0x96, 0xc8, 0x1d, 0x24, 0x4b, 0xbf, 0x8a, 0xbf, 0x03, 0xf9, + 0x31, 0x98, 0x8a, 0x59, 0xf6, 0x01, 0xcb, 0x16, 0x03, 0xdc, 0xe8, 0x15, + 0xfc, 0x14, 0xa4, 0x25, 0x3a, 0x3d, 0xfe, 0xc3, 0xae, 0xc8, 0x15, 0x9b, + 0x2d, 0x02, 0xc3, 0x36, 0x37, 0xbe, 0x9b, 0x53, 0x0b, 0x0a, 0x9e, 0x9a, + 0xd8, 0xd6, 0x26, 0xc3, 0xe1, 0x69, 0x7f, 0x95, 0xc0, 0xc4, 0x0b, 0x25, + 0x48, 0x01, 0x84, 0x53, 0x13, 0x2c, 0x5b, 0xca, 0x5b, 0x1b, 0xcd, 0xa2, + 0xdf, 0x50, 0x8e, 0xf7, 0x67, 0x28, 0x6b, 0x07, 0x66, 0x66, 0xc6, 0xdd, + 0x43, 0xb3, 0xf4, 0x06, 0x84, 0xd1, 0x5a, 0x25, 0x05, 0xd7, 0x36, 0xef, + 0xd0, 0x4c, 0x30, 0x29, 0xba, 0xcd, 0x56, 0x8b, 0x4b, 0x67, 0x1a, 0xb4, + 0xa9, 0xd4, 0x5a, 0xf9, 0xbd, 0xab, 0x52, 0xa0, 0x20, 0x35, 0x53, 0x46, + 0x49, 0x38, 0xda, 0x8a, 0xb9, 0x45, 0x98, 0x5b, 0xc8, 0xef, 0x33, 0xd4, + 0x09, 0xfc, 0x78, 0x23, 0x2a, 0xbf, 0xeb, 0x5b, 0xfb, 0x12, 0xe3, 0x4e, + 0xc5, 0xb8, 0x53, 0x30, 0xee, 0x0c, 0x0c, 0xc1, 0xc6, 0x59, 0x06, 0x2e, + 0xff, 0x55, 0x8a, 0x1e, 0xea, 0xed, 0xdd, 0x78, 0xbb, 0x59, 0xcd, 0xb2, + 0x18, 0x66, 0x01, 0x77, 0xc8, 0xaa, 0x23, 0xa4, 0x44, 0xf4, 0x26, 0xa7, + 0x28, 0x89, 0x19, 0xe1, 0xa6, 0xbf, 0x4f, 0xb7, 0x14, 0x5f, 0x1a, 0xa8, + 0xdc, 0x75, 0x41, 0x3e, 0x60, 0x06, 0xd2, 0x35, 0xc8, 0x26, 0x07, 0x6d, + 0x99, 0x15, 0x30, 0xc0, 0xd2, 0xf0, 0x9b, 0xa7, 0x17, 0xf0, 0x79, 0xa9, + 0x0c, 0xb4, 0xce, 0xd3, 0x86, 0xe0, 0xdb, 0xed, 0x12, 0x7b, 0x4f, 0xce, + 0xae, 0xc6, 0x05, 0x5d, 0x96, 0x01, 0xd6, 0xc6, 0xf0, 0x2d, 0x86, 0x0a, + 0x59, 0xfc, 0xd3, 0x02, 0x5d, 0xba, 0xdc, 0xb1, 0xf2, 0xa9, 0x60, 0x32, + 0x27, 0x78, 0xfe, 0x8f, 0x56, 0x2d, 0x19, 0x3b, 0x69, 0x1e, 0x6d, 0xd3, + 0xdb, 0x64, 0x05, 0x69, 0x08, 0xc3, 0x1b, 0x9a, 0xda, 0x8a, 0x62, 0x20, + 0x0d, 0xec, 0xb2, 0xb3, 0xcd, 0xcd, 0xc7, 0xec, 0x00, 0xef, 0x54, 0x69, + 0xeb, 0x89, 0x0d, 0x38, 0xbb, 0xf8, 0x6e, 0x97, 0x17, 0xc9, 0xc5, 0x37, + 0x28, 0x6c, 0x30, 0xc0, 0x1c, 0x90, 0x7b, 0x71, 0x30, 0x50, 0x43, 0x8b, + 0xb3, 0x71, 0xfc, 0xac, 0x7f, 0x44, 0xd1, 0x64, 0xcf, 0x31, 0x8a, 0xd1, + 0xd9, 0x10, 0x0d, 0x35, 0x7c, 0x8f, 0x81, 0x21, 0x55, 0xa2, 0xc0, 0xb1, + 0x93, 0xc7, 0xae, 0xbf, 0x68, 0x74, 0x26, 0xef, 0xdc, 0x45, 0xdf, 0xed, + 0xa9, 0x68, 0x12, 0xa7, 0x74, 0x99, 0xb0, 0xc8, 0x04, 0xd6, 0x95, 0xb9, + 0x98, 0xb3, 0xe4, 0x87, 0x5d, 0x9a, 0x01, 0xc1, 0x87, 0x51, 0xbe, 0xda, + 0x14, 0xb9, 0x90, 0xbb, 0x24, 0x69, 0x53, 0xa4, 0xe6, 0x22, 0x67, 0x42, + 0x08, 0x14, 0x6a, 0x14, 0xcb, 0x2a, 0xbe, 0x24, 0x9b, 0xa4, 0x8b, 0x6e, + 0x86, 0xe4, 0x60, 0xe2, 0xd2, 0x9d, 0x2b, 0x9a, 0x35, 0x81, 0xde, 0x38, + 0x9a, 0x2c, 0x9f, 0xc1, 0xaa, 0xcd, 0x8c, 0x87, 0x90, 0xcb, 0xa2, 0x03, + 0x7f, 0xe3, 0x8a, 0xd9, 0xd7, 0x68, 0x30, 0x74, 0x96, 0x72, 0x06, 0xb3, + 0xa4, 0x1e, 0x9b, 0xe2, 0xf5, 0x68, 0x32, 0x47, 0xb3, 0xd9, 0xfc, 0xc7, + 0x31, 0x4c, 0xa4, 0x63, 0x60, 0xa1, 0xa7, 0x94, 0xd5, 0x63, 0xd4, 0xba, + 0x2e, 0x1d, 0x5a, 0x6d, 0xaf, 0x66, 0xa8, 0x68, 0x47, 0x47, 0x56, 0x31, + 0x64, 0x52, 0xce, 0x48, 0x3a, 0x48, 0x1c, 0x0a, 0x9c, 0x78, 0x01, 0x40, + 0x62, 0x23, 0x00, 0x62, 0x0c, 0x55, 0x82, 0x8d, 0x01, 0x8c, 0x18, 0xae, + 0x84, 0x3a, 0x04, 0x28, 0xc6, 0x9c, 0x6f, 0xed, 0x5a, 0x1f, 0xe8, 0xb7, + 0x3b, 0x65, 0xe9, 0x81, 0xb4, 0x88, 0x86, 0xc7, 0xa1, 0xb1, 0x32, 0xac, + 0x1b, 0x25, 0xdd, 0x4c, 0x43, 0x81, 0x34, 0x60, 0xe7, 0x3f, 0x64, 0x45, + 0x7c, 0x0b, 0xed, 0x8c, 0x7c, 0xdc, 0xc1, 0xe7, 0x9d, 0x6a, 0x67, 0xc1, + 0x16, 0x08, 0x40, 0x28, 0x6a, 0x3d, 0x8e, 0x61, 0x71, 0xe3, 0x96, 0x00, + 0xe4, 0xa2, 0x9c, 0x30, 0x82, 0x46, 0xd9, 0xc2, 0x9c, 0xc0, 0xa7, 0x1a, + 0x89, 0x18, 0x7e, 0x82, 0x0a, 0x42, 0x47, 0xf9, 0xfd, 0xb7, 0x5e, 0xf4, + 0xfb, 0x6f, 0xe7, 0x90, 0x00, 0x73, 0x66, 0x91, 0x2d, 0x68, 0x02, 0x22, + 0x88, 0x96, 0x00, 0xa1, 0x5e, 0xe0, 0x24, 0x4b, 0x38, 0x59, 0x70, 0x8c, + 0xb4, 0x81, 0x6b, 0xee, 0x78, 0xe0, 0xdc, 0x29, 0x56, 0x1c, 0x11, 0xd2, + 0x5e, 0x40, 0xd5, 0xf9, 0xaa, 0xd1, 0x1a, 0x4d, 0x48, 0x8b, 0x2b, 0xe8, + 0xd3, 0xa0, 0x2f, 0x2c, 0x0b, 0xa8, 0x49, 0x70, 0x45, 0x46, 0x40, 0x68, + 0x04, 0x30, 0xf0, 0x01, 0x0c, 0x40, 0x71, 0x32, 0x07, 0xba, 0x19, 0xa7, + 0x01, 0xb8, 0xf1, 0x28, 0xea, 0x73, 0x49, 0xce, 0xf3, 0x38, 0x26, 0xac, + 0x17, 0xd0, 0x93, 0xef, 0x83, 0xdb, 0xaf, 0xca, 0x3c, 0x1b, 0x81, 0xa6, + 0xc3, 0xff, 0xf3, 0x91, 0xb6, 0x32, 0x48, 0x08, 0x6f, 0xc2, 0xec, 0x01, + 0x8e, 0x88, 0x51, 0x99, 0x76, 0x70, 0xcd, 0xf8, 0x4c, 0xe2, 0xa2, 0x46, + 0x9d, 0xb1, 0xc2, 0xa1, 0xc9, 0x40, 0x37, 0xce, 0xf5, 0x49, 0xbb, 0x46, + 0x73, 0xa4, 0xd2, 0x1c, 0x57, 0xd3, 0x04, 0x5a, 0x8c, 0x6c, 0x0d, 0xcd, + 0xb1, 0x4a, 0xf3, 0xb0, 0x9a, 0xe6, 0x50, 0xd2, 0xbc, 0xad, 0xa2, 0x79, + 0xa8, 0xd2, 0x7c, 0x58, 0x4b, 0xb3, 0x64, 0xb5, 0x8a, 0xe6, 0x43, 0x95, + 0xe6, 0x51, 0x6d, 0xdd, 0x87, 0x21, 0x34, 0x8f, 0x54, 0x9a, 0xc7, 0x61, + 0x6d, 0x34, 0x94, 0x75, 0xa7, 0x4e, 0x2f, 0x15, 0xe2, 0xba, 0xd4, 0xc0, + 0x3e, 0x2f, 0x9b, 0xa0, 0xa4, 0x0b, 0xb2, 0x04, 0x62, 0x44, 0x8b, 0x42, + 0x92, 0x5d, 0x43, 0x02, 0xff, 0x9c, 0xd3, 0xe7, 0xb9, 0xe2, 0x7a, 0x8a, + 0x3b, 0x20, 0x59, 0x6f, 0xd9, 0x9b, 0x13, 0x55, 0x11, 0x4a, 0x0c, 0x04, + 0x36, 0x12, 0xc3, 0x16, 0xd8, 0xc7, 0x73, 0xbd, 0x8f, 0x43, 0x0a, 0xe8, + 0x30, 0x94, 0xc5, 0xbe, 0x2c, 0xf9, 0x17, 0x28, 0xd7, 0x5a, 0x30, 0xa7, + 0xcb, 0x65, 0x2b, 0x18, 0xe7, 0x62, 0x8c, 0xa6, 0xaa, 0x2e, 0x66, 0x51, + 0xc2, 0x00, 0xff, 0x79, 0x2c, 0x56, 0x9a, 0xa8, 0x45, 0x29, 0x99, 0xc6, + 0xac, 0x74, 0x5d, 0x46, 0x4e, 0x1b, 0xe8, 0x0f, 0x0a, 0x48, 0x20, 0x7f, + 0xf8, 0xc3, 0xb3, 0x12, 0xe6, 0x5c, 0xca, 0xd1, 0x5f, 0x36, 0x69, 0x7d, + 0x99, 0x4c, 0xa7, 0x99, 0xe8, 0xfa, 0xd2, 0xe9, 0xc9, 0x17, 0x8f, 0x3e, + 0x7f, 0x8c, 0x8b, 0x5f, 0xd5, 0xaf, 0x0b, 0x10, 0xea, 0x02, 0xdf, 0x89, + 0xc7, 0xbb, 0x98, 0xd5, 0xef, 0x0c, 0x48, 0xa1, 0x18, 0x58, 0x70, 0xa6, + 0xd4, 0x75, 0x18, 0x82, 0x84, 0x2a, 0x36, 0x75, 0xec, 0x17, 0x26, 0x3a, + 0xef, 0x7e, 0xf6, 0x09, 0x6d, 0xd5, 0x40, 0xda, 0x66, 0x76, 0x91, 0x5c, + 0xc0, 0x74, 0x54, 0x34, 0x40, 0xb9, 0x47, 0x21, 0xdb, 0x1c, 0x0a, 0xc2, + 0x96, 0xcd, 0x76, 0xeb, 0x28, 0x4f, 0xd7, 0x8b, 0x24, 0x02, 0x74, 0x0c, + 0xfd, 0xb8, 0x22, 0x5c, 0x7a, 0xd5, 0x24, 0xc3, 0xa8, 0x91, 0x7c, 0x25, + 0x35, 0x29, 0xe8, 0xee, 0x17, 0xbb, 0x2e, 0xe3, 0x8a, 0xaf, 0xcf, 0x8f, + 0x41, 0x22, 0x8e, 0xbc, 0x09, 0x81, 0xc0, 0x74, 0x69, 0x62, 0x58, 0x85, + 0xf7, 0x0c, 0x64, 0x59, 0x01, 0x6f, 0x21, 0xcd, 0xd8, 0x65, 0x85, 0x04, + 0x6d, 0x02, 0x01, 0xfd, 0x74, 0x38, 0xa4, 0x64, 0x7d, 0x35, 0x4f, 0xa6, + 0x57, 0xbc, 0x6b, 0x4e, 0x6e, 0x18, 0x1b, 0x1c, 0x55, 0x59, 0xbf, 0x71, + 0x90, 0x2f, 0xb2, 0x74, 0x5b, 0xbc, 0x09, 0x49, 0xf4, 0x73, 0xbe, 0xb9, + 0xb8, 0x83, 0x1f, 0x6f, 0x1c, 0xe0, 0xea, 0xcd, 0x9b, 0x7f, 0x00, 0xd4, + 0x4d, 0x20, 0xf1, 0xa1, 0x9f, 0x01, 0x00 +}; diff --git a/Arduino/McLighting/html_material_icons.h b/Arduino/McLighting/html_material_icons.h new file mode 100644 index 00000000..bf2ad347 --- /dev/null +++ b/Arduino/McLighting/html_material_icons.h @@ -0,0 +1,6472 @@ +#include +#define material_icons_woff2_len 60832 +static const char material_icons_woff2[] PROGMEM ={ + 0x77, 0x4f, 0x46, 0x32, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xed, 0xa0, + 0x00, 0x0f, 0x00, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x00, 0xed, 0x44, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1a, 0x1c, 0x1b, 0x10, 0x1c, 0x82, 0x90, 0x2a, 0x06, 0x60, 0x00, 0x91, + 0x34, 0x08, 0x04, 0x11, 0x08, 0x0a, 0x88, 0x89, 0x18, 0x86, 0x8c, 0x1a, + 0x0b, 0xa7, 0x64, 0x00, 0x01, 0x36, 0x02, 0x24, 0x03, 0x93, 0x76, 0x04, + 0x20, 0x05, 0x82, 0x7a, 0x07, 0x20, 0x5b, 0x99, 0x23, 0x72, 0xc2, 0xe2, + 0x76, 0x7b, 0xa2, 0xc8, 0x6d, 0x03, 0x00, 0x2e, 0xed, 0x26, 0xfb, 0xf9, + 0x62, 0x46, 0x06, 0x02, 0xe7, 0x41, 0x22, 0x38, 0xf3, 0x3f, 0xb7, 0x44, + 0xbc, 0x7d, 0xba, 0x70, 0x3b, 0xb0, 0xe7, 0xad, 0xab, 0x65, 0x99, 0xfd, + 0xff, 0xff, 0x99, 0x49, 0x43, 0x8e, 0xbc, 0xa4, 0x93, 0xb4, 0x57, 0x18, + 0x3c, 0xcc, 0xb6, 0x50, 0x18, 0x6b, 0x6d, 0x91, 0x7d, 0x1c, 0xa7, 0x79, + 0x5c, 0x60, 0xaa, 0x6e, 0x2d, 0xbf, 0x7b, 0xf4, 0xc8, 0xcc, 0x9e, 0x58, + 0xc3, 0xe1, 0x55, 0x51, 0x43, 0xb1, 0x61, 0x8f, 0x89, 0x4c, 0xb1, 0xd3, + 0x63, 0xff, 0x1c, 0xc7, 0xd1, 0xa0, 0x0f, 0x57, 0x99, 0x99, 0x0d, 0xb6, + 0xcc, 0xcc, 0x86, 0x27, 0x95, 0xa8, 0x44, 0xa5, 0xd2, 0xed, 0xda, 0xbc, + 0x6e, 0x51, 0x3f, 0x0d, 0x6f, 0xa8, 0xe0, 0x30, 0x38, 0x2e, 0x30, 0x38, + 0x46, 0x78, 0x20, 0xb3, 0xc7, 0xda, 0x1a, 0x15, 0x9b, 0x70, 0x2c, 0xea, + 0xf4, 0xd1, 0xd8, 0xd9, 0x05, 0x9d, 0x88, 0x54, 0x10, 0x71, 0xe1, 0x3d, + 0x87, 0x8b, 0x7e, 0xe8, 0x1a, 0x67, 0x7d, 0x49, 0x1b, 0x8a, 0xe9, 0x35, + 0x2f, 0xa0, 0x90, 0xaa, 0xcd, 0x6c, 0x33, 0xdb, 0xcc, 0x36, 0x4a, 0xb6, + 0x41, 0x0a, 0x0b, 0x15, 0xf2, 0x6f, 0xec, 0xec, 0x7c, 0x58, 0x27, 0xb5, + 0xe8, 0x2f, 0xc4, 0x6a, 0x81, 0x78, 0xbd, 0x8a, 0xdf, 0x12, 0xb3, 0xf7, + 0x1e, 0xca, 0x3f, 0xbe, 0xa8, 0x78, 0xb4, 0xa0, 0x2d, 0x09, 0xc5, 0xcf, + 0xaf, 0x3f, 0x0e, 0x41, 0x75, 0xac, 0x33, 0xd5, 0x70, 0x16, 0xbe, 0x0e, + 0x88, 0xc7, 0xe6, 0x48, 0x25, 0xa2, 0x8d, 0x15, 0x4f, 0x9c, 0xf8, 0xae, + 0x57, 0x9e, 0xff, 0xff, 0x71, 0xf0, 0xed, 0x73, 0xee, 0xfb, 0x20, 0x57, + 0x87, 0x06, 0xc9, 0x58, 0x9d, 0x0d, 0x0a, 0x05, 0x4c, 0x60, 0x48, 0x13, + 0xc1, 0x3e, 0x75, 0x42, 0x82, 0x4a, 0xfc, 0xc7, 0x70, 0x46, 0x75, 0xab, + 0x69, 0x9b, 0x0c, 0x30, 0x01, 0x36, 0x58, 0x19, 0x48, 0x36, 0xe7, 0xaa, + 0xef, 0xea, 0xf7, 0xa6, 0xf7, 0xf7, 0x22, 0x72, 0xa2, 0x5b, 0x6b, 0xd5, + 0x42, 0x53, 0x92, 0x4e, 0xc3, 0xc0, 0x11, 0xf8, 0x27, 0xa3, 0x5f, 0x9f, + 0x7a, 0x24, 0x75, 0x75, 0xf2, 0x99, 0x48, 0x01, 0xa2, 0x22, 0xf4, 0xfb, + 0xa5, 0x46, 0xbd, 0x19, 0x3e, 0xc5, 0xa7, 0x28, 0xa1, 0x12, 0x42, 0x32, + 0x76, 0xcb, 0x6e, 0x77, 0x88, 0xb3, 0x21, 0x84, 0xcb, 0xf5, 0xb6, 0x6f, + 0x87, 0x68, 0x6e, 0xf7, 0xbf, 0xfc, 0xf5, 0x6f, 0xfc, 0x53, 0x03, 0xc6, + 0xa8, 0xb1, 0xc1, 0xa8, 0x52, 0x18, 0x95, 0x8e, 0x18, 0xad, 0x44, 0x94, + 0x36, 0x60, 0x81, 0x49, 0x9b, 0x3d, 0xac, 0x06, 0x2c, 0xa2, 0xad, 0x46, + 0x68, 0x1b, 0x33, 0x18, 0x67, 0x4b, 0x11, 0xd9, 0x44, 0x87, 0xa5, 0x5d, + 0xbb, 0x75, 0x13, 0x7f, 0xbd, 0x7e, 0xc8, 0x85, 0x5c, 0x78, 0x23, 0xd4, + 0x08, 0x6f, 0xbc, 0x73, 0x12, 0x72, 0x21, 0x54, 0x44, 0xd7, 0xa9, 0x1d, + 0x67, 0x4b, 0xb3, 0x49, 0x7d, 0xee, 0x30, 0x76, 0x58, 0xbb, 0xee, 0xaf, + 0xda, 0xf2, 0xce, 0x1b, 0xb9, 0x12, 0x42, 0x78, 0x71, 0xde, 0x08, 0x21, + 0x84, 0xba, 0xec, 0x34, 0xf3, 0xab, 0xbe, 0xf4, 0xb4, 0x29, 0xe3, 0x90, + 0x6d, 0xeb, 0xcb, 0x9a, 0x79, 0xab, 0xdd, 0xdf, 0x74, 0x4d, 0x1c, 0xc6, + 0x08, 0x23, 0x84, 0x38, 0x4c, 0x90, 0x9e, 0xd7, 0xf4, 0xa9, 0xb0, 0xfc, + 0x8b, 0x4e, 0xa5, 0x80, 0x3a, 0xc0, 0x26, 0x03, 0x99, 0x2c, 0xab, 0x0d, + 0xfc, 0x8f, 0x83, 0xed, 0x6d, 0xff, 0x0a, 0xa2, 0x88, 0xd3, 0x80, 0x2d, + 0x87, 0x8e, 0xe7, 0x73, 0xb3, 0xc1, 0x03, 0xe4, 0x4e, 0x42, 0x7e, 0x80, + 0x70, 0x24, 0x84, 0x33, 0xef, 0x05, 0xee, 0xa0, 0x02, 0x92, 0x0f, 0x84, + 0x00, 0x09, 0xdc, 0xff, 0x7d, 0x2e, 0x15, 0xe4, 0xd2, 0xfc, 0xe8, 0xcd, + 0xe1, 0xd9, 0xff, 0x6b, 0xad, 0x80, 0xf6, 0xb0, 0x36, 0xa1, 0x42, 0x5b, + 0xb5, 0xdd, 0x5e, 0xfc, 0x74, 0x6b, 0x0f, 0xad, 0x5d, 0xb1, 0x0d, 0xb5, + 0xb5, 0xbb, 0x55, 0x5a, 0xdb, 0x2e, 0x49, 0x8f, 0x6d, 0xb4, 0xbd, 0x17, + 0x5c, 0xe3, 0x1e, 0x3d, 0xd6, 0xee, 0xd6, 0xfc, 0xc4, 0x2f, 0x67, 0x13, + 0xa8, 0x2e, 0x62, 0x13, 0xaa, 0x3e, 0xdb, 0xfa, 0x52, 0xb1, 0xd9, 0x8a, + 0x85, 0x5a, 0x60, 0x7e, 0x50, 0xcd, 0x4b, 0xf1, 0x04, 0xb1, 0xb7, 0x07, + 0x1e, 0x5a, 0x7f, 0x88, 0xa6, 0x1e, 0x78, 0x50, 0x5f, 0x24, 0x54, 0xa6, + 0xa2, 0x5b, 0x0b, 0xc7, 0xc0, 0xd5, 0x97, 0x13, 0x24, 0x73, 0x34, 0x9c, + 0xa4, 0xa2, 0x0f, 0x16, 0xcd, 0xc8, 0x16, 0x58, 0x3d, 0x7f, 0xfa, 0x14, + 0x19, 0xcc, 0xa9, 0xc9, 0xdb, 0x4f, 0xda, 0x7e, 0x81, 0x21, 0xd8, 0x72, + 0x60, 0x04, 0xb6, 0x73, 0x08, 0x5d, 0x2a, 0xb8, 0x5e, 0x8e, 0x5a, 0x6f, + 0x97, 0xcf, 0x37, 0xf9, 0xb6, 0x5f, 0xc9, 0x72, 0x92, 0xc2, 0x41, 0x1c, + 0xc0, 0x01, 0x97, 0xc6, 0x10, 0x38, 0x04, 0xd8, 0x36, 0x20, 0xf5, 0xfb, + 0xc3, 0x83, 0xc3, 0xe9, 0x82, 0xdb, 0x8e, 0x17, 0x7e, 0xaf, 0xea, 0x51, + 0x3d, 0x6a, 0xd4, 0x88, 0x56, 0x2f, 0x6f, 0x0b, 0x22, 0x02, 0x22, 0xda, + 0x6f, 0x3f, 0x5c, 0xdc, 0x47, 0xf4, 0xda, 0xdd, 0x4a, 0x1d, 0x42, 0x87, + 0x46, 0x15, 0x6d, 0x0d, 0xbe, 0x29, 0xe4, 0x72, 0x4e, 0x29, 0xf9, 0x2d, + 0x85, 0x4b, 0x82, 0x11, 0x83, 0x1e, 0xdc, 0x4f, 0xcb, 0x20, 0x4c, 0x9d, + 0xa9, 0xd0, 0x12, 0x08, 0xf2, 0x92, 0x4f, 0x57, 0x1c, 0xe8, 0x2d, 0x34, + 0xe6, 0xcb, 0xa5, 0xfe, 0xcc, 0x3f, 0xce, 0x5c, 0x47, 0xa3, 0x05, 0x43, + 0x61, 0x59, 0x86, 0x82, 0x63, 0xa0, 0x96, 0x9d, 0x02, 0xcf, 0x68, 0x12, + 0xeb, 0x12, 0x47, 0xbf, 0xd5, 0xe5, 0x2a, 0x5d, 0xa5, 0xd7, 0xdb, 0x42, + 0x1c, 0x97, 0xbf, 0xdd, 0x2c, 0x24, 0xdc, 0xf2, 0x82, 0xed, 0x94, 0x43, + 0xbb, 0xf6, 0xc0, 0x07, 0xf6, 0x07, 0x9d, 0x61, 0xb3, 0xf4, 0x01, 0xe6, + 0xcd, 0x2f, 0xd1, 0xca, 0x65, 0xa9, 0xf9, 0x63, 0x33, 0x2b, 0xf8, 0xc1, + 0x89, 0x46, 0x80, 0xcc, 0x4c, 0xc8, 0x6a, 0xe5, 0x2d, 0x39, 0xad, 0x55, + 0x57, 0x22, 0xd4, 0x4d, 0xbb, 0xb9, 0x43, 0x02, 0xe4, 0x19, 0x0d, 0x09, + 0x39, 0x1f, 0xbc, 0x53, 0xeb, 0x67, 0xe4, 0x87, 0x33, 0xd2, 0xc3, 0x36, + 0xbb, 0x7b, 0x84, 0xb2, 0xd4, 0x76, 0x89, 0x6c, 0xb9, 0x70, 0xc7, 0x05, + 0xc7, 0x1e, 0x48, 0xa2, 0x9f, 0x3a, 0xda, 0xac, 0x7e, 0x7e, 0xe5, 0x5f, + 0xfb, 0x97, 0x02, 0xbb, 0x1c, 0x28, 0x1c, 0x50, 0x81, 0x8f, 0xba, 0x47, + 0x14, 0xc7, 0x07, 0xdc, 0x03, 0xfb, 0xde, 0xcc, 0x4a, 0x17, 0x3f, 0x7a, + 0x55, 0xdf, 0x1d, 0x49, 0x34, 0x95, 0x06, 0xa9, 0x4d, 0x1a, 0x9e, 0xf6, + 0x4f, 0x68, 0x8f, 0xe7, 0x58, 0x33, 0xaf, 0xdf, 0xff, 0xc9, 0xae, 0xdf, + 0xaf, 0x7e, 0x00, 0xb5, 0x05, 0xc4, 0x6c, 0x6d, 0x75, 0x31, 0x06, 0xa2, + 0x63, 0x81, 0xc5, 0x82, 0x52, 0xf4, 0xff, 0xd5, 0x83, 0xa9, 0x2e, 0xac, + 0x00, 0xb0, 0xc3, 0x60, 0x77, 0xa3, 0xc9, 0x68, 0x81, 0x89, 0x00, 0x66, + 0x86, 0xca, 0x30, 0xb5, 0xf0, 0xe8, 0x49, 0xf3, 0x6c, 0x5a, 0xca, 0x64, + 0xf8, 0x74, 0x0c, 0xba, 0xa4, 0x63, 0x9d, 0xeb, 0x5f, 0x9c, 0xc9, 0xe0, + 0xdf, 0x57, 0xaa, 0xd5, 0x15, 0x49, 0x8a, 0x2a, 0xd1, 0x2b, 0x55, 0xe3, + 0x8a, 0xd1, 0xec, 0x72, 0xaf, 0x72, 0xaf, 0x76, 0x45, 0xf4, 0xbd, 0xac, + 0x59, 0xd7, 0x53, 0x5f, 0xe7, 0x34, 0x31, 0xc7, 0x35, 0xf3, 0xe5, 0xcf, + 0x4c, 0xe4, 0xff, 0xf9, 0x01, 0xe6, 0x4f, 0x24, 0x04, 0x64, 0x12, 0x22, + 0x08, 0x88, 0x12, 0x08, 0x8a, 0x12, 0x16, 0x52, 0x02, 0x41, 0x51, 0x46, + 0x26, 0x12, 0x34, 0x08, 0xd2, 0x1e, 0x12, 0xa2, 0x54, 0xf4, 0x52, 0x1d, + 0xb2, 0x6c, 0x57, 0xdb, 0xb2, 0xab, 0x5b, 0x25, 0x97, 0xbb, 0x96, 0x0d, + 0x04, 0xcd, 0x2a, 0x12, 0x92, 0xdc, 0x22, 0x65, 0xb9, 0x6d, 0xb9, 0x5c, + 0x23, 0x4b, 0xbd, 0x6c, 0x8b, 0x65, 0xab, 0xb7, 0x6d, 0x39, 0xce, 0xb1, + 0x8f, 0x3d, 0xb7, 0xb9, 0x5e, 0xe6, 0xb4, 0x1d, 0xcf, 0x7d, 0x38, 0xce, + 0xe9, 0x3c, 0x97, 0xf3, 0x10, 0xb5, 0x1f, 0xec, 0xeb, 0x4e, 0x10, 0xbd, + 0x2c, 0xd2, 0x8d, 0x87, 0x21, 0x14, 0xb5, 0x1d, 0x3c, 0xc3, 0x13, 0x2c, + 0xc9, 0x50, 0xaa, 0xf1, 0xc7, 0xdc, 0x3e, 0xfc, 0x6f, 0x1a, 0xde, 0xfb, + 0x82, 0x59, 0x92, 0x21, 0x1c, 0x45, 0x8e, 0x22, 0x62, 0x4b, 0x96, 0xb9, + 0x74, 0x2f, 0xfc, 0xfe, 0xdf, 0xb4, 0x57, 0x0b, 0x7b, 0xb8, 0x7b, 0x7f, + 0x55, 0xab, 0x6a, 0x8c, 0x18, 0x11, 0x31, 0x22, 0x22, 0x62, 0x8c, 0xd1, + 0xf7, 0xbd, 0xf3, 0xe3, 0xfb, 0x4f, 0xf7, 0x61, 0xe6, 0xa7, 0xef, 0xd7, + 0x7b, 0xbb, 0xbb, 0xd7, 0x18, 0x2d, 0x5a, 0x44, 0x44, 0x44, 0x89, 0x88, + 0x12, 0x25, 0x4a, 0x29, 0xa5, 0xb4, 0x1f, 0xfb, 0x65, 0xdf, 0xdf, 0x42, + 0x96, 0x98, 0x6b, 0xa7, 0x29, 0x0e, 0x8a, 0x88, 0x44, 0x44, 0x88, 0xb3, + 0xfc, 0xcd, 0xd7, 0xbc, 0x6d, 0x99, 0x64, 0xce, 0x0e, 0xdb, 0x3e, 0x6f, + 0xc7, 0x72, 0x04, 0x2a, 0xc8, 0x0a, 0xab, 0xe2, 0x7a, 0x1c, 0x28, 0x09, + 0x24, 0x9b, 0xd4, 0xfe, 0xe4, 0xcf, 0x7d, 0x1d, 0x88, 0xaf, 0x6d, 0xc3, + 0xb6, 0xd8, 0x91, 0x12, 0x48, 0x90, 0x40, 0x4a, 0x25, 0x09, 0xea, 0xdc, + 0xdf, 0xee, 0xdd, 0xfd, 0x98, 0xbe, 0x2f, 0xe9, 0x1c, 0xb6, 0xf5, 0x2f, + 0xbf, 0x31, 0x8a, 0x6e, 0x22, 0x8e, 0x44, 0x22, 0x1c, 0x1c, 0x07, 0x3d, + 0x44, 0xb7, 0x7e, 0x38, 0x7e, 0x6c, 0xf4, 0xab, 0xf2, 0x3c, 0x32, 0xca, + 0x50, 0x90, 0xdd, 0x36, 0x6d, 0xd2, 0xac, 0xbb, 0xe4, 0x2e, 0x85, 0x6f, + 0x27, 0x06, 0xb6, 0x2b, 0x9d, 0xfa, 0xef, 0x36, 0xb2, 0x09, 0x6b, 0x36, + 0xbd, 0x1f, 0x4a, 0xf9, 0xce, 0xd6, 0xd1, 0x00, 0x71, 0xfd, 0x8b, 0x57, + 0x6c, 0xc9, 0xda, 0x4b, 0xcf, 0x56, 0x8f, 0x55, 0xc6, 0xd8, 0x80, 0xe8, + 0xf8, 0x36, 0x6f, 0xbc, 0x54, 0x39, 0x4a, 0x19, 0xde, 0x12, 0xe3, 0x65, + 0x3d, 0x8a, 0xcf, 0x02, 0x1f, 0xfe, 0x01, 0x9a, 0x39, 0xd4, 0x9b, 0x9c, + 0xe5, 0x34, 0xf5, 0x7c, 0xb7, 0x07, 0x8b, 0x2b, 0x2f, 0xdb, 0xf1, 0xb7, + 0xbf, 0x47, 0x35, 0x96, 0x9e, 0xba, 0xa5, 0x7c, 0xe5, 0xc9, 0xdd, 0xca, + 0xf7, 0xb8, 0xeb, 0xc2, 0xbe, 0x57, 0xcd, 0xef, 0x39, 0xee, 0x7c, 0xdd, + 0x72, 0xb4, 0xab, 0xaa, 0x3b, 0x7b, 0xe4, 0xf9, 0xbb, 0xff, 0xc1, 0x7b, + 0xe1, 0xc1, 0x43, 0xd1, 0xab, 0xfb, 0x56, 0x1f, 0x07, 0xcc, 0xb3, 0x25, + 0x3b, 0xb3, 0xaf, 0xce, 0x5a, 0xf4, 0x30, 0x48, 0x9b, 0xe1, 0x26, 0x9a, + 0x6d, 0x71, 0x9c, 0x99, 0x69, 0xa8, 0x04, 0x0c, 0x19, 0x3a, 0xb1, 0xb1, + 0x92, 0x25, 0x9c, 0xb1, 0xb1, 0xe5, 0xa9, 0x44, 0x8d, 0x85, 0x32, 0x6a, + 0xcc, 0x95, 0x61, 0xa3, 0x50, 0x06, 0x8d, 0x99, 0xd2, 0x6f, 0x4c, 0x95, + 0x5e, 0x63, 0xa2, 0x84, 0x8d, 0xb1, 0xd2, 0x6d, 0x8c, 0x5a, 0x02, 0xa3, + 0xff, 0x78, 0x73, 0x12, 0x43, 0x0d, 0x05, 0x24, 0x73, 0x9b, 0xd6, 0x2d, + 0x16, 0xf9, 0x38, 0x0b, 0xf4, 0x17, 0xcd, 0x5f, 0x34, 0x7b, 0x51, 0xfa, + 0xa2, 0xa9, 0x58, 0x1f, 0x62, 0xc4, 0x32, 0xfd, 0xda, 0x34, 0x51, 0xea, + 0xd8, 0x91, 0x3d, 0x39, 0xb0, 0xcf, 0x5b, 0x12, 0x54, 0x22, 0x9e, 0x04, + 0x48, 0x68, 0x3c, 0xee, 0x6c, 0xe9, 0x34, 0xbb, 0x6a, 0xdd, 0x2d, 0x31, + 0x38, 0x37, 0x5a, 0x36, 0x28, 0xd1, 0x91, 0x62, 0xde, 0x1b, 0x9d, 0x3d, + 0x70, 0x9d, 0xc3, 0x6c, 0x1e, 0x05, 0xd8, 0x9a, 0xd3, 0xba, 0x59, 0x7f, + 0xff, 0x39, 0x6e, 0xcd, 0xb9, 0xc3, 0xe5, 0xf6, 0xb3, 0xb7, 0xe6, 0xda, + 0xe1, 0x76, 0x7b, 0xd9, 0xd6, 0x3c, 0x3a, 0x3c, 0x6f, 0xef, 0xbe, 0x35, + 0xef, 0x0e, 0x9f, 0x76, 0xaf, 0xff, 0x1f, 0xdc, 0x79, 0xce, 0xa7, 0xb5, + 0x76, 0x5b, 0x0a, 0xf3, 0x9b, 0xdf, 0x9e, 0xd4, 0xa7, 0xac, 0xef, 0xbd, + 0xad, 0xf1, 0xdf, 0xeb, 0x78, 0x74, 0xf7, 0x1b, 0x8d, 0x58, 0xa2, 0xf3, + 0xa5, 0xc4, 0x2b, 0x02, 0x72, 0x1a, 0x7f, 0x26, 0x8b, 0xf5, 0xb5, 0xd4, + 0xd6, 0x4d, 0xe5, 0xbb, 0x3c, 0x94, 0x28, 0x5d, 0xbb, 0xd7, 0xe2, 0xf9, + 0xdd, 0x2f, 0x3f, 0x78, 0xfc, 0x2e, 0x8f, 0x9c, 0x3a, 0xbc, 0x04, 0xc9, + 0x00, 0xc8, 0x31, 0xc9, 0xa2, 0x29, 0xc1, 0xf9, 0x22, 0x28, 0xf9, 0x50, + 0x36, 0x17, 0x48, 0x95, 0xa6, 0x65, 0x4a, 0xff, 0x0c, 0x41, 0x47, 0xf7, + 0xb0, 0x40, 0x89, 0xf2, 0xf9, 0x25, 0x23, 0x0d, 0x7a, 0x69, 0x17, 0xef, + 0xc7, 0xd2, 0xb6, 0x1d, 0xcc, 0x5d, 0xbe, 0x9d, 0x19, 0x83, 0xeb, 0xb5, + 0xfe, 0xab, 0x47, 0x13, 0x31, 0x68, 0x1c, 0x48, 0x85, 0x40, 0x40, 0xa2, + 0xa2, 0x71, 0x08, 0x34, 0x2d, 0x1a, 0x41, 0x06, 0x18, 0x2a, 0x44, 0x46, + 0x93, 0x40, 0x27, 0xd4, 0xd5, 0xa9, 0xe6, 0x21, 0xd2, 0x36, 0xb6, 0xc7, + 0x1a, 0x88, 0x60, 0x3d, 0xe6, 0xc7, 0x9b, 0xc7, 0x71, 0xb5, 0x55, 0xaa, + 0xc3, 0x8a, 0x58, 0xe2, 0xb9, 0x3a, 0x55, 0xc3, 0xc5, 0x20, 0xcf, 0xba, + 0x24, 0x75, 0x2c, 0x26, 0x84, 0x6a, 0x4b, 0x64, 0x83, 0x44, 0xd4, 0x3b, + 0x99, 0x2b, 0x7f, 0x39, 0x2b, 0xfe, 0xd5, 0x46, 0x54, 0xc5, 0x6a, 0xcc, + 0xa9, 0xc2, 0xb2, 0x25, 0x46, 0x08, 0xb2, 0x6f, 0x03, 0x72, 0xb5, 0x73, + 0x22, 0xce, 0xf6, 0x00, 0x37, 0xd5, 0x41, 0x78, 0x11, 0x73, 0xa8, 0x9e, + 0xc8, 0x37, 0x72, 0xb8, 0x9d, 0x71, 0x38, 0x84, 0xa9, 0x02, 0x68, 0x84, + 0x53, 0x91, 0xee, 0x0a, 0xb8, 0x83, 0x89, 0x3b, 0xe5, 0x3b, 0x0d, 0xc5, + 0x28, 0x62, 0x89, 0x09, 0x50, 0xdb, 0x9b, 0x01, 0x27, 0xdd, 0xb6, 0x05, + 0x4f, 0x2e, 0x83, 0x36, 0x6a, 0x28, 0x6c, 0x81, 0xa4, 0x1c, 0xa9, 0x5f, + 0x91, 0xfe, 0xdf, 0xc9, 0x01, 0xf4, 0xe3, 0x25, 0x0e, 0x0b, 0xee, 0x47, + 0x89, 0x4c, 0x24, 0x10, 0x81, 0x3d, 0xd3, 0x5d, 0x52, 0x6a, 0x9f, 0xf6, + 0x43, 0xcd, 0x91, 0xe6, 0x02, 0x2d, 0xb2, 0x7e, 0x6d, 0x1a, 0x74, 0x62, + 0x05, 0x72, 0x16, 0x50, 0xa1, 0x64, 0x3d, 0x8a, 0x32, 0x16, 0x69, 0x23, + 0x38, 0x57, 0x66, 0xaf, 0x66, 0x47, 0x48, 0x3e, 0x43, 0xfb, 0xd9, 0xdf, + 0x35, 0x42, 0xde, 0x84, 0x4a, 0xd8, 0x38, 0xe9, 0xb7, 0x3d, 0x43, 0x80, + 0xa6, 0x22, 0x52, 0xb1, 0xba, 0x46, 0x1c, 0x8f, 0xb0, 0x93, 0x23, 0xb1, + 0xcc, 0x39, 0x48, 0x2a, 0x0c, 0xc7, 0xd6, 0x26, 0x54, 0xdd, 0x4f, 0x8c, + 0x08, 0xaf, 0x88, 0x4a, 0x07, 0xf3, 0x77, 0xb3, 0xd2, 0xbf, 0x26, 0x72, + 0x58, 0xb4, 0xcf, 0x63, 0x65, 0x47, 0x34, 0xd7, 0x4c, 0xc2, 0x9c, 0x2d, + 0xf1, 0xcd, 0x02, 0x01, 0x4d, 0x49, 0xcb, 0xe9, 0x9e, 0x94, 0xfa, 0x27, + 0x32, 0xb6, 0x9a, 0xb2, 0x95, 0xe8, 0x95, 0x7b, 0xb6, 0x8e, 0x3b, 0x05, + 0x05, 0xef, 0x79, 0xea, 0x3d, 0xf5, 0xfd, 0xbc, 0xfc, 0x09, 0x15, 0x24, + 0x02, 0xac, 0xfd, 0x9b, 0xe0, 0xab, 0x23, 0x4f, 0xa8, 0xd9, 0x90, 0xbc, + 0xb4, 0xdf, 0xc4, 0xe3, 0x62, 0x82, 0xd8, 0xd8, 0x50, 0x4f, 0x91, 0x74, + 0x5d, 0xb5, 0x73, 0xbc, 0x35, 0xa0, 0xff, 0xea, 0x6c, 0x31, 0x21, 0xc4, + 0x58, 0x61, 0x76, 0x23, 0xcc, 0x31, 0xb3, 0xde, 0xc5, 0x37, 0xf7, 0xcc, + 0xce, 0xbd, 0xbc, 0x3f, 0x97, 0x67, 0x03, 0xa8, 0x11, 0x9f, 0x7d, 0x2f, + 0x72, 0x95, 0x80, 0xc3, 0x0c, 0xa3, 0x6d, 0x05, 0xcb, 0x3c, 0x11, 0x37, + 0x36, 0x58, 0x4c, 0x0c, 0x58, 0xfb, 0x26, 0xbd, 0x96, 0x07, 0xb0, 0x91, + 0x92, 0x9b, 0x6c, 0x5d, 0x0c, 0x83, 0x2e, 0xef, 0x5f, 0xec, 0xb5, 0xd5, + 0xee, 0xc7, 0xad, 0xfc, 0xf8, 0x4c, 0xb8, 0x00, 0x6c, 0x18, 0xd3, 0x7e, + 0x14, 0x05, 0x24, 0xdc, 0x9d, 0x9d, 0xce, 0xab, 0xe4, 0x39, 0x70, 0x8b, + 0xb2, 0xca, 0x50, 0x26, 0x1a, 0xfd, 0xef, 0x2a, 0x95, 0xec, 0x14, 0xcd, + 0x6f, 0x90, 0xe7, 0x58, 0x1e, 0x4c, 0x6e, 0xd8, 0xef, 0xce, 0x44, 0x69, + 0x0e, 0x6a, 0x5e, 0x14, 0x17, 0xe5, 0xee, 0xf5, 0x59, 0xb6, 0x1b, 0x44, + 0x00, 0xd9, 0xf0, 0x26, 0x98, 0x26, 0x2f, 0x61, 0xd9, 0x1d, 0xae, 0xc8, + 0xe0, 0xcf, 0x1d, 0xab, 0xb3, 0xca, 0x54, 0x79, 0x94, 0x75, 0x2c, 0xb0, + 0xae, 0x5b, 0x48, 0xb6, 0x82, 0x56, 0x6f, 0xd9, 0xf9, 0xb2, 0xc2, 0x4b, + 0xf2, 0xba, 0xfc, 0x27, 0x1b, 0x6e, 0x66, 0x79, 0xc6, 0x96, 0x36, 0xfb, + 0xad, 0x3d, 0x1b, 0x93, 0x58, 0x36, 0x92, 0xd5, 0x68, 0xdb, 0xe7, 0xfe, + 0x88, 0x53, 0xae, 0xe1, 0xae, 0xbc, 0xd3, 0x7d, 0x99, 0x59, 0x16, 0xe1, + 0x38, 0xcb, 0x47, 0x06, 0x30, 0x6c, 0xdc, 0x35, 0xff, 0x3e, 0xa4, 0xef, + 0x32, 0x0a, 0xaa, 0x4c, 0xfc, 0x0f, 0xb1, 0x24, 0x30, 0xe1, 0xbc, 0x7c, + 0x5b, 0x07, 0x56, 0xf2, 0x21, 0x2b, 0xbb, 0x85, 0x2e, 0xaf, 0xb4, 0x15, + 0x2d, 0x7d, 0x5b, 0x60, 0x8e, 0x7b, 0x66, 0xa7, 0xd6, 0x15, 0x9f, 0x81, + 0xe1, 0xb9, 0xa2, 0x49, 0x18, 0x83, 0x3f, 0x63, 0xe7, 0xa1, 0x8c, 0x60, + 0x0b, 0xee, 0x37, 0x9a, 0x15, 0x42, 0x49, 0x4c, 0x83, 0x2b, 0xdc, 0x03, + 0x1d, 0xb1, 0x22, 0x6b, 0x0b, 0x8f, 0xa5, 0x59, 0x65, 0x98, 0xc8, 0xa4, + 0x9e, 0xa9, 0xb9, 0x1e, 0x24, 0x07, 0x31, 0xfc, 0x71, 0x39, 0x9a, 0xcb, + 0x8d, 0x76, 0x31, 0xd8, 0x96, 0xef, 0x2c, 0x88, 0x95, 0xfc, 0x0a, 0x10, + 0x51, 0xe0, 0xd8, 0x3f, 0x3f, 0xd0, 0x64, 0x57, 0x05, 0x67, 0xca, 0x16, + 0x77, 0xd6, 0xde, 0x62, 0xfa, 0xae, 0xff, 0x57, 0xd0, 0xb2, 0x77, 0x4d, + 0x02, 0x5c, 0x73, 0x6b, 0x5e, 0x20, 0xbc, 0xc9, 0xf6, 0x38, 0x97, 0x94, + 0xaf, 0x89, 0xd5, 0xc5, 0xcc, 0x14, 0xf7, 0x7b, 0x8e, 0xad, 0xbd, 0xd2, + 0xaa, 0x78, 0xb7, 0x2d, 0xfe, 0xc5, 0xd8, 0x9a, 0x90, 0x8e, 0x9a, 0x0b, + 0x62, 0xa2, 0x9e, 0xc4, 0xb3, 0x2d, 0x0b, 0xf9, 0x60, 0x19, 0xe6, 0xba, + 0xdf, 0x10, 0x7d, 0xa0, 0xd7, 0x8d, 0x9f, 0x4b, 0x07, 0xe0, 0x51, 0xcf, + 0xe7, 0x68, 0x35, 0xbb, 0x2a, 0x30, 0x76, 0x33, 0x37, 0x1b, 0x07, 0xbf, + 0x28, 0xe2, 0x3b, 0x9f, 0xce, 0x4a, 0x68, 0x73, 0x6f, 0xde, 0x38, 0x96, + 0xfb, 0x37, 0x72, 0x9e, 0xff, 0x5d, 0x76, 0x86, 0x22, 0x58, 0x27, 0x8b, + 0x7a, 0x6f, 0x2b, 0x26, 0x73, 0x9d, 0xc9, 0x07, 0x99, 0x98, 0xb4, 0xb3, + 0xeb, 0x6e, 0x82, 0xe5, 0x21, 0xf1, 0x29, 0x65, 0xac, 0xc4, 0xab, 0x47, + 0x8b, 0xb5, 0x91, 0xa4, 0xfa, 0x5c, 0xb2, 0x9f, 0xf1, 0x76, 0xbb, 0x97, + 0xd6, 0xda, 0xc5, 0x04, 0xe4, 0x20, 0xe7, 0xa9, 0xe6, 0x35, 0xda, 0xa6, + 0xf6, 0x8d, 0x6c, 0xb6, 0xd7, 0xad, 0xf7, 0xb9, 0x3c, 0x00, 0x19, 0xbe, + 0x47, 0x83, 0xe3, 0xbb, 0x1c, 0x99, 0x1a, 0x2e, 0x31, 0x90, 0x61, 0x10, + 0x15, 0x2e, 0x61, 0x18, 0x4a, 0x3b, 0xf1, 0x50, 0x95, 0xb5, 0xcc, 0xab, + 0x2d, 0xd8, 0xf6, 0x56, 0x54, 0x33, 0xb9, 0x27, 0x97, 0x14, 0x2a, 0x51, + 0x36, 0xaf, 0x48, 0x30, 0x52, 0x3b, 0xd9, 0x5b, 0xae, 0x22, 0xfc, 0x92, + 0x03, 0x52, 0x7f, 0xab, 0xf6, 0x06, 0x70, 0xb2, 0x9f, 0x66, 0x35, 0x59, + 0x4a, 0xfb, 0x60, 0x87, 0xb6, 0xb9, 0x0b, 0x5b, 0x6f, 0x73, 0x51, 0x0e, + 0x6e, 0x39, 0x9c, 0xe5, 0x08, 0x57, 0x88, 0x01, 0x88, 0xe9, 0xf3, 0x90, + 0x9c, 0x50, 0xe5, 0xe6, 0xf8, 0x25, 0xd9, 0xf9, 0xc6, 0x03, 0x1e, 0xf3, + 0xb0, 0x16, 0xf8, 0xb4, 0x86, 0x87, 0x34, 0x24, 0x2b, 0x2c, 0x2d, 0x30, + 0x88, 0xdc, 0x14, 0x23, 0x02, 0xd1, 0x5b, 0xc5, 0xf9, 0x25, 0xaa, 0x76, + 0x82, 0x91, 0x32, 0xc9, 0x2c, 0xfa, 0x93, 0xc4, 0xd8, 0xe7, 0x51, 0x87, + 0xe0, 0x76, 0x13, 0xf6, 0x51, 0x32, 0x4e, 0x7a, 0x37, 0x87, 0x9e, 0x43, + 0xd0, 0x50, 0x77, 0x3e, 0x0c, 0x6b, 0x5d, 0xc7, 0x6f, 0x37, 0x67, 0x9c, + 0x83, 0x6b, 0x5e, 0xa1, 0x91, 0x6a, 0xff, 0x5e, 0xf2, 0xfd, 0x68, 0x60, + 0x55, 0xbc, 0xeb, 0x9a, 0x5a, 0x3d, 0x18, 0x30, 0x9e, 0x5d, 0x75, 0x5f, + 0x9c, 0x3d, 0xc6, 0x51, 0x5a, 0xf7, 0x75, 0xb5, 0xb9, 0x1f, 0x65, 0x50, + 0x6d, 0x17, 0xfc, 0xbf, 0xca, 0x6b, 0xbc, 0x58, 0x0e, 0xe2, 0x69, 0xf2, + 0x7e, 0x5e, 0x6f, 0x36, 0x75, 0xde, 0xe0, 0x3a, 0xfe, 0x54, 0x67, 0xac, + 0x39, 0x8f, 0xcd, 0xea, 0x11, 0x00, 0x50, 0x47, 0xa6, 0x36, 0xb9, 0xd1, + 0x60, 0xe5, 0x6e, 0x53, 0xa3, 0x64, 0x9b, 0x9b, 0x54, 0x85, 0xa1, 0x11, + 0x89, 0xc3, 0x86, 0xc7, 0xee, 0x02, 0x31, 0xae, 0xc6, 0xb8, 0x95, 0xec, + 0xa4, 0x69, 0x77, 0x63, 0xb6, 0x88, 0xa4, 0xe4, 0x06, 0x2f, 0xd2, 0x64, + 0x03, 0x54, 0x57, 0x5f, 0x63, 0x59, 0xde, 0x9e, 0xc7, 0x5c, 0xc9, 0x42, + 0xf1, 0xc8, 0xdc, 0x2e, 0x9f, 0x59, 0xb6, 0x6b, 0x4c, 0xfb, 0x28, 0xbb, + 0x8a, 0x34, 0x4b, 0x91, 0x2b, 0xcb, 0x87, 0x33, 0x4b, 0xdb, 0x87, 0x33, + 0x4d, 0xeb, 0x87, 0x33, 0x49, 0x4b, 0x6b, 0xdc, 0x3f, 0x45, 0x86, 0x8d, + 0xdf, 0x08, 0xeb, 0x64, 0x37, 0x56, 0xd2, 0xcb, 0xe2, 0x5c, 0x65, 0xb5, + 0x6e, 0xcf, 0x22, 0xc1, 0x5d, 0x5f, 0x5b, 0x8b, 0x35, 0xe5, 0xb0, 0x67, + 0x57, 0xa0, 0xab, 0x5d, 0x36, 0xdb, 0xf6, 0xc9, 0x01, 0xb6, 0xa7, 0x9b, + 0xbc, 0x97, 0x55, 0x01, 0xc1, 0x70, 0xd9, 0x6c, 0xe0, 0x58, 0x2f, 0xcc, + 0x3a, 0x0b, 0xa7, 0x90, 0x89, 0xea, 0x2c, 0x17, 0x52, 0xcc, 0xba, 0xf4, + 0x01, 0x56, 0x96, 0xe8, 0xc9, 0x93, 0xf7, 0x21, 0x6a, 0xe6, 0x75, 0x22, + 0x76, 0x11, 0x19, 0x87, 0x3d, 0xc8, 0x7a, 0x4d, 0x9a, 0x5a, 0x60, 0x70, + 0x77, 0xb0, 0x2e, 0xdd, 0x5a, 0xe4, 0x4c, 0xa1, 0x07, 0xf7, 0xc4, 0x80, + 0x8c, 0x8d, 0x68, 0x18, 0x10, 0x2f, 0x9b, 0x5d, 0x35, 0x19, 0xf5, 0x49, + 0xe1, 0x82, 0x81, 0x3f, 0x9e, 0x48, 0x3c, 0x00, 0x3c, 0x77, 0x7f, 0xf9, + 0xa0, 0xe4, 0xe9, 0x94, 0x5c, 0x48, 0xa7, 0x1e, 0xa5, 0xce, 0xaa, 0x3e, + 0xcf, 0xc3, 0x71, 0x46, 0x84, 0xf3, 0x18, 0x77, 0x89, 0x69, 0x47, 0xf7, + 0xcb, 0x26, 0x8f, 0xf5, 0x43, 0x85, 0xf5, 0x97, 0x0c, 0x66, 0x60, 0x6f, + 0x53, 0x27, 0x01, 0x36, 0x5b, 0xc1, 0x0a, 0x5f, 0xaf, 0xdb, 0x08, 0xd2, + 0x2d, 0x13, 0x19, 0x96, 0xcb, 0x25, 0x98, 0x43, 0x2e, 0x27, 0x53, 0x5a, + 0x2e, 0xc7, 0xfe, 0x42, 0x4d, 0xd9, 0x3e, 0x9f, 0xb7, 0x76, 0x52, 0xa4, + 0x1b, 0x54, 0xf7, 0x8c, 0x1c, 0x35, 0x54, 0x69, 0x90, 0x83, 0x22, 0x0c, + 0x2e, 0xaa, 0x4c, 0x24, 0x0f, 0x7c, 0xbb, 0x45, 0xb3, 0x8c, 0x89, 0x8d, + 0xab, 0x3b, 0x61, 0x72, 0xfa, 0xdf, 0x97, 0xcb, 0xdd, 0x09, 0x40, 0xb6, + 0x89, 0x8f, 0x0c, 0xcb, 0x77, 0x87, 0xb0, 0x79, 0x23, 0x5b, 0x69, 0xa9, + 0xb7, 0x95, 0xf1, 0x90, 0xc3, 0x59, 0xf3, 0x86, 0xa6, 0x46, 0x0c, 0xf1, + 0x4e, 0x02, 0xa4, 0x42, 0x92, 0x36, 0xef, 0xa8, 0xbb, 0xaa, 0x9d, 0x58, + 0x4f, 0x28, 0xf7, 0x4f, 0xad, 0xf7, 0x2c, 0x0f, 0xc6, 0xbb, 0x8c, 0xa4, + 0xc2, 0x9a, 0xeb, 0x77, 0xbf, 0xe4, 0x62, 0x47, 0xcf, 0x3f, 0x78, 0xed, + 0x7b, 0xbc, 0xfa, 0x7b, 0xa0, 0x3c, 0x90, 0xc9, 0x01, 0x50, 0x24, 0x69, + 0xaa, 0x68, 0x36, 0x44, 0x99, 0x0f, 0xc1, 0xc4, 0x88, 0xd8, 0x92, 0xda, + 0xac, 0x4c, 0xe1, 0x97, 0x64, 0x53, 0xd5, 0x7b, 0x10, 0xb6, 0x15, 0x08, + 0x97, 0xcf, 0x2b, 0x52, 0x36, 0x5c, 0x33, 0xd1, 0x4b, 0xae, 0x32, 0xee, + 0xff, 0x93, 0x32, 0x19, 0x39, 0xb9, 0xad, 0xb2, 0x67, 0xc0, 0x17, 0x67, + 0xc0, 0x42, 0x41, 0x3d, 0xdf, 0x83, 0x8c, 0x60, 0x42, 0xca, 0xe7, 0x34, + 0x5b, 0xc7, 0xba, 0x3e, 0x41, 0x1e, 0xa5, 0x35, 0x37, 0xba, 0x06, 0xe4, + 0x6a, 0x4b, 0xf4, 0x94, 0x76, 0xbb, 0xb9, 0x30, 0xd9, 0xdc, 0xde, 0x72, + 0xf8, 0x5c, 0x53, 0xe3, 0x61, 0x38, 0xee, 0xf7, 0x5f, 0x86, 0x3a, 0xfc, + 0xb4, 0xbf, 0xa9, 0xab, 0x89, 0x7f, 0x40, 0x19, 0x1c, 0xaf, 0x99, 0x8b, + 0x6f, 0x97, 0xe2, 0xaa, 0x6c, 0x82, 0x14, 0xf3, 0x18, 0x20, 0xea, 0xa1, + 0xcb, 0x99, 0xb9, 0x9d, 0xba, 0xb6, 0x7d, 0x2f, 0x88, 0x47, 0xad, 0xdc, + 0xa2, 0x87, 0x55, 0x27, 0x68, 0x45, 0x0a, 0x72, 0x2c, 0x79, 0x89, 0x74, + 0xd0, 0x20, 0x2a, 0x44, 0x58, 0xf8, 0x49, 0x62, 0xac, 0x57, 0xda, 0x29, + 0xf5, 0xec, 0x27, 0xdc, 0x2d, 0x5d, 0x92, 0x9a, 0xb0, 0x9a, 0xbe, 0xa4, + 0x93, 0x9f, 0x61, 0xaa, 0x56, 0x0e, 0x12, 0xaa, 0x93, 0x8b, 0x65, 0xd5, + 0xea, 0x43, 0x5e, 0x1b, 0x36, 0x38, 0x5e, 0x08, 0x1f, 0x15, 0x89, 0x3b, + 0xb1, 0x72, 0x4b, 0x98, 0x78, 0xcd, 0x30, 0x69, 0x75, 0xaf, 0x05, 0x64, + 0x33, 0x8f, 0x55, 0x28, 0xe2, 0x43, 0x09, 0x8f, 0x0a, 0x1c, 0x0d, 0x88, + 0x8c, 0xe4, 0x14, 0x44, 0xe2, 0x85, 0x60, 0x9c, 0x38, 0xd4, 0x1b, 0x37, + 0xef, 0x6f, 0x99, 0x58, 0xab, 0x92, 0x79, 0x94, 0xe0, 0x76, 0xc5, 0xf4, + 0xda, 0xd9, 0xfa, 0x44, 0x29, 0xba, 0xdd, 0x98, 0xb2, 0x7f, 0x14, 0x20, + 0x82, 0xc4, 0xba, 0x93, 0x47, 0x06, 0xd1, 0x48, 0x74, 0xfb, 0x35, 0xf4, + 0xbe, 0x14, 0xa4, 0xb2, 0x37, 0xaa, 0x6b, 0x41, 0x84, 0x3f, 0x65, 0x90, + 0x85, 0x75, 0x38, 0xf6, 0xeb, 0xe7, 0x9f, 0x73, 0xa8, 0x6d, 0x23, 0xae, + 0xa5, 0xb1, 0xe5, 0x24, 0x34, 0xc5, 0x89, 0xd7, 0x8a, 0xe0, 0xc0, 0xfc, + 0xbf, 0x4e, 0x7b, 0x8c, 0x69, 0x5c, 0xcc, 0xc8, 0x27, 0x24, 0xc9, 0x09, + 0xae, 0x82, 0x1b, 0xb5, 0xc2, 0xe3, 0xe4, 0xee, 0xbd, 0xe1, 0xf0, 0xad, + 0xa1, 0x95, 0x7a, 0xa2, 0xa3, 0xea, 0x23, 0x43, 0xbf, 0xd2, 0xb6, 0x5b, + 0x9e, 0x8c, 0x47, 0x88, 0xf6, 0x4d, 0xc1, 0xb4, 0xc7, 0x70, 0x2e, 0x25, + 0x3a, 0x9e, 0x2e, 0xee, 0xc1, 0xdc, 0x7e, 0x63, 0x4f, 0x55, 0x31, 0x6a, + 0xac, 0xd2, 0xbb, 0x85, 0x33, 0x36, 0x1e, 0xe4, 0x06, 0x5c, 0x33, 0xe3, + 0x36, 0x80, 0xbe, 0xfb, 0xb9, 0x71, 0x28, 0x4a, 0xf2, 0x68, 0x67, 0xe6, + 0xd1, 0x27, 0xf6, 0x47, 0x06, 0xa0, 0x16, 0xe5, 0x59, 0xa7, 0xfe, 0x9e, + 0x62, 0x99, 0xb4, 0xf0, 0x6d, 0x6e, 0x1d, 0x1d, 0x13, 0xaf, 0xc0, 0x0a, + 0x61, 0x22, 0x26, 0xdf, 0xcc, 0x74, 0x0b, 0x07, 0x52, 0xe2, 0x11, 0xfa, + 0x1c, 0x69, 0xdd, 0xe3, 0x3d, 0x46, 0xc9, 0x93, 0x77, 0x67, 0x1e, 0x80, + 0x15, 0xaa, 0x76, 0x5c, 0xec, 0x09, 0x0f, 0xf1, 0x70, 0x5a, 0x08, 0xea, + 0xbe, 0xb2, 0x7e, 0x31, 0xe2, 0xb4, 0x82, 0x27, 0x58, 0x1f, 0x36, 0x8a, + 0x95, 0xa1, 0xa5, 0x12, 0x3f, 0x7f, 0xa8, 0x62, 0xa8, 0xe5, 0xc5, 0xd5, + 0xe6, 0xba, 0x04, 0x2d, 0x58, 0x67, 0x8d, 0x3e, 0xed, 0x4b, 0x2c, 0x8d, + 0xe5, 0x8c, 0x9e, 0xd0, 0x7b, 0x98, 0x6d, 0x0a, 0xa3, 0x82, 0xbc, 0x12, + 0x0e, 0x99, 0xcc, 0xb3, 0x5d, 0x9a, 0xfb, 0x12, 0x0e, 0xcc, 0x0b, 0x5b, + 0xc0, 0x8b, 0xac, 0x6f, 0x4c, 0xb4, 0xf4, 0xc2, 0x59, 0x53, 0xb6, 0x15, + 0x7b, 0x6a, 0xbb, 0x7e, 0x14, 0xaa, 0x8b, 0x37, 0x8c, 0xa8, 0xc5, 0x8c, + 0x5e, 0x57, 0xbe, 0x18, 0xc5, 0xe0, 0xe2, 0x7a, 0x50, 0xe3, 0xdd, 0x88, + 0x78, 0xf9, 0xba, 0x73, 0x3c, 0xda, 0x14, 0xf3, 0x11, 0x4f, 0xef, 0x41, + 0x28, 0xf7, 0x46, 0x7a, 0x79, 0x7f, 0xcf, 0x35, 0x8e, 0x7b, 0x96, 0x8b, + 0x08, 0xca, 0x2e, 0xdd, 0xbc, 0x27, 0x58, 0x64, 0xe6, 0xc7, 0xdc, 0x72, + 0xbe, 0x8c, 0xe4, 0xa6, 0x98, 0xbe, 0xf2, 0x49, 0x28, 0xf0, 0xfb, 0x0d, + 0x20, 0xbd, 0xd9, 0xac, 0x51, 0x8b, 0x69, 0xe3, 0xc2, 0x73, 0x18, 0xad, + 0xb0, 0xc0, 0xfb, 0x97, 0x40, 0x11, 0x8f, 0x60, 0xc5, 0x53, 0x20, 0xb2, + 0x50, 0x0f, 0x3d, 0x49, 0xf7, 0x1a, 0xfa, 0xdf, 0x54, 0xaf, 0xe3, 0xdd, + 0xa6, 0x13, 0x63, 0x1c, 0x29, 0x3b, 0x11, 0xef, 0x56, 0xc6, 0x4c, 0x76, + 0xe7, 0x79, 0x22, 0x26, 0xcb, 0x48, 0xc3, 0x71, 0x6f, 0x00, 0x0e, 0xfe, + 0x29, 0x95, 0x1b, 0x6f, 0xd0, 0x3a, 0xa1, 0xd8, 0x78, 0x88, 0xef, 0x3d, + 0x0d, 0xcc, 0x02, 0xfa, 0xbe, 0x6e, 0xf6, 0x08, 0x72, 0x76, 0xeb, 0x27, + 0xb4, 0xf3, 0xbb, 0xb3, 0x7c, 0xc7, 0xb1, 0xb9, 0x4a, 0x99, 0x32, 0xdd, + 0x26, 0x1e, 0x40, 0x5e, 0x7d, 0x01, 0xec, 0x3b, 0xe8, 0xc3, 0x2f, 0x7b, + 0x02, 0x10, 0xdb, 0x55, 0x3a, 0x1f, 0xad, 0xcf, 0x63, 0xb7, 0x1b, 0x00, + 0x96, 0xa6, 0x6d, 0x3e, 0x4c, 0xf4, 0x77, 0x9f, 0xa1, 0xb4, 0xc5, 0xf4, + 0x51, 0xbd, 0x7b, 0x53, 0xd3, 0xf5, 0x49, 0x2a, 0x39, 0xa0, 0xcd, 0x08, + 0xbe, 0x73, 0xfc, 0x45, 0xe2, 0x48, 0xa9, 0x9a, 0xb8, 0x1f, 0x75, 0x65, + 0x54, 0x6d, 0xef, 0x21, 0x86, 0x99, 0xaf, 0xce, 0xef, 0xc1, 0xcd, 0x2e, + 0xa8, 0x08, 0x55, 0xb3, 0xe6, 0x48, 0x4b, 0x36, 0xb8, 0x38, 0x33, 0x65, + 0xdf, 0x46, 0x9e, 0xc1, 0xb8, 0xe1, 0x16, 0xed, 0x26, 0xdd, 0x31, 0xd2, + 0x43, 0xaf, 0x62, 0xb9, 0xb9, 0xa7, 0x27, 0x56, 0x71, 0xec, 0xab, 0x54, + 0xbf, 0x9c, 0x5b, 0x07, 0xa5, 0xd1, 0x5c, 0x0f, 0x52, 0x7d, 0x3e, 0xb9, + 0x57, 0x17, 0xf6, 0x76, 0x53, 0xe5, 0xcc, 0xe7, 0x7a, 0x68, 0x0a, 0x93, + 0xe6, 0xc9, 0xd3, 0x50, 0xa3, 0x56, 0xf9, 0xa3, 0xfc, 0x97, 0xe0, 0x8a, + 0x36, 0x32, 0xc2, 0x43, 0x1a, 0xdc, 0xcd, 0x0b, 0x45, 0x80, 0x89, 0x2b, + 0xbe, 0x48, 0x6e, 0x84, 0x79, 0x39, 0x81, 0x76, 0xf9, 0xe3, 0x88, 0xdd, + 0x22, 0xf7, 0x22, 0xf8, 0xe5, 0x57, 0x9f, 0x4a, 0xcc, 0x78, 0xe2, 0xff, + 0x87, 0x8d, 0x06, 0xdc, 0x3d, 0x86, 0xac, 0x73, 0xc0, 0xfa, 0xc5, 0xc7, + 0x7d, 0xca, 0x69, 0x3c, 0x82, 0xe5, 0xfd, 0x7f, 0xad, 0xa2, 0x06, 0xf4, + 0xa0, 0xa7, 0x65, 0x7d, 0xae, 0x60, 0x6d, 0x9f, 0xbe, 0x65, 0x6c, 0x97, + 0xab, 0xee, 0x79, 0x91, 0x06, 0xd0, 0x80, 0x91, 0x94, 0x10, 0xa0, 0x2d, + 0xa7, 0x6e, 0x67, 0x4a, 0x61, 0xd2, 0xaa, 0xc6, 0xdc, 0xd4, 0xde, 0xbd, + 0xa8, 0x48, 0x24, 0x51, 0x2c, 0x2b, 0xde, 0x5b, 0x79, 0x72, 0x92, 0xf6, + 0xdb, 0x9f, 0x7c, 0x78, 0x1b, 0x17, 0x39, 0x78, 0xf8, 0xe8, 0x71, 0xf6, + 0x6a, 0x1b, 0xd5, 0x44, 0xac, 0x07, 0x7b, 0x8b, 0xb9, 0x61, 0x60, 0x83, + 0x0c, 0xc7, 0xd5, 0xd1, 0x2a, 0xe3, 0xad, 0x65, 0xe5, 0x4a, 0x62, 0x55, + 0x14, 0xc1, 0xd6, 0x6d, 0xb6, 0xa7, 0xc0, 0xb6, 0x59, 0xc2, 0xe6, 0x2c, + 0x5e, 0xac, 0x34, 0x37, 0xa8, 0x50, 0x08, 0x8f, 0x25, 0x92, 0xa3, 0xb1, + 0x6a, 0xf8, 0x35, 0xee, 0x30, 0x35, 0x62, 0x56, 0x81, 0x47, 0x6e, 0xa9, + 0x51, 0x12, 0xc9, 0x6d, 0x07, 0x42, 0x28, 0xfa, 0x59, 0xd3, 0x8f, 0x62, + 0x64, 0x04, 0x7d, 0x51, 0x73, 0xb6, 0x23, 0x51, 0xeb, 0x9f, 0x25, 0x86, + 0x8e, 0xa3, 0x6e, 0x96, 0xa6, 0x62, 0x36, 0xd7, 0x8f, 0xec, 0x8d, 0x08, + 0xc8, 0x3f, 0xd6, 0xa8, 0xa1, 0xbc, 0x45, 0x4b, 0x9c, 0x92, 0xb6, 0x38, + 0x82, 0x90, 0x22, 0x69, 0x6c, 0xae, 0x8e, 0x10, 0x2b, 0xb2, 0xb4, 0x34, + 0xf8, 0xfa, 0x48, 0xbe, 0x88, 0x1d, 0xe7, 0x51, 0x98, 0xc8, 0xb0, 0x38, + 0x27, 0x34, 0x05, 0xcf, 0xa8, 0x8c, 0x14, 0x00, 0xa2, 0x2e, 0x3e, 0x8a, + 0xe1, 0x8f, 0x51, 0x5d, 0x31, 0xa1, 0xc4, 0x6a, 0x43, 0xf9, 0x93, 0x02, + 0x6b, 0xcd, 0xbb, 0x1a, 0x7d, 0x41, 0xdc, 0xcd, 0x9a, 0xad, 0x24, 0x94, + 0xd2, 0x52, 0x67, 0x15, 0x54, 0x44, 0x67, 0x97, 0x6d, 0x05, 0x3f, 0x44, + 0xd2, 0x09, 0xfa, 0x6d, 0x8a, 0xf9, 0x68, 0x86, 0x97, 0xb6, 0x1e, 0x48, + 0xbb, 0x39, 0xd5, 0x70, 0xd6, 0x51, 0x8e, 0xf2, 0x72, 0xbf, 0xf7, 0x46, + 0xc4, 0x8c, 0x5d, 0x98, 0x51, 0x4a, 0xf8, 0x44, 0x5c, 0xd7, 0x42, 0x51, + 0xc6, 0x43, 0x4e, 0x27, 0x03, 0xa8, 0x1d, 0x3b, 0xc1, 0x75, 0x0c, 0xe3, + 0x2a, 0x7b, 0x96, 0x0c, 0x59, 0xf5, 0xa0, 0x62, 0xcb, 0xd9, 0x3e, 0x5c, + 0x7f, 0xbb, 0x8b, 0x5b, 0x18, 0x07, 0x52, 0xe1, 0xe0, 0xb8, 0xbc, 0xd5, + 0x39, 0x29, 0x8c, 0x58, 0x98, 0xef, 0xb3, 0x33, 0x0f, 0x2c, 0xac, 0x87, + 0xe7, 0xf6, 0x42, 0x7f, 0x4f, 0x0c, 0x0e, 0xb7, 0x77, 0x65, 0x54, 0x51, + 0xaf, 0x59, 0xce, 0xf3, 0x3b, 0x8e, 0x4b, 0x52, 0x28, 0xf6, 0xe3, 0x7d, + 0xe1, 0xee, 0xf0, 0x3d, 0x01, 0x80, 0x77, 0xaf, 0x8f, 0xad, 0x40, 0xb1, + 0xc0, 0x16, 0x31, 0xf9, 0x3b, 0xb6, 0x92, 0x0d, 0xa2, 0x03, 0xf3, 0x70, + 0x80, 0x9a, 0x95, 0x20, 0x4f, 0x67, 0x5b, 0x2b, 0x3d, 0x8e, 0xb1, 0x14, + 0x65, 0xeb, 0xf8, 0x96, 0xb8, 0xbb, 0xd4, 0x5f, 0xb0, 0x7c, 0x60, 0x0e, + 0x8b, 0x44, 0x04, 0xa5, 0xa8, 0x5d, 0x85, 0xe8, 0x99, 0x5a, 0xee, 0x8f, + 0x5e, 0x7b, 0x0c, 0x72, 0xde, 0x6b, 0x9a, 0x24, 0x79, 0x6b, 0x12, 0xbb, + 0x08, 0xc4, 0x2f, 0xb6, 0xc3, 0x55, 0xd5, 0xbb, 0xc1, 0xc8, 0xab, 0x93, + 0xa6, 0x8f, 0xa9, 0x48, 0x93, 0x67, 0x5a, 0x9d, 0xa6, 0x99, 0x37, 0x4a, + 0x58, 0x61, 0x08, 0x04, 0xb8, 0xdf, 0x4b, 0xb8, 0x37, 0xc6, 0x71, 0xcf, + 0x48, 0x47, 0x0a, 0x28, 0xf8, 0xc6, 0x0c, 0x01, 0xea, 0xa8, 0xd7, 0xfd, + 0x48, 0x01, 0x3b, 0xdf, 0x0e, 0x80, 0xb1, 0x11, 0x26, 0x6c, 0xf6, 0x7a, + 0xb5, 0xba, 0x5a, 0x70, 0x7b, 0x4b, 0xf3, 0x01, 0x18, 0x7b, 0x70, 0x11, + 0xa0, 0x1c, 0xf5, 0x85, 0xca, 0xa4, 0x05, 0xae, 0x76, 0x87, 0xd4, 0x28, + 0x1b, 0xa2, 0x73, 0x32, 0x7a, 0xde, 0xa6, 0x51, 0xc0, 0x6c, 0x18, 0xf2, + 0x67, 0xd1, 0xad, 0xd2, 0x3c, 0xde, 0x10, 0xce, 0x90, 0xd9, 0x9a, 0xcb, + 0x97, 0xea, 0x74, 0xb2, 0xe7, 0xbf, 0x32, 0x05, 0xd0, 0x08, 0xfb, 0x35, + 0x12, 0xd0, 0x02, 0xf5, 0xeb, 0x74, 0x37, 0x88, 0x35, 0xbd, 0x5f, 0x00, + 0xb1, 0x0b, 0xd9, 0x55, 0x7f, 0xe9, 0x9e, 0xf9, 0x2b, 0x53, 0xba, 0x0e, + 0x35, 0x36, 0x5a, 0xe2, 0xcd, 0xed, 0xe4, 0xfe, 0x7f, 0xba, 0xad, 0x38, + 0xd3, 0x74, 0x07, 0x3d, 0x09, 0x40, 0xa2, 0xf8, 0x25, 0x15, 0x19, 0x14, + 0x95, 0xb2, 0x00, 0xeb, 0x57, 0xd6, 0x58, 0xb3, 0x3d, 0x2f, 0xa9, 0x2a, + 0x36, 0x8d, 0x1e, 0xe9, 0x78, 0x0d, 0x18, 0x36, 0x6a, 0xe0, 0x34, 0xe7, + 0x76, 0xf2, 0xb1, 0x05, 0x44, 0xc1, 0xb2, 0x5c, 0x1e, 0x2b, 0xb0, 0xe0, + 0x22, 0x2b, 0xbf, 0x9c, 0x15, 0x58, 0x60, 0x15, 0xe6, 0x56, 0xe5, 0x26, + 0x19, 0xd2, 0x76, 0x60, 0xe9, 0x18, 0x29, 0xff, 0xce, 0x71, 0x22, 0xc3, + 0x88, 0x89, 0x75, 0xf4, 0x13, 0x6f, 0x7f, 0xbe, 0x56, 0xad, 0xd8, 0x2b, + 0x8d, 0xe2, 0x59, 0x14, 0x2f, 0x56, 0xe9, 0x89, 0xe4, 0x7e, 0x2f, 0x3a, + 0x2d, 0x2d, 0x2e, 0x82, 0x94, 0xd1, 0x18, 0x7e, 0xa7, 0x7e, 0x73, 0xa3, + 0xc5, 0x6e, 0x94, 0x70, 0x84, 0x86, 0xd6, 0xce, 0x80, 0x64, 0x46, 0xfa, + 0xad, 0x8c, 0x3c, 0x7e, 0xea, 0x71, 0xc6, 0xf8, 0x5e, 0xc0, 0x7c, 0x35, + 0xdb, 0xe9, 0xda, 0x1d, 0x22, 0x07, 0xed, 0x30, 0x68, 0xd4, 0xec, 0xbb, + 0x95, 0xdf, 0x0d, 0x04, 0x64, 0xe0, 0x5c, 0xc3, 0x08, 0xe0, 0xec, 0xb4, + 0xf1, 0xdc, 0x37, 0x27, 0xeb, 0x08, 0x07, 0x87, 0xc5, 0x1f, 0x4c, 0xc9, + 0xf2, 0x8d, 0x70, 0x89, 0x34, 0xa0, 0x56, 0xd6, 0xfd, 0x66, 0x47, 0x1f, + 0x3e, 0xf5, 0x24, 0x13, 0x58, 0x36, 0x19, 0x77, 0xb7, 0x99, 0xde, 0xa0, + 0x3e, 0x72, 0x6d, 0xf9, 0x1a, 0xdc, 0x0c, 0x84, 0x79, 0x74, 0xef, 0xfd, + 0x0f, 0xe0, 0x8c, 0xe8, 0x99, 0x94, 0x75, 0x8f, 0xb9, 0x78, 0xcd, 0xe1, + 0x8e, 0xef, 0x64, 0x7d, 0xe6, 0xef, 0xe8, 0xfd, 0xf7, 0xb3, 0xb4, 0x58, + 0xac, 0x07, 0x60, 0x12, 0x4f, 0x19, 0x14, 0x84, 0x99, 0xe2, 0xbf, 0xeb, + 0xbe, 0x9e, 0x03, 0x56, 0xde, 0xc1, 0xed, 0x41, 0x07, 0x14, 0x38, 0x1d, + 0x39, 0xb3, 0x79, 0xa8, 0x59, 0x31, 0x28, 0x6f, 0x76, 0x95, 0xec, 0x07, + 0x4a, 0xaa, 0xf1, 0xf5, 0xa6, 0x1e, 0x8d, 0x15, 0xa0, 0x16, 0x0d, 0x3b, + 0x05, 0x6d, 0x0e, 0x99, 0xdd, 0x77, 0xab, 0x39, 0x07, 0x83, 0x02, 0x4e, + 0xe5, 0x67, 0x06, 0x82, 0x1b, 0xa1, 0x36, 0xaf, 0xcf, 0xca, 0xf5, 0xba, + 0x61, 0x23, 0x58, 0x7c, 0x93, 0x68, 0x57, 0x80, 0xe5, 0xb6, 0x89, 0xbe, + 0x87, 0x07, 0xd4, 0x45, 0xf9, 0xb6, 0xcc, 0x37, 0x5d, 0x31, 0x3b, 0xc8, + 0x56, 0x8c, 0xbf, 0x97, 0x8d, 0xad, 0x56, 0x68, 0x44, 0xb2, 0xed, 0x28, + 0xbe, 0x98, 0xb5, 0x5d, 0xd3, 0xe9, 0x86, 0x6f, 0xe8, 0xfb, 0xfe, 0xe9, + 0x28, 0x3a, 0x6a, 0x00, 0x99, 0x90, 0xd3, 0x40, 0xcd, 0x9f, 0xb6, 0x69, + 0xc3, 0xbd, 0x4d, 0x99, 0x0c, 0x47, 0xbf, 0x20, 0xb2, 0xb2, 0xe2, 0xd9, + 0x24, 0x13, 0xd1, 0xbb, 0x45, 0xf6, 0x77, 0x6f, 0x2f, 0x88, 0xdc, 0x7b, + 0xb7, 0x9d, 0x00, 0x7a, 0xf7, 0x5a, 0x94, 0x99, 0x8e, 0xff, 0x67, 0x5c, + 0xe4, 0x52, 0x7a, 0xd0, 0xac, 0xe4, 0xe6, 0x3e, 0x2a, 0xb1, 0xab, 0xfa, + 0xf4, 0xa8, 0xb7, 0x1d, 0x14, 0x82, 0x76, 0x30, 0x7b, 0xbf, 0x39, 0xb3, + 0x76, 0x3f, 0xe5, 0x00, 0xb1, 0xf0, 0xb0, 0x30, 0x04, 0x5d, 0xb0, 0xf3, + 0x40, 0xa5, 0xa5, 0xb2, 0x0c, 0xe4, 0xb5, 0x28, 0x50, 0xbe, 0xcb, 0x68, + 0x26, 0x3a, 0x48, 0xcf, 0xe7, 0xde, 0x72, 0x07, 0x27, 0x0f, 0x5e, 0xf7, + 0x5e, 0x0f, 0x9c, 0x31, 0xbe, 0xe2, 0x32, 0x81, 0x11, 0x00, 0x18, 0x1a, + 0xc4, 0x74, 0x8f, 0xba, 0x0e, 0x26, 0x2c, 0x79, 0x6a, 0xc1, 0xa6, 0xc6, + 0x9d, 0x92, 0xea, 0x2d, 0x28, 0x2a, 0x10, 0x2a, 0x9b, 0x0c, 0x84, 0xe3, + 0xbd, 0x84, 0xc9, 0x58, 0x2e, 0xbb, 0xce, 0x1c, 0x2d, 0x30, 0x73, 0x78, + 0x6c, 0x95, 0xed, 0x50, 0xb9, 0xa0, 0x64, 0xe4, 0x11, 0xd0, 0x5a, 0xc3, + 0x30, 0xcd, 0xa5, 0xe9, 0xc2, 0x88, 0xfc, 0x6a, 0x99, 0x05, 0xa4, 0xbc, + 0x68, 0xbe, 0x7f, 0x5c, 0xb6, 0x2a, 0x31, 0xc4, 0xc9, 0x67, 0x8a, 0x35, + 0x3e, 0x12, 0xd2, 0xb6, 0xcc, 0xdc, 0x11, 0x6d, 0x08, 0x95, 0xa7, 0x80, + 0x82, 0x50, 0x4c, 0x5b, 0xe3, 0x9b, 0x76, 0x8b, 0xa4, 0xbf, 0xfe, 0x31, + 0x8b, 0x97, 0xac, 0x12, 0xc5, 0xb4, 0xca, 0x91, 0x8e, 0xcb, 0xe6, 0x1f, + 0x25, 0x84, 0x8a, 0xb6, 0x79, 0x14, 0xb5, 0x74, 0x49, 0x34, 0x16, 0xef, + 0xa8, 0x07, 0x6b, 0xee, 0xb2, 0x39, 0x1e, 0x3c, 0x13, 0x91, 0x84, 0x0b, + 0xaa, 0x06, 0x62, 0x18, 0x6e, 0xf7, 0xf3, 0x94, 0x46, 0x41, 0xa6, 0x80, + 0x48, 0xc5, 0x44, 0x49, 0x1c, 0x62, 0x4a, 0xb2, 0xf9, 0xc2, 0xf7, 0xee, + 0xb5, 0x49, 0x83, 0x36, 0x7c, 0xf9, 0xec, 0x8a, 0xa7, 0xc0, 0x48, 0xf7, + 0x69, 0x9f, 0x6c, 0x27, 0x20, 0xbd, 0x84, 0xff, 0xb6, 0x57, 0xc6, 0x08, + 0xfb, 0xa2, 0xc2, 0x2d, 0x47, 0x06, 0x8b, 0xc9, 0xc2, 0xdd, 0xf5, 0x36, + 0x0b, 0xd6, 0x06, 0xde, 0xa5, 0x7f, 0x71, 0x92, 0x2d, 0xd6, 0xe7, 0x90, + 0x7d, 0x6e, 0x6a, 0xfc, 0x2a, 0x49, 0x39, 0x21, 0xc1, 0xa4, 0x2e, 0x5d, + 0xdf, 0x9d, 0x0c, 0xf2, 0xb2, 0x8e, 0xb1, 0xd4, 0x3b, 0x7b, 0x2b, 0x05, + 0x05, 0x1a, 0x53, 0x09, 0xa8, 0x54, 0xd0, 0xbd, 0xeb, 0xcc, 0x89, 0xa8, + 0x1c, 0x3c, 0xe7, 0x65, 0x0b, 0x7a, 0x96, 0x3c, 0x7a, 0x03, 0x6a, 0xcb, + 0x5c, 0xcc, 0xe5, 0x2c, 0xad, 0x87, 0xa1, 0x9e, 0xcd, 0xcc, 0xf5, 0xc4, + 0x9c, 0x2d, 0xee, 0xbb, 0xd8, 0x19, 0x49, 0xbf, 0xa4, 0x92, 0x01, 0xb8, + 0x96, 0xef, 0x43, 0x48, 0x0a, 0xeb, 0xbe, 0xb4, 0xcc, 0x50, 0xd9, 0xd6, + 0xb1, 0xed, 0xf1, 0x49, 0xf0, 0xf4, 0xa8, 0xac, 0x4a, 0xa6, 0xe8, 0x95, + 0x77, 0x85, 0x1f, 0x24, 0x68, 0x0c, 0xa7, 0x85, 0xf1, 0xd9, 0x7d, 0x1d, + 0xc3, 0xfc, 0x69, 0x61, 0x2d, 0x00, 0x6a, 0xb3, 0x99, 0xa7, 0xf7, 0x96, + 0x6f, 0x1f, 0x42, 0xc5, 0x31, 0xf9, 0x83, 0x4b, 0x54, 0xad, 0x72, 0x6d, + 0xda, 0x95, 0xde, 0x3b, 0x01, 0x84, 0xcb, 0x05, 0x15, 0x25, 0xd3, 0x1f, + 0xc6, 0xf5, 0x9c, 0x52, 0xa9, 0xa6, 0x5b, 0xde, 0x1e, 0x8e, 0xed, 0x80, + 0x22, 0x30, 0xd2, 0xe7, 0x4e, 0x8f, 0x7b, 0x2f, 0x0a, 0xfd, 0x28, 0xab, + 0xa0, 0x9c, 0x54, 0xf7, 0xb1, 0x22, 0xc7, 0xe6, 0xea, 0xb8, 0xd2, 0x15, + 0xd5, 0xa0, 0x0b, 0xa8, 0x08, 0x76, 0xfd, 0x5a, 0x5b, 0x88, 0x07, 0x7f, + 0xd9, 0x92, 0x30, 0x02, 0x75, 0x95, 0x68, 0x73, 0xf7, 0x71, 0xbf, 0x14, + 0x00, 0x4a, 0x52, 0xd4, 0x17, 0x54, 0xc2, 0x85, 0x74, 0x8f, 0x5a, 0x34, + 0x8f, 0x00, 0x5a, 0x4a, 0x6a, 0xea, 0x06, 0xdf, 0x52, 0xdc, 0x3c, 0x4a, + 0x31, 0x72, 0xd5, 0x7d, 0xc8, 0x57, 0x29, 0x49, 0xe0, 0xe2, 0x7c, 0xd9, + 0x23, 0x5b, 0x91, 0xaf, 0x69, 0x38, 0x9f, 0xa0, 0x84, 0xed, 0xfd, 0x76, + 0x2a, 0x92, 0x85, 0x03, 0xaa, 0xbc, 0xc5, 0x7d, 0x66, 0x8b, 0x88, 0xa8, + 0xfc, 0x18, 0x26, 0x82, 0x45, 0x77, 0xc3, 0x3a, 0x5b, 0x13, 0x3f, 0x8e, + 0x85, 0x07, 0x99, 0x1d, 0x90, 0xb0, 0x7d, 0xd5, 0x39, 0x17, 0x87, 0xae, + 0x24, 0xbd, 0xc6, 0x12, 0xf5, 0x28, 0x4d, 0xe6, 0xdb, 0x53, 0x0e, 0x4b, + 0x88, 0xb1, 0x59, 0xdc, 0x6c, 0xcb, 0x4c, 0x5d, 0x76, 0x5e, 0x36, 0xbf, + 0x50, 0x97, 0xc8, 0xce, 0x7c, 0x8f, 0xd0, 0xc0, 0x40, 0x7e, 0x5b, 0xdc, + 0x12, 0x04, 0x32, 0xf3, 0x15, 0xb7, 0xdd, 0xbe, 0xa1, 0xb6, 0xc5, 0xed, + 0x53, 0xb2, 0x28, 0x54, 0x83, 0x2c, 0xdc, 0x56, 0xc3, 0x07, 0x36, 0x41, + 0x6a, 0x80, 0x27, 0xa1, 0xb7, 0x03, 0xcb, 0xea, 0xe9, 0x0f, 0x98, 0x9a, + 0x2b, 0xbf, 0x8e, 0xe6, 0x2e, 0xf5, 0xd2, 0x96, 0x4b, 0xd1, 0x80, 0x6d, + 0x95, 0xc7, 0x20, 0x0a, 0x4c, 0x3b, 0x1f, 0xea, 0xcc, 0x7f, 0xeb, 0xa9, + 0x51, 0xbe, 0xc2, 0xac, 0x91, 0xea, 0xd9, 0xc1, 0x7e, 0x41, 0x8e, 0x6b, + 0x40, 0x29, 0x75, 0x39, 0xe7, 0x25, 0xaf, 0x8d, 0xdf, 0xbb, 0x36, 0xd5, + 0x25, 0x1d, 0xbc, 0x6d, 0xdf, 0x89, 0xfd, 0x4e, 0xcf, 0x73, 0x29, 0x58, + 0x03, 0x91, 0xd8, 0x2b, 0xbf, 0x62, 0x73, 0xc0, 0x88, 0xdb, 0xd2, 0x0f, + 0xf6, 0x1b, 0x14, 0x86, 0x96, 0xc3, 0xfe, 0x35, 0x4d, 0x19, 0xc8, 0x58, + 0xcb, 0xb8, 0x00, 0xd4, 0x32, 0x59, 0xb8, 0x29, 0x3f, 0x2b, 0xdd, 0x47, + 0x2f, 0xbb, 0xb3, 0xde, 0x73, 0xf2, 0x35, 0xd3, 0xf2, 0xb4, 0x59, 0x5e, + 0xde, 0x3e, 0xd8, 0x34, 0x53, 0x1f, 0x6c, 0x92, 0xc9, 0xd6, 0x78, 0x3d, + 0x17, 0x5c, 0xff, 0xb6, 0x45, 0x1b, 0x51, 0x68, 0x4c, 0x9c, 0x98, 0x8a, + 0xc9, 0x3f, 0x4c, 0x2b, 0xd3, 0xdc, 0xa6, 0x73, 0x4c, 0x2b, 0xf3, 0xfe, + 0xf6, 0xc1, 0x96, 0x79, 0xd7, 0x5a, 0x4c, 0xa8, 0x8f, 0xce, 0x5b, 0x6e, + 0x3f, 0xa8, 0xb0, 0xd9, 0x69, 0x2f, 0xdb, 0xdb, 0x84, 0x69, 0xf3, 0xbc, + 0xf9, 0xdc, 0x2e, 0xdc, 0x46, 0x4f, 0x06, 0xf1, 0xfe, 0x78, 0xdc, 0xdc, + 0x62, 0x30, 0xde, 0xf3, 0xc6, 0x50, 0x53, 0x90, 0x3d, 0x87, 0x4c, 0x22, + 0x7d, 0xa0, 0xfb, 0xa9, 0xde, 0x6c, 0xe1, 0xfe, 0x32, 0x22, 0xd8, 0x6f, + 0xfc, 0xdd, 0x00, 0xb2, 0x10, 0xee, 0xf9, 0x7f, 0x4f, 0xcd, 0xd6, 0x1c, + 0xae, 0x8f, 0xa1, 0x66, 0xdb, 0xe8, 0xa8, 0x2b, 0x5e, 0xf8, 0x9a, 0x29, + 0x84, 0xc7, 0x30, 0xb6, 0xf1, 0x4a, 0x28, 0x30, 0x24, 0xf9, 0x38, 0x09, + 0x04, 0x64, 0x09, 0x54, 0x02, 0xc4, 0xdb, 0xa9, 0xda, 0x6e, 0xb0, 0x4f, + 0xf2, 0x7e, 0xf6, 0xa4, 0x1e, 0x00, 0xd6, 0x1f, 0x3d, 0x15, 0xfb, 0x89, + 0x18, 0x82, 0xdd, 0xb1, 0xc0, 0xe2, 0x9e, 0x07, 0x14, 0x8f, 0x75, 0x84, + 0xac, 0x8a, 0xfd, 0x43, 0x89, 0xcc, 0x86, 0x52, 0x33, 0xc7, 0xcd, 0x10, + 0x30, 0x2f, 0x89, 0x52, 0xfd, 0x20, 0x30, 0x8f, 0xd2, 0xea, 0xe1, 0xe4, + 0x12, 0xee, 0x4e, 0x2f, 0x20, 0x3a, 0x8b, 0x19, 0x3c, 0x79, 0xa9, 0xd8, + 0x7f, 0x97, 0x02, 0xd1, 0x5a, 0xe6, 0x71, 0x30, 0xd8, 0xf4, 0x9c, 0xbb, + 0xa2, 0x79, 0x1e, 0xbd, 0xcb, 0x6d, 0xf1, 0xcd, 0x03, 0xfc, 0xe4, 0x31, + 0x6e, 0x35, 0x8d, 0xfc, 0xed, 0x73, 0x77, 0x74, 0x30, 0xab, 0x4d, 0x67, + 0xff, 0x9a, 0x62, 0xc8, 0x37, 0xb0, 0x11, 0x52, 0x3a, 0xec, 0xb3, 0x23, + 0x93, 0x85, 0x21, 0xff, 0x9f, 0x37, 0x34, 0x2e, 0xa0, 0xdb, 0xd8, 0xbb, + 0x1f, 0x04, 0xbb, 0xbb, 0xdf, 0x53, 0x65, 0xa9, 0xf9, 0x7f, 0xc7, 0x07, + 0x1a, 0x60, 0xb2, 0xcd, 0x2e, 0x7a, 0xe1, 0x6f, 0x74, 0xa4, 0xf1, 0x0a, + 0x08, 0x8b, 0x9f, 0x6c, 0xaa, 0x51, 0xf9, 0x8b, 0x4f, 0x2a, 0xc0, 0xda, + 0x95, 0xd6, 0xb9, 0x41, 0x8d, 0x35, 0x55, 0xd6, 0x5a, 0x3d, 0x8d, 0x35, + 0x5b, 0xab, 0xd5, 0xb5, 0x89, 0x6b, 0x44, 0x7d, 0x49, 0x72, 0xbf, 0x79, + 0xc2, 0x18, 0x61, 0x9c, 0x18, 0xe5, 0x8c, 0x0c, 0xb2, 0x5f, 0x02, 0xdf, + 0xd3, 0x58, 0xca, 0x4d, 0x9a, 0x9d, 0x50, 0xe1, 0x29, 0x7d, 0x89, 0xdc, + 0x13, 0x58, 0xb7, 0xa9, 0xf3, 0x70, 0x6e, 0xa0, 0x47, 0xbe, 0x33, 0xe5, + 0xbd, 0x5a, 0xed, 0xb6, 0x94, 0x4f, 0xee, 0x30, 0xa4, 0xf5, 0x41, 0x61, + 0xc4, 0xa3, 0xe6, 0xba, 0x35, 0xd7, 0x6d, 0x57, 0x63, 0x72, 0x49, 0xa1, + 0xaa, 0x95, 0x72, 0x98, 0xcb, 0xce, 0x4f, 0x21, 0x75, 0x0b, 0x93, 0x55, + 0x33, 0x08, 0xf5, 0xd5, 0x21, 0xe6, 0x55, 0xc7, 0xff, 0x06, 0x73, 0x33, + 0x08, 0x47, 0x52, 0x02, 0x58, 0x2c, 0x4e, 0x5f, 0xbf, 0xb3, 0x74, 0xc9, + 0xa0, 0xad, 0xfd, 0xab, 0x01, 0x35, 0x60, 0x84, 0xf7, 0x25, 0x82, 0x22, + 0xd1, 0xa8, 0x5d, 0x3a, 0xf7, 0x8a, 0x02, 0x25, 0x58, 0x32, 0x54, 0xd3, + 0x3c, 0x57, 0xac, 0x71, 0x53, 0x55, 0x5e, 0x6d, 0xb2, 0xd3, 0x6f, 0x5e, + 0x49, 0xb9, 0x94, 0x74, 0x3c, 0x6f, 0x14, 0x44, 0xf9, 0xcd, 0x18, 0x4e, + 0xc6, 0xd1, 0x6a, 0x8d, 0x68, 0x07, 0xef, 0x08, 0xcb, 0x40, 0x01, 0x83, + 0x69, 0xe4, 0x6b, 0xae, 0x24, 0x72, 0x46, 0x69, 0x8c, 0xa3, 0x13, 0x06, + 0xdb, 0x3c, 0xe8, 0x2e, 0x68, 0xec, 0x8f, 0x4d, 0xf2, 0xf7, 0xab, 0x73, + 0x89, 0x6e, 0xec, 0xf5, 0x80, 0x88, 0xdc, 0x2b, 0x9e, 0x68, 0x73, 0xff, + 0x12, 0x09, 0xca, 0xf6, 0xe9, 0x3e, 0x5b, 0x89, 0xc0, 0xb2, 0x33, 0x17, + 0x9b, 0xeb, 0xb0, 0x27, 0xe9, 0x40, 0x86, 0xf1, 0x0b, 0x89, 0x0e, 0xc9, + 0x6d, 0x7c, 0xc7, 0xb0, 0x61, 0x65, 0x35, 0x4a, 0xab, 0x5a, 0x68, 0xb3, + 0xba, 0x5f, 0xc5, 0x86, 0xde, 0x3b, 0xb7, 0xab, 0x24, 0xd8, 0x46, 0x41, + 0x5d, 0xd5, 0xa6, 0xa5, 0x7a, 0x2e, 0x15, 0x67, 0x79, 0x72, 0x5c, 0x61, + 0x05, 0xa2, 0xa7, 0xff, 0x0f, 0x0e, 0xcc, 0x1b, 0xe2, 0x92, 0x25, 0x8a, + 0x52, 0x5f, 0xc9, 0x0d, 0x85, 0x42, 0x1b, 0x57, 0x1d, 0x25, 0x82, 0xd9, + 0xdf, 0x72, 0x2b, 0xcb, 0xc2, 0xc2, 0xc4, 0x92, 0x94, 0x9f, 0x30, 0xc7, + 0x63, 0x7c, 0x92, 0xc6, 0x01, 0x00, 0xef, 0x69, 0xa8, 0xa5, 0xc7, 0x1b, + 0x5f, 0xb6, 0x90, 0x1c, 0x67, 0x09, 0x39, 0xd2, 0x3e, 0xef, 0xb9, 0xd1, + 0xfa, 0xbb, 0xcc, 0x20, 0xe6, 0xcc, 0x9e, 0x26, 0x9c, 0x5b, 0x6e, 0x82, + 0x16, 0x8a, 0xf8, 0xdc, 0xa2, 0xe5, 0xdf, 0xf9, 0x3b, 0xf9, 0x4a, 0x91, + 0xec, 0x0b, 0xdc, 0x93, 0xc1, 0xdc, 0xe5, 0x1b, 0x5f, 0x16, 0x79, 0x2e, + 0xbe, 0x7a, 0xc8, 0xc6, 0xaf, 0x6b, 0x95, 0x86, 0xeb, 0x5a, 0x5c, 0x38, + 0x9b, 0x11, 0xdc, 0xf2, 0x35, 0x26, 0x67, 0xbb, 0x3a, 0xe7, 0x1c, 0xb6, + 0x3b, 0x5e, 0x17, 0x93, 0x52, 0xe2, 0xa7, 0xd7, 0x78, 0x3d, 0xde, 0xa4, + 0x02, 0x65, 0xe2, 0xd0, 0x71, 0xc3, 0xbf, 0x41, 0x5d, 0xce, 0xcd, 0xc8, + 0xcd, 0x21, 0x06, 0x67, 0x3a, 0xde, 0xb0, 0x7c, 0x8b, 0xb4, 0x81, 0x1c, + 0x48, 0x06, 0x93, 0xc2, 0x5b, 0xa5, 0x86, 0x58, 0x83, 0xb0, 0x57, 0x32, + 0x51, 0xf6, 0x47, 0x49, 0x05, 0x23, 0x84, 0xe2, 0xbf, 0xdb, 0x8a, 0x43, + 0xb5, 0x5a, 0xec, 0xa4, 0x17, 0xcc, 0xfc, 0xef, 0xee, 0x13, 0x94, 0x5a, + 0x40, 0x70, 0x78, 0x6e, 0x6b, 0x1f, 0xed, 0x05, 0xdf, 0x33, 0xc1, 0xdc, + 0x73, 0xed, 0xad, 0x93, 0x46, 0x61, 0x77, 0x7e, 0xf3, 0x6b, 0x2f, 0x6c, + 0x35, 0xcb, 0xb7, 0x51, 0x72, 0xd4, 0x33, 0xe5, 0xee, 0xcc, 0x1b, 0xc4, + 0x4c, 0xb4, 0xac, 0x2e, 0x5d, 0xcd, 0x33, 0xf4, 0x63, 0x31, 0x29, 0x6b, + 0x57, 0x78, 0x52, 0x38, 0x3d, 0x7d, 0xd7, 0xb2, 0xd5, 0xf1, 0x97, 0x6f, + 0x95, 0x5c, 0xbe, 0x06, 0xee, 0x22, 0xbc, 0xb7, 0xba, 0xc6, 0x0f, 0x5e, + 0x8b, 0xbb, 0x6a, 0x07, 0x5d, 0xbe, 0x7a, 0x36, 0x4c, 0xc3, 0x7c, 0xc2, + 0x56, 0x27, 0x63, 0xd7, 0xb0, 0x6c, 0x41, 0x4c, 0x59, 0xc3, 0xc4, 0x25, + 0xf7, 0x01, 0x3b, 0x25, 0x21, 0xce, 0xe7, 0x6e, 0xc7, 0x69, 0xf6, 0x7b, + 0x95, 0xa3, 0xc8, 0x92, 0x88, 0x0a, 0xcd, 0x73, 0xac, 0xab, 0xba, 0x15, + 0xd5, 0x2b, 0xaa, 0xae, 0x9f, 0x39, 0x56, 0xf8, 0xc5, 0x78, 0xa9, 0x79, + 0x2b, 0x6c, 0xb4, 0xdd, 0x12, 0x17, 0x74, 0x06, 0x08, 0x92, 0x02, 0x03, + 0x1c, 0x6a, 0xf3, 0x2e, 0x69, 0x9a, 0xf7, 0x5c, 0xac, 0xd0, 0x29, 0x55, + 0x79, 0xcf, 0x6f, 0x89, 0xe4, 0x04, 0xa2, 0xc9, 0x5c, 0xf1, 0x34, 0xdd, + 0x4e, 0x3e, 0x3a, 0xe3, 0xc8, 0xd5, 0x2e, 0x72, 0xe8, 0xba, 0x77, 0x7f, + 0xf9, 0xa9, 0x01, 0x94, 0x07, 0x4f, 0x7c, 0x1a, 0x00, 0x84, 0x12, 0x0a, + 0x00, 0xa2, 0x8e, 0xe0, 0x8d, 0x0d, 0x35, 0xea, 0x8f, 0xd9, 0xf2, 0xee, + 0x0a, 0x13, 0x34, 0x45, 0x25, 0x67, 0x2f, 0x06, 0x72, 0x33, 0xe8, 0x56, + 0xff, 0x47, 0xf1, 0x01, 0x93, 0xd9, 0x21, 0x9e, 0xaa, 0x75, 0x68, 0xb4, + 0xca, 0xb4, 0x56, 0x63, 0x57, 0x98, 0xdb, 0x28, 0xb2, 0xe5, 0xb9, 0x79, + 0x1b, 0x8b, 0xf2, 0x37, 0x74, 0xed, 0x74, 0x6a, 0xa4, 0x9b, 0x33, 0x43, + 0x1a, 0xc7, 0xc6, 0x6e, 0x0a, 0xe9, 0x13, 0xe5, 0xa3, 0xf5, 0xd2, 0x97, + 0x19, 0x4a, 0x8d, 0x37, 0x8b, 0xa6, 0x8b, 0x99, 0xa6, 0x02, 0xe2, 0xdc, + 0xd3, 0x31, 0x9e, 0x71, 0x2b, 0x11, 0xba, 0x0f, 0x1a, 0x15, 0xa7, 0x4c, + 0xf3, 0x34, 0xf5, 0x4c, 0x78, 0x2d, 0x52, 0x45, 0x05, 0x2d, 0x55, 0xaa, + 0x09, 0xa7, 0xb7, 0x8c, 0xee, 0xaf, 0x49, 0x1c, 0x7a, 0xc8, 0xa9, 0x15, + 0xae, 0xaf, 0x35, 0xca, 0xe4, 0x8b, 0x96, 0xd6, 0xcb, 0x7c, 0x3c, 0xa8, + 0x88, 0x06, 0xe8, 0xfd, 0xcb, 0x04, 0x6c, 0xa0, 0x03, 0x46, 0xe1, 0x8b, + 0xce, 0x7f, 0x94, 0x48, 0x4d, 0x23, 0xf8, 0xe6, 0x0e, 0xa5, 0x2e, 0xfe, + 0xa0, 0xe5, 0xa0, 0x72, 0xf3, 0xa2, 0x09, 0xe9, 0x67, 0x80, 0x69, 0x71, + 0xa5, 0x65, 0x7c, 0x0d, 0xe6, 0xeb, 0xda, 0x47, 0x05, 0x6c, 0x48, 0xe6, + 0xcd, 0xe4, 0x52, 0xad, 0x6a, 0x33, 0x0e, 0xec, 0xc8, 0x45, 0x0b, 0x1f, + 0x24, 0xe0, 0xba, 0xb5, 0xc5, 0x8f, 0xfb, 0x6d, 0xe6, 0x60, 0x2c, 0xd5, + 0x46, 0x8c, 0x26, 0xa7, 0xd1, 0xff, 0x54, 0x94, 0x4e, 0xfd, 0x31, 0x9a, + 0xf0, 0x00, 0x23, 0x3b, 0x13, 0xca, 0x73, 0x2e, 0x3c, 0xc1, 0xf3, 0xc1, + 0x7a, 0xbd, 0x60, 0x0e, 0x1e, 0x64, 0xbf, 0xdf, 0xd3, 0xf6, 0xa6, 0xea, + 0xbf, 0x58, 0x1b, 0xc3, 0x54, 0xce, 0x5e, 0x61, 0x68, 0xd1, 0x9f, 0x4c, + 0xc1, 0xa0, 0xea, 0x83, 0xf0, 0x4a, 0x46, 0xe3, 0x4a, 0x8d, 0x80, 0x0d, + 0xfb, 0xa2, 0x69, 0x61, 0xa9, 0x97, 0x65, 0xbb, 0x7f, 0xfd, 0x32, 0x30, + 0xec, 0xc1, 0x69, 0x1c, 0x2d, 0x48, 0x61, 0x85, 0x88, 0x34, 0xad, 0x29, + 0x1f, 0x5e, 0x79, 0xd0, 0xfa, 0x42, 0x75, 0xd6, 0xcb, 0x63, 0x53, 0xa0, + 0x80, 0xb2, 0x7a, 0xac, 0xec, 0xef, 0x83, 0x71, 0x37, 0x00, 0xd8, 0x72, + 0x37, 0x7a, 0xe7, 0xb1, 0xd2, 0xeb, 0xa7, 0x07, 0xb9, 0xa0, 0x0b, 0xce, + 0xcf, 0xe4, 0x5b, 0xcf, 0x4c, 0x89, 0xfa, 0x66, 0x3d, 0xd3, 0xe2, 0x86, + 0xe9, 0x45, 0xb3, 0x16, 0x16, 0x44, 0x41, 0xf5, 0xa0, 0xdc, 0x8c, 0xb5, + 0xcd, 0x0b, 0x4a, 0x04, 0x55, 0xe9, 0x0b, 0x66, 0xa1, 0xd1, 0x33, 0x04, + 0x76, 0x25, 0x7b, 0xb2, 0x9c, 0xe3, 0x54, 0xfa, 0x26, 0x50, 0xd3, 0xec, + 0x3d, 0xe7, 0xcc, 0xcf, 0x61, 0xf2, 0xb6, 0x29, 0xe2, 0x68, 0x51, 0x08, + 0xea, 0xe5, 0xb4, 0xb7, 0x0c, 0x12, 0x13, 0x7f, 0x50, 0xed, 0x55, 0xbc, + 0x10, 0x55, 0x39, 0xcd, 0x59, 0x9c, 0xe3, 0x9e, 0x66, 0x93, 0x3d, 0x09, + 0x4d, 0x0d, 0x89, 0x98, 0xbd, 0x9b, 0x8d, 0x8b, 0xe0, 0x61, 0x93, 0xe4, + 0x7b, 0x4b, 0x6f, 0x13, 0x9c, 0x16, 0x9e, 0xa2, 0xf3, 0x96, 0xc4, 0x81, + 0x91, 0xef, 0xf7, 0x06, 0x56, 0x07, 0x53, 0xd4, 0x05, 0x73, 0x3f, 0x46, + 0xf7, 0x71, 0xd1, 0xa4, 0x80, 0xe2, 0x9d, 0x5a, 0xd3, 0xe2, 0x01, 0x72, + 0x14, 0x56, 0x9e, 0x99, 0x88, 0xb5, 0x56, 0xaf, 0x75, 0x78, 0x2f, 0x53, + 0x03, 0x1c, 0x58, 0x5a, 0x6e, 0x5a, 0xa5, 0x61, 0xe9, 0x96, 0xf2, 0x49, + 0x80, 0xbf, 0x17, 0xca, 0xcd, 0xc5, 0xb0, 0x26, 0x22, 0x87, 0xaf, 0xb9, + 0xef, 0xf3, 0x7c, 0x40, 0x96, 0xbb, 0x6a, 0x37, 0x39, 0xb8, 0x14, 0x30, + 0x1b, 0x18, 0x85, 0xea, 0x82, 0x7a, 0x79, 0x95, 0x4c, 0xa2, 0x89, 0x77, + 0xb6, 0x05, 0xdc, 0xb1, 0x1a, 0xc3, 0x9f, 0x5b, 0xf8, 0x27, 0x82, 0x1d, + 0x44, 0x3b, 0xcf, 0x64, 0x34, 0x23, 0x92, 0x99, 0xbd, 0x9c, 0x06, 0x8a, + 0xc1, 0x31, 0xa3, 0x34, 0x8e, 0x9a, 0xd5, 0x3e, 0x39, 0x2f, 0xe7, 0xf7, + 0x07, 0x16, 0x65, 0xaf, 0xcf, 0xfa, 0x0a, 0x2d, 0xdc, 0x4e, 0xb4, 0x32, + 0x9f, 0xb2, 0xe9, 0xe4, 0x9f, 0xd2, 0xd7, 0xf3, 0x4a, 0x7f, 0xf7, 0xb9, + 0x21, 0x66, 0x86, 0xef, 0xd0, 0x74, 0x2e, 0xa6, 0x70, 0xab, 0xac, 0x5f, + 0x66, 0x5a, 0x36, 0xd7, 0x08, 0xc6, 0x22, 0xb9, 0x34, 0x16, 0xa9, 0x2b, + 0xe7, 0xee, 0x40, 0x16, 0x98, 0x14, 0x48, 0x55, 0xd9, 0xf9, 0xd6, 0xc2, + 0x4b, 0xa5, 0x03, 0xbc, 0xfc, 0xdb, 0x44, 0xeb, 0xb2, 0x8b, 0x31, 0xaa, + 0x15, 0x64, 0x58, 0x54, 0xef, 0xb8, 0x1c, 0x75, 0x4a, 0x9e, 0x4d, 0x80, + 0xf6, 0xbb, 0xed, 0xcc, 0xd5, 0x16, 0x3a, 0xee, 0x59, 0x7a, 0x7a, 0x94, + 0xbf, 0x3e, 0x8e, 0x0a, 0x8e, 0x89, 0xef, 0x14, 0x16, 0xd7, 0xa7, 0x56, + 0x4b, 0xbd, 0x2e, 0xad, 0xbe, 0xfe, 0x3a, 0xcd, 0xe0, 0x88, 0xd8, 0xcd, + 0xdf, 0xb4, 0xd4, 0x2a, 0x0b, 0xad, 0xb4, 0xf6, 0xf8, 0xe7, 0xc7, 0x29, + 0x86, 0x1b, 0x40, 0x44, 0x00, 0x0b, 0x4a, 0x0d, 0x1f, 0x49, 0x10, 0x55, + 0x06, 0xdc, 0xf1, 0xc1, 0x06, 0x82, 0xf9, 0x9f, 0x09, 0x37, 0x04, 0x1f, + 0x90, 0xe2, 0x25, 0x90, 0x90, 0xf3, 0x87, 0xc7, 0xb9, 0xef, 0x57, 0x20, + 0x41, 0x42, 0x95, 0x8d, 0xe1, 0x05, 0x6a, 0x7a, 0x6d, 0x67, 0x92, 0x47, + 0x93, 0x83, 0x5a, 0x92, 0x33, 0x06, 0xcc, 0xd9, 0xa9, 0x98, 0x88, 0x36, + 0xea, 0x17, 0xbc, 0xef, 0xb9, 0xb0, 0xc5, 0x4b, 0x12, 0x38, 0x07, 0xf8, + 0xe4, 0xe0, 0x3e, 0x5a, 0xec, 0x05, 0x17, 0xc8, 0xca, 0x17, 0x47, 0x3a, + 0x96, 0x81, 0x94, 0x2e, 0xd8, 0xdd, 0x7d, 0x23, 0xac, 0xdb, 0x3b, 0x7d, + 0x98, 0xc5, 0x94, 0x2e, 0xdd, 0x10, 0x63, 0x31, 0x43, 0xfd, 0x26, 0xe8, + 0x43, 0x56, 0x5a, 0x9d, 0x1f, 0x55, 0x79, 0xb6, 0x4c, 0x2b, 0xfa, 0x00, + 0xda, 0xa0, 0x71, 0xa5, 0xc9, 0x9e, 0xe1, 0xe2, 0x98, 0x81, 0x02, 0x07, + 0x6b, 0x44, 0xaa, 0xae, 0xe0, 0xd3, 0xbf, 0x0c, 0xce, 0x9e, 0xcb, 0xe4, + 0xcd, 0xeb, 0x4b, 0xf4, 0xab, 0xea, 0x30, 0x0f, 0x23, 0xde, 0x8e, 0xdf, + 0x5f, 0x24, 0xeb, 0x03, 0xe2, 0xef, 0xa1, 0x73, 0xfa, 0xb1, 0xc5, 0x7c, + 0x01, 0x36, 0x7f, 0x17, 0xdb, 0xe7, 0x20, 0xb9, 0xcb, 0xbe, 0xb3, 0xc3, + 0x12, 0xa7, 0x8d, 0x00, 0xbe, 0x43, 0xbd, 0xab, 0x11, 0x88, 0xbe, 0xb8, + 0xf5, 0x94, 0xa5, 0x48, 0xaf, 0x89, 0x49, 0x3d, 0xc9, 0xc5, 0x8f, 0xa0, + 0x39, 0xfb, 0x60, 0x11, 0x50, 0xab, 0x9f, 0x50, 0xe1, 0xad, 0x0a, 0x4a, + 0xd5, 0xe4, 0x85, 0x26, 0xa4, 0x39, 0x63, 0x40, 0x8d, 0x75, 0x73, 0xc5, + 0x77, 0xe1, 0xe0, 0xda, 0x78, 0x2a, 0x4d, 0xe8, 0x68, 0x04, 0x14, 0x3f, + 0xc2, 0xcb, 0x04, 0x30, 0x54, 0x32, 0xbe, 0x9e, 0xbb, 0xdd, 0x77, 0x50, + 0xd1, 0x9e, 0x1c, 0x94, 0x06, 0x23, 0x56, 0x44, 0x01, 0x48, 0xb5, 0xd5, + 0x21, 0xf1, 0xd4, 0x5d, 0x45, 0x18, 0xb9, 0x93, 0x25, 0x1c, 0xca, 0xc5, + 0x7d, 0x5a, 0x93, 0x17, 0x87, 0xc6, 0x3d, 0x8d, 0x68, 0xe5, 0x34, 0x1b, + 0xe6, 0xeb, 0xe2, 0x20, 0x50, 0x2c, 0x2c, 0xa3, 0x6b, 0x4e, 0x0f, 0x46, + 0x57, 0xdc, 0x5e, 0x62, 0x37, 0x00, 0xc2, 0x05, 0xe4, 0x45, 0x2c, 0xac, + 0x56, 0x02, 0x2e, 0xb0, 0x3b, 0xb3, 0x9a, 0xf7, 0xae, 0x95, 0xe2, 0xab, + 0xda, 0x26, 0xb0, 0xb1, 0x74, 0xca, 0x01, 0x20, 0xd9, 0x16, 0xd6, 0x4b, + 0xac, 0x09, 0xa0, 0xba, 0x95, 0xdb, 0x52, 0xbb, 0x4c, 0x03, 0xbd, 0x3d, + 0x98, 0x8c, 0xcc, 0xbe, 0x7d, 0x44, 0xb3, 0xf1, 0x77, 0x38, 0xad, 0xd4, + 0x13, 0x78, 0xb7, 0x9e, 0x23, 0x70, 0x3b, 0x5f, 0xe1, 0x12, 0xe5, 0x7b, + 0xc1, 0xde, 0xf8, 0x7a, 0x0b, 0xb1, 0x2b, 0x55, 0xb4, 0x7b, 0x59, 0x4a, + 0x1b, 0xf0, 0x3f, 0xce, 0xfe, 0x5a, 0x2d, 0x75, 0xde, 0xa7, 0x1c, 0xc4, + 0x36, 0x91, 0xc9, 0xe6, 0x3a, 0xd5, 0x3c, 0x26, 0xb4, 0x84, 0x45, 0xf5, + 0xa8, 0x59, 0xde, 0x4b, 0x65, 0xde, 0x7f, 0x1d, 0xbb, 0xda, 0xf0, 0xd1, + 0x1f, 0xfb, 0xf1, 0x1b, 0x63, 0x12, 0xc3, 0xa6, 0x36, 0x2e, 0xed, 0xd0, + 0x96, 0xc9, 0x52, 0xba, 0x7d, 0x9d, 0xa8, 0x40, 0x46, 0xd6, 0x90, 0xab, + 0xd3, 0xa3, 0x87, 0x44, 0xe5, 0x01, 0x80, 0x31, 0x13, 0x6e, 0x42, 0x56, + 0x4f, 0x89, 0x71, 0x36, 0x3a, 0xb5, 0x10, 0xb8, 0x43, 0x65, 0x43, 0x07, + 0xaf, 0x15, 0x05, 0x88, 0x08, 0x2c, 0xd6, 0xd9, 0xa9, 0x80, 0x5f, 0x99, + 0xbb, 0x6f, 0xc3, 0x4b, 0xf8, 0x56, 0x3e, 0xaf, 0x8b, 0x6a, 0x60, 0xde, + 0x58, 0x82, 0x1b, 0xbe, 0xd6, 0xfc, 0xee, 0xda, 0xcf, 0xa5, 0x68, 0x66, + 0x16, 0x8d, 0x30, 0x25, 0xce, 0xf7, 0xe5, 0x9a, 0x75, 0x5a, 0xad, 0x11, + 0x63, 0xd3, 0x89, 0x1f, 0xcb, 0x0f, 0xa1, 0x40, 0xe4, 0x49, 0xad, 0x76, + 0x4e, 0x5f, 0x12, 0x08, 0xca, 0x56, 0x54, 0xee, 0x0d, 0x94, 0xc3, 0xde, + 0x18, 0xd9, 0xc9, 0x60, 0xad, 0x5d, 0xa7, 0x52, 0xb8, 0x56, 0x24, 0x50, + 0x01, 0x61, 0x25, 0x5e, 0x10, 0xdf, 0x7d, 0x25, 0x5d, 0x93, 0x7d, 0x04, + 0x59, 0x24, 0x8b, 0x37, 0x6d, 0xfc, 0x58, 0x1c, 0x47, 0x59, 0x05, 0xcc, + 0x38, 0x97, 0x8f, 0x1d, 0xb4, 0x3c, 0xed, 0xc4, 0x8c, 0x67, 0xd9, 0x94, + 0x68, 0xfb, 0x34, 0xa9, 0xf2, 0x8a, 0x2e, 0x44, 0xda, 0x06, 0x76, 0xef, + 0xa7, 0xf4, 0x2e, 0x83, 0xee, 0x64, 0x7b, 0xfc, 0x06, 0x34, 0xa4, 0x69, + 0xf1, 0x4d, 0xa4, 0xb9, 0x87, 0xb4, 0xcf, 0x9a, 0x1a, 0x5e, 0xc7, 0x0a, + 0x19, 0x1c, 0xc4, 0x02, 0x71, 0x6b, 0x79, 0x6f, 0xee, 0x78, 0xfe, 0x52, + 0x4a, 0xbf, 0xb7, 0xa6, 0xe7, 0x54, 0x33, 0x85, 0x60, 0x67, 0x05, 0x7c, + 0xf5, 0x3a, 0xf1, 0x70, 0xfe, 0xf9, 0x27, 0x18, 0x6a, 0xa4, 0x86, 0xb3, + 0xa0, 0xd9, 0x99, 0x13, 0xb5, 0x9a, 0x6e, 0xb3, 0xb3, 0x1e, 0xf8, 0x9c, + 0x29, 0xa1, 0x88, 0xc7, 0x48, 0xc8, 0xdd, 0x31, 0xb3, 0x7c, 0xb6, 0x3b, + 0x27, 0xaf, 0x29, 0xa7, 0xa0, 0x3a, 0x27, 0x40, 0x0a, 0xa6, 0xfc, 0x01, + 0xf3, 0xcc, 0x03, 0x3a, 0xc4, 0xf4, 0xba, 0xc3, 0xaf, 0x08, 0xfc, 0xc1, + 0xac, 0x07, 0x0b, 0x13, 0xc9, 0x65, 0xc7, 0xc4, 0x75, 0x8a, 0x47, 0x54, + 0x16, 0x8e, 0x00, 0xca, 0x30, 0xa4, 0xf1, 0x56, 0xea, 0xb9, 0x7f, 0xf1, + 0xee, 0xba, 0x50, 0x31, 0xaa, 0xdf, 0x08, 0xaa, 0xfd, 0x4a, 0x40, 0xc8, + 0x76, 0x14, 0x22, 0x53, 0xbd, 0x97, 0xac, 0x62, 0xd8, 0x42, 0x3f, 0x6b, + 0x73, 0xb1, 0x2b, 0x01, 0xc8, 0x3e, 0xe9, 0xb9, 0x8e, 0x8c, 0xb6, 0x6f, + 0x48, 0x79, 0x3f, 0x6b, 0xca, 0x57, 0x76, 0x1b, 0x8d, 0xec, 0x7c, 0xcd, + 0xfd, 0x02, 0xf8, 0x19, 0x03, 0x8c, 0x5b, 0xba, 0xfc, 0x0b, 0xf1, 0x5b, + 0x96, 0xa8, 0xa5, 0xde, 0xcb, 0xb5, 0xe4, 0xba, 0x48, 0x7e, 0x28, 0x59, + 0x7e, 0xbd, 0xf4, 0x7c, 0x78, 0xe0, 0xf8, 0xdd, 0x5e, 0xfd, 0x1e, 0x0f, + 0x23, 0x60, 0xfc, 0x24, 0xc1, 0x84, 0x73, 0x0d, 0xc3, 0x50, 0xda, 0xc9, + 0x87, 0xba, 0x9d, 0x29, 0x6b, 0x5e, 0x4a, 0x14, 0xfe, 0xc9, 0x51, 0x6f, + 0xc9, 0x51, 0x46, 0xb8, 0x52, 0xba, 0x6c, 0x2c, 0xd1, 0x57, 0x65, 0x3a, + 0x96, 0xb1, 0xf3, 0xf4, 0x25, 0xdb, 0xd1, 0xe1, 0xfd, 0xed, 0xb2, 0x13, + 0xf3, 0x0d, 0xac, 0x34, 0xb6, 0xee, 0xe4, 0x5e, 0x26, 0xd0, 0x3a, 0x57, + 0xdb, 0xa1, 0xd8, 0x2b, 0x1d, 0x42, 0xb4, 0x8c, 0x7e, 0x04, 0xe7, 0x45, + 0x91, 0x36, 0x3c, 0xf6, 0x75, 0x53, 0x15, 0x01, 0xcd, 0x41, 0xe0, 0x32, + 0x18, 0xca, 0x32, 0xd5, 0xe3, 0xea, 0xa1, 0x32, 0xda, 0xd1, 0x2e, 0x25, + 0x03, 0x97, 0xe9, 0x66, 0xa9, 0xc7, 0x8c, 0x0d, 0xdf, 0xb6, 0x59, 0x9c, + 0xf9, 0x22, 0x95, 0x12, 0x88, 0x2f, 0x1a, 0xe8, 0xee, 0x42, 0xad, 0x06, + 0xe2, 0xf1, 0xd6, 0xdd, 0x6b, 0x81, 0x4e, 0x7f, 0xb7, 0x31, 0x15, 0x27, + 0xf0, 0x03, 0x6a, 0x8f, 0x40, 0xc0, 0xc2, 0xd0, 0xb9, 0x05, 0xb6, 0x9e, + 0x90, 0x34, 0x40, 0xbf, 0x43, 0x46, 0xe0, 0xe2, 0x00, 0xd9, 0x02, 0x19, + 0xde, 0xd0, 0xdf, 0xbc, 0xdc, 0x53, 0xe8, 0xd4, 0x2c, 0xfb, 0x4b, 0xf3, + 0xf9, 0x62, 0xdf, 0x12, 0x75, 0xd5, 0x17, 0x30, 0x6b, 0x04, 0x1d, 0x1e, + 0xd3, 0xcb, 0x37, 0xfc, 0x58, 0x6a, 0x43, 0xe3, 0x4c, 0x09, 0x3f, 0x98, + 0x72, 0xf0, 0x24, 0xbf, 0x95, 0xde, 0x9b, 0xa0, 0x5e, 0xa7, 0x64, 0xb9, + 0x43, 0xcf, 0xb7, 0xf3, 0xb7, 0x04, 0x3d, 0xbc, 0x54, 0xf5, 0x12, 0xd7, + 0x72, 0x41, 0x2c, 0xdd, 0x32, 0xce, 0xf1, 0x31, 0x2b, 0x97, 0x74, 0x2f, + 0xa9, 0x12, 0xa3, 0x5c, 0xa7, 0x43, 0x2a, 0x90, 0xb4, 0x32, 0x1d, 0x59, + 0xf6, 0xdd, 0x41, 0xc5, 0x86, 0x05, 0xb6, 0xcf, 0x87, 0x25, 0x1d, 0x18, + 0xd2, 0x89, 0x60, 0x6c, 0x9d, 0x08, 0xab, 0xc1, 0xa7, 0x40, 0xce, 0x65, + 0x0a, 0x08, 0xa8, 0xc2, 0x4e, 0x41, 0xe9, 0x15, 0x39, 0x9d, 0x6a, 0x51, + 0x14, 0x1d, 0xf1, 0x60, 0x93, 0x97, 0xab, 0xfd, 0xbc, 0x07, 0xbd, 0xce, + 0x40, 0x28, 0xc6, 0x17, 0x8a, 0x53, 0x44, 0x57, 0x2d, 0x80, 0xf0, 0x6e, + 0x6a, 0xd7, 0x62, 0x6b, 0xd8, 0x95, 0xfa, 0xf6, 0x48, 0x0f, 0x72, 0xd0, + 0xf0, 0xf0, 0x3c, 0x46, 0x8b, 0x84, 0x79, 0x7d, 0x8c, 0x16, 0x08, 0x33, + 0x94, 0xa8, 0xfd, 0xbf, 0xf2, 0x2a, 0xf4, 0x57, 0xef, 0x2d, 0x3c, 0x8a, + 0x40, 0xc8, 0x8a, 0xaa, 0x8c, 0xbc, 0xe2, 0xe7, 0x9b, 0xcf, 0xe7, 0x07, + 0xc7, 0x67, 0x04, 0xee, 0x6d, 0x07, 0x53, 0x4b, 0x9c, 0x30, 0x9b, 0xe0, + 0xd9, 0x6f, 0xcf, 0x2d, 0x24, 0xc9, 0x9c, 0x04, 0x7f, 0x72, 0x1f, 0x6c, + 0xc5, 0x46, 0x42, 0xda, 0xb9, 0x62, 0x89, 0xfa, 0xac, 0xc4, 0xb7, 0xe7, + 0x4c, 0x00, 0x24, 0xa5, 0x74, 0x82, 0x3a, 0x6f, 0xc0, 0xd0, 0x50, 0x4e, + 0x7f, 0xe7, 0x9a, 0x6e, 0x08, 0x70, 0x89, 0xe9, 0xea, 0x2d, 0x41, 0x1d, + 0x27, 0x2d, 0x98, 0xb5, 0xc9, 0xdb, 0x4a, 0xda, 0x91, 0xc8, 0x4a, 0xca, + 0xb2, 0x8f, 0xb3, 0xbc, 0x63, 0xd5, 0x19, 0x95, 0xab, 0x4b, 0x1f, 0xaa, + 0xa1, 0x69, 0x22, 0xfc, 0x57, 0x4a, 0xde, 0x9a, 0x15, 0x84, 0x72, 0xf2, + 0x1d, 0xdc, 0x84, 0xc0, 0x2e, 0xd0, 0x1e, 0x15, 0xf9, 0xf0, 0x60, 0x65, + 0xa3, 0xfc, 0x47, 0x75, 0xca, 0x8e, 0xb9, 0x2b, 0xc8, 0x5a, 0x06, 0x62, + 0xb1, 0x18, 0x57, 0xe4, 0xb4, 0x52, 0x9b, 0x99, 0xd9, 0x29, 0x5f, 0x31, + 0x57, 0x3b, 0xe8, 0xcf, 0x55, 0x6c, 0xc3, 0x19, 0x43, 0xaa, 0xe5, 0x54, + 0x83, 0x30, 0xd7, 0xe7, 0x6f, 0xf4, 0x17, 0xbd, 0x99, 0xa2, 0x34, 0xcf, + 0xe3, 0x86, 0xa1, 0xe9, 0x09, 0x4f, 0x85, 0x19, 0x25, 0x68, 0x1f, 0x2e, + 0x5e, 0x61, 0x8a, 0x42, 0xd4, 0xdf, 0xe4, 0xf2, 0x00, 0xc6, 0x81, 0xa7, + 0xdc, 0xd9, 0xce, 0x0f, 0x20, 0x05, 0x9b, 0x57, 0xdc, 0x61, 0xc3, 0x81, + 0x7d, 0xa5, 0x7a, 0xfb, 0xf2, 0xad, 0xfd, 0xe7, 0xbd, 0x75, 0xf8, 0x84, + 0xff, 0xe2, 0xb6, 0x1f, 0x15, 0xdd, 0xdf, 0x2d, 0xf5, 0x0f, 0x40, 0xe1, + 0xcd, 0x51, 0xe7, 0x10, 0x95, 0xa3, 0xf3, 0x79, 0xfd, 0xe3, 0x7d, 0xfe, + 0x61, 0x6d, 0x55, 0x42, 0xe1, 0x58, 0x4b, 0xc7, 0xf3, 0xea, 0x59, 0x46, + 0xc7, 0xe0, 0xc7, 0x37, 0x77, 0x87, 0xe1, 0x9c, 0x60, 0x09, 0x5f, 0xc5, + 0x06, 0x8b, 0xa5, 0x55, 0x1c, 0x08, 0xc1, 0x87, 0x4c, 0x7b, 0xc1, 0xc5, + 0x71, 0x20, 0x8a, 0x42, 0xe7, 0x12, 0x68, 0x24, 0x60, 0xec, 0x4c, 0x5b, + 0x12, 0x57, 0xb5, 0xbe, 0x73, 0x27, 0xd0, 0x6f, 0xa0, 0x5e, 0xc3, 0x11, + 0xa8, 0x1d, 0xa1, 0xae, 0x2c, 0xf5, 0x17, 0x58, 0x69, 0x69, 0xa8, 0x03, + 0xd4, 0x00, 0x83, 0x4b, 0x07, 0xc5, 0xc2, 0xdd, 0x74, 0x89, 0x46, 0x0a, + 0x7f, 0x90, 0xe4, 0x0e, 0x7d, 0x3c, 0x30, 0xa7, 0x68, 0x29, 0xd0, 0x30, + 0x9d, 0xef, 0x37, 0xa9, 0xa8, 0x53, 0x66, 0x2a, 0x3d, 0x44, 0xe2, 0x2d, + 0xd1, 0xde, 0xac, 0x8c, 0x86, 0x42, 0xf3, 0x42, 0x7b, 0x8b, 0xa6, 0xed, + 0x98, 0x8c, 0xa3, 0x89, 0xfc, 0x27, 0x31, 0x0b, 0xe0, 0x10, 0xab, 0xa0, + 0xb3, 0xe8, 0xe8, 0x2c, 0x5e, 0xce, 0x27, 0x16, 0xee, 0x7e, 0xe9, 0xed, + 0xd4, 0xe0, 0x7d, 0x7b, 0x0d, 0xa7, 0x8f, 0x05, 0x50, 0xe7, 0x62, 0x80, + 0x69, 0x97, 0xfa, 0xf1, 0x4c, 0x8b, 0xbc, 0xc1, 0x5b, 0x4e, 0x62, 0xe1, + 0x81, 0x6f, 0x49, 0x20, 0x0f, 0x14, 0x9a, 0x74, 0xbc, 0x6f, 0x05, 0xa9, + 0xc8, 0xec, 0xed, 0x47, 0x8e, 0x72, 0x3f, 0x1a, 0x98, 0x28, 0x56, 0xe4, + 0x65, 0xb1, 0x44, 0x99, 0xf2, 0x8f, 0x44, 0xcb, 0x96, 0xfb, 0x77, 0xcd, + 0xbc, 0x74, 0x8f, 0x98, 0x21, 0xda, 0x6b, 0x9a, 0xd8, 0xcf, 0xda, 0xce, + 0x8f, 0x7f, 0xfa, 0x9e, 0x5c, 0x68, 0xbc, 0xf5, 0x4e, 0xbb, 0x67, 0x99, + 0x9c, 0x5c, 0x7d, 0x6d, 0xb3, 0x7a, 0x8c, 0x89, 0x1d, 0xc6, 0xcd, 0x99, + 0x5f, 0x29, 0x8d, 0x03, 0x6f, 0x6a, 0xaf, 0x1b, 0x54, 0x8b, 0xff, 0x60, + 0x72, 0x07, 0x37, 0x58, 0x59, 0xf9, 0x54, 0x21, 0xee, 0x82, 0xb5, 0x24, + 0x0c, 0xc1, 0xfd, 0x56, 0xe0, 0x0f, 0xb8, 0x4f, 0xed, 0xc5, 0xd5, 0xbe, + 0x15, 0x87, 0xa1, 0xbc, 0x9e, 0xe0, 0x56, 0x1c, 0x4a, 0x86, 0xfe, 0x75, + 0xee, 0xca, 0xf5, 0x56, 0xbb, 0xe4, 0x67, 0x72, 0x02, 0xc2, 0x72, 0x1f, + 0x1e, 0x2c, 0xc0, 0xa2, 0xfa, 0x34, 0x51, 0xa7, 0xb0, 0x83, 0xba, 0xf2, + 0xb5, 0xed, 0x93, 0xc7, 0x43, 0xab, 0xec, 0x72, 0x74, 0x6a, 0xbb, 0x19, + 0xce, 0x11, 0x97, 0x0e, 0x8b, 0x2c, 0x3e, 0x69, 0x18, 0x82, 0x2f, 0x08, + 0x53, 0xe3, 0xc5, 0xab, 0xa6, 0x64, 0x40, 0xe8, 0x81, 0x25, 0x7d, 0x63, + 0x42, 0xb1, 0xf5, 0x95, 0xfd, 0x98, 0x56, 0x11, 0x8a, 0xaf, 0x96, 0x86, + 0x87, 0x9b, 0x32, 0x32, 0x95, 0x43, 0x3e, 0x61, 0xec, 0x87, 0x72, 0x39, + 0xe9, 0x41, 0x08, 0xa4, 0x18, 0x0f, 0x83, 0x61, 0x01, 0xf2, 0xd2, 0x88, + 0x44, 0x88, 0xe4, 0xb4, 0x85, 0x3c, 0x7b, 0xb3, 0xee, 0x16, 0x8d, 0xc4, + 0x5b, 0x0c, 0x84, 0x6d, 0xa1, 0x5f, 0xb2, 0xe2, 0xc3, 0xfa, 0x4e, 0xcf, + 0xa6, 0x4b, 0x36, 0xe5, 0x37, 0x94, 0x1c, 0x52, 0x09, 0x44, 0x7b, 0xe8, + 0xf0, 0x9d, 0xd5, 0x7c, 0x52, 0x81, 0xe2, 0x7a, 0xb1, 0x68, 0xe0, 0x19, + 0x5e, 0x2f, 0x49, 0x1f, 0x0f, 0xc5, 0x43, 0xda, 0x0e, 0xb0, 0xbf, 0xcf, + 0x10, 0x13, 0xe0, 0x35, 0x81, 0xff, 0x23, 0x51, 0x1c, 0x45, 0x4a, 0x5d, + 0x92, 0x57, 0xb8, 0x9c, 0x97, 0xca, 0x29, 0x4a, 0xb3, 0x7a, 0xb3, 0xea, + 0x62, 0xf9, 0x6f, 0x39, 0x45, 0xe0, 0x8b, 0xb5, 0xfc, 0x86, 0x16, 0xa6, + 0x7d, 0xd2, 0x40, 0xe6, 0x0e, 0x11, 0xe2, 0x66, 0xac, 0xab, 0xdd, 0x56, + 0xa5, 0x41, 0x1f, 0xc5, 0x0e, 0xb0, 0x7a, 0x01, 0xb6, 0x2c, 0x3f, 0x18, + 0x66, 0x38, 0x92, 0x5b, 0x18, 0x96, 0xc0, 0x9a, 0x6b, 0x0c, 0xd5, 0xff, + 0xb3, 0x47, 0x7c, 0xaa, 0xdc, 0x92, 0x2a, 0xbc, 0x17, 0x37, 0xe9, 0x4a, + 0xb0, 0xe7, 0x83, 0xef, 0x39, 0xb9, 0xa4, 0xdf, 0x6c, 0xdf, 0xa0, 0x52, + 0x1f, 0x93, 0x28, 0x47, 0xcf, 0x37, 0x16, 0xb9, 0xc7, 0xbe, 0x46, 0x75, + 0xce, 0xe8, 0xde, 0xf8, 0x44, 0x1d, 0x0d, 0x2a, 0x3e, 0xc6, 0xc5, 0x96, + 0x99, 0xa0, 0x54, 0x9a, 0xb7, 0x12, 0x65, 0x07, 0x5a, 0x6f, 0xf3, 0x2a, + 0x05, 0xbe, 0x1e, 0x80, 0x57, 0x0c, 0xb9, 0xd8, 0xc2, 0x95, 0x21, 0x68, + 0x60, 0x63, 0x1a, 0xfb, 0x13, 0x04, 0x14, 0x2c, 0xf4, 0x15, 0x47, 0x41, + 0xb0, 0x56, 0xb9, 0x01, 0x76, 0x7e, 0xf2, 0x22, 0x30, 0x3f, 0x4f, 0x9a, + 0x1a, 0xb9, 0xf0, 0xae, 0xc6, 0x2f, 0xfc, 0x18, 0x20, 0x66, 0xe6, 0x4a, + 0x0f, 0x4f, 0x7a, 0xd8, 0x12, 0xea, 0xc9, 0xa4, 0xa5, 0x2c, 0x5d, 0xef, + 0x48, 0xb8, 0xf4, 0x16, 0x80, 0x5a, 0xf6, 0x6f, 0x31, 0x43, 0x07, 0xf9, + 0xeb, 0x76, 0xcb, 0xc5, 0x4c, 0xc1, 0x93, 0xc2, 0xfb, 0x18, 0x25, 0xad, + 0xc5, 0x19, 0xce, 0x57, 0xd1, 0xbd, 0x6e, 0xdb, 0xf0, 0x93, 0xee, 0xfe, + 0x86, 0x19, 0x28, 0xa9, 0xfa, 0x40, 0x4f, 0x13, 0x4f, 0x1f, 0x51, 0xfd, + 0xd3, 0x9e, 0xc4, 0xf7, 0xfb, 0x3e, 0x35, 0xb7, 0x5d, 0x94, 0x97, 0x65, + 0xd2, 0xea, 0x30, 0x5d, 0xf4, 0x38, 0x7e, 0x24, 0x55, 0x6f, 0x74, 0xf4, + 0x07, 0x75, 0xc9, 0x4f, 0x0e, 0x56, 0xf7, 0xd9, 0xcf, 0x19, 0xa4, 0xeb, + 0x59, 0xf1, 0x23, 0x12, 0xa2, 0xe2, 0x70, 0x72, 0x96, 0x0e, 0xbf, 0x47, + 0xc0, 0x33, 0x6d, 0xcd, 0xd2, 0x3a, 0xb2, 0x17, 0xaf, 0x3c, 0x5d, 0xff, + 0xd7, 0x7f, 0x55, 0x3b, 0x4f, 0x43, 0x74, 0x52, 0xb7, 0x6d, 0x62, 0xcf, + 0x2b, 0xca, 0x58, 0xf6, 0xbe, 0x65, 0x62, 0x74, 0xbf, 0xcc, 0xf1, 0x37, + 0xfe, 0x5c, 0x23, 0x60, 0x6f, 0x96, 0x32, 0x5f, 0x35, 0x6a, 0xcf, 0x71, + 0xac, 0xe7, 0x64, 0xe1, 0xc6, 0xe1, 0x25, 0x4e, 0x1d, 0xbb, 0xf7, 0x4b, + 0xf2, 0xf2, 0x0c, 0x91, 0x42, 0x41, 0x79, 0xc6, 0xbc, 0x19, 0x89, 0xf4, + 0x44, 0x6a, 0x7d, 0x73, 0xfd, 0x45, 0x4d, 0x24, 0x15, 0xce, 0xe4, 0x37, + 0x2d, 0xdf, 0xcb, 0x87, 0x26, 0x96, 0x1d, 0x9f, 0x5b, 0x73, 0xc6, 0x51, + 0x4f, 0x77, 0xf0, 0xf1, 0x0e, 0x3c, 0xfc, 0xfc, 0x1d, 0xbd, 0xfd, 0xc2, + 0xe5, 0x9b, 0xb8, 0xe2, 0xa6, 0x6f, 0xfb, 0xbe, 0x5e, 0xfe, 0xac, 0xbe, + 0x7f, 0xf8, 0x19, 0x1f, 0xfd, 0xd4, 0x57, 0xf8, 0xba, 0xdf, 0xf3, 0x57, + 0xbf, 0xce, 0x3c, 0xde, 0xf3, 0x25, 0xcf, 0x78, 0x07, 0xcf, 0x79, 0xe0, + 0xd1, 0x27, 0x9f, 0x7b, 0xf1, 0x97, 0xf0, 0x2f, 0xe8, 0x42, 0x09, 0x38, + 0xe2, 0xb8, 0x84, 0x0d, 0xbc, 0xc9, 0xe9, 0xc4, 0x3f, 0xf1, 0x29, 0xe2, + 0xad, 0xe6, 0x83, 0x95, 0xbe, 0xe9, 0x64, 0xb7, 0xfe, 0xb3, 0x2c, 0xeb, + 0x2b, 0xee, 0x71, 0xf7, 0xca, 0x12, 0x65, 0x48, 0x56, 0x28, 0x2b, 0xc7, + 0x7a, 0xec, 0xc0, 0x01, 0xdc, 0x8e, 0x7b, 0xf1, 0x10, 0x3e, 0x84, 0x27, + 0xf0, 0x69, 0x7c, 0x11, 0xcf, 0xe2, 0xc5, 0xb5, 0x3d, 0x5b, 0xd8, 0xe8, + 0x14, 0x80, 0xaf, 0x85, 0xf3, 0x6c, 0x99, 0x17, 0x1d, 0xb3, 0xf1, 0x3e, + 0xbb, 0x2d, 0x6e, 0x04, 0xe3, 0x99, 0x08, 0xde, 0x4f, 0x83, 0xdb, 0x25, + 0xe0, 0x9b, 0x1f, 0xf2, 0x13, 0x61, 0x29, 0xc6, 0xa6, 0xbf, 0x59, 0x8d, + 0x26, 0xd1, 0xd3, 0xd5, 0x35, 0xdc, 0x42, 0x4e, 0xf4, 0xec, 0xb9, 0xd9, + 0xbd, 0x5d, 0xef, 0x1a, 0x78, 0x95, 0xad, 0x29, 0x1a, 0xa4, 0x18, 0xd2, + 0x1e, 0x6b, 0xa5, 0xac, 0xa6, 0x68, 0x6f, 0x4b, 0x63, 0xb4, 0xa9, 0x3f, + 0x49, 0xf3, 0x18, 0xb2, 0x91, 0x70, 0x0b, 0x4d, 0x2f, 0x4c, 0x66, 0x98, + 0x25, 0x57, 0x7c, 0x64, 0xb9, 0x4a, 0xf3, 0x71, 0x3d, 0xaf, 0x32, 0x1a, + 0xf8, 0xb7, 0xbc, 0x8d, 0x2a, 0x1b, 0xa8, 0x30, 0x1f, 0x53, 0xca, 0xeb, + 0xe3, 0xf3, 0xd4, 0x8f, 0xa9, 0xac, 0xbf, 0xb4, 0x6a, 0xa8, 0x16, 0xe4, + 0x75, 0x5a, 0x2b, 0xd7, 0xeb, 0x76, 0xc4, 0x0a, 0xb3, 0x65, 0xee, 0x85, + 0xe7, 0x79, 0x4d, 0xa4, 0xe5, 0xd8, 0x28, 0x31, 0x7f, 0xd9, 0xd9, 0xac, + 0x61, 0x68, 0xf0, 0x05, 0x86, 0x4a, 0xb9, 0x2d, 0x48, 0xcf, 0x30, 0x9e, + 0x3e, 0x33, 0x83, 0x51, 0x1b, 0xd8, 0xc5, 0x1e, 0x67, 0x7c, 0x7a, 0x98, + 0x2b, 0x8e, 0xf9, 0xdf, 0x3c, 0xe2, 0xcb, 0x76, 0x15, 0x95, 0x33, 0x6d, + 0xa1, 0x35, 0xba, 0x41, 0x03, 0x9a, 0xac, 0xd7, 0x13, 0x24, 0x7e, 0xc9, + 0x2b, 0xcb, 0x8f, 0x6c, 0xa6, 0x1a, 0x02, 0x7b, 0xc8, 0xa1, 0xff, 0x24, + 0x6d, 0x90, 0xc3, 0x42, 0x52, 0x6f, 0x44, 0xac, 0x59, 0x5e, 0x2b, 0x07, + 0x3a, 0xec, 0x96, 0x78, 0xed, 0x69, 0x50, 0x50, 0xf8, 0x00, 0xce, 0xf2, + 0x7a, 0x79, 0xbf, 0xc3, 0x39, 0x9b, 0x6d, 0x1e, 0xba, 0x7f, 0x15, 0xe2, + 0x5c, 0xe6, 0xa7, 0x42, 0x69, 0x2a, 0xd0, 0xa7, 0xd2, 0xb1, 0x98, 0x77, + 0xa5, 0x8c, 0x52, 0x38, 0xeb, 0xa7, 0x16, 0x9e, 0x89, 0x7e, 0x4a, 0x59, + 0xdf, 0x3c, 0xd6, 0x2f, 0xdc, 0xb3, 0x68, 0xad, 0x97, 0x96, 0x0e, 0xbf, + 0x83, 0xf5, 0x48, 0xc3, 0xa2, 0xc2, 0x90, 0x7e, 0x24, 0x5a, 0xa4, 0x38, + 0xfb, 0xca, 0xaf, 0x58, 0x5d, 0x3d, 0x75, 0xd7, 0x9e, 0xb6, 0x3a, 0x1b, + 0x98, 0x48, 0xbb, 0xe9, 0x1a, 0x12, 0x74, 0xab, 0x6c, 0x03, 0x57, 0xe8, + 0xea, 0x62, 0x4a, 0x9d, 0xd3, 0x7f, 0x09, 0x13, 0x97, 0x84, 0x15, 0x38, + 0x3e, 0xb3, 0xb0, 0xb1, 0xbb, 0xc5, 0x9e, 0x28, 0x0e, 0x84, 0x96, 0x57, + 0x23, 0x29, 0x18, 0x96, 0x29, 0x96, 0x74, 0x48, 0x32, 0x45, 0xcc, 0xf7, + 0x84, 0x5e, 0x45, 0xc9, 0xdf, 0x23, 0x2a, 0xd2, 0x86, 0x54, 0xe5, 0x4c, + 0xdb, 0x22, 0x96, 0x02, 0xe1, 0x7f, 0x8e, 0x5f, 0x93, 0x9b, 0x0e, 0x81, + 0x1e, 0xc9, 0x55, 0x94, 0x89, 0x61, 0x37, 0x31, 0x21, 0xdf, 0xb9, 0xba, + 0x73, 0x01, 0x34, 0x09, 0x7a, 0x29, 0x46, 0xf7, 0xcd, 0x6c, 0xdc, 0x44, + 0xb3, 0xb8, 0xaa, 0xa8, 0x41, 0xe6, 0x8b, 0x07, 0xd9, 0x97, 0xab, 0xd4, + 0x88, 0x61, 0xa0, 0x5e, 0x48, 0x1e, 0xae, 0x69, 0xe6, 0x8e, 0x96, 0xa1, + 0xdc, 0x42, 0x4b, 0xcb, 0x9c, 0x67, 0xd5, 0xb7, 0x4d, 0xbf, 0x63, 0xb5, + 0x90, 0xef, 0x9a, 0xfa, 0x33, 0x28, 0x08, 0x0d, 0xe8, 0x44, 0x06, 0x04, + 0xf3, 0x08, 0x8e, 0x5c, 0xcc, 0x6a, 0x19, 0x74, 0x8d, 0xf1, 0x78, 0xd3, + 0xf4, 0xea, 0x77, 0x84, 0x86, 0x30, 0xff, 0xf3, 0xde, 0x91, 0x98, 0xb1, + 0x59, 0x68, 0x9a, 0xe8, 0xe9, 0xd2, 0x94, 0xc2, 0xb4, 0x86, 0xf0, 0x72, + 0x4a, 0x9d, 0xd0, 0x8c, 0xb9, 0xc0, 0xe8, 0xcd, 0x14, 0xcb, 0xfb, 0x3f, + 0xd0, 0x48, 0xac, 0xba, 0x7e, 0x1e, 0xb2, 0x18, 0xe1, 0xba, 0x78, 0x97, + 0x9e, 0xe0, 0x6c, 0x65, 0x8e, 0x66, 0xbb, 0xfd, 0xcd, 0x36, 0x00, 0xfb, + 0xe6, 0x54, 0x85, 0x21, 0x2c, 0x7b, 0x49, 0xaf, 0xee, 0x44, 0x6e, 0xa9, + 0xc7, 0xdd, 0x1c, 0x6a, 0x7b, 0xa8, 0x39, 0xe8, 0x45, 0xd7, 0x52, 0xb4, + 0xa8, 0xb2, 0x31, 0xc5, 0x8e, 0x3a, 0x79, 0x9c, 0xcb, 0x3d, 0x82, 0x93, + 0x97, 0x78, 0x0f, 0x99, 0x2a, 0xd6, 0x61, 0xd4, 0xdf, 0xd9, 0xa6, 0x6f, + 0xe3, 0xca, 0x52, 0x1a, 0x73, 0x28, 0x67, 0x6e, 0x7d, 0x00, 0x5b, 0x54, + 0x77, 0xac, 0x24, 0xbb, 0x79, 0x75, 0x39, 0x20, 0x97, 0xdd, 0xe5, 0x87, + 0x4e, 0xa3, 0x98, 0x31, 0x5f, 0x9b, 0xb7, 0x02, 0xd7, 0x59, 0x21, 0x82, + 0x13, 0x2e, 0x27, 0x6d, 0x53, 0xdc, 0x43, 0x1e, 0xaa, 0x98, 0x7e, 0xde, + 0xad, 0x1d, 0x15, 0x61, 0xbb, 0xef, 0x1b, 0x88, 0x5f, 0x9c, 0x82, 0x53, + 0x80, 0xde, 0x74, 0x66, 0xda, 0x83, 0x39, 0x8a, 0xf4, 0xbe, 0x0c, 0x79, + 0x7d, 0xa3, 0xd7, 0xba, 0x45, 0x9a, 0xa9, 0x2a, 0xf5, 0x19, 0x5b, 0x7b, + 0x5c, 0x5b, 0xa2, 0x7d, 0x89, 0xf5, 0xde, 0xc9, 0x6a, 0xa0, 0x48, 0xfe, + 0x7a, 0x98, 0xd1, 0x5f, 0xb8, 0x8b, 0x18, 0x1a, 0x10, 0x9b, 0xdb, 0x1a, + 0xba, 0x73, 0x61, 0x6e, 0x5b, 0xb8, 0xc0, 0x63, 0xaf, 0xc9, 0x71, 0x06, + 0x73, 0x4f, 0xdb, 0x85, 0x7c, 0x54, 0xea, 0x2a, 0x07, 0x17, 0x1c, 0xed, + 0xab, 0x0f, 0x4c, 0xbc, 0xdf, 0xc5, 0xba, 0x53, 0xa7, 0x52, 0x7c, 0x3d, + 0x53, 0xdf, 0x5e, 0x8c, 0x14, 0x97, 0xef, 0x40, 0xd8, 0x49, 0x1b, 0x6d, + 0x71, 0x0e, 0xde, 0xa0, 0x63, 0xb6, 0xdf, 0xb2, 0x2e, 0xdf, 0x8e, 0xc1, + 0xc6, 0xef, 0x1e, 0xd6, 0x4b, 0x74, 0xe1, 0x61, 0x9c, 0xd5, 0x17, 0xef, + 0x2c, 0x5b, 0x63, 0x14, 0x27, 0x9c, 0x32, 0x2f, 0x6a, 0xae, 0xec, 0x0e, + 0x10, 0xea, 0x07, 0x6a, 0x54, 0x79, 0x16, 0x78, 0x51, 0x11, 0xf7, 0x60, + 0x80, 0x0a, 0x30, 0x27, 0x9d, 0x77, 0xab, 0x7c, 0xad, 0x24, 0xcb, 0x09, + 0x46, 0xf0, 0x07, 0x00, 0x2a, 0x73, 0x9c, 0x6e, 0x33, 0x6b, 0xcd, 0xad, + 0x11, 0xe6, 0x92, 0xc5, 0x3b, 0x89, 0x2a, 0xee, 0x4a, 0x6b, 0x73, 0x3f, + 0x7d, 0xcb, 0xaa, 0x3c, 0x07, 0x8e, 0xb1, 0x5e, 0xe4, 0x43, 0x3c, 0x80, + 0x15, 0xfd, 0xed, 0x83, 0xbe, 0x2a, 0xe8, 0x5b, 0x54, 0xa0, 0x1b, 0x60, + 0x1b, 0xd4, 0xff, 0xe4, 0xa6, 0x16, 0x2b, 0x83, 0xfe, 0x34, 0xd4, 0xb1, + 0xbb, 0x1e, 0x08, 0x36, 0x43, 0xaa, 0xd8, 0xa1, 0xb8, 0x65, 0x70, 0x5a, + 0x58, 0x01, 0x82, 0x97, 0xd0, 0xec, 0xbf, 0x00, 0x5f, 0x58, 0x75, 0x73, + 0xfc, 0x0c, 0xca, 0xfe, 0xf0, 0xb3, 0xbb, 0xa9, 0x66, 0x41, 0x18, 0x6e, + 0xd8, 0xdb, 0x41, 0x52, 0x93, 0x47, 0xa2, 0x27, 0x51, 0xff, 0xb6, 0x40, + 0x22, 0x07, 0x9f, 0x8d, 0x65, 0x77, 0x1a, 0x92, 0x08, 0xfa, 0x50, 0x5b, + 0x7a, 0x31, 0x40, 0x0e, 0x7c, 0x0a, 0x75, 0x18, 0x92, 0xf3, 0xc4, 0x07, + 0xc0, 0x30, 0xb6, 0x52, 0xc3, 0x2c, 0xdb, 0x4b, 0x0d, 0x04, 0x4c, 0x3e, + 0x34, 0x23, 0xb4, 0x7f, 0x9f, 0xe1, 0x9c, 0x57, 0xd0, 0xa1, 0xf8, 0xa5, + 0xf4, 0xd0, 0x0b, 0xab, 0x0a, 0x1d, 0xd7, 0x1c, 0x0b, 0x26, 0x1b, 0xcc, + 0xf3, 0xc1, 0x62, 0x80, 0xa5, 0x0d, 0x74, 0x20, 0x3b, 0x11, 0x4c, 0x24, + 0x0d, 0xb3, 0xf6, 0xb4, 0x5e, 0xda, 0x11, 0xb0, 0xd6, 0x36, 0x35, 0xa9, + 0x62, 0xc6, 0xb2, 0x4b, 0xd0, 0x26, 0xae, 0xd0, 0x96, 0x37, 0x12, 0x9d, + 0x6b, 0x69, 0xc9, 0xf6, 0x32, 0x88, 0xbd, 0x7f, 0xbb, 0x98, 0x41, 0x35, + 0x74, 0x61, 0xca, 0x5a, 0x66, 0x4a, 0x3a, 0x7d, 0x67, 0x6c, 0x33, 0x7a, + 0xf9, 0x65, 0xad, 0x67, 0xa6, 0x4c, 0xfe, 0xec, 0x2e, 0x00, 0xda, 0x91, + 0x6c, 0xcf, 0x73, 0xc1, 0xc9, 0x26, 0x0c, 0x62, 0x80, 0x2a, 0xa2, 0xec, + 0xe2, 0xf6, 0xd3, 0x33, 0x3e, 0x71, 0x0c, 0x3d, 0x2c, 0xbb, 0xdb, 0x4d, + 0xc7, 0x69, 0xdf, 0xca, 0xe4, 0x34, 0x18, 0x22, 0x27, 0x5f, 0xe8, 0x92, + 0x83, 0x12, 0x89, 0xf1, 0xf3, 0x9a, 0x10, 0x9a, 0x0d, 0xc9, 0xdc, 0x9d, + 0xa7, 0x3a, 0xbf, 0x79, 0x95, 0x29, 0x4e, 0x9b, 0xfc, 0xa6, 0xb5, 0xc0, + 0xd3, 0x75, 0x97, 0xe3, 0x29, 0xec, 0xb1, 0xde, 0xbf, 0x63, 0x7c, 0x1d, + 0x35, 0x63, 0x9d, 0xa5, 0x29, 0x53, 0x68, 0x08, 0x0f, 0x45, 0x2a, 0xa6, + 0x01, 0x96, 0x33, 0xfa, 0x57, 0x4e, 0x2e, 0x80, 0xde, 0x01, 0x72, 0xf8, + 0x92, 0xf6, 0xff, 0x28, 0x68, 0x51, 0x58, 0x43, 0xb5, 0xf0, 0x96, 0xdb, + 0xae, 0xe7, 0xf7, 0x70, 0xb9, 0x74, 0x79, 0xec, 0x4b, 0x4a, 0xf1, 0xf2, + 0x4b, 0x76, 0x02, 0x91, 0xe3, 0x38, 0x24, 0x34, 0xfe, 0xca, 0x7f, 0x4e, + 0xb4, 0x90, 0xdf, 0x4e, 0xb0, 0x77, 0xf9, 0x43, 0xa2, 0x6b, 0xaf, 0xfe, + 0x94, 0x80, 0x7d, 0xbf, 0x9d, 0x84, 0xe9, 0xe9, 0x95, 0xaf, 0xca, 0x83, + 0xf4, 0x72, 0xef, 0xeb, 0x3d, 0xa3, 0x7b, 0x31, 0xd7, 0x8a, 0x97, 0xb0, + 0xfe, 0xf8, 0xc3, 0xde, 0xe5, 0x28, 0xce, 0x49, 0x8e, 0x0c, 0xc9, 0x63, + 0xc4, 0xff, 0xfe, 0x6c, 0x1b, 0xd6, 0xa3, 0xea, 0xe2, 0xea, 0xc2, 0xd2, + 0x20, 0x3c, 0xcf, 0xdf, 0x77, 0x6c, 0x7a, 0x68, 0x83, 0xfd, 0x8c, 0x51, + 0x3c, 0x63, 0xd3, 0xf1, 0x2f, 0x81, 0xa3, 0x81, 0xd4, 0xd1, 0x6c, 0x88, + 0x32, 0x1e, 0x3e, 0x45, 0x77, 0xb4, 0x64, 0x3a, 0x46, 0x2c, 0x58, 0x55, + 0xf8, 0xe6, 0x4e, 0xaf, 0x25, 0xd2, 0xda, 0x74, 0x0c, 0xb2, 0x8b, 0x5a, + 0x69, 0xa7, 0x96, 0xee, 0xb9, 0x6a, 0xa7, 0x05, 0x56, 0xb5, 0x40, 0xed, + 0xa5, 0xc5, 0xb6, 0x5a, 0xb0, 0xc7, 0xed, 0x1d, 0x13, 0xac, 0x4f, 0x48, + 0x09, 0x05, 0xf2, 0x74, 0x32, 0xc6, 0x38, 0xfa, 0xf8, 0xc7, 0x02, 0x2a, + 0x96, 0x18, 0xcf, 0xab, 0x18, 0x40, 0xc6, 0x9d, 0x85, 0x0a, 0x8f, 0xce, + 0xaa, 0x2c, 0xca, 0xdf, 0x0b, 0x26, 0x55, 0x43, 0x95, 0xb0, 0xb9, 0x28, + 0xce, 0x90, 0x65, 0xc5, 0xad, 0xc5, 0x37, 0xcb, 0x8e, 0x40, 0xde, 0x05, + 0xb7, 0x89, 0xae, 0xc9, 0xe7, 0xa8, 0x3c, 0x91, 0x8c, 0x33, 0x53, 0xda, + 0xc5, 0x75, 0x82, 0xd7, 0xbd, 0xc2, 0xe4, 0x7e, 0x6c, 0xb5, 0x50, 0x33, + 0xb5, 0x1b, 0xae, 0xf7, 0xe5, 0xa7, 0xc0, 0x52, 0x80, 0x77, 0x9a, 0xb4, + 0xac, 0x7a, 0xd2, 0x77, 0x8a, 0x4b, 0x8d, 0xe9, 0x1b, 0x6f, 0x57, 0x2a, + 0x7e, 0x18, 0x10, 0x64, 0x55, 0xf4, 0x72, 0x60, 0xdb, 0xb0, 0x17, 0x63, + 0x9c, 0xa3, 0x52, 0x6d, 0x7e, 0x01, 0xac, 0xbf, 0x43, 0x1c, 0xc9, 0xa8, + 0x4d, 0xe2, 0x7f, 0xda, 0xb1, 0x07, 0x16, 0xb1, 0x3c, 0xdd, 0x18, 0xa1, + 0xb3, 0x3c, 0xd3, 0x1d, 0x43, 0x91, 0x4f, 0x0f, 0x7a, 0x42, 0xa6, 0x5e, + 0xc0, 0x60, 0xa1, 0x91, 0x33, 0x2e, 0x86, 0xf1, 0x66, 0xea, 0x94, 0x16, + 0xfc, 0x42, 0x2d, 0xba, 0x79, 0xc7, 0xd4, 0xb9, 0x01, 0xd3, 0x43, 0x95, + 0xbf, 0x47, 0x91, 0x91, 0x4f, 0xd7, 0xb7, 0x0b, 0xd5, 0x0f, 0x18, 0x9c, + 0xa6, 0x68, 0x29, 0xbb, 0x62, 0x20, 0xfb, 0xba, 0xa5, 0xa1, 0xb8, 0x46, + 0x9e, 0x1f, 0x07, 0xb9, 0x03, 0x51, 0x33, 0xff, 0x8d, 0x88, 0xe5, 0x5d, + 0x42, 0x35, 0x13, 0xb8, 0x47, 0x6b, 0x90, 0xae, 0x75, 0xdb, 0x75, 0x97, + 0x01, 0x7a, 0x7a, 0x5c, 0x26, 0x52, 0x28, 0x8d, 0xde, 0x51, 0x12, 0xaa, + 0xbd, 0x15, 0x9d, 0x80, 0x1d, 0x4e, 0xae, 0x4a, 0xd5, 0x3f, 0x21, 0x91, + 0x06, 0x80, 0xe6, 0x0e, 0xa3, 0x67, 0x70, 0xed, 0x9d, 0x7a, 0x19, 0x00, + 0xf7, 0x15, 0x4d, 0x00, 0x9b, 0x4b, 0x6b, 0x06, 0x6a, 0xd9, 0x55, 0x83, + 0x7c, 0x99, 0xd3, 0x62, 0x8d, 0x89, 0x5c, 0xc0, 0x96, 0x03, 0x5a, 0x38, + 0x98, 0xcf, 0x85, 0xae, 0x72, 0x5f, 0x3b, 0xf3, 0x8e, 0x83, 0xc1, 0xd8, + 0xd1, 0xea, 0x2e, 0xc6, 0xf0, 0x3d, 0x86, 0x9d, 0x4f, 0xc3, 0x1b, 0xaf, + 0xf9, 0x17, 0xe6, 0x30, 0x24, 0xae, 0xb0, 0x57, 0x28, 0x7b, 0x78, 0x79, + 0x39, 0xeb, 0xe7, 0x6e, 0x94, 0x5a, 0x16, 0xe7, 0x38, 0x33, 0x35, 0x4f, + 0xa0, 0x4e, 0x32, 0xfd, 0xbc, 0xaf, 0xa5, 0x19, 0x9c, 0x50, 0x02, 0xb9, + 0x37, 0xfe, 0xb6, 0xb4, 0x03, 0xd8, 0x55, 0x87, 0x8b, 0xce, 0xdf, 0xe3, + 0x36, 0x66, 0x05, 0x8e, 0xa6, 0x5d, 0x4d, 0x87, 0xb5, 0xf5, 0xf6, 0x27, + 0xf9, 0x9d, 0xd2, 0x02, 0xfd, 0x7e, 0x07, 0xa9, 0x03, 0x6d, 0x4d, 0xd2, + 0xce, 0x5b, 0xe7, 0xdf, 0xa2, 0xce, 0x98, 0x37, 0x4f, 0x7a, 0x19, 0x24, + 0x95, 0xd8, 0xee, 0xac, 0x20, 0x9f, 0xec, 0xc8, 0xdf, 0x8d, 0x1e, 0xb2, + 0xde, 0xc6, 0x05, 0xd9, 0x72, 0x34, 0x26, 0xac, 0xb2, 0x2b, 0xed, 0x03, + 0x2d, 0xd9, 0xe9, 0x0d, 0x0f, 0xef, 0xe8, 0x06, 0x60, 0x51, 0xda, 0x76, + 0xc9, 0xff, 0xe7, 0x36, 0x67, 0x7f, 0x5d, 0xb4, 0x99, 0x68, 0xbe, 0x95, + 0xe1, 0x44, 0x8e, 0x55, 0x83, 0x1e, 0x11, 0xf2, 0x11, 0x7f, 0x03, 0x6f, + 0xcf, 0x38, 0x62, 0xd0, 0xb3, 0x21, 0x76, 0x9f, 0xf7, 0x7c, 0x4d, 0x47, + 0xcf, 0x9c, 0x38, 0x7e, 0x90, 0x5f, 0x03, 0x42, 0x9c, 0xc0, 0xf8, 0x57, + 0x8a, 0x05, 0xb0, 0xbf, 0xf0, 0x39, 0xf8, 0x46, 0x81, 0x9f, 0xde, 0xdf, + 0x8e, 0xd9, 0x8c, 0x13, 0x8d, 0xb6, 0xdd, 0x0d, 0x3f, 0x63, 0x33, 0x2b, + 0xb1, 0xc9, 0x9b, 0x1c, 0xaa, 0xf7, 0x4e, 0x1f, 0x1b, 0x47, 0x95, 0xcd, + 0xfe, 0x76, 0xf7, 0xa5, 0xe9, 0x10, 0xd4, 0x46, 0x3a, 0x1e, 0xfc, 0x5d, + 0x0e, 0xc6, 0x19, 0x30, 0x74, 0xc4, 0xfc, 0x8c, 0x5f, 0x1d, 0x22, 0xbe, + 0x44, 0xcb, 0x71, 0x05, 0x2c, 0x10, 0x70, 0x78, 0x0b, 0x62, 0x48, 0x47, + 0xc6, 0x47, 0xdf, 0xdc, 0x38, 0xff, 0x95, 0xbe, 0xbd, 0x7b, 0x21, 0x91, + 0x14, 0x39, 0x91, 0xbe, 0x03, 0x26, 0x61, 0x1a, 0x9b, 0xeb, 0x2f, 0x4e, + 0x92, 0x8d, 0xf9, 0xac, 0xc9, 0x93, 0x05, 0x6b, 0x58, 0xf8, 0xfd, 0x94, + 0x3d, 0x9d, 0x70, 0xfa, 0x0a, 0xd4, 0xaf, 0xa9, 0x75, 0x8a, 0x9d, 0xfd, + 0x69, 0x40, 0xba, 0xc8, 0x1d, 0x55, 0x55, 0x5d, 0x92, 0x05, 0x93, 0x7a, + 0x47, 0x2c, 0xf4, 0x6e, 0x2f, 0x78, 0x04, 0xa5, 0x1e, 0x96, 0xc9, 0xf1, + 0xa0, 0xd4, 0xd0, 0x40, 0xd0, 0xf5, 0x67, 0x9b, 0x93, 0x15, 0x63, 0x25, + 0x2a, 0xaf, 0x66, 0x57, 0x51, 0x33, 0xdd, 0x8d, 0x5d, 0x66, 0x1e, 0xd3, + 0x8d, 0x30, 0x4f, 0xa7, 0x13, 0x7e, 0x88, 0xd2, 0xaa, 0x46, 0x63, 0xb6, + 0x23, 0xc0, 0xab, 0xf7, 0x4e, 0x65, 0x4b, 0xf1, 0x36, 0x0e, 0x14, 0x99, + 0x36, 0x4b, 0x09, 0x50, 0x37, 0x74, 0x63, 0xae, 0x6b, 0x28, 0x08, 0x29, + 0xb8, 0xe5, 0x78, 0xa4, 0x57, 0xb7, 0x02, 0xaa, 0xab, 0xda, 0x11, 0xab, + 0xac, 0x21, 0xd9, 0xd5, 0xb6, 0x50, 0x01, 0xa4, 0x4a, 0xb9, 0x77, 0x3a, + 0xca, 0x48, 0x07, 0x5e, 0xec, 0xa8, 0x39, 0x2d, 0x84, 0x05, 0x56, 0xed, + 0xca, 0x51, 0x21, 0xc2, 0x3b, 0xc7, 0x19, 0xf0, 0x00, 0xf4, 0xbd, 0x75, + 0x30, 0x12, 0xe4, 0xeb, 0x29, 0x91, 0x47, 0x40, 0x43, 0xe1, 0x76, 0x57, + 0xe2, 0x20, 0x14, 0xd1, 0x0a, 0xa3, 0xed, 0x2f, 0xdc, 0xf9, 0x79, 0x87, + 0x60, 0xc7, 0x85, 0xbf, 0xcf, 0x31, 0xdd, 0xc9, 0x62, 0xcc, 0xc6, 0xfb, + 0x3a, 0x03, 0xb2, 0x52, 0xd5, 0x9c, 0xa4, 0xda, 0xc1, 0x61, 0x94, 0x6b, + 0x9d, 0x33, 0x27, 0xea, 0xd7, 0x0b, 0xb3, 0xf7, 0x26, 0x50, 0x04, 0x4e, + 0xbf, 0xae, 0x3b, 0x0d, 0x16, 0x8e, 0xa6, 0xcf, 0x83, 0xaf, 0x8c, 0x4d, + 0xb9, 0xce, 0xbc, 0xdf, 0xb5, 0x84, 0x53, 0x98, 0xee, 0xef, 0xeb, 0xc9, + 0xcc, 0x93, 0x42, 0xf2, 0x4e, 0x53, 0x2f, 0x46, 0x03, 0x6b, 0x7f, 0xf7, + 0x47, 0x84, 0x6f, 0xcc, 0x6e, 0xb4, 0x3d, 0xb1, 0x3e, 0xfd, 0x43, 0xcc, + 0xb4, 0xd7, 0x0d, 0x9f, 0x83, 0x31, 0x4f, 0x40, 0x12, 0x11, 0x49, 0xa7, + 0x99, 0xfb, 0xe4, 0xb1, 0x02, 0x2c, 0xac, 0x6d, 0x7d, 0x6a, 0x14, 0xb7, + 0x54, 0xdd, 0x74, 0x49, 0x79, 0x9f, 0xfa, 0xd7, 0xb2, 0xdc, 0xfb, 0x67, + 0x4c, 0x6c, 0x12, 0xcc, 0xe1, 0x77, 0x42, 0x47, 0x58, 0x97, 0x7e, 0x65, + 0x83, 0x18, 0xe1, 0xab, 0x6a, 0xc6, 0xfb, 0xc5, 0x77, 0xfd, 0xcb, 0x5f, + 0x15, 0xeb, 0xdf, 0x7a, 0x7e, 0x85, 0x49, 0x1d, 0xe9, 0xf9, 0xd9, 0x74, + 0x5c, 0x56, 0xcc, 0xfc, 0x78, 0x61, 0x33, 0x89, 0x09, 0xdf, 0x16, 0xea, + 0xe3, 0xf3, 0x87, 0xdf, 0xa2, 0x2a, 0x0c, 0x00, 0xbf, 0x58, 0x4d, 0xdc, + 0x31, 0x2b, 0x33, 0xec, 0x46, 0xf4, 0x53, 0x55, 0x6d, 0xe7, 0x54, 0xb5, + 0xd0, 0x00, 0xce, 0xea, 0xbd, 0x78, 0x94, 0xea, 0x95, 0x62, 0x75, 0x16, + 0xbf, 0x9a, 0x3e, 0xff, 0xc4, 0x9a, 0xfc, 0xa0, 0x0b, 0x57, 0x4b, 0x45, + 0x59, 0xf6, 0xae, 0x6c, 0x94, 0x1f, 0xa3, 0x03, 0xbe, 0x27, 0x36, 0x70, + 0xa4, 0x8b, 0x27, 0x0c, 0xd5, 0xe0, 0xcf, 0x3a, 0x95, 0x6b, 0x6e, 0xa0, + 0xfa, 0x0a, 0x6e, 0x04, 0x23, 0x0c, 0x1b, 0x77, 0x75, 0x36, 0xbf, 0x39, + 0xfe, 0x32, 0xd1, 0x71, 0x3f, 0x7d, 0x73, 0x28, 0x30, 0x40, 0x3f, 0xe9, + 0x36, 0x30, 0x18, 0x2f, 0xb4, 0x26, 0xee, 0x87, 0x2b, 0x7e, 0xe0, 0x68, + 0x71, 0x9c, 0x8e, 0xa7, 0xa8, 0xda, 0xa0, 0x52, 0xfe, 0x83, 0xc9, 0x62, + 0x6e, 0x4e, 0x76, 0xd9, 0xbc, 0x3b, 0x1f, 0xf6, 0xce, 0x36, 0x3b, 0xe1, + 0xc7, 0xf8, 0xea, 0x6f, 0xe9, 0x89, 0xd0, 0x2f, 0x08, 0x4d, 0xf0, 0xcc, + 0x0c, 0x53, 0xf7, 0xd9, 0x9c, 0x59, 0xcf, 0x40, 0xc4, 0x8b, 0x66, 0x12, + 0x10, 0xf7, 0x0f, 0xc7, 0xb8, 0x63, 0xf2, 0x3d, 0xa1, 0x3c, 0xce, 0x07, + 0x89, 0x9a, 0x5e, 0x39, 0x4b, 0xb9, 0xf9, 0x3f, 0xb0, 0xef, 0x94, 0x70, + 0xd6, 0x8c, 0xe7, 0xa6, 0x91, 0x9b, 0x96, 0x7e, 0xd0, 0x0f, 0xe9, 0x3c, + 0xf8, 0x56, 0x8a, 0x1d, 0xbd, 0xbd, 0x39, 0xb6, 0xa3, 0xeb, 0x95, 0x3a, + 0x94, 0x04, 0x12, 0xf9, 0x84, 0xd0, 0x7d, 0x26, 0xd8, 0xef, 0x1e, 0x7d, + 0xa3, 0x4a, 0xa9, 0x63, 0x87, 0xc6, 0xc6, 0x4a, 0x83, 0x61, 0x03, 0x9e, + 0x85, 0x74, 0xf3, 0x78, 0x7e, 0x9b, 0x10, 0x19, 0x17, 0xac, 0x7d, 0x4a, + 0x1a, 0xe4, 0xe1, 0x20, 0x05, 0xf7, 0x49, 0x02, 0x72, 0xeb, 0xb6, 0x55, + 0xfb, 0x14, 0x6a, 0x32, 0xe0, 0xbd, 0x2b, 0x7b, 0xfd, 0xbd, 0xcb, 0xc7, + 0x7d, 0x4b, 0xa7, 0xbf, 0x88, 0x36, 0xb9, 0x34, 0x21, 0x76, 0x9a, 0x2d, + 0xa0, 0xb9, 0xd1, 0xce, 0x2f, 0xf4, 0xf9, 0xd2, 0x90, 0x35, 0xfb, 0x2f, + 0x8c, 0x2c, 0x36, 0x8a, 0x39, 0x0a, 0xe4, 0xff, 0x9f, 0xfa, 0x63, 0x90, + 0xf3, 0x80, 0x16, 0x07, 0xd3, 0xc2, 0xb5, 0x0c, 0x43, 0x12, 0x29, 0xe8, + 0xc8, 0x65, 0x35, 0x2d, 0x0c, 0x72, 0xd1, 0xf4, 0xcc, 0xc8, 0x7c, 0x69, + 0xc1, 0x71, 0x08, 0x68, 0xa8, 0xbe, 0xe6, 0x3a, 0xc9, 0xda, 0xc4, 0xbd, + 0xf2, 0xbe, 0x6b, 0x07, 0x76, 0xec, 0x72, 0xd5, 0x54, 0x51, 0x7d, 0xe5, + 0xde, 0x5e, 0xf3, 0x65, 0x3d, 0xba, 0x0b, 0xfb, 0x40, 0x7f, 0x1d, 0xb4, + 0xa6, 0x66, 0x2e, 0x07, 0x97, 0xe0, 0x16, 0x28, 0x24, 0x8a, 0x0b, 0xb4, + 0xae, 0x22, 0x35, 0x69, 0x97, 0x5e, 0x8f, 0x0c, 0xb1, 0x26, 0xb2, 0x99, + 0x0f, 0x70, 0xa5, 0x0f, 0x98, 0xf7, 0x41, 0xec, 0x38, 0xf1, 0x12, 0x20, + 0x44, 0x84, 0x18, 0x57, 0x24, 0xc8, 0x91, 0xa7, 0x04, 0xe2, 0x1a, 0x0a, + 0xa3, 0x46, 0x87, 0x21, 0x1d, 0x66, 0xac, 0x39, 0x70, 0x41, 0x78, 0x04, + 0xc0, 0x8b, 0x0f, 0xbf, 0x7c, 0xe7, 0x17, 0x7f, 0xf9, 0x7f, 0x87, 0xd3, + 0x65, 0x75, 0x6a, 0xd2, 0x1e, 0x6b, 0x06, 0xb7, 0x76, 0x1b, 0x7e, 0x01, + 0x98, 0x9b, 0x12, 0x16, 0xec, 0x51, 0x27, 0x8e, 0x64, 0x32, 0xc8, 0x22, + 0x9f, 0x62, 0x08, 0x67, 0x4c, 0xd7, 0x0c, 0x4d, 0x57, 0xed, 0x73, 0x4c, + 0x40, 0x39, 0x49, 0x4d, 0xb4, 0x97, 0xd1, 0xbf, 0x35, 0xbc, 0x17, 0xad, + 0xb0, 0x63, 0x97, 0xad, 0x45, 0xd9, 0x7a, 0xd2, 0xfd, 0xbb, 0x6f, 0x0f, + 0x7b, 0x39, 0x9d, 0xd9, 0xab, 0xfb, 0x9d, 0xa0, 0x32, 0xed, 0xbc, 0xbb, + 0x55, 0xab, 0x0e, 0xdf, 0x51, 0x51, 0x42, 0x05, 0xaa, 0x53, 0x8b, 0x86, + 0xf4, 0x46, 0x74, 0x4b, 0xc2, 0x85, 0xc5, 0x8f, 0xf6, 0xaa, 0xdb, 0xdb, + 0x00, 0xb9, 0x3c, 0x66, 0x90, 0x73, 0x95, 0xe6, 0xb5, 0xcf, 0x82, 0xed, + 0xc1, 0x78, 0x5e, 0x7e, 0xf8, 0xf6, 0xaf, 0x92, 0x80, 0x88, 0xa4, 0x0f, + 0x9d, 0xc6, 0x74, 0x67, 0xfb, 0x16, 0x2f, 0xda, 0x45, 0x64, 0xa7, 0x60, + 0x7f, 0x5b, 0x2d, 0x22, 0x49, 0x35, 0x21, 0x31, 0x72, 0xc4, 0x64, 0x89, + 0xe2, 0x75, 0xb7, 0x0d, 0x1a, 0x30, 0x5f, 0x8f, 0xb5, 0x58, 0xcd, 0xea, + 0x55, 0xa9, 0x90, 0x11, 0x27, 0xab, 0x83, 0x9d, 0xeb, 0x4c, 0x0b, 0xda, + 0xdd, 0x48, 0xd4, 0x4a, 0xae, 0x70, 0x25, 0x56, 0x3c, 0x74, 0x21, 0xfb, + 0x3b, 0x76, 0x6a, 0x27, 0x66, 0xe3, 0x57, 0x3e, 0x78, 0xef, 0x94, 0x13, + 0xae, 0x70, 0x0a, 0x39, 0x7f, 0x34, 0x5a, 0xc9, 0xe3, 0xa3, 0xd1, 0xf0, + 0xc1, 0xfd, 0xbb, 0x3f, 0xff, 0x74, 0xfb, 0x60, 0x7f, 0xf0, 0xc6, 0xeb, + 0xaf, 0x35, 0x6c, 0xdb, 0xb2, 0xf9, 0x95, 0x97, 0x5e, 0x7c, 0xe1, 0xb9, + 0xf5, 0xf5, 0xcf, 0x3c, 0xfd, 0xd4, 0xe3, 0xeb, 0xd6, 0xac, 0x5e, 0xb9, + 0x7c, 0x19, 0x3d, 0xf6, 0xc8, 0x43, 0x0f, 0x3e, 0xb0, 0x70, 0x41, 0x6e, + 0x3a, 0x3d, 0x13, 0xe5, 0x9a, 0xc3, 0xd5, 0x43, 0x0c, 0xde, 0x8b, 0x01, + 0x1f, 0x92, 0xda, 0x92, 0xcd, 0x9c, 0x03, 0xc2, 0x2b, 0x6e, 0x82, 0x29, + 0xc1, 0xc2, 0xb0, 0x6a, 0x04, 0x84, 0xb8, 0x81, 0x28, 0x2c, 0x75, 0xab, + 0x01, 0x53, 0x46, 0x34, 0xa3, 0xdb, 0x80, 0x94, 0x11, 0xbd, 0xe8, 0x6f, + 0x60, 0x43, 0xcf, 0x34, 0x63, 0x92, 0xd8, 0x91, 0xb2, 0x30, 0x8b, 0x15, + 0x07, 0x32, 0x4e, 0x42, 0x79, 0x53, 0x28, 0x16, 0xef, 0x84, 0x56, 0xe5, + 0xae, 0xb8, 0x6a, 0x83, 0x76, 0x1d, 0x6a, 0x74, 0xf9, 0x98, 0xba, 0x36, + 0xea, 0xf9, 0x81, 0xd1, 0x05, 0xda, 0xd4, 0x68, 0xf4, 0xd9, 0x76, 0xdb, + 0xfd, 0xb4, 0x4f, 0xbb, 0x5f, 0xab, 0x67, 0xb2, 0x21, 0x25, 0x19, 0x74, + 0x5b, 0x9c, 0xc7, 0x9e, 0x51, 0x19, 0x31, 0x26, 0x39, 0xff, 0x6b, 0x0c, + 0x9e, 0xb4, 0xf0, 0x9c, 0x4c, 0xb6, 0x80, 0xb5, 0xea, 0xb0, 0x53, 0x97, + 0x5e, 0xfb, 0xd6, 0x80, 0xd5, 0x20, 0x1e, 0x18, 0xa7, 0x0c, 0x95, 0x08, + 0x68, 0xd4, 0x1c, 0xa4, 0xc1, 0xd1, 0x23, 0x76, 0x18, 0xf1, 0xaa, 0x31, + 0xd3, 0x7e, 0xc9, 0xa7, 0xd3, 0x04, 0xaf, 0xc1, 0x4b, 0x01, 0x13, 0x18, + 0xa9, 0x34, 0xe6, 0x64, 0x0f, 0xaa, 0x49, 0xd3, 0xb1, 0x25, 0x4d, 0x1c, + 0x2c, 0xd1, 0xa9, 0xdd, 0x68, 0x4e, 0xef, 0x8b, 0xda, 0xd7, 0x9e, 0xe6, + 0x54, 0xe2, 0x72, 0x86, 0x3b, 0x7c, 0xe2, 0x5d, 0xef, 0xb9, 0xe3, 0x5b, + 0xdf, 0xfa, 0x9f, 0xa2, 0xa2, 0xff, 0xaf, 0xbf, 0x5b, 0x37, 0xad, 0x7e, + 0x07, 0x6a, 0x7f, 0xd3, 0x9d, 0xdc, 0x4d, 0x73, 0x1d, 0x28, 0x89, 0xbf, + 0x0e, 0xb4, 0x49, 0xfb, 0x6a, 0x1d, 0xa5, 0x93, 0x63, 0x44, 0xcb, 0xb8, + 0x5a, 0xa2, 0xbb, 0x94, 0x4b, 0xd5, 0xd3, 0x24, 0x48, 0x8d, 0x2d, 0x2c, + 0xb6, 0xf9, 0xcc, 0x83, 0x69, 0xac, 0x26, 0x95, 0x67, 0xaa, 0xa9, 0x95, + 0x23, 0xb8, 0x1d, 0xa5, 0x83, 0x2f, 0x74, 0x72, 0x93, 0x6f, 0xd6, 0x2d, + 0xd6, 0x3e, 0x8c, 0x22, 0xb7, 0x99, 0x45, 0x01, 0xa1, 0x3a, 0x73, 0xcc, + 0x51, 0x6f, 0x91, 0xc5, 0x1a, 0x2c, 0xb1, 0x44, 0x93, 0x87, 0x3c, 0xa4, + 0x59, 0x91, 0xea, 0xd4, 0x69, 0xd1, 0xa0, 0x01, 0xa3, 0x49, 0x13, 0x62, + 0xb3, 0xcd, 0x58, 0x5b, 0x6d, 0xd3, 0x6a, 0x87, 0x1d, 0xda, 0xed, 0xb1, + 0x4f, 0x87, 0x03, 0x0e, 0x58, 0xe7, 0xb0, 0xc3, 0xd6, 0x53, 0x52, 0xea, + 0x72, 0xcc, 0x31, 0xdd, 0x4e, 0x3a, 0x6d, 0x83, 0xb3, 0xce, 0xea, 0x73, + 0xde, 0x05, 0xfd, 0x2e, 0x6b, 0xb3, 0x51, 0xbb, 0x76, 0x36, 0x9d, 0x3a, + 0x6d, 0xd6, 0xe3, 0x96, 0x2d, 0xee, 0xb8, 0x6f, 0xc8, 0x43, 0x4f, 0xec, + 0x31, 0x64, 0xc8, 0x01, 0x23, 0x46, 0xdd, 0x63, 0xc2, 0x04, 0xc1, 0x94, + 0x29, 0xf7, 0x7a, 0xed, 0xb5, 0x83, 0xde, 0x79, 0xef, 0x3e, 0x1f, 0x7c, + 0x70, 0xbf, 0xcf, 0xbe, 0x38, 0xec, 0x9b, 0xef, 0xc6, 0xfc, 0xf2, 0xcb, + 0x11, 0x7f, 0xfd, 0x75, 0x74, 0xfd, 0xb7, 0x1a, 0xf1, 0x01, 0xbc, 0x01, + 0x03, 0x93, 0x07, 0x21, 0xf4, 0x1d, 0x63, 0xc8, 0xc1, 0x8b, 0x64, 0x7c, + 0xcd, 0x92, 0x8b, 0x72, 0x45, 0xbc, 0x0c, 0xf3, 0xf2, 0x15, 0xe7, 0x7a, + 0x7b, 0xeb, 0xf4, 0xd6, 0xf1, 0x78, 0xcb, 0x6e, 0x8d, 0xf6, 0xfb, 0x4a, + 0xf9, 0xb3, 0x7e, 0x23, 0x7e, 0xaa, 0x24, 0x01, 0x40, 0xbf, 0x20, 0x34, + 0x6f, 0xe2, 0x7e, 0xf8, 0x0b, 0x79, 0xe0, 0xac, 0x67, 0x7f, 0xa3, 0x4b, + 0xf3, 0x3e, 0x86, 0xdd, 0x7d, 0xc9, 0xb3, 0xb5, 0xf8, 0xcc, 0x80, 0x3e, + 0x36, 0x48, 0xe8, 0xf4, 0x6c, 0xcb, 0xa2, 0x81, 0xb8, 0x36, 0x44, 0x77, + 0x82, 0x34, 0x6c, 0xf9, 0x52, 0xaa, 0x56, 0x85, 0xf5, 0x22, 0xa8, 0x3c, + 0x32, 0x30, 0xd4, 0xe2, 0x2a, 0x58, 0x1b, 0xa2, 0xc3, 0x6c, 0x39, 0x25, + 0x67, 0xb0, 0x98, 0x5e, 0x45, 0x4c, 0x4c, 0xc9, 0x9c, 0xb9, 0x1d, 0xce, + 0x52, 0xbf, 0x39, 0x11, 0x91, 0xbb, 0x20, 0x0c, 0x77, 0x22, 0xe6, 0xa2, + 0xa8, 0x15, 0xb0, 0x61, 0x20, 0x1a, 0x6e, 0x50, 0xf0, 0xe1, 0x2c, 0xf3, + 0xca, 0xc6, 0xc2, 0x81, 0x6c, 0xc4, 0x40, 0xbd, 0x43, 0x81, 0x57, 0x41, + 0x86, 0xa1, 0xd1, 0x6f, 0x63, 0x38, 0xe4, 0x53, 0x36, 0x48, 0xd2, 0x19, + 0x51, 0x2b, 0xca, 0x6d, 0x39, 0xf5, 0x26, 0xa8, 0xe2, 0x4c, 0x40, 0x9f, + 0x28, 0x17, 0xe0, 0x31, 0x28, 0x4a, 0x1e, 0x6f, 0x68, 0x02, 0xac, 0xe7, + 0x53, 0x2d, 0x6d, 0x15, 0x5a, 0x5f, 0xf5, 0xe7, 0xff, 0xdd, 0xdc, 0xe9, + 0x5b, 0xcd, 0x1d, 0x7f, 0xde, 0x04, 0x35, 0x7a, 0x51, 0xb5, 0xe8, 0xf0, + 0x14, 0x12, 0x08, 0x0c, 0x86, 0xba, 0x04, 0x80, 0xce, 0xd8, 0x11, 0x19, + 0x70, 0xe2, 0xc3, 0x0a, 0x81, 0x09, 0xf4, 0x06, 0x40, 0xab, 0xc3, 0x96, + 0x00, 0x98, 0x60, 0xd1, 0x49, 0x58, 0xab, 0x77, 0x25, 0x2f, 0x8e, 0xd2, + 0xda, 0x1c, 0x71, 0x63, 0x70, 0x06, 0x0c, 0x48, 0x0f, 0xec, 0xed, 0x25, + 0x7b, 0x79, 0xcd, 0x68, 0x35, 0xe0, 0x03, 0x62, 0xc2, 0xb1, 0xfe, 0xf8, + 0x5f, 0x78, 0x73, 0x42, 0x85, 0x5f, 0x80, 0x3a, 0x9a, 0x54, 0x22, 0x30, + 0x7c, 0xd4, 0xb4, 0xb2, 0x3c, 0x0e, 0xd7, 0x65, 0x7e, 0x13, 0x10, 0x0d, + 0xd8, 0x34, 0x4f, 0x55, 0x86, 0x99, 0x47, 0xe5, 0xb9, 0x84, 0x05, 0x43, + 0x99, 0xab, 0x8d, 0xef, 0xe9, 0x00, 0x33, 0x66, 0x20, 0x92, 0xc7, 0x0e, + 0x81, 0x1c, 0x4d, 0x24, 0x5c, 0xe8, 0x21, 0xcd, 0x56, 0xad, 0x73, 0x7d, + 0x75, 0x1b, 0x97, 0xe0, 0xc1, 0xc2, 0xf0, 0xc8, 0xf3, 0x9c, 0x6c, 0x0c, + 0x1b, 0x71, 0xc6, 0x28, 0x0d, 0xa9, 0xc0, 0x0d, 0xb5, 0x50, 0x74, 0x0c, + 0x84, 0xc9, 0x30, 0x38, 0x07, 0x21, 0x42, 0xb4, 0x00, 0x4d, 0xb6, 0x0d, + 0x8e, 0x0a, 0xde, 0x00, 0x37, 0x88, 0xbc, 0xf7, 0xf1, 0x5b, 0x7d, 0x91, + 0x55, 0x11, 0x23, 0x10, 0xfd, 0x55, 0xe4, 0x47, 0x38, 0x8e, 0x77, 0xdc, + 0x04, 0xa7, 0x18, 0x60, 0x8a, 0x4e, 0xf5, 0xec, 0x6a, 0x7b, 0xc8, 0x3b, + 0xd7, 0x0d, 0xab, 0x21, 0x49, 0xc3, 0x4c, 0xb5, 0x82, 0xf3, 0xdb, 0xd3, + 0x3d, 0x86, 0xd8, 0x88, 0x73, 0x27, 0x88, 0x4b, 0x48, 0x0f, 0x48, 0xf1, + 0x7c, 0xe9, 0x3a, 0xec, 0xa0, 0xe2, 0xc8, 0xd4, 0x9b, 0x82, 0x83, 0x05, + 0xe5, 0x8e, 0x4d, 0x34, 0x89, 0x08, 0x74, 0x42, 0x94, 0xcb, 0x4b, 0x7a, + 0xe5, 0x2a, 0x80, 0x3d, 0x73, 0x6a, 0x65, 0x60, 0x55, 0x84, 0x2f, 0x7e, + 0xdb, 0xb0, 0x16, 0x07, 0x54, 0xab, 0xb4, 0xd3, 0x5d, 0x64, 0x79, 0x44, + 0xfb, 0x60, 0xa5, 0xbc, 0x8d, 0x67, 0x78, 0x34, 0xe0, 0xb9, 0xde, 0x8b, + 0x90, 0x38, 0x6a, 0x03, 0xb5, 0xa6, 0xfa, 0x17, 0x87, 0x3b, 0x92, 0x30, + 0x20, 0x5e, 0x94, 0xa3, 0xf4, 0xea, 0xc9, 0x97, 0x56, 0x91, 0x67, 0xbe, + 0xaa, 0xd4, 0x44, 0x24, 0x95, 0xf5, 0x20, 0xbc, 0x39, 0xd8, 0xd1, 0x15, + 0x40, 0x66, 0xfa, 0x07, 0x89, 0x81, 0x37, 0x7d, 0xec, 0x48, 0x51, 0x51, + 0x6e, 0xb0, 0x9d, 0x1a, 0x9f, 0xc8, 0x53, 0x92, 0xbe, 0x99, 0x58, 0x81, + 0x4d, 0xe0, 0xeb, 0x11, 0x07, 0x2f, 0x9a, 0x55, 0x63, 0xf8, 0xdb, 0xba, + 0x20, 0xfe, 0x20, 0x21, 0xa3, 0xb2, 0xf7, 0x71, 0x47, 0x97, 0x88, 0x27, + 0x0b, 0xcd, 0xbf, 0x98, 0x06, 0x72, 0x70, 0xf3, 0xc4, 0x1b, 0x3d, 0x62, + 0x30, 0x62, 0x54, 0x8a, 0xb5, 0x06, 0x77, 0xe2, 0xe0, 0x22, 0x73, 0xdc, + 0x17, 0x58, 0x99, 0xde, 0xee, 0x50, 0xa2, 0x83, 0xeb, 0x5d, 0x6c, 0xbc, + 0xd1, 0xb6, 0x8f, 0x58, 0x6c, 0x63, 0x0b, 0x06, 0x3b, 0xdc, 0x1a, 0x11, + 0xc8, 0xc0, 0x05, 0x17, 0xcc, 0xc7, 0x46, 0xdc, 0xd6, 0xe4, 0x52, 0x07, + 0xbe, 0xcb, 0xd1, 0x11, 0x20, 0x87, 0xd7, 0x0f, 0xd6, 0x25, 0x01, 0x9d, + 0x5b, 0x3c, 0x70, 0x0c, 0xc7, 0x46, 0xf3, 0xc0, 0x45, 0xfe, 0x78, 0xab, + 0x77, 0x74, 0xf3, 0x79, 0xf6, 0x8c, 0xc9, 0x2e, 0x94, 0x73, 0x50, 0xf3, + 0x65, 0x9f, 0xe7, 0x5c, 0xbb, 0xec, 0x9e, 0x33, 0x82, 0x6c, 0x82, 0x44, + 0x08, 0xd2, 0x0a, 0xb0, 0xb6, 0x2c, 0xd7, 0x82, 0x3e, 0x36, 0xb2, 0x23, + 0x92, 0x73, 0x32, 0x5d, 0x3d, 0xa5, 0xbe, 0x10, 0xa0, 0x06, 0xa5, 0x71, + 0xa7, 0x91, 0xfc, 0xc1, 0x34, 0xef, 0x4e, 0x11, 0x09, 0x6e, 0xc9, 0x44, + 0x6e, 0xae, 0x0d, 0x6a, 0xae, 0x81, 0x21, 0x8c, 0xd0, 0x9f, 0x52, 0xef, + 0xfd, 0xfe, 0x9f, 0x1d, 0xf4, 0xc1, 0xbf, 0xcb, 0x35, 0xca, 0x6e, 0xdd, + 0xd0, 0x6b, 0x52, 0x07, 0x9a, 0xa9, 0x07, 0x00, 0xd1, 0xef, 0x94, 0x65, + 0xac, 0xf0, 0x60, 0xa0, 0xfd, 0x02, 0x62, 0x27, 0xa0, 0x5b, 0x92, 0x94, + 0xa5, 0x5d, 0x61, 0x8e, 0x12, 0x6d, 0x9b, 0x85, 0x6a, 0x1d, 0x5e, 0xaa, + 0x97, 0xde, 0xa9, 0x50, 0x35, 0x0d, 0x69, 0xa6, 0x5c, 0x1f, 0x73, 0x46, + 0x81, 0x9a, 0x76, 0x5a, 0xcd, 0x93, 0x3a, 0x80, 0xfd, 0x9e, 0x20, 0x06, + 0xa6, 0x19, 0xe2, 0x75, 0x4a, 0xa9, 0xe7, 0xf5, 0x96, 0x1d, 0x6b, 0x5f, + 0xb8, 0x14, 0xd4, 0x58, 0x2d, 0x5d, 0x5f, 0x9c, 0x00, 0x58, 0xc0, 0xad, + 0x25, 0x02, 0x77, 0xb8, 0x12, 0xbd, 0x69, 0xcf, 0xb0, 0x56, 0xec, 0x6c, + 0xc3, 0xb8, 0x0f, 0x78, 0xe2, 0xe0, 0x3f, 0x52, 0x7d, 0xc5, 0x6b, 0x88, + 0xce, 0x1e, 0xeb, 0x8c, 0x42, 0x2a, 0xdf, 0xdb, 0xbb, 0xec, 0x6a, 0xd0, + 0xdb, 0x42, 0xd9, 0x40, 0x15, 0x06, 0x3d, 0x95, 0x09, 0x47, 0xe7, 0x38, + 0x33, 0xa1, 0x36, 0x35, 0x9b, 0x84, 0x61, 0x94, 0x21, 0x75, 0x9b, 0x73, + 0x5e, 0x17, 0xf5, 0x1c, 0x41, 0x5e, 0xc9, 0x5d, 0x23, 0xd8, 0x02, 0x9a, + 0xf2, 0xdf, 0xd5, 0x1d, 0x2e, 0xac, 0xcd, 0x9c, 0x8f, 0xe6, 0x2c, 0xc1, + 0x04, 0x87, 0x48, 0xe2, 0x16, 0x2d, 0x39, 0xc9, 0x0d, 0xc4, 0x4c, 0x0f, + 0x44, 0x1e, 0x9d, 0xba, 0xe0, 0xd2, 0x76, 0xaa, 0xc6, 0xeb, 0x0f, 0x5d, + 0x1f, 0xce, 0x0d, 0x55, 0x0e, 0x03, 0x41, 0x17, 0x08, 0x35, 0x0b, 0xf3, + 0x82, 0x7e, 0xb3, 0x09, 0x59, 0xcc, 0x81, 0xf8, 0xde, 0x0d, 0x14, 0x71, + 0x9b, 0x10, 0xd2, 0xfa, 0x7d, 0x6a, 0x2f, 0x1b, 0xd0, 0xa5, 0xf7, 0xbe, + 0xa1, 0x87, 0x50, 0xb1, 0xb1, 0x4b, 0x0e, 0x8d, 0x23, 0x1e, 0x48, 0x8b, + 0xd3, 0xc5, 0x57, 0xab, 0x22, 0x15, 0x3e, 0xf5, 0x2a, 0xde, 0x39, 0xe8, + 0x36, 0xea, 0xba, 0xf3, 0x41, 0xbc, 0xb6, 0x82, 0x9e, 0xc5, 0xaf, 0x28, + 0x33, 0xe6, 0x0a, 0xee, 0x64, 0x2d, 0xe6, 0xce, 0x5d, 0xcf, 0x8a, 0xd6, + 0xad, 0x70, 0xaf, 0x6b, 0x0d, 0x31, 0x6e, 0x29, 0x04, 0x97, 0x1f, 0x0f, + 0xee, 0x45, 0xf0, 0xd6, 0xea, 0xe7, 0xdc, 0x6d, 0xec, 0xcc, 0x63, 0x76, + 0x19, 0x25, 0x20, 0xff, 0xb4, 0xfa, 0xfc, 0x42, 0xf4, 0x2f, 0xd1, 0x88, + 0x7f, 0xd2, 0x86, 0x7f, 0x5a, 0x02, 0x8b, 0x34, 0x21, 0xcd, 0x0b, 0x8b, + 0x31, 0x30, 0xa6, 0x61, 0xc7, 0x59, 0x58, 0xa1, 0xdc, 0x39, 0x2a, 0x76, + 0x4f, 0x89, 0xc5, 0x11, 0xa4, 0x99, 0x19, 0xbc, 0x8c, 0xf3, 0x64, 0x0d, + 0x55, 0x64, 0x09, 0x0f, 0xca, 0x2d, 0x13, 0x3d, 0xa3, 0x6a, 0x4c, 0xe0, + 0xfd, 0x8c, 0x34, 0x08, 0x6a, 0x70, 0x05, 0xb6, 0x2a, 0x02, 0x00, 0x0f, + 0xf7, 0x04, 0x1f, 0xbf, 0x0e, 0x7c, 0x21, 0x93, 0x26, 0x58, 0x45, 0x0c, + 0xed, 0xbb, 0xac, 0xb8, 0x92, 0x66, 0xbe, 0xaf, 0x2b, 0x65, 0x4d, 0x3e, + 0x6a, 0xa3, 0x1b, 0x80, 0x95, 0xdd, 0xd0, 0xc8, 0x66, 0x42, 0x8d, 0x15, + 0x7f, 0x9a, 0x77, 0xa3, 0x63, 0x07, 0x1f, 0x13, 0x07, 0x1c, 0x66, 0x66, + 0xde, 0xe5, 0x86, 0xb4, 0xd3, 0xe5, 0x01, 0x19, 0x12, 0xf2, 0xe9, 0x82, + 0xec, 0x86, 0x85, 0x88, 0x71, 0xd1, 0x8e, 0x5f, 0x01, 0x91, 0x71, 0x28, + 0x79, 0x74, 0xf8, 0xb4, 0x72, 0x72, 0x13, 0xba, 0x2a, 0x5d, 0x59, 0x24, + 0x8a, 0xc1, 0x38, 0x52, 0x3d, 0x93, 0x59, 0xf7, 0x09, 0x21, 0x0f, 0xa1, + 0xb3, 0x9e, 0x6d, 0x50, 0xb4, 0x56, 0x9a, 0x5c, 0x74, 0xf8, 0x3e, 0x5b, + 0x3d, 0xde, 0x1c, 0x73, 0x55, 0x67, 0x6a, 0x0b, 0x41, 0x2d, 0xf1, 0xa8, + 0x8b, 0x78, 0xdf, 0x1b, 0xfc, 0xe0, 0x25, 0xb5, 0x52, 0x4e, 0x50, 0x2e, + 0x20, 0x17, 0xfe, 0x6a, 0x41, 0xa0, 0xc1, 0x1e, 0x14, 0xd7, 0xaa, 0x53, + 0x8e, 0x89, 0x51, 0xfd, 0x37, 0x73, 0x10, 0x19, 0x2d, 0x3a, 0x8f, 0xec, + 0x63, 0x5b, 0x26, 0xb1, 0xdb, 0x2d, 0x36, 0xb4, 0x1a, 0xaa, 0xcf, 0xd8, + 0x64, 0xfc, 0x61, 0x4b, 0xde, 0x89, 0x32, 0x2f, 0x44, 0x1a, 0xed, 0x09, + 0x18, 0xd4, 0x2d, 0x35, 0x5a, 0x80, 0xa7, 0x05, 0xef, 0xc9, 0xec, 0x75, + 0xef, 0x70, 0xc9, 0x5b, 0x13, 0x39, 0x03, 0xab, 0xf9, 0xcb, 0xd2, 0xdc, + 0x4e, 0x6a, 0x37, 0x6a, 0x82, 0x05, 0xdc, 0xde, 0xe1, 0x5c, 0xf5, 0x13, + 0xa1, 0x4c, 0x42, 0xb7, 0xe9, 0xb1, 0x22, 0xad, 0xa5, 0xf1, 0x24, 0x89, + 0x4e, 0x90, 0x43, 0xfc, 0x23, 0x00, 0xe1, 0xda, 0xcd, 0x24, 0x39, 0x19, + 0x07, 0x5f, 0x45, 0x76, 0x09, 0xe4, 0x42, 0xa6, 0x8d, 0x15, 0x62, 0xec, + 0xc9, 0x0c, 0x9c, 0xd9, 0x95, 0xb1, 0x65, 0xcc, 0x50, 0xa3, 0xd5, 0x4a, + 0x82, 0x8d, 0xf1, 0x19, 0x7b, 0x0d, 0xef, 0x86, 0x39, 0x25, 0x78, 0xbc, + 0x70, 0x11, 0x79, 0x14, 0x9e, 0xdd, 0x4c, 0xbd, 0x79, 0x77, 0x88, 0x6f, + 0x4e, 0xb3, 0xa3, 0x9f, 0x6b, 0xe3, 0x4d, 0x84, 0x1c, 0x40, 0x95, 0x8c, + 0xa1, 0x79, 0x74, 0x8b, 0x6a, 0x1c, 0xe3, 0x9d, 0x39, 0x8a, 0x81, 0x0c, + 0x55, 0x93, 0x50, 0x9e, 0xa7, 0x07, 0x30, 0x4b, 0x7a, 0x9a, 0x19, 0x1e, + 0xba, 0x0b, 0x87, 0x68, 0xd7, 0x2e, 0xe8, 0x86, 0x88, 0x1d, 0xca, 0x59, + 0xed, 0xb7, 0xe9, 0x77, 0xef, 0x16, 0x7b, 0x14, 0x27, 0xe0, 0x14, 0x23, + 0x5c, 0x42, 0x98, 0x4f, 0xd8, 0x95, 0xd1, 0xb3, 0xed, 0xa7, 0xb0, 0x3a, + 0x02, 0xa9, 0x22, 0x12, 0x3d, 0x3b, 0x3d, 0xa6, 0x15, 0xce, 0xd0, 0x77, + 0x29, 0xd1, 0xd2, 0x79, 0x80, 0xda, 0x90, 0x5e, 0xb2, 0x59, 0xe6, 0x75, + 0x5c, 0xb9, 0xda, 0x90, 0x38, 0x93, 0xab, 0xab, 0x7a, 0xe6, 0xc2, 0x24, + 0x31, 0x72, 0x41, 0x5c, 0x8c, 0x35, 0x76, 0x71, 0x99, 0xcd, 0xc9, 0x9d, + 0x44, 0xea, 0x0d, 0x03, 0x97, 0x78, 0xef, 0xd8, 0xe1, 0xb6, 0x86, 0x2c, + 0x71, 0xe1, 0x36, 0x4f, 0x3b, 0x45, 0x11, 0x1b, 0xfc, 0xae, 0x57, 0xc2, + 0xe3, 0x56, 0x6b, 0x8d, 0xa5, 0x14, 0x35, 0x43, 0x51, 0x7e, 0x8b, 0x10, + 0xdf, 0x3c, 0x68, 0x3e, 0x8f, 0x76, 0x9c, 0x27, 0xaa, 0xc9, 0x0e, 0x2b, + 0xaa, 0xb6, 0xac, 0x75, 0xbd, 0x92, 0x51, 0xaf, 0xe2, 0x20, 0x6a, 0x13, + 0xf6, 0xce, 0xf0, 0xfe, 0xb9, 0xa2, 0x72, 0x42, 0xe3, 0xa0, 0x40, 0x27, + 0x2e, 0xc8, 0x17, 0xab, 0x8e, 0x8c, 0x8e, 0x8a, 0x44, 0xb3, 0x5f, 0x3c, + 0xd0, 0x16, 0x8d, 0x8b, 0x28, 0x97, 0x64, 0x53, 0xec, 0xc2, 0xef, 0x9e, + 0x1e, 0x3b, 0x99, 0x9d, 0xc9, 0xe4, 0x19, 0x7c, 0xbc, 0xd0, 0x74, 0x35, + 0xd4, 0xd6, 0x0c, 0x1d, 0x8b, 0x90, 0x91, 0x1f, 0x57, 0xb1, 0x8c, 0xa4, + 0x4c, 0xb1, 0x42, 0x4c, 0xc1, 0x72, 0x9a, 0x9f, 0x43, 0x60, 0xc8, 0xa6, + 0x3f, 0x41, 0x89, 0x7c, 0x68, 0x27, 0xb9, 0xd8, 0x00, 0xbd, 0x94, 0x51, + 0x30, 0xfe, 0x90, 0xc0, 0x39, 0x20, 0x47, 0x41, 0xb4, 0x1a, 0xbc, 0x0f, + 0xe1, 0xbb, 0x39, 0x86, 0x60, 0x18, 0x30, 0xa0, 0x2d, 0x0a, 0xda, 0xc0, + 0xcc, 0x7d, 0x7a, 0xf9, 0x62, 0x2f, 0xc9, 0x5a, 0xdd, 0x72, 0x7f, 0xb9, + 0x17, 0xbc, 0x00, 0xd7, 0x35, 0xfa, 0xed, 0x9f, 0x27, 0x76, 0x16, 0x4c, + 0xf2, 0x12, 0x7c, 0x63, 0x44, 0x81, 0xfa, 0xb5, 0x76, 0xd6, 0xf2, 0xc6, + 0xdd, 0x99, 0x3a, 0x73, 0xe1, 0x66, 0xdd, 0x6c, 0x3f, 0x2c, 0x9f, 0xac, + 0xef, 0x4d, 0xae, 0x01, 0xa7, 0x80, 0x8e, 0xbe, 0xe9, 0x75, 0x44, 0x23, + 0x27, 0x3c, 0x54, 0x25, 0x31, 0xef, 0x35, 0x8d, 0x9f, 0x4d, 0x13, 0x9f, + 0x56, 0xf0, 0xa9, 0x61, 0x8a, 0x0d, 0x29, 0x5f, 0x63, 0x14, 0x06, 0xb9, + 0x7c, 0xd4, 0xe0, 0x31, 0x2c, 0xd0, 0x30, 0x8a, 0x8e, 0x30, 0x68, 0xb9, + 0xd7, 0x22, 0x8b, 0xb8, 0xc5, 0x9d, 0xba, 0xbc, 0xf1, 0x57, 0x74, 0xa5, + 0xa4, 0xa0, 0x9b, 0xb1, 0x5a, 0x7b, 0xfd, 0x04, 0x95, 0x53, 0x2b, 0xcc, + 0x73, 0x22, 0x06, 0x3d, 0x77, 0x14, 0x26, 0xf9, 0x30, 0xf1, 0x90, 0x34, + 0x8d, 0x58, 0x2d, 0x05, 0x5a, 0xf7, 0x50, 0xde, 0x21, 0xee, 0x68, 0xcb, + 0x44, 0xd3, 0x61, 0xf6, 0xaa, 0xc6, 0x28, 0xd5, 0x7d, 0x17, 0xd2, 0x3b, + 0xc9, 0xcd, 0xde, 0x30, 0x41, 0x53, 0x28, 0x8a, 0xae, 0x70, 0x12, 0x65, + 0xc7, 0x36, 0xbb, 0x58, 0x53, 0xc9, 0x47, 0x33, 0x00, 0x51, 0x55, 0xf7, + 0x8a, 0xb5, 0x27, 0xae, 0x7d, 0xd2, 0x78, 0x9e, 0xd3, 0x1a, 0xbd, 0xc4, + 0x02, 0xfc, 0xea, 0xb4, 0x4b, 0x86, 0x20, 0xac, 0x47, 0x62, 0x0b, 0x44, + 0xdb, 0x41, 0x0d, 0x40, 0x75, 0xf3, 0x2a, 0x8e, 0x9b, 0x06, 0x46, 0x66, + 0xfc, 0x95, 0xf2, 0x5a, 0xdb, 0x79, 0xbb, 0xcd, 0x2e, 0x5b, 0xc8, 0x08, + 0x5a, 0x24, 0xae, 0x24, 0x1f, 0x03, 0xf6, 0x24, 0x8d, 0xa5, 0x73, 0xc7, + 0xad, 0x4c, 0xce, 0x25, 0x46, 0x55, 0x3a, 0xfc, 0xcf, 0xd1, 0x69, 0x24, + 0x9b, 0xe3, 0x4c, 0xf9, 0xd3, 0x04, 0x36, 0x49, 0xe6, 0x15, 0x29, 0x94, + 0x73, 0xb7, 0xc2, 0xc1, 0x85, 0x6d, 0x04, 0xab, 0x5d, 0x2c, 0xaf, 0x02, + 0xcc, 0xaa, 0xfb, 0x24, 0xcc, 0x5e, 0x4d, 0x31, 0xfb, 0x6f, 0x1d, 0x00, + 0xea, 0xdc, 0xd8, 0x72, 0x7c, 0x02, 0x24, 0x83, 0xd5, 0x13, 0x5a, 0x70, + 0x93, 0xf1, 0x3a, 0x5d, 0x20, 0x7c, 0x53, 0x31, 0x9f, 0x81, 0x20, 0x67, + 0x2e, 0x14, 0x1d, 0x58, 0xf9, 0xa7, 0xbf, 0xf9, 0x87, 0x10, 0xc4, 0x48, + 0x04, 0xc1, 0x12, 0x62, 0x41, 0xf6, 0x08, 0x5b, 0xac, 0xd8, 0x1a, 0x5c, + 0x9f, 0xc8, 0x2f, 0x82, 0xd0, 0x5a, 0xc7, 0x93, 0xc0, 0x3b, 0xbf, 0x6d, + 0xa5, 0x5b, 0xd1, 0x68, 0x40, 0x77, 0x23, 0x0b, 0xc3, 0x99, 0x07, 0xa7, + 0xae, 0x21, 0x09, 0x54, 0x1a, 0x1e, 0xb5, 0xdc, 0x24, 0x29, 0x05, 0x71, + 0xab, 0xe5, 0xd6, 0x06, 0xc5, 0x9f, 0xa2, 0xe3, 0x74, 0xc2, 0x18, 0x50, + 0xc7, 0xcf, 0x2b, 0xfa, 0x63, 0xe0, 0xa5, 0xa4, 0x52, 0x62, 0x11, 0x9d, + 0xa4, 0x95, 0xa3, 0xdb, 0xc2, 0xe7, 0x20, 0x1b, 0x31, 0x5f, 0x7c, 0xa0, + 0xa9, 0xcd, 0x80, 0x0b, 0xeb, 0x2f, 0x61, 0x6f, 0xf4, 0x2e, 0x07, 0x20, + 0x19, 0xea, 0xaa, 0x41, 0x40, 0x2c, 0x53, 0x58, 0xa7, 0xec, 0x06, 0x4b, + 0xba, 0x63, 0x00, 0xc6, 0xc0, 0xe8, 0xf2, 0xc9, 0xfb, 0x9f, 0xfb, 0xc3, + 0x99, 0xfe, 0x6c, 0x6e, 0x94, 0xcd, 0xd5, 0x07, 0xf8, 0xd5, 0xbb, 0x85, + 0x08, 0x61, 0xf8, 0x30, 0xfc, 0xe0, 0x1a, 0x38, 0xe5, 0x73, 0x7a, 0x48, + 0xfe, 0x33, 0x6a, 0x30, 0xa4, 0xa5, 0x55, 0x6b, 0x7d, 0x60, 0xfc, 0xbd, + 0xdc, 0x85, 0x3f, 0xff, 0x1a, 0xf1, 0xa1, 0x53, 0xd3, 0x76, 0xae, 0x2d, + 0xe0, 0xfe, 0x06, 0xdd, 0x39, 0xdb, 0x2a, 0x62, 0x58, 0x07, 0x13, 0x4f, + 0x4e, 0xf4, 0xd9, 0x9a, 0x94, 0xa5, 0xb0, 0xb1, 0x5e, 0xe0, 0x1a, 0x53, + 0xe0, 0xf7, 0x39, 0x25, 0xcc, 0xf5, 0x62, 0x6d, 0x80, 0x67, 0x54, 0xe5, + 0x85, 0x1d, 0xb2, 0x00, 0x5d, 0xdd, 0x94, 0xd2, 0x49, 0xd3, 0xb9, 0xa0, + 0x38, 0xcd, 0x79, 0xaf, 0x5b, 0x33, 0xed, 0x42, 0xb6, 0xa4, 0xbd, 0x55, + 0xd7, 0x93, 0xd6, 0x6b, 0xb4, 0x67, 0x19, 0x9c, 0xa7, 0x51, 0x82, 0xee, + 0x45, 0xdc, 0xd0, 0x83, 0xcd, 0x51, 0xb4, 0x6f, 0xe2, 0xae, 0xbd, 0x71, + 0x95, 0xef, 0xe0, 0x36, 0x6e, 0x83, 0x13, 0xd7, 0xa0, 0x0c, 0xdb, 0xde, + 0x57, 0xeb, 0x58, 0xbd, 0xa1, 0x97, 0x2e, 0x61, 0x1b, 0x85, 0xf5, 0xa7, + 0x5e, 0x72, 0xd9, 0x97, 0xdb, 0xb2, 0xcf, 0x29, 0xc2, 0x33, 0xd4, 0x59, + 0x49, 0x4d, 0xdc, 0x2f, 0xd9, 0xbe, 0x92, 0xb7, 0xb5, 0xbd, 0xd8, 0xea, + 0xea, 0xa9, 0x61, 0x62, 0x11, 0x96, 0x3a, 0xfc, 0xa2, 0xc8, 0xcf, 0xa2, + 0xde, 0xe5, 0xa1, 0x10, 0xce, 0x85, 0x66, 0x91, 0x17, 0xa3, 0xc3, 0x56, + 0x33, 0x1a, 0xa2, 0xcd, 0x27, 0xc5, 0xfa, 0xa7, 0xf0, 0x07, 0x11, 0xa7, + 0xd4, 0xc1, 0xdc, 0xe4, 0x42, 0x17, 0xef, 0x91, 0x52, 0x21, 0xb5, 0x09, + 0x74, 0x67, 0x7b, 0xe6, 0xe2, 0xa5, 0xbb, 0x4a, 0x9a, 0x92, 0x5c, 0xc3, + 0x2a, 0x3c, 0x2d, 0xd7, 0x96, 0x52, 0x82, 0x45, 0x26, 0xe0, 0xc6, 0x74, + 0x9c, 0x08, 0x28, 0xd2, 0x9c, 0xb3, 0x27, 0x14, 0xaf, 0x7c, 0xc3, 0xb3, + 0xba, 0xa6, 0xe0, 0x84, 0xde, 0xe5, 0x24, 0x9e, 0x88, 0x24, 0xbb, 0xd8, + 0x1e, 0xb2, 0x3d, 0xe3, 0xd0, 0x61, 0x0e, 0x33, 0x49, 0xff, 0x8c, 0x59, + 0xaa, 0xc5, 0x94, 0x1e, 0x58, 0x40, 0x4b, 0xb4, 0xe0, 0x75, 0x37, 0x69, + 0xb9, 0x54, 0x99, 0x13, 0x56, 0x32, 0x58, 0xf6, 0x4c, 0x00, 0xac, 0x58, + 0xb9, 0x2e, 0x59, 0xb3, 0x0e, 0x9d, 0x2c, 0x86, 0xe7, 0x2f, 0xe5, 0x2d, + 0x25, 0x2b, 0xb9, 0xf2, 0x95, 0x1d, 0x78, 0xf6, 0x94, 0xbe, 0xf9, 0xd8, + 0xa9, 0x65, 0x7c, 0x62, 0x80, 0xb1, 0xcf, 0x18, 0xce, 0x19, 0x5b, 0x15, + 0x0d, 0x38, 0xbc, 0x51, 0xf1, 0x9e, 0x81, 0x47, 0x4a, 0x82, 0x2d, 0x78, + 0x26, 0x43, 0x36, 0x04, 0xec, 0xe8, 0xb4, 0x6b, 0x62, 0xc2, 0x45, 0xf7, + 0x9c, 0x72, 0xd3, 0xc8, 0x12, 0x30, 0xa6, 0xee, 0x51, 0x62, 0xc4, 0x16, + 0xd9, 0x78, 0x2b, 0xa7, 0x86, 0xc7, 0x03, 0x37, 0x9b, 0x5a, 0xe3, 0x3c, + 0xf7, 0x77, 0x87, 0xa6, 0xae, 0xd2, 0x7e, 0xcd, 0x52, 0xd2, 0x6d, 0x86, + 0xcc, 0xc0, 0xa5, 0x3e, 0x94, 0x52, 0xf8, 0x8e, 0xed, 0x43, 0x0b, 0x17, + 0x91, 0x85, 0xfc, 0xeb, 0xcf, 0x27, 0xcd, 0x79, 0xaa, 0xe8, 0x5c, 0x40, + 0xee, 0xbc, 0x83, 0xfc, 0xb4, 0x0f, 0x39, 0xf3, 0xa7, 0x56, 0x4c, 0x3e, + 0xf7, 0xeb, 0xe9, 0xaf, 0xa5, 0x42, 0x4b, 0x2f, 0x9a, 0xea, 0x34, 0x05, + 0x72, 0xc1, 0x5c, 0x94, 0xfb, 0x45, 0x2e, 0xbe, 0x5a, 0x6b, 0xc8, 0xaa, + 0x21, 0x53, 0xf1, 0xf0, 0x99, 0x50, 0xfc, 0x0c, 0xe3, 0x8d, 0xf6, 0x5f, + 0x8c, 0xdf, 0x12, 0x8d, 0x22, 0xe9, 0x72, 0xbf, 0x3b, 0xe9, 0x03, 0xe3, + 0x01, 0x34, 0xe7, 0xec, 0x41, 0x06, 0x0a, 0xaa, 0x8b, 0xc6, 0x6f, 0x7e, + 0xe5, 0x08, 0x27, 0xf7, 0xa0, 0x36, 0xec, 0xf8, 0xc1, 0xff, 0xc3, 0x0f, + 0xd9, 0xf3, 0x8c, 0xea, 0x4d, 0x8e, 0x73, 0x5c, 0xe3, 0xc0, 0xb8, 0x46, + 0x2f, 0x2a, 0x06, 0x0a, 0x24, 0x50, 0x9c, 0xf9, 0xb7, 0x89, 0x0a, 0x65, + 0xac, 0x23, 0x93, 0x98, 0x48, 0xc7, 0x32, 0xfc, 0xcb, 0xe5, 0x80, 0x60, + 0x20, 0x20, 0x19, 0x24, 0x2a, 0xf9, 0xf2, 0x66, 0x20, 0x15, 0x3c, 0x6f, + 0x46, 0x6d, 0x42, 0x88, 0x2d, 0xcc, 0x9b, 0x05, 0x2d, 0xdf, 0x49, 0x5a, + 0x80, 0xfb, 0x0a, 0xd4, 0xb8, 0x6a, 0xc6, 0x6d, 0x31, 0x68, 0xc3, 0x89, + 0x8a, 0x36, 0x35, 0xb9, 0x96, 0xef, 0xca, 0xd3, 0xbf, 0x27, 0xb5, 0xb0, + 0x1a, 0xd7, 0x23, 0x99, 0x1c, 0x47, 0x47, 0xf1, 0x30, 0x34, 0xf7, 0x37, + 0xa2, 0x46, 0x21, 0x31, 0x15, 0x7c, 0x0a, 0xb9, 0x7c, 0xf3, 0xbc, 0x20, + 0x04, 0x6a, 0x6c, 0xb7, 0x81, 0x2a, 0x31, 0x10, 0xfa, 0x45, 0xa0, 0xaa, + 0x9e, 0x3f, 0xf8, 0xde, 0xa2, 0x8e, 0x7c, 0x50, 0x05, 0x39, 0x35, 0x1c, + 0xc3, 0x06, 0xc4, 0xce, 0x87, 0xd3, 0xa1, 0xa2, 0x95, 0x7d, 0xd8, 0x02, + 0xa9, 0x6a, 0xa2, 0x69, 0xd0, 0x86, 0xbb, 0x7e, 0x07, 0x8f, 0x41, 0x0d, + 0x09, 0xe8, 0x86, 0xcb, 0xbe, 0xf2, 0x68, 0x43, 0x77, 0x90, 0x66, 0x2a, + 0x54, 0x53, 0xf7, 0x80, 0xcc, 0xc1, 0x5b, 0x77, 0xa4, 0xbb, 0x08, 0xb4, + 0xb2, 0xd8, 0x26, 0x2c, 0xda, 0x1d, 0xe4, 0xdf, 0x0d, 0x8c, 0xef, 0xbd, + 0xf0, 0xd8, 0xfd, 0x79, 0xf8, 0x56, 0x7c, 0x10, 0x89, 0xe5, 0x61, 0x07, + 0x46, 0x35, 0x44, 0xa4, 0x57, 0x9f, 0x28, 0x56, 0xae, 0xce, 0x74, 0x20, + 0x4c, 0xa2, 0x40, 0x8c, 0xf5, 0x7b, 0x0b, 0x2c, 0x17, 0x96, 0xae, 0x8c, + 0xcf, 0xe4, 0xa5, 0x8f, 0x0c, 0x1f, 0xc5, 0x32, 0x1f, 0x18, 0x79, 0xd8, + 0x60, 0x98, 0xde, 0x17, 0x01, 0x63, 0x9b, 0xae, 0xa8, 0x82, 0xf4, 0x88, + 0xce, 0x1a, 0xfe, 0x63, 0x94, 0x37, 0x54, 0xc0, 0x29, 0x5c, 0xfa, 0x66, + 0x28, 0xe1, 0xd5, 0xa4, 0x92, 0xcf, 0x03, 0xe1, 0x3b, 0x1a, 0x06, 0xa5, + 0x5e, 0x51, 0x19, 0xf7, 0xa1, 0xf5, 0x07, 0x49, 0x0f, 0x50, 0x15, 0xab, + 0xee, 0xef, 0x06, 0x64, 0x39, 0x61, 0xed, 0xd7, 0xe3, 0xaa, 0xaa, 0xb5, + 0x9f, 0xb7, 0x16, 0xdb, 0xf6, 0xdc, 0x32, 0x07, 0xab, 0xe8, 0x08, 0x54, + 0xd5, 0x63, 0x6a, 0xd5, 0xa4, 0xde, 0xdd, 0xac, 0xc1, 0xbd, 0xea, 0x0f, + 0x65, 0xdb, 0x54, 0x97, 0x52, 0xe2, 0x8a, 0x7b, 0x72, 0x0e, 0x22, 0x38, + 0xd1, 0x52, 0x3a, 0x60, 0xe1, 0xad, 0x46, 0x20, 0xdf, 0xbf, 0xf2, 0x3d, + 0x24, 0x98, 0x20, 0x36, 0xc3, 0x56, 0xd2, 0x81, 0x10, 0x03, 0x1d, 0x4d, + 0xaa, 0xad, 0x22, 0xc6, 0xb7, 0x32, 0xef, 0x74, 0xcd, 0x5d, 0x13, 0x2a, + 0xc5, 0x3d, 0xba, 0xe4, 0xf3, 0x97, 0xdc, 0xd8, 0xf0, 0x4e, 0x51, 0x80, + 0x64, 0x79, 0x2f, 0x0a, 0x38, 0x20, 0xaa, 0x71, 0xd0, 0x92, 0x23, 0xb9, + 0x08, 0x58, 0x52, 0x6b, 0x5f, 0x17, 0x54, 0x7e, 0x7c, 0xdb, 0xe4, 0x2a, + 0xee, 0x76, 0xa0, 0x2d, 0x9b, 0x39, 0xaa, 0xa3, 0xa8, 0x34, 0x84, 0x44, + 0x28, 0x8b, 0x0d, 0x42, 0x54, 0x4c, 0x00, 0x2d, 0xa0, 0x51, 0x93, 0xaa, + 0x1b, 0xf7, 0xa3, 0x01, 0x96, 0xf5, 0x15, 0x1c, 0xe1, 0x0b, 0x36, 0x03, + 0x05, 0x86, 0x10, 0xe5, 0x57, 0xfe, 0xe7, 0x64, 0x10, 0xf5, 0xe3, 0x6e, + 0xb8, 0x59, 0xbc, 0x57, 0x18, 0x06, 0xf3, 0xb1, 0x1f, 0x3d, 0x80, 0x39, + 0x71, 0xfc, 0x91, 0xe4, 0x6a, 0x5c, 0x95, 0xab, 0x37, 0x69, 0xe0, 0x7d, + 0x8d, 0x83, 0x9c, 0x03, 0x1a, 0x55, 0x93, 0x10, 0xcc, 0x01, 0x81, 0x30, + 0x92, 0x22, 0x5c, 0xf4, 0xf3, 0xde, 0x5f, 0x64, 0x7a, 0x53, 0x14, 0x2a, + 0x53, 0xc6, 0x72, 0x82, 0x24, 0x6b, 0x0d, 0x85, 0xb6, 0x80, 0x5a, 0xe6, + 0x0c, 0xd9, 0xc9, 0xa4, 0x94, 0xd8, 0x52, 0xf2, 0x21, 0xa5, 0x50, 0x2d, + 0xa6, 0x73, 0x64, 0x10, 0xc5, 0x0b, 0x38, 0xe9, 0x3a, 0xcc, 0xa2, 0xfe, + 0x11, 0x4b, 0x45, 0x12, 0xcf, 0xa3, 0x20, 0x64, 0x94, 0x44, 0xee, 0xa9, + 0x90, 0x1a, 0xe4, 0x56, 0x8b, 0xfc, 0x6d, 0xb1, 0xe4, 0xaf, 0xa0, 0xf5, + 0x75, 0x45, 0x5f, 0x04, 0xae, 0x0e, 0xcc, 0x44, 0xf7, 0x43, 0x4b, 0xef, + 0x9b, 0x9e, 0xc2, 0xcf, 0xc0, 0xbd, 0xaa, 0x72, 0x56, 0x2b, 0xe6, 0xe8, + 0x46, 0xd8, 0x7e, 0x07, 0x03, 0x62, 0x70, 0x96, 0xc8, 0xc3, 0x1a, 0x10, + 0xf1, 0x92, 0x5c, 0x56, 0x74, 0x7a, 0x60, 0x5c, 0x7a, 0x6a, 0x72, 0xf6, + 0xc0, 0xa8, 0xa8, 0x4e, 0xe3, 0xce, 0x8d, 0xd3, 0xda, 0x73, 0xc8, 0xd8, + 0x5a, 0x9c, 0x5d, 0x9e, 0xd3, 0xaa, 0x0e, 0x03, 0x23, 0x64, 0xeb, 0xf5, + 0xf5, 0xbc, 0xd6, 0xd7, 0xbb, 0xac, 0x44, 0xe9, 0xe5, 0x8a, 0xa4, 0xfb, + 0x46, 0x07, 0x33, 0x15, 0x4a, 0x86, 0xd7, 0x4c, 0x99, 0xd0, 0x96, 0xed, + 0xe7, 0x61, 0xac, 0x9c, 0x71, 0xea, 0x8a, 0x2f, 0x30, 0x83, 0x19, 0x68, + 0xa0, 0xcf, 0xa6, 0x8d, 0x74, 0x9e, 0x74, 0x9a, 0x82, 0xfd, 0x7a, 0xfa, + 0xf3, 0x6c, 0xc7, 0x98, 0xd2, 0x13, 0xb4, 0x87, 0x28, 0xb7, 0x73, 0xea, + 0x42, 0x14, 0x2a, 0x23, 0x6a, 0x61, 0xc0, 0x40, 0xf5, 0x57, 0xbf, 0xba, + 0x16, 0x15, 0x96, 0x1d, 0x55, 0xd0, 0x26, 0x51, 0x1d, 0x91, 0x84, 0x04, + 0x60, 0xbc, 0x92, 0x0b, 0x3a, 0xa2, 0x4b, 0x50, 0xaf, 0x4e, 0x47, 0x2e, + 0x5c, 0xea, 0x58, 0xa2, 0xdb, 0x92, 0x9a, 0xc7, 0xa2, 0xa0, 0x46, 0xf8, + 0x11, 0x3c, 0xcc, 0xa4, 0x6f, 0xb0, 0xa1, 0x21, 0xd2, 0xe6, 0xe2, 0x60, + 0xe2, 0x94, 0x22, 0x5f, 0x01, 0xfa, 0xf2, 0x09, 0x8b, 0x61, 0xdd, 0x83, + 0x90, 0x8f, 0x62, 0x00, 0xf5, 0x6f, 0x17, 0x01, 0x46, 0x40, 0x44, 0x52, + 0xf9, 0x40, 0x89, 0xa8, 0xf6, 0x71, 0x64, 0xc0, 0x38, 0xc4, 0x31, 0x6d, + 0x74, 0x6a, 0xf4, 0x11, 0x28, 0xc0, 0xcd, 0x0c, 0xe8, 0xe1, 0x21, 0x44, + 0x03, 0x06, 0x5c, 0xe5, 0x4b, 0xf9, 0x90, 0xf1, 0xda, 0xb0, 0xb0, 0x30, + 0xd5, 0xd2, 0xf3, 0x3b, 0x8d, 0x38, 0x53, 0x71, 0xf5, 0x50, 0x50, 0xf1, + 0xf2, 0xbf, 0x19, 0x48, 0x8a, 0xb2, 0x78, 0x78, 0x26, 0x8f, 0xb7, 0xf7, + 0xa9, 0x0c, 0x4a, 0x55, 0x69, 0xce, 0xd2, 0xa0, 0xb5, 0x30, 0x10, 0x36, + 0xae, 0x26, 0x16, 0xc8, 0xce, 0x31, 0x89, 0xfd, 0x36, 0x12, 0xdb, 0x25, + 0x8f, 0x72, 0x62, 0x8f, 0x39, 0x89, 0x91, 0xda, 0x8d, 0x7b, 0x1b, 0x76, + 0x7c, 0x51, 0xe6, 0x0a, 0x2d, 0x42, 0x0b, 0x4a, 0x1b, 0x34, 0x4d, 0x57, + 0xbb, 0x53, 0xb0, 0x2a, 0x09, 0xdb, 0x67, 0x4d, 0x6d, 0x9b, 0xee, 0x2a, + 0xc6, 0x76, 0x2a, 0x0a, 0x21, 0x20, 0xdb, 0x4f, 0x36, 0x12, 0x8b, 0x43, + 0x95, 0x73, 0xce, 0xfc, 0xd1, 0x6c, 0x73, 0x64, 0x5b, 0x36, 0x4c, 0x09, + 0x79, 0x1e, 0x99, 0x21, 0x3d, 0xb8, 0x3f, 0x6b, 0xcf, 0x2b, 0x28, 0xfd, + 0x23, 0x4f, 0x8c, 0xb5, 0xa5, 0x9a, 0xed, 0x95, 0x07, 0xe7, 0xbc, 0x93, + 0x61, 0x00, 0xb9, 0x63, 0xf2, 0x65, 0xb0, 0xeb, 0x4b, 0xf5, 0x42, 0x8c, + 0xca, 0xba, 0x58, 0xaa, 0xab, 0xa6, 0xba, 0x4d, 0x4f, 0x28, 0x49, 0xb7, + 0x93, 0x9a, 0x0b, 0x00, 0x3d, 0x16, 0xd2, 0x03, 0xc3, 0x20, 0x02, 0x72, + 0x09, 0x34, 0x9d, 0x1e, 0x29, 0xf1, 0x7f, 0x33, 0xc2, 0x7d, 0xef, 0xc2, + 0x5f, 0xc4, 0xd9, 0x99, 0xf4, 0xc6, 0x29, 0xb0, 0xab, 0xdd, 0x57, 0xa7, + 0xf5, 0x1b, 0x8f, 0xf0, 0x2f, 0x8c, 0xc1, 0x92, 0xc9, 0xf2, 0x6f, 0x2c, + 0xe2, 0xa7, 0x1b, 0x7a, 0xe6, 0xc7, 0xcc, 0x31, 0xb8, 0xe3, 0xaa, 0xd0, + 0x0c, 0x68, 0x2a, 0x73, 0x40, 0x45, 0xb3, 0x75, 0x81, 0xbe, 0xd7, 0xca, + 0x8b, 0xca, 0x22, 0xa4, 0xcd, 0x80, 0x6d, 0xad, 0x98, 0xaa, 0xe6, 0x07, + 0x06, 0x70, 0x0a, 0x79, 0xc7, 0xdb, 0x59, 0xb9, 0x70, 0x7f, 0xe5, 0x2c, + 0x71, 0xf9, 0x21, 0xa4, 0x4f, 0x9e, 0xa2, 0x06, 0x2e, 0x43, 0x4d, 0x6b, + 0x4a, 0xf1, 0xdd, 0xdd, 0xec, 0x27, 0x13, 0x31, 0x06, 0x2a, 0x8b, 0x16, + 0x3f, 0x7b, 0x2c, 0x19, 0x61, 0x37, 0x76, 0x9b, 0x0d, 0xde, 0xc4, 0xb4, + 0xd5, 0xdc, 0x44, 0x3c, 0x6b, 0x6d, 0xa2, 0xd6, 0xc8, 0x18, 0x2f, 0xcc, + 0xaa, 0x00, 0xa2, 0xb0, 0x21, 0x52, 0xac, 0xb5, 0x12, 0xb9, 0x5e, 0xe6, + 0x3a, 0x07, 0x61, 0x8d, 0x8b, 0xc9, 0x82, 0x55, 0x28, 0x14, 0xd3, 0x71, + 0xa4, 0x22, 0xc7, 0x25, 0xb1, 0xfa, 0xbc, 0xa5, 0xbb, 0x9b, 0x2e, 0x78, + 0x83, 0xb9, 0x95, 0x49, 0xb9, 0x24, 0x62, 0x9a, 0x9e, 0x44, 0xf6, 0xf0, + 0x7d, 0x3e, 0x0e, 0xc9, 0x48, 0xd6, 0xdd, 0x58, 0xa6, 0x15, 0xed, 0x1d, + 0x8f, 0x81, 0x50, 0x12, 0xa7, 0xdc, 0x95, 0x60, 0x4d, 0xe3, 0xb2, 0xa5, + 0x2a, 0x4b, 0xc8, 0x7f, 0xe5, 0x37, 0x43, 0x38, 0xe9, 0xf3, 0xbc, 0xad, + 0xf2, 0x54, 0xd6, 0x46, 0x66, 0xe8, 0xb4, 0x93, 0x6e, 0x89, 0x21, 0xa8, + 0xe3, 0x7c, 0x83, 0x88, 0x08, 0x7b, 0xba, 0x23, 0x10, 0x9b, 0x31, 0x02, + 0x43, 0x04, 0x80, 0x36, 0xb1, 0x22, 0x30, 0x3a, 0x81, 0xdc, 0xba, 0xfa, + 0x0a, 0xae, 0xa4, 0x54, 0x0f, 0x6e, 0xee, 0xf8, 0x57, 0x08, 0x71, 0x64, + 0xa4, 0xba, 0x24, 0x8d, 0x25, 0x5a, 0xf6, 0xb4, 0xd5, 0xd2, 0x12, 0xb8, + 0x4e, 0x8e, 0x09, 0x39, 0xeb, 0xc0, 0x52, 0xc4, 0x19, 0x03, 0x19, 0xe5, + 0x09, 0x9c, 0xaa, 0xac, 0x96, 0xb9, 0x0c, 0xe8, 0x22, 0x01, 0xe0, 0x37, + 0x07, 0xfe, 0xb9, 0x70, 0xcb, 0x3a, 0xfe, 0x74, 0xd2, 0x01, 0x8a, 0x81, + 0x4e, 0x88, 0x23, 0xaa, 0x2a, 0x72, 0xa9, 0xb1, 0x18, 0xd7, 0x03, 0x1e, + 0xdd, 0x48, 0xa7, 0x2d, 0xc2, 0x82, 0xa5, 0xc1, 0x66, 0x53, 0x89, 0xb9, + 0x4c, 0xf9, 0xe9, 0xc4, 0xf5, 0x8e, 0x9a, 0x62, 0x80, 0xf6, 0x05, 0xe0, + 0x0d, 0x6b, 0x91, 0x1f, 0x8e, 0xd3, 0xb7, 0x11, 0x75, 0x5f, 0x43, 0xdc, + 0xca, 0xa6, 0xd3, 0xbf, 0x07, 0x97, 0x61, 0x60, 0x4e, 0x32, 0x5c, 0xfa, + 0x88, 0x5e, 0x03, 0xdb, 0x4c, 0x87, 0xe8, 0xc5, 0x4e, 0x6f, 0x77, 0x48, + 0x0d, 0x2e, 0xef, 0x8c, 0xc7, 0xb6, 0xde, 0x25, 0x21, 0xaf, 0xad, 0xb5, + 0x86, 0xc8, 0xb2, 0x54, 0x7d, 0x90, 0x62, 0x97, 0xef, 0x60, 0x29, 0x20, + 0xb3, 0x3d, 0x88, 0xf6, 0x5f, 0x92, 0x4e, 0xd4, 0x8e, 0x9b, 0xa1, 0x36, + 0xa7, 0xfd, 0x72, 0x3f, 0xb5, 0x06, 0xd0, 0xc9, 0x15, 0x27, 0xef, 0x26, + 0x8f, 0x8b, 0xe3, 0xf4, 0x5a, 0x18, 0xb4, 0xae, 0x77, 0xb7, 0xb5, 0x38, + 0x13, 0x06, 0x6e, 0xa0, 0x53, 0x80, 0x75, 0x0d, 0xf6, 0x64, 0x8d, 0xd7, + 0xb5, 0x31, 0xa3, 0x20, 0xe9, 0xce, 0xd4, 0x9b, 0xa3, 0x46, 0x87, 0x64, + 0xf3, 0xe3, 0xcc, 0x07, 0x2e, 0xc5, 0x1a, 0x87, 0x10, 0x0e, 0xf6, 0x81, + 0xf9, 0xb4, 0xe1, 0x81, 0x1e, 0xf6, 0x5c, 0xa6, 0x83, 0x45, 0xdc, 0xe7, + 0xae, 0xc7, 0x70, 0x77, 0x51, 0xcd, 0xb3, 0x29, 0xc4, 0x11, 0x22, 0x71, + 0xaa, 0x05, 0x9f, 0xbd, 0xbf, 0x19, 0x65, 0x51, 0x32, 0x2b, 0xef, 0x7f, + 0x10, 0x7e, 0x78, 0x90, 0x4f, 0x25, 0x88, 0xe4, 0xdc, 0xdc, 0x0d, 0x7b, + 0xc9, 0xa0, 0x8c, 0xe1, 0xb9, 0x2b, 0x50, 0xbd, 0xd8, 0x76, 0xfa, 0x2c, + 0x9e, 0x39, 0x97, 0x1f, 0x50, 0x93, 0x2a, 0x5d, 0xaf, 0x24, 0xae, 0x18, + 0x5c, 0xa1, 0xd6, 0x55, 0xb5, 0xb1, 0xb0, 0x14, 0x4c, 0xea, 0xe3, 0xa3, + 0xae, 0xd8, 0xbc, 0x78, 0x66, 0xaa, 0xac, 0xbf, 0x88, 0xdf, 0x4c, 0xe6, + 0xec, 0x5e, 0xb2, 0xa6, 0x37, 0xe2, 0x52, 0x36, 0x84, 0x68, 0x55, 0xc2, + 0x03, 0xc0, 0x5a, 0xef, 0xea, 0x35, 0x0a, 0xf8, 0x27, 0x7d, 0x4c, 0x0c, + 0x48, 0xb1, 0x12, 0x54, 0xc3, 0xf8, 0x08, 0x1a, 0x1b, 0x0d, 0x80, 0x44, + 0x0d, 0xeb, 0x1f, 0x27, 0x23, 0xc0, 0x3c, 0x64, 0x06, 0x95, 0xce, 0xcb, + 0x8d, 0x91, 0xf4, 0x77, 0xa8, 0x4e, 0x65, 0x86, 0x4f, 0x1c, 0x0d, 0x43, + 0xd3, 0x63, 0x03, 0x1f, 0x6f, 0x01, 0x2c, 0xa1, 0x06, 0x44, 0xf2, 0x21, + 0xcf, 0x19, 0xa2, 0xaf, 0x48, 0x74, 0x05, 0x63, 0xad, 0x0e, 0xb0, 0x10, + 0x1f, 0x4e, 0x61, 0x01, 0xd6, 0x3a, 0x57, 0x34, 0x36, 0x49, 0x5c, 0xda, + 0x0e, 0xc8, 0xb1, 0xff, 0x79, 0xbc, 0x0b, 0xe0, 0xbb, 0xba, 0xdb, 0x47, + 0x2e, 0xd2, 0x84, 0xc7, 0xe3, 0xf9, 0x3e, 0xf9, 0x16, 0x34, 0x5b, 0x97, + 0x1d, 0x63, 0xa3, 0xed, 0x62, 0x58, 0xc2, 0xcd, 0x0a, 0xbf, 0x13, 0xae, + 0x2e, 0x73, 0x8a, 0x2a, 0x1d, 0x07, 0xae, 0xfa, 0x7a, 0xe9, 0xea, 0x63, + 0x12, 0x13, 0x74, 0x97, 0x20, 0x6b, 0x72, 0xc8, 0x07, 0xf0, 0xee, 0x84, + 0xee, 0x10, 0x34, 0xe1, 0x35, 0x6c, 0x33, 0x5f, 0x8f, 0x1a, 0xf0, 0xe9, + 0xc4, 0x4e, 0x2a, 0x6b, 0xa7, 0xb2, 0xd7, 0xdb, 0xc4, 0x1f, 0xef, 0xa0, + 0x2a, 0xad, 0xdd, 0xca, 0x8a, 0xcb, 0x2a, 0xd1, 0x73, 0xb5, 0xb0, 0x2a, + 0xc8, 0x95, 0x80, 0x9c, 0x6c, 0x2b, 0xbc, 0x8a, 0x78, 0x1a, 0x7e, 0x84, + 0xb5, 0x39, 0x5c, 0x5a, 0x91, 0xab, 0x3e, 0x3c, 0xf3, 0xe0, 0x4e, 0xe3, + 0xc5, 0xb0, 0x27, 0x55, 0x87, 0xbb, 0x5b, 0xb8, 0xf8, 0xae, 0xcf, 0x7b, + 0x1e, 0xf6, 0x50, 0x0c, 0x9a, 0x2e, 0xee, 0x06, 0xfb, 0xec, 0x3b, 0xb8, + 0x30, 0xfc, 0x17, 0xb2, 0xa3, 0x56, 0xf8, 0xbb, 0x84, 0xf8, 0xf2, 0x46, + 0x76, 0xc1, 0x5d, 0x8b, 0x3b, 0x61, 0x61, 0x73, 0xdb, 0x39, 0x55, 0xe5, + 0xd8, 0x8b, 0x06, 0xa3, 0x98, 0xb0, 0x1a, 0x60, 0x6b, 0x77, 0xe4, 0xa9, + 0xfa, 0xcb, 0x03, 0x43, 0xf2, 0x87, 0xf5, 0x98, 0x46, 0x96, 0x69, 0x69, + 0x86, 0xdf, 0x8f, 0xd8, 0x36, 0xdc, 0xf4, 0xe9, 0x2b, 0x00, 0x54, 0x5d, + 0xc4, 0x4a, 0x2d, 0x3e, 0x92, 0x08, 0x71, 0xe6, 0xf3, 0x11, 0x0a, 0x07, + 0x90, 0x35, 0x58, 0x1d, 0xce, 0xd9, 0xa7, 0x52, 0x9a, 0x3b, 0xfd, 0xaa, + 0xf2, 0xda, 0xab, 0x59, 0xaa, 0x9d, 0x0e, 0xea, 0xed, 0xc5, 0xd8, 0xf0, + 0xdf, 0x6b, 0x27, 0x5d, 0xd4, 0x24, 0xbc, 0x27, 0x62, 0x82, 0x81, 0x0c, + 0xf7, 0x72, 0xc5, 0x46, 0xee, 0x96, 0x73, 0x12, 0xd1, 0x82, 0xed, 0xa2, + 0x97, 0x10, 0xb8, 0x36, 0x85, 0x90, 0xf9, 0xc4, 0x58, 0xd4, 0x8f, 0xbc, + 0xe9, 0x9d, 0xe4, 0x57, 0x4b, 0x83, 0x9a, 0x18, 0x4d, 0xac, 0xb2, 0xc5, + 0x7e, 0x95, 0xbc, 0xa5, 0x59, 0xaf, 0xec, 0x5a, 0x58, 0x3e, 0x88, 0xef, + 0x4f, 0xa0, 0x76, 0x32, 0x8b, 0xa6, 0x67, 0xc5, 0x54, 0x19, 0x6f, 0x39, + 0x03, 0x21, 0xa6, 0xb8, 0xa9, 0xd6, 0x93, 0xcb, 0x7c, 0xf4, 0x55, 0xc2, + 0x5b, 0x18, 0x44, 0xce, 0x19, 0x39, 0x53, 0x2b, 0x5e, 0xe1, 0x8f, 0x55, + 0xcb, 0x7a, 0xa3, 0xc9, 0x82, 0x0e, 0x03, 0x07, 0x1d, 0xc2, 0xca, 0xf0, + 0x77, 0x2a, 0x13, 0x7c, 0x55, 0xf9, 0xfd, 0x3f, 0x35, 0xb1, 0xb3, 0xc8, + 0xe7, 0x55, 0x3e, 0x0d, 0xe7, 0xc8, 0xc5, 0xa3, 0xb6, 0xb3, 0xd8, 0xd3, + 0x3c, 0x7e, 0x86, 0x00, 0xcf, 0x2d, 0x2f, 0x8f, 0x92, 0x70, 0xcc, 0xc1, + 0x67, 0x16, 0x63, 0x24, 0xcc, 0x4e, 0x4e, 0x38, 0x96, 0xe5, 0x9a, 0xdf, + 0x71, 0x82, 0x58, 0xa5, 0xee, 0x4a, 0xf6, 0x9c, 0x0c, 0xf3, 0x2d, 0x5c, + 0x9f, 0x54, 0x7d, 0xe0, 0x9b, 0x19, 0x72, 0xc7, 0xad, 0x6e, 0xa4, 0xf9, + 0x5d, 0x44, 0xf9, 0x20, 0x5c, 0x1d, 0xa8, 0x6f, 0x59, 0x45, 0x1c, 0xaa, + 0x10, 0x06, 0xf4, 0x6c, 0x6a, 0xa4, 0x64, 0xfb, 0x49, 0x14, 0x4b, 0x9d, + 0xa3, 0x26, 0xcb, 0xe7, 0x6b, 0x40, 0xd6, 0x1e, 0x9b, 0xa5, 0xf1, 0xd1, + 0x31, 0x96, 0x35, 0xda, 0x19, 0x21, 0xf1, 0x33, 0xf4, 0x35, 0xf5, 0x5d, + 0xa7, 0xe0, 0x77, 0x71, 0x35, 0xac, 0x25, 0x0d, 0xc3, 0x1b, 0x89, 0xad, + 0xce, 0xe1, 0x47, 0x26, 0x9d, 0x6d, 0x58, 0x6b, 0x9a, 0x58, 0x27, 0xc6, + 0xe1, 0x39, 0x57, 0x21, 0x77, 0x93, 0x5e, 0x78, 0xfb, 0xd5, 0xae, 0xc8, + 0x75, 0x47, 0x60, 0x04, 0xab, 0x11, 0x84, 0x8a, 0x0c, 0x25, 0x03, 0xbd, + 0x8f, 0x00, 0xd5, 0x38, 0x47, 0x15, 0x24, 0x2c, 0x86, 0xd7, 0x26, 0xcb, + 0x97, 0x81, 0x35, 0x37, 0x9b, 0xda, 0x4d, 0xac, 0x6f, 0x81, 0x53, 0xad, + 0x31, 0x7f, 0x1b, 0x2b, 0xdb, 0x9c, 0xbd, 0x89, 0x75, 0x30, 0x8e, 0x00, + 0xed, 0x0f, 0x11, 0xfb, 0x10, 0x66, 0x63, 0x92, 0xae, 0x19, 0x91, 0x5d, + 0xa8, 0x36, 0xc9, 0xf9, 0xfb, 0x10, 0x1f, 0x5f, 0xdb, 0xd9, 0xb1, 0x9b, + 0xd4, 0xf3, 0x31, 0x04, 0x76, 0x0e, 0x65, 0x5e, 0xb6, 0x15, 0x0d, 0x47, + 0xe1, 0x10, 0x39, 0xb2, 0x9a, 0x09, 0x21, 0x25, 0xc8, 0xf0, 0xd7, 0x2e, + 0x50, 0x27, 0x58, 0x88, 0x99, 0x07, 0x8f, 0xc0, 0x4b, 0x81, 0xed, 0x40, + 0x0c, 0x28, 0x7e, 0xe8, 0xad, 0xb9, 0xc1, 0xf2, 0x43, 0xf4, 0x47, 0xe7, + 0x04, 0xf3, 0x17, 0x39, 0xa0, 0x46, 0x3d, 0x33, 0xc5, 0x1f, 0x7d, 0xe4, + 0x7d, 0x54, 0x44, 0x67, 0x68, 0x63, 0xcd, 0x92, 0x8e, 0xd9, 0x2d, 0x08, + 0x3d, 0x05, 0x21, 0xc3, 0x3a, 0xe4, 0x91, 0x45, 0x10, 0xc8, 0x19, 0x30, + 0x1b, 0xc0, 0x3d, 0x57, 0x0d, 0xdc, 0x12, 0xf5, 0x93, 0x4f, 0xcc, 0xaa, + 0xb9, 0x4f, 0xc3, 0x0a, 0x10, 0x96, 0xa8, 0xf0, 0x81, 0xe8, 0x01, 0xf4, + 0x84, 0xc1, 0x78, 0xa9, 0xd6, 0x6d, 0x66, 0xfd, 0x0e, 0x4e, 0xa7, 0xb0, + 0x58, 0xc5, 0x1e, 0x4f, 0x38, 0xe3, 0xe0, 0xd7, 0xc8, 0x5c, 0x58, 0x8e, + 0x10, 0x67, 0xa5, 0x63, 0x12, 0x41, 0x58, 0x0e, 0x15, 0xff, 0xc4, 0xd7, + 0x34, 0xe2, 0x2a, 0x25, 0xd4, 0x5f, 0xf9, 0xbc, 0x42, 0x4b, 0xfc, 0x24, + 0x1b, 0x84, 0x64, 0x71, 0x2d, 0x7d, 0xa3, 0xb9, 0x81, 0x12, 0x1f, 0x84, + 0xde, 0xa0, 0xf2, 0x32, 0x72, 0x2a, 0x8f, 0xb2, 0xb9, 0x5b, 0xbc, 0xd8, + 0xae, 0xd5, 0x54, 0x9c, 0xc2, 0xb0, 0x0b, 0x95, 0xe7, 0x5e, 0x14, 0x03, + 0x99, 0x0c, 0xb6, 0x9b, 0x80, 0x30, 0x63, 0xed, 0x42, 0xae, 0xc6, 0xcf, + 0x3a, 0x10, 0xfb, 0xa3, 0xa0, 0x06, 0xd5, 0x04, 0xa7, 0x6c, 0x8c, 0x1e, + 0xa9, 0x80, 0x6c, 0x41, 0x38, 0xb0, 0xe7, 0x91, 0xe1, 0xf4, 0x95, 0x0c, + 0xc3, 0x11, 0x0e, 0x5c, 0x6c, 0x23, 0x0d, 0x0c, 0xcc, 0xeb, 0x15, 0x48, + 0xc7, 0x08, 0xf0, 0x51, 0xed, 0x98, 0x74, 0xe2, 0x34, 0xdc, 0xd1, 0xf1, + 0x64, 0x6d, 0x67, 0xb6, 0xdd, 0x05, 0x02, 0x53, 0x0c, 0x71, 0xbb, 0x48, + 0x81, 0x32, 0xd7, 0x8f, 0xc1, 0xd3, 0xc9, 0xde, 0x35, 0x28, 0x54, 0x74, + 0xce, 0xc5, 0xbf, 0xc4, 0x63, 0x6b, 0xa4, 0x5a, 0x96, 0x2a, 0x20, 0xc2, + 0x14, 0xf2, 0xcd, 0x58, 0x74, 0xeb, 0xb2, 0x77, 0x11, 0x59, 0x19, 0x63, + 0x8b, 0x21, 0xea, 0x7a, 0x67, 0xcc, 0x1a, 0x65, 0xc1, 0xb5, 0xb0, 0x1a, + 0xd1, 0x8f, 0xba, 0x8f, 0xae, 0xac, 0x60, 0x48, 0x65, 0x95, 0x7a, 0x78, + 0xb7, 0xb4, 0xc9, 0xeb, 0x07, 0xda, 0x9a, 0x0e, 0xd9, 0x22, 0xa1, 0xbb, + 0x67, 0x56, 0x36, 0xa0, 0x06, 0x2f, 0x88, 0x23, 0x1f, 0x84, 0x4d, 0x22, + 0x9b, 0x9b, 0xa8, 0x2e, 0xde, 0xf7, 0x3c, 0xbb, 0xdc, 0x24, 0x2b, 0x72, + 0x28, 0xf5, 0xcf, 0x64, 0x29, 0xc0, 0x69, 0xb0, 0x5c, 0x41, 0xcc, 0x5d, + 0xfe, 0x3d, 0x80, 0x6c, 0x58, 0x9c, 0x3f, 0xe3, 0x9f, 0xd3, 0xe3, 0xc5, + 0x10, 0x4d, 0x5f, 0xb6, 0x9b, 0x7e, 0xbf, 0x02, 0x66, 0x59, 0xf7, 0x9a, + 0xc5, 0x43, 0x6f, 0xb6, 0xda, 0x37, 0x96, 0xae, 0x0a, 0x4a, 0xb6, 0x28, + 0x3c, 0xc0, 0xc3, 0x11, 0x98, 0xec, 0xe5, 0x79, 0x0b, 0x71, 0x21, 0x08, + 0xe6, 0x3e, 0xc9, 0xae, 0xc4, 0xd4, 0xba, 0x7c, 0x66, 0x98, 0x2d, 0x40, + 0x1f, 0x36, 0x34, 0xf3, 0x60, 0xbd, 0x23, 0x96, 0x56, 0x74, 0xc4, 0xbe, + 0x98, 0x94, 0x60, 0xb5, 0x7e, 0xad, 0xc3, 0xd5, 0x01, 0x56, 0xde, 0x9e, + 0x48, 0x82, 0xac, 0x9c, 0x16, 0x9e, 0x07, 0x26, 0xf8, 0x22, 0x12, 0x74, + 0x57, 0x30, 0x93, 0xcc, 0x49, 0xd3, 0x22, 0x74, 0x1d, 0x46, 0x9f, 0x5e, + 0x22, 0x8d, 0x82, 0x80, 0x8b, 0x7c, 0x1e, 0x89, 0xcf, 0xec, 0x9e, 0x90, + 0x13, 0x0a, 0x7b, 0xe1, 0xdd, 0x51, 0xe6, 0xad, 0x62, 0x0a, 0x2d, 0x48, + 0xc9, 0x23, 0x88, 0x92, 0x94, 0xad, 0xf9, 0x54, 0x19, 0xd4, 0xa0, 0x85, + 0x88, 0x0a, 0xe1, 0x64, 0xf2, 0xc4, 0x90, 0xcb, 0x66, 0xc3, 0x21, 0x45, + 0x7e, 0x91, 0x89, 0x94, 0xdb, 0xca, 0x82, 0x1f, 0xe9, 0x2b, 0xa2, 0x90, + 0x89, 0x2e, 0x95, 0xa4, 0x5c, 0xdd, 0x0b, 0xd1, 0xaf, 0x02, 0x9f, 0x4e, + 0xbe, 0x1c, 0xcd, 0x90, 0xee, 0x06, 0x30, 0xe5, 0xb2, 0x91, 0xf0, 0xfb, + 0x99, 0xab, 0xc0, 0x6b, 0x9d, 0x3e, 0x34, 0xc7, 0x5d, 0x3e, 0x8b, 0xeb, + 0xef, 0x92, 0x91, 0x0b, 0xa2, 0x8a, 0xb6, 0x35, 0xfc, 0x72, 0x85, 0xa3, + 0x93, 0xb7, 0x0a, 0x2c, 0x50, 0x7f, 0x3f, 0x04, 0x2a, 0x91, 0xed, 0x7c, + 0xb8, 0xef, 0x01, 0xa5, 0x8d, 0x80, 0xef, 0x4a, 0xaa, 0x77, 0x70, 0xb4, + 0xcd, 0xda, 0x3e, 0xc2, 0x2f, 0xa2, 0xa5, 0x25, 0x4a, 0x69, 0xbe, 0xc7, + 0xe6, 0x75, 0xd1, 0xfe, 0xd2, 0x55, 0xdd, 0x18, 0x59, 0x5a, 0xca, 0x42, + 0x05, 0xeb, 0x1d, 0xb0, 0x94, 0x11, 0xf5, 0x1f, 0x13, 0x1c, 0xf0, 0xd3, + 0x5e, 0xec, 0x05, 0x85, 0x51, 0x06, 0x0e, 0x48, 0x15, 0x7d, 0xc3, 0x79, + 0xe2, 0x7f, 0xc4, 0x6f, 0xe2, 0xb7, 0xcd, 0x46, 0x3f, 0xdc, 0x57, 0xfa, + 0xc2, 0x2b, 0x62, 0x49, 0xfb, 0xb6, 0x7e, 0x1d, 0x10, 0x29, 0x27, 0xba, + 0xf3, 0x5e, 0xba, 0x16, 0x67, 0x0b, 0xb9, 0xd6, 0xd6, 0xad, 0xac, 0x9e, + 0x13, 0x7a, 0x25, 0xe5, 0xc2, 0xf9, 0x4c, 0x61, 0x0e, 0x57, 0x17, 0x8a, + 0x57, 0x34, 0x00, 0xd8, 0xc3, 0x13, 0x52, 0xe3, 0xc0, 0x5a, 0xa5, 0x6a, + 0x50, 0x0d, 0x2d, 0x8a, 0xb0, 0x2c, 0x0f, 0x8b, 0xf5, 0x6d, 0x36, 0x4f, + 0x78, 0x69, 0xd3, 0x20, 0x60, 0x7f, 0xb3, 0x60, 0x07, 0x98, 0xdd, 0x09, + 0x88, 0xa2, 0x86, 0x24, 0x97, 0xd3, 0xd4, 0x93, 0x15, 0x18, 0x66, 0x81, + 0xf6, 0x66, 0x24, 0x84, 0xb9, 0xe0, 0x23, 0x84, 0xb3, 0xbd, 0xa8, 0x0d, + 0x0e, 0x63, 0x7a, 0x4a, 0xc3, 0x95, 0x69, 0x19, 0x0c, 0x28, 0x55, 0xbe, + 0xc6, 0x0c, 0xe8, 0x5e, 0x08, 0xf7, 0x46, 0x70, 0x3e, 0x51, 0x36, 0x3f, + 0xd2, 0x15, 0x26, 0xcd, 0x9a, 0x6c, 0x1c, 0x2b, 0x32, 0xc2, 0x0b, 0x74, + 0x99, 0x7e, 0x69, 0xc0, 0x1e, 0xc0, 0xd0, 0xcd, 0x43, 0xce, 0x07, 0x7b, + 0x9b, 0xea, 0xa1, 0x81, 0x76, 0xf9, 0x4d, 0xe5, 0x4b, 0x5d, 0x15, 0x2a, + 0x50, 0x8c, 0xee, 0x10, 0x67, 0x44, 0x3d, 0x4b, 0xf9, 0xf9, 0x11, 0xdc, + 0x4d, 0x7c, 0x8d, 0x65, 0xdd, 0xd7, 0x57, 0x84, 0xc5, 0x63, 0x7b, 0x68, + 0xa8, 0x38, 0xbd, 0xa5, 0x0d, 0x41, 0xc7, 0x6e, 0x7a, 0x5f, 0xd5, 0x0b, + 0xd1, 0xe1, 0x55, 0x33, 0x1a, 0x3b, 0x28, 0xa2, 0x2e, 0x56, 0x2f, 0x8d, + 0x80, 0x45, 0xe4, 0x79, 0x19, 0xb8, 0x7e, 0xa0, 0x80, 0xf7, 0xfc, 0x72, + 0x60, 0x9f, 0xbf, 0x4c, 0x84, 0xe5, 0x4b, 0xd1, 0xc9, 0xb3, 0x59, 0xc5, + 0xad, 0x08, 0xcc, 0x57, 0xe6, 0x09, 0x2f, 0x40, 0x56, 0x1e, 0x9a, 0x36, + 0x2e, 0x59, 0xdf, 0xd7, 0x1b, 0x92, 0x2f, 0x7d, 0x7b, 0x07, 0xd7, 0xac, + 0xf0, 0x2b, 0x13, 0xc4, 0x21, 0x07, 0xae, 0xca, 0xad, 0xe0, 0x10, 0x81, + 0xd5, 0x1d, 0xff, 0x57, 0x15, 0x5d, 0x64, 0xe5, 0xd6, 0x8a, 0x33, 0x2e, + 0x76, 0x0d, 0x4b, 0x5b, 0x01, 0xbd, 0x2f, 0x81, 0x04, 0x27, 0x75, 0x3f, + 0x29, 0x09, 0xeb, 0x06, 0x26, 0xc1, 0xb1, 0x28, 0x08, 0xdc, 0xb8, 0x51, + 0x2d, 0x83, 0xe6, 0x00, 0x23, 0xac, 0x83, 0x7d, 0xcf, 0x7b, 0x77, 0xa9, + 0xc6, 0x60, 0x08, 0x90, 0x83, 0xf3, 0xf7, 0xb9, 0x4c, 0x34, 0xfa, 0x41, + 0x79, 0xfa, 0xd8, 0x2d, 0x03, 0x99, 0x14, 0x54, 0x22, 0xbe, 0x55, 0xed, + 0x97, 0x0a, 0xc8, 0x22, 0x83, 0xac, 0x16, 0x60, 0x32, 0x53, 0x69, 0x0d, + 0x22, 0xc2, 0x6e, 0x06, 0xa3, 0xe3, 0x05, 0xa6, 0x06, 0x1b, 0x82, 0x8c, + 0x79, 0x55, 0x84, 0xf8, 0x0d, 0x13, 0x3e, 0x84, 0x15, 0xf7, 0x25, 0x6b, + 0xfa, 0x7d, 0x7d, 0x3a, 0x45, 0xc9, 0x9c, 0x41, 0x9d, 0x2d, 0x1c, 0x67, + 0xd2, 0x99, 0xb0, 0x99, 0xf8, 0xa5, 0x85, 0x16, 0xb6, 0x1c, 0x64, 0xed, + 0xe6, 0x80, 0x4a, 0xc6, 0xc9, 0xe9, 0xce, 0xec, 0xd3, 0x9a, 0x75, 0x80, + 0xc6, 0x2d, 0x59, 0x0b, 0x2e, 0x30, 0x55, 0xa3, 0xe4, 0x18, 0xb6, 0x9d, + 0xbd, 0x56, 0x0b, 0xd8, 0x9d, 0x03, 0x84, 0x57, 0xfb, 0x13, 0x68, 0x06, + 0xab, 0x03, 0xf1, 0xe2, 0xc1, 0xc4, 0x6f, 0xd2, 0x10, 0x5c, 0x89, 0xc2, + 0x59, 0xd4, 0x59, 0xcf, 0x00, 0x0a, 0x25, 0x56, 0xa2, 0x20, 0xdc, 0x98, + 0x30, 0x4c, 0x85, 0x28, 0xd1, 0x18, 0x43, 0xcb, 0xf8, 0xfc, 0x66, 0x25, + 0x6b, 0x85, 0xd2, 0x62, 0x53, 0x15, 0xe5, 0x9f, 0xb7, 0x3a, 0x8d, 0xa5, + 0xd4, 0x31, 0x29, 0x92, 0x15, 0x82, 0x92, 0x9e, 0x85, 0xd3, 0xce, 0x62, + 0x1c, 0xfd, 0xe8, 0x2c, 0xce, 0x9f, 0xc3, 0xff, 0x86, 0xff, 0x02, 0x10, + 0x87, 0x4c, 0x08, 0xbd, 0x6f, 0x42, 0xe7, 0x62, 0xef, 0xe7, 0x3e, 0x46, + 0x20, 0x49, 0x59, 0xe9, 0x8f, 0x72, 0xa1, 0x28, 0x5e, 0xae, 0xeb, 0xee, + 0xd0, 0x09, 0x42, 0x5c, 0xf4, 0x71, 0x70, 0xd7, 0xa6, 0x7c, 0x12, 0x79, + 0x15, 0x78, 0x15, 0x56, 0x97, 0x05, 0xab, 0x2b, 0x32, 0x3c, 0x2a, 0x15, + 0xeb, 0x9a, 0x9a, 0x33, 0x87, 0x5b, 0xe7, 0x6b, 0x1c, 0xb8, 0x1e, 0x5e, + 0xc6, 0xaf, 0xe4, 0xc3, 0x23, 0x64, 0x82, 0xc6, 0x5e, 0x15, 0x42, 0xc3, + 0xad, 0xe6, 0x6c, 0xe2, 0xd5, 0x69, 0x0d, 0x98, 0xb4, 0x17, 0x2b, 0xad, + 0x52, 0xf3, 0x8a, 0x64, 0x79, 0x78, 0x64, 0x50, 0x6d, 0x07, 0x74, 0x91, + 0x22, 0x39, 0xc2, 0x71, 0xb5, 0x18, 0xbc, 0x68, 0xe5, 0xce, 0xcb, 0xdd, + 0x75, 0xbd, 0xc6, 0x6b, 0xa4, 0x23, 0x74, 0x30, 0x22, 0x02, 0x34, 0xd9, + 0x77, 0xa5, 0xc0, 0x41, 0x48, 0x00, 0x75, 0xab, 0xd5, 0x63, 0x66, 0x37, + 0x42, 0xa0, 0xdb, 0xfe, 0x0b, 0x19, 0x88, 0x66, 0x90, 0x74, 0x37, 0x4a, + 0x0b, 0x24, 0x4d, 0x44, 0x47, 0x15, 0xa8, 0x55, 0xe3, 0xee, 0xf6, 0x70, + 0x8b, 0xd5, 0xa4, 0x3c, 0xb9, 0x2a, 0x2e, 0x80, 0x2b, 0x41, 0x0e, 0x5f, + 0xf1, 0x11, 0xae, 0x47, 0xdc, 0x25, 0xdf, 0xa3, 0xc3, 0x51, 0xd8, 0x7b, + 0x2a, 0x92, 0xec, 0xfd, 0x30, 0xfd, 0xa9, 0xc3, 0x6b, 0xb1, 0x09, 0xb9, + 0x2d, 0x2d, 0x7a, 0x67, 0x93, 0xd9, 0x7d, 0xcd, 0x9e, 0x60, 0x53, 0x8a, + 0x03, 0x48, 0x36, 0x47, 0x3a, 0x69, 0xde, 0x66, 0x74, 0xae, 0x6b, 0x09, + 0xa7, 0x7c, 0x92, 0xf5, 0x2a, 0xc2, 0x7c, 0x7c, 0xa0, 0x04, 0xdb, 0x13, + 0x3c, 0x46, 0x8c, 0xee, 0x24, 0xff, 0x0d, 0xff, 0x25, 0xf8, 0xc0, 0xea, + 0xf0, 0x02, 0x3e, 0x9e, 0xca, 0x29, 0xac, 0xf1, 0xa0, 0x0a, 0x60, 0xb4, + 0xbe, 0xd0, 0xdd, 0x29, 0xe6, 0xe4, 0x83, 0x56, 0x57, 0xea, 0x84, 0x30, + 0x3f, 0x90, 0x6b, 0x8e, 0x4b, 0xa7, 0x7f, 0xdd, 0x86, 0x5c, 0x71, 0x6e, + 0x2a, 0xf2, 0x60, 0xbe, 0x38, 0xc1, 0x8d, 0xc6, 0x8e, 0x6a, 0x3d, 0xa1, + 0xc1, 0x79, 0xc6, 0x18, 0x81, 0x2c, 0x95, 0xb7, 0x45, 0x78, 0xed, 0xee, + 0x0e, 0x21, 0xce, 0xac, 0xd1, 0x3f, 0xe8, 0xaf, 0xb8, 0x06, 0x47, 0x46, + 0x40, 0x01, 0xd5, 0xc8, 0x30, 0x87, 0xd7, 0x98, 0xfa, 0xbf, 0xa9, 0x10, + 0x0c, 0x4d, 0x34, 0xa5, 0x5b, 0xba, 0xb6, 0x0c, 0x8f, 0x28, 0xfd, 0x29, + 0x3c, 0xc3, 0x9e, 0xc7, 0x5a, 0x4e, 0x81, 0xd9, 0x07, 0xf1, 0xe6, 0x00, + 0x48, 0x65, 0x6f, 0x88, 0x6e, 0x48, 0xc8, 0x95, 0x23, 0x85, 0xdc, 0x2d, + 0xd7, 0x41, 0xcb, 0xdc, 0xc3, 0x66, 0xac, 0x47, 0x5f, 0x13, 0x11, 0xa3, + 0x7a, 0xd3, 0x1a, 0x1d, 0x72, 0x45, 0x8f, 0xc0, 0xfc, 0x3f, 0x56, 0xce, + 0xc0, 0x1f, 0x45, 0x14, 0x67, 0x83, 0x42, 0xc5, 0x28, 0xc0, 0x08, 0x21, + 0x91, 0x89, 0x56, 0x94, 0x8d, 0x30, 0x17, 0x4a, 0xc5, 0x49, 0x7e, 0xb8, + 0x5b, 0x3e, 0x44, 0x17, 0x01, 0x36, 0xe3, 0x59, 0x54, 0x0f, 0x19, 0x44, + 0x84, 0x76, 0x06, 0x44, 0xbd, 0x30, 0x59, 0x97, 0x0b, 0x3b, 0x46, 0x40, + 0x55, 0xcd, 0x2a, 0x00, 0xd9, 0xb6, 0x5e, 0xeb, 0xc5, 0xc2, 0x55, 0x58, + 0xfb, 0x88, 0x29, 0x01, 0xb4, 0xa4, 0x05, 0xf3, 0x75, 0xf8, 0x01, 0xc2, + 0xb1, 0x98, 0xb1, 0x3a, 0x10, 0xab, 0xe6, 0xc0, 0xba, 0x2a, 0x7f, 0xd2, + 0x96, 0x1a, 0xe7, 0x72, 0xac, 0x07, 0x85, 0xa7, 0x18, 0x74, 0xba, 0xd7, + 0x42, 0x7c, 0xc2, 0x02, 0x40, 0x83, 0xfd, 0xbe, 0xba, 0xb6, 0x4f, 0x34, + 0xc9, 0xb2, 0x03, 0xb8, 0xe8, 0x80, 0x60, 0xf5, 0xa1, 0x6d, 0x07, 0x66, + 0x1e, 0xe3, 0x44, 0x01, 0xb9, 0x41, 0xde, 0x03, 0xfe, 0x79, 0xdc, 0x11, + 0x69, 0x19, 0x09, 0x32, 0x0d, 0xe1, 0x5b, 0x6a, 0x23, 0xf8, 0x6a, 0x0c, + 0x7b, 0x2f, 0x24, 0x99, 0x49, 0x51, 0xce, 0x8c, 0x2f, 0x5b, 0x75, 0x6b, + 0x22, 0x6d, 0xea, 0xfc, 0xfa, 0xc6, 0xed, 0x1e, 0x21, 0xeb, 0xa6, 0x95, + 0x81, 0x7e, 0x84, 0xd1, 0x6c, 0xa5, 0xb1, 0xd2, 0xa8, 0x74, 0xa0, 0x82, + 0x6a, 0x95, 0xed, 0x95, 0xd4, 0x16, 0x61, 0x6e, 0x31, 0x87, 0x70, 0xdf, + 0x81, 0x4c, 0xb9, 0xe3, 0xe8, 0xbb, 0x17, 0x91, 0x00, 0x70, 0x5b, 0xfc, + 0x3e, 0x68, 0x64, 0x9f, 0x09, 0xf8, 0x2d, 0x07, 0x0e, 0xaa, 0x09, 0x7a, + 0xeb, 0x56, 0xd4, 0x19, 0x45, 0x6c, 0x80, 0x84, 0x8a, 0x25, 0xd2, 0x1d, + 0x41, 0x42, 0x39, 0x3d, 0x65, 0x9c, 0x13, 0x46, 0x3d, 0x47, 0x2f, 0xad, + 0xc9, 0x41, 0x4f, 0xb7, 0x14, 0x7d, 0xe0, 0xea, 0xa3, 0x7f, 0x8e, 0x3b, + 0xe4, 0xc1, 0x3e, 0x8a, 0x09, 0xb8, 0x9a, 0x56, 0xc0, 0x53, 0x17, 0x9c, + 0x83, 0x27, 0x70, 0x82, 0x4f, 0x9e, 0xa2, 0xe3, 0xe8, 0x53, 0x39, 0x14, + 0x55, 0x2d, 0xee, 0x50, 0x89, 0x40, 0xbd, 0xb6, 0x57, 0x38, 0xe8, 0xb1, + 0x6c, 0x27, 0x53, 0x21, 0x88, 0x58, 0x85, 0x38, 0xb1, 0x48, 0x74, 0xc0, + 0xa7, 0x11, 0xe2, 0xf9, 0x15, 0x0e, 0xb4, 0xbb, 0x6a, 0xfb, 0x82, 0x2b, + 0x23, 0x50, 0x27, 0x93, 0x89, 0x63, 0x2c, 0x74, 0xc9, 0x0d, 0x74, 0x04, + 0xda, 0xc5, 0xea, 0xa6, 0x22, 0x4c, 0xca, 0xa8, 0x21, 0x93, 0x7b, 0x2a, + 0x97, 0x5d, 0x1c, 0xa9, 0x43, 0xa8, 0x67, 0x52, 0x0f, 0x2d, 0x11, 0x61, + 0x03, 0x81, 0x27, 0xd9, 0x46, 0xaf, 0x88, 0xbd, 0x88, 0xe7, 0x51, 0x0f, + 0x09, 0x34, 0x90, 0xf9, 0x4e, 0x83, 0x83, 0x54, 0xe8, 0xee, 0x58, 0xa9, + 0xb2, 0x2d, 0xfd, 0x5b, 0xb1, 0x09, 0x03, 0xc3, 0x82, 0x5f, 0x57, 0xb4, + 0x39, 0x52, 0x01, 0xcd, 0xbc, 0x69, 0x13, 0x72, 0xba, 0x94, 0x6b, 0x15, + 0xe9, 0xee, 0x68, 0x9a, 0x07, 0xf4, 0x7f, 0x8b, 0x7f, 0xa1, 0x22, 0xdd, + 0x73, 0x1d, 0x0b, 0xc2, 0x3d, 0x47, 0xb6, 0xd2, 0xb7, 0x27, 0xf5, 0x28, + 0xf8, 0x7a, 0xce, 0x80, 0x18, 0xa4, 0xd1, 0x95, 0x7b, 0x4d, 0xe7, 0x72, + 0xef, 0xa4, 0x03, 0x7d, 0x4d, 0xbf, 0x8c, 0x52, 0xf9, 0xb1, 0x72, 0x88, + 0x30, 0x70, 0x22, 0x20, 0x0e, 0xa4, 0x7a, 0xf6, 0x9c, 0x00, 0xc2, 0x53, + 0x10, 0xc4, 0xa1, 0xdf, 0x9b, 0x0e, 0xab, 0x51, 0xca, 0x96, 0x75, 0x46, + 0xea, 0xfb, 0x0b, 0xd1, 0xa5, 0xa4, 0x50, 0xcd, 0x6e, 0x72, 0x6b, 0x16, + 0x4c, 0xc8, 0x77, 0x38, 0x6c, 0x0c, 0xe5, 0x7d, 0x0f, 0x25, 0x0a, 0x02, + 0xba, 0x42, 0x4e, 0x37, 0xe1, 0x25, 0x06, 0xf3, 0x39, 0x32, 0xcb, 0xe4, + 0x80, 0xaa, 0xc9, 0x9d, 0xa0, 0x4f, 0xc4, 0x9c, 0x52, 0x7b, 0x86, 0x9b, + 0x42, 0x3d, 0x09, 0xfa, 0x78, 0xec, 0x18, 0x73, 0xce, 0x58, 0x53, 0xed, + 0x99, 0x14, 0xe0, 0x1b, 0xfb, 0x5b, 0x7e, 0xbe, 0x4d, 0xe2, 0x1a, 0x5b, + 0x09, 0x21, 0x9c, 0x00, 0x55, 0x00, 0xcb, 0xe7, 0x4f, 0x2f, 0x37, 0xf6, + 0x4e, 0xc2, 0x83, 0xeb, 0xc3, 0x51, 0xa8, 0x19, 0xb4, 0xc3, 0x12, 0xc7, + 0x6e, 0xbd, 0x7a, 0x3a, 0x7a, 0x9e, 0x37, 0xe8, 0x96, 0x44, 0xd9, 0xe9, + 0x5a, 0x34, 0x4f, 0x1a, 0x86, 0x81, 0x11, 0x6e, 0xb2, 0xa2, 0x16, 0x5d, + 0xd9, 0x4b, 0x9a, 0xa9, 0x81, 0xef, 0xc4, 0xa0, 0x89, 0x60, 0x31, 0x77, + 0xca, 0x7e, 0x09, 0x0c, 0xca, 0x68, 0x4b, 0xbb, 0x18, 0x44, 0xe2, 0x9c, + 0x72, 0x22, 0xea, 0x91, 0xf9, 0x40, 0x7d, 0x73, 0x06, 0x23, 0xe3, 0x21, + 0xed, 0xdd, 0x57, 0x20, 0x40, 0x2d, 0xc2, 0x94, 0xb8, 0x1e, 0xd7, 0xe5, + 0xfa, 0x6c, 0x80, 0xb3, 0xe8, 0xcc, 0xea, 0xef, 0xba, 0x1a, 0x2a, 0xb3, + 0x71, 0x04, 0xca, 0x33, 0x46, 0x87, 0xf7, 0x05, 0xf4, 0x23, 0xf9, 0xf2, + 0xec, 0xbf, 0x6b, 0x4e, 0x30, 0xf8, 0xf8, 0x80, 0xf1, 0x30, 0x8b, 0x76, + 0x7b, 0x57, 0xb0, 0x2d, 0xde, 0xd0, 0xcf, 0x2a, 0xbe, 0x84, 0x58, 0xc2, + 0x4d, 0xac, 0x17, 0xee, 0x22, 0xae, 0xe2, 0x65, 0xac, 0x35, 0x97, 0xf5, + 0xef, 0x1f, 0x6f, 0xb7, 0xce, 0xab, 0xef, 0xcf, 0x15, 0x2a, 0xc9, 0x0e, + 0x34, 0x34, 0x85, 0x1f, 0x19, 0x3c, 0x0c, 0xc3, 0x57, 0x57, 0xa2, 0x87, + 0xa3, 0x70, 0xb9, 0xbc, 0xec, 0xbb, 0x9d, 0x75, 0x59, 0x60, 0x2f, 0x53, + 0x53, 0x54, 0x79, 0x00, 0x62, 0x6f, 0x8b, 0x10, 0x65, 0x69, 0x2d, 0xc1, + 0x14, 0x68, 0x81, 0x6f, 0x74, 0x16, 0x8a, 0x4b, 0x2f, 0x14, 0x5f, 0x6f, + 0x94, 0xb7, 0x6e, 0x37, 0x2b, 0x57, 0xab, 0x9a, 0xd2, 0xce, 0x39, 0x78, + 0xcd, 0xb4, 0xf5, 0x50, 0x41, 0x41, 0x50, 0xb8, 0x94, 0x48, 0xdb, 0x92, + 0x44, 0xf1, 0x12, 0x7b, 0x3f, 0x9d, 0x29, 0xa2, 0x64, 0xdf, 0x86, 0xea, + 0x43, 0x2e, 0xaf, 0x64, 0x89, 0x90, 0x49, 0x77, 0x9b, 0x75, 0xe6, 0xe1, + 0x67, 0x98, 0x28, 0x9f, 0x3d, 0xb8, 0xdb, 0x5e, 0xc8, 0xfc, 0x2d, 0x23, + 0x07, 0xbc, 0x36, 0xa5, 0x08, 0x34, 0x94, 0xb2, 0x53, 0x2e, 0xd3, 0x43, + 0xdf, 0x53, 0x01, 0x17, 0x81, 0x25, 0x40, 0x78, 0x09, 0xc2, 0xd1, 0x98, + 0x37, 0x60, 0x2c, 0xc3, 0x83, 0x7c, 0x99, 0xad, 0xfa, 0x65, 0x99, 0xea, + 0x3a, 0xe5, 0xb0, 0x49, 0xe1, 0x83, 0xae, 0x23, 0x43, 0x10, 0x7b, 0xeb, + 0x52, 0x07, 0x32, 0x0b, 0x5b, 0x59, 0x17, 0xa6, 0x84, 0x50, 0xcc, 0x43, + 0xbb, 0xb0, 0xb1, 0xb0, 0x59, 0x16, 0x54, 0xd0, 0xf6, 0x34, 0x8a, 0xb1, + 0xac, 0xdc, 0x07, 0x56, 0xfb, 0xa7, 0xff, 0x6b, 0xed, 0x44, 0x43, 0x7c, + 0x62, 0x6e, 0x26, 0xa2, 0xea, 0x89, 0x51, 0x4a, 0x4b, 0x89, 0xda, 0x6d, + 0xcf, 0x2b, 0x43, 0x44, 0x88, 0x99, 0xf9, 0xbf, 0x83, 0xcc, 0xd9, 0xe3, + 0x53, 0x1e, 0x3a, 0x75, 0x21, 0x6a, 0xa4, 0x5b, 0x59, 0x94, 0xc7, 0xaa, + 0x0b, 0x15, 0x27, 0xda, 0xac, 0x42, 0x5f, 0x4f, 0xd6, 0x64, 0x2c, 0xd2, + 0x81, 0xaa, 0x03, 0x35, 0xb1, 0x7a, 0x02, 0xb5, 0x91, 0x6a, 0xe9, 0xe3, + 0x3e, 0x7c, 0x10, 0x61, 0x85, 0x0d, 0x83, 0x92, 0x40, 0x7b, 0x6f, 0xa8, + 0xcc, 0x95, 0x14, 0x64, 0x25, 0x86, 0x4d, 0x41, 0xaa, 0xa8, 0xe4, 0x77, + 0x48, 0xd5, 0xdc, 0x09, 0xc7, 0xb0, 0xdb, 0xb7, 0xce, 0x87, 0x21, 0x62, + 0xa4, 0xd3, 0xe4, 0x24, 0xd1, 0x71, 0x86, 0x37, 0xb1, 0x6d, 0x63, 0x0c, + 0xbe, 0x82, 0x73, 0xc1, 0x4a, 0x8f, 0x76, 0xc7, 0x6d, 0x17, 0x76, 0xec, + 0x74, 0x86, 0x76, 0x58, 0x47, 0xcd, 0xbf, 0xb4, 0xe7, 0xc6, 0x45, 0xbe, + 0x8a, 0x21, 0x12, 0xd0, 0xe0, 0x85, 0xe0, 0xbf, 0x43, 0x6c, 0x52, 0xa7, + 0x9a, 0x53, 0x9c, 0x5e, 0x32, 0xd4, 0xfa, 0x3f, 0x18, 0x92, 0x7b, 0x41, + 0x4d, 0x12, 0x75, 0x23, 0x8f, 0x18, 0xe2, 0xa5, 0xe3, 0xa2, 0x86, 0x8a, + 0x15, 0x06, 0xaa, 0xab, 0xc9, 0xcd, 0x93, 0x27, 0x3a, 0xae, 0x3e, 0xc3, + 0x39, 0xa9, 0xa9, 0xc9, 0x72, 0x90, 0xf4, 0xaf, 0x22, 0x91, 0xb9, 0xd3, + 0xb9, 0x6c, 0x56, 0xf6, 0x0c, 0xc4, 0xde, 0xdf, 0x3e, 0xc4, 0xe5, 0x87, + 0x3f, 0xcd, 0x97, 0x6f, 0x25, 0x3a, 0x0b, 0xc3, 0x90, 0xbb, 0x67, 0xa9, + 0x7e, 0x7f, 0x63, 0xee, 0xc2, 0x41, 0xb8, 0x3f, 0x17, 0x08, 0xfb, 0x76, + 0x65, 0xd6, 0xf2, 0xaa, 0x92, 0xec, 0xc9, 0x59, 0x74, 0x75, 0xe8, 0x84, + 0xb3, 0x53, 0x34, 0x5a, 0x00, 0x00, 0xeb, 0x1d, 0xff, 0x26, 0x7f, 0xdc, + 0x96, 0x7d, 0x88, 0xeb, 0x53, 0xf2, 0xf3, 0x53, 0x4c, 0xcd, 0x2c, 0xbd, + 0x20, 0x11, 0x5d, 0x96, 0x9b, 0x5a, 0x28, 0x6d, 0x42, 0x98, 0xad, 0x0d, + 0xa0, 0x2c, 0xb1, 0x05, 0x27, 0xbf, 0xa1, 0xd8, 0x21, 0xbb, 0x6c, 0xb0, + 0xf2, 0x43, 0x09, 0x5a, 0x9f, 0x9b, 0x70, 0x8b, 0xce, 0xb4, 0x64, 0xc3, + 0x83, 0x8d, 0xcb, 0xcc, 0xe1, 0x59, 0xd5, 0xff, 0x87, 0x9b, 0x43, 0x8f, + 0x91, 0x61, 0x9c, 0xfa, 0x3b, 0xa2, 0xf9, 0x36, 0x32, 0x97, 0x96, 0x28, + 0xa8, 0xae, 0x2f, 0x05, 0xd3, 0x72, 0x8b, 0xc1, 0x72, 0x52, 0xba, 0x85, + 0x04, 0x23, 0xc4, 0x0c, 0xee, 0x03, 0xee, 0x78, 0x72, 0x40, 0x6c, 0xc8, + 0x01, 0xc1, 0x9c, 0xe9, 0x5c, 0x88, 0x32, 0x25, 0x2e, 0x27, 0xef, 0x2a, + 0xaf, 0x66, 0xe6, 0x2c, 0x6f, 0xca, 0x02, 0x47, 0x45, 0x4a, 0x76, 0xe8, + 0x5a, 0x32, 0x16, 0xbd, 0x6d, 0x8d, 0x21, 0x42, 0xec, 0xf0, 0x76, 0x37, + 0xb0, 0xed, 0x37, 0x13, 0x9e, 0x49, 0x31, 0x26, 0xa4, 0x19, 0x63, 0x5b, + 0x98, 0x95, 0xa4, 0xf6, 0x24, 0x95, 0xa8, 0x9c, 0x4c, 0x6b, 0x78, 0xd5, + 0x23, 0x24, 0x47, 0x0e, 0xee, 0x03, 0x9e, 0x03, 0x0f, 0x6a, 0x3d, 0x70, + 0x57, 0x65, 0xb0, 0x4a, 0x9d, 0x02, 0x3f, 0x0c, 0x8f, 0x32, 0xaf, 0xc0, + 0x75, 0x49, 0xb8, 0x4d, 0x59, 0x58, 0xc9, 0xcb, 0xa2, 0xf5, 0xb3, 0x23, + 0x50, 0x4f, 0x18, 0x2f, 0x7f, 0x82, 0x52, 0x65, 0x2b, 0x4f, 0x48, 0x83, + 0x81, 0x21, 0xe0, 0xc0, 0xb2, 0xc8, 0x03, 0x76, 0x40, 0xdf, 0xef, 0x9b, + 0x80, 0x9a, 0x79, 0x70, 0x25, 0x3f, 0xe1, 0x03, 0xe4, 0xbe, 0xbf, 0xa0, + 0x56, 0xb7, 0x96, 0xcb, 0x70, 0x90, 0x83, 0x93, 0xca, 0xd5, 0x57, 0xa3, + 0x25, 0xa3, 0x9e, 0x16, 0xfe, 0x20, 0x04, 0x42, 0x8d, 0x0e, 0xf9, 0x92, + 0x7f, 0xce, 0x25, 0xfc, 0x0c, 0x3a, 0x9f, 0x5f, 0xc7, 0x02, 0xb8, 0x5e, + 0x73, 0xf4, 0xcb, 0x59, 0x05, 0x41, 0x8b, 0x88, 0x20, 0x40, 0x3d, 0xaf, + 0xf0, 0x74, 0xc8, 0x74, 0xbf, 0x4f, 0x6a, 0xa5, 0xa2, 0x93, 0x24, 0x3c, + 0xa4, 0xf4, 0xb9, 0x5a, 0xcb, 0xfa, 0x3c, 0x46, 0xc4, 0x87, 0x98, 0xb2, + 0xab, 0x1f, 0x7c, 0xa9, 0x0c, 0x41, 0xb2, 0xfd, 0x8c, 0x57, 0x11, 0xe4, + 0x85, 0x10, 0x1f, 0x50, 0xe5, 0x25, 0x56, 0xb6, 0x04, 0x4d, 0xfa, 0x58, + 0x8f, 0x17, 0x00, 0x54, 0x95, 0x04, 0x11, 0x41, 0xe2, 0x87, 0x6a, 0xc0, + 0x91, 0x46, 0xb3, 0x15, 0x86, 0xd5, 0xbb, 0x25, 0x2d, 0x16, 0xb5, 0x34, + 0x87, 0x48, 0x09, 0x2d, 0x2b, 0xce, 0xe0, 0xcc, 0x2c, 0xce, 0x0e, 0x7c, + 0x76, 0x94, 0x10, 0x5e, 0x4a, 0x73, 0x53, 0xf6, 0xa6, 0xc3, 0xf3, 0x67, + 0xdc, 0x9b, 0x44, 0x8f, 0x3d, 0xa5, 0xdc, 0x5b, 0xd7, 0xb6, 0x37, 0x02, + 0x41, 0x05, 0x5d, 0x82, 0xe3, 0x86, 0xca, 0x5a, 0x81, 0xc2, 0xf2, 0x50, + 0x2b, 0xe0, 0x0f, 0x59, 0xcc, 0xbc, 0xe7, 0x43, 0xad, 0xd5, 0x56, 0xb3, + 0xf4, 0x4f, 0xfe, 0x51, 0x71, 0x1b, 0x81, 0x92, 0xc4, 0x96, 0xf9, 0x91, + 0xaa, 0x57, 0x52, 0xe2, 0xa8, 0x30, 0x88, 0xd0, 0x57, 0xa9, 0x8c, 0x3f, + 0xf6, 0x3c, 0x24, 0xad, 0x4d, 0xe9, 0x51, 0xb0, 0xc1, 0xd9, 0x21, 0x6a, + 0x54, 0x22, 0x26, 0xfc, 0x3b, 0x15, 0xb9, 0x62, 0xb9, 0xe7, 0x00, 0xfb, + 0xc6, 0xea, 0x05, 0x73, 0xd7, 0x13, 0xe0, 0x87, 0x20, 0xc9, 0x93, 0x6e, + 0xd6, 0xa0, 0x09, 0xf1, 0x73, 0x95, 0x87, 0x6b, 0xa9, 0xa1, 0xeb, 0x8b, + 0xb6, 0x30, 0x34, 0x0f, 0x5d, 0x3f, 0x83, 0xb8, 0xb6, 0x62, 0x3c, 0x7a, + 0xde, 0xbf, 0x3c, 0x89, 0x7c, 0x99, 0x1a, 0xa8, 0x78, 0x93, 0x98, 0x47, + 0xfb, 0x29, 0xc6, 0x5f, 0x9b, 0x31, 0xaf, 0x3f, 0xcc, 0xe2, 0x9b, 0xf3, + 0x5a, 0xa0, 0x58, 0x70, 0xbb, 0xbc, 0x53, 0x15, 0x89, 0x5b, 0x58, 0xe5, + 0xdc, 0x7e, 0xee, 0xbf, 0x16, 0x1a, 0x49, 0x2b, 0x38, 0x00, 0x47, 0xc4, + 0x65, 0x09, 0x0e, 0xb8, 0x44, 0x09, 0x9d, 0xbb, 0x7d, 0x19, 0xb1, 0x92, + 0x37, 0x0b, 0xbb, 0x2a, 0x87, 0xf0, 0x14, 0x6b, 0xc9, 0x83, 0xb8, 0xed, + 0xd4, 0x0f, 0x80, 0x18, 0xef, 0x41, 0xad, 0xba, 0xc5, 0xd3, 0xa6, 0x3e, + 0x10, 0x8d, 0xf0, 0x6a, 0xea, 0x8d, 0x24, 0xc5, 0x80, 0x50, 0xe2, 0xcc, + 0xfc, 0x9a, 0x5b, 0xb2, 0x3d, 0xaa, 0xf4, 0x3e, 0x14, 0x6d, 0x73, 0xc8, + 0xc2, 0x92, 0x5b, 0x1e, 0x37, 0x64, 0x31, 0x4b, 0x34, 0xe0, 0x5c, 0x5a, + 0x9e, 0x41, 0x0b, 0x8f, 0x1d, 0x05, 0x6f, 0x07, 0x1a, 0x15, 0x44, 0x6c, + 0x44, 0x38, 0xba, 0xd7, 0x51, 0x20, 0xdb, 0xde, 0xc1, 0x52, 0x8a, 0xf9, + 0x17, 0xc1, 0x68, 0xae, 0x08, 0x56, 0x55, 0x5a, 0x2c, 0x03, 0x3e, 0x53, + 0x70, 0x3a, 0x55, 0x1f, 0x80, 0x3c, 0x2b, 0xf6, 0x65, 0xb7, 0xf8, 0x2e, + 0x0c, 0x7d, 0xa8, 0x15, 0x96, 0x1c, 0x9f, 0x93, 0xe7, 0xb4, 0xc8, 0x9e, + 0xab, 0x2d, 0xbc, 0x63, 0x35, 0x68, 0x16, 0xaf, 0xd0, 0x87, 0xd0, 0xb6, + 0x91, 0xf5, 0x5a, 0x21, 0x99, 0xf7, 0x07, 0xbc, 0xd2, 0x97, 0x21, 0xcc, + 0x54, 0x10, 0xb2, 0xda, 0x59, 0x0c, 0xbc, 0x7b, 0xbf, 0x4c, 0xa0, 0x00, + 0x99, 0x01, 0x70, 0x02, 0xc9, 0x46, 0x68, 0x00, 0xc4, 0x26, 0x49, 0xd1, + 0xe2, 0x09, 0xca, 0x9c, 0x49, 0x49, 0xc5, 0xf3, 0x56, 0x73, 0x71, 0x98, + 0x20, 0xb7, 0x1c, 0xf5, 0x9e, 0x46, 0x9e, 0x4b, 0xed, 0x05, 0x8d, 0xa7, + 0xd0, 0x80, 0xa8, 0x72, 0xad, 0xeb, 0xe9, 0x49, 0xdd, 0x58, 0xeb, 0x24, + 0x9a, 0x94, 0xea, 0x49, 0x43, 0xbe, 0x9b, 0xcc, 0x91, 0x70, 0x54, 0x6a, + 0xfb, 0xb4, 0x9d, 0xa9, 0xcb, 0xe7, 0x1d, 0xb3, 0x2a, 0xee, 0x5e, 0x50, + 0xd0, 0x37, 0x8a, 0x23, 0x38, 0x44, 0x1d, 0x99, 0xe3, 0x07, 0xaa, 0xbc, + 0xb2, 0x50, 0xf6, 0xf4, 0xaf, 0x2e, 0x7e, 0x39, 0xce, 0xa1, 0x2e, 0x42, + 0x75, 0x90, 0x09, 0x6c, 0xa2, 0x75, 0xfd, 0x20, 0x97, 0x26, 0x68, 0x45, + 0x8a, 0x50, 0xf4, 0xe4, 0x00, 0x27, 0xfa, 0xc7, 0x92, 0xa0, 0xa3, 0x53, + 0x26, 0x87, 0xc7, 0x30, 0xb2, 0xcd, 0x06, 0x7a, 0xd5, 0xd5, 0xcb, 0x9f, + 0x9d, 0xf7, 0x2d, 0xd2, 0x6c, 0xef, 0x89, 0x37, 0xe1, 0x1a, 0x39, 0x70, + 0x4e, 0xd7, 0xe2, 0x4e, 0x3b, 0x2d, 0x71, 0x2b, 0x8b, 0xaf, 0xcd, 0x68, + 0x38, 0xe9, 0xbc, 0xcc, 0xc1, 0x30, 0x9e, 0x7d, 0x1d, 0x5e, 0xa5, 0x1c, + 0x05, 0x65, 0x0d, 0x39, 0x68, 0x87, 0x42, 0xcf, 0x1a, 0x76, 0xe0, 0x8f, + 0x32, 0x61, 0x22, 0x42, 0xb3, 0x01, 0xc2, 0x76, 0x54, 0x15, 0x81, 0xac, + 0xc2, 0x2c, 0x9b, 0x00, 0xa6, 0x62, 0x37, 0x81, 0xcb, 0xf2, 0xca, 0xc5, + 0xd4, 0x62, 0x94, 0x9e, 0x1e, 0x22, 0x55, 0x0b, 0x4f, 0x16, 0x1d, 0x1b, + 0xe5, 0x97, 0xad, 0xac, 0xb6, 0xb8, 0x00, 0xb1, 0x31, 0x71, 0xac, 0xb2, + 0xbb, 0x6c, 0x85, 0x4e, 0x2b, 0x37, 0xf9, 0x0a, 0x04, 0xa9, 0x68, 0xa9, + 0x25, 0x16, 0x76, 0x49, 0x92, 0x50, 0x24, 0x26, 0x08, 0xdd, 0x5f, 0xec, + 0x21, 0x45, 0x8b, 0xed, 0x88, 0x57, 0xd4, 0xf2, 0x34, 0xab, 0xe1, 0x0d, + 0x75, 0x0d, 0x30, 0xf8, 0x1d, 0x21, 0x2a, 0x7a, 0xb7, 0xe9, 0x5f, 0xca, + 0x27, 0xf6, 0x2d, 0x56, 0x30, 0x26, 0x48, 0x8a, 0xee, 0x36, 0x82, 0xa9, + 0x44, 0x5c, 0xa8, 0xe5, 0xb9, 0x7e, 0x9e, 0x78, 0xf5, 0xb3, 0xfc, 0x69, + 0xe9, 0xaa, 0x5e, 0x16, 0x04, 0x43, 0x90, 0x2a, 0x44, 0x7a, 0x84, 0x13, + 0x5d, 0x68, 0x29, 0xc4, 0xb2, 0xfa, 0x89, 0x98, 0x3e, 0xd6, 0xcb, 0xba, + 0x5c, 0x98, 0x47, 0xb8, 0xf3, 0xb3, 0xb5, 0xa0, 0x19, 0x70, 0x6b, 0x0c, + 0x44, 0xd3, 0x00, 0xc2, 0x1e, 0x46, 0xe5, 0x20, 0x07, 0xe7, 0x21, 0x90, + 0x2c, 0x26, 0xc2, 0x3f, 0xfa, 0xc8, 0x18, 0x61, 0x0f, 0x7f, 0x64, 0x8c, + 0xba, 0x1f, 0x7b, 0x57, 0x67, 0xe4, 0xdd, 0x1f, 0xef, 0x4f, 0xef, 0xfe, + 0x1b, 0xe1, 0xc3, 0xfd, 0x44, 0xbc, 0x1d, 0x3d, 0xb2, 0x0e, 0x6a, 0xf3, + 0x78, 0xfc, 0x93, 0x06, 0x9f, 0xff, 0xec, 0x01, 0xae, 0xbc, 0x4d, 0xe2, + 0x5d, 0x59, 0x9f, 0xb7, 0x44, 0x6e, 0x1e, 0x91, 0x83, 0x8f, 0x52, 0x09, + 0x0b, 0xb6, 0x63, 0xd0, 0x3c, 0xc7, 0x41, 0x95, 0x57, 0x5d, 0x34, 0x30, + 0xe2, 0xc8, 0x3a, 0xb9, 0x5c, 0xc3, 0x06, 0x95, 0x90, 0x89, 0x2a, 0xbe, + 0xaf, 0x7e, 0x95, 0xb8, 0xf3, 0xff, 0xf7, 0x54, 0x28, 0x4b, 0xcf, 0x10, + 0x97, 0xcd, 0x00, 0xeb, 0xce, 0xe0, 0x56, 0x74, 0xb3, 0xb2, 0x84, 0x92, + 0x39, 0xf0, 0x90, 0xa9, 0x1b, 0xaa, 0x58, 0xe4, 0x99, 0x70, 0x7a, 0xe9, + 0x96, 0xd2, 0x8b, 0x79, 0x70, 0xd5, 0xdd, 0x48, 0xeb, 0x9d, 0x09, 0x7e, + 0x21, 0x05, 0xe7, 0x66, 0xdd, 0xcb, 0x59, 0x34, 0x3d, 0x45, 0xf6, 0x1c, + 0xe3, 0xf2, 0x1c, 0xa7, 0xcd, 0x8a, 0xd9, 0x76, 0x05, 0xbf, 0x21, 0x15, + 0x7e, 0xee, 0x9d, 0xa9, 0x37, 0xa4, 0xc1, 0xde, 0xa2, 0x62, 0xba, 0xf3, + 0x6a, 0xc2, 0x63, 0x15, 0xd1, 0xdf, 0xb2, 0xb1, 0x13, 0xf6, 0x29, 0xb9, + 0x20, 0xe6, 0xd8, 0xe7, 0xf4, 0x3d, 0xd9, 0x01, 0xb1, 0xa4, 0xf6, 0xac, + 0x93, 0x93, 0x8b, 0xd1, 0x86, 0xc2, 0x1b, 0xc6, 0x07, 0x53, 0x64, 0x3f, + 0xfe, 0x4b, 0x27, 0x6c, 0xf3, 0x20, 0xd2, 0xaa, 0x63, 0x37, 0x01, 0x1e, + 0xbf, 0xb4, 0x70, 0x10, 0x2f, 0x8a, 0x09, 0x7f, 0x99, 0x65, 0xd5, 0x84, + 0xf9, 0x24, 0x8b, 0x9d, 0xf4, 0xc9, 0xdd, 0xcc, 0x69, 0xda, 0xf2, 0xa4, + 0x75, 0x23, 0xbc, 0x4e, 0x16, 0xe2, 0x75, 0x8e, 0x43, 0x1f, 0xfb, 0x19, + 0x85, 0x9a, 0x95, 0x81, 0xd7, 0x2d, 0x7f, 0x3b, 0xb1, 0xd5, 0x8e, 0xdb, + 0xff, 0x24, 0x1a, 0x63, 0x58, 0x1f, 0xc8, 0xd2, 0xcc, 0x92, 0x3d, 0x08, + 0x72, 0x4c, 0xcf, 0x09, 0xc4, 0x99, 0xe0, 0x46, 0xb2, 0xe7, 0xc8, 0xe3, + 0x75, 0xea, 0x2b, 0xea, 0xd1, 0x4a, 0xd4, 0x17, 0x54, 0x7f, 0x51, 0x00, + 0xa2, 0x5f, 0xf0, 0xce, 0xbb, 0x1e, 0x96, 0xfe, 0x4c, 0x39, 0xd8, 0x05, + 0xf3, 0xd5, 0xde, 0xbb, 0x5a, 0xd7, 0x82, 0x9b, 0x1a, 0x85, 0xf7, 0xa3, + 0xd8, 0x15, 0x60, 0xa9, 0x16, 0xf7, 0x1b, 0x06, 0x2d, 0x89, 0x15, 0xf9, + 0x27, 0x41, 0xea, 0xe7, 0x75, 0x5b, 0xca, 0xbf, 0xa2, 0x7b, 0xd5, 0x0b, + 0xd1, 0x58, 0xf8, 0x62, 0x05, 0x20, 0x05, 0x76, 0xec, 0x2c, 0x9b, 0x32, + 0x0d, 0x34, 0xb0, 0x7c, 0xb8, 0x12, 0x8f, 0x84, 0x15, 0xe4, 0x5d, 0xfd, + 0xfe, 0x24, 0xde, 0x88, 0xa7, 0xae, 0x50, 0xd9, 0xac, 0xf5, 0xf8, 0x3a, + 0x30, 0xae, 0xa7, 0xc2, 0x72, 0x28, 0x0a, 0xd3, 0x19, 0x55, 0x76, 0xa7, + 0x36, 0x04, 0xba, 0xe5, 0x17, 0x80, 0xbd, 0x22, 0xd4, 0x80, 0x27, 0x94, + 0x79, 0x2e, 0xf3, 0x88, 0xdd, 0x33, 0xb5, 0xef, 0xca, 0x00, 0x77, 0xe2, + 0xd5, 0x96, 0xb0, 0x94, 0x13, 0x12, 0x70, 0xbb, 0xc3, 0x96, 0xe9, 0x11, + 0xdd, 0x45, 0x0a, 0xa2, 0x52, 0x33, 0x52, 0xf5, 0x3d, 0xb4, 0xca, 0xe2, + 0x10, 0xfa, 0x1c, 0xd0, 0x95, 0x1a, 0x81, 0x96, 0xc0, 0x81, 0x2a, 0xea, + 0x29, 0xd0, 0x8e, 0x6a, 0x82, 0x39, 0x74, 0x90, 0xec, 0xf8, 0xc7, 0x61, + 0x1e, 0x09, 0x33, 0x68, 0xb9, 0x2c, 0xea, 0x63, 0x78, 0xe1, 0x0b, 0xc1, + 0x2d, 0xd9, 0x6f, 0xb1, 0x3a, 0xeb, 0xea, 0xb3, 0x9c, 0x93, 0x49, 0x72, + 0x49, 0xda, 0x76, 0xf1, 0x60, 0x77, 0x81, 0x2c, 0x67, 0x69, 0x48, 0x36, + 0x40, 0xfe, 0x2e, 0x00, 0xfa, 0xf2, 0x5b, 0x04, 0x8d, 0x4d, 0x95, 0x1b, + 0x81, 0x8c, 0x54, 0x07, 0x5b, 0xd5, 0x8a, 0x33, 0xb3, 0x50, 0x4c, 0xef, + 0xf3, 0x86, 0x46, 0xa8, 0x8a, 0x6a, 0x77, 0x42, 0x19, 0x77, 0xb3, 0x49, + 0x66, 0x13, 0x03, 0x4d, 0x1d, 0x03, 0xf3, 0xa7, 0xfa, 0xee, 0xaa, 0xd6, + 0xc0, 0x9d, 0x17, 0x3e, 0x40, 0xbb, 0x85, 0x33, 0xb0, 0x5e, 0x63, 0x7b, + 0xcf, 0x01, 0xc9, 0x3f, 0x4b, 0xaf, 0x2e, 0xce, 0x22, 0x0c, 0x5c, 0x4e, + 0x97, 0x70, 0x38, 0xda, 0x32, 0x40, 0x48, 0x54, 0x18, 0x69, 0x73, 0x58, + 0x9c, 0x9b, 0xba, 0x94, 0xa0, 0x9c, 0x2c, 0xae, 0x2b, 0x55, 0x94, 0xb4, + 0x8c, 0x4f, 0xd3, 0xa6, 0x7e, 0x4a, 0x62, 0x1d, 0x47, 0xc8, 0x79, 0xbd, + 0x81, 0x99, 0xe3, 0xd6, 0x5d, 0xa7, 0x5f, 0xaf, 0xda, 0x0a, 0x28, 0xed, + 0xa9, 0x5e, 0x8e, 0x6d, 0xd8, 0x38, 0x93, 0xea, 0xa0, 0x8a, 0x50, 0x6c, + 0x20, 0x40, 0xf6, 0xc9, 0xfa, 0x7d, 0x94, 0x7e, 0x2d, 0x5f, 0xd7, 0x61, + 0x28, 0xe3, 0x7e, 0x70, 0x19, 0x72, 0xb1, 0x96, 0xa7, 0x7f, 0x14, 0xbe, + 0x62, 0x98, 0xac, 0xde, 0x03, 0x91, 0x7e, 0x30, 0x07, 0x76, 0x5f, 0xc8, + 0x59, 0x5d, 0x0b, 0x36, 0xc8, 0x4d, 0xeb, 0xf7, 0x4d, 0xf9, 0xe2, 0x0b, + 0x89, 0xd8, 0x91, 0xa3, 0x71, 0xf2, 0xf9, 0xcf, 0x3d, 0xf1, 0xd8, 0x3b, + 0x9f, 0x7d, 0x3c, 0x6f, 0x38, 0x63, 0x27, 0xf8, 0x64, 0xef, 0xfb, 0xa6, + 0xfc, 0xec, 0x67, 0x1e, 0x7b, 0xe2, 0xbd, 0xcf, 0x3f, 0xa9, 0xc7, 0x5e, + 0x38, 0x9e, 0x8c, 0x1f, 0x3d, 0x12, 0x5f, 0x93, 0x24, 0x50, 0x10, 0xed, + 0x15, 0x57, 0x5a, 0x83, 0x9b, 0x9d, 0x03, 0x5a, 0x29, 0x2e, 0xc5, 0x6e, + 0x61, 0x71, 0x63, 0x83, 0xf8, 0xa6, 0xeb, 0xae, 0xd2, 0x4f, 0x44, 0xb8, + 0xc5, 0x5d, 0xaf, 0x23, 0x0a, 0xf2, 0x9d, 0x1e, 0x93, 0xdd, 0x7e, 0xa6, + 0x5f, 0x0e, 0x61, 0xf7, 0x8b, 0xcd, 0x92, 0xdb, 0x16, 0x98, 0x07, 0xfc, + 0xf9, 0x90, 0x92, 0x30, 0xfc, 0x33, 0xf2, 0x62, 0x97, 0xc6, 0xb6, 0x1d, + 0x6a, 0xf1, 0xd6, 0x19, 0xf9, 0x09, 0xf7, 0xe6, 0x3c, 0x6c, 0x3d, 0x55, + 0xac, 0x18, 0x64, 0x3a, 0x2f, 0x00, 0x8b, 0x15, 0x99, 0xc0, 0xd6, 0x98, + 0x07, 0x8b, 0xa0, 0xc3, 0xba, 0x2b, 0x47, 0x6c, 0x37, 0x66, 0x09, 0x08, + 0x40, 0x10, 0xd2, 0x5e, 0x46, 0x20, 0xa2, 0x2b, 0x29, 0x84, 0x4c, 0x91, + 0x74, 0xb1, 0xeb, 0x6e, 0x14, 0x15, 0x52, 0x3c, 0x2a, 0x8d, 0xbe, 0x4b, + 0x76, 0x1d, 0xa7, 0xc1, 0x3a, 0xfe, 0x21, 0x07, 0x3d, 0x11, 0xb9, 0xa0, + 0x7d, 0xd4, 0x9a, 0xa9, 0x0c, 0xda, 0xbc, 0x3c, 0xd2, 0x4b, 0x55, 0xf2, + 0x1d, 0x04, 0xe9, 0xf1, 0xb8, 0x97, 0xbc, 0xc8, 0x28, 0xf7, 0x36, 0x5f, + 0x27, 0x05, 0xc3, 0x0f, 0xd8, 0xe1, 0x71, 0x79, 0x1e, 0xb8, 0xe2, 0x4b, + 0xab, 0x22, 0x42, 0x44, 0x15, 0x27, 0xd7, 0xa8, 0x8f, 0x06, 0x29, 0x42, + 0x83, 0xf5, 0x05, 0xc7, 0xd0, 0xf6, 0x41, 0x5f, 0xbe, 0x4c, 0xa2, 0x78, + 0xd4, 0x57, 0xae, 0x50, 0x6f, 0x80, 0xb4, 0x52, 0xd5, 0x6e, 0x5f, 0xf6, + 0x56, 0x0e, 0x3d, 0x81, 0x10, 0x53, 0x0f, 0x65, 0x55, 0x98, 0x4b, 0x5e, + 0x6d, 0x65, 0xec, 0x04, 0x2d, 0xa3, 0xb5, 0xb7, 0xc4, 0xde, 0x04, 0xc6, + 0xec, 0xc3, 0xd7, 0xb1, 0x0d, 0x9e, 0x48, 0x14, 0x43, 0xe9, 0xf7, 0xcc, + 0xc0, 0xf8, 0x6c, 0xdb, 0xa9, 0x3c, 0xd4, 0xdb, 0x2e, 0x87, 0xa3, 0xc8, + 0x6d, 0xb1, 0xe0, 0xdb, 0x8c, 0xfb, 0x3a, 0x6b, 0xcb, 0x5e, 0x28, 0x26, + 0x7a, 0x99, 0xeb, 0x75, 0xf9, 0x10, 0x7f, 0x5e, 0xec, 0x45, 0x22, 0x09, + 0x61, 0x49, 0xa8, 0x27, 0x8d, 0x51, 0xaf, 0xb2, 0xf5, 0x2e, 0xbc, 0x6a, + 0xe7, 0x96, 0x93, 0xd4, 0x58, 0x9c, 0x37, 0x2b, 0x49, 0x00, 0x1d, 0x39, + 0xb2, 0xc1, 0x4a, 0x81, 0x4e, 0xf6, 0x40, 0x61, 0xde, 0x8f, 0xbd, 0xe2, + 0xf3, 0xb0, 0x75, 0x82, 0x32, 0x1b, 0xfa, 0x64, 0x82, 0xc8, 0x21, 0x39, + 0x72, 0xe0, 0x71, 0x2b, 0x5c, 0x2d, 0x92, 0xa7, 0x65, 0x18, 0xb9, 0xe2, + 0x9d, 0x26, 0x0a, 0xa4, 0x2c, 0xbe, 0xf9, 0x8e, 0xa0, 0xf9, 0x21, 0xd6, + 0xb4, 0xb7, 0x60, 0x43, 0xb4, 0x3d, 0xb5, 0x7a, 0x2a, 0x69, 0x03, 0x10, + 0xbb, 0x47, 0x11, 0xfc, 0x62, 0xc3, 0x2a, 0xfa, 0x65, 0x8a, 0x31, 0x2a, + 0x3d, 0xd4, 0x59, 0x32, 0x08, 0x88, 0x1a, 0xbe, 0xae, 0x07, 0xdc, 0x8c, + 0x96, 0x00, 0x95, 0x26, 0xfd, 0xdf, 0xe7, 0x9f, 0x64, 0xfd, 0x62, 0x05, + 0x43, 0x42, 0xad, 0xad, 0x64, 0x4c, 0x31, 0xa4, 0x94, 0x04, 0x6a, 0x2d, + 0xa5, 0xd8, 0x4a, 0x75, 0xd4, 0x6e, 0xf1, 0x81, 0x16, 0x4a, 0x23, 0x56, + 0x06, 0xbf, 0x97, 0xff, 0x57, 0x66, 0x08, 0x73, 0x43, 0x52, 0x90, 0x03, + 0x5e, 0x4f, 0xb6, 0xe4, 0xc0, 0x9d, 0x04, 0xc8, 0x24, 0x23, 0xaf, 0x47, + 0xff, 0x82, 0x63, 0xfe, 0xad, 0x15, 0x5b, 0xef, 0xf1, 0x51, 0x89, 0xa5, + 0xb9, 0x84, 0xac, 0x23, 0x3f, 0x72, 0x28, 0x87, 0x03, 0xc2, 0xf1, 0x43, + 0xf6, 0x7e, 0x46, 0xbf, 0xb9, 0xf6, 0x1c, 0x4b, 0xe6, 0xe5, 0xc4, 0x50, + 0x7e, 0x4a, 0x5a, 0xe5, 0x74, 0x7e, 0x8e, 0xc3, 0xb2, 0x56, 0xbf, 0x58, + 0x31, 0xd0, 0xff, 0xcf, 0x82, 0x99, 0x8e, 0xa7, 0xb3, 0x83, 0x87, 0x6a, + 0x0c, 0x76, 0x39, 0x53, 0x10, 0xc4, 0x84, 0x02, 0xd4, 0xe4, 0x4a, 0x98, + 0x58, 0xf5, 0x78, 0xd2, 0xcb, 0x69, 0xbe, 0xd5, 0xa1, 0x47, 0x6b, 0xc6, + 0x07, 0x39, 0x18, 0x39, 0xb8, 0x25, 0x5c, 0x24, 0xc3, 0x92, 0x69, 0x65, + 0x61, 0x79, 0xc4, 0xfd, 0x1d, 0x30, 0xbd, 0x73, 0x73, 0x7b, 0x40, 0x14, + 0x14, 0xf6, 0xd0, 0x23, 0xff, 0xac, 0xc4, 0x1a, 0xcb, 0x5a, 0xb9, 0xad, + 0xc3, 0xd6, 0xe3, 0x67, 0xc0, 0x61, 0xc2, 0x97, 0x56, 0x8e, 0x5b, 0x4f, + 0xa1, 0x5c, 0x47, 0x43, 0x88, 0x7f, 0xd9, 0xbf, 0xd8, 0x7d, 0xfb, 0x1a, + 0xb5, 0x9d, 0x76, 0x0c, 0xf0, 0x88, 0xc3, 0xe8, 0x7e, 0x50, 0x6f, 0xde, + 0x72, 0x9a, 0xa6, 0x27, 0x4b, 0xb5, 0x1f, 0x98, 0x5d, 0x8a, 0x1c, 0xda, + 0x96, 0x90, 0xdb, 0x56, 0x8f, 0x10, 0x04, 0xfc, 0xe7, 0xa3, 0x5f, 0xde, + 0xe1, 0x70, 0x8f, 0xd6, 0xec, 0x6e, 0x83, 0xea, 0x10, 0x55, 0x7e, 0x7e, + 0xc3, 0xe3, 0x9c, 0xa2, 0x8e, 0x65, 0xaa, 0xfe, 0x97, 0xf0, 0x67, 0x4d, + 0x43, 0x9c, 0x59, 0xbb, 0x83, 0x6b, 0x4e, 0xfb, 0x68, 0x90, 0xeb, 0x5f, + 0x69, 0x42, 0x4c, 0x0e, 0x7d, 0x7a, 0xb3, 0xd8, 0x5c, 0x3d, 0xcc, 0x20, + 0xc7, 0x5b, 0x3e, 0x64, 0xb2, 0x50, 0xaa, 0x49, 0x1e, 0x6a, 0x0a, 0xeb, + 0x32, 0x9c, 0x57, 0x72, 0x2a, 0xe6, 0x1d, 0xb6, 0x20, 0xbd, 0x45, 0x9d, + 0x5f, 0xb9, 0x8f, 0xd4, 0x20, 0xe4, 0x53, 0xea, 0x78, 0x84, 0x5c, 0x7b, + 0xdb, 0x89, 0xa2, 0x7a, 0x44, 0xcc, 0xd0, 0xe0, 0x1b, 0x52, 0x88, 0x12, + 0x73, 0xe7, 0x7e, 0x50, 0x74, 0x8e, 0x71, 0xe8, 0x91, 0x1a, 0x84, 0x68, + 0xc3, 0x90, 0x57, 0x43, 0xe7, 0x7b, 0xc1, 0x28, 0x40, 0x1f, 0xbc, 0xa3, + 0x9f, 0x55, 0xab, 0x6e, 0x0e, 0xb0, 0x57, 0x76, 0x5f, 0xd7, 0x6e, 0x1f, + 0x2a, 0xef, 0xe5, 0x23, 0x0b, 0x4d, 0xce, 0x73, 0x7b, 0xbf, 0xfa, 0x53, + 0x12, 0xf3, 0xd3, 0x36, 0xb0, 0xd2, 0xf1, 0x33, 0x38, 0x0d, 0x9e, 0xfd, + 0x40, 0x13, 0x10, 0x66, 0xe2, 0xdb, 0xe1, 0x61, 0x2e, 0x13, 0x75, 0x6f, + 0x4f, 0x29, 0x66, 0x64, 0x39, 0x79, 0x83, 0x78, 0x22, 0x30, 0x9f, 0x34, + 0x76, 0x89, 0xcc, 0xd0, 0x87, 0x77, 0xb2, 0x68, 0xa4, 0xf5, 0xb7, 0x32, + 0x5b, 0x91, 0x01, 0x45, 0xe1, 0x36, 0x11, 0xc2, 0xc5, 0x6e, 0xbd, 0x6d, + 0xc8, 0x91, 0xb9, 0xd4, 0xa9, 0x19, 0x8c, 0xbe, 0x29, 0x78, 0xc2, 0x89, + 0x0d, 0xd5, 0x3e, 0x86, 0x8f, 0x1c, 0xaa, 0x43, 0x4a, 0x6c, 0x90, 0xdc, + 0x02, 0xbb, 0x7b, 0xde, 0xa8, 0xaa, 0x46, 0x64, 0xaa, 0x1b, 0x65, 0x32, + 0x91, 0x2c, 0x6c, 0x15, 0x1d, 0x9f, 0x04, 0xbb, 0xd9, 0xcf, 0xb0, 0xf2, + 0xb6, 0x32, 0x91, 0xfe, 0x09, 0xa3, 0xeb, 0x74, 0xd5, 0xc3, 0x8f, 0x21, + 0x92, 0xee, 0x59, 0xb2, 0x96, 0x0c, 0x07, 0x9b, 0x57, 0x14, 0x48, 0x61, + 0xad, 0x6f, 0x16, 0xe6, 0x13, 0xc6, 0x40, 0x6f, 0xf2, 0xab, 0xa1, 0x4c, + 0x39, 0xfd, 0x01, 0xd9, 0x5a, 0x2d, 0x0d, 0xe7, 0x6b, 0xbc, 0x21, 0xca, + 0xc8, 0xa2, 0xc6, 0xf3, 0xe8, 0x6b, 0x3f, 0xff, 0xec, 0x4f, 0xb1, 0x47, + 0x54, 0x97, 0x51, 0x7c, 0xda, 0xd8, 0xda, 0xbd, 0x6a, 0x9b, 0x8d, 0x54, + 0xf6, 0x3d, 0xc6, 0xc3, 0xf7, 0x15, 0x68, 0x6a, 0xd9, 0x6f, 0x99, 0xeb, + 0xc9, 0xe4, 0x3d, 0x39, 0x1b, 0xca, 0xc7, 0x21, 0x60, 0x20, 0x45, 0x98, + 0x8a, 0x52, 0x61, 0xc1, 0x17, 0x58, 0x1b, 0xda, 0x1d, 0x81, 0x86, 0x64, + 0xfc, 0x2a, 0x4c, 0x4f, 0xe7, 0xdb, 0x20, 0xbe, 0xa9, 0x54, 0x6c, 0xa5, + 0x11, 0x53, 0x83, 0xc0, 0xe6, 0x6e, 0x13, 0x56, 0x54, 0xfb, 0xb7, 0x7b, + 0xb7, 0x0b, 0xce, 0x3c, 0x2c, 0xb3, 0xce, 0x05, 0xd5, 0x86, 0x6f, 0xbf, + 0x0b, 0xfd, 0x13, 0x09, 0xf2, 0x4f, 0xe7, 0x79, 0xc5, 0x88, 0xc0, 0x28, + 0xbd, 0x9e, 0x3d, 0x7c, 0x19, 0xb2, 0xb0, 0xe9, 0x79, 0xbc, 0xf6, 0xbd, + 0xfa, 0x9d, 0x4a, 0x7f, 0x03, 0xbc, 0x77, 0x2a, 0x2e, 0x16, 0x5e, 0x62, + 0xa4, 0xf0, 0x05, 0xc9, 0x0e, 0xb9, 0x08, 0x40, 0x90, 0xfb, 0x48, 0x6f, + 0x31, 0xd9, 0x4d, 0x61, 0x98, 0xdc, 0xf8, 0xb0, 0x6f, 0x8c, 0x52, 0xe7, + 0x30, 0x6a, 0x39, 0xe7, 0x6f, 0x61, 0xff, 0xed, 0x4b, 0x2f, 0x7f, 0x48, + 0x6c, 0x40, 0x83, 0x28, 0x0b, 0x81, 0x80, 0xf4, 0x4a, 0x27, 0x06, 0xbf, + 0x94, 0x98, 0x49, 0x26, 0x26, 0x77, 0xe5, 0x06, 0x3f, 0x71, 0x11, 0xd5, + 0xc2, 0x2c, 0x5a, 0x01, 0x03, 0x99, 0x6a, 0x1e, 0x26, 0x1e, 0x27, 0xa9, + 0x60, 0xdd, 0x15, 0xf8, 0x7f, 0x2d, 0x82, 0xf7, 0x2b, 0xd8, 0xad, 0xfd, + 0x73, 0x16, 0x77, 0x3a, 0xd0, 0xd5, 0x4d, 0xcd, 0x31, 0x57, 0x93, 0x2c, + 0xe0, 0x59, 0x6e, 0x7d, 0xa1, 0x58, 0x0a, 0x87, 0xe5, 0xca, 0x11, 0xe1, + 0x4c, 0xf2, 0x27, 0xc4, 0x93, 0x43, 0x4a, 0x0d, 0x13, 0xe9, 0x8b, 0xd8, + 0x6e, 0x2d, 0x00, 0xe8, 0x8b, 0xa3, 0xae, 0xe1, 0xa5, 0x76, 0x30, 0x10, + 0xee, 0x1d, 0x70, 0xeb, 0x8e, 0xdf, 0xd5, 0x34, 0x14, 0x22, 0x6e, 0x99, + 0x52, 0x11, 0xd0, 0x6e, 0xc4, 0x2f, 0x44, 0x50, 0x1d, 0x65, 0x26, 0xd1, + 0x37, 0xd4, 0x0a, 0x58, 0xd6, 0x89, 0x2d, 0xf9, 0x35, 0x5a, 0x6f, 0xcd, + 0x71, 0x6a, 0x30, 0x94, 0x0a, 0xa8, 0x26, 0xb9, 0xc1, 0xec, 0xa3, 0x15, + 0xf6, 0x6a, 0x71, 0x2a, 0xd6, 0xa0, 0x96, 0xa5, 0xc5, 0x2c, 0x80, 0x9d, + 0x87, 0xa6, 0x15, 0x01, 0xdf, 0x4a, 0xf0, 0x68, 0xcf, 0xa2, 0x04, 0x73, + 0xd4, 0x5c, 0xb4, 0x61, 0x9e, 0xb7, 0x54, 0x32, 0x57, 0x4b, 0xa8, 0xcc, + 0x0c, 0xf1, 0x13, 0xb0, 0xeb, 0x12, 0x6f, 0x64, 0xe9, 0x89, 0xbd, 0x24, + 0x3f, 0x5a, 0x7f, 0x09, 0xfb, 0x55, 0x69, 0xf0, 0x5d, 0xd5, 0xd0, 0xe0, + 0xa7, 0x85, 0x1b, 0x40, 0xb7, 0xda, 0xe4, 0x62, 0x90, 0x39, 0x5e, 0xbf, + 0x9a, 0xbc, 0x76, 0xe5, 0x91, 0xf5, 0x6e, 0x02, 0xe5, 0xfb, 0x72, 0xb4, + 0x3c, 0x0a, 0x9e, 0x8d, 0x89, 0x44, 0xb1, 0x7a, 0x9e, 0x48, 0x96, 0xe8, + 0x0a, 0x48, 0x97, 0xba, 0x80, 0x14, 0xda, 0xbb, 0xd7, 0x25, 0x81, 0x79, + 0x9c, 0xd9, 0x39, 0x49, 0xe1, 0x3e, 0xce, 0xc8, 0x39, 0x90, 0xa7, 0xd8, + 0x0c, 0xd5, 0x70, 0x82, 0x0d, 0x2f, 0x76, 0xd1, 0x1a, 0x7e, 0x20, 0x7e, + 0xa5, 0xa1, 0x48, 0xc2, 0x45, 0x24, 0x2c, 0xe1, 0xcc, 0x03, 0xe3, 0xcd, + 0x4c, 0xe0, 0x6d, 0xd4, 0x85, 0xd4, 0xfd, 0x20, 0x26, 0x0b, 0xdd, 0xce, + 0x43, 0x8b, 0xc8, 0x8b, 0x8d, 0xe6, 0x08, 0xe1, 0x2c, 0xc8, 0x3b, 0x8c, + 0x0b, 0xe3, 0x72, 0xff, 0x70, 0x04, 0x32, 0x5e, 0x89, 0xbb, 0x58, 0x9b, + 0x6b, 0xfa, 0xc1, 0xaa, 0xdf, 0xc5, 0x34, 0xf3, 0x5d, 0xf1, 0x99, 0x55, + 0xe8, 0x79, 0xb6, 0x06, 0x38, 0x95, 0x21, 0xab, 0x70, 0x69, 0x10, 0xc7, + 0xe3, 0x35, 0xd2, 0x4d, 0x96, 0x41, 0x9d, 0x23, 0x3c, 0xf2, 0xa4, 0x28, + 0x4c, 0x90, 0xca, 0x87, 0x4a, 0x89, 0x2e, 0xc3, 0xed, 0x8b, 0x83, 0x3d, + 0x37, 0xa9, 0xe5, 0xf1, 0xc8, 0xdd, 0xce, 0x69, 0xca, 0x66, 0xeb, 0xf4, + 0x3e, 0xe9, 0x14, 0xa0, 0xee, 0xa5, 0xf9, 0xf2, 0xf8, 0x88, 0xe0, 0x6a, + 0x91, 0x98, 0xb1, 0xa7, 0xfd, 0x0b, 0x60, 0x7c, 0x45, 0xd3, 0x93, 0x4f, + 0x82, 0xea, 0xf7, 0x98, 0x0d, 0xf8, 0x86, 0xfc, 0x42, 0x7f, 0x09, 0x61, + 0x2e, 0x4f, 0xd4, 0x21, 0x0f, 0xbe, 0xc3, 0xd7, 0x66, 0xd0, 0x4a, 0x82, + 0xdd, 0x02, 0x7a, 0x18, 0xc1, 0x85, 0x29, 0x7e, 0x9b, 0xc8, 0xc2, 0x55, + 0xee, 0x75, 0xe8, 0x5a, 0x3d, 0x73, 0xe7, 0x39, 0xeb, 0x2e, 0xd0, 0x70, + 0xe4, 0xba, 0x75, 0x40, 0x72, 0x18, 0x6b, 0x23, 0xa0, 0x12, 0x3c, 0x06, + 0x95, 0x82, 0x58, 0x3b, 0xd1, 0x53, 0x7a, 0x9e, 0xaf, 0x4a, 0x01, 0x4c, + 0xf3, 0xf8, 0xd3, 0xcb, 0x10, 0xe2, 0x14, 0xda, 0xaf, 0x79, 0x01, 0xb1, + 0xd2, 0x88, 0x62, 0x30, 0x65, 0x06, 0x25, 0xab, 0x80, 0x30, 0x78, 0xdb, + 0xef, 0xf5, 0x6e, 0xe2, 0x77, 0xd4, 0xc3, 0xd7, 0x98, 0xeb, 0xf0, 0xb7, + 0x16, 0xd2, 0x9c, 0xcb, 0xec, 0xfd, 0xbd, 0xf7, 0x58, 0x89, 0x1d, 0xf3, + 0x9e, 0x55, 0xd7, 0x9d, 0x1e, 0x50, 0x17, 0x9a, 0x15, 0xa2, 0x1e, 0x94, + 0xe7, 0x8f, 0x2f, 0x10, 0x62, 0x80, 0x40, 0xc6, 0x60, 0x5f, 0xde, 0x4b, + 0x3f, 0x3e, 0xdd, 0x3b, 0x1f, 0x92, 0xcf, 0x93, 0xaf, 0x10, 0x25, 0x18, + 0x65, 0xfc, 0x3d, 0x5a, 0x80, 0x4f, 0xd5, 0xde, 0x67, 0x6b, 0xe3, 0x5c, + 0xd5, 0x7e, 0xdd, 0xbc, 0xc6, 0xc3, 0x3d, 0x5f, 0x63, 0xa3, 0xc1, 0x77, + 0x19, 0x46, 0xb9, 0x17, 0xea, 0xd8, 0xe4, 0x79, 0x45, 0x47, 0x17, 0x37, + 0xe0, 0x1b, 0xaf, 0xab, 0xce, 0xd5, 0x7a, 0x82, 0xb1, 0x6e, 0x7c, 0x8b, + 0x6f, 0xda, 0x1f, 0x75, 0xbe, 0xb6, 0xe4, 0x87, 0x4d, 0x3f, 0x6f, 0xa0, + 0xdf, 0xf6, 0x79, 0x99, 0xf1, 0xfa, 0xaf, 0x38, 0x0d, 0x5e, 0x07, 0x96, + 0x57, 0x09, 0xdd, 0x6a, 0x43, 0xda, 0x1c, 0xda, 0xd5, 0xfd, 0xf4, 0x41, + 0x53, 0x7b, 0xb9, 0xcf, 0xae, 0x8a, 0xd3, 0xff, 0x2a, 0x0a, 0x7b, 0x48, + 0xfd, 0xb0, 0x94, 0x82, 0xbc, 0x79, 0x9e, 0x00, 0xa2, 0x30, 0x2c, 0x8a, + 0xc3, 0x6a, 0x83, 0x10, 0x07, 0xfe, 0x69, 0x4c, 0x97, 0xd5, 0x27, 0x50, + 0x84, 0xc8, 0x54, 0x6e, 0xdc, 0xcf, 0xa2, 0x74, 0x1e, 0x09, 0xc0, 0xf0, + 0xa3, 0x47, 0xe0, 0xbf, 0x4a, 0xde, 0x6a, 0x5c, 0xfa, 0x2d, 0xfe, 0xa5, + 0x64, 0x37, 0x93, 0xf2, 0x88, 0xcd, 0xdf, 0xe7, 0x8d, 0x83, 0x98, 0xe9, + 0x75, 0xb6, 0x01, 0x2b, 0x4d, 0xb5, 0xb8, 0xa7, 0x40, 0x66, 0x38, 0x5a, + 0xd6, 0x7f, 0xc5, 0x1f, 0xdb, 0xfe, 0x85, 0x20, 0x8f, 0x6e, 0x0f, 0xca, + 0xa9, 0xa5, 0x97, 0xe7, 0x96, 0xaa, 0xbc, 0xea, 0xa5, 0xe1, 0x8f, 0xbd, + 0x23, 0x57, 0xdd, 0x21, 0x68, 0xc1, 0x88, 0x0c, 0x47, 0x74, 0x8f, 0x6e, + 0xf6, 0x20, 0x9b, 0x3b, 0xa6, 0x23, 0xe5, 0x55, 0xb3, 0x85, 0xf6, 0xbf, + 0x1b, 0x27, 0xe2, 0xd3, 0x8e, 0xa2, 0x63, 0x66, 0x81, 0x61, 0xb0, 0x1b, + 0x95, 0xe6, 0x30, 0xc0, 0xed, 0x2d, 0x98, 0xc2, 0x64, 0x0c, 0x87, 0x61, + 0x2d, 0xc0, 0x0d, 0x03, 0x91, 0xea, 0xda, 0x8f, 0x8f, 0xe8, 0xc1, 0x6c, + 0xba, 0x47, 0x06, 0x25, 0x7d, 0x94, 0x32, 0xc5, 0x98, 0xb9, 0x43, 0x84, + 0x90, 0x49, 0x70, 0xdf, 0x61, 0xde, 0xec, 0xad, 0xd8, 0x0e, 0x6d, 0xb1, + 0x7d, 0x6c, 0x96, 0xaa, 0x1e, 0x8a, 0x6b, 0x13, 0x06, 0x74, 0x58, 0x08, + 0xf1, 0x6a, 0xa3, 0x7d, 0x92, 0x5e, 0x8a, 0x8c, 0x2c, 0x3c, 0x42, 0xda, + 0x57, 0xcc, 0xe6, 0x3b, 0x49, 0x84, 0x4b, 0x7e, 0x8e, 0x07, 0xbf, 0x94, + 0x1c, 0x6d, 0x79, 0x23, 0xfb, 0xfe, 0xaa, 0xb3, 0xbc, 0x32, 0x1e, 0xdb, + 0x7d, 0xd1, 0x38, 0x60, 0x9d, 0xb9, 0xe2, 0x64, 0x9b, 0xf6, 0x79, 0x2d, + 0xf8, 0xc3, 0x76, 0x79, 0x5f, 0xb2, 0xda, 0x4c, 0x71, 0xb2, 0xe0, 0x40, + 0x47, 0xc6, 0xff, 0x9e, 0x79, 0x14, 0x0e, 0x42, 0xf5, 0x42, 0xed, 0xbb, + 0x02, 0xf8, 0x2d, 0x2d, 0x55, 0xd1, 0xbf, 0xa8, 0x72, 0x54, 0xae, 0x3b, + 0xd1, 0xe6, 0x55, 0x20, 0x14, 0x1a, 0x13, 0xc8, 0xb7, 0x38, 0xbd, 0x35, + 0x43, 0x00, 0xf4, 0x79, 0x7e, 0x80, 0xf8, 0x66, 0xe2, 0x95, 0x53, 0x7d, + 0x0f, 0xca, 0x0a, 0x2e, 0xb5, 0x60, 0xa1, 0x3b, 0x49, 0x1d, 0x4b, 0xdc, + 0x89, 0x5b, 0x98, 0x0c, 0x8e, 0x92, 0xbd, 0x7a, 0x11, 0xab, 0x18, 0x4c, + 0x96, 0xbd, 0x83, 0xe5, 0x98, 0x46, 0x7d, 0x20, 0xec, 0x30, 0x45, 0x5f, + 0x3f, 0x31, 0xfe, 0xe8, 0x4e, 0xa3, 0xbc, 0xb3, 0xd4, 0x3d, 0x20, 0x8d, + 0xdb, 0xcb, 0x2a, 0x7e, 0xf2, 0x85, 0xe6, 0x03, 0x53, 0xd4, 0x83, 0xca, + 0xfc, 0x41, 0xd4, 0xb3, 0xb6, 0x7f, 0xe5, 0xd7, 0x7c, 0x54, 0x7f, 0xc9, + 0x5f, 0x9b, 0xa4, 0xcd, 0xa8, 0xa2, 0xde, 0x60, 0xb5, 0x4b, 0x7d, 0x34, + 0x9d, 0xe2, 0xe5, 0x26, 0xdb, 0x4b, 0x73, 0xf0, 0x69, 0x80, 0xdd, 0x45, + 0x07, 0xd3, 0x93, 0x63, 0x92, 0x7b, 0xe3, 0x70, 0xce, 0xe4, 0x98, 0xca, + 0xe7, 0xa7, 0xd6, 0x6a, 0x14, 0xd6, 0xff, 0x6e, 0x3e, 0xf6, 0x0f, 0xe3, + 0x7d, 0x80, 0x93, 0xfb, 0xf8, 0x57, 0xd0, 0xb7, 0x69, 0xc3, 0x46, 0xd1, + 0x61, 0x03, 0x8f, 0xcc, 0xdb, 0xbc, 0xa8, 0xde, 0x8a, 0xb3, 0x59, 0x92, + 0x4e, 0x3a, 0x7d, 0x30, 0x7c, 0x08, 0x01, 0x0b, 0x59, 0x7c, 0x6d, 0x56, + 0x57, 0xcc, 0x3e, 0x5f, 0xbd, 0x20, 0xc7, 0xe0, 0xb0, 0x7e, 0xb4, 0x58, + 0x00, 0xff, 0xe3, 0x71, 0x95, 0x10, 0xd6, 0x6e, 0x83, 0xcb, 0x7a, 0xfb, + 0xfb, 0xc4, 0x33, 0x4c, 0xc9, 0x87, 0xc7, 0xc9, 0xa6, 0x50, 0x46, 0x7e, + 0xb0, 0x3b, 0x22, 0x80, 0xda, 0xb6, 0x90, 0x77, 0x6a, 0x4c, 0x79, 0xd7, + 0xa1, 0x57, 0xf9, 0xe1, 0x94, 0xad, 0x74, 0x54, 0x0e, 0x6e, 0x4d, 0x13, + 0xae, 0x6c, 0x9a, 0x73, 0x72, 0x6f, 0x27, 0x25, 0xa0, 0x38, 0x01, 0xc4, + 0xe6, 0x68, 0xfb, 0x4b, 0x3f, 0x32, 0xff, 0x48, 0xa4, 0x27, 0xf4, 0x64, + 0xd0, 0x41, 0x94, 0x49, 0x67, 0xa3, 0xab, 0xcc, 0x0a, 0xc8, 0x50, 0x59, + 0x58, 0x16, 0x8e, 0x96, 0x89, 0x3e, 0x9e, 0x30, 0xf0, 0x80, 0xf0, 0x13, + 0x20, 0x3c, 0xef, 0x31, 0x8b, 0xa2, 0x22, 0x3c, 0xc5, 0x72, 0x9d, 0xa8, + 0xb1, 0xfa, 0x73, 0xd2, 0xba, 0x6c, 0x8c, 0xd5, 0x77, 0xd3, 0x65, 0xaa, + 0x3d, 0x62, 0x85, 0xaf, 0x03, 0xf7, 0x05, 0x09, 0x7f, 0x0f, 0x51, 0x33, + 0xb3, 0x32, 0xdf, 0x8a, 0xa8, 0x84, 0xe6, 0x57, 0xc8, 0x38, 0x24, 0x74, + 0x6f, 0x5b, 0x2f, 0x35, 0xd1, 0x62, 0xdf, 0x05, 0xf6, 0xbc, 0x5f, 0x28, + 0x40, 0x5a, 0x2e, 0x64, 0x18, 0x9b, 0x3b, 0x8b, 0x3f, 0xa3, 0x7c, 0x90, + 0xf3, 0xe0, 0x07, 0x5a, 0xaf, 0x1e, 0x53, 0x34, 0x49, 0xe5, 0x08, 0x94, + 0xa3, 0x15, 0x02, 0x26, 0xab, 0x64, 0x12, 0x61, 0x7c, 0x5a, 0x56, 0xb1, + 0x6e, 0x35, 0xd7, 0x6f, 0x9a, 0xb2, 0x83, 0x65, 0x41, 0x31, 0x78, 0x52, + 0x3a, 0xf1, 0x14, 0x9c, 0x53, 0xb9, 0x9e, 0x24, 0xc1, 0xaf, 0xdc, 0x8d, + 0xef, 0xe7, 0x08, 0x79, 0x1e, 0x1c, 0x0f, 0x56, 0x53, 0x20, 0xb4, 0x0d, + 0xd9, 0x1c, 0xa7, 0x16, 0xf6, 0x41, 0x9d, 0x50, 0xfb, 0x7f, 0x4c, 0x45, + 0xc3, 0xfc, 0x39, 0xf8, 0x53, 0x43, 0x84, 0xe4, 0x0d, 0x9f, 0xc3, 0xca, + 0x52, 0x71, 0x83, 0x78, 0x8f, 0xb9, 0x03, 0x9a, 0x30, 0xd7, 0x1d, 0xe1, + 0x3a, 0x28, 0x1f, 0x1f, 0x96, 0x10, 0xe7, 0xfc, 0xd6, 0x55, 0x46, 0x30, + 0x38, 0xfa, 0x94, 0xd8, 0xff, 0xd2, 0xa0, 0x4f, 0xb6, 0x49, 0x31, 0x1c, + 0xcc, 0xdd, 0x62, 0x86, 0xf6, 0x8f, 0x86, 0xc4, 0xa4, 0x82, 0x0b, 0x44, + 0x13, 0x7c, 0xba, 0x10, 0x65, 0x8a, 0x77, 0x78, 0x72, 0xe1, 0x13, 0x94, + 0x38, 0xc5, 0xbd, 0x2b, 0x3c, 0x04, 0xad, 0xd9, 0x86, 0xe9, 0x20, 0xa3, + 0x85, 0x30, 0x03, 0x32, 0x73, 0xfb, 0x48, 0xd6, 0x49, 0xb1, 0x67, 0x33, + 0xa5, 0xbd, 0x08, 0x78, 0x6a, 0xae, 0x42, 0xb9, 0xbd, 0x02, 0x1a, 0x77, + 0xed, 0x23, 0x41, 0x5f, 0x32, 0x18, 0x46, 0xab, 0xc7, 0x79, 0x52, 0x9a, + 0xa8, 0x6f, 0x3d, 0xa4, 0xee, 0x58, 0x79, 0xbb, 0x94, 0xb1, 0x2e, 0x2a, + 0xed, 0x74, 0xa7, 0x01, 0x7b, 0x31, 0xe4, 0x2f, 0x4e, 0x4b, 0x95, 0x46, + 0x43, 0xfb, 0xa8, 0x79, 0xdb, 0x95, 0x7d, 0x73, 0x86, 0x40, 0x78, 0x6c, + 0x05, 0xdc, 0x3b, 0x95, 0xf3, 0xe8, 0x24, 0x3f, 0x92, 0xec, 0x1e, 0xd3, + 0x33, 0x2d, 0xac, 0xcd, 0x00, 0x23, 0xea, 0x34, 0xdc, 0x71, 0x07, 0xeb, + 0x18, 0xb0, 0x88, 0x3c, 0x19, 0xe4, 0x8e, 0xcd, 0x63, 0x39, 0xbe, 0xed, + 0x18, 0xd2, 0xbc, 0x6b, 0xce, 0x5e, 0x56, 0x7e, 0x41, 0xb9, 0x6d, 0xb1, + 0xaa, 0x9f, 0x80, 0x7c, 0xff, 0x56, 0x11, 0x7b, 0x0d, 0xcb, 0xa8, 0x62, + 0xe5, 0x4d, 0x55, 0x23, 0x7d, 0xed, 0x43, 0x3c, 0xbd, 0xaa, 0xff, 0xdd, + 0xd7, 0xb8, 0x4d, 0x85, 0xfa, 0xa0, 0x92, 0x19, 0x83, 0xba, 0xa1, 0xc4, + 0xbd, 0x8d, 0xe1, 0x09, 0xb5, 0xf5, 0xb0, 0x18, 0x14, 0xaa, 0x14, 0x87, + 0x62, 0x58, 0x01, 0xd9, 0x9a, 0xc2, 0xb8, 0x2a, 0xef, 0x2b, 0xef, 0x39, + 0xe9, 0xcf, 0x8a, 0x91, 0x62, 0xcb, 0xf7, 0xb2, 0x3c, 0x11, 0x83, 0x31, + 0xfd, 0xf9, 0x62, 0x34, 0x4e, 0x5d, 0x57, 0xd1, 0x14, 0x0f, 0x23, 0x91, + 0x4e, 0x7c, 0x35, 0x98, 0xfd, 0x22, 0x50, 0xc2, 0x59, 0xc0, 0xda, 0xc0, + 0x32, 0x8c, 0xa8, 0x63, 0x47, 0x5a, 0xef, 0x40, 0x4e, 0x6d, 0x8f, 0x91, + 0xa1, 0xd4, 0x03, 0xfb, 0x94, 0x29, 0xe2, 0xd4, 0x76, 0xfd, 0xd1, 0x14, + 0x78, 0x3e, 0x28, 0x37, 0xf4, 0x3b, 0x80, 0xc6, 0x20, 0xb2, 0x4e, 0x25, + 0xf3, 0x81, 0x17, 0xee, 0xc6, 0xf7, 0x2b, 0x50, 0xe3, 0xc9, 0x7b, 0xbd, + 0x6f, 0x53, 0xf3, 0x2d, 0xc7, 0x31, 0x6d, 0x95, 0x58, 0x29, 0xc3, 0xaa, + 0xa7, 0x5b, 0x19, 0x6b, 0x1e, 0x19, 0x51, 0xf6, 0x0d, 0x5d, 0x69, 0xe8, + 0x59, 0xda, 0xb5, 0x5b, 0xaa, 0x5c, 0x57, 0x63, 0x9c, 0xc5, 0xb8, 0xf6, + 0x59, 0x6a, 0x49, 0xaf, 0x20, 0x4a, 0x5f, 0xa9, 0x92, 0x10, 0x9d, 0x03, + 0x0d, 0xf4, 0x7c, 0x39, 0xcc, 0x25, 0xaa, 0x86, 0xe4, 0x23, 0x0f, 0x56, + 0xa6, 0x2c, 0x34, 0x53, 0xf1, 0xef, 0x97, 0x7d, 0x33, 0xa4, 0x07, 0x40, + 0x6a, 0x66, 0x0f, 0x7a, 0x30, 0x0c, 0xa1, 0x67, 0xe4, 0xa0, 0x83, 0x8c, + 0x82, 0x0b, 0x39, 0x53, 0x58, 0xcf, 0x6e, 0xaa, 0x45, 0x41, 0x6f, 0xc0, + 0xb6, 0xbf, 0x1d, 0x71, 0xf4, 0x8a, 0xe3, 0x46, 0xb2, 0x31, 0x28, 0x2c, + 0x01, 0xd3, 0xb9, 0x1e, 0x25, 0x19, 0xb4, 0xfc, 0xa9, 0x46, 0x26, 0x37, + 0x28, 0x4c, 0x95, 0x85, 0xd9, 0x97, 0x3e, 0x2b, 0x1c, 0x03, 0x51, 0x84, + 0xec, 0xd2, 0x6b, 0x97, 0x90, 0x3b, 0xa9, 0x4a, 0xe1, 0x22, 0xe2, 0x56, + 0x89, 0xa0, 0x41, 0xf1, 0xe2, 0xcc, 0xe1, 0x0e, 0x19, 0x60, 0x91, 0x12, + 0x22, 0xc5, 0xea, 0xcb, 0x4c, 0x70, 0x8a, 0x55, 0x9b, 0xcc, 0x8f, 0x9c, + 0x3b, 0x96, 0x11, 0xf5, 0x4c, 0x8f, 0x8d, 0x80, 0xf8, 0xa6, 0xff, 0x5a, + 0x16, 0xd5, 0x59, 0x9e, 0x48, 0x7e, 0xda, 0xd7, 0x37, 0x95, 0x86, 0xd0, + 0xda, 0xb2, 0xcc, 0x9f, 0x37, 0x64, 0xc5, 0xbd, 0xc1, 0x31, 0x69, 0xdb, + 0x29, 0xf9, 0x4d, 0x0a, 0x16, 0xbf, 0x43, 0xec, 0x02, 0xaf, 0x8c, 0x7a, + 0x6b, 0x61, 0xbb, 0xc0, 0xf8, 0xeb, 0xb2, 0xfb, 0x6a, 0x9c, 0x0c, 0x8e, + 0xf4, 0x1c, 0x1e, 0x2c, 0x0a, 0x32, 0x15, 0x74, 0x3f, 0xb7, 0xcb, 0x10, + 0xf3, 0xbc, 0x4b, 0x0e, 0x1d, 0xed, 0x64, 0x16, 0xda, 0x96, 0x7c, 0x41, + 0xd7, 0x91, 0x0f, 0x7e, 0xab, 0x58, 0x1a, 0x6a, 0x5f, 0xc4, 0x3a, 0x9e, + 0x44, 0xd3, 0xee, 0x60, 0x38, 0x06, 0xbf, 0x37, 0x58, 0xbf, 0x96, 0xcd, + 0x0a, 0xb2, 0x21, 0xb5, 0x04, 0x00, 0xef, 0x60, 0xf3, 0x13, 0x95, 0x34, + 0xea, 0x58, 0x55, 0x3d, 0x64, 0x15, 0xf1, 0x23, 0x32, 0x08, 0x34, 0xe0, + 0xbe, 0x00, 0x69, 0xcd, 0x1c, 0xb4, 0xe5, 0x74, 0xe5, 0xe5, 0xc0, 0xc1, + 0xec, 0x34, 0xfb, 0xea, 0x88, 0xae, 0x56, 0x6a, 0xb8, 0x5a, 0x0f, 0x3c, + 0x6d, 0x54, 0x0e, 0xca, 0xdb, 0xd3, 0x0b, 0x9f, 0xb1, 0xd7, 0x2e, 0x5f, + 0xaa, 0xb7, 0x28, 0x46, 0x59, 0xce, 0x55, 0x3f, 0x3d, 0xb0, 0x35, 0xee, + 0xa8, 0x98, 0x8b, 0x78, 0xca, 0x5c, 0x90, 0xc9, 0x82, 0x71, 0x5f, 0xa0, + 0x50, 0xa7, 0x56, 0x16, 0x53, 0xbd, 0x6c, 0x30, 0x09, 0xaf, 0x44, 0x7e, + 0xc2, 0x60, 0xfe, 0x48, 0xcb, 0x13, 0x42, 0x71, 0x19, 0x78, 0x69, 0x67, + 0xca, 0x07, 0x4a, 0x91, 0xc1, 0xbc, 0x74, 0xc1, 0x81, 0x1a, 0xab, 0xb9, + 0xa8, 0x1f, 0xa9, 0x56, 0xad, 0x49, 0xd3, 0x13, 0x12, 0xbf, 0x58, 0xe5, + 0x77, 0xf8, 0x22, 0x7a, 0xc7, 0x4b, 0x95, 0x75, 0x56, 0xf8, 0x93, 0xf2, + 0xdd, 0x08, 0x8a, 0xe1, 0x16, 0xbc, 0x15, 0x65, 0x60, 0x21, 0x64, 0x7b, + 0x0f, 0xb2, 0x70, 0xda, 0xfd, 0x67, 0xf5, 0x7e, 0x98, 0xa6, 0x5f, 0x9e, + 0x84, 0x33, 0xee, 0xeb, 0xb3, 0xe5, 0xbb, 0x29, 0xb0, 0x71, 0x2f, 0xdf, + 0x99, 0x60, 0xbc, 0x19, 0x65, 0x4f, 0x3f, 0xa0, 0xf8, 0xc2, 0x18, 0x9a, + 0xe5, 0x9b, 0xf7, 0x0b, 0xed, 0xf1, 0xc1, 0x96, 0x96, 0xb9, 0xbc, 0xeb, + 0x2f, 0x23, 0x6e, 0x45, 0xb6, 0x5f, 0x93, 0xd5, 0x5e, 0x09, 0xdd, 0xca, + 0x84, 0x6c, 0x17, 0x28, 0xb4, 0xee, 0xa3, 0xd1, 0x7c, 0x5a, 0x4c, 0x94, + 0x4d, 0x01, 0x62, 0xf1, 0xae, 0x44, 0x9f, 0x57, 0xf2, 0x59, 0xd3, 0xa8, + 0xed, 0x08, 0x33, 0x22, 0x1e, 0x7c, 0xf4, 0x7e, 0x5a, 0xf4, 0xb7, 0xce, + 0xe1, 0x72, 0xd5, 0x85, 0x45, 0xc0, 0xa0, 0xf9, 0xea, 0x65, 0x4b, 0x82, + 0x4b, 0x75, 0xa5, 0xb5, 0x13, 0xa3, 0xca, 0x43, 0xee, 0x7d, 0x58, 0x12, + 0x8a, 0xea, 0x79, 0x6b, 0x69, 0x05, 0xdb, 0x8a, 0x51, 0xc8, 0x61, 0x36, + 0x04, 0x1a, 0x1c, 0x89, 0x52, 0x60, 0x57, 0x91, 0x76, 0xb6, 0x0a, 0x6d, + 0xcd, 0x62, 0x15, 0x2c, 0xab, 0x36, 0x5e, 0xaa, 0x5f, 0xc5, 0x0a, 0x0c, + 0xc5, 0x45, 0x59, 0x2b, 0xb0, 0x06, 0x12, 0xe7, 0x86, 0xc2, 0x8e, 0xb3, + 0x9c, 0x44, 0x3a, 0x51, 0x05, 0x34, 0xd6, 0x8a, 0xdd, 0xba, 0xea, 0x01, + 0x2d, 0xf2, 0x7d, 0x81, 0x02, 0xb8, 0xbd, 0xff, 0x5a, 0xa4, 0x7f, 0x1d, + 0x07, 0x63, 0xa0, 0xd9, 0x20, 0x81, 0x58, 0xab, 0x3e, 0xa6, 0x05, 0xb3, + 0x32, 0xb1, 0x0a, 0xca, 0xd5, 0x47, 0x85, 0xad, 0xa3, 0x47, 0x89, 0xc8, + 0xda, 0x76, 0xcc, 0xb4, 0xd5, 0xaa, 0x66, 0xc7, 0x3a, 0x6f, 0x11, 0x03, + 0xb5, 0x95, 0xe0, 0x3d, 0xe9, 0x31, 0x52, 0x5d, 0x04, 0x6e, 0xfc, 0x29, + 0xe7, 0x6a, 0x12, 0xb7, 0x41, 0xe7, 0x48, 0x51, 0xb7, 0x25, 0xbd, 0x87, + 0x45, 0xf3, 0xb2, 0xf5, 0xb3, 0xc7, 0x38, 0x46, 0x4d, 0x26, 0x6d, 0xc2, + 0x15, 0x2b, 0x61, 0x25, 0xbe, 0xfc, 0xf2, 0x0c, 0x8e, 0x5e, 0x39, 0xde, + 0x8f, 0x3a, 0x57, 0xab, 0xa7, 0xbf, 0xff, 0xe2, 0x0a, 0x1c, 0x4f, 0x72, + 0x49, 0x6a, 0x9a, 0x21, 0x9d, 0x78, 0xee, 0x80, 0x0a, 0xf6, 0xc2, 0x29, + 0x3a, 0x21, 0x14, 0x39, 0x8d, 0x9a, 0xcc, 0xbd, 0x98, 0x18, 0x13, 0xd8, + 0xca, 0x4b, 0x86, 0xa3, 0xea, 0x12, 0xda, 0xad, 0x9a, 0x74, 0x82, 0x55, + 0x49, 0xa5, 0xe8, 0xcd, 0xf3, 0xee, 0xe1, 0x8d, 0xc9, 0x30, 0x05, 0x40, + 0x94, 0xed, 0xc4, 0x85, 0xdb, 0x88, 0x1b, 0x7c, 0xfb, 0x75, 0x12, 0xe6, + 0x98, 0x6e, 0x26, 0x9a, 0x63, 0x42, 0x46, 0xf4, 0xbd, 0x6d, 0xb2, 0xc5, + 0x5e, 0xbb, 0x66, 0xba, 0xad, 0x52, 0x78, 0x67, 0x44, 0xd9, 0xc4, 0x4e, + 0x79, 0x91, 0xed, 0x78, 0x36, 0x9f, 0x5a, 0xef, 0xee, 0xd9, 0xdb, 0xf7, + 0x5d, 0xca, 0xda, 0x1a, 0xe4, 0xdf, 0xdf, 0xab, 0xf4, 0x7b, 0x45, 0x19, + 0x9e, 0x44, 0xd4, 0x54, 0x74, 0x9f, 0x47, 0x0e, 0x78, 0x74, 0x93, 0x77, + 0x2b, 0x45, 0x36, 0x08, 0x72, 0x48, 0x34, 0xd9, 0x23, 0x80, 0x96, 0x21, + 0x42, 0x4b, 0x7f, 0x18, 0xb5, 0x57, 0xda, 0x87, 0xa5, 0xb5, 0x51, 0xde, + 0x4c, 0xd9, 0x9b, 0x95, 0x7d, 0x50, 0x3c, 0xa4, 0xfd, 0x8a, 0xe2, 0x32, + 0x15, 0xfc, 0xcb, 0x5b, 0x7e, 0x83, 0x2b, 0x82, 0x94, 0xc9, 0xfe, 0xca, + 0xba, 0xb1, 0x64, 0x6e, 0x2e, 0x8e, 0x3d, 0x19, 0xba, 0x29, 0xf5, 0x58, + 0x0e, 0x6f, 0xf8, 0xfb, 0x97, 0x61, 0x92, 0x6a, 0x28, 0xad, 0x23, 0x50, + 0xd7, 0x01, 0xc5, 0x09, 0x8d, 0x0a, 0x63, 0x2a, 0x81, 0x1b, 0x12, 0x4a, + 0x16, 0xb2, 0xb7, 0x62, 0xa2, 0xcf, 0x99, 0x07, 0x29, 0x58, 0x1c, 0xb4, + 0x2e, 0x0b, 0x3a, 0x3f, 0xdd, 0x64, 0x1d, 0xb5, 0x00, 0x22, 0x07, 0xe7, + 0x9c, 0xf3, 0x74, 0x93, 0xa9, 0x03, 0x5c, 0xe2, 0x55, 0xfc, 0x89, 0x81, + 0xd9, 0x78, 0x75, 0x4e, 0xc6, 0x76, 0xdb, 0x22, 0x27, 0xf4, 0x1d, 0x5f, + 0xff, 0x14, 0x2c, 0x01, 0xc4, 0x35, 0xe5, 0x9e, 0x79, 0x82, 0x2d, 0xbe, + 0x01, 0xb6, 0xe3, 0xd6, 0xfa, 0xf7, 0x6d, 0xba, 0x6b, 0xfa, 0xf2, 0x24, + 0xb4, 0x45, 0xc5, 0x39, 0xa8, 0xdc, 0x1b, 0xe5, 0x81, 0x66, 0x57, 0xe3, + 0xf1, 0x93, 0x06, 0x67, 0x8b, 0x33, 0xa7, 0xed, 0x04, 0xf9, 0x7a, 0x4a, + 0x6f, 0x38, 0x17, 0x6e, 0x70, 0xc4, 0x0d, 0x56, 0x5a, 0xb0, 0xe9, 0xa3, + 0xab, 0x6b, 0x0e, 0x0b, 0x81, 0xe0, 0xf0, 0xcd, 0x1c, 0x72, 0x4a, 0xfe, + 0xbd, 0xde, 0x77, 0xf1, 0x37, 0xa4, 0x71, 0x93, 0xb0, 0x9b, 0x1d, 0x5e, + 0x63, 0xf0, 0x77, 0x98, 0xf0, 0xc5, 0xec, 0xd5, 0x73, 0x22, 0x0f, 0x18, + 0x86, 0x8e, 0x9d, 0xf6, 0x02, 0x63, 0x93, 0x6f, 0xe5, 0x2d, 0x03, 0xcf, + 0xb7, 0x63, 0x07, 0x78, 0x8d, 0x6d, 0x1f, 0x41, 0x34, 0x1c, 0x9c, 0xfb, + 0xf9, 0x99, 0xe9, 0x9b, 0x4b, 0x6e, 0x65, 0xca, 0xf7, 0x0c, 0x92, 0xc9, + 0xdb, 0x15, 0x03, 0x7b, 0x26, 0x0c, 0x10, 0xe6, 0x0a, 0xba, 0xa2, 0x27, + 0x7a, 0x2e, 0x3e, 0x2d, 0xa4, 0x76, 0xc3, 0xeb, 0x01, 0x1b, 0x19, 0x2f, + 0xaa, 0x96, 0x71, 0x50, 0x8a, 0xd7, 0xbc, 0x3c, 0x74, 0x46, 0x56, 0x16, + 0x54, 0x4c, 0xa2, 0xb0, 0xcf, 0x19, 0xe6, 0xef, 0x01, 0x48, 0xd0, 0xdf, + 0x43, 0x25, 0xca, 0x98, 0xaa, 0xd8, 0x34, 0x03, 0x41, 0x4d, 0x89, 0xf9, + 0x56, 0xaa, 0x79, 0x89, 0x36, 0xa1, 0x94, 0x39, 0x82, 0x34, 0x8b, 0xc1, + 0x52, 0xe4, 0x15, 0x79, 0x3d, 0x1d, 0x10, 0x5b, 0x88, 0x4f, 0xae, 0x32, + 0x0e, 0xf5, 0x32, 0x41, 0xa0, 0x0a, 0xfa, 0x5b, 0x22, 0xb0, 0x0e, 0xbc, + 0xc7, 0x82, 0x27, 0xc1, 0xc0, 0xb5, 0x15, 0xb0, 0x39, 0x5d, 0x92, 0x5d, + 0xd1, 0xb0, 0xf0, 0x91, 0xa2, 0xf0, 0x4c, 0x18, 0x5e, 0x4d, 0xf4, 0xac, + 0x4b, 0x36, 0x26, 0x9c, 0x38, 0xcb, 0x64, 0x73, 0x52, 0x6c, 0x0b, 0x8f, + 0xbd, 0x83, 0xfe, 0x83, 0x26, 0x17, 0x63, 0x5e, 0x02, 0x82, 0xbf, 0xaa, + 0x32, 0x77, 0xe4, 0xe3, 0x1f, 0x6c, 0xd5, 0x51, 0xdf, 0xfa, 0x92, 0x5c, + 0x7f, 0x42, 0x50, 0xf9, 0x55, 0xe8, 0xf1, 0x82, 0xa1, 0x8a, 0x86, 0xc8, + 0xe0, 0x3c, 0x3b, 0xab, 0x83, 0xbf, 0x8b, 0xca, 0xa8, 0x0b, 0xdf, 0xb0, + 0x5e, 0x84, 0x83, 0x5f, 0xe0, 0x8b, 0xab, 0x83, 0x2c, 0x13, 0x78, 0xb1, + 0xf0, 0xc8, 0x4e, 0xb8, 0xbd, 0x62, 0x2e, 0x16, 0xa1, 0x79, 0x0b, 0xda, + 0xad, 0xe6, 0x71, 0x87, 0xcb, 0xf6, 0x64, 0xc7, 0x5e, 0x16, 0x97, 0x23, + 0x66, 0x97, 0xfd, 0xef, 0x3e, 0x81, 0xda, 0xe5, 0x9b, 0x4f, 0x5a, 0x68, + 0xf2, 0xd7, 0x65, 0x29, 0xe4, 0x76, 0x4d, 0x9f, 0x0b, 0x6b, 0x97, 0xf3, + 0xad, 0xbf, 0x64, 0xe8, 0x78, 0x09, 0xbc, 0x6a, 0xd5, 0x48, 0xc3, 0x0f, + 0x3a, 0x33, 0x4b, 0xad, 0xb2, 0xc5, 0x58, 0x6b, 0x1b, 0xa4, 0x35, 0x69, + 0x9c, 0x1a, 0x06, 0xb9, 0x9b, 0xc4, 0xb6, 0xa3, 0xd2, 0xb0, 0xca, 0x80, + 0x93, 0xd4, 0x75, 0x1e, 0xa0, 0xae, 0x70, 0x60, 0x36, 0xaa, 0x57, 0x07, + 0x6b, 0x9a, 0xfa, 0xeb, 0x25, 0x82, 0x00, 0xed, 0x76, 0x83, 0xe1, 0x35, + 0xf8, 0xa0, 0xcc, 0x5b, 0xab, 0x14, 0x1e, 0xb5, 0x62, 0x70, 0x6b, 0xee, + 0x31, 0x5c, 0x07, 0x7b, 0x8d, 0x3a, 0xc6, 0xec, 0x1b, 0x1c, 0x25, 0x38, + 0x64, 0xb0, 0x3d, 0x41, 0xd6, 0xe4, 0x88, 0x92, 0x0a, 0x2e, 0xe8, 0x6e, + 0xdd, 0x76, 0xbc, 0x3e, 0x1f, 0xe4, 0x9c, 0x4b, 0xf8, 0x86, 0xf1, 0x95, + 0x57, 0xa5, 0xce, 0x3b, 0x5b, 0x92, 0x70, 0x48, 0xa6, 0x1c, 0xbb, 0x1c, + 0x4c, 0x02, 0x7d, 0x1d, 0xa6, 0x26, 0xda, 0x93, 0xe5, 0xdd, 0x17, 0xa7, + 0x78, 0xf8, 0x44, 0x67, 0x81, 0xb7, 0x09, 0xa4, 0x90, 0x28, 0xd2, 0xa3, + 0x5f, 0x10, 0x2b, 0xb6, 0x0e, 0x71, 0xe3, 0x29, 0xb0, 0x85, 0x48, 0x12, + 0x46, 0x22, 0xa3, 0xe1, 0x7b, 0xf8, 0xba, 0x00, 0x79, 0xff, 0x50, 0x1f, + 0x7f, 0xf7, 0x33, 0xfb, 0xa8, 0x49, 0xfb, 0x77, 0xc9, 0x88, 0x0a, 0xe6, + 0xef, 0xe9, 0x5f, 0x9b, 0x4a, 0x69, 0x67, 0xee, 0xfb, 0xbd, 0x34, 0x31, + 0xc3, 0x34, 0xf7, 0x65, 0x1d, 0x38, 0xd8, 0xd3, 0x9c, 0x8d, 0x83, 0x8d, + 0xec, 0x38, 0x45, 0xbd, 0xb1, 0x97, 0x16, 0x4a, 0x61, 0x50, 0x89, 0x17, + 0x0d, 0x16, 0x2e, 0x50, 0x31, 0x52, 0x43, 0xb2, 0xbe, 0xc2, 0x84, 0x4b, + 0x56, 0x1c, 0xb8, 0xcf, 0xe0, 0xce, 0xc7, 0x29, 0x3e, 0xad, 0x3a, 0xde, + 0x26, 0x62, 0x97, 0x7e, 0x15, 0x41, 0xf8, 0xcf, 0xed, 0x0b, 0xa4, 0xc7, + 0xe4, 0xa9, 0x89, 0xfb, 0xf1, 0xe7, 0xb9, 0x3d, 0xab, 0x3e, 0x1d, 0x61, + 0x38, 0x97, 0x53, 0x94, 0xe2, 0x8e, 0xf0, 0x2e, 0xeb, 0x29, 0x09, 0x5e, + 0x29, 0xcc, 0x14, 0xb5, 0x37, 0x89, 0xbd, 0xe8, 0x34, 0x92, 0x69, 0x6d, + 0xcd, 0x11, 0x7b, 0x1b, 0x08, 0x38, 0x25, 0xa6, 0x09, 0xed, 0xb2, 0xeb, + 0xd4, 0x5f, 0x0c, 0xc3, 0x18, 0x21, 0x48, 0x54, 0xed, 0xb9, 0x7e, 0xcb, + 0xe3, 0x03, 0x40, 0x85, 0x13, 0x8a, 0xe2, 0x92, 0x03, 0x22, 0x08, 0x1d, + 0xf4, 0x2c, 0xfa, 0x96, 0xf7, 0x61, 0x3e, 0x5d, 0x5d, 0x6f, 0xe8, 0xa6, + 0x12, 0xe4, 0x7e, 0x04, 0x04, 0x64, 0x53, 0x7e, 0x03, 0x9e, 0xb7, 0x4b, + 0x67, 0x21, 0xb2, 0x46, 0x38, 0xc9, 0x89, 0x01, 0x7b, 0xad, 0xc8, 0xb5, + 0xfa, 0x29, 0x49, 0x84, 0x7b, 0xdc, 0xf7, 0x35, 0x92, 0x9a, 0x95, 0x12, + 0x88, 0x95, 0x27, 0x8c, 0x34, 0x43, 0x6c, 0x40, 0x1b, 0x99, 0xce, 0x4a, + 0x7b, 0x8c, 0xe1, 0x6d, 0x74, 0xba, 0x50, 0xae, 0xe3, 0xcd, 0x18, 0xc0, + 0xdc, 0xee, 0xca, 0xc3, 0xe4, 0xa5, 0x1f, 0x4c, 0x6b, 0x29, 0xad, 0x69, + 0x67, 0xf9, 0xaa, 0x5e, 0xbc, 0x3c, 0x25, 0xfc, 0x01, 0x7d, 0x80, 0x78, + 0x7a, 0x14, 0x03, 0xd0, 0xfd, 0x10, 0xd7, 0x84, 0xbe, 0x01, 0x4f, 0xdb, + 0xe6, 0x48, 0x4b, 0x77, 0xad, 0xbd, 0x6a, 0xb9, 0x90, 0x79, 0x7c, 0x63, + 0x37, 0xf2, 0x3b, 0x71, 0x99, 0xde, 0x12, 0x79, 0x00, 0x2f, 0x9a, 0x9b, + 0x51, 0x1c, 0x94, 0xa1, 0x2b, 0xc8, 0xf9, 0xf4, 0xe3, 0x67, 0x4f, 0x3f, + 0x79, 0x96, 0x9f, 0x4c, 0xa7, 0xe6, 0x46, 0xb2, 0x36, 0xd5, 0x1e, 0xf8, + 0x96, 0xdd, 0x77, 0x00, 0x32, 0xda, 0xcd, 0x23, 0x94, 0xa5, 0x72, 0x97, + 0x6a, 0xb8, 0x98, 0xa3, 0x7a, 0x2c, 0x76, 0x53, 0x27, 0x0e, 0xb9, 0xb8, + 0x5d, 0x8c, 0x29, 0xb3, 0x07, 0x09, 0x85, 0xe4, 0x02, 0xd8, 0xbe, 0xec, + 0xbd, 0x79, 0xaa, 0xef, 0xdd, 0xfe, 0xf7, 0x79, 0x04, 0xc6, 0x96, 0xb1, + 0x08, 0x12, 0x40, 0x2f, 0x2d, 0x7a, 0xbd, 0x25, 0x67, 0x88, 0xe1, 0x5b, + 0x44, 0x29, 0x95, 0xd4, 0x18, 0x95, 0x20, 0x9c, 0x28, 0xf5, 0x12, 0xc5, + 0x35, 0x33, 0xe9, 0x24, 0x36, 0xfc, 0xb5, 0xae, 0x24, 0x19, 0xb7, 0xb8, + 0x2d, 0xf6, 0x02, 0x38, 0x8b, 0x93, 0xa2, 0xd8, 0xcb, 0x3e, 0x6f, 0x6c, + 0x16, 0xae, 0x3e, 0x6a, 0xfb, 0x72, 0x78, 0x25, 0x8f, 0x82, 0xab, 0x38, + 0x56, 0xaa, 0x4c, 0x67, 0x2f, 0xe8, 0xfd, 0x32, 0xe5, 0x50, 0x41, 0x7b, + 0x0e, 0x7d, 0x0a, 0xf9, 0x35, 0xc4, 0x89, 0xa5, 0x09, 0xed, 0x11, 0x52, + 0x04, 0xc6, 0x9e, 0xbd, 0x72, 0x97, 0x53, 0x53, 0xcd, 0x3e, 0x6d, 0xa9, + 0x7d, 0x11, 0xf5, 0xd7, 0x99, 0xdc, 0x16, 0xbf, 0x00, 0xbe, 0x79, 0x41, + 0x1a, 0x53, 0x40, 0xea, 0x8b, 0xf1, 0x62, 0xfc, 0x6b, 0xed, 0xd5, 0x6d, + 0x32, 0x3d, 0x27, 0x34, 0xf2, 0x81, 0xa4, 0x17, 0x27, 0x8a, 0xd7, 0x3a, + 0x8e, 0x1a, 0xd8, 0xcd, 0xa2, 0xc2, 0xd2, 0x14, 0x6f, 0x76, 0x06, 0x65, + 0xd9, 0xf3, 0x17, 0xd5, 0xd2, 0x59, 0x87, 0xa4, 0x7e, 0x11, 0x16, 0x8f, + 0xdd, 0xf0, 0xee, 0xca, 0xb8, 0x33, 0x07, 0xb3, 0xf0, 0xcd, 0xec, 0x3b, + 0xd1, 0xba, 0xd5, 0x0e, 0x4b, 0x4e, 0x29, 0xca, 0xf4, 0x3c, 0x85, 0x32, + 0xe6, 0x73, 0x67, 0x00, 0x84, 0x89, 0x05, 0x40, 0xb9, 0xa6, 0xdc, 0xe3, + 0x56, 0x6a, 0x11, 0xaf, 0xad, 0xcc, 0x15, 0x09, 0x54, 0x79, 0x07, 0xda, + 0x08, 0xd9, 0xce, 0x1d, 0x27, 0xa9, 0xaa, 0x47, 0xb5, 0x92, 0x43, 0x17, + 0x72, 0x94, 0x7f, 0x2b, 0xd5, 0xe5, 0x9d, 0x59, 0x24, 0x49, 0xfe, 0x29, + 0x45, 0xc7, 0x28, 0x19, 0xd7, 0xda, 0xbd, 0x76, 0x7a, 0x34, 0x20, 0x46, + 0x27, 0x84, 0xf8, 0xe4, 0x76, 0xa7, 0xe4, 0xc4, 0xf4, 0x03, 0xd2, 0xed, + 0xbe, 0x80, 0x94, 0xba, 0x77, 0xf5, 0x6a, 0xed, 0x7a, 0x78, 0xa3, 0xf7, + 0x6b, 0x72, 0xc7, 0x59, 0x86, 0x51, 0xbd, 0xf9, 0xf3, 0xf8, 0xed, 0x5f, + 0x46, 0xef, 0x5c, 0x36, 0x89, 0x2a, 0x8f, 0x16, 0xa9, 0x21, 0x81, 0xfc, + 0x45, 0x02, 0x78, 0xa8, 0x5d, 0x61, 0x97, 0xb7, 0x96, 0x72, 0x4c, 0x96, + 0xcf, 0x8a, 0xfd, 0xe1, 0x53, 0xf6, 0x33, 0x44, 0xfd, 0x84, 0x05, 0x5c, + 0xb4, 0x7d, 0x93, 0xaf, 0x47, 0x2f, 0x61, 0x0b, 0xf2, 0x97, 0x9d, 0x42, + 0x80, 0x46, 0xa1, 0x35, 0x27, 0x36, 0x94, 0x5f, 0xeb, 0x50, 0x98, 0xaa, + 0xb2, 0x90, 0xfb, 0xc6, 0x2a, 0x8d, 0x4d, 0x8f, 0x27, 0x56, 0x4c, 0x3f, + 0x5e, 0xef, 0x4e, 0x12, 0xd9, 0x23, 0x9d, 0x81, 0x80, 0xd7, 0xab, 0x11, + 0x54, 0x2f, 0x19, 0x66, 0x83, 0xf1, 0x51, 0xa1, 0x34, 0x0c, 0x3e, 0x61, + 0xfe, 0x08, 0x3c, 0xae, 0x6f, 0x84, 0x85, 0xa9, 0xc3, 0x16, 0xe3, 0xec, + 0x76, 0x70, 0x2b, 0xee, 0xac, 0x23, 0x85, 0xc6, 0xc4, 0x50, 0x31, 0xb6, + 0x2c, 0x75, 0xd1, 0x3d, 0x1e, 0xf1, 0x31, 0x0c, 0x38, 0x9b, 0x7e, 0x8f, + 0x62, 0x38, 0x46, 0x05, 0x16, 0xee, 0x99, 0x85, 0xa4, 0x72, 0x81, 0x73, + 0x98, 0x63, 0x35, 0xc1, 0x10, 0x98, 0x72, 0x96, 0xf8, 0x27, 0x62, 0x24, + 0x0a, 0x71, 0xb0, 0x7e, 0x76, 0x29, 0x93, 0x66, 0xc3, 0x48, 0xd9, 0xa6, + 0x93, 0xc2, 0x96, 0x43, 0x2c, 0xe4, 0x32, 0x00, 0xa6, 0x9f, 0xbf, 0xf7, + 0xbb, 0xcc, 0xe3, 0x76, 0xdc, 0x83, 0x17, 0xdf, 0x3f, 0x4b, 0x44, 0x26, + 0xf1, 0x65, 0x6f, 0x65, 0x39, 0xf3, 0x80, 0x71, 0xfe, 0xcc, 0x40, 0x5f, + 0x32, 0x57, 0xaf, 0xfa, 0x62, 0x91, 0xa5, 0x55, 0x00, 0x82, 0x66, 0x2b, + 0x4e, 0x34, 0x94, 0x80, 0x52, 0x77, 0xd0, 0x31, 0xf0, 0xb9, 0xa6, 0x1e, + 0xf0, 0xcb, 0x7d, 0xee, 0xd5, 0x2c, 0xa7, 0xf7, 0x3c, 0xb3, 0xd9, 0x07, + 0xda, 0x7f, 0x25, 0x45, 0x24, 0xbe, 0x4b, 0x4b, 0x36, 0xa2, 0x00, 0x3c, + 0xe2, 0xcb, 0xb6, 0xbd, 0xe4, 0x93, 0xd4, 0x41, 0x5d, 0x93, 0xe3, 0x6e, + 0x3c, 0x4c, 0x1b, 0x24, 0x25, 0x27, 0x4a, 0xc0, 0x56, 0x32, 0x00, 0x3d, + 0x04, 0x83, 0x3e, 0x34, 0xb3, 0x0d, 0x80, 0x77, 0x7a, 0xec, 0xf6, 0x57, + 0x2a, 0x87, 0xbb, 0x7f, 0x66, 0x74, 0xea, 0x67, 0x4b, 0x0f, 0x55, 0x59, + 0xd0, 0x05, 0x87, 0x1a, 0xc1, 0x22, 0xd3, 0x6a, 0xae, 0xa0, 0x3c, 0xe3, + 0xf0, 0x5c, 0x0c, 0x12, 0xf3, 0x8e, 0xb2, 0x06, 0xe1, 0x8d, 0x5f, 0x90, + 0xef, 0x57, 0x3a, 0x46, 0x31, 0xe2, 0x05, 0xa5, 0x96, 0x6a, 0x6a, 0x8b, + 0xfe, 0xa2, 0x24, 0x8f, 0xb2, 0xe7, 0x12, 0x5e, 0x42, 0x42, 0x12, 0x4f, + 0xa4, 0x6b, 0xc7, 0x34, 0x7e, 0x81, 0x1c, 0x8d, 0xe7, 0xb0, 0xc0, 0x9f, + 0x0e, 0x62, 0x6a, 0xc2, 0xeb, 0xc7, 0x90, 0x16, 0x6d, 0xa2, 0xe1, 0x81, + 0x65, 0xd4, 0x3e, 0x40, 0xb9, 0x3e, 0xe5, 0x31, 0xde, 0xf7, 0x71, 0x8a, + 0x9e, 0xde, 0x5a, 0xbc, 0xc8, 0xb9, 0x7f, 0xfa, 0x98, 0xd2, 0x1e, 0x88, + 0x18, 0x92, 0x67, 0x10, 0xe6, 0x6d, 0x0b, 0xd0, 0x16, 0xaa, 0x42, 0xdb, + 0xd6, 0x11, 0x7e, 0x3b, 0x78, 0x19, 0xfb, 0x9d, 0x3c, 0xaa, 0xb6, 0x00, + 0xbe, 0x38, 0x1b, 0x67, 0x12, 0xce, 0xd5, 0x9d, 0xb4, 0x54, 0x79, 0x18, + 0x31, 0xa5, 0xa2, 0x59, 0x08, 0x1e, 0x80, 0x82, 0x6b, 0x34, 0x39, 0x06, + 0x2c, 0x17, 0x9e, 0xa0, 0xfc, 0x19, 0xce, 0x6e, 0xa4, 0x1a, 0x1e, 0xf5, + 0xb4, 0x57, 0x6c, 0x10, 0x66, 0x38, 0x0e, 0x04, 0x22, 0x25, 0x28, 0x9e, + 0x08, 0xab, 0xb4, 0x3d, 0xae, 0xa1, 0x1d, 0x3a, 0x7b, 0xd6, 0x5a, 0x61, + 0x82, 0x3f, 0x02, 0x22, 0x9b, 0x56, 0x03, 0x46, 0x19, 0x9a, 0x58, 0xa5, + 0x77, 0xff, 0x9f, 0x75, 0x6e, 0x0e, 0xf1, 0xfe, 0xcb, 0x2e, 0x83, 0xfa, + 0x16, 0xc3, 0x03, 0x48, 0xc7, 0xe4, 0x19, 0x48, 0x22, 0x1c, 0x4f, 0x18, + 0xa2, 0x8b, 0x0d, 0x21, 0x3b, 0x78, 0xe7, 0x20, 0x20, 0xa9, 0x56, 0xd6, + 0x09, 0x70, 0x94, 0xb7, 0xd6, 0x1a, 0xc6, 0xcb, 0x4e, 0xe5, 0x96, 0x89, + 0x91, 0x16, 0x48, 0x4b, 0x1b, 0xdd, 0x6a, 0x86, 0x12, 0xa5, 0x2b, 0xf6, + 0x48, 0x0c, 0x9d, 0xb5, 0xd6, 0x79, 0xce, 0xc8, 0xbd, 0xea, 0xb1, 0x62, + 0x02, 0x63, 0xba, 0x31, 0x13, 0xa1, 0x4f, 0xc6, 0x87, 0x42, 0xd3, 0x6e, + 0x77, 0xea, 0xad, 0x55, 0x77, 0x08, 0x9a, 0x32, 0x7c, 0xfc, 0xb2, 0x10, + 0x42, 0x72, 0xfe, 0xc1, 0x1b, 0x0c, 0xea, 0x94, 0x63, 0xff, 0xcf, 0x94, + 0x3e, 0x24, 0x04, 0xdc, 0x0b, 0xb4, 0x79, 0x38, 0x48, 0x2a, 0xd6, 0x3c, + 0x65, 0x64, 0xda, 0x43, 0x63, 0xd8, 0x6b, 0xe6, 0xd3, 0x8b, 0x88, 0xde, + 0x11, 0x49, 0x48, 0x67, 0xec, 0x63, 0x55, 0x0f, 0x59, 0x8a, 0x54, 0xb7, + 0x9f, 0x04, 0x30, 0x7f, 0x36, 0x3f, 0x08, 0xbc, 0xb5, 0x02, 0x59, 0x47, + 0x8d, 0x3b, 0x4d, 0x48, 0x74, 0xf8, 0x88, 0xe0, 0x7f, 0x6e, 0x96, 0xb9, + 0x37, 0xf4, 0xdf, 0x8e, 0xdb, 0x11, 0x06, 0x94, 0xd3, 0x49, 0xd9, 0x48, + 0x4b, 0x25, 0xb4, 0x5e, 0xd5, 0xed, 0xf4, 0xb9, 0xc0, 0x18, 0x94, 0x42, + 0x3f, 0x6d, 0x61, 0x2b, 0x85, 0x71, 0x26, 0xdd, 0x78, 0xf8, 0x8a, 0xf5, + 0xb0, 0xa1, 0x86, 0xf5, 0xec, 0xe1, 0x42, 0xf4, 0x79, 0x5f, 0x8e, 0xe8, + 0x34, 0x44, 0xa1, 0xf6, 0x73, 0x8d, 0xa8, 0x07, 0x0f, 0x20, 0x19, 0x0f, + 0xbf, 0xbf, 0x61, 0x1a, 0x0f, 0xfd, 0xf3, 0x6d, 0x69, 0x37, 0xc2, 0xcf, + 0x30, 0xc0, 0x83, 0xfd, 0x7c, 0xf0, 0x8e, 0x7d, 0x06, 0x96, 0x76, 0x5a, + 0x85, 0xaf, 0x00, 0xbb, 0xdf, 0x3e, 0x21, 0x4d, 0xd8, 0x9e, 0x3e, 0x70, + 0x54, 0xde, 0xe8, 0xac, 0x22, 0x0a, 0x02, 0x3c, 0x3c, 0x26, 0xc2, 0x30, + 0x94, 0xe3, 0x09, 0x0b, 0xe0, 0xe3, 0x3a, 0x7c, 0xd3, 0xef, 0xa9, 0x08, + 0xd2, 0xb5, 0x74, 0x9a, 0x78, 0xeb, 0xdc, 0x14, 0x79, 0x36, 0xd3, 0xb8, + 0x86, 0xd3, 0x20, 0x2c, 0x40, 0xcb, 0xe9, 0x69, 0x4a, 0x1e, 0xa2, 0x3e, + 0x0c, 0x92, 0xa2, 0x94, 0x84, 0xb5, 0x40, 0xc6, 0x53, 0x6e, 0x4a, 0x51, + 0x10, 0xec, 0x94, 0x5d, 0xab, 0x82, 0xa1, 0xf0, 0x1e, 0x46, 0x29, 0x6b, + 0x4b, 0x74, 0xba, 0x4d, 0x11, 0xf9, 0x60, 0xa7, 0x8f, 0xbb, 0x2d, 0x75, + 0x92, 0x23, 0x52, 0x1b, 0x1c, 0xdf, 0xd2, 0x87, 0x9a, 0xc2, 0xb7, 0xbf, + 0x9e, 0x21, 0x1c, 0x44, 0xfb, 0x56, 0x84, 0xf4, 0x6e, 0x94, 0xba, 0xc2, + 0x7d, 0xd0, 0x90, 0x26, 0x4c, 0x19, 0xb1, 0x6d, 0x27, 0x22, 0xf6, 0x6c, + 0xb2, 0x6c, 0x47, 0xa9, 0x96, 0x91, 0x46, 0x79, 0x3e, 0xd0, 0x77, 0x07, + 0x41, 0x8b, 0x6c, 0xb2, 0xe8, 0xe8, 0xb2, 0x83, 0x36, 0x23, 0x0e, 0xa4, + 0x50, 0x9f, 0xf5, 0xb6, 0x1a, 0xa7, 0xa4, 0x48, 0x84, 0xf5, 0xcf, 0x7a, + 0x8e, 0x3f, 0xe8, 0x94, 0xb2, 0x09, 0x21, 0xa3, 0xd0, 0xa2, 0x63, 0x9b, + 0x6d, 0x06, 0xf4, 0x13, 0x71, 0x97, 0xec, 0x8b, 0xfb, 0x43, 0x26, 0x87, + 0xfd, 0xd9, 0x52, 0xd3, 0x3b, 0xdb, 0xd7, 0x22, 0xea, 0x25, 0x7d, 0xc4, + 0x4c, 0xa5, 0x41, 0xa6, 0x82, 0xc8, 0xd3, 0xbf, 0xed, 0xfb, 0xf3, 0x4e, + 0x8d, 0xe7, 0xd5, 0x0a, 0x16, 0xfb, 0x65, 0x0b, 0xc2, 0x16, 0xdb, 0x50, + 0x32, 0x12, 0x27, 0x6e, 0x39, 0xe1, 0x0a, 0x6e, 0xd2, 0xdb, 0xfb, 0x80, + 0x18, 0x66, 0xd2, 0x0b, 0xbd, 0x5a, 0xd1, 0xd9, 0x84, 0xe6, 0x4b, 0x79, + 0x27, 0x4f, 0xa7, 0x36, 0x6a, 0xaa, 0x26, 0x30, 0xb7, 0x24, 0xf5, 0x02, + 0x37, 0xe2, 0xfa, 0xbe, 0x96, 0xa7, 0x54, 0x7a, 0x8e, 0xb8, 0x51, 0x5a, + 0x4b, 0x9c, 0xea, 0x20, 0xb1, 0x55, 0xc3, 0xad, 0x24, 0x4d, 0xc2, 0x2c, + 0x53, 0xcb, 0x5e, 0xb1, 0x25, 0x69, 0x5d, 0x71, 0x8d, 0x7d, 0x79, 0x43, + 0x19, 0xaf, 0x0c, 0xb3, 0x90, 0x1b, 0x3d, 0x69, 0xd5, 0x0f, 0x9d, 0x69, + 0x62, 0x89, 0xb1, 0xee, 0x0c, 0xab, 0x9e, 0x08, 0xb0, 0x26, 0xf7, 0x11, + 0xce, 0x6d, 0x03, 0x11, 0x9e, 0x8f, 0x23, 0x03, 0x84, 0x8d, 0xfc, 0x5a, + 0xa1, 0xca, 0x71, 0x58, 0x05, 0x02, 0xaa, 0xe2, 0xbd, 0x22, 0xc0, 0xc1, + 0x79, 0x3c, 0xc0, 0xc5, 0x33, 0x70, 0x44, 0xfc, 0x60, 0x31, 0x17, 0xfc, + 0xbf, 0x6f, 0xca, 0x80, 0x1f, 0xbf, 0xa9, 0x38, 0x53, 0xa3, 0xc6, 0x50, + 0x38, 0x06, 0x29, 0xa1, 0xce, 0xb9, 0xb5, 0x09, 0x85, 0x36, 0xff, 0x24, + 0x67, 0x81, 0x35, 0x09, 0x89, 0x18, 0x7e, 0x44, 0x9a, 0x9f, 0xd6, 0xaa, + 0xed, 0xba, 0x15, 0xec, 0x16, 0x3e, 0x31, 0xf2, 0x8d, 0xbf, 0x3c, 0xa9, + 0xf0, 0x99, 0x9f, 0x76, 0x6b, 0x2d, 0x7a, 0xd3, 0x08, 0xdd, 0xf7, 0x1e, + 0xda, 0xac, 0x58, 0xef, 0xa7, 0x88, 0x84, 0x9c, 0x96, 0xf8, 0x03, 0xb4, + 0x9d, 0x33, 0x24, 0xd6, 0x66, 0x71, 0x67, 0x49, 0x59, 0x2d, 0x19, 0xc4, + 0x5e, 0xac, 0x62, 0xaf, 0xc8, 0x39, 0xdf, 0x9a, 0x3d, 0x22, 0x35, 0xef, + 0xe1, 0x12, 0x4f, 0x2d, 0x63, 0x39, 0xf3, 0xd0, 0x78, 0xff, 0xda, 0xf4, + 0xd4, 0x92, 0xd2, 0x53, 0x42, 0xd8, 0xb8, 0x2a, 0x1d, 0xaa, 0xb0, 0x42, + 0x6c, 0x13, 0x74, 0x22, 0x4a, 0x06, 0xba, 0x0c, 0x50, 0xce, 0xcc, 0x84, + 0xa8, 0x5d, 0xdb, 0x3d, 0x79, 0x6c, 0x29, 0xeb, 0x7c, 0x5e, 0x80, 0xaa, + 0x24, 0x08, 0x42, 0x39, 0x49, 0xb5, 0xb4, 0x4a, 0x4a, 0x26, 0x77, 0xb5, + 0xa5, 0x30, 0x40, 0xb8, 0x10, 0x97, 0xed, 0x24, 0x13, 0xe8, 0x94, 0x58, + 0x1b, 0x07, 0xdd, 0xc2, 0x77, 0x0e, 0xb0, 0x68, 0xd1, 0xa0, 0x4f, 0x38, + 0x1a, 0x31, 0x45, 0x48, 0xc9, 0xad, 0x0c, 0xd7, 0x55, 0x2b, 0x8f, 0x41, + 0x10, 0x1f, 0x5e, 0x55, 0x0e, 0xd8, 0x06, 0x53, 0xc3, 0x0d, 0x3c, 0x73, + 0xba, 0x5c, 0x39, 0x3c, 0x76, 0x2b, 0x2e, 0x22, 0x72, 0xa7, 0xa5, 0xd4, + 0xfa, 0x09, 0xaf, 0x70, 0x7d, 0x69, 0xaa, 0xf6, 0x39, 0x93, 0xa8, 0xc7, + 0xa5, 0x3b, 0x60, 0x73, 0x7e, 0x70, 0x66, 0x68, 0x9c, 0x9e, 0x3b, 0xf3, + 0xf1, 0x80, 0xc1, 0xb0, 0x86, 0xcf, 0xb1, 0x36, 0xbe, 0x27, 0x2e, 0xaa, + 0x11, 0xc4, 0x1b, 0x3b, 0x6d, 0x3e, 0xff, 0x1e, 0x8f, 0x13, 0xed, 0x94, + 0x05, 0xcd, 0x12, 0xd9, 0x8e, 0xef, 0x3f, 0xd8, 0x22, 0xbb, 0xaf, 0xc0, + 0x93, 0xdd, 0xb3, 0xd7, 0xbf, 0x2e, 0xcb, 0x64, 0xbe, 0x16, 0x94, 0x65, + 0x57, 0x8b, 0xb9, 0xf6, 0x4f, 0x2e, 0x67, 0x1d, 0xcf, 0x9e, 0x0b, 0x42, + 0x9a, 0x1c, 0x0c, 0x4c, 0x96, 0xd3, 0xb3, 0xa1, 0x6f, 0x47, 0x10, 0x13, + 0x10, 0x5d, 0x63, 0xae, 0x41, 0x1e, 0x5c, 0x9b, 0x61, 0xe5, 0x93, 0x0d, + 0x8c, 0x5f, 0x81, 0xbe, 0x0b, 0x88, 0xc9, 0x90, 0x79, 0x76, 0xdf, 0x22, + 0xeb, 0x51, 0x07, 0x23, 0xba, 0x4c, 0x83, 0x99, 0x03, 0x4d, 0x16, 0x6b, + 0x45, 0x32, 0xb6, 0x50, 0x98, 0xa3, 0xd7, 0x6c, 0x1a, 0x45, 0xf3, 0x93, + 0xb9, 0x50, 0x08, 0x8c, 0xc8, 0xaf, 0xfd, 0x7d, 0xe0, 0x41, 0x5e, 0x4a, + 0x61, 0x87, 0xbf, 0x04, 0xdd, 0x25, 0xe3, 0x95, 0x9c, 0x83, 0x9e, 0x07, + 0x3a, 0xcd, 0x21, 0xd6, 0x19, 0x14, 0x90, 0xe0, 0x10, 0x8e, 0x74, 0xec, + 0xd3, 0x08, 0x19, 0xb1, 0x43, 0xf6, 0x66, 0xf9, 0xd4, 0x64, 0x0a, 0x5e, + 0xce, 0x44, 0xe2, 0xf5, 0xd5, 0x37, 0x4c, 0xda, 0xd6, 0x2b, 0x08, 0xd2, + 0x66, 0x66, 0x82, 0x5f, 0x88, 0xe4, 0xe7, 0xae, 0xcd, 0xfc, 0x2c, 0x7d, + 0xae, 0xd4, 0x9a, 0x8b, 0x8f, 0x66, 0x11, 0x1e, 0xc4, 0x27, 0xe2, 0x06, + 0x21, 0x70, 0xa1, 0x94, 0xbc, 0x65, 0xcf, 0x01, 0x83, 0x4e, 0x65, 0xff, + 0x8e, 0xf4, 0x64, 0xd8, 0xfd, 0x08, 0x28, 0x36, 0x29, 0xa9, 0xf2, 0xeb, + 0x05, 0x08, 0xba, 0x60, 0x76, 0x51, 0x10, 0xdc, 0xc2, 0xa2, 0xdf, 0x5c, + 0xa8, 0x39, 0xe5, 0x32, 0xf7, 0x76, 0x70, 0xd8, 0x61, 0xb4, 0x7b, 0x79, + 0x52, 0xbc, 0xb6, 0x2d, 0x8a, 0x58, 0x1b, 0xac, 0x35, 0x56, 0x9a, 0x2f, + 0xd5, 0xcb, 0x26, 0x0a, 0x53, 0x77, 0x6f, 0x13, 0x0a, 0xc9, 0x4b, 0xc8, + 0x48, 0x6c, 0xe0, 0xec, 0x45, 0xa0, 0x83, 0xd1, 0x81, 0x3e, 0x3f, 0x3b, + 0x7f, 0xe4, 0x6a, 0xd3, 0x98, 0x33, 0xbd, 0xba, 0x0b, 0x31, 0x53, 0xd5, + 0xb6, 0x03, 0xca, 0x3a, 0x56, 0xe4, 0x33, 0xda, 0x39, 0xd5, 0xd9, 0xf8, + 0x92, 0xa6, 0x66, 0x98, 0x5c, 0x90, 0x04, 0x37, 0x8d, 0x0d, 0x2a, 0x3e, + 0xb9, 0x78, 0x81, 0xa5, 0x87, 0xd1, 0x8f, 0xc6, 0xfc, 0x8e, 0x93, 0x16, + 0x41, 0x0b, 0xa8, 0x75, 0x49, 0xc7, 0xb2, 0x64, 0x43, 0xad, 0x69, 0xf2, + 0x9e, 0x74, 0xd6, 0xf5, 0xe2, 0xb8, 0x39, 0x2c, 0xba, 0x03, 0xae, 0x53, + 0xa0, 0x6a, 0xa2, 0x4b, 0x4d, 0x76, 0xbd, 0xc9, 0x65, 0x03, 0x7a, 0xd7, + 0x32, 0x04, 0x8a, 0x26, 0x6a, 0x32, 0x44, 0xa3, 0x54, 0xdb, 0x51, 0x2a, + 0x7e, 0xdf, 0xff, 0x25, 0xe4, 0x02, 0xe1, 0x54, 0xc6, 0x3d, 0x34, 0x09, + 0x23, 0x53, 0x9c, 0xd0, 0x00, 0xbf, 0x0c, 0x7f, 0x09, 0x87, 0x63, 0x20, + 0x8b, 0xc2, 0x72, 0xd0, 0x39, 0xd0, 0xdf, 0xc3, 0x6f, 0x28, 0x4a, 0xd2, + 0x17, 0x69, 0x3d, 0x3f, 0x5b, 0x91, 0x13, 0x21, 0x94, 0xac, 0x77, 0x51, + 0x3f, 0xb1, 0xb3, 0x73, 0xc9, 0x06, 0xaf, 0x5b, 0xcf, 0x3b, 0xff, 0xcd, + 0x38, 0xfa, 0x79, 0xa0, 0xa3, 0x53, 0x1b, 0x68, 0xe5, 0x57, 0x6a, 0x24, + 0x11, 0x73, 0xe1, 0x34, 0x96, 0xc3, 0x37, 0x49, 0x81, 0x92, 0xbb, 0xa9, + 0x0c, 0xe4, 0x0e, 0xa8, 0x98, 0x01, 0x41, 0xb4, 0xd3, 0x8e, 0x72, 0xcc, + 0x91, 0x25, 0x39, 0x68, 0x3e, 0x06, 0x00, 0x38, 0xe1, 0x4a, 0x22, 0xaf, + 0x85, 0x43, 0xdc, 0xe1, 0x9c, 0x80, 0x2d, 0x53, 0xc4, 0x1e, 0x4b, 0x28, + 0x91, 0x7d, 0x71, 0xd1, 0x94, 0x2c, 0x4f, 0x07, 0x06, 0xee, 0xba, 0x34, + 0xbd, 0x6e, 0x12, 0xc5, 0xb5, 0x37, 0x2f, 0x13, 0x05, 0x74, 0xe1, 0x23, + 0x5f, 0x40, 0x78, 0x73, 0xf9, 0x08, 0x3d, 0x00, 0xda, 0x03, 0x6b, 0x7f, + 0xef, 0x10, 0xc0, 0x4b, 0xd0, 0x70, 0x82, 0xa0, 0x1b, 0xf6, 0xe0, 0xf9, + 0x35, 0x1f, 0xa1, 0x10, 0x4c, 0xa6, 0xad, 0xc8, 0x50, 0xb0, 0xc8, 0x1e, + 0xe2, 0x1a, 0xd2, 0xdc, 0x15, 0xf3, 0x8c, 0x72, 0xd3, 0x07, 0x28, 0x46, + 0xfa, 0xe7, 0xac, 0x43, 0xb2, 0x00, 0xae, 0x90, 0x7d, 0xd7, 0xd8, 0xb9, + 0xd2, 0x6c, 0x05, 0xe2, 0xcb, 0x2c, 0xb0, 0x25, 0xaa, 0xa1, 0x90, 0x9d, + 0x65, 0x54, 0x9a, 0x47, 0xde, 0x17, 0xb5, 0xfe, 0x3c, 0xb8, 0x35, 0x09, + 0x75, 0x9d, 0xa9, 0xb0, 0x53, 0x91, 0xc2, 0x08, 0x5c, 0x88, 0x94, 0x08, + 0xc7, 0xdb, 0x0b, 0x78, 0x85, 0xf7, 0xec, 0x93, 0x2f, 0xa0, 0xfd, 0x8f, + 0xa3, 0x23, 0x8f, 0x3b, 0x2e, 0x6c, 0x8b, 0x47, 0x78, 0x31, 0x08, 0x4a, + 0x2f, 0xe1, 0x36, 0xb2, 0xf8, 0xdd, 0x37, 0x73, 0xd2, 0x6a, 0x3b, 0x77, + 0x07, 0x1a, 0x89, 0xc3, 0x53, 0x76, 0x87, 0x32, 0x7f, 0x4a, 0xc7, 0x95, + 0xfd, 0x6d, 0x45, 0x0f, 0xcf, 0x94, 0x42, 0xf5, 0x9d, 0xb5, 0x70, 0x69, + 0x32, 0xa0, 0x97, 0xcb, 0x50, 0xad, 0xd2, 0xd5, 0x64, 0xa3, 0x41, 0x27, + 0xef, 0x2e, 0x87, 0x19, 0x0f, 0xce, 0x63, 0x14, 0x17, 0x51, 0x7b, 0x72, + 0x2b, 0xc9, 0xf6, 0x18, 0x17, 0x2b, 0x31, 0x15, 0xcb, 0x78, 0xf8, 0x01, + 0x01, 0x15, 0xeb, 0x8c, 0xcd, 0xae, 0xb6, 0xbf, 0x8b, 0xbf, 0x69, 0x5e, + 0x0e, 0xaf, 0xb4, 0xbe, 0x05, 0xc6, 0xa3, 0xaa, 0xd4, 0x76, 0x77, 0x4f, + 0x85, 0x04, 0x37, 0x59, 0xba, 0x18, 0xe6, 0xc1, 0x2e, 0xe2, 0xa2, 0x36, + 0xbf, 0x3e, 0x8f, 0xfb, 0x2a, 0x1f, 0xd1, 0xcd, 0xdd, 0xc0, 0x2f, 0xe2, + 0xc1, 0x3d, 0x75, 0x7b, 0x69, 0x22, 0x59, 0x8f, 0xbc, 0x65, 0x69, 0x86, + 0xe7, 0x04, 0x28, 0x99, 0x8b, 0x0c, 0xa1, 0xf5, 0xe9, 0x31, 0xcd, 0x9d, + 0x5e, 0x64, 0xda, 0xb7, 0x0e, 0x4e, 0x59, 0xbf, 0xd6, 0x0e, 0x64, 0x2f, + 0xc3, 0xbe, 0x92, 0x2e, 0xb8, 0x3b, 0xaf, 0xd8, 0x6e, 0xca, 0x17, 0x57, + 0xc6, 0x11, 0xa0, 0x57, 0x4b, 0xa1, 0xb5, 0xe1, 0xea, 0x38, 0xe7, 0xe4, + 0x86, 0x5e, 0xf3, 0xa5, 0x49, 0xef, 0x6a, 0xb6, 0xf4, 0x3d, 0x96, 0xb5, + 0x33, 0xda, 0xf4, 0x07, 0x07, 0x8d, 0x94, 0x27, 0x2e, 0x36, 0x72, 0x3b, + 0x1a, 0x81, 0x70, 0x0c, 0xef, 0xfa, 0x7e, 0xeb, 0xb6, 0xbd, 0x7e, 0x57, + 0x25, 0x5b, 0xc2, 0x11, 0x49, 0xd2, 0x6b, 0x4d, 0x2c, 0xd0, 0x18, 0x0c, + 0x97, 0xae, 0x5d, 0xd5, 0x30, 0x52, 0xac, 0x05, 0x86, 0xe2, 0x8f, 0x89, + 0x6a, 0x5f, 0xe6, 0x98, 0x11, 0x5d, 0x88, 0x01, 0xb2, 0xb2, 0x20, 0x1c, + 0x55, 0xd4, 0xe3, 0xf5, 0x98, 0x31, 0x26, 0x5b, 0x10, 0xa4, 0x6a, 0x7a, + 0xc8, 0x67, 0x93, 0x50, 0xd8, 0x15, 0xa1, 0x9c, 0x79, 0x4c, 0xad, 0xb0, + 0x2a, 0xc5, 0x4c, 0xc8, 0x22, 0x68, 0x83, 0xa2, 0xc0, 0x51, 0xcc, 0xa8, + 0x28, 0x76, 0xe0, 0xdd, 0x81, 0xd2, 0x74, 0xd7, 0x67, 0xbe, 0x17, 0xe9, + 0xca, 0xd1, 0x75, 0xbe, 0x83, 0x07, 0x79, 0x8a, 0x00, 0x84, 0x5d, 0x82, + 0x30, 0x1e, 0x2b, 0x06, 0xb4, 0x0b, 0xf1, 0x11, 0x55, 0x89, 0xed, 0x64, + 0x29, 0x24, 0xc4, 0xef, 0x03, 0xd1, 0x82, 0xff, 0x67, 0x3a, 0xd8, 0xf9, + 0x60, 0x12, 0xce, 0x94, 0x29, 0xa5, 0xae, 0x4e, 0x23, 0xc1, 0x35, 0xb6, + 0x06, 0x48, 0xd2, 0xce, 0x19, 0xce, 0xf9, 0xdd, 0x1c, 0x78, 0x0f, 0x0c, + 0x4f, 0x66, 0xe6, 0x62, 0xb1, 0x06, 0x67, 0xca, 0x1d, 0x5b, 0x0b, 0x96, + 0x13, 0xb2, 0x01, 0x3f, 0x1e, 0xf4, 0xc4, 0x14, 0x48, 0x61, 0x42, 0xc4, + 0xfe, 0x87, 0xa4, 0x84, 0xe8, 0x54, 0xcf, 0xa6, 0x2f, 0xc4, 0xeb, 0x66, + 0x41, 0xbd, 0x2e, 0x64, 0x57, 0x57, 0x9a, 0x46, 0xf0, 0x1b, 0x53, 0x95, + 0xc3, 0x73, 0x5f, 0x7a, 0x04, 0xf9, 0xfb, 0xe2, 0x55, 0x55, 0xae, 0xc9, + 0x9c, 0xc6, 0x5e, 0x1b, 0x99, 0x53, 0x04, 0x4c, 0xb8, 0x33, 0xb4, 0x34, + 0xa3, 0xb7, 0x67, 0x83, 0x03, 0xbe, 0x75, 0xbb, 0xd8, 0x7e, 0xf8, 0xff, + 0xa3, 0x7d, 0x88, 0xa5, 0x1a, 0x1b, 0x31, 0x06, 0xb0, 0x2d, 0xb6, 0x8f, + 0xa2, 0xdd, 0x47, 0x6f, 0x66, 0xd5, 0xaf, 0xb6, 0xad, 0x8b, 0x7a, 0x1b, + 0x5d, 0x44, 0xea, 0xc0, 0x48, 0x6b, 0x70, 0x95, 0x27, 0xea, 0xd6, 0x00, + 0x77, 0xdc, 0xfc, 0x8c, 0xb3, 0x76, 0xed, 0xc7, 0xda, 0xa7, 0xcc, 0x13, + 0x71, 0xdd, 0x97, 0xcc, 0xe6, 0x86, 0xe9, 0x37, 0x7e, 0xaa, 0x7f, 0x96, + 0xe6, 0x10, 0xc9, 0xda, 0xb1, 0x36, 0xba, 0xa5, 0x5c, 0xa2, 0xad, 0xac, + 0x43, 0x5b, 0x26, 0x1e, 0xa2, 0x4c, 0x42, 0x91, 0xac, 0x42, 0x72, 0x42, + 0x5f, 0x19, 0x6c, 0x65, 0xfc, 0x37, 0x31, 0x8e, 0x75, 0xba, 0x63, 0x73, + 0x56, 0x0e, 0xa4, 0x31, 0x8f, 0xea, 0x91, 0x11, 0x9a, 0xf1, 0x33, 0xb5, + 0x9c, 0x41, 0x65, 0x04, 0x7c, 0xb0, 0x56, 0x6b, 0x01, 0x94, 0x51, 0x71, + 0x80, 0x6d, 0xeb, 0x9f, 0x69, 0xbd, 0xc5, 0x82, 0x99, 0x14, 0x11, 0x24, + 0x1b, 0x8b, 0x9a, 0xb7, 0xcc, 0x7e, 0x26, 0xe6, 0xaa, 0x65, 0x76, 0x89, + 0xe6, 0x4f, 0xd1, 0x1d, 0x7f, 0x2e, 0xf6, 0x25, 0x9b, 0xbb, 0xfb, 0x6c, + 0xcb, 0x38, 0x2f, 0xc5, 0xbe, 0xb8, 0xa8, 0xe4, 0xea, 0x82, 0x44, 0xac, + 0x34, 0xb4, 0x79, 0x6a, 0xd9, 0x60, 0x85, 0xce, 0xe6, 0xd7, 0xe1, 0xc3, + 0x8f, 0x90, 0xfa, 0xd9, 0x33, 0x12, 0xf8, 0x7c, 0x78, 0xf7, 0xbb, 0xe0, + 0x9a, 0x47, 0x82, 0xc4, 0x4d, 0xed, 0x63, 0x1f, 0xc9, 0x55, 0x81, 0xaa, + 0x9c, 0xd9, 0xbe, 0x9b, 0x5a, 0xbb, 0x93, 0x23, 0x83, 0x7e, 0xfc, 0xdd, + 0xc5, 0xfb, 0x85, 0xc3, 0x2e, 0x3b, 0x41, 0x83, 0x17, 0xce, 0x98, 0x03, + 0x2a, 0x6e, 0xd2, 0xb4, 0x75, 0xe6, 0x5b, 0x85, 0xd4, 0xf4, 0x70, 0x6e, + 0x52, 0x07, 0x12, 0x14, 0x15, 0x9d, 0x4d, 0x7e, 0x5e, 0xb4, 0xac, 0xe5, + 0xc0, 0x70, 0xa6, 0x7e, 0xef, 0xba, 0x8f, 0xe8, 0xe9, 0x2b, 0x29, 0x76, + 0xe4, 0x8c, 0x5c, 0xaa, 0xf0, 0xd3, 0xb8, 0xb7, 0x40, 0x40, 0xbe, 0x04, + 0x21, 0xdc, 0x55, 0xa8, 0xba, 0x89, 0x50, 0x20, 0x3c, 0x53, 0x11, 0x1d, + 0x8c, 0x8c, 0x1d, 0x75, 0x24, 0xa5, 0x51, 0x72, 0xb5, 0x76, 0x8b, 0xa7, + 0xee, 0xdd, 0x2a, 0x6f, 0x49, 0x48, 0xe2, 0xd3, 0xc6, 0x8e, 0x1e, 0x45, + 0xad, 0x83, 0xce, 0x72, 0x30, 0x81, 0x2f, 0xe0, 0x27, 0xe7, 0x36, 0xbf, + 0xa3, 0x02, 0x10, 0x33, 0x2a, 0xe4, 0x05, 0x7f, 0xe1, 0x31, 0x5c, 0xae, + 0xbb, 0x7a, 0xf6, 0x68, 0x4b, 0x2d, 0xcd, 0x75, 0xbe, 0x6e, 0x7d, 0xd8, + 0xfc, 0xa2, 0xed, 0xdd, 0xc1, 0x0f, 0x06, 0xeb, 0x91, 0x91, 0x26, 0x10, + 0x26, 0x20, 0x89, 0x3f, 0xd1, 0xaf, 0xd7, 0xe1, 0x17, 0x1b, 0x28, 0x9a, + 0x2d, 0x17, 0xbc, 0x76, 0xb6, 0x54, 0xdc, 0x98, 0x3d, 0x25, 0x38, 0xfc, + 0x6a, 0x8f, 0x10, 0x41, 0x9e, 0x18, 0x09, 0xb6, 0x0f, 0x67, 0x8b, 0xf0, + 0x99, 0x57, 0x95, 0x1a, 0x87, 0xac, 0x01, 0x84, 0x97, 0x9d, 0x6d, 0xb5, + 0x5c, 0xa5, 0x72, 0x77, 0x36, 0xd9, 0x3c, 0x45, 0x4b, 0x76, 0xae, 0x77, + 0xcf, 0x6c, 0x7c, 0x7a, 0x5d, 0xee, 0xe2, 0x96, 0xcb, 0xdf, 0x9b, 0x95, + 0x1e, 0xbb, 0x74, 0x33, 0xba, 0xe5, 0x23, 0x1d, 0x3f, 0x49, 0xf8, 0x5f, + 0xed, 0x94, 0x9a, 0x43, 0xc2, 0xc6, 0xd6, 0x70, 0x75, 0x76, 0xd1, 0x7d, + 0xde, 0xd6, 0x3c, 0x2c, 0x33, 0x0b, 0x19, 0x44, 0x56, 0xc3, 0xf1, 0xab, + 0x80, 0xf4, 0x51, 0x48, 0xed, 0x0c, 0xbf, 0x9b, 0x40, 0x92, 0xe5, 0xc2, + 0xc5, 0x34, 0x17, 0x84, 0x0c, 0x8b, 0x11, 0x51, 0x65, 0x3e, 0xd1, 0xe8, + 0xb4, 0xb9, 0x1a, 0x79, 0x81, 0xdf, 0x4b, 0x1d, 0x6e, 0xd8, 0x21, 0xc7, + 0x8a, 0xa4, 0x9c, 0xa8, 0x8d, 0x2b, 0x56, 0x6a, 0xf2, 0xae, 0x47, 0x88, + 0xdd, 0x9b, 0xf7, 0xf6, 0x62, 0xf3, 0xbd, 0xf7, 0x4d, 0xe7, 0xaa, 0x11, + 0x2c, 0x3f, 0xe2, 0x95, 0x04, 0x0c, 0x54, 0x90, 0xb9, 0x83, 0xb2, 0xe2, + 0xd2, 0x92, 0x79, 0x09, 0x03, 0x1e, 0x18, 0x49, 0xef, 0xce, 0x7d, 0xcc, + 0x66, 0xd2, 0x03, 0x3f, 0x5e, 0xf3, 0xb0, 0x3f, 0x0d, 0x93, 0xd9, 0x6e, + 0xca, 0x8f, 0xa4, 0xf0, 0x67, 0x8b, 0xa9, 0xd4, 0x2f, 0x1d, 0x23, 0x5f, + 0xca, 0x44, 0xf2, 0xd1, 0x4e, 0x63, 0x67, 0xa7, 0xd3, 0xf9, 0xbe, 0x28, + 0x2e, 0xdc, 0x28, 0x5f, 0x01, 0x96, 0x10, 0xb0, 0x8b, 0x77, 0xb2, 0xa5, + 0x3e, 0x15, 0x96, 0xac, 0xd5, 0x88, 0x68, 0xb6, 0xd9, 0x8c, 0x9c, 0x29, + 0xf2, 0x82, 0x8b, 0x92, 0xe3, 0x4e, 0x57, 0xe4, 0xc8, 0x52, 0xa4, 0xa2, + 0xf7, 0xbd, 0x87, 0x36, 0x85, 0x10, 0x1b, 0xfc, 0x80, 0xb1, 0x95, 0xa3, + 0xc8, 0x36, 0x14, 0xf3, 0x9d, 0x1e, 0xe7, 0xdf, 0x52, 0x0b, 0xec, 0xc5, + 0x78, 0x3e, 0x7d, 0xa6, 0x5e, 0x58, 0x7a, 0x00, 0xd9, 0xc8, 0xf7, 0xbf, + 0x11, 0xeb, 0xd7, 0x55, 0xb0, 0x45, 0x1b, 0x93, 0xc8, 0x4f, 0xd7, 0xb7, + 0x53, 0xf0, 0x49, 0xd1, 0x96, 0xd2, 0x83, 0x76, 0x06, 0xc6, 0x9a, 0x42, + 0xb1, 0x53, 0x81, 0x66, 0x37, 0x35, 0xcc, 0x95, 0x9c, 0x5b, 0x5b, 0x4e, + 0x25, 0xe0, 0x25, 0x36, 0x6f, 0x75, 0x00, 0x13, 0xb6, 0x80, 0x88, 0x97, + 0x43, 0xdc, 0x99, 0xe2, 0x6a, 0xdd, 0x8e, 0xb8, 0xf0, 0x01, 0xd6, 0x11, + 0xb2, 0xb8, 0x17, 0x8f, 0xb3, 0x18, 0x1f, 0x36, 0xed, 0x1e, 0xc9, 0x84, + 0x63, 0x10, 0xbe, 0xff, 0xb6, 0x53, 0x54, 0x6a, 0xe9, 0x59, 0xfc, 0xf6, + 0x2d, 0x13, 0xe9, 0xe5, 0x97, 0xc9, 0x5b, 0xd7, 0xa5, 0xf8, 0x56, 0xf8, + 0xf4, 0x55, 0x1d, 0x99, 0xf3, 0x57, 0x54, 0x28, 0xe7, 0x6e, 0x44, 0xde, + 0xe4, 0xe2, 0xce, 0x25, 0x4b, 0xdd, 0x29, 0xaa, 0x4e, 0xd2, 0xb2, 0x6e, + 0xaf, 0x29, 0xac, 0xb4, 0xbc, 0x40, 0x0a, 0x61, 0x4a, 0x6e, 0x5f, 0xd8, + 0xa5, 0x82, 0xec, 0x85, 0x89, 0x11, 0x11, 0xcd, 0xb8, 0x4d, 0xbd, 0x7a, + 0x9d, 0xc6, 0xe0, 0xfe, 0x09, 0x15, 0x9f, 0x5f, 0xdc, 0xb1, 0x8b, 0xd1, + 0x82, 0x0f, 0x4c, 0x07, 0xe9, 0x42, 0x4a, 0x5a, 0x7c, 0x13, 0x7f, 0x16, + 0x29, 0xd1, 0xe9, 0xe9, 0xf2, 0xd7, 0x8a, 0x25, 0x88, 0x4c, 0x25, 0x53, + 0xcc, 0x76, 0xe6, 0xfd, 0x38, 0x73, 0x7e, 0xaa, 0xee, 0xf7, 0xa7, 0xee, + 0xc4, 0x1a, 0x0d, 0x36, 0x02, 0xd6, 0x24, 0x7d, 0xb2, 0x49, 0xbb, 0xb4, + 0x21, 0x21, 0x4a, 0xb6, 0x59, 0x3c, 0xae, 0xf6, 0xf8, 0x54, 0xe2, 0xa3, + 0xb4, 0xb1, 0x58, 0xc6, 0xf7, 0x45, 0x3c, 0xdb, 0x6c, 0x1e, 0x88, 0x8f, + 0xbf, 0x30, 0xcd, 0x06, 0xc3, 0x90, 0x97, 0x50, 0x85, 0x24, 0x1f, 0x00, + 0x6b, 0x29, 0xaa, 0x12, 0xc0, 0xb7, 0x02, 0x38, 0x5e, 0x56, 0x39, 0x93, + 0x1a, 0x69, 0x9f, 0x1d, 0xff, 0x5b, 0xc6, 0x46, 0xb5, 0xa3, 0x3e, 0xb4, + 0xb4, 0x20, 0xe1, 0x0a, 0x65, 0xc2, 0x53, 0xe6, 0x50, 0xae, 0x5b, 0x8e, + 0xc7, 0xa4, 0xe7, 0x76, 0xbe, 0x01, 0x0d, 0x33, 0x8b, 0x22, 0x34, 0xb6, + 0xa6, 0x98, 0xb0, 0xed, 0x87, 0xb5, 0xe5, 0xc8, 0x4b, 0x45, 0x31, 0x69, + 0x52, 0xcf, 0x1a, 0xb7, 0xd2, 0x38, 0xdd, 0x44, 0x93, 0x42, 0x60, 0x00, + 0x0a, 0xe5, 0x4b, 0xac, 0x25, 0x37, 0x57, 0x41, 0x7e, 0xfa, 0x86, 0x3a, + 0x6d, 0x4c, 0xc3, 0x29, 0x02, 0x3e, 0xbc, 0xea, 0x11, 0x9c, 0x62, 0x29, + 0x6a, 0x84, 0xee, 0x10, 0x82, 0x32, 0x19, 0x01, 0xeb, 0xc1, 0xde, 0xee, + 0x0e, 0xd0, 0x25, 0x25, 0xb3, 0xc7, 0x62, 0xb8, 0x7b, 0x35, 0x5b, 0xea, + 0x14, 0xab, 0x3d, 0x10, 0x2f, 0x87, 0x6b, 0xd5, 0x7e, 0xd0, 0x2d, 0x74, + 0xa0, 0xdc, 0xe3, 0xce, 0xb4, 0x62, 0x4a, 0x64, 0x5a, 0x9c, 0x5d, 0x99, + 0xff, 0x63, 0x1f, 0x88, 0x6f, 0x81, 0xcd, 0xf1, 0x53, 0x09, 0x2d, 0x50, + 0x5a, 0xd8, 0xbc, 0xdd, 0x0a, 0xda, 0x55, 0x75, 0x6b, 0xe2, 0x6a, 0xa3, + 0x20, 0x2b, 0xcd, 0x72, 0x6f, 0x5b, 0x44, 0x81, 0x43, 0xb9, 0x03, 0x52, + 0x46, 0x36, 0xb4, 0x23, 0xaf, 0xeb, 0x48, 0x9c, 0x25, 0x77, 0x82, 0x41, + 0x81, 0x93, 0xbd, 0x1a, 0xbd, 0xb7, 0xfc, 0xf0, 0xad, 0x64, 0x06, 0xce, + 0x4b, 0x5a, 0x1b, 0xc9, 0x1e, 0xa5, 0xb8, 0x45, 0xb2, 0x68, 0x5a, 0x04, + 0x87, 0xed, 0x26, 0xd7, 0x52, 0x40, 0x30, 0x45, 0x95, 0x3c, 0x0d, 0x84, + 0x3f, 0xd4, 0x13, 0xe8, 0xf9, 0xdd, 0x22, 0x0a, 0x93, 0xd6, 0xf8, 0x11, + 0x28, 0xa7, 0x11, 0x75, 0x4c, 0xbb, 0x0e, 0x2c, 0x91, 0x44, 0xb1, 0x8f, + 0x96, 0xad, 0x3b, 0x2f, 0x15, 0xb5, 0x30, 0x2b, 0xbf, 0x36, 0x62, 0x86, + 0x7d, 0x21, 0x96, 0xf8, 0x2d, 0x0b, 0xeb, 0x09, 0x96, 0xee, 0xf5, 0x64, + 0xae, 0x0c, 0x6c, 0xb6, 0xcb, 0xd0, 0xa9, 0x1b, 0xd1, 0xaa, 0x83, 0x63, + 0x81, 0x1c, 0xed, 0x83, 0x77, 0x89, 0xb4, 0x8f, 0x26, 0x5e, 0x46, 0x86, + 0x6b, 0x97, 0x4a, 0xef, 0x98, 0xfd, 0xef, 0xe2, 0x6f, 0xd2, 0xd4, 0x96, + 0xc7, 0xe4, 0x82, 0x6e, 0x14, 0x3a, 0x2b, 0x71, 0x9e, 0x4d, 0x8e, 0xd4, + 0x21, 0xdf, 0xed, 0x43, 0x5c, 0x2b, 0xb6, 0xa6, 0xce, 0x62, 0x3c, 0xb8, + 0x02, 0xec, 0xe6, 0x88, 0xa9, 0x4f, 0xea, 0xb4, 0x16, 0x57, 0x84, 0x05, + 0x95, 0x28, 0xaf, 0x66, 0xc8, 0xba, 0xb3, 0x27, 0x07, 0x9f, 0x79, 0xf8, + 0x60, 0xe6, 0x32, 0x4e, 0x38, 0x6f, 0xbf, 0xbb, 0xba, 0xd4, 0x3f, 0x44, + 0x68, 0x89, 0x30, 0xd6, 0xe2, 0xaf, 0x43, 0x3c, 0xb1, 0xe3, 0x4c, 0xf8, + 0xd8, 0xa1, 0x76, 0x7b, 0xce, 0x8e, 0x36, 0xb0, 0x74, 0xac, 0x84, 0x91, + 0x1d, 0xfc, 0x70, 0x32, 0xac, 0x54, 0x7a, 0x93, 0x72, 0xba, 0x1b, 0x9f, + 0x0b, 0xa7, 0xfe, 0x7e, 0xd0, 0x2b, 0x1f, 0x84, 0xd5, 0x14, 0x4e, 0x8f, + 0x10, 0x3b, 0x47, 0x38, 0x11, 0x44, 0x4a, 0x1a, 0x48, 0xf3, 0x00, 0xe6, + 0xec, 0xc4, 0xc2, 0xe4, 0x26, 0xdc, 0x74, 0x36, 0x15, 0x3a, 0x4c, 0xe2, + 0x08, 0x2b, 0x82, 0x2a, 0x0e, 0x8c, 0x47, 0x2b, 0x6d, 0xd5, 0x47, 0xc2, + 0x4e, 0xda, 0xa4, 0x91, 0x84, 0x25, 0x10, 0xef, 0x92, 0x0a, 0x3f, 0x51, + 0x24, 0x9f, 0x8e, 0x44, 0xb7, 0x21, 0x64, 0x4b, 0x95, 0xf1, 0x36, 0xc8, + 0xe0, 0x75, 0x01, 0x7e, 0x40, 0xc9, 0x46, 0x34, 0xcd, 0xd5, 0xfb, 0xc4, + 0x93, 0x65, 0x49, 0x57, 0xc9, 0xff, 0xc6, 0x07, 0x08, 0xa7, 0x92, 0xd8, + 0x34, 0xea, 0xb2, 0xc3, 0x60, 0xa9, 0x57, 0x1a, 0xb9, 0x0d, 0xa8, 0x07, + 0xf6, 0xa9, 0xa4, 0x71, 0x04, 0x37, 0x2c, 0x06, 0x0d, 0x9d, 0xa1, 0x33, + 0x5a, 0xfe, 0x52, 0x9f, 0xbe, 0xa6, 0xde, 0x92, 0x65, 0xc3, 0xe4, 0xe9, + 0x82, 0xf6, 0x2f, 0xa3, 0x77, 0xfa, 0xf8, 0x92, 0x8f, 0xa0, 0xdc, 0x39, + 0x00, 0xd2, 0x62, 0xd5, 0xaf, 0xec, 0x2b, 0x30, 0x96, 0xcf, 0x13, 0xc6, + 0xcf, 0x01, 0x56, 0x62, 0xe5, 0xb5, 0xac, 0xa5, 0x33, 0xc5, 0x4a, 0xef, + 0xce, 0x19, 0xaf, 0xad, 0x73, 0x66, 0xa8, 0x93, 0x7f, 0x27, 0x00, 0x93, + 0x55, 0xf4, 0x4c, 0xfd, 0xd0, 0xb1, 0x1c, 0x1b, 0x25, 0x8c, 0x65, 0x6e, + 0x03, 0x7f, 0xf7, 0xd7, 0xbb, 0xb9, 0xc6, 0xe3, 0x27, 0x9e, 0xb7, 0x2f, + 0x4d, 0x54, 0xfa, 0x19, 0x2f, 0xb2, 0x4b, 0x83, 0x62, 0xd7, 0x79, 0x9a, + 0xbc, 0x76, 0x71, 0x3c, 0xe8, 0xa5, 0x65, 0xf8, 0x6f, 0x72, 0x4e, 0x85, + 0x41, 0xcc, 0x77, 0x11, 0x2c, 0x09, 0x66, 0x06, 0x1a, 0x14, 0xd8, 0x0a, + 0xfb, 0x91, 0x88, 0x72, 0xd7, 0x37, 0x4d, 0xf0, 0x05, 0x45, 0xbd, 0x61, + 0xe8, 0xd8, 0xc2, 0xd8, 0x92, 0x9b, 0x24, 0x29, 0x4e, 0x75, 0x19, 0x29, + 0xe3, 0x21, 0x12, 0xf5, 0x7a, 0x5b, 0x6a, 0xa8, 0x14, 0xb8, 0xf2, 0x6b, + 0x24, 0xc2, 0xce, 0x0d, 0xe0, 0x9a, 0x4d, 0xe7, 0xf4, 0xc1, 0x8d, 0xb1, + 0x10, 0x8c, 0x6e, 0x55, 0x96, 0x26, 0xa3, 0x28, 0xb4, 0x5e, 0xa6, 0x77, + 0xfe, 0xa5, 0x91, 0xeb, 0x5a, 0x63, 0x9d, 0x4d, 0x50, 0xdf, 0x81, 0x8e, + 0xe6, 0x5d, 0x69, 0x13, 0x49, 0xc4, 0xf9, 0x72, 0x34, 0x9e, 0xab, 0x02, + 0x42, 0xff, 0xe7, 0xc1, 0x2c, 0xe9, 0xd9, 0x81, 0x3c, 0xb9, 0x84, 0x6c, + 0xf8, 0x6b, 0x99, 0x5e, 0xa0, 0xda, 0x63, 0x55, 0xe2, 0x9c, 0xd8, 0xaa, + 0x5c, 0xa6, 0x44, 0xc2, 0x48, 0xc9, 0x5c, 0xbf, 0x96, 0x9d, 0xda, 0x71, + 0x75, 0xd0, 0xb8, 0xaf, 0x78, 0x38, 0x37, 0x1b, 0xa0, 0x4e, 0xd1, 0xf8, + 0x61, 0x77, 0xd8, 0x84, 0x56, 0x4f, 0x1a, 0x34, 0xed, 0x8f, 0xb4, 0xa7, + 0xc4, 0xdb, 0x75, 0xe7, 0xe0, 0xd1, 0x3e, 0x42, 0x06, 0xc9, 0x06, 0x5d, + 0x0c, 0x77, 0xb5, 0x74, 0x64, 0xab, 0xdd, 0xc6, 0x65, 0xae, 0x49, 0x3e, + 0xb3, 0x73, 0x16, 0x98, 0xa0, 0x5a, 0x4f, 0xc9, 0x8c, 0x70, 0x70, 0x5a, + 0x89, 0x5f, 0x9f, 0xea, 0x2c, 0xcf, 0x19, 0xa7, 0x7f, 0x6e, 0xa8, 0x9e, + 0xf9, 0x0e, 0xbd, 0xf5, 0x78, 0xb6, 0x9d, 0xab, 0x14, 0x06, 0x3a, 0xb0, + 0x33, 0x21, 0xc2, 0xa2, 0x1c, 0xa2, 0xd2, 0x06, 0xe5, 0x8b, 0xe4, 0x69, + 0xd2, 0x85, 0x56, 0x26, 0x5c, 0x4b, 0x82, 0x9d, 0x0c, 0x7c, 0x8e, 0xc5, + 0x75, 0x81, 0x8e, 0x1e, 0x16, 0x31, 0x5d, 0xb7, 0x8b, 0x68, 0x45, 0x76, + 0x63, 0xef, 0x12, 0x10, 0x81, 0x95, 0xde, 0xda, 0xc7, 0xaf, 0x6d, 0xdc, + 0xad, 0x37, 0xc9, 0x81, 0x35, 0xaa, 0x71, 0xe7, 0x16, 0x7e, 0xce, 0x65, + 0x2a, 0x7a, 0x9a, 0x72, 0x3c, 0xa6, 0x98, 0x2a, 0x3c, 0xa2, 0x98, 0x88, + 0xbe, 0x37, 0xf4, 0xd9, 0xb6, 0x58, 0xdc, 0xe9, 0xcf, 0x1f, 0x02, 0x25, + 0x25, 0x63, 0x64, 0x58, 0x32, 0x90, 0x3f, 0x90, 0x05, 0xef, 0x67, 0xd2, + 0x51, 0x40, 0x82, 0x96, 0x60, 0x84, 0xcb, 0x0d, 0x2f, 0xef, 0xdf, 0x6f, + 0x7f, 0x22, 0x68, 0x70, 0x0f, 0xf4, 0xf5, 0xcd, 0x68, 0x56, 0x86, 0x66, + 0xb9, 0x64, 0x48, 0x40, 0x98, 0x47, 0x81, 0x0e, 0x2c, 0x62, 0xb5, 0x4c, + 0x8a, 0xbb, 0x0d, 0x8b, 0x76, 0xca, 0x04, 0xd7, 0x84, 0x69, 0x1a, 0x29, + 0x71, 0xfc, 0x95, 0xe2, 0x40, 0xe3, 0x5c, 0xb4, 0x10, 0x3d, 0xb7, 0x3f, + 0xa7, 0xac, 0x65, 0x31, 0x32, 0xc2, 0x8a, 0x9f, 0x1f, 0xc1, 0xa6, 0xb9, + 0xc8, 0xf3, 0x2f, 0xce, 0x33, 0xd2, 0x71, 0xcd, 0x38, 0x88, 0x91, 0x8d, + 0xca, 0x58, 0xe9, 0x89, 0xa5, 0xf3, 0x0a, 0x44, 0xb4, 0x0c, 0x42, 0xc8, + 0x21, 0x52, 0x2c, 0x25, 0x72, 0x79, 0x79, 0x35, 0x57, 0x22, 0xc3, 0xb9, + 0x7c, 0x59, 0x38, 0xbb, 0x6f, 0xcb, 0xcb, 0x83, 0x1f, 0xb5, 0x6c, 0xe6, + 0xee, 0xaf, 0xc8, 0x36, 0x35, 0x8e, 0xcc, 0x0c, 0xfa, 0x5b, 0x45, 0x1d, + 0x7f, 0x2c, 0xab, 0x57, 0x85, 0xf9, 0x9f, 0x04, 0x27, 0x7f, 0x4c, 0xa4, + 0x1a, 0xb7, 0x6d, 0x3b, 0xfd, 0xf9, 0xbc, 0x1a, 0xbb, 0x6b, 0x57, 0x05, + 0xd4, 0xd4, 0x78, 0x77, 0xed, 0x5c, 0x61, 0xe3, 0xcc, 0xb2, 0xfb, 0x59, + 0xb6, 0x74, 0x55, 0x4d, 0x4b, 0xab, 0x16, 0xdd, 0x90, 0x5d, 0x14, 0x2b, + 0xcc, 0xc8, 0x00, 0xb5, 0x22, 0xb8, 0x05, 0xa1, 0x91, 0x7e, 0x84, 0x85, + 0x4a, 0xa7, 0xf1, 0x0a, 0x41, 0xa8, 0x44, 0x86, 0x43, 0x4b, 0x70, 0x3f, + 0x65, 0x93, 0xa4, 0xa8, 0xac, 0xde, 0x46, 0xe9, 0xa4, 0x14, 0x70, 0x33, + 0x92, 0x8d, 0xc9, 0xe0, 0x02, 0xc1, 0x59, 0xf6, 0x26, 0x0b, 0x1b, 0x2b, + 0x9c, 0x88, 0x65, 0x59, 0xb0, 0x16, 0x0b, 0x1e, 0x01, 0x13, 0x4c, 0x10, + 0xc1, 0xd3, 0x3c, 0x54, 0xa9, 0xd5, 0x07, 0x1a, 0xcf, 0xe9, 0xee, 0x59, + 0xa0, 0x28, 0xb4, 0x88, 0xc2, 0x6f, 0x7a, 0x1b, 0xc1, 0x20, 0x3b, 0x24, + 0x0c, 0xf9, 0xbb, 0xba, 0xfc, 0xfe, 0xc0, 0x54, 0xf2, 0x3f, 0xd7, 0xc8, + 0x55, 0xd9, 0xd0, 0x72, 0x9e, 0xee, 0xae, 0xce, 0xc7, 0x85, 0x3b, 0x2e, + 0x8e, 0x9c, 0x1e, 0xf1, 0x1a, 0x8d, 0x97, 0xd4, 0xaf, 0xfc, 0xef, 0x8f, + 0x49, 0xc7, 0xa5, 0x38, 0x59, 0x9a, 0x1c, 0xf5, 0xcb, 0x21, 0x45, 0xff, + 0xe5, 0x07, 0x0b, 0x36, 0x21, 0x03, 0x4b, 0xee, 0x21, 0xc4, 0x80, 0x33, + 0x3f, 0xe8, 0xf0, 0x66, 0xaa, 0x23, 0x9e, 0x3a, 0x1e, 0x78, 0xea, 0xb2, + 0x6d, 0x17, 0x64, 0x8a, 0x34, 0xa6, 0x7f, 0x63, 0x37, 0x2e, 0x25, 0x11, + 0xa8, 0xd5, 0x92, 0xfc, 0xfb, 0xb2, 0x21, 0x54, 0x10, 0xe8, 0xb1, 0x5e, + 0x2d, 0xa8, 0x31, 0xc6, 0xef, 0x2f, 0x6e, 0xcd, 0x8f, 0x92, 0x20, 0xcd, + 0x30, 0x0c, 0xa1, 0x4d, 0x7d, 0x7d, 0xa6, 0xbc, 0x17, 0x7c, 0x8b, 0x49, + 0x7a, 0xb3, 0xb9, 0x00, 0x3d, 0x13, 0x7d, 0x6c, 0x43, 0x18, 0xaf, 0x53, + 0x0a, 0xcd, 0x8d, 0x55, 0x26, 0x64, 0xaa, 0x5a, 0x32, 0x0a, 0x53, 0xb2, + 0xcb, 0x4b, 0xd6, 0xba, 0x31, 0xac, 0xa4, 0x80, 0x28, 0x05, 0x25, 0x19, + 0x7b, 0x88, 0xff, 0xde, 0x1d, 0x79, 0xf9, 0x50, 0x88, 0x8f, 0x1e, 0xf2, + 0x9e, 0x0e, 0x73, 0xdb, 0xdc, 0x55, 0xb9, 0x9b, 0x3f, 0x97, 0xfa, 0x1d, + 0xf7, 0xf5, 0x7d, 0x7d, 0x62, 0x5b, 0xdb, 0xba, 0x65, 0xf6, 0xa9, 0xb3, + 0x62, 0xf7, 0x6a, 0x76, 0x04, 0x6a, 0x28, 0x94, 0x12, 0x9e, 0xf7, 0x1f, + 0xe7, 0xef, 0x59, 0x06, 0xb9, 0x22, 0xc3, 0xa7, 0xaa, 0xa7, 0xee, 0x8b, + 0x06, 0x64, 0x82, 0xa5, 0xe3, 0x52, 0x16, 0x1c, 0xc4, 0x15, 0x5a, 0x42, + 0xcb, 0x4d, 0x08, 0x11, 0xda, 0x87, 0x3f, 0x29, 0x0d, 0xa4, 0x31, 0x21, + 0x49, 0xce, 0x25, 0x1d, 0x83, 0x21, 0xb0, 0xc9, 0xa3, 0x56, 0x48, 0x09, + 0x83, 0x31, 0xc2, 0x85, 0x9f, 0x40, 0x31, 0x10, 0x20, 0x37, 0xe2, 0x45, + 0x2c, 0xe0, 0x79, 0x06, 0xbb, 0xf1, 0x22, 0xf2, 0xea, 0x85, 0x1d, 0x1e, + 0x8b, 0x19, 0x39, 0x22, 0x43, 0x5f, 0xc8, 0x14, 0x7e, 0x36, 0x1d, 0x4b, + 0x31, 0xcc, 0x59, 0x1b, 0x94, 0x6a, 0x57, 0x23, 0x3f, 0x57, 0x14, 0x18, + 0x14, 0x20, 0x49, 0xaf, 0xa8, 0x4e, 0xe4, 0x78, 0x7a, 0x79, 0xad, 0x34, + 0xdb, 0xe5, 0x58, 0x1c, 0x18, 0x98, 0xeb, 0xaa, 0xa8, 0x95, 0xa4, 0xc1, + 0x82, 0x65, 0x25, 0x25, 0x84, 0x1e, 0x88, 0x99, 0xcf, 0xda, 0x94, 0xeb, + 0x8d, 0xdb, 0xb7, 0x2f, 0x67, 0x4a, 0x79, 0x99, 0x5f, 0xd1, 0x10, 0x41, + 0xc4, 0x89, 0x08, 0x02, 0xcb, 0x22, 0x16, 0x11, 0x66, 0x46, 0x6b, 0xab, + 0xb0, 0x2e, 0x98, 0xc3, 0xfd, 0x44, 0x7f, 0x75, 0xfb, 0x8b, 0x95, 0x3e, + 0x60, 0x5a, 0xe0, 0xcd, 0x10, 0xea, 0xf8, 0xae, 0xc3, 0xd5, 0x0d, 0xea, + 0x7d, 0x64, 0xfa, 0xfc, 0x6c, 0x97, 0x05, 0x86, 0xe3, 0x7c, 0x2d, 0x41, + 0x84, 0xc5, 0xec, 0x2e, 0x87, 0x61, 0x30, 0xa4, 0x25, 0x99, 0x20, 0x32, + 0x67, 0x01, 0x72, 0x98, 0x9e, 0xfd, 0x23, 0x84, 0xf7, 0x3b, 0xae, 0xb8, + 0x27, 0x4e, 0x45, 0x4e, 0xc4, 0xf0, 0x28, 0x16, 0x67, 0x21, 0x2c, 0x81, + 0x74, 0x1a, 0x2f, 0x53, 0x5a, 0x93, 0xd5, 0x8a, 0x91, 0x10, 0x33, 0xe7, + 0xde, 0x19, 0xd3, 0x6f, 0xb2, 0xdd, 0x32, 0xe8, 0x3c, 0x45, 0xc6, 0xa2, + 0x01, 0x9c, 0xac, 0x52, 0x76, 0x8e, 0xa2, 0x2c, 0xb6, 0x44, 0xe6, 0x29, + 0x24, 0x3b, 0x2f, 0xa7, 0xcd, 0xc5, 0xb8, 0x41, 0xda, 0x09, 0x6c, 0xda, + 0xaf, 0x46, 0x0d, 0xc6, 0xc8, 0x36, 0xd3, 0x62, 0x84, 0x01, 0x88, 0x45, + 0x02, 0x48, 0xee, 0x3c, 0x86, 0xf6, 0x1c, 0xaf, 0x06, 0xd0, 0x5e, 0x4d, + 0xd4, 0x8a, 0x67, 0x28, 0x22, 0x56, 0x35, 0x10, 0xaa, 0xea, 0xed, 0x35, + 0x55, 0xf5, 0xf5, 0x3e, 0xe0, 0x3e, 0x5e, 0x15, 0xd6, 0x9b, 0xcd, 0x5c, + 0x54, 0xcf, 0x72, 0xba, 0x10, 0xae, 0xf9, 0x7b, 0x79, 0xf9, 0xcc, 0xf0, + 0xf0, 0xcc, 0xac, 0x2b, 0x7e, 0x50, 0x8b, 0x86, 0x86, 0x0e, 0xd1, 0x43, + 0x97, 0xba, 0x79, 0xb7, 0x6e, 0xf5, 0xc2, 0x78, 0xb2, 0x77, 0x41, 0x1e, + 0xa1, 0x20, 0xd3, 0x59, 0x8b, 0x60, 0x48, 0x2b, 0xaf, 0xb1, 0x90, 0x56, + 0xdb, 0x5e, 0x87, 0x85, 0xf4, 0xda, 0x36, 0xb3, 0x6b, 0x3f, 0xdb, 0xaa, + 0xdb, 0xd8, 0x2d, 0x8c, 0xbf, 0x9f, 0xde, 0xb6, 0xfd, 0x24, 0x7c, 0x36, + 0xb2, 0x5b, 0x4e, 0x6f, 0x68, 0x3e, 0x73, 0x45, 0xb5, 0xa1, 0xe9, 0x0c, + 0xad, 0x02, 0x10, 0x41, 0x29, 0xc5, 0x01, 0x7b, 0xb0, 0x9b, 0xc1, 0x2c, + 0x46, 0xab, 0x2a, 0x04, 0xd3, 0x2f, 0x4a, 0x3c, 0x65, 0xa3, 0x41, 0x68, + 0x36, 0x9a, 0xc9, 0x95, 0xff, 0x0f, 0xbb, 0x53, 0x55, 0x05, 0x68, 0xf1, + 0x4d, 0x15, 0x3e, 0x52, 0x50, 0x68, 0x3c, 0xb0, 0xdc, 0x0b, 0x8d, 0xb0, + 0xe9, 0x82, 0x7a, 0x6f, 0xd7, 0x4d, 0x4e, 0x6e, 0xca, 0xa4, 0x20, 0x0b, + 0x73, 0x15, 0x6b, 0xd8, 0x96, 0x7f, 0x0a, 0xc3, 0x2c, 0x32, 0x8c, 0x85, + 0xb2, 0xdb, 0x67, 0x10, 0x0f, 0x95, 0x0f, 0xbe, 0x25, 0xec, 0xd9, 0x23, + 0x56, 0x54, 0xb4, 0x04, 0x16, 0x8c, 0x92, 0x6c, 0xb1, 0x1b, 0xbf, 0xf3, + 0xf9, 0x0e, 0x55, 0xd6, 0x6c, 0x01, 0x60, 0x09, 0xc7, 0xb1, 0x1c, 0x47, + 0x54, 0x86, 0xe2, 0x8e, 0x17, 0x3b, 0xfe, 0x0d, 0x64, 0x59, 0x2b, 0xb7, + 0x5e, 0x0d, 0x08, 0x77, 0xcc, 0x8d, 0x94, 0xf5, 0xf5, 0x89, 0x33, 0xa1, + 0x57, 0x4c, 0x0e, 0x6f, 0xe8, 0xe8, 0x38, 0xd6, 0xd2, 0x2d, 0xf4, 0xbf, + 0x5d, 0x00, 0xf3, 0x4c, 0x7e, 0x51, 0xdd, 0x2d, 0x1d, 0x1d, 0x1e, 0x9a, + 0x6e, 0xcc, 0x6e, 0xff, 0xa7, 0x58, 0x1b, 0x4c, 0xb0, 0x32, 0xeb, 0xf8, + 0x1a, 0xcc, 0xf6, 0x77, 0xff, 0xd8, 0x10, 0xa7, 0xc3, 0x4d, 0xde, 0x5f, + 0xaa, 0x03, 0x63, 0xaa, 0xe0, 0xa1, 0x92, 0x9a, 0x17, 0xcb, 0xa6, 0x2a, + 0xed, 0x0e, 0x4d, 0x81, 0x71, 0x96, 0x9d, 0x95, 0x73, 0xe4, 0x26, 0x59, + 0xdc, 0xd6, 0x23, 0x68, 0x90, 0xc8, 0x32, 0x5a, 0xe6, 0x2e, 0xe1, 0x1d, + 0x36, 0xb3, 0xf8, 0x65, 0x06, 0x91, 0xf3, 0x77, 0xa0, 0x36, 0xf4, 0xf9, + 0x73, 0x4f, 0xfd, 0x41, 0xcd, 0xeb, 0x71, 0x07, 0x5e, 0x3f, 0xa0, 0x79, + 0x25, 0xae, 0xf7, 0xde, 0x16, 0xed, 0xd6, 0x70, 0xbd, 0xb8, 0xff, 0xa4, + 0xe7, 0x6f, 0xc9, 0x4f, 0x7f, 0x43, 0xd3, 0x2b, 0xcd, 0xb3, 0xf5, 0x4b, + 0xc1, 0x7b, 0x42, 0x0d, 0x20, 0x02, 0x39, 0x35, 0x0b, 0x49, 0x85, 0x63, + 0xd4, 0x60, 0xe7, 0xed, 0xc5, 0x82, 0xe3, 0x5e, 0x0d, 0x0a, 0x21, 0xa1, + 0xd6, 0x51, 0x4b, 0x24, 0xbc, 0x65, 0x2b, 0xe0, 0xa5, 0x42, 0xab, 0xe4, + 0x25, 0x12, 0xbd, 0x9d, 0xe1, 0xbc, 0xd8, 0xfe, 0x65, 0x70, 0x05, 0x1c, + 0x6c, 0xc1, 0x69, 0x91, 0x1c, 0x8a, 0x8d, 0xcc, 0xaf, 0xcf, 0x26, 0xe7, + 0xd2, 0x9b, 0x5b, 0x4c, 0x85, 0x46, 0x5a, 0xcb, 0x4d, 0x95, 0x91, 0x31, + 0x84, 0x7a, 0x0d, 0x53, 0x6f, 0x6f, 0x95, 0xb0, 0xa5, 0xd8, 0x02, 0x8b, + 0x99, 0x73, 0xbe, 0x4d, 0x21, 0x3d, 0x96, 0xc7, 0xfb, 0x0b, 0x2e, 0x56, + 0xd4, 0x7b, 0x2f, 0xba, 0x53, 0x38, 0x04, 0x8e, 0x47, 0xc5, 0x41, 0x3f, + 0x38, 0xc5, 0xcb, 0x98, 0xb1, 0x82, 0x4d, 0x37, 0x38, 0x0f, 0x16, 0x7c, + 0x8d, 0x2a, 0xd8, 0xd5, 0x4b, 0x44, 0x17, 0x91, 0x8e, 0xcb, 0x47, 0xc4, + 0x37, 0x1f, 0xdf, 0x34, 0x59, 0x90, 0x9e, 0x73, 0x6f, 0xb2, 0xdb, 0x79, + 0x25, 0x12, 0x61, 0x8f, 0xf7, 0x64, 0x2b, 0x97, 0x23, 0xa8, 0x9d, 0xd8, + 0xe1, 0x09, 0x57, 0x74, 0x01, 0x75, 0x5d, 0x1e, 0xe2, 0xb2, 0xda, 0x52, + 0xf4, 0x52, 0x30, 0xd9, 0xe0, 0x9e, 0xff, 0x13, 0xa1, 0xa1, 0x1d, 0x41, + 0x97, 0x23, 0x0d, 0xf6, 0x2e, 0x81, 0x21, 0x41, 0x88, 0x44, 0xaa, 0xd0, + 0x09, 0x26, 0x1f, 0x8b, 0xa8, 0x5d, 0xde, 0x23, 0x6c, 0xfc, 0x89, 0xf8, + 0xbc, 0x3c, 0x04, 0x2b, 0x5b, 0x99, 0x44, 0xf4, 0xae, 0x7a, 0x09, 0x93, + 0x77, 0xf7, 0x76, 0x4b, 0x0e, 0x6f, 0x1f, 0x62, 0x79, 0xf2, 0xfd, 0x6d, + 0x1d, 0xef, 0x88, 0x9e, 0x3d, 0xf6, 0xb1, 0x06, 0xc3, 0x17, 0x40, 0xd7, + 0x32, 0xf1, 0x60, 0xfd, 0x6f, 0xb6, 0x4c, 0x44, 0x3b, 0x3c, 0xbc, 0xc0, + 0xc5, 0x6d, 0xa1, 0xd1, 0x9f, 0xed, 0x9d, 0xff, 0xcc, 0xd9, 0xf2, 0xd7, + 0x3e, 0xe1, 0x3f, 0x04, 0xfc, 0x5b, 0xd9, 0xf5, 0x98, 0x9f, 0xf2, 0x41, + 0x7c, 0xbd, 0x4f, 0xfb, 0x02, 0xbc, 0x99, 0x2d, 0x67, 0x90, 0x96, 0xf7, + 0x76, 0x07, 0x18, 0x6d, 0x94, 0x7c, 0x3f, 0xd5, 0x43, 0x35, 0x26, 0x6c, + 0x5b, 0x88, 0x5b, 0xd8, 0x70, 0x34, 0x08, 0xf8, 0x3c, 0xfb, 0xcc, 0xd8, + 0xd8, 0x89, 0xee, 0xf4, 0x7f, 0x4b, 0x8d, 0x63, 0x95, 0x6a, 0x5d, 0xc6, + 0xab, 0x3b, 0xa5, 0xf2, 0x44, 0x55, 0xcb, 0x6a, 0x4a, 0xe1, 0xf7, 0x3b, + 0x85, 0x86, 0xe9, 0x1d, 0xfe, 0x6f, 0x59, 0x98, 0xd3, 0x7d, 0x71, 0x01, + 0x00, 0x95, 0x5b, 0x0a, 0x42, 0x85, 0xec, 0xa2, 0xa9, 0x4e, 0x61, 0x1a, + 0xcb, 0x0d, 0x98, 0xc2, 0x90, 0x0f, 0x36, 0x65, 0x77, 0x8c, 0x25, 0xce, + 0x12, 0xd3, 0x1d, 0x67, 0x0b, 0xee, 0x47, 0x08, 0xd2, 0xd2, 0xd0, 0x16, + 0x47, 0x04, 0x12, 0xa7, 0x8f, 0xd6, 0x63, 0x74, 0x8c, 0xbe, 0x4f, 0x50, + 0x5a, 0xf4, 0x66, 0xa5, 0x49, 0x16, 0x9a, 0x23, 0xde, 0x58, 0x76, 0x6e, + 0x2a, 0xca, 0x52, 0x60, 0x82, 0xd5, 0xc0, 0xcf, 0xc1, 0xcd, 0x3b, 0x91, + 0xd3, 0x0d, 0x69, 0x65, 0x54, 0x5a, 0xa9, 0xa2, 0xf7, 0x37, 0x9c, 0x69, + 0x38, 0xcb, 0x0b, 0xd2, 0x49, 0x29, 0x3a, 0xc6, 0x6f, 0x39, 0x89, 0x66, + 0xb0, 0x88, 0x3d, 0xef, 0x60, 0x9a, 0x17, 0x91, 0x08, 0xae, 0x61, 0x02, + 0xcb, 0x04, 0x78, 0xfa, 0x40, 0x55, 0xe7, 0xb0, 0xdb, 0xe2, 0x80, 0x4e, + 0x97, 0x6b, 0x32, 0xcf, 0xd7, 0x91, 0xb7, 0x2a, 0xce, 0x93, 0x9f, 0x29, + 0x20, 0xca, 0xa0, 0x7b, 0x2b, 0x6c, 0x98, 0x9e, 0x50, 0x32, 0x05, 0x3e, + 0x39, 0x12, 0x10, 0xcf, 0x28, 0x3f, 0x15, 0xb2, 0x85, 0xc1, 0x31, 0x6f, + 0x3c, 0xea, 0x9f, 0x72, 0x4a, 0xc7, 0xa4, 0x2c, 0x34, 0xa7, 0x1d, 0xf9, + 0x2f, 0x62, 0xde, 0x41, 0x60, 0x0c, 0xcf, 0x62, 0x16, 0x0a, 0x29, 0xbf, + 0xdd, 0xd1, 0xdd, 0xe5, 0xa7, 0x0d, 0x88, 0x42, 0x22, 0x22, 0xf3, 0x8e, + 0x8c, 0x09, 0x86, 0x75, 0xbc, 0x99, 0x77, 0xc4, 0x4c, 0x13, 0xfd, 0xca, + 0x44, 0x46, 0x36, 0x26, 0x13, 0xb1, 0x28, 0x40, 0xd6, 0x60, 0x82, 0xeb, + 0xce, 0x64, 0xd3, 0x95, 0x73, 0x64, 0xd9, 0x50, 0xfe, 0xcc, 0x96, 0x3d, + 0x8d, 0x41, 0x92, 0x97, 0xa4, 0x5b, 0x20, 0xdd, 0x3f, 0xe2, 0xed, 0xd2, + 0xbe, 0xcf, 0xf7, 0x16, 0xff, 0x8c, 0x9f, 0x2e, 0x8f, 0xd3, 0x9f, 0xaa, + 0x7f, 0xe7, 0xfa, 0xc1, 0xf5, 0xb5, 0x07, 0xce, 0xae, 0xc7, 0x28, 0xae, + 0xfc, 0x3f, 0x0f, 0x27, 0xfd, 0x5c, 0xec, 0xcd, 0xf8, 0x1e, 0x3d, 0xe3, + 0xf3, 0xd1, 0x39, 0x40, 0xe8, 0x46, 0x6e, 0x2d, 0x44, 0x67, 0xa8, 0x37, + 0x8a, 0xbd, 0x10, 0x67, 0x29, 0x30, 0xc7, 0xcd, 0x07, 0xe9, 0xcd, 0x87, + 0x05, 0xb5, 0x80, 0xcc, 0x2c, 0x3f, 0x1e, 0x8e, 0xe0, 0xbe, 0x79, 0x91, + 0x21, 0x4c, 0x75, 0x84, 0xa9, 0x27, 0xe9, 0x41, 0x98, 0x15, 0x5c, 0x14, + 0x12, 0x4a, 0x9f, 0x3a, 0x2d, 0xd0, 0xfc, 0x2b, 0x2e, 0x80, 0x66, 0x91, + 0x8b, 0xe0, 0x59, 0xcc, 0x8b, 0xc5, 0x27, 0x29, 0x8e, 0x59, 0x07, 0xef, + 0x8a, 0xd2, 0xb6, 0x76, 0x78, 0xe8, 0x67, 0x4a, 0x87, 0x09, 0x98, 0xeb, + 0xbd, 0xca, 0x44, 0x44, 0x93, 0x6f, 0x0e, 0x7c, 0x81, 0x0b, 0x3a, 0x59, + 0xcf, 0x8b, 0xc2, 0x22, 0x2f, 0x47, 0xb5, 0x06, 0xf4, 0x7e, 0x7f, 0x6a, + 0x57, 0x8e, 0x5a, 0x50, 0xe7, 0x74, 0x75, 0xa8, 0xd4, 0x14, 0xad, 0x5e, + 0xf9, 0xbb, 0x15, 0xaf, 0xeb, 0x4e, 0xdf, 0x08, 0xd1, 0x7f, 0xe0, 0x04, + 0xcf, 0x71, 0xd0, 0xa7, 0x6f, 0x59, 0x79, 0x61, 0xf4, 0xfa, 0xf5, 0xd1, + 0x85, 0x7f, 0x0f, 0xeb, 0x86, 0xee, 0x0d, 0x4c, 0xa2, 0xdb, 0x8e, 0x92, + 0xe1, 0x66, 0xb3, 0x65, 0x6c, 0x9c, 0x1c, 0xc3, 0x62, 0x1e, 0x1f, 0xbb, + 0xcc, 0x05, 0xf4, 0x18, 0x63, 0xf4, 0x1c, 0x20, 0x41, 0xa6, 0xdd, 0x4e, + 0x37, 0x0a, 0x8b, 0x4d, 0x08, 0xf9, 0x91, 0x18, 0x16, 0x1a, 0x5a, 0x66, + 0xcb, 0x10, 0xca, 0x0b, 0x45, 0x42, 0x40, 0xe5, 0x06, 0xab, 0x15, 0xfd, + 0x6e, 0x2c, 0x0a, 0x6e, 0xe0, 0xad, 0xc1, 0x33, 0x88, 0x59, 0x9d, 0x72, + 0xb8, 0xdd, 0x0e, 0x2a, 0xd6, 0xbc, 0x7b, 0x7e, 0xe9, 0x67, 0x4a, 0xc6, + 0xee, 0xcb, 0xec, 0xea, 0xcb, 0x09, 0x56, 0x20, 0x24, 0x8e, 0x13, 0x88, + 0x2d, 0xb8, 0x5e, 0x1e, 0x79, 0xf6, 0xff, 0x28, 0x91, 0x11, 0x23, 0x22, + 0x9b, 0x7a, 0x35, 0x52, 0x3a, 0x2d, 0xcb, 0x24, 0x9d, 0x8d, 0x28, 0xd7, + 0x01, 0x4f, 0x6e, 0x37, 0x7a, 0xf0, 0xd7, 0x5f, 0xbd, 0x34, 0xf0, 0x20, + 0xd4, 0xb9, 0x2e, 0xdd, 0xd8, 0x32, 0xc6, 0xf3, 0xde, 0x5d, 0x3b, 0x47, + 0xf8, 0x20, 0x1f, 0x6f, 0x2f, 0xad, 0x06, 0x9e, 0x00, 0xaf, 0xcb, 0x65, + 0xb7, 0xf7, 0x60, 0xa7, 0x13, 0xf7, 0x0c, 0x0f, 0x03, 0xdf, 0xdf, 0xa7, + 0xa1, 0x26, 0x67, 0x01, 0x81, 0x61, 0xfc, 0xf8, 0xb3, 0xe8, 0xe9, 0xbe, + 0x3e, 0xc8, 0xed, 0x16, 0x04, 0xf8, 0x76, 0x60, 0x80, 0x42, 0xbe, 0x14, + 0xf3, 0xd8, 0x89, 0x6d, 0x18, 0xd2, 0xc6, 0xee, 0x3b, 0x24, 0x30, 0xc3, + 0x08, 0xc7, 0x08, 0x01, 0x1e, 0xba, 0x18, 0x11, 0x77, 0xf9, 0x09, 0x42, + 0x75, 0xc3, 0x62, 0xd8, 0xa6, 0x9d, 0x5b, 0x60, 0x98, 0xf0, 0x5d, 0x03, + 0xcd, 0x2a, 0x00, 0x20, 0x75, 0x4c, 0x75, 0x82, 0xd1, 0xe5, 0xc5, 0xa8, + 0xef, 0xf9, 0x22, 0x63, 0x26, 0xa9, 0xb7, 0x97, 0x9d, 0xbe, 0xd3, 0x4e, + 0xcc, 0x62, 0xd8, 0xe8, 0x9c, 0xff, 0xc9, 0x59, 0xfa, 0x27, 0xee, 0xcf, + 0x4f, 0x1c, 0x9f, 0x53, 0x80, 0xf1, 0xa9, 0x92, 0x31, 0x9f, 0xbe, 0xb9, + 0xb9, 0xc5, 0x37, 0xb0, 0x82, 0x60, 0xe1, 0x94, 0x7e, 0x43, 0xa1, 0x50, + 0x98, 0x69, 0x1a, 0x63, 0xca, 0x3f, 0xfb, 0x14, 0x3e, 0xcc, 0x63, 0xbc, + 0x82, 0x20, 0x9b, 0xc2, 0x06, 0xcd, 0x31, 0x5c, 0x32, 0x63, 0xfb, 0xf7, + 0x75, 0x27, 0x63, 0x73, 0xeb, 0xfb, 0xaf, 0x9f, 0x79, 0x27, 0x50, 0x1c, + 0xfd, 0x03, 0x63, 0x27, 0x03, 0x93, 0x2d, 0x32, 0x80, 0x1d, 0x16, 0x39, + 0x3e, 0x2e, 0x16, 0xad, 0xa2, 0xcb, 0xff, 0xb8, 0x2d, 0x48, 0xf0, 0x55, + 0xc4, 0x1d, 0x46, 0xb0, 0x4a, 0x6d, 0x3a, 0xe3, 0xa2, 0xfb, 0xe8, 0x30, + 0xe6, 0xa6, 0x1e, 0x86, 0xb1, 0x59, 0x70, 0xe4, 0x7b, 0x26, 0x27, 0x90, + 0xdd, 0x1e, 0x7d, 0xb1, 0x4e, 0xd0, 0x20, 0x8f, 0x46, 0x7a, 0x83, 0xea, + 0x77, 0xef, 0x26, 0x52, 0x6e, 0xfd, 0xd4, 0xe4, 0x5f, 0x37, 0xf6, 0xf7, + 0x3f, 0x82, 0x15, 0x2d, 0x7e, 0xf2, 0x0f, 0xe5, 0x46, 0x71, 0xf2, 0xfb, + 0x92, 0x04, 0x53, 0xfc, 0x64, 0x7c, 0x65, 0x42, 0x6c, 0xd7, 0xbf, 0x45, + 0x11, 0x21, 0xc8, 0x9e, 0x99, 0x1f, 0x9f, 0x2c, 0x33, 0xc9, 0x92, 0x91, + 0x14, 0x93, 0xc2, 0xb9, 0xa9, 0x23, 0x49, 0xa1, 0x62, 0xe1, 0x91, 0x98, + 0xfe, 0xb5, 0x20, 0x3c, 0xcd, 0x48, 0x4f, 0x48, 0xb1, 0x74, 0x52, 0x4a, + 0xfc, 0x7e, 0x22, 0x1b, 0x93, 0x61, 0xdb, 0xb2, 0xea, 0x5f, 0x52, 0xd9, + 0x59, 0x15, 0x15, 0x62, 0x95, 0xe9, 0xd7, 0x35, 0x53, 0x53, 0x6c, 0x61, + 0xbe, 0x31, 0x8d, 0x56, 0x35, 0xa9, 0x42, 0x6d, 0x8e, 0x2f, 0xec, 0x95, + 0x57, 0x82, 0x06, 0x54, 0xff, 0x65, 0xac, 0x90, 0xfd, 0xa6, 0x2c, 0x65, + 0xd9, 0xd2, 0x9c, 0x64, 0x63, 0x6d, 0x5d, 0x84, 0x1a, 0xee, 0x83, 0xa6, + 0x94, 0x6e, 0x7a, 0xc5, 0x56, 0x28, 0xe7, 0xd7, 0x77, 0x50, 0x25, 0x36, + 0xe0, 0xca, 0x17, 0xbf, 0xfe, 0x67, 0xcb, 0x9a, 0xa5, 0xac, 0xae, 0x67, + 0xfc, 0xa2, 0x51, 0x97, 0xc3, 0xd5, 0xc9, 0x31, 0x54, 0xa4, 0x45, 0xa4, + 0xbd, 0x35, 0xfa, 0xae, 0x4d, 0x83, 0xbb, 0x66, 0x76, 0x9f, 0x5b, 0xe1, + 0x79, 0x14, 0xde, 0x1e, 0xd9, 0xb0, 0xe4, 0xd7, 0xa7, 0x7f, 0x49, 0x27, + 0xd2, 0xab, 0x02, 0xf7, 0x1f, 0x97, 0xbd, 0x76, 0x6d, 0xb6, 0x6f, 0xf2, + 0x6c, 0x71, 0x86, 0x14, 0x74, 0x67, 0x9c, 0x91, 0x5f, 0x7d, 0xe0, 0x96, + 0x42, 0x65, 0x5f, 0x9f, 0x78, 0xea, 0x74, 0x40, 0x0e, 0x3a, 0x29, 0x5d, + 0x8a, 0x56, 0xc8, 0x73, 0x4f, 0x18, 0x67, 0x51, 0x72, 0x5a, 0xe9, 0xf5, + 0xf0, 0x42, 0x69, 0x66, 0xfd, 0x80, 0x31, 0xd4, 0x3e, 0xb1, 0xc8, 0xfc, + 0xc6, 0xc5, 0xf9, 0x65, 0xd8, 0xdd, 0x97, 0xb8, 0xa6, 0x6d, 0xff, 0xfe, + 0xb6, 0x92, 0x6f, 0xee, 0x7a, 0x69, 0x4d, 0x7d, 0x7d, 0x39, 0x5f, 0x68, + 0x96, 0x22, 0x7a, 0x68, 0x72, 0xb0, 0xb9, 0xb0, 0x4d, 0x39, 0xf3, 0x7d, + 0xd1, 0x4a, 0x98, 0x19, 0x06, 0x75, 0x83, 0xc9, 0x77, 0xa6, 0x12, 0x92, + 0xfe, 0xa4, 0xfb, 0x53, 0x52, 0xc2, 0xd4, 0x9d, 0x41, 0x86, 0x4a, 0x68, + 0x4d, 0x69, 0x6c, 0x4d, 0x49, 0xa0, 0x26, 0xfd, 0xf6, 0xc0, 0x5c, 0xe8, + 0xb7, 0x24, 0x41, 0xd1, 0xa2, 0xbc, 0xa5, 0x92, 0x13, 0x05, 0x01, 0xe8, + 0x6c, 0xed, 0xdc, 0x9d, 0x3b, 0x8a, 0xdf, 0x7e, 0x83, 0x45, 0x17, 0xd6, + 0xd4, 0x48, 0xae, 0x5b, 0x2c, 0x5b, 0x46, 0x39, 0xc4, 0x7d, 0xda, 0xf1, + 0xe5, 0xf7, 0x26, 0x93, 0xf9, 0xbf, 0x26, 0x77, 0xfe, 0xe9, 0x83, 0x7a, + 0x2f, 0x36, 0x69, 0xfa, 0x8a, 0x8f, 0x94, 0x3c, 0x52, 0x04, 0xd6, 0x39, + 0x05, 0xe7, 0xfe, 0xf9, 0x10, 0x2f, 0xed, 0x1a, 0xc8, 0xde, 0xac, 0xd9, + 0x75, 0x5a, 0xc9, 0xd5, 0x8c, 0xae, 0xf4, 0x39, 0xef, 0xc8, 0xc9, 0x97, + 0x08, 0xc5, 0x21, 0x15, 0x2d, 0xf7, 0xcc, 0xdc, 0xf2, 0x75, 0xf8, 0x1e, + 0x78, 0x17, 0xf4, 0xa0, 0x7b, 0xdc, 0xd2, 0x31, 0xa9, 0x20, 0x3d, 0x21, + 0xf5, 0x80, 0x13, 0x18, 0xc0, 0xad, 0x6b, 0xdd, 0xf7, 0x70, 0xe3, 0x68, + 0x92, 0x9d, 0x48, 0xc0, 0xa6, 0xc8, 0x0c, 0xa1, 0x1d, 0xc9, 0x52, 0x93, + 0x34, 0xd9, 0x21, 0x7d, 0x21, 0xa9, 0x43, 0x9a, 0xb1, 0x43, 0x20, 0x95, + 0xeb, 0x1e, 0x00, 0x6d, 0x0a, 0xc5, 0x5d, 0x3d, 0xca, 0xc5, 0xf1, 0xc6, + 0x55, 0xbe, 0xd4, 0x59, 0x2a, 0x96, 0x5e, 0x28, 0x5d, 0xc0, 0xa5, 0x33, + 0x8b, 0xb0, 0xa5, 0xb2, 0x1e, 0xed, 0xa9, 0xa8, 0x70, 0x71, 0x63, 0xae, + 0x22, 0xd7, 0x40, 0xbc, 0xa8, 0xb1, 0x22, 0x17, 0x9f, 0xe9, 0x3e, 0x83, + 0x73, 0x61, 0x6e, 0xd0, 0xb9, 0xd3, 0x8e, 0x6b, 0x9e, 0x2e, 0xf6, 0xb2, + 0x98, 0x10, 0xb2, 0xee, 0x92, 0x29, 0x37, 0x55, 0x3f, 0x57, 0xf3, 0xa7, + 0x8a, 0x18, 0x50, 0x74, 0x08, 0x9c, 0x7b, 0x34, 0x8d, 0xb1, 0x9b, 0x75, + 0x63, 0x4c, 0x27, 0xc6, 0x4c, 0x3e, 0xd1, 0x50, 0x8d, 0xe8, 0x64, 0x8c, + 0x9d, 0x8c, 0x71, 0x95, 0x0c, 0x14, 0xb4, 0x3a, 0xcc, 0x4c, 0x23, 0x3b, + 0x4c, 0x10, 0x13, 0x32, 0x13, 0x6a, 0xa1, 0xb1, 0xe9, 0x25, 0xb4, 0x8f, + 0xe1, 0x2a, 0xf9, 0x4f, 0x13, 0xe0, 0x0d, 0x59, 0x06, 0xc5, 0x4b, 0xe7, + 0x10, 0xa5, 0xc0, 0x38, 0xd6, 0xb3, 0xa3, 0x0e, 0x2a, 0xc8, 0xd4, 0x58, + 0x13, 0x9a, 0x29, 0x28, 0xc8, 0xab, 0x8c, 0x89, 0x2e, 0x2b, 0x1b, 0xb2, + 0x0d, 0x92, 0x0f, 0x1b, 0xae, 0x02, 0x36, 0xd1, 0x4f, 0x69, 0xfd, 0x91, + 0x94, 0x1b, 0xb9, 0xa9, 0xbe, 0xd4, 0x48, 0x41, 0x32, 0xff, 0x0a, 0x61, + 0xd4, 0x23, 0xcb, 0x13, 0xac, 0x64, 0x4c, 0x54, 0xd9, 0xf4, 0xe0, 0x33, + 0xc5, 0xcb, 0x49, 0x26, 0x64, 0x92, 0xd3, 0xfe, 0xc1, 0xe9, 0xb2, 0x28, + 0x23, 0x1c, 0x06, 0x43, 0x4a, 0xc8, 0x44, 0x12, 0x9c, 0x20, 0x5c, 0x5a, + 0xf6, 0x29, 0x49, 0x24, 0x7f, 0x8b, 0xcf, 0x2e, 0xe4, 0x46, 0x31, 0x69, + 0x32, 0x08, 0x62, 0x08, 0xfe, 0x0a, 0x21, 0xc2, 0x2e, 0xd2, 0x3a, 0x41, + 0xc7, 0x13, 0x5f, 0xed, 0xac, 0xc1, 0x57, 0xff, 0x12, 0x2c, 0x76, 0x35, + 0xfc, 0x6c, 0x28, 0x4b, 0x4f, 0x53, 0xd5, 0x9e, 0x5a, 0xb9, 0x2c, 0x95, + 0x48, 0xe0, 0xac, 0x5c, 0x73, 0x48, 0x9c, 0x31, 0x17, 0xfe, 0xe2, 0x6f, + 0xfe, 0x38, 0x49, 0x21, 0x3a, 0x9c, 0xb0, 0x98, 0xcf, 0x9c, 0x01, 0xd1, + 0x22, 0xc7, 0x12, 0xbf, 0x5b, 0xb4, 0x8a, 0x56, 0xf7, 0xe3, 0x54, 0x5c, + 0x17, 0x48, 0x03, 0x9f, 0x47, 0xd6, 0xa6, 0x08, 0x3c, 0x67, 0x9a, 0x38, + 0xf6, 0x10, 0x0c, 0xe9, 0x44, 0xb6, 0x5b, 0xe6, 0x0e, 0x1c, 0xfc, 0xee, + 0xeb, 0x2f, 0x2d, 0x20, 0xff, 0xe7, 0x50, 0xe9, 0xff, 0x2d, 0xdf, 0x3e, + 0xf3, 0x8c, 0x38, 0x79, 0x1f, 0x26, 0xb2, 0x11, 0x99, 0x27, 0xea, 0x6f, + 0xf0, 0x5a, 0x69, 0x6c, 0xe7, 0xd0, 0x90, 0x8a, 0xd4, 0x67, 0x4a, 0x82, + 0x38, 0x79, 0x5b, 0xa5, 0xb2, 0x11, 0x59, 0xe4, 0x4c, 0x31, 0x96, 0x82, + 0xbd, 0xd3, 0xfb, 0xd4, 0x53, 0xc3, 0xc3, 0x93, 0xd0, 0xe7, 0x8d, 0xdd, + 0x0e, 0xee, 0xdc, 0xb6, 0x7d, 0xfb, 0xda, 0xd6, 0x94, 0xb6, 0xb5, 0x95, + 0x9e, 0x1b, 0xbf, 0x74, 0x69, 0xbc, 0x64, 0xc7, 0xc9, 0x93, 0x3b, 0xbe, + 0x8e, 0x12, 0x33, 0x26, 0x33, 0xc4, 0x28, 0xb9, 0x08, 0x7b, 0xbd, 0x3e, + 0xb5, 0x8a, 0xf6, 0xbd, 0xbc, 0x7f, 0x7f, 0x9b, 0x4a, 0xed, 0x54, 0xa5, + 0xf3, 0xfe, 0x36, 0xdf, 0xea, 0x60, 0x9d, 0x2a, 0x5c, 0x4f, 0x23, 0x39, + 0x5c, 0xc7, 0xcb, 0xef, 0x4b, 0x9b, 0x6c, 0xc8, 0xd6, 0xf6, 0xb2, 0xe3, + 0xfb, 0xbb, 0xe3, 0xde, 0x8a, 0xac, 0xa8, 0xf6, 0xa6, 0x10, 0x7d, 0x77, + 0x43, 0x45, 0x69, 0x3b, 0x11, 0xe3, 0x3d, 0x1e, 0x31, 0x4d, 0xaf, 0xe7, + 0x80, 0xae, 0xd8, 0x98, 0xa7, 0xf3, 0x65, 0x75, 0xae, 0xcb, 0xf1, 0x8d, + 0xbd, 0x53, 0x0c, 0x97, 0x3b, 0xef, 0xc0, 0x40, 0x54, 0xcf, 0xf5, 0x54, + 0x20, 0xb2, 0x30, 0xcf, 0xea, 0x04, 0x1d, 0x68, 0x87, 0x45, 0xcc, 0x4c, + 0xfb, 0x43, 0xfb, 0xe5, 0xa5, 0x99, 0x72, 0x8a, 0xdd, 0x8c, 0xec, 0x35, + 0x9c, 0x44, 0xe7, 0xdc, 0xaf, 0x8b, 0x07, 0xaa, 0x58, 0x79, 0xf2, 0x25, + 0xa5, 0xce, 0xa7, 0x5b, 0x42, 0xae, 0x87, 0x14, 0x0a, 0x45, 0xa8, 0xc2, + 0xd9, 0x29, 0x7e, 0xc3, 0x31, 0x53, 0x0a, 0xb5, 0x65, 0xfe, 0xc3, 0x59, + 0x87, 0xfd, 0x33, 0x73, 0x8d, 0x17, 0x45, 0x38, 0xee, 0x58, 0x58, 0xb4, + 0xcc, 0xe1, 0x7d, 0xd5, 0x7b, 0x41, 0xf3, 0x88, 0xa6, 0xbf, 0x88, 0x30, + 0x0c, 0x9c, 0x59, 0x6b, 0x7e, 0x61, 0x36, 0x79, 0xbc, 0x67, 0x3c, 0x79, + 0xf6, 0xd9, 0xf5, 0xaf, 0x77, 0x92, 0x13, 0xe5, 0x4a, 0x4d, 0x64, 0x1e, + 0x94, 0xed, 0x19, 0x90, 0xdf, 0xb2, 0x41, 0xc0, 0xaa, 0x10, 0xba, 0x08, + 0x2f, 0xdc, 0x2c, 0x08, 0x48, 0x10, 0x5a, 0xbf, 0xcd, 0x07, 0x5d, 0xa6, + 0x76, 0x50, 0x5a, 0x28, 0x1d, 0xd4, 0x66, 0x4a, 0x07, 0x2f, 0xaa, 0xec, + 0xd7, 0xfe, 0x20, 0x40, 0x26, 0xb1, 0x18, 0xc8, 0x4c, 0x9e, 0xf6, 0x62, + 0x9a, 0xad, 0xda, 0xea, 0x7a, 0x73, 0xc6, 0x4f, 0xc8, 0x58, 0xf3, 0x0b, + 0xd3, 0x4f, 0xeb, 0xe9, 0x28, 0xef, 0xa3, 0xc4, 0x2d, 0x9f, 0x7a, 0xcb, + 0x19, 0xe5, 0x8d, 0x42, 0xf0, 0x56, 0x98, 0x3c, 0xb2, 0x2d, 0x77, 0x73, + 0x83, 0x5b, 0x10, 0x01, 0x07, 0xe6, 0xfe, 0xa9, 0x2f, 0x65, 0xd6, 0x50, + 0x02, 0xf5, 0x78, 0x6e, 0x03, 0x8a, 0xdd, 0xa2, 0xf5, 0x27, 0x01, 0x88, + 0x88, 0x65, 0xeb, 0xf2, 0xf3, 0x0f, 0xeb, 0xce, 0xb2, 0xc3, 0xdd, 0xbc, + 0xf0, 0x74, 0x6b, 0xc6, 0x82, 0xac, 0xf6, 0xf9, 0xb1, 0x70, 0x1f, 0xa5, + 0xe9, 0x21, 0x77, 0xca, 0xe0, 0xa0, 0x19, 0xb3, 0xd8, 0x8c, 0x1e, 0x7e, + 0x3c, 0x32, 0x04, 0x7e, 0x3c, 0x84, 0xbd, 0xad, 0x3d, 0xf3, 0xc3, 0x9c, + 0x02, 0xf4, 0xb2, 0xa5, 0x96, 0xfd, 0x5e, 0xe5, 0xaf, 0x35, 0xed, 0xb5, + 0xc2, 0xde, 0x5c, 0x87, 0x40, 0x52, 0xb4, 0xfc, 0x93, 0x9d, 0x2f, 0xf2, + 0xe0, 0x27, 0x72, 0x10, 0xf7, 0x32, 0x6f, 0x78, 0xdd, 0x37, 0xb7, 0x6f, + 0xbf, 0xb3, 0x55, 0xcc, 0xe0, 0xd7, 0xdf, 0xdb, 0xfc, 0x10, 0xa3, 0xc9, + 0x69, 0x0d, 0xef, 0x76, 0x5f, 0x20, 0x8b, 0x17, 0xf1, 0x82, 0x9b, 0x06, + 0xc3, 0xa5, 0xe2, 0x84, 0xa7, 0xf5, 0xca, 0x30, 0xd8, 0x1a, 0xaf, 0xec, + 0x69, 0xca, 0xee, 0x10, 0x55, 0x66, 0x85, 0x42, 0x71, 0xff, 0x39, 0xcd, + 0x89, 0x94, 0x13, 0x30, 0x63, 0x7f, 0xd8, 0x2f, 0xb4, 0x5b, 0x12, 0x48, + 0xc1, 0x64, 0x76, 0xbb, 0x74, 0xab, 0xfc, 0xcf, 0x60, 0x78, 0xdf, 0x2b, + 0xff, 0x41, 0x2a, 0xfd, 0xe1, 0x6c, 0x49, 0x20, 0xc7, 0x22, 0xda, 0x43, + 0x23, 0xf6, 0x49, 0xfe, 0x39, 0x7b, 0x16, 0x1f, 0x8a, 0x6e, 0x96, 0xb2, + 0xa0, 0x28, 0x5b, 0xbe, 0xbd, 0xe7, 0x57, 0xf4, 0x6b, 0x0f, 0x34, 0x54, + 0x0e, 0x34, 0x34, 0x0c, 0x10, 0x19, 0x91, 0xd2, 0x16, 0xfc, 0x8d, 0x9b, + 0x37, 0x1b, 0x1a, 0x0a, 0x1a, 0x41, 0xe2, 0x99, 0x2d, 0x67, 0x06, 0x74, + 0xec, 0xd0, 0x52, 0xb7, 0x19, 0x48, 0xb9, 0x63, 0x8b, 0x67, 0xb7, 0xd3, + 0x4b, 0x50, 0x0c, 0x18, 0x11, 0x18, 0x6b, 0x17, 0xb0, 0x60, 0x9f, 0xc7, + 0x2c, 0x86, 0x4b, 0x71, 0xb7, 0x7b, 0x62, 0xcf, 0x6e, 0x07, 0xb2, 0xcd, + 0x82, 0x38, 0x56, 0x94, 0x5f, 0x4b, 0x59, 0xa7, 0x08, 0xe7, 0x4c, 0x8a, + 0x38, 0x6b, 0xf3, 0xe9, 0xcf, 0x4c, 0xca, 0xe6, 0xab, 0xff, 0xad, 0x78, + 0x7c, 0x44, 0x54, 0x45, 0x65, 0xaa, 0x12, 0xcf, 0xbf, 0xfe, 0x87, 0xc6, + 0xaa, 0x15, 0xc8, 0xa8, 0xe2, 0x0f, 0xff, 0x5b, 0x8d, 0x0e, 0x27, 0xe9, + 0xf5, 0x05, 0xcb, 0x3d, 0x86, 0x92, 0xe2, 0x87, 0xe3, 0x92, 0x8a, 0xab, + 0xac, 0x41, 0xa4, 0x80, 0x94, 0xf9, 0x90, 0x78, 0xc7, 0xea, 0x65, 0x37, + 0x8b, 0x9e, 0x46, 0xaa, 0x94, 0xc8, 0x7d, 0xe8, 0x6f, 0xdf, 0x83, 0x36, + 0x7f, 0x48, 0x04, 0xf2, 0x6e, 0xec, 0x66, 0x9f, 0x0d, 0x63, 0xbf, 0x14, + 0x00, 0xad, 0xfa, 0x64, 0xbb, 0x65, 0x08, 0xcb, 0x02, 0x80, 0xee, 0x7a, + 0xdb, 0x75, 0x1d, 0xab, 0x65, 0xe3, 0x06, 0x0a, 0x07, 0xe2, 0x42, 0xbe, + 0x95, 0x47, 0x22, 0x0a, 0x30, 0x3b, 0x05, 0xd9, 0x62, 0xcf, 0xe1, 0x9a, + 0xf7, 0xe8, 0x42, 0x16, 0x9d, 0x64, 0xa9, 0x9d, 0x9d, 0xad, 0xab, 0xfd, + 0xb5, 0x34, 0x7f, 0x7d, 0xc5, 0x3f, 0x55, 0x54, 0xc5, 0x20, 0xa9, 0x21, + 0x40, 0x11, 0x21, 0x24, 0x89, 0x6f, 0xb2, 0x07, 0xc9, 0x24, 0x70, 0x35, + 0xd6, 0x72, 0x0f, 0xf2, 0x40, 0xb0, 0x1b, 0x23, 0xf2, 0xcb, 0xa5, 0x1d, + 0xb5, 0x9b, 0x4f, 0xb6, 0xda, 0x6d, 0x3d, 0xd0, 0x57, 0x06, 0x6f, 0x70, + 0xa2, 0x70, 0x44, 0xcf, 0x97, 0xb3, 0x82, 0x3b, 0x71, 0xe8, 0xda, 0x81, + 0x8d, 0x2c, 0xd5, 0xbf, 0x7c, 0xa0, 0xf5, 0x38, 0xb0, 0x96, 0xb8, 0xc9, + 0xde, 0x79, 0x93, 0xf8, 0x28, 0x31, 0x8b, 0x61, 0x40, 0x43, 0x22, 0xde, + 0x0a, 0xb6, 0x4b, 0x14, 0x3d, 0x61, 0xe4, 0xd7, 0x52, 0xa6, 0x65, 0x0e, + 0x9c, 0x08, 0xf9, 0x22, 0xe9, 0xa4, 0x44, 0x44, 0x18, 0xcd, 0xab, 0x33, + 0x63, 0xf8, 0x10, 0x9e, 0x43, 0x98, 0x10, 0x95, 0x69, 0x99, 0x9d, 0xce, + 0xa3, 0xd3, 0x36, 0xb1, 0x53, 0xeb, 0xc7, 0x3c, 0x20, 0x43, 0xd3, 0x51, + 0x0a, 0x5e, 0x58, 0x6a, 0x40, 0x9c, 0x76, 0xb8, 0x5c, 0x60, 0xe5, 0xa0, + 0x4d, 0x2c, 0x37, 0x16, 0xe6, 0xc3, 0x0d, 0xd2, 0xb9, 0xc6, 0xb5, 0xa9, + 0xa5, 0xba, 0xbe, 0x45, 0xb5, 0x4b, 0xe8, 0x4a, 0xdf, 0x6f, 0x27, 0xd0, + 0xe7, 0x45, 0x8a, 0xf1, 0xdd, 0x45, 0x14, 0x15, 0xaa, 0xa5, 0x91, 0xb2, + 0x55, 0xa5, 0xbf, 0xd6, 0xd5, 0xce, 0xce, 0x5a, 0x6a, 0x7f, 0x80, 0x9e, + 0xd5, 0x99, 0x9b, 0xa9, 0x8c, 0xcd, 0x54, 0x26, 0xbf, 0x7b, 0xab, 0x6a, + 0xee, 0x2d, 0x6f, 0xe2, 0xf7, 0xfc, 0x84, 0x87, 0xf4, 0x66, 0x70, 0x86, + 0x21, 0x27, 0x44, 0x34, 0x4b, 0x5b, 0x39, 0xe6, 0x23, 0x1d, 0x54, 0x22, + 0x49, 0x9d, 0x3b, 0x6a, 0x86, 0xe8, 0x8f, 0x1e, 0x97, 0x84, 0xd0, 0x61, + 0x47, 0x08, 0x67, 0xdb, 0xa5, 0x88, 0xc5, 0xea, 0x89, 0x3f, 0x87, 0xf1, + 0xfb, 0x43, 0x50, 0xf8, 0xcb, 0x4e, 0x26, 0x43, 0xbc, 0xa5, 0x37, 0xef, + 0x85, 0x6f, 0xf2, 0x1a, 0xa3, 0x65, 0x4b, 0x24, 0xe9, 0x09, 0x69, 0x56, + 0x1a, 0x4f, 0xe9, 0xe0, 0xfc, 0x52, 0x3e, 0x2d, 0xeb, 0x62, 0xc8, 0xaa, + 0x99, 0x94, 0xda, 0xfc, 0x21, 0x62, 0xf3, 0x6c, 0x96, 0xa7, 0x11, 0x2d, + 0x05, 0x43, 0x08, 0x4c, 0xb6, 0x92, 0x10, 0x51, 0xee, 0xb6, 0xe8, 0x59, + 0x05, 0xf3, 0x1f, 0x33, 0xa2, 0x17, 0xe8, 0x40, 0x0e, 0x81, 0x60, 0x02, + 0x66, 0xc7, 0xce, 0xc6, 0xc6, 0xd5, 0x16, 0x64, 0xc9, 0x18, 0x69, 0x1c, + 0xc9, 0x08, 0x15, 0xcf, 0xf8, 0x71, 0xa8, 0xc3, 0xf1, 0x67, 0xfa, 0xe4, + 0xf4, 0xe6, 0xf3, 0x10, 0x89, 0x80, 0x41, 0xb0, 0x99, 0x6d, 0x82, 0xd0, + 0xe1, 0x14, 0xdc, 0x13, 0x35, 0x36, 0x07, 0xb2, 0x89, 0x60, 0x9e, 0x16, + 0xfb, 0xfa, 0x44, 0xc2, 0xa4, 0xa6, 0xfe, 0xb3, 0x08, 0x45, 0xb6, 0x54, + 0xca, 0x63, 0xe3, 0xc4, 0x78, 0x21, 0x5d, 0x62, 0xfb, 0x85, 0x1f, 0xeb, + 0xd0, 0xb2, 0x2d, 0xee, 0x64, 0x97, 0x57, 0xf6, 0xa4, 0xcf, 0xf8, 0x5a, + 0x74, 0x71, 0x0c, 0x5a, 0x1e, 0x14, 0x91, 0x9c, 0xef, 0xdb, 0xc4, 0xda, + 0x3a, 0x4d, 0xd2, 0x44, 0x53, 0x57, 0x2b, 0x5e, 0xd8, 0x26, 0x6f, 0x6a, + 0x1a, 0xb8, 0x28, 0x1e, 0x78, 0xf4, 0xb8, 0x01, 0xf4, 0x7f, 0x87, 0xbd, + 0xaf, 0x89, 0xc6, 0x79, 0x87, 0x3f, 0x44, 0xbc, 0x0b, 0x3b, 0xa8, 0xe8, + 0x77, 0xc4, 0x14, 0x02, 0x0a, 0xb4, 0xdd, 0x60, 0xb4, 0x75, 0xc9, 0x79, + 0x1a, 0x57, 0x7e, 0x61, 0x43, 0x49, 0xe9, 0xe6, 0x16, 0xc7, 0xba, 0x6c, + 0xd8, 0xc6, 0x35, 0x00, 0x23, 0x43, 0x83, 0x83, 0x0d, 0x3c, 0xef, 0x26, + 0x20, 0x9c, 0xab, 0xe1, 0x7a, 0x29, 0xef, 0x28, 0xab, 0xa9, 0xf1, 0xce, + 0x6c, 0xde, 0xe2, 0x7d, 0x2f, 0xc3, 0x94, 0x64, 0xd2, 0x98, 0x64, 0x26, + 0xfe, 0x09, 0xff, 0x2c, 0x4e, 0x1b, 0xcc, 0x2a, 0x8c, 0x94, 0x83, 0x0e, + 0x1f, 0x2a, 0x82, 0xe9, 0x36, 0x19, 0x56, 0x22, 0x23, 0xa3, 0x87, 0x7d, + 0xa7, 0x75, 0x53, 0xcb, 0x6f, 0x22, 0x2c, 0xfe, 0x9b, 0xac, 0x66, 0xf3, + 0x3d, 0x01, 0x33, 0xac, 0x6c, 0x54, 0x86, 0xb9, 0x72, 0xf6, 0x7e, 0xd9, + 0x14, 0xee, 0x40, 0x66, 0xed, 0x14, 0xdc, 0xd5, 0xa3, 0x48, 0xb2, 0x2f, + 0x0a, 0x25, 0x48, 0x9e, 0x90, 0xca, 0x9e, 0x90, 0x14, 0x2d, 0x1b, 0x64, + 0xd2, 0x81, 0x04, 0x14, 0xb5, 0x4f, 0x72, 0xb6, 0x29, 0x63, 0xdf, 0x81, + 0xf5, 0xb5, 0xb4, 0x25, 0x86, 0x56, 0x7a, 0x52, 0x53, 0xe6, 0xb9, 0xaf, + 0x7e, 0xb3, 0xe5, 0x83, 0x27, 0xd7, 0x16, 0xe6, 0x96, 0x6d, 0xcc, 0x2d, + 0xcc, 0xbd, 0x6a, 0xe0, 0xbb, 0x70, 0xf4, 0x01, 0xef, 0x96, 0xad, 0x17, + 0xbd, 0xba, 0xb3, 0x0f, 0x41, 0xf3, 0x48, 0xe8, 0xd7, 0x3f, 0xf5, 0xa2, + 0x95, 0x56, 0x67, 0x5b, 0x5e, 0x19, 0xef, 0x98, 0x56, 0xce, 0xf0, 0xdf, + 0x10, 0x30, 0xd0, 0x2c, 0xbd, 0xe8, 0xc0, 0x02, 0x5e, 0xf4, 0x77, 0x3c, + 0x21, 0x2d, 0x8b, 0xb1, 0xfc, 0x4b, 0xfa, 0x46, 0x24, 0x62, 0x5f, 0x44, + 0xff, 0x65, 0x89, 0x29, 0x93, 0x9e, 0x90, 0xc0, 0x5b, 0x0e, 0x0c, 0xd7, + 0xc1, 0x62, 0x57, 0x94, 0xdb, 0x99, 0xdc, 0x3b, 0x7d, 0xc5, 0x42, 0x79, + 0xcf, 0x27, 0x56, 0xd5, 0xe4, 0x4a, 0x70, 0x2d, 0xaa, 0x6c, 0x12, 0x8d, + 0xaf, 0xc4, 0xee, 0x60, 0xf2, 0x82, 0x93, 0x66, 0x0b, 0x65, 0x1b, 0x7a, + 0x1a, 0xa9, 0xbb, 0xb1, 0xca, 0xff, 0x40, 0xe8, 0x69, 0x71, 0x41, 0x8a, + 0xcb, 0xef, 0x5a, 0xf5, 0xdb, 0xb6, 0x0a, 0x21, 0x87, 0xda, 0xa8, 0xe6, + 0x83, 0xb6, 0xdc, 0x1c, 0x76, 0xc6, 0x22, 0x8d, 0xf1, 0xab, 0xca, 0x3e, + 0x24, 0x36, 0x34, 0x88, 0x7b, 0xf7, 0x34, 0x9c, 0x51, 0x9b, 0xe5, 0x35, + 0x72, 0xf5, 0xa9, 0xa1, 0xe9, 0x02, 0x74, 0x4f, 0x03, 0xa7, 0x14, 0x39, + 0x54, 0x21, 0x7f, 0xee, 0xb9, 0xfa, 0x70, 0xa1, 0x86, 0x26, 0x1c, 0x78, + 0x16, 0x0b, 0x86, 0xce, 0xdb, 0xd3, 0xdc, 0x50, 0xe6, 0xd8, 0x12, 0x25, + 0x07, 0x3a, 0xd8, 0x90, 0x0d, 0x2f, 0x69, 0xd0, 0x83, 0xc2, 0x40, 0xdb, + 0x2a, 0x06, 0x9b, 0xb1, 0x1d, 0x42, 0x58, 0x18, 0xb4, 0x4d, 0x16, 0xb3, + 0x08, 0xa2, 0x63, 0x4e, 0xe1, 0x61, 0x3a, 0x64, 0xcf, 0x8d, 0x73, 0x47, + 0xe8, 0x2e, 0xce, 0x48, 0x5e, 0xfc, 0x1f, 0x1f, 0x26, 0x4b, 0xb0, 0x9a, + 0x92, 0xfe, 0xfe, 0x54, 0x8e, 0xe5, 0xe7, 0x47, 0x6b, 0x24, 0xd2, 0x88, + 0x78, 0xe3, 0x0c, 0xed, 0x06, 0x6d, 0xe1, 0xd1, 0xd7, 0x3e, 0xb5, 0xbb, + 0x69, 0x45, 0xf0, 0xfc, 0x35, 0x9d, 0x76, 0xd8, 0x9e, 0xdd, 0xd4, 0xd3, + 0x1b, 0x36, 0xdc, 0xcb, 0xf9, 0x70, 0x15, 0x3e, 0x4d, 0x01, 0x19, 0x51, + 0x9c, 0xca, 0xec, 0xcc, 0xed, 0xe2, 0xe6, 0xa7, 0x96, 0x06, 0x3d, 0x63, + 0x64, 0xf7, 0x53, 0xde, 0x95, 0x2b, 0xbd, 0xd0, 0xaf, 0xef, 0xfb, 0x82, + 0x07, 0x1e, 0x70, 0xad, 0xa8, 0xdc, 0x6a, 0xa3, 0x9a, 0x87, 0xd1, 0xb4, + 0x57, 0x06, 0x9d, 0x3b, 0xf8, 0x9b, 0x96, 0x9c, 0xf5, 0xd5, 0xde, 0xaf, + 0xd7, 0x94, 0x2c, 0xab, 0xf2, 0x6d, 0xab, 0x21, 0x04, 0x56, 0x1c, 0x1b, + 0x7b, 0x02, 0x2e, 0x66, 0xad, 0xd1, 0x85, 0x5c, 0x91, 0x76, 0xc1, 0x38, + 0xb6, 0xa3, 0xd2, 0x54, 0xa9, 0x8a, 0x08, 0x0b, 0x2f, 0x4b, 0x9f, 0xe3, + 0xef, 0xbc, 0x11, 0x53, 0xc7, 0x31, 0xf8, 0xc6, 0x91, 0x44, 0x4c, 0xf5, + 0x34, 0xc1, 0x85, 0x7e, 0xcf, 0x05, 0xed, 0x2b, 0x31, 0x1f, 0x0a, 0xc8, + 0x30, 0x59, 0x9a, 0xab, 0x3c, 0xc7, 0x40, 0xd0, 0xf8, 0x9a, 0x93, 0xf8, + 0xde, 0xb1, 0x18, 0x12, 0x2a, 0xd4, 0x69, 0xdb, 0x0d, 0xec, 0x66, 0xb3, + 0x7b, 0xb9, 0x96, 0xad, 0xbb, 0x1b, 0x83, 0x64, 0x11, 0x35, 0x2d, 0xab, + 0x4a, 0x59, 0xb6, 0x79, 0xd3, 0xc0, 0xe7, 0x39, 0x2d, 0x39, 0x8a, 0xed, + 0x8f, 0x2b, 0xa9, 0x7b, 0x00, 0x9a, 0x26, 0x22, 0x7a, 0x79, 0x36, 0x41, + 0xc8, 0xd0, 0xe8, 0xdd, 0x60, 0x13, 0xde, 0xf2, 0x8a, 0xd7, 0xff, 0xf0, + 0x46, 0xd8, 0x87, 0x28, 0xfb, 0xf9, 0x84, 0x1b, 0x3a, 0x2d, 0x7a, 0xb7, + 0x0a, 0x08, 0x34, 0x41, 0x26, 0x38, 0x57, 0xf0, 0x0c, 0xe2, 0x46, 0x2e, + 0x22, 0x02, 0x32, 0x17, 0x0a, 0xae, 0x22, 0x94, 0xf8, 0xa6, 0x87, 0xc6, + 0x0c, 0x52, 0x69, 0x8f, 0x80, 0x81, 0x44, 0x65, 0x35, 0xb4, 0x8c, 0xc6, + 0x35, 0x88, 0x16, 0x91, 0xdc, 0x85, 0xc2, 0x0a, 0x5f, 0x25, 0x07, 0x89, + 0xd2, 0xb1, 0xe0, 0x2d, 0x58, 0xe5, 0xe8, 0xf7, 0xe8, 0x96, 0x66, 0x1d, + 0xd2, 0x6d, 0xed, 0xed, 0xfd, 0x61, 0xf1, 0xfd, 0x30, 0x79, 0x6b, 0xc2, + 0xfc, 0x02, 0xc4, 0x39, 0x41, 0xc5, 0x8b, 0xa0, 0xef, 0xe2, 0x8f, 0x3e, + 0x9a, 0x95, 0x53, 0x38, 0x4b, 0x82, 0x2a, 0x0b, 0x36, 0x92, 0xf2, 0xf3, + 0x66, 0xde, 0xed, 0x2f, 0x36, 0xa0, 0x98, 0xfa, 0xba, 0xb9, 0x37, 0xa4, + 0x4d, 0xff, 0xf7, 0x73, 0x22, 0xc3, 0x67, 0x76, 0xa2, 0xe8, 0xbf, 0x6d, + 0x2c, 0x39, 0x51, 0xc3, 0xb3, 0xc8, 0x60, 0xea, 0x97, 0x41, 0x1a, 0xea, + 0x16, 0x61, 0x96, 0x9f, 0x16, 0x91, 0xc8, 0xbf, 0x6c, 0xa8, 0x82, 0x11, + 0xa7, 0xa7, 0xe1, 0x95, 0xae, 0x90, 0x2f, 0x72, 0x26, 0xa8, 0x9b, 0x7a, + 0xee, 0x66, 0xee, 0x2a, 0x44, 0x61, 0xc6, 0x93, 0x34, 0x12, 0xa7, 0x24, + 0x9d, 0xd3, 0x19, 0xbb, 0x3f, 0xe6, 0xc6, 0x76, 0xe6, 0x48, 0xc7, 0xa5, + 0x8e, 0xd0, 0x89, 0x7a, 0x84, 0xdf, 0xdb, 0xb3, 0xc1, 0xc5, 0x89, 0x09, + 0x34, 0x11, 0x63, 0x13, 0xbc, 0xe3, 0xad, 0x8d, 0x1c, 0xfc, 0x7b, 0xa1, + 0x18, 0x26, 0xfb, 0xa1, 0xca, 0xc1, 0xbc, 0xa1, 0xfe, 0x05, 0x03, 0x03, + 0xc6, 0x14, 0x88, 0xc3, 0xd0, 0xaf, 0x77, 0xdb, 0xae, 0x91, 0x75, 0xce, + 0xbe, 0xfa, 0x91, 0x91, 0xfa, 0x25, 0xba, 0x4e, 0xd4, 0xc8, 0xd3, 0xc0, + 0x5e, 0xa3, 0x28, 0x50, 0x84, 0x4c, 0xe3, 0x3e, 0xc9, 0x78, 0xf0, 0x4c, + 0xb8, 0xc7, 0x08, 0xee, 0x68, 0xca, 0xa8, 0x4c, 0x91, 0x38, 0xb1, 0x15, + 0xf3, 0x20, 0x0f, 0xe3, 0x47, 0x36, 0xaa, 0x3c, 0xe8, 0x46, 0x2d, 0xde, + 0x94, 0x3f, 0x8c, 0x46, 0x57, 0x4d, 0x4b, 0xc2, 0x88, 0x42, 0x68, 0x0d, + 0x9d, 0xed, 0xa1, 0xcd, 0x48, 0x26, 0x9d, 0x8c, 0x2c, 0x14, 0xf7, 0x12, + 0xa0, 0xa1, 0x89, 0xdf, 0x09, 0x21, 0x5f, 0x5b, 0x1a, 0x1b, 0x3f, 0xea, + 0x3b, 0x3e, 0x1a, 0xd4, 0x23, 0x30, 0x9a, 0xad, 0xdc, 0x43, 0x27, 0xe2, + 0x26, 0x47, 0x0f, 0x8f, 0x2b, 0x27, 0xfd, 0xfe, 0xc9, 0xf0, 0xb0, 0x2d, + 0xab, 0x46, 0xc7, 0xe2, 0xc7, 0xf2, 0xbd, 0x57, 0x77, 0x8f, 0xfc, 0xeb, + 0x5f, 0x23, 0xbb, 0x7d, 0x5e, 0xa8, 0xeb, 0x76, 0x95, 0xb5, 0xa0, 0xc6, + 0x7a, 0x35, 0x72, 0x74, 0xb5, 0xdf, 0x8f, 0x8c, 0x27, 0x4f, 0x82, 0x5a, + 0x71, 0xfc, 0x2d, 0x6e, 0x74, 0x4b, 0x50, 0x8b, 0xda, 0x45, 0x54, 0xad, + 0x3e, 0x2a, 0x22, 0x7c, 0x83, 0x3a, 0x63, 0xba, 0xb3, 0xa2, 0x0b, 0x70, + 0x86, 0x28, 0x15, 0x99, 0x22, 0xaf, 0xdb, 0x63, 0x38, 0xe4, 0xc9, 0x6c, + 0x1e, 0x7c, 0x25, 0x36, 0xe0, 0x6a, 0x86, 0xae, 0x59, 0xae, 0x24, 0xca, + 0x98, 0x65, 0x05, 0x44, 0x3f, 0x69, 0xbc, 0xbd, 0x28, 0x00, 0x9f, 0xd6, + 0xf9, 0x14, 0xc0, 0x1b, 0xa6, 0xc5, 0x3f, 0x49, 0x81, 0x20, 0x7c, 0xab, + 0xdc, 0x3f, 0x27, 0x72, 0x62, 0x73, 0x1f, 0x6a, 0x08, 0xa2, 0xc8, 0x97, + 0xc7, 0xc4, 0xc4, 0xc2, 0x88, 0xba, 0xad, 0xdb, 0xc4, 0xa9, 0x7d, 0x17, + 0x2f, 0x1e, 0x1e, 0x1d, 0xec, 0xdf, 0xf6, 0xfa, 0xeb, 0x20, 0xdd, 0x7e, + 0x2d, 0x58, 0x16, 0x97, 0xa1, 0xac, 0xb0, 0xca, 0xbc, 0xee, 0x17, 0x3d, + 0xd3, 0xf2, 0x97, 0x75, 0x47, 0xef, 0x16, 0x59, 0xdf, 0xcd, 0x7a, 0xd7, + 0x5a, 0x74, 0xf7, 0xe8, 0xba, 0xbf, 0xb4, 0x30, 0xe7, 0x9b, 0x24, 0x99, + 0x73, 0xe3, 0xb5, 0x6a, 0xc9, 0xbf, 0x80, 0x20, 0x7c, 0xc5, 0x20, 0x95, + 0x50, 0x07, 0xa8, 0x36, 0xa8, 0x24, 0xbd, 0xc4, 0x6a, 0x55, 0x6f, 0x96, + 0x4f, 0x01, 0xb7, 0xec, 0x99, 0x51, 0xc6, 0x56, 0xd5, 0x88, 0x26, 0x53, + 0xf3, 0xc0, 0xaf, 0x05, 0x21, 0xed, 0xcd, 0x73, 0x1d, 0xbb, 0x8e, 0x7d, + 0xf9, 0xb7, 0xf7, 0x75, 0x3c, 0x38, 0x8d, 0x30, 0x62, 0x0c, 0xac, 0xc8, + 0x32, 0x0e, 0xbd, 0xe1, 0x94, 0x18, 0xd6, 0xba, 0x5e, 0xe7, 0x80, 0x05, + 0xc2, 0x52, 0xfa, 0xdf, 0xc2, 0x74, 0xd9, 0x93, 0xf1, 0x51, 0xce, 0x0c, + 0x67, 0x54, 0xfc, 0x93, 0x65, 0x74, 0xbe, 0xac, 0xee, 0xc9, 0x38, 0xf9, + 0x85, 0xb4, 0x0b, 0xf2, 0xf8, 0x07, 0x74, 0xb4, 0x88, 0x0d, 0x84, 0x0f, + 0xc2, 0x22, 0x8d, 0x28, 0x08, 0x3c, 0x08, 0x16, 0xdc, 0xea, 0xcc, 0xd2, + 0x11, 0x1b, 0x54, 0x92, 0xbe, 0x14, 0xd4, 0xb8, 0x4f, 0x77, 0x57, 0xa1, + 0xb7, 0xea, 0xbc, 0xba, 0x35, 0xe6, 0x1e, 0x3f, 0xb3, 0x8d, 0x51, 0x6f, + 0x63, 0x56, 0x59, 0x1a, 0xa1, 0xde, 0xbf, 0xbc, 0x7f, 0x5f, 0x7b, 0xd1, + 0xaa, 0x9e, 0xd0, 0xb0, 0xd4, 0xac, 0xfa, 0x2c, 0x53, 0x6f, 0xef, 0x43, + 0xbd, 0xbd, 0xa6, 0xec, 0xcc, 0x3a, 0xcc, 0x71, 0x6c, 0x3b, 0xd3, 0x96, + 0x8c, 0x66, 0x8d, 0x27, 0x72, 0xad, 0x64, 0x08, 0x95, 0x44, 0xb2, 0x72, + 0xc7, 0xb1, 0x10, 0xcd, 0x66, 0x0c, 0x39, 0x23, 0xf8, 0xba, 0xe1, 0x11, + 0xaf, 0x7b, 0x9b, 0xd4, 0x22, 0x87, 0x83, 0xd7, 0xda, 0x8b, 0x32, 0x21, + 0x92, 0x80, 0x30, 0x35, 0x41, 0x74, 0xca, 0xe0, 0x56, 0xee, 0x45, 0xe6, + 0xd5, 0x97, 0x56, 0xea, 0x6e, 0xb5, 0xdd, 0xd2, 0xad, 0x7c, 0x49, 0xdc, + 0xbf, 0xae, 0x2e, 0x58, 0xba, 0xe7, 0xc0, 0x01, 0x71, 0xf2, 0x44, 0x63, + 0xa3, 0xa8, 0xff, 0xab, 0xdd, 0xea, 0x96, 0x40, 0xef, 0x4e, 0x3e, 0x9e, + 0xe8, 0x69, 0x19, 0x3b, 0xe5, 0x1e, 0xf8, 0xe8, 0xda, 0x87, 0xed, 0xc7, + 0x26, 0x27, 0x45, 0xa3, 0x6a, 0x48, 0x92, 0x5e, 0x73, 0xaa, 0xd9, 0x0c, + 0xd1, 0xd2, 0x37, 0x69, 0x9e, 0xa7, 0x05, 0xda, 0x4f, 0x68, 0x96, 0x86, + 0x41, 0xa8, 0xfe, 0xd9, 0x0e, 0xb7, 0x88, 0xd1, 0x98, 0x1b, 0xa2, 0x27, + 0x34, 0xc9, 0x92, 0xbf, 0x1a, 0x87, 0x82, 0xab, 0xea, 0xab, 0xc1, 0x57, + 0xb9, 0x33, 0xc1, 0xd9, 0x8e, 0xdb, 0x3a, 0xbf, 0x22, 0xf3, 0xa2, 0xc3, + 0x6f, 0x5d, 0xc9, 0xd5, 0x9f, 0xd8, 0xb8, 0xce, 0x61, 0x2a, 0x8b, 0xce, + 0x0a, 0x3c, 0xc2, 0xc9, 0x2e, 0x29, 0x56, 0x3d, 0x17, 0x99, 0x32, 0xd3, + 0xab, 0x28, 0x4b, 0x38, 0xf1, 0x4b, 0x16, 0x9d, 0x1d, 0x24, 0x61, 0x98, + 0xf1, 0x0b, 0x94, 0xdf, 0xcb, 0x12, 0x80, 0xb4, 0x60, 0xbb, 0xf8, 0x69, + 0x21, 0xac, 0x9d, 0x7e, 0xec, 0x44, 0x8c, 0x01, 0x80, 0x48, 0x08, 0x9a, + 0x31, 0xf3, 0xb3, 0xa8, 0xa2, 0x8c, 0x20, 0xf8, 0xc1, 0x69, 0x19, 0xe3, + 0xfe, 0x82, 0xc9, 0x49, 0x6e, 0x5e, 0x30, 0x92, 0x41, 0x82, 0xc9, 0x23, + 0x18, 0x36, 0x83, 0xf3, 0x22, 0x42, 0x08, 0xde, 0xf8, 0x78, 0x54, 0xfa, + 0x2f, 0x21, 0xb0, 0xd4, 0x8f, 0xa6, 0x11, 0xce, 0xc4, 0x0c, 0x23, 0x87, + 0xcc, 0x69, 0xc6, 0xf6, 0x81, 0xcc, 0x23, 0x54, 0x0f, 0x34, 0xc0, 0x91, + 0xea, 0x79, 0x74, 0xc3, 0x49, 0xda, 0x10, 0xe1, 0x4e, 0x82, 0x3a, 0x93, + 0x2b, 0x70, 0xd3, 0x3a, 0x24, 0x3c, 0xac, 0x61, 0xc3, 0x64, 0x43, 0xc3, + 0x24, 0x90, 0xce, 0x30, 0x1a, 0xdd, 0xee, 0xc6, 0x46, 0x58, 0x40, 0xb6, + 0x8c, 0xd2, 0x6e, 0x40, 0xe4, 0x28, 0xc9, 0x4c, 0x23, 0x01, 0x7c, 0xa1, + 0x7a, 0xe0, 0x6d, 0x49, 0xa3, 0xa8, 0x57, 0xc0, 0x20, 0xb4, 0xa1, 0x14, + 0xe7, 0xe1, 0xb0, 0x01, 0x74, 0x31, 0x22, 0xfb, 0x4e, 0xde, 0xe9, 0x44, + 0xbf, 0x09, 0x23, 0x24, 0x8e, 0x0f, 0x90, 0x2a, 0xd4, 0x5d, 0x8b, 0x28, + 0xc4, 0x80, 0xe7, 0x81, 0x13, 0x4a, 0xc7, 0x84, 0xd3, 0x4a, 0x5c, 0x70, + 0xf3, 0x04, 0xba, 0x52, 0x4c, 0xbe, 0xbd, 0x7e, 0x01, 0x0b, 0xda, 0x0b, + 0xa4, 0x88, 0x63, 0x90, 0x0b, 0x0a, 0xb5, 0x15, 0xf0, 0x3f, 0x76, 0x81, + 0xd7, 0x04, 0xf1, 0x48, 0xa6, 0x6d, 0x44, 0x98, 0x99, 0x55, 0x98, 0xc6, + 0x00, 0x26, 0xc3, 0x7a, 0x21, 0xda, 0x2a, 0x93, 0xa7, 0x51, 0x24, 0xa6, + 0xe5, 0xe7, 0x1c, 0x8b, 0xa5, 0x39, 0xb2, 0x6d, 0x5e, 0x84, 0xaa, 0x98, + 0xa4, 0x39, 0x11, 0x78, 0x29, 0x19, 0x46, 0x40, 0x00, 0xb4, 0x48, 0xb8, + 0x16, 0xcf, 0x0b, 0xde, 0x49, 0x55, 0xcc, 0x1c, 0xca, 0x73, 0x1b, 0x74, + 0x5f, 0x6e, 0x20, 0xf2, 0x4a, 0xe6, 0xd7, 0x06, 0xf1, 0x57, 0x86, 0x6a, + 0x3e, 0x64, 0x08, 0xcc, 0xfa, 0x40, 0x6b, 0x08, 0xb5, 0x2e, 0x4f, 0xfc, + 0x7a, 0x91, 0xf0, 0x43, 0xe6, 0x44, 0x22, 0x64, 0x29, 0x35, 0x72, 0xc8, + 0x01, 0xb1, 0x39, 0x3e, 0x20, 0x1e, 0x93, 0x6e, 0x01, 0x09, 0xc2, 0x5c, + 0x87, 0x14, 0x11, 0x8a, 0xb9, 0x25, 0x8b, 0x52, 0xce, 0xb2, 0xc0, 0xfa, + 0xbe, 0x1c, 0xa0, 0xf5, 0x60, 0x0f, 0xc3, 0x20, 0xc1, 0x73, 0x4d, 0x47, + 0xfc, 0x1e, 0x65, 0xaa, 0x84, 0x08, 0xff, 0x19, 0xf5, 0x40, 0x57, 0x10, + 0xa5, 0xa3, 0x36, 0x51, 0x14, 0xb8, 0xe2, 0x44, 0x64, 0x09, 0xd7, 0x1a, + 0xc0, 0xfb, 0xfc, 0x1d, 0xb0, 0xe8, 0x29, 0xf9, 0x08, 0x99, 0x86, 0x2c, + 0xc2, 0x5f, 0x36, 0x4b, 0xd3, 0xcd, 0xde, 0x57, 0x0b, 0xbb, 0xe8, 0xf9, + 0x02, 0xcd, 0x87, 0x9a, 0xc7, 0xf0, 0xe1, 0x94, 0x00, 0x1f, 0x80, 0x84, + 0xe9, 0xfd, 0x49, 0x0d, 0x57, 0xbf, 0xcd, 0x9f, 0x79, 0x94, 0xc9, 0x2f, + 0x10, 0x77, 0xef, 0x56, 0xd7, 0xd1, 0xf9, 0x7b, 0x1f, 0x7d, 0x14, 0x12, + 0x95, 0x28, 0x4a, 0xbd, 0xc4, 0x97, 0x4e, 0x6a, 0xc6, 0xa5, 0x61, 0x9e, + 0xdb, 0x94, 0xba, 0x0f, 0x06, 0xfa, 0x8f, 0x36, 0x4c, 0x2a, 0x4f, 0x0c, + 0x0e, 0x5e, 0xdb, 0x56, 0x53, 0x32, 0x38, 0x16, 0x11, 0x5e, 0x95, 0xb3, + 0x45, 0x73, 0x0b, 0xc6, 0x3d, 0xb4, 0x72, 0xa5, 0x38, 0xda, 0x90, 0x3d, + 0x5d, 0x4e, 0xbd, 0xe6, 0x9c, 0xc9, 0x84, 0x4e, 0x46, 0xea, 0xce, 0x9f, + 0x5f, 0x6d, 0xbe, 0xf1, 0xac, 0x69, 0x2f, 0x7c, 0x22, 0x23, 0xf3, 0x0e, + 0x57, 0xa3, 0x41, 0x94, 0xb3, 0xed, 0x30, 0x9f, 0x33, 0x68, 0x80, 0x44, + 0xa9, 0x18, 0x91, 0x1b, 0x09, 0xe9, 0x85, 0x79, 0x7e, 0x6b, 0xb2, 0x5c, + 0x0c, 0x23, 0x12, 0xea, 0xdd, 0x35, 0x21, 0x29, 0xfa, 0xb1, 0xfb, 0xc1, + 0x62, 0x18, 0xdb, 0xdd, 0x81, 0x81, 0x9d, 0x74, 0x49, 0x95, 0x98, 0x4d, + 0xcf, 0x0d, 0x08, 0xa4, 0x09, 0xcc, 0x3f, 0x37, 0xd4, 0x82, 0x51, 0xc9, + 0x6e, 0x7d, 0x4d, 0x8d, 0xb9, 0x46, 0x2f, 0x78, 0xe2, 0x2d, 0x9c, 0x42, + 0x06, 0xc2, 0x75, 0xa8, 0xf2, 0x83, 0x39, 0x52, 0x80, 0x70, 0x64, 0xc9, + 0x64, 0xca, 0xa4, 0xf8, 0x24, 0x98, 0xb2, 0x2d, 0x4e, 0x0c, 0x28, 0xa6, + 0x40, 0xc2, 0x66, 0xd9, 0x56, 0xa2, 0xa0, 0xe5, 0xb6, 0x74, 0x7f, 0x21, + 0x9d, 0x91, 0x32, 0x4c, 0x81, 0x58, 0xad, 0x4b, 0x41, 0xb3, 0xb4, 0x02, + 0x85, 0x60, 0x38, 0x15, 0x02, 0x90, 0x69, 0xa7, 0x73, 0x96, 0xd3, 0x27, + 0xc0, 0xba, 0xf9, 0x80, 0x34, 0xd8, 0x23, 0x10, 0x38, 0x7a, 0x0e, 0x21, + 0x5c, 0xe6, 0x1c, 0x30, 0xa4, 0x25, 0x74, 0xd3, 0x67, 0x93, 0x9b, 0xc8, + 0x49, 0x23, 0x02, 0x56, 0xea, 0xc0, 0xef, 0xe0, 0xa6, 0x06, 0x91, 0xa2, + 0x39, 0xc8, 0xaa, 0x2a, 0x65, 0xc3, 0xd9, 0x60, 0xb9, 0x11, 0xdd, 0x57, + 0x8c, 0x72, 0x56, 0xff, 0xbc, 0x19, 0x3c, 0x32, 0xcc, 0xa0, 0x51, 0x59, + 0x26, 0x6d, 0x4a, 0xdc, 0x89, 0xf0, 0x4d, 0xf6, 0x23, 0x58, 0xc0, 0x14, + 0xb6, 0x37, 0x61, 0x08, 0xa3, 0x0d, 0x87, 0x3f, 0x3c, 0x01, 0x86, 0x93, + 0xc0, 0xe8, 0x7d, 0x06, 0x4d, 0xf7, 0x3b, 0x79, 0x40, 0x75, 0xa1, 0xf4, + 0x82, 0x2a, 0x60, 0xfd, 0x5a, 0x46, 0x1c, 0x56, 0x4e, 0x6c, 0xe1, 0xa0, + 0x21, 0x5d, 0xcb, 0x8b, 0x62, 0x74, 0x7e, 0x4c, 0x9b, 0x3d, 0xc8, 0x83, + 0x27, 0xea, 0xf9, 0x11, 0xf7, 0xbc, 0x3c, 0xbb, 0xaf, 0x94, 0xc1, 0xfb, + 0x01, 0x41, 0xdb, 0xe1, 0xa1, 0x41, 0xbb, 0xca, 0xc9, 0xf3, 0x80, 0x7d, + 0xf8, 0x93, 0x33, 0x44, 0x9e, 0x3e, 0xe6, 0x17, 0xb3, 0x4f, 0x76, 0x93, + 0xa0, 0xe7, 0xf2, 0xf2, 0x27, 0x9d, 0xcf, 0x2b, 0x20, 0x58, 0x44, 0x8b, + 0x0b, 0x3c, 0xc6, 0x14, 0xf1, 0x37, 0x25, 0x1d, 0x97, 0x51, 0xd8, 0x6e, + 0x12, 0x29, 0x97, 0x6d, 0x62, 0x88, 0x7e, 0x99, 0xf9, 0x62, 0x4d, 0x17, + 0xea, 0xe2, 0x7d, 0xbd, 0xf9, 0x82, 0x6d, 0xf1, 0xc2, 0x23, 0xaf, 0x13, + 0x98, 0x69, 0xed, 0x85, 0x3e, 0x1a, 0x87, 0x60, 0x77, 0xf0, 0xb7, 0x43, + 0x22, 0x08, 0x02, 0xe3, 0x46, 0x18, 0x01, 0x5a, 0x2c, 0xb0, 0x02, 0x26, + 0xa0, 0x3e, 0xd8, 0x5f, 0x58, 0x9a, 0x9b, 0x22, 0xf9, 0x20, 0x28, 0xc0, + 0xd5, 0x62, 0xc9, 0xa0, 0x44, 0xc0, 0x2d, 0x01, 0xfa, 0x60, 0x70, 0xe7, + 0x35, 0xe5, 0xb2, 0xca, 0x58, 0xc9, 0x37, 0x85, 0xa5, 0x9b, 0xf3, 0xfe, + 0x38, 0x92, 0x99, 0x9f, 0xf2, 0x6c, 0xea, 0x0a, 0xf6, 0xef, 0x5f, 0xf3, + 0x89, 0x01, 0x96, 0xd0, 0x62, 0xd5, 0xd4, 0x3b, 0x3f, 0x5a, 0xeb, 0xbf, + 0xb8, 0xa9, 0x05, 0x07, 0x2c, 0x66, 0xfd, 0x22, 0x43, 0x18, 0x42, 0xbb, + 0x91, 0x1b, 0x9c, 0x66, 0x11, 0xeb, 0x9f, 0x66, 0x18, 0x86, 0xa1, 0x59, + 0xc4, 0x5a, 0xb5, 0x6e, 0x14, 0x9c, 0xef, 0xba, 0x91, 0xf0, 0x06, 0xe8, + 0x3a, 0xcf, 0xc3, 0xd8, 0xef, 0xc7, 0x39, 0x08, 0x78, 0x5e, 0x1c, 0x22, + 0x3c, 0x62, 0x9b, 0xaa, 0x62, 0x98, 0xb0, 0xbe, 0x70, 0xa5, 0x78, 0x5b, + 0x1d, 0xd8, 0x36, 0x73, 0x97, 0x96, 0x2f, 0x49, 0xfd, 0xab, 0xb9, 0xa6, + 0x39, 0xa6, 0xb8, 0xba, 0xfa, 0x35, 0x75, 0x94, 0xdb, 0xe7, 0x91, 0x17, + 0x59, 0xf6, 0xaf, 0x57, 0xe8, 0x41, 0x70, 0x1e, 0xb3, 0x32, 0x88, 0xcf, + 0x06, 0xfe, 0x79, 0x68, 0x55, 0x5c, 0x53, 0xca, 0x66, 0xcb, 0x42, 0x72, + 0xb5, 0x2b, 0xb1, 0xca, 0xa5, 0xe9, 0x5a, 0x68, 0xd8, 0x76, 0x4e, 0x21, + 0xe4, 0xf9, 0x0c, 0x4e, 0xb5, 0x6d, 0x20, 0xbb, 0x58, 0x43, 0x98, 0xbe, + 0x20, 0xa8, 0x9c, 0x34, 0xe7, 0xfd, 0xa0, 0x24, 0xd3, 0x3b, 0x77, 0x7d, + 0x27, 0x8f, 0x68, 0xc4, 0xb9, 0x6c, 0x50, 0x25, 0x9c, 0xc0, 0x41, 0x5d, + 0x06, 0xe1, 0x1c, 0x48, 0xb9, 0x56, 0x7a, 0xad, 0x1a, 0x93, 0x53, 0x7c, + 0xf9, 0xe0, 0xa2, 0x07, 0x7b, 0x04, 0xf1, 0x1b, 0x62, 0xcf, 0x89, 0x7c, + 0x9a, 0x76, 0x73, 0x0a, 0xda, 0x66, 0xff, 0xea, 0x39, 0x69, 0x56, 0x79, + 0x98, 0xed, 0xec, 0x76, 0xc5, 0x81, 0xb8, 0xc8, 0x7d, 0x6a, 0x99, 0xd1, + 0x28, 0xe6, 0x25, 0xb4, 0x1a, 0x5d, 0x2e, 0x8f, 0x5b, 0xd5, 0x46, 0x3d, + 0x90, 0x14, 0x9e, 0xcc, 0xd7, 0xaf, 0x44, 0x19, 0xe5, 0x11, 0x62, 0x87, + 0x21, 0xd1, 0xda, 0x5b, 0x03, 0x23, 0x7a, 0x08, 0xb2, 0xaa, 0x66, 0x05, + 0x98, 0xb5, 0xdd, 0xa4, 0xa5, 0x93, 0x5c, 0xbf, 0x74, 0x5c, 0x4a, 0x3b, + 0x62, 0x5c, 0xea, 0xe7, 0x6f, 0x16, 0xa0, 0x5b, 0x79, 0xc7, 0x05, 0xdb, + 0xa2, 0x0d, 0x40, 0x63, 0x56, 0x0e, 0xb6, 0x9e, 0xcb, 0x71, 0x28, 0x44, + 0x8c, 0x46, 0xf6, 0x3a, 0x16, 0x61, 0xa6, 0x21, 0xb8, 0xa1, 0x33, 0xed, + 0x26, 0xcc, 0xa2, 0xcd, 0x38, 0x04, 0xc7, 0x15, 0xe6, 0x69, 0x63, 0xe9, + 0xb3, 0xe6, 0x13, 0xf1, 0xce, 0xf5, 0xfb, 0x0e, 0xe5, 0x00, 0x45, 0x3d, + 0xcf, 0xd7, 0x24, 0xd6, 0x4f, 0xc7, 0xf0, 0x77, 0x1a, 0x59, 0x75, 0xa1, + 0xa4, 0xf0, 0x21, 0xbb, 0x41, 0x50, 0xd3, 0x67, 0x52, 0xce, 0xb8, 0x7b, + 0xa7, 0x07, 0xd1, 0x11, 0x4b, 0xbd, 0x4b, 0x69, 0x90, 0x6b, 0x60, 0x75, + 0xb4, 0x2e, 0x44, 0x32, 0xd0, 0x30, 0xb0, 0xb8, 0x3e, 0x24, 0xc6, 0x8d, + 0x27, 0x30, 0xf4, 0x89, 0xc5, 0x42, 0xf1, 0x88, 0xb6, 0x04, 0x95, 0x0c, + 0x7f, 0x44, 0x7f, 0x4c, 0x83, 0x8d, 0x48, 0x40, 0x3c, 0x9d, 0xd6, 0x07, + 0xcc, 0xbc, 0xc3, 0x66, 0xbd, 0xa4, 0x5f, 0x25, 0xcb, 0x4c, 0xd2, 0xe4, + 0x73, 0x8a, 0xbb, 0x3a, 0xbf, 0xe2, 0x34, 0x7e, 0x3a, 0x98, 0x42, 0x2e, + 0xa0, 0x27, 0x34, 0x93, 0xd2, 0xaf, 0x54, 0x33, 0xa5, 0x17, 0x54, 0x57, + 0xf1, 0xd5, 0x5c, 0x58, 0x73, 0xde, 0xc1, 0x27, 0x90, 0xce, 0xa7, 0xa3, + 0x2e, 0xdf, 0xa7, 0xc8, 0x2e, 0x37, 0x7f, 0x67, 0xb2, 0x64, 0x67, 0x16, + 0xae, 0xb5, 0xc0, 0x20, 0xae, 0xad, 0x31, 0xa1, 0x7a, 0xdc, 0xe4, 0xb8, + 0x9f, 0x39, 0x35, 0x16, 0x3a, 0x69, 0x89, 0xac, 0xf2, 0xd5, 0x12, 0xe8, + 0x81, 0x07, 0xbc, 0x5b, 0xb7, 0xcc, 0x78, 0xa5, 0x35, 0xd9, 0xaf, 0x16, + 0x88, 0x34, 0x61, 0x09, 0xcd, 0x71, 0x4f, 0x4c, 0x27, 0xda, 0x4f, 0x9b, + 0xd4, 0xea, 0x59, 0x1f, 0x45, 0x46, 0x76, 0x75, 0xd9, 0xf4, 0x6f, 0x77, + 0x59, 0x05, 0x55, 0x35, 0x49, 0x49, 0xa8, 0x7b, 0x2d, 0x2b, 0xaf, 0xf9, + 0x02, 0xd2, 0x34, 0x88, 0x52, 0x1d, 0x6a, 0xe1, 0x5e, 0x91, 0x1b, 0xff, + 0xc4, 0xdd, 0x4d, 0xd9, 0x63, 0x83, 0xb0, 0x22, 0x28, 0x22, 0x99, 0x71, + 0xe3, 0x99, 0xc8, 0xec, 0xd3, 0x8a, 0x2f, 0x3f, 0x65, 0x22, 0xcd, 0x59, + 0xf9, 0x71, 0xd1, 0x2c, 0xbb, 0xc3, 0x5e, 0x49, 0x8c, 0x58, 0x83, 0xbe, + 0x68, 0xb7, 0x1b, 0x88, 0x80, 0xfc, 0x3b, 0x18, 0x22, 0x10, 0x3b, 0x0d, + 0x81, 0x45, 0xe7, 0x91, 0xe3, 0x64, 0x28, 0x9c, 0x14, 0xba, 0x59, 0x37, + 0xf1, 0x87, 0xad, 0x42, 0x10, 0x81, 0x48, 0x11, 0xf5, 0x5c, 0xc1, 0x73, + 0x51, 0x8a, 0x7e, 0x51, 0x33, 0xa9, 0x39, 0xc1, 0x87, 0x32, 0xb4, 0xa7, + 0xa8, 0x0e, 0xb2, 0x7c, 0x33, 0x89, 0xc8, 0x6d, 0x55, 0x01, 0x42, 0xf5, + 0x67, 0x52, 0x9b, 0x0d, 0xe3, 0xe3, 0x1b, 0x70, 0xe3, 0xf6, 0x6d, 0x0d, + 0xb8, 0xb4, 0x95, 0x2d, 0xc5, 0x3a, 0x9f, 0x0e, 0x2b, 0x89, 0x92, 0x16, + 0x79, 0xa2, 0x6e, 0x48, 0xa0, 0x51, 0xff, 0x43, 0x78, 0x1f, 0xb2, 0x0d, + 0xd9, 0x73, 0x5f, 0x29, 0xcf, 0x79, 0x76, 0x97, 0xae, 0xef, 0xfa, 0x36, + 0x99, 0x38, 0xca, 0x61, 0xe0, 0xb6, 0x80, 0x00, 0xc3, 0xb7, 0x74, 0xfd, + 0xc0, 0x1a, 0xe9, 0x83, 0x47, 0xf0, 0xf0, 0x7e, 0x92, 0xc9, 0x48, 0xc7, + 0x29, 0x4a, 0xa4, 0x4e, 0x39, 0x04, 0x65, 0x37, 0x82, 0xe7, 0x30, 0x9e, + 0x17, 0x03, 0xf8, 0x4d, 0x2f, 0x42, 0xf8, 0xa5, 0x40, 0x34, 0x11, 0x08, + 0xef, 0xb6, 0xd9, 0xd3, 0xf3, 0x1c, 0xa1, 0x09, 0x6f, 0xb0, 0xb1, 0x36, + 0xbf, 0x16, 0x61, 0xc4, 0xcf, 0xe3, 0x43, 0x60, 0x0b, 0x8d, 0x70, 0xca, + 0xa9, 0x08, 0x18, 0xaf, 0x69, 0x11, 0x02, 0xe7, 0xdd, 0xa2, 0x7b, 0xba, + 0x44, 0x15, 0x83, 0x13, 0x21, 0x14, 0x64, 0x03, 0x3d, 0xaa, 0x5a, 0xe4, + 0xbe, 0x10, 0x4f, 0x6f, 0xdb, 0xde, 0x30, 0xb1, 0x21, 0x31, 0x27, 0xc1, + 0xda, 0x22, 0x3c, 0xe9, 0x4e, 0xfa, 0x60, 0x4e, 0x34, 0xc4, 0x71, 0x9e, + 0xc7, 0x14, 0xb0, 0x83, 0x22, 0xf1, 0x98, 0xce, 0x71, 0xf5, 0x14, 0x68, + 0x17, 0x18, 0xa9, 0x25, 0x58, 0xc4, 0x94, 0xc3, 0x57, 0xeb, 0x4e, 0x42, + 0x96, 0xc3, 0x20, 0x1d, 0x93, 0x7a, 0x40, 0x59, 0x60, 0xc3, 0xda, 0xdb, + 0xc9, 0x58, 0xa2, 0xac, 0xb0, 0x71, 0xfb, 0xda, 0x91, 0xdf, 0x9b, 0xcf, + 0x83, 0x2d, 0x6b, 0xc3, 0x6e, 0x5c, 0xbb, 0x65, 0x98, 0xd7, 0x28, 0xcb, + 0x52, 0xfb, 0xc8, 0x07, 0x1f, 0x00, 0xb6, 0x46, 0xe7, 0xa0, 0x16, 0xf6, + 0x82, 0x68, 0x86, 0x88, 0x86, 0x05, 0x8c, 0xf0, 0x29, 0xd0, 0x2e, 0xc0, + 0xb4, 0x4c, 0x75, 0xa8, 0xdd, 0x57, 0xeb, 0xb7, 0x04, 0x41, 0x38, 0xeb, + 0x4d, 0x94, 0xdb, 0x8a, 0x09, 0xc6, 0xda, 0x15, 0xf0, 0xc1, 0x8a, 0x05, + 0x46, 0x91, 0xc2, 0xaf, 0x7c, 0xbd, 0x74, 0x52, 0xd9, 0x28, 0x1b, 0xc6, + 0x8b, 0x8a, 0x87, 0x6f, 0xcd, 0xe4, 0x35, 0x5a, 0x20, 0x5e, 0x8f, 0x0c, + 0x9d, 0xfd, 0x69, 0x9e, 0xdb, 0x40, 0xb1, 0x14, 0xf4, 0x27, 0x86, 0x68, + 0x11, 0x7e, 0x04, 0x3e, 0xe4, 0x48, 0x47, 0xc2, 0x22, 0xbb, 0x48, 0x11, + 0xb9, 0x18, 0xc8, 0xd5, 0xb1, 0xc8, 0x2d, 0x76, 0x3a, 0x22, 0x54, 0x79, + 0x35, 0xa9, 0x2a, 0x33, 0x20, 0x7e, 0x96, 0xc6, 0x0b, 0x94, 0x08, 0x0f, + 0x98, 0x57, 0xb8, 0xc0, 0x62, 0x47, 0xa4, 0x8d, 0x79, 0x6a, 0x88, 0x07, + 0xa6, 0x27, 0xca, 0xd8, 0x2e, 0x56, 0x4d, 0x58, 0x22, 0x2e, 0x10, 0x71, + 0x6d, 0xfd, 0x31, 0x2f, 0x2e, 0x9b, 0x80, 0x71, 0x88, 0xbf, 0xc2, 0x53, + 0x95, 0xcd, 0xe2, 0x45, 0x25, 0x51, 0xb2, 0x90, 0x01, 0x08, 0xfb, 0xf7, + 0xcf, 0xe2, 0x66, 0x06, 0x63, 0xc9, 0x1a, 0x7a, 0x51, 0x71, 0x5b, 0xc1, + 0x81, 0x3a, 0xc1, 0x04, 0xd0, 0x20, 0xcd, 0xe8, 0x92, 0x8a, 0x96, 0xcd, + 0x64, 0x4d, 0x90, 0x6d, 0x62, 0xfb, 0x78, 0x61, 0xfd, 0xef, 0xbf, 0x97, + 0x54, 0x35, 0x36, 0x22, 0x2c, 0x15, 0xa5, 0x7b, 0xdb, 0x9a, 0x44, 0x3e, + 0x9e, 0xfa, 0x5e, 0x59, 0xac, 0x68, 0x04, 0xdb, 0xc2, 0x46, 0xd5, 0x18, + 0x21, 0x81, 0xb1, 0x9c, 0xdb, 0x47, 0x02, 0x51, 0x04, 0xd6, 0xee, 0x26, + 0x98, 0xe4, 0xdc, 0x0f, 0x37, 0x9f, 0xa6, 0x36, 0xc2, 0xb7, 0xe7, 0x6a, + 0xc3, 0x96, 0x5b, 0xe4, 0xdc, 0x07, 0x9f, 0x5c, 0x57, 0x3a, 0x87, 0xd1, + 0x12, 0xf7, 0x86, 0x9f, 0xb0, 0xe8, 0xf0, 0xd3, 0x3f, 0x84, 0x0f, 0xa5, + 0x5f, 0x2e, 0x4c, 0x92, 0xfd, 0x23, 0x48, 0x74, 0x11, 0xa1, 0x7d, 0xcb, + 0xf1, 0xa6, 0x28, 0xe6, 0xe7, 0xe5, 0xdb, 0x05, 0x97, 0xdd, 0xf5, 0x74, + 0xd3, 0xa6, 0x20, 0xb7, 0xc6, 0x8b, 0xf6, 0xb2, 0xbd, 0x00, 0x15, 0x03, + 0x93, 0x9e, 0x5d, 0x16, 0x4f, 0x10, 0x41, 0x4c, 0x96, 0x74, 0x33, 0x08, + 0xf7, 0x74, 0x76, 0xca, 0x0d, 0x90, 0x20, 0x74, 0x11, 0x44, 0xa7, 0xf1, + 0x24, 0x1a, 0x14, 0xd8, 0x2b, 0xfd, 0x94, 0x8c, 0x3a, 0xd4, 0xe6, 0xfb, + 0xc8, 0xe5, 0x14, 0xb2, 0xb1, 0x94, 0x31, 0x19, 0x3a, 0x12, 0x6e, 0xd7, + 0x9e, 0x14, 0x12, 0xf8, 0x22, 0x00, 0x24, 0xe2, 0xc6, 0x6e, 0xd9, 0x98, + 0x8c, 0x9c, 0x3a, 0xa7, 0xf3, 0xeb, 0x6e, 0xeb, 0x7c, 0xba, 0x6b, 0x26, + 0xa9, 0x49, 0x66, 0xd2, 0x98, 0x06, 0x6e, 0x69, 0x4e, 0xa4, 0x8c, 0xca, + 0xa4, 0xa3, 0x29, 0x59, 0x15, 0x92, 0x01, 0x49, 0xbe, 0xa4, 0x5f, 0xf2, + 0x9a, 0x84, 0x84, 0xf1, 0xac, 0x04, 0x08, 0xc1, 0x28, 0x47, 0xbd, 0x85, + 0x95, 0x22, 0x5d, 0xa7, 0x5c, 0x58, 0x05, 0xa4, 0x90, 0x5c, 0xfe, 0x17, + 0x76, 0x8a, 0xf3, 0x9c, 0x10, 0x00, 0x80, 0xe9, 0x32, 0x63, 0x1e, 0x27, + 0xa3, 0xac, 0x73, 0x9f, 0x2a, 0x7c, 0x8a, 0x09, 0x50, 0x0c, 0x9a, 0x81, + 0x48, 0x8e, 0xd1, 0xd8, 0x5d, 0x69, 0xcc, 0xb9, 0x09, 0xfe, 0x7e, 0x63, + 0x25, 0x44, 0xdd, 0x4f, 0xf0, 0x44, 0x33, 0x9e, 0x81, 0x19, 0x7a, 0x79, + 0xe1, 0x0d, 0x3e, 0x39, 0xb5, 0xee, 0x19, 0xf9, 0x1e, 0xd1, 0x75, 0xd1, + 0xb9, 0x2f, 0x20, 0xb7, 0x41, 0x3e, 0x00, 0x13, 0x9b, 0xad, 0x8c, 0x69, + 0x67, 0x7f, 0x59, 0x18, 0x46, 0x08, 0x63, 0x4c, 0xe3, 0x59, 0x10, 0x09, + 0x8a, 0x4f, 0x33, 0x22, 0x5d, 0xb6, 0x0d, 0xc3, 0x64, 0xf5, 0x80, 0xad, + 0xbc, 0x03, 0x3b, 0xc0, 0xa3, 0x93, 0x38, 0xad, 0xf3, 0x2b, 0xbe, 0xa4, + 0xba, 0xa9, 0x5e, 0xaa, 0x40, 0xfd, 0x20, 0xf4, 0xcf, 0x51, 0x87, 0x7b, + 0xd7, 0xff, 0xfc, 0x6a, 0x36, 0xa4, 0xb5, 0xc4, 0xc5, 0xb7, 0xa4, 0x91, + 0xb4, 0xf2, 0x84, 0xf8, 0xf2, 0x34, 0x9e, 0x87, 0x24, 0x4d, 0x76, 0x43, + 0xbe, 0x80, 0xe1, 0x11, 0x89, 0x97, 0x7e, 0x98, 0x65, 0x4d, 0xfd, 0x98, + 0xea, 0xff, 0xca, 0xd9, 0x9a, 0x72, 0xfb, 0xd9, 0x47, 0x05, 0x10, 0x87, + 0x83, 0xf9, 0x34, 0xfb, 0xe3, 0x35, 0x6c, 0x54, 0x26, 0xaa, 0x62, 0x77, + 0xc8, 0xd3, 0xa8, 0xb0, 0x58, 0x02, 0x83, 0xad, 0xd0, 0x26, 0x91, 0x86, + 0x3a, 0xe7, 0xbe, 0x20, 0x92, 0x9e, 0x16, 0x2e, 0xfa, 0x4a, 0x14, 0x45, + 0xef, 0xc1, 0x60, 0x5a, 0xf1, 0xce, 0xbb, 0x11, 0x69, 0xe2, 0xe6, 0xf2, + 0xa7, 0x4c, 0x8e, 0x55, 0x33, 0x26, 0xd3, 0xa2, 0x5c, 0x57, 0x75, 0x6b, + 0xa9, 0x41, 0xbe, 0x6d, 0x7b, 0xc3, 0xa3, 0x9b, 0x36, 0x95, 0xa2, 0x52, + 0xb6, 0x55, 0x89, 0xc8, 0xb4, 0xc7, 0x1d, 0x3e, 0x73, 0xe9, 0x5a, 0xec, + 0x1c, 0xc4, 0xcf, 0x39, 0xd8, 0x9a, 0xce, 0x82, 0xd2, 0x5a, 0xc1, 0x4c, + 0xbb, 0x41, 0xe6, 0x51, 0x12, 0xa5, 0x70, 0x11, 0x4b, 0x18, 0xeb, 0x1d, + 0x34, 0xb9, 0x19, 0x90, 0x2f, 0x4f, 0xe5, 0xc4, 0xe6, 0x47, 0x60, 0xe0, + 0xb4, 0x28, 0xbb, 0xa8, 0x5b, 0xd8, 0xb7, 0x2e, 0x84, 0x4e, 0x73, 0xf7, + 0x83, 0x9e, 0xe2, 0xf7, 0x4d, 0x86, 0x41, 0x13, 0x27, 0x34, 0xd0, 0xb0, + 0x54, 0x49, 0xeb, 0x65, 0xa1, 0xf4, 0xaf, 0xf1, 0x66, 0xdc, 0x19, 0xd9, + 0x45, 0xd9, 0x9c, 0xec, 0x7f, 0xa1, 0xeb, 0xfd, 0x4c, 0x5f, 0x97, 0xe7, + 0xa4, 0x4d, 0x43, 0x68, 0xc8, 0x48, 0x97, 0xf9, 0xf6, 0xa8, 0x57, 0x7b, + 0xf5, 0xd0, 0x84, 0x45, 0x9d, 0xfb, 0x24, 0x06, 0x27, 0xd1, 0xca, 0xf5, + 0x30, 0x1f, 0xa1, 0xd8, 0x50, 0xd8, 0x78, 0x03, 0x1b, 0x8a, 0xd3, 0x69, + 0x38, 0xa2, 0xc8, 0x39, 0xd2, 0xba, 0x58, 0xc0, 0x02, 0xfa, 0xa9, 0x40, + 0xd6, 0x4c, 0xcb, 0x24, 0x98, 0xf0, 0xda, 0x35, 0x1d, 0x55, 0x59, 0xbc, + 0x27, 0xd7, 0x1c, 0x24, 0x29, 0xc7, 0xbf, 0xf8, 0x8b, 0x10, 0x0c, 0x0b, + 0x8d, 0x87, 0x01, 0x9b, 0xda, 0x92, 0x2c, 0xc8, 0x14, 0x0b, 0x8d, 0xd1, + 0x5c, 0x5d, 0x22, 0x0d, 0xeb, 0x9a, 0x95, 0x74, 0x35, 0x2e, 0x28, 0x74, + 0x9c, 0xfe, 0x42, 0xa5, 0x1a, 0x35, 0x01, 0x30, 0xbe, 0x57, 0xe4, 0xea, + 0x1a, 0x2f, 0x76, 0x24, 0x50, 0x8c, 0xee, 0xb8, 0xd0, 0xd0, 0x18, 0x40, + 0x44, 0xf4, 0x31, 0x57, 0x08, 0x5e, 0xc6, 0x69, 0x51, 0xaa, 0xc2, 0x98, + 0x42, 0x26, 0xe3, 0xd3, 0x9e, 0x99, 0x13, 0x51, 0xf1, 0x32, 0x1d, 0xdc, + 0xb8, 0xff, 0x3f, 0x21, 0x1f, 0x85, 0xc2, 0xd2, 0x55, 0x1f, 0x68, 0xa4, + 0xf4, 0xe2, 0x5e, 0xc2, 0xc7, 0x7c, 0xfd, 0xe4, 0x40, 0x8d, 0x1b, 0x2c, + 0x7c, 0xe3, 0x5b, 0x35, 0x30, 0xf1, 0xef, 0x43, 0x3e, 0xeb, 0x48, 0x8d, + 0x3f, 0x78, 0x39, 0x13, 0xcf, 0x58, 0x38, 0x35, 0xae, 0xe3, 0x18, 0x9c, + 0x54, 0xd6, 0x77, 0x65, 0x8c, 0x66, 0x69, 0x6d, 0x71, 0x38, 0xe8, 0xba, + 0x49, 0x26, 0xff, 0x40, 0x61, 0x42, 0xbe, 0xb0, 0xd7, 0x9d, 0x0a, 0xcf, + 0xbe, 0x8a, 0x05, 0xf5, 0xe9, 0x9c, 0x0b, 0x75, 0xc1, 0xcb, 0x7c, 0x5a, + 0xb1, 0x30, 0x33, 0xc6, 0x22, 0xb2, 0x0e, 0x4d, 0x88, 0x96, 0x41, 0x17, + 0xcd, 0xde, 0x4b, 0x32, 0x7c, 0x11, 0x06, 0x77, 0x90, 0x03, 0x41, 0xbf, + 0x3e, 0x34, 0x23, 0xa4, 0x6f, 0x21, 0xdf, 0xf4, 0x54, 0xee, 0x71, 0x0f, + 0x30, 0xf5, 0xb1, 0x3d, 0xdc, 0xd8, 0x08, 0xed, 0x6e, 0x66, 0x7b, 0xd1, + 0xff, 0x42, 0xed, 0x13, 0x07, 0x5d, 0x5e, 0xe8, 0x1f, 0xe0, 0x43, 0x5b, + 0xb0, 0xa0, 0x4d, 0xf3, 0x59, 0x59, 0x54, 0xf3, 0xf6, 0x87, 0x88, 0x5f, + 0xaa, 0x3e, 0xe3, 0xb2, 0xfd, 0x39, 0x58, 0xe9, 0x8c, 0x78, 0x28, 0xe0, + 0xa1, 0x08, 0x67, 0xc7, 0x7b, 0x5c, 0xbb, 0x09, 0xe5, 0x15, 0xf6, 0x63, + 0x9b, 0x99, 0x0d, 0xd7, 0x99, 0x03, 0x1e, 0xf0, 0x33, 0x84, 0x10, 0xbb, + 0x17, 0xf0, 0x30, 0x0d, 0x74, 0x64, 0x21, 0x34, 0xac, 0x21, 0x32, 0xf2, + 0xd6, 0x5b, 0xa2, 0x13, 0xc2, 0x17, 0x41, 0xd2, 0x77, 0x05, 0x44, 0x99, + 0x2c, 0x4d, 0x2e, 0x08, 0x61, 0x1f, 0xe4, 0x29, 0x61, 0xc7, 0x45, 0x85, + 0x75, 0xa3, 0xe5, 0x75, 0x87, 0x77, 0x35, 0xc4, 0xa9, 0x62, 0x5e, 0xb3, + 0x5f, 0xab, 0x3f, 0xfc, 0x51, 0xb9, 0x49, 0x75, 0xd7, 0x76, 0xe1, 0xf4, + 0xca, 0x28, 0x8d, 0xba, 0xe5, 0x90, 0x39, 0x2f, 0x46, 0x0e, 0xb3, 0xf6, + 0x9f, 0xe9, 0x98, 0x92, 0xc7, 0xc4, 0xfe, 0x53, 0x2f, 0x85, 0xed, 0x67, + 0x60, 0x27, 0xb5, 0x32, 0xc7, 0x43, 0x90, 0xab, 0x34, 0x4a, 0xef, 0x0c, + 0x1a, 0x35, 0xef, 0xad, 0x1a, 0xf9, 0xe8, 0x07, 0x0a, 0x5f, 0x49, 0x9f, + 0x07, 0xbe, 0xc2, 0x2a, 0xc7, 0x4f, 0xf8, 0xfd, 0x98, 0x43, 0x1c, 0xa6, + 0xfd, 0x7d, 0xfb, 0x44, 0xcd, 0xf8, 0x10, 0x9d, 0xd4, 0x28, 0x4f, 0xe2, + 0x20, 0x28, 0x4d, 0x91, 0x31, 0xcd, 0x89, 0x69, 0x2e, 0xfb, 0x79, 0x68, + 0xe6, 0x10, 0xa1, 0x18, 0xdb, 0x2b, 0xae, 0xe6, 0x9a, 0x6e, 0x44, 0x58, + 0xab, 0x78, 0x73, 0x30, 0x26, 0x72, 0x91, 0xc6, 0x54, 0x41, 0xeb, 0x01, + 0xf2, 0x60, 0x05, 0x39, 0x88, 0x23, 0xc3, 0x29, 0x4c, 0x3a, 0x09, 0x04, + 0x0d, 0x76, 0x92, 0x60, 0x86, 0x99, 0xef, 0x25, 0x04, 0xcf, 0xa3, 0xa0, + 0x39, 0x4f, 0xbe, 0xcc, 0x27, 0xec, 0xf5, 0x11, 0x83, 0xe6, 0x20, 0x85, + 0x6e, 0x06, 0xa5, 0x2c, 0x1f, 0x81, 0x85, 0xf3, 0xf9, 0xfb, 0xc1, 0x20, + 0x6a, 0x62, 0xaf, 0xc4, 0x25, 0x1a, 0x18, 0x48, 0x2a, 0x4b, 0xeb, 0xdf, + 0x52, 0x6a, 0xb5, 0x0a, 0xa7, 0x31, 0x18, 0x25, 0x4d, 0xca, 0x7a, 0x9d, + 0xc9, 0xca, 0x1c, 0x53, 0xb7, 0x31, 0xfc, 0x99, 0xd8, 0xff, 0xd8, 0xb0, + 0xbd, 0xb7, 0x4a, 0x77, 0x4b, 0x97, 0x1a, 0xc1, 0x65, 0xd2, 0xbf, 0x30, + 0x58, 0x28, 0x4b, 0x3f, 0xfb, 0xc3, 0x87, 0xc7, 0xc0, 0xe9, 0x1c, 0x73, + 0x3a, 0xeb, 0xff, 0xe3, 0x9b, 0x2e, 0x2f, 0x1f, 0xf3, 0x7a, 0xdf, 0x7a, + 0xb3, 0xbf, 0xff, 0xcd, 0xb7, 0xbc, 0xde, 0xb1, 0xf2, 0x72, 0x22, 0x23, + 0x40, 0xbd, 0x90, 0x06, 0xdc, 0xac, 0x95, 0xa7, 0x38, 0x4c, 0x0c, 0x42, + 0x30, 0xac, 0x06, 0xe2, 0x34, 0xe5, 0xc2, 0x27, 0x42, 0x92, 0x8f, 0x96, + 0xf0, 0x33, 0x5d, 0x85, 0x1e, 0x1a, 0x31, 0x0d, 0xe9, 0xb9, 0x0d, 0xd9, + 0x59, 0xbb, 0xaa, 0x7a, 0xf7, 0xba, 0xfc, 0x5d, 0x59, 0x1b, 0x32, 0xab, + 0xb5, 0x19, 0x57, 0x3c, 0x64, 0x59, 0x40, 0xac, 0xe9, 0x1a, 0x9c, 0x17, + 0xcc, 0x46, 0x00, 0xe1, 0x13, 0xed, 0xe7, 0x49, 0x61, 0xed, 0xa0, 0xd1, + 0xaa, 0x00, 0x5d, 0x21, 0x9e, 0x2f, 0xe2, 0xa6, 0xb6, 0x0b, 0x7b, 0xd5, + 0x59, 0xd9, 0xe9, 0x41, 0x1e, 0x2d, 0x53, 0x71, 0x3d, 0x62, 0xe4, 0x75, + 0x83, 0xe5, 0x2b, 0x2b, 0x45, 0xc0, 0x06, 0x02, 0xb2, 0xb9, 0x6b, 0x6f, + 0x9e, 0x23, 0x54, 0x5f, 0x37, 0x30, 0xcc, 0x0d, 0xf3, 0x4c, 0xc0, 0x1d, + 0xe3, 0xe9, 0x9b, 0x5e, 0xe5, 0xf3, 0x7e, 0x31, 0xf7, 0x2d, 0xae, 0xb6, + 0x1c, 0x7f, 0xb6, 0xbc, 0x64, 0x84, 0xa3, 0x51, 0xe6, 0x58, 0xa5, 0x1e, + 0x80, 0x38, 0xb6, 0x44, 0x12, 0x1d, 0x93, 0x8f, 0x67, 0x6a, 0x45, 0x2c, + 0xd2, 0x99, 0x48, 0x84, 0x85, 0x38, 0x32, 0xaf, 0x1f, 0xcf, 0x4a, 0x24, + 0xb8, 0x08, 0x09, 0x6c, 0x20, 0xc3, 0x48, 0x8d, 0x5c, 0x17, 0x56, 0xe3, + 0x57, 0xa3, 0x4b, 0x8e, 0xb4, 0x5a, 0xb9, 0x5f, 0x6d, 0x53, 0x4f, 0x6f, + 0x60, 0x31, 0xa2, 0x6f, 0x7f, 0xd6, 0xef, 0x4d, 0x0e, 0x74, 0xd1, 0xfa, + 0x62, 0x60, 0xe4, 0x60, 0x2e, 0x13, 0x65, 0xe2, 0x53, 0xde, 0x50, 0xb7, + 0x75, 0x4b, 0x2f, 0xdb, 0x24, 0xe1, 0x2a, 0x5b, 0xe2, 0xb3, 0x72, 0xb3, + 0x52, 0x46, 0xc6, 0xf0, 0x12, 0x27, 0x27, 0xb3, 0x3c, 0xc2, 0x31, 0x51, + 0x1f, 0x92, 0x0a, 0x18, 0x71, 0x96, 0x7b, 0x04, 0x3d, 0x30, 0xfe, 0xb7, + 0xcf, 0x60, 0xa0, 0xce, 0x6c, 0x67, 0xdd, 0xef, 0x15, 0xb1, 0xc0, 0xfe, + 0x48, 0xce, 0xf1, 0x27, 0xe4, 0x94, 0x57, 0x8c, 0x31, 0x29, 0xef, 0x77, + 0x94, 0x22, 0xc0, 0x3c, 0xc7, 0xb5, 0xb2, 0x98, 0x3b, 0xaf, 0x19, 0x6f, + 0x8c, 0x81, 0x39, 0x27, 0xe3, 0xb4, 0xde, 0xd1, 0xab, 0xe8, 0x75, 0xe8, + 0x4f, 0x67, 0xac, 0x5e, 0xf5, 0x50, 0x6f, 0x28, 0xb6, 0xfb, 0x95, 0xf5, + 0x5c, 0xef, 0x0b, 0x1c, 0x8c, 0x2c, 0x0b, 0xcf, 0xe0, 0xeb, 0x02, 0x9c, + 0x96, 0xde, 0x98, 0xff, 0x59, 0xf4, 0xf3, 0xfc, 0xf0, 0x5e, 0x03, 0x78, + 0xe6, 0x88, 0x8c, 0x47, 0x88, 0x38, 0x89, 0xc8, 0xcc, 0x56, 0x9d, 0x85, + 0x19, 0x6e, 0xf9, 0xc9, 0x94, 0x80, 0x88, 0x05, 0x59, 0x68, 0x8c, 0x0d, + 0x03, 0x80, 0xd8, 0x12, 0x68, 0x5c, 0xdc, 0x27, 0x12, 0x49, 0xce, 0x99, + 0x0c, 0xc9, 0x22, 0xf4, 0x6c, 0x22, 0x98, 0x20, 0xf9, 0xad, 0x4f, 0x1d, + 0x2e, 0x64, 0xba, 0xb0, 0xb8, 0x1a, 0xe2, 0x90, 0xa2, 0xbf, 0x00, 0x65, + 0xad, 0x3c, 0x95, 0xfb, 0x1e, 0x29, 0xdd, 0x6e, 0xe9, 0xbd, 0x59, 0x64, + 0x7e, 0x04, 0x6a, 0x83, 0x88, 0x74, 0x01, 0x8d, 0x0f, 0x82, 0xdd, 0x68, + 0x7e, 0x5d, 0x72, 0x88, 0x20, 0x20, 0x16, 0x6f, 0xc1, 0xe1, 0x20, 0xbe, + 0x12, 0x86, 0xd6, 0xdc, 0x12, 0x20, 0x45, 0x80, 0xe6, 0xb6, 0x9c, 0x45, + 0xc0, 0xe1, 0xf0, 0x68, 0xd3, 0x53, 0xda, 0x23, 0x46, 0xd4, 0x0f, 0x4b, + 0x40, 0x8c, 0x3b, 0x55, 0x50, 0xf3, 0xde, 0x80, 0x00, 0x22, 0xed, 0x20, + 0x5b, 0xc0, 0x1d, 0xd1, 0x6b, 0x51, 0xbc, 0x95, 0xae, 0x8e, 0xd8, 0xcb, + 0xb3, 0xca, 0xdc, 0x08, 0x08, 0xfb, 0x1d, 0xea, 0xec, 0x2d, 0x90, 0x8d, + 0xc8, 0x44, 0x7f, 0x36, 0x10, 0xa6, 0x44, 0x7c, 0x3f, 0x82, 0xea, 0x4a, + 0x45, 0x2f, 0x37, 0xc8, 0x08, 0x11, 0x29, 0xcb, 0x0c, 0x0c, 0xb7, 0xb9, + 0x0f, 0xd3, 0x14, 0x15, 0xe4, 0x49, 0x78, 0xd1, 0x50, 0x04, 0x9c, 0xfa, + 0x9f, 0x9a, 0x43, 0xb0, 0x8b, 0xe3, 0xec, 0xa2, 0x7d, 0xda, 0x01, 0x7b, + 0x2d, 0xbe, 0x7b, 0x24, 0xe6, 0x5f, 0x6a, 0xc6, 0x9d, 0x24, 0xae, 0xec, + 0xa2, 0xd2, 0x23, 0x05, 0x46, 0x1d, 0x1e, 0xcb, 0xdb, 0x7f, 0x39, 0xb9, + 0x39, 0x2f, 0xa3, 0x10, 0x1d, 0xec, 0x52, 0x9c, 0xee, 0xae, 0x39, 0x4b, + 0x98, 0x37, 0x60, 0xd2, 0xef, 0x86, 0xb5, 0xa7, 0xec, 0x16, 0xe8, 0x2c, + 0x63, 0xbf, 0xf3, 0x81, 0x41, 0x97, 0xdf, 0xc3, 0x8b, 0x5d, 0x7c, 0x4c, + 0x71, 0xe3, 0x91, 0x16, 0x83, 0xa9, 0x7d, 0x75, 0x14, 0x17, 0x1e, 0x0d, + 0xfd, 0xde, 0xe9, 0x56, 0xc6, 0xf7, 0x3b, 0xb8, 0x77, 0xea, 0xb1, 0xf6, + 0x87, 0xd9, 0x77, 0x7a, 0x6b, 0xea, 0x5c, 0x62, 0x94, 0x17, 0x07, 0xea, + 0x76, 0x74, 0xbd, 0xe6, 0xcd, 0x77, 0x3c, 0xec, 0xb5, 0x7c, 0x9f, 0x49, + 0x54, 0x66, 0x8c, 0xc1, 0x37, 0xdc, 0x92, 0x5d, 0xf0, 0xf1, 0x87, 0x70, + 0x96, 0xe6, 0x23, 0x55, 0xd7, 0x49, 0x49, 0x6f, 0xb3, 0xfa, 0xbe, 0x43, + 0x27, 0xbb, 0x54, 0x1f, 0x69, 0xb2, 0x70, 0x42, 0xa0, 0x9e, 0x78, 0x76, + 0x16, 0x25, 0x07, 0x6a, 0x25, 0x0c, 0xa4, 0x66, 0x9b, 0x94, 0x31, 0xa7, + 0x7f, 0xe3, 0x5f, 0xea, 0xcc, 0x92, 0x42, 0x10, 0xb5, 0x80, 0x84, 0x27, + 0x04, 0xaf, 0xd5, 0x9f, 0xcd, 0xf4, 0xe1, 0xfb, 0xfe, 0x2c, 0x1e, 0xab, + 0x2e, 0x3b, 0xeb, 0x8c, 0xbf, 0x47, 0x67, 0x7a, 0x62, 0x67, 0xda, 0xb1, + 0x2f, 0x3a, 0x98, 0x68, 0x04, 0x04, 0x23, 0xfb, 0xe7, 0xc5, 0xd4, 0xd5, + 0x18, 0x5d, 0xda, 0x45, 0xe3, 0xa2, 0xd6, 0xe8, 0xc2, 0x6e, 0xc6, 0x45, + 0xec, 0xfe, 0x59, 0x1a, 0xc0, 0xac, 0x38, 0x7b, 0x36, 0xcb, 0x43, 0xa6, + 0x3f, 0xb4, 0xd7, 0x37, 0x88, 0xad, 0x6d, 0xb5, 0x07, 0x67, 0xe9, 0x06, + 0x2b, 0x07, 0x14, 0x8e, 0x8c, 0x75, 0xc4, 0x6f, 0x23, 0x2b, 0x45, 0x1b, + 0xe6, 0xa7, 0xd9, 0xa5, 0x79, 0xf3, 0xbc, 0x07, 0x79, 0xf8, 0x63, 0x43, + 0x23, 0x75, 0x27, 0xfd, 0xe5, 0xb5, 0xcc, 0xfa, 0x63, 0x40, 0x55, 0x94, + 0x8f, 0x23, 0x98, 0x72, 0x0e, 0x69, 0x71, 0x6f, 0xd8, 0x6f, 0x38, 0x38, + 0xa8, 0x96, 0x95, 0x68, 0x61, 0xcc, 0xa4, 0x97, 0xa9, 0x63, 0x84, 0x37, + 0x7c, 0x20, 0xc4, 0x18, 0xbc, 0xc3, 0xba, 0x31, 0x89, 0xad, 0xc5, 0x9a, + 0x31, 0xcc, 0x05, 0x1c, 0x44, 0x56, 0x94, 0x51, 0x99, 0x29, 0x8e, 0x29, + 0xb7, 0xf1, 0x03, 0x77, 0x42, 0x49, 0xd7, 0x62, 0x4c, 0x03, 0xce, 0xa9, + 0x7c, 0x27, 0xcd, 0x33, 0x66, 0x56, 0xcb, 0xcf, 0x22, 0x84, 0x67, 0xad, + 0x4f, 0xd5, 0xdd, 0xdd, 0x8d, 0x15, 0x3e, 0x8b, 0x7c, 0xbf, 0x57, 0x14, + 0xcd, 0xd2, 0x31, 0xa9, 0x59, 0x64, 0x12, 0xcf, 0x6c, 0x38, 0x65, 0x83, + 0x4f, 0x9f, 0x52, 0xad, 0x33, 0x58, 0x16, 0xd8, 0xc0, 0x4e, 0xe0, 0x47, + 0x9e, 0xce, 0x4d, 0xeb, 0xf7, 0x96, 0x17, 0x0c, 0x7a, 0x79, 0x99, 0xc2, + 0x86, 0x1e, 0x7d, 0xde, 0xf0, 0x53, 0x4f, 0x55, 0xd7, 0xf8, 0xad, 0x9a, + 0xfb, 0xab, 0x5e, 0x51, 0x5c, 0xfc, 0x8b, 0x7d, 0x85, 0x3f, 0x23, 0x5c, + 0xc8, 0x34, 0x9e, 0xe9, 0x5a, 0x81, 0x49, 0x28, 0xd4, 0xb5, 0xa2, 0x34, + 0xc3, 0x92, 0xaf, 0x84, 0xa9, 0xa6, 0xe9, 0xd4, 0x28, 0x06, 0x74, 0x91, + 0x46, 0xb4, 0xb6, 0xcb, 0xa8, 0x32, 0xec, 0xf5, 0x2b, 0xff, 0x0d, 0xab, + 0x55, 0xff, 0x75, 0x43, 0x70, 0xb7, 0x65, 0x91, 0x6b, 0xa1, 0x84, 0x12, + 0x64, 0xb1, 0x41, 0x9f, 0xb0, 0x63, 0x14, 0x14, 0xea, 0xa8, 0x24, 0x93, + 0x7a, 0x2d, 0xa6, 0xbb, 0x1d, 0x6e, 0xe3, 0x88, 0x37, 0x78, 0xda, 0x7c, + 0x5a, 0x75, 0x1f, 0x85, 0xa1, 0x77, 0xd9, 0xa1, 0xda, 0xda, 0xba, 0x84, + 0x3d, 0x7d, 0x81, 0x40, 0x75, 0xe7, 0x82, 0xfa, 0x96, 0x58, 0x69, 0x6d, + 0x52, 0xac, 0xee, 0x82, 0x26, 0x6a, 0x95, 0x7d, 0xf9, 0x0c, 0x33, 0x20, + 0x19, 0xe8, 0x5c, 0x4b, 0x82, 0x69, 0x8a, 0x50, 0x86, 0x61, 0x88, 0x8c, + 0xac, 0x5d, 0xeb, 0x85, 0x2d, 0xde, 0x42, 0x42, 0x10, 0xd3, 0xde, 0x79, + 0x4d, 0x0b, 0xe3, 0x8b, 0x11, 0x5a, 0x3c, 0xb3, 0xae, 0x8e, 0xcf, 0x08, + 0x15, 0x4a, 0x59, 0xc7, 0x14, 0xf9, 0xa3, 0x68, 0xdb, 0x3c, 0xe1, 0xb8, + 0x67, 0x02, 0xd9, 0xd4, 0x36, 0x6d, 0x4d, 0x66, 0x69, 0x83, 0xbf, 0xb6, + 0xd1, 0xd2, 0x67, 0xdd, 0x9f, 0xba, 0x5e, 0x9d, 0xa7, 0x3d, 0x33, 0x56, + 0x80, 0x2c, 0x80, 0xe8, 0xc0, 0xda, 0x4d, 0x4a, 0xf1, 0x9e, 0x6d, 0xdb, + 0x1a, 0x11, 0x1f, 0x1a, 0x14, 0x82, 0x58, 0x88, 0x5f, 0x33, 0xdc, 0x76, + 0x54, 0x85, 0x0b, 0xce, 0x76, 0x94, 0x95, 0x49, 0xc5, 0x44, 0x14, 0x56, + 0xa5, 0x62, 0x88, 0xf1, 0xb5, 0x67, 0xbb, 0x94, 0x74, 0xfb, 0x5f, 0xb1, + 0x73, 0x48, 0x83, 0x28, 0xf9, 0xec, 0xad, 0x67, 0x8c, 0x38, 0x45, 0xdd, + 0xc6, 0x19, 0xcb, 0x56, 0xb2, 0x38, 0xc1, 0x14, 0xd3, 0xe4, 0x7b, 0x28, + 0x0f, 0x69, 0x9e, 0x6e, 0x6d, 0x4d, 0x14, 0xa5, 0x28, 0x0c, 0xd4, 0x87, + 0xde, 0x91, 0x65, 0x4f, 0x51, 0xd3, 0xbb, 0x0d, 0xcc, 0x6e, 0x8c, 0x10, + 0xa0, 0xf1, 0xdf, 0x37, 0x02, 0x65, 0xb1, 0x50, 0xc5, 0x1f, 0xa9, 0xc2, + 0xf2, 0x5a, 0x5b, 0xeb, 0xf0, 0x52, 0x35, 0x48, 0x83, 0x60, 0x6a, 0x51, + 0x03, 0xde, 0xf0, 0xc7, 0x82, 0xbd, 0xad, 0xad, 0xeb, 0xe7, 0x6f, 0x33, + 0xb9, 0xa8, 0x14, 0x2c, 0x79, 0x70, 0xeb, 0x74, 0x6c, 0x81, 0xb0, 0x3c, + 0x37, 0x05, 0x06, 0xf7, 0xe9, 0x14, 0x88, 0xac, 0x2e, 0xf9, 0x60, 0x08, + 0x4f, 0xf3, 0x10, 0x41, 0xa2, 0x5c, 0xe5, 0xed, 0x45, 0x94, 0x3a, 0x79, + 0x77, 0xc0, 0x90, 0x87, 0xc5, 0xd8, 0x69, 0x5f, 0x49, 0x48, 0xe3, 0x76, + 0x87, 0xe0, 0x81, 0x92, 0x34, 0xc1, 0x09, 0x33, 0x17, 0x93, 0xbd, 0xe1, + 0xbe, 0xa4, 0x0d, 0xd5, 0xac, 0xdd, 0xf6, 0x76, 0x6a, 0x06, 0xd8, 0xd8, + 0x35, 0xf3, 0xcb, 0x0e, 0x6f, 0x66, 0x5a, 0xfc, 0x48, 0xd1, 0x70, 0xfc, + 0xf8, 0x8c, 0xa4, 0x05, 0xc2, 0x94, 0xa8, 0x67, 0x49, 0x59, 0xd6, 0xd5, + 0xc3, 0xab, 0xec, 0x10, 0x3a, 0x86, 0xd5, 0xe9, 0x12, 0x2f, 0x58, 0x9e, + 0xe4, 0x24, 0x0a, 0x5c, 0x51, 0x32, 0xd5, 0x09, 0xba, 0xbe, 0x45, 0xe0, + 0x1f, 0xae, 0x92, 0x59, 0x59, 0x4d, 0xf4, 0xa5, 0xad, 0xad, 0xfb, 0xd9, + 0xd6, 0xd2, 0x95, 0xb5, 0x04, 0xc6, 0xe8, 0x78, 0x99, 0x52, 0x06, 0xbd, + 0x2d, 0x6a, 0x3f, 0x6e, 0xa0, 0x85, 0x46, 0x84, 0xa3, 0x58, 0xf9, 0xb8, + 0xa3, 0x59, 0x8c, 0x76, 0x42, 0xab, 0xf0, 0xef, 0xbf, 0x95, 0x07, 0x33, + 0xa0, 0x25, 0x98, 0x3b, 0xb1, 0x9b, 0x61, 0xe6, 0x5b, 0x4e, 0x8c, 0x36, + 0x3f, 0x27, 0x50, 0x00, 0xde, 0x7a, 0x0f, 0x8d, 0xe1, 0x43, 0x0e, 0x8b, + 0x70, 0x64, 0x31, 0x60, 0x8b, 0x38, 0xcd, 0x7b, 0x6e, 0x76, 0xee, 0x12, + 0xdf, 0x42, 0xaf, 0xd7, 0x45, 0xaf, 0x6b, 0x6b, 0x8e, 0xfe, 0x7b, 0x53, + 0x74, 0xfb, 0x92, 0x09, 0x4b, 0xdc, 0xdf, 0xa3, 0x9b, 0x5f, 0x16, 0xfc, + 0xe8, 0x6f, 0xca, 0x63, 0xcb, 0x32, 0x79, 0x90, 0x71, 0x9e, 0xb0, 0xeb, + 0xbd, 0xc1, 0xe1, 0x6b, 0x04, 0x2f, 0xf3, 0xd4, 0xda, 0x48, 0x61, 0x88, + 0xb4, 0xec, 0x30, 0x75, 0x37, 0x6b, 0x36, 0xc7, 0xa8, 0xe0, 0xb6, 0xf2, + 0x01, 0x12, 0xfe, 0x3a, 0x7f, 0xc1, 0x23, 0xe0, 0xf9, 0x7c, 0x7e, 0x5a, + 0x04, 0x28, 0xbf, 0xcf, 0xd0, 0xe4, 0x31, 0xdc, 0x72, 0x36, 0x74, 0x39, + 0xed, 0x5a, 0x49, 0x3e, 0x79, 0x34, 0x21, 0xdd, 0xdc, 0xca, 0xfb, 0x78, + 0x23, 0x4d, 0x4a, 0x86, 0xd1, 0x8b, 0x83, 0x50, 0xbf, 0x86, 0x60, 0xbb, + 0x59, 0x41, 0x29, 0x6e, 0x50, 0x6a, 0x5a, 0x50, 0x23, 0xb5, 0x5a, 0xad, + 0x68, 0xa0, 0xc3, 0xb9, 0x2c, 0x9b, 0x72, 0x7d, 0x04, 0x37, 0xb3, 0x50, + 0x11, 0x2e, 0x64, 0xda, 0x94, 0xab, 0x11, 0x15, 0x2e, 0x3c, 0xf7, 0x22, + 0xd5, 0xce, 0x53, 0x97, 0xa6, 0xff, 0x27, 0xa5, 0x64, 0xd6, 0x88, 0x4f, + 0x96, 0xc5, 0x90, 0x71, 0x31, 0xed, 0x22, 0x10, 0x8a, 0xe3, 0xa4, 0x0c, + 0x67, 0xc6, 0x5d, 0x3d, 0xc9, 0xb7, 0xc6, 0x55, 0xb1, 0xc9, 0xb7, 0x3a, + 0xcf, 0x09, 0xe6, 0x2f, 0xf2, 0xaa, 0xeb, 0xcb, 0xd5, 0x0d, 0x03, 0x1b, + 0x9b, 0x72, 0x9f, 0xbf, 0xfb, 0xa5, 0x4e, 0xec, 0xe7, 0xf9, 0x27, 0xf3, + 0x9e, 0x94, 0xce, 0x94, 0x56, 0xb6, 0xdb, 0x8f, 0xdf, 0x51, 0x19, 0xa0, + 0xfb, 0xf2, 0xcd, 0xba, 0xce, 0x92, 0xf1, 0xc2, 0x23, 0xe3, 0xa0, 0xd7, + 0xff, 0xc8, 0x76, 0x1d, 0x34, 0x5b, 0xfc, 0x88, 0x3f, 0x2d, 0x31, 0xad, + 0xff, 0xc2, 0xf8, 0xb4, 0xa5, 0x7b, 0x7d, 0x77, 0xf7, 0x81, 0x1d, 0xbe, + 0xee, 0x79, 0xfc, 0xf3, 0xaa, 0x07, 0x6b, 0x7f, 0xf5, 0x9e, 0x5d, 0x47, + 0xaf, 0x8f, 0x2d, 0xc2, 0x6b, 0x2f, 0xc3, 0xa8, 0xcd, 0x81, 0x75, 0x92, + 0x75, 0x67, 0x77, 0x50, 0xf3, 0xdd, 0xbe, 0xe2, 0x9f, 0x1f, 0x7d, 0x13, + 0xd7, 0x05, 0xbe, 0x6f, 0x6f, 0xad, 0x6c, 0xa6, 0x2d, 0xf9, 0x28, 0x2e, + 0x67, 0x3a, 0xe5, 0xdb, 0x14, 0xb7, 0x72, 0x1c, 0xc3, 0x20, 0xc6, 0x8e, + 0xae, 0xeb, 0xa5, 0xb3, 0x7b, 0x15, 0xf9, 0x79, 0x7a, 0x6a, 0xc6, 0xcc, + 0xbe, 0xa3, 0x35, 0xaf, 0xa8, 0xa2, 0x99, 0xf4, 0x1b, 0x01, 0x68, 0xc5, + 0xf2, 0x67, 0x53, 0x43, 0x18, 0x2f, 0xf7, 0x3d, 0x41, 0x37, 0x87, 0x30, + 0x72, 0xfd, 0xac, 0xfe, 0x6c, 0x75, 0x93, 0xfb, 0x9f, 0xa4, 0x0f, 0xae, + 0x08, 0x9d, 0xe7, 0xa7, 0xaf, 0xfb, 0xe5, 0x46, 0x5e, 0xfe, 0xfe, 0x59, + 0xb0, 0x79, 0xb3, 0xed, 0x29, 0x14, 0x0a, 0xe7, 0x75, 0x39, 0x57, 0x2d, + 0xef, 0xb1, 0x0a, 0x56, 0xd0, 0x10, 0xaf, 0xad, 0x31, 0xd7, 0x8c, 0xac, + 0x61, 0x88, 0x82, 0x21, 0x16, 0xb1, 0x13, 0x0a, 0x60, 0xa2, 0x45, 0x2f, + 0x32, 0xde, 0xb3, 0x77, 0xee, 0xac, 0xb9, 0x68, 0xc5, 0xad, 0x05, 0x0d, + 0x53, 0xc1, 0x0b, 0x49, 0xff, 0xc3, 0x9a, 0xd2, 0x7b, 0xac, 0xeb, 0xc2, + 0x61, 0x76, 0xfd, 0xba, 0x81, 0x81, 0x93, 0xeb, 0x1b, 0x6f, 0xa2, 0xd4, + 0xdf, 0xa2, 0xab, 0xf0, 0x57, 0x72, 0xa4, 0xbd, 0x5d, 0x50, 0x40, 0xe7, + 0xbd, 0x85, 0x29, 0xc7, 0xb6, 0x46, 0x87, 0x14, 0xe6, 0x14, 0xe8, 0x63, + 0x62, 0x96, 0xcd, 0xe8, 0xf8, 0xce, 0xdc, 0xbd, 0xa6, 0x2d, 0x2d, 0xda, + 0xf4, 0xce, 0xd5, 0xda, 0xad, 0xcd, 0x2d, 0x5b, 0xe3, 0x0a, 0x12, 0xa3, + 0x23, 0x0c, 0x82, 0x2f, 0xdd, 0x9b, 0xba, 0xf3, 0xb3, 0x41, 0x73, 0x4d, + 0xa8, 0xc1, 0x95, 0xd7, 0x64, 0xab, 0x03, 0xfd, 0x69, 0xc6, 0xac, 0x38, + 0x4e, 0x52, 0x74, 0x60, 0x64, 0x88, 0x3b, 0xa3, 0x69, 0xe7, 0x79, 0x5d, + 0x74, 0xda, 0x93, 0xaf, 0x49, 0x93, 0x73, 0x0c, 0x4a, 0x44, 0x45, 0xbd, + 0xfa, 0xfa, 0xea, 0xbe, 0x94, 0x40, 0x90, 0xfe, 0xf4, 0x67, 0x50, 0x73, + 0x6a, 0xb8, 0x26, 0x1d, 0x62, 0xd8, 0x26, 0xb6, 0x50, 0x9f, 0x5e, 0xdb, + 0xd7, 0xd1, 0x19, 0xb5, 0xea, 0x26, 0x11, 0x33, 0xfe, 0x93, 0xf7, 0x94, + 0xfd, 0xe7, 0x5c, 0x49, 0x5c, 0xcc, 0xaf, 0x62, 0x79, 0xca, 0xab, 0xa7, + 0x13, 0x9e, 0xd4, 0xa5, 0xee, 0xe8, 0x35, 0x7f, 0xaf, 0xc1, 0xf2, 0xe7, + 0xdf, 0x97, 0xa2, 0xe6, 0x2c, 0x65, 0x52, 0xac, 0xfa, 0xb0, 0x3c, 0xd4, + 0xd0, 0x50, 0xf9, 0x68, 0x6a, 0xb0, 0xd8, 0xf4, 0xdf, 0xcb, 0x38, 0x86, + 0x8f, 0x56, 0x2b, 0x55, 0xe4, 0xa1, 0xb3, 0xcb, 0x63, 0x3c, 0xe2, 0xaf, + 0x2d, 0xa0, 0xfd, 0xd0, 0xa4, 0x31, 0xce, 0x14, 0xdb, 0x78, 0xfd, 0xff, + 0xb7, 0x7b, 0x9c, 0x58, 0x1c, 0xa1, 0x54, 0x9f, 0xd6, 0xe0, 0xd2, 0x0b, + 0xae, 0x5e, 0xcd, 0xd5, 0x96, 0xb2, 0xad, 0xf7, 0x92, 0xbd, 0x7b, 0x45, + 0xa2, 0x5a, 0x45, 0xfa, 0x5e, 0x28, 0x26, 0xeb, 0x92, 0x78, 0xb9, 0x2d, + 0x11, 0xd5, 0xa0, 0xeb, 0x1d, 0xcd, 0xdc, 0x16, 0xef, 0x75, 0x7b, 0x79, + 0x80, 0x9a, 0xe9, 0x25, 0x5f, 0xaa, 0xcf, 0x6d, 0xb6, 0x34, 0x23, 0xea, + 0x6e, 0xf6, 0xca, 0xf8, 0xca, 0x98, 0x46, 0x78, 0x3a, 0x50, 0x2a, 0xbb, + 0x62, 0x9b, 0xe1, 0xe5, 0x14, 0x5e, 0x51, 0xfa, 0x9f, 0x1b, 0xce, 0xb3, + 0x0a, 0xbb, 0x8a, 0x7a, 0xd8, 0xa0, 0xe0, 0x53, 0x5e, 0xde, 0xb6, 0x46, + 0x5e, 0x7a, 0xa3, 0xa6, 0xae, 0xf9, 0xa8, 0x9c, 0xb5, 0xb4, 0x84, 0x82, + 0xc8, 0x1c, 0x3e, 0xce, 0x40, 0xc2, 0x8b, 0xcd, 0x13, 0xb9, 0x0f, 0x86, + 0xf0, 0x31, 0xd7, 0x23, 0x12, 0xec, 0xcb, 0x07, 0xa3, 0xac, 0x15, 0xf0, + 0xa1, 0x79, 0x00, 0xc3, 0xb8, 0x91, 0x1b, 0x21, 0xfc, 0xc4, 0xf8, 0x79, + 0xa6, 0xce, 0x80, 0x13, 0x39, 0xe7, 0xb5, 0xa5, 0x84, 0x47, 0x40, 0x02, + 0x23, 0x26, 0x4a, 0x88, 0x1b, 0x1b, 0x67, 0x09, 0xdb, 0x4e, 0xb2, 0x17, + 0xad, 0x2c, 0x61, 0x5d, 0x2e, 0xa5, 0x72, 0x59, 0x96, 0x9c, 0x63, 0x59, + 0x76, 0x56, 0xc2, 0x04, 0x33, 0x81, 0x1c, 0xb0, 0xe4, 0x10, 0x1c, 0xfd, + 0x17, 0x7d, 0xe9, 0xd2, 0xb5, 0x08, 0xbe, 0xe6, 0x8c, 0x0a, 0x17, 0xae, + 0x50, 0x49, 0x28, 0x08, 0x6a, 0x34, 0xc2, 0xae, 0x54, 0xd5, 0xbd, 0xdc, + 0x20, 0x2d, 0xc6, 0xdc, 0x94, 0x9f, 0x5b, 0xd5, 0xdb, 0xf7, 0x80, 0xba, + 0x75, 0x55, 0x73, 0xb6, 0x24, 0xf6, 0xb0, 0xea, 0xb0, 0xe6, 0x6d, 0xa0, + 0x0d, 0x57, 0x0b, 0x8c, 0xae, 0x13, 0x30, 0x38, 0x9f, 0xa2, 0xd6, 0x6a, + 0x18, 0x37, 0xf3, 0x4b, 0xe2, 0x95, 0xbf, 0x4f, 0x63, 0x9a, 0xbb, 0x6f, + 0x56, 0x9b, 0x4c, 0xb2, 0x5c, 0x6d, 0xb2, 0x76, 0x76, 0xa3, 0xb0, 0xe8, + 0xc2, 0x34, 0x76, 0xdf, 0x75, 0x41, 0x86, 0xbf, 0x34, 0xb3, 0x5e, 0x16, + 0xba, 0x4f, 0x9a, 0x75, 0xa1, 0x20, 0x9f, 0x59, 0x63, 0xa5, 0x57, 0xaa, + 0xaa, 0x7b, 0x99, 0x45, 0x23, 0x5f, 0x12, 0x6f, 0x82, 0x19, 0x84, 0x24, + 0xe9, 0x8e, 0xbf, 0xde, 0xfa, 0x01, 0xba, 0x77, 0xb7, 0x97, 0x78, 0x81, + 0xc5, 0x69, 0x73, 0x36, 0xe8, 0xcf, 0x1a, 0xc5, 0x22, 0x74, 0x91, 0xce, + 0xee, 0x0a, 0xe9, 0xe3, 0x88, 0x12, 0x04, 0xd8, 0xd3, 0x00, 0x9a, 0x83, + 0x05, 0x77, 0x45, 0x47, 0x81, 0x71, 0x4b, 0x57, 0x3f, 0x76, 0x67, 0x0a, + 0x13, 0x46, 0x60, 0x15, 0x2e, 0xbb, 0xdb, 0x25, 0x62, 0x11, 0xdb, 0xcc, + 0x20, 0x5a, 0x39, 0x4d, 0xa1, 0xdf, 0xc0, 0xc8, 0x15, 0x3c, 0x73, 0x6b, + 0xbd, 0x54, 0x44, 0xf7, 0x41, 0x17, 0x97, 0x43, 0xb2, 0x92, 0x1d, 0x16, + 0xf3, 0x06, 0xfb, 0xc4, 0x2b, 0x91, 0x44, 0xa2, 0xd8, 0x41, 0xe5, 0x50, + 0x92, 0x78, 0x84, 0xf9, 0x92, 0xb8, 0xe9, 0x6b, 0x78, 0xa6, 0x8d, 0x09, + 0x22, 0xe9, 0xc5, 0x4c, 0xd8, 0x86, 0x0f, 0xf5, 0x9a, 0x39, 0x07, 0xe3, + 0xba, 0xdc, 0x4f, 0x43, 0xa6, 0xac, 0xb2, 0x32, 0xb9, 0x4e, 0xbc, 0x15, + 0xc9, 0x5e, 0xe2, 0x2d, 0x0b, 0x1c, 0x0a, 0xf7, 0xee, 0xde, 0x83, 0x0c, + 0x48, 0x58, 0xbf, 0xd7, 0x0f, 0x75, 0x44, 0xc6, 0x2f, 0x1c, 0x06, 0x36, + 0x33, 0x54, 0x8b, 0x88, 0xc6, 0x6c, 0xe0, 0x8e, 0x4d, 0xbb, 0x75, 0x83, + 0x85, 0x7d, 0xaf, 0x70, 0x0f, 0x92, 0x3c, 0x1f, 0x53, 0x7d, 0xb5, 0xb1, + 0x71, 0x69, 0xfe, 0xbc, 0xf7, 0xe7, 0x41, 0x42, 0x58, 0x14, 0x1c, 0x36, + 0x8d, 0x8d, 0x4f, 0x98, 0x4c, 0x88, 0x17, 0xe4, 0x6d, 0xb7, 0x1a, 0xf9, + 0xed, 0xee, 0x09, 0x4e, 0xdb, 0x8e, 0x83, 0xb8, 0x91, 0x13, 0xe8, 0x6b, + 0x8b, 0x1a, 0x88, 0xaf, 0xef, 0xe5, 0xe2, 0xb5, 0xe2, 0xdb, 0x70, 0xf5, + 0x94, 0x55, 0x23, 0x45, 0xc3, 0xab, 0xa0, 0x71, 0x6b, 0xe4, 0x3f, 0xf3, + 0x8d, 0xf0, 0x19, 0xf9, 0xfe, 0x29, 0x75, 0xbd, 0x0d, 0xdd, 0x4b, 0xdb, + 0xed, 0x0e, 0xce, 0x58, 0x37, 0x02, 0xb0, 0x47, 0x82, 0x41, 0xfe, 0xcc, + 0x86, 0xd1, 0xea, 0x95, 0x57, 0x8a, 0x8b, 0x51, 0xd0, 0x17, 0x3b, 0x2d, + 0x8a, 0x53, 0xe2, 0x34, 0xd5, 0x40, 0x28, 0x4e, 0xc1, 0x29, 0xfa, 0x14, + 0x3a, 0x43, 0x9f, 0xc1, 0xb8, 0x25, 0x1c, 0x7f, 0xfc, 0xd4, 0xd4, 0xf4, + 0x74, 0x0f, 0xa7, 0x2d, 0xce, 0x32, 0xdf, 0x86, 0x66, 0x11, 0x49, 0x6b, + 0x16, 0xcf, 0x8a, 0xa9, 0x8e, 0x27, 0x77, 0x45, 0xbb, 0xbe, 0x62, 0xdd, + 0xd9, 0x19, 0x73, 0x73, 0x14, 0x2e, 0xa8, 0xd0, 0x22, 0x10, 0xd2, 0xf1, + 0xfa, 0xc3, 0xd9, 0x09, 0x23, 0x57, 0xf7, 0xe6, 0x58, 0x8a, 0x71, 0x48, + 0xc8, 0xa3, 0xe2, 0xcd, 0xeb, 0x12, 0x82, 0x20, 0xcc, 0xf2, 0xca, 0x93, + 0x95, 0x5c, 0x7f, 0xc2, 0x0a, 0x15, 0xdd, 0xfa, 0x4b, 0x25, 0x9b, 0x74, + 0xcd, 0x2b, 0x24, 0xec, 0xd5, 0x47, 0x76, 0x21, 0x4b, 0xdb, 0x8b, 0xbb, + 0x39, 0x64, 0x6e, 0x3b, 0x3a, 0x54, 0xc4, 0x5d, 0x4e, 0x58, 0x91, 0xb5, + 0x29, 0x79, 0xd9, 0x00, 0x90, 0x54, 0x1a, 0x98, 0x53, 0xd3, 0x0c, 0x2d, + 0x1e, 0x96, 0x47, 0x89, 0x34, 0xfd, 0x33, 0x19, 0x73, 0xad, 0x08, 0x32, + 0x56, 0xe7, 0xd3, 0xdd, 0xd6, 0xf9, 0x75, 0x87, 0xe3, 0xcb, 0xca, 0xbc, + 0xe5, 0x65, 0x0f, 0x29, 0x33, 0x36, 0x36, 0xb2, 0xb7, 0x2c, 0xa5, 0xf9, + 0x0b, 0x0a, 0xd0, 0x09, 0x57, 0x9b, 0x6d, 0x81, 0xca, 0xac, 0x6e, 0xfb, + 0xe7, 0x70, 0xd8, 0xbe, 0xdc, 0x26, 0xc1, 0x60, 0xc0, 0x38, 0xbd, 0x4d, + 0x20, 0x29, 0x4c, 0x5f, 0x9f, 0xb8, 0x67, 0x4f, 0x2a, 0xaa, 0x97, 0x11, + 0x78, 0xf5, 0x2a, 0x04, 0xf6, 0xb9, 0xde, 0xa7, 0x9e, 0xb2, 0x58, 0xbc, + 0x5a, 0xc2, 0x63, 0x4a, 0x4e, 0x65, 0xbe, 0xb8, 0x8b, 0xed, 0x4c, 0x4a, + 0xde, 0x3d, 0xe8, 0x2e, 0xd4, 0x58, 0xcb, 0xac, 0xb7, 0x91, 0xaf, 0x0b, + 0xc4, 0x34, 0xfb, 0x87, 0x08, 0xc2, 0x25, 0xad, 0xce, 0xe9, 0xe5, 0x86, + 0x9a, 0xb2, 0xd2, 0x0b, 0xa5, 0x33, 0xa5, 0xce, 0xd2, 0xf8, 0xf1, 0x0e, + 0x6f, 0xc7, 0x97, 0x1d, 0x73, 0x1d, 0xc6, 0x75, 0x5f, 0x1d, 0x42, 0x9c, + 0xb1, 0xf8, 0xbc, 0x42, 0x36, 0x33, 0xb3, 0x4f, 0x11, 0x75, 0x73, 0xcc, + 0xaf, 0xc3, 0x86, 0x39, 0xf8, 0xf4, 0xc8, 0x52, 0xa5, 0x92, 0xbb, 0x3f, + 0xa1, 0x4b, 0xfd, 0x40, 0xf3, 0x5f, 0xc9, 0xce, 0xbf, 0x68, 0x4e, 0x74, + 0x64, 0xc7, 0x01, 0x6a, 0x1b, 0x54, 0xed, 0xe0, 0x31, 0x4c, 0xf3, 0x8f, + 0x32, 0x27, 0xe3, 0x69, 0x77, 0x7e, 0x6b, 0xd2, 0x73, 0x6e, 0x28, 0xdf, + 0x1d, 0xdf, 0x92, 0x66, 0x60, 0x25, 0xaa, 0x50, 0x2a, 0x66, 0x95, 0x9a, + 0x3e, 0x40, 0x5a, 0x28, 0x80, 0x46, 0xaa, 0xae, 0xc5, 0x2f, 0x19, 0xa4, + 0xa6, 0x47, 0xe6, 0x0c, 0x64, 0xbc, 0x8d, 0x79, 0x67, 0x1d, 0x2b, 0x26, + 0x26, 0xe8, 0xea, 0x36, 0x76, 0x4a, 0x78, 0x26, 0x76, 0x31, 0x16, 0x10, + 0x09, 0xaf, 0x9d, 0x9a, 0x11, 0x2c, 0x4f, 0x7f, 0x30, 0x60, 0x39, 0x6b, + 0xf2, 0x70, 0xaf, 0x78, 0xd5, 0x5f, 0xa2, 0x05, 0x9a, 0xee, 0xeb, 0x7d, + 0xc1, 0xd4, 0x5b, 0x8a, 0xe7, 0xfa, 0xd6, 0x74, 0x3b, 0x96, 0x4b, 0xfa, + 0xde, 0xb7, 0xcc, 0x3c, 0xb4, 0xab, 0x63, 0xd7, 0xa1, 0xcc, 0x9c, 0xac, + 0x7d, 0xdc, 0x5a, 0x6e, 0x5f, 0x55, 0x79, 0x1b, 0x28, 0xb1, 0x74, 0x66, + 0x73, 0xb6, 0x5e, 0xca, 0x74, 0xba, 0x97, 0xd1, 0x57, 0x55, 0x17, 0x54, + 0xfe, 0x50, 0x68, 0xe3, 0x0f, 0x4b, 0x5c, 0xcd, 0x07, 0x34, 0x1c, 0xc0, + 0x58, 0x47, 0x5f, 0x3c, 0x83, 0x5f, 0x3e, 0x62, 0xd5, 0xaa, 0x69, 0xf9, + 0x67, 0x34, 0xf9, 0x5f, 0x4d, 0x70, 0x81, 0x2f, 0xba, 0xf1, 0x86, 0x62, + 0x5d, 0x66, 0x9a, 0x78, 0x41, 0xc0, 0xa7, 0xaf, 0x5c, 0x9b, 0xaf, 0x42, + 0xa5, 0xef, 0x34, 0x7d, 0x47, 0x2d, 0xdd, 0x43, 0xd8, 0x2a, 0xed, 0xc3, + 0xd5, 0xeb, 0xbb, 0xaa, 0x3b, 0xfc, 0x15, 0x68, 0xe1, 0x15, 0x11, 0x24, + 0x6b, 0x92, 0x67, 0x31, 0x7d, 0x7a, 0xed, 0x83, 0x67, 0x9d, 0x13, 0xc5, + 0xbc, 0xc0, 0x5a, 0x6b, 0xe1, 0xc3, 0xc7, 0xb6, 0xaf, 0x75, 0xd9, 0x5d, + 0xf6, 0xb5, 0x0f, 0x6f, 0x3b, 0xf9, 0xc4, 0x5e, 0xf4, 0xb5, 0x10, 0x82, + 0x5b, 0xe2, 0x43, 0x0f, 0x8b, 0x0d, 0x8d, 0xd6, 0x26, 0xc3, 0x17, 0x12, + 0xe6, 0x22, 0xef, 0xdb, 0x30, 0x3f, 0xe0, 0x8d, 0xfa, 0xf6, 0x76, 0xfb, + 0xc3, 0xcf, 0xfc, 0xf1, 0xf9, 0xe7, 0x6f, 0x3c, 0x27, 0xf7, 0x1d, 0xbc, + 0xf5, 0x8d, 0x72, 0x57, 0xd6, 0xcd, 0x28, 0xd5, 0x41, 0x0e, 0x4a, 0x81, + 0x11, 0x51, 0xd0, 0x5a, 0x38, 0xf5, 0x70, 0xe4, 0x6f, 0x04, 0xdd, 0x57, + 0x2a, 0xd8, 0xca, 0xd5, 0xed, 0xcb, 0x04, 0xa1, 0xbc, 0x68, 0xc7, 0x32, + 0x2f, 0x07, 0x05, 0x6b, 0xc9, 0x11, 0x2b, 0x35, 0xe3, 0x52, 0x25, 0x1c, + 0x0b, 0xa4, 0xd9, 0x6a, 0xa9, 0x77, 0x31, 0x29, 0xac, 0x83, 0x4b, 0xed, + 0x11, 0xde, 0x4a, 0x17, 0xc7, 0x6b, 0xf7, 0x73, 0x6b, 0x08, 0x0b, 0x42, + 0x97, 0x8c, 0xc8, 0x07, 0x81, 0x50, 0xb9, 0x66, 0x4c, 0x53, 0x17, 0x17, + 0xa5, 0x93, 0x65, 0xc9, 0x42, 0xb2, 0x26, 0xd9, 0x0d, 0x10, 0x8f, 0x27, + 0x7a, 0xa5, 0x3b, 0x62, 0x7a, 0xa4, 0x4e, 0x77, 0xc6, 0x25, 0xd1, 0x25, + 0x06, 0x5f, 0x14, 0x10, 0xa3, 0x40, 0xa9, 0xeb, 0x17, 0x45, 0xa4, 0x3f, + 0x66, 0x91, 0x9f, 0x4e, 0xab, 0xd4, 0x84, 0x23, 0x7f, 0x17, 0xec, 0xf9, + 0x89, 0x0a, 0x8f, 0xe4, 0xc6, 0xcb, 0x16, 0x33, 0x22, 0xb8, 0x51, 0x19, + 0xc0, 0x89, 0x8d, 0xc2, 0x82, 0x29, 0x68, 0xd2, 0xce, 0x00, 0x4d, 0x2b, + 0x10, 0x35, 0x0b, 0xf9, 0xa5, 0x9f, 0x37, 0xd0, 0x0a, 0x91, 0x65, 0x59, + 0x51, 0x41, 0xd3, 0x08, 0x16, 0xb8, 0x15, 0x0a, 0xc1, 0x0a, 0x45, 0xf6, + 0x42, 0x01, 0x51, 0x46, 0xdd, 0xf9, 0xf7, 0xbf, 0x0d, 0x55, 0x58, 0xc9, + 0x57, 0x08, 0xe8, 0x90, 0x6a, 0x50, 0xe2, 0x91, 0x0c, 0xaa, 0xa0, 0xb4, + 0x56, 0x6e, 0x42, 0x30, 0x8d, 0xdf, 0xac, 0x4c, 0xf2, 0xf9, 0x92, 0x14, + 0x7e, 0x45, 0xe4, 0x6b, 0xa2, 0xe2, 0x7d, 0xe0, 0xb6, 0x62, 0xd9, 0x2f, + 0x56, 0x26, 0xbe, 0x0c, 0xde, 0x55, 0x48, 0xff, 0xb2, 0x4c, 0x64, 0x2f, + 0xb2, 0xec, 0x31, 0x47, 0xb0, 0xb1, 0x6f, 0x91, 0x13, 0x98, 0xf8, 0x1a, + 0xb8, 0xc6, 0x18, 0x4c, 0x36, 0xfc, 0xca, 0x45, 0xb8, 0xd0, 0xcc, 0x72, + 0x2e, 0xb5, 0xc8, 0x17, 0x7d, 0x15, 0x76, 0xc8, 0xa6, 0x3e, 0xed, 0x21, + 0xd7, 0x0f, 0xdd, 0x41, 0x29, 0xbd, 0x3b, 0xb8, 0xe3, 0x74, 0xc1, 0x53, + 0xcb, 0xc3, 0x14, 0xd3, 0x8a, 0x94, 0x84, 0xb9, 0x7e, 0xe8, 0x83, 0x1a, + 0x36, 0xd9, 0x2a, 0xd1, 0x56, 0xd3, 0xea, 0x92, 0xe0, 0x56, 0x24, 0x40, + 0xe4, 0x3f, 0x7e, 0x2e, 0xf6, 0x94, 0x66, 0x09, 0x89, 0xf4, 0x43, 0x02, + 0xf2, 0xa0, 0x10, 0xdf, 0x8e, 0xda, 0xa7, 0xf0, 0x56, 0x44, 0x69, 0xda, + 0x83, 0x81, 0x25, 0xe4, 0xb3, 0x9e, 0x75, 0x11, 0xc3, 0xf6, 0x7a, 0xfc, + 0xcd, 0x28, 0xb8, 0xb6, 0xdd, 0x4c, 0x08, 0xe1, 0x9f, 0x53, 0x1d, 0x60, + 0xf6, 0xc2, 0x4e, 0xb5, 0x00, 0x0a, 0xa3, 0x25, 0x2b, 0x8a, 0x47, 0x76, + 0x8f, 0xa5, 0x24, 0x4b, 0x4d, 0x70, 0x9c, 0xcb, 0x5d, 0x68, 0xd8, 0xde, + 0x60, 0xde, 0xbe, 0xb8, 0xad, 0xd1, 0xc2, 0x8b, 0x6c, 0x5b, 0xdc, 0x0e, + 0x3b, 0x63, 0xdb, 0x2d, 0x1d, 0x26, 0xa4, 0x26, 0xb1, 0xee, 0xd0, 0x84, + 0x58, 0x93, 0xc9, 0xc4, 0x5e, 0x6a, 0x29, 0x92, 0xed, 0x40, 0x54, 0x84, + 0x7b, 0x02, 0x5a, 0x7d, 0x90, 0xd9, 0xd3, 0xa2, 0x57, 0xf3, 0x5f, 0xc1, + 0x31, 0x8e, 0x50, 0xdc, 0x18, 0x8c, 0x82, 0xc6, 0x27, 0x7b, 0xd7, 0xe0, + 0x4c, 0xca, 0x8c, 0xc3, 0xe1, 0x93, 0x2e, 0xd7, 0x8c, 0x4c, 0x9d, 0x2d, + 0x2d, 0x9b, 0x81, 0xe3, 0xf4, 0xd0, 0xc9, 0x43, 0xd2, 0x4a, 0xd6, 0x20, + 0xe2, 0x36, 0x6f, 0x85, 0x16, 0x88, 0x00, 0x4e, 0xf8, 0x8f, 0x89, 0x2e, + 0xe1, 0x73, 0x50, 0x8f, 0x80, 0xf9, 0x93, 0x8b, 0x22, 0xb5, 0x15, 0xb2, + 0xe8, 0xf2, 0xe1, 0x91, 0xc2, 0xcd, 0x5e, 0xbc, 0x50, 0x7d, 0x6a, 0x05, + 0x7b, 0x40, 0xf5, 0x43, 0x2d, 0xe3, 0xe2, 0x89, 0x3e, 0x65, 0xbc, 0x9b, + 0x48, 0x18, 0x89, 0x9e, 0x40, 0xd2, 0xe6, 0xaa, 0x5c, 0x83, 0x8e, 0x4e, + 0xf7, 0xb0, 0x85, 0x05, 0xa9, 0x1b, 0x95, 0x9c, 0x91, 0x44, 0xf6, 0x26, + 0xe3, 0xda, 0xa3, 0xa7, 0xeb, 0x8e, 0x7b, 0x9d, 0x60, 0x7e, 0xaa, 0x73, + 0xed, 0xda, 0xf9, 0xc8, 0xb1, 0x69, 0xcb, 0x8a, 0x21, 0x6a, 0xed, 0xf4, + 0x98, 0xff, 0x79, 0x65, 0x7b, 0xfb, 0x98, 0x69, 0xcc, 0x61, 0xef, 0xda, + 0x9a, 0x13, 0xaa, 0x2f, 0x7f, 0x23, 0x0d, 0x2f, 0xea, 0xf5, 0x5d, 0xad, + 0x47, 0x7c, 0xbb, 0xcd, 0x73, 0x06, 0xc6, 0x56, 0x8b, 0x9a, 0x50, 0x97, + 0xea, 0xcd, 0xd7, 0x11, 0xc7, 0xec, 0xf5, 0xe0, 0x7c, 0xf5, 0x58, 0xc0, + 0xfa, 0x58, 0xf8, 0x66, 0x9a, 0xa9, 0x26, 0x1d, 0x87, 0x46, 0x18, 0xd4, + 0xb7, 0xa6, 0x84, 0x49, 0x56, 0xad, 0x38, 0x7c, 0xd8, 0xc3, 0x0d, 0x24, + 0xa6, 0xcc, 0xf2, 0xc6, 0xfe, 0x8f, 0x40, 0x35, 0xce, 0x67, 0x51, 0xde, + 0x00, 0x16, 0x7e, 0xe7, 0x75, 0xbf, 0xff, 0x94, 0x1e, 0x4a, 0x77, 0xa3, + 0x16, 0x94, 0x65, 0xa4, 0x7f, 0x76, 0x07, 0x56, 0x4f, 0xb8, 0x4e, 0x69, + 0xa6, 0x84, 0x53, 0xf7, 0xfb, 0x8e, 0x19, 0xd8, 0xf2, 0x01, 0xc8, 0xaf, + 0x19, 0x56, 0xad, 0x0e, 0x22, 0x08, 0x51, 0x2d, 0x25, 0x4a, 0xb0, 0x61, + 0xf0, 0xa7, 0x9f, 0xae, 0xef, 0x33, 0xed, 0x1b, 0xb6, 0xb6, 0xe2, 0xe1, + 0xba, 0x1a, 0x07, 0x3c, 0x24, 0x76, 0xeb, 0x8f, 0x1f, 0x1f, 0x19, 0x26, + 0xc3, 0x03, 0x4b, 0x1d, 0x74, 0xe5, 0xa9, 0xe2, 0xda, 0x09, 0x01, 0xe2, + 0xc2, 0xdf, 0xb7, 0x35, 0xaa, 0x52, 0xb6, 0xb5, 0x14, 0xeb, 0xae, 0xeb, + 0x6c, 0x65, 0x4a, 0x56, 0xb9, 0xa0, 0x3d, 0x77, 0x7f, 0x2e, 0x08, 0x12, + 0x81, 0x18, 0x18, 0x4a, 0xc0, 0x02, 0x11, 0x3c, 0x02, 0x85, 0xe5, 0x1c, + 0x2b, 0xe7, 0xe4, 0x22, 0x66, 0x31, 0x89, 0x31, 0xeb, 0x7b, 0x9b, 0x32, + 0x96, 0x32, 0xca, 0x63, 0xd0, 0x7d, 0xb0, 0xe8, 0xf4, 0x31, 0x28, 0x91, + 0x14, 0xeb, 0x87, 0x4a, 0xb5, 0xd0, 0xb3, 0xf2, 0xa8, 0xcc, 0xe9, 0x4a, + 0x2c, 0x39, 0x1f, 0x43, 0x27, 0x16, 0x9f, 0x8f, 0x0d, 0xee, 0x47, 0x44, + 0x8c, 0x8a, 0xbd, 0x50, 0x9c, 0x48, 0xc7, 0x9c, 0x2f, 0x51, 0xe0, 0x52, + 0x45, 0x18, 0x56, 0x24, 0x7f, 0x81, 0xc4, 0xc0, 0x5f, 0x87, 0xda, 0xe3, + 0xf7, 0x6e, 0x92, 0x27, 0xbd, 0xb8, 0xb5, 0x06, 0xf5, 0x6d, 0xcd, 0x5a, + 0xba, 0x87, 0x40, 0x4d, 0x94, 0x5d, 0x32, 0xe0, 0xaa, 0xf9, 0x6b, 0xef, + 0x9f, 0xc6, 0xc2, 0xfb, 0xd5, 0x57, 0xc8, 0xdd, 0x55, 0x06, 0x8f, 0xba, + 0x3f, 0x74, 0xf3, 0xf4, 0x4e, 0x5b, 0xf6, 0xba, 0x81, 0x0c, 0xc9, 0x97, + 0x2e, 0x25, 0xa2, 0xd3, 0xbe, 0x86, 0x06, 0x93, 0xc9, 0xe7, 0xee, 0x8f, + 0x2a, 0xe0, 0x7e, 0xba, 0x17, 0xe0, 0xfd, 0x69, 0x9e, 0x5a, 0xf9, 0xc8, + 0x23, 0x2b, 0x29, 0x90, 0xa0, 0x50, 0x5e, 0x8a, 0x7a, 0xa1, 0xe0, 0x85, + 0x28, 0x6f, 0xb5, 0x3b, 0x65, 0xec, 0x63, 0x6e, 0x9b, 0xca, 0xf3, 0x8c, + 0x12, 0x04, 0xf8, 0xa6, 0xf9, 0x83, 0x0f, 0xeb, 0xc3, 0x71, 0x3e, 0x6d, + 0xfe, 0xb2, 0xfe, 0x43, 0xff, 0xda, 0xc1, 0x61, 0x22, 0x5d, 0x88, 0x44, + 0xbd, 0x58, 0x68, 0xe5, 0x1c, 0xc8, 0xa1, 0xf9, 0x48, 0x3a, 0xab, 0x9f, + 0x95, 0x7e, 0xa4, 0x91, 0xe6, 0x15, 0xb0, 0x24, 0x30, 0x32, 0x76, 0x6c, + 0x63, 0x4e, 0xe1, 0xab, 0xe6, 0x06, 0xfc, 0x6e, 0x7a, 0xa9, 0xe9, 0x1e, + 0xd3, 0x82, 0x31, 0xbb, 0xa1, 0xb1, 0x71, 0xae, 0xde, 0xfa, 0xa7, 0x7e, + 0x57, 0xd5, 0x9d, 0x83, 0xb9, 0x55, 0xa6, 0x42, 0x3a, 0x69, 0x91, 0xcf, + 0x73, 0xb1, 0x86, 0x22, 0x01, 0x6e, 0x7a, 0x34, 0xad, 0x2c, 0xb6, 0xb4, + 0xd8, 0x18, 0x9b, 0xf6, 0x68, 0x34, 0x1c, 0x33, 0x65, 0x85, 0xfe, 0x4c, + 0x89, 0x5f, 0xbd, 0xa2, 0x4c, 0x15, 0x5a, 0x67, 0x9e, 0xc8, 0xac, 0xc8, + 0x8c, 0x11, 0x63, 0x32, 0x97, 0xc5, 0xce, 0x9c, 0x7e, 0xfa, 0x82, 0xdd, + 0x6d, 0x73, 0x1f, 0x97, 0xcd, 0x34, 0x05, 0xfa, 0x58, 0x18, 0x01, 0xf9, + 0x3b, 0x06, 0xe5, 0x74, 0x92, 0x66, 0xa2, 0x83, 0x36, 0x62, 0xd3, 0x32, + 0x88, 0x11, 0xa9, 0x63, 0xb9, 0x97, 0xd7, 0xb5, 0x60, 0x32, 0xbb, 0xf1, + 0xd6, 0xa6, 0xa9, 0x1c, 0x6c, 0x66, 0xc9, 0xb8, 0xd7, 0x1a, 0x2a, 0x01, + 0x82, 0xcd, 0x63, 0x5b, 0xdb, 0x95, 0xea, 0xeb, 0xc2, 0xd9, 0x88, 0xf8, + 0x4e, 0xe5, 0x92, 0x99, 0x10, 0xbc, 0xa5, 0x69, 0x32, 0x27, 0x04, 0x4d, + 0xfe, 0x4f, 0xf4, 0x59, 0x6d, 0x45, 0xe2, 0x53, 0x91, 0x03, 0x02, 0x8f, + 0xda, 0xe4, 0xff, 0x9a, 0x4e, 0x40, 0x30, 0xfd, 0x86, 0x22, 0x5d, 0x66, + 0x8a, 0xf8, 0x85, 0x80, 0x9f, 0x9a, 0xb9, 0xf6, 0x5e, 0x15, 0x4a, 0x08, + 0x7b, 0x69, 0xf1, 0x87, 0xd8, 0xe0, 0xc4, 0xbc, 0xcc, 0x3e, 0x54, 0xd5, + 0xd5, 0x5d, 0x8d, 0x5e, 0x36, 0x10, 0xab, 0x53, 0x8d, 0x95, 0x69, 0x43, + 0xea, 0x82, 0x76, 0xa8, 0x43, 0x1b, 0x03, 0x6f, 0xa8, 0x6f, 0x21, 0x9b, + 0xa0, 0x9b, 0xb2, 0xa8, 0x2d, 0x54, 0xb7, 0xda, 0x96, 0xe5, 0x2d, 0xba, + 0xa8, 0x91, 0xba, 0x21, 0x4c, 0x58, 0xc5, 0xe5, 0x33, 0xda, 0xca, 0xd5, + 0x39, 0xdd, 0xea, 0xee, 0x1c, 0xb0, 0x45, 0xa7, 0xd3, 0x39, 0x9f, 0x69, + 0xc0, 0x7e, 0xb1, 0xda, 0xe9, 0x41, 0xd7, 0x22, 0x74, 0x3e, 0x28, 0xdf, + 0x11, 0xa3, 0x60, 0x43, 0xd2, 0x04, 0xe7, 0xae, 0x16, 0x06, 0x21, 0x96, + 0x8e, 0xc5, 0xa6, 0xa6, 0xa5, 0xa2, 0x94, 0x5a, 0x5f, 0x62, 0x10, 0x77, + 0xbe, 0x73, 0x27, 0x20, 0xd3, 0xa6, 0x70, 0xf5, 0x74, 0xcc, 0xb4, 0x37, + 0xb7, 0x72, 0x9c, 0x6b, 0xf3, 0x1f, 0xaf, 0x18, 0x04, 0xe9, 0x82, 0xb7, + 0x85, 0x7c, 0x73, 0x69, 0x6b, 0x6b, 0xe9, 0xaa, 0x9a, 0xe6, 0xd6, 0xf2, + 0xb8, 0x96, 0x34, 0x6c, 0x03, 0xe4, 0x47, 0x88, 0x72, 0x26, 0x64, 0x5f, + 0x43, 0xd2, 0x42, 0xe3, 0xdc, 0xf9, 0xad, 0x9a, 0x96, 0x65, 0x1c, 0xa2, + 0x89, 0x0c, 0xea, 0xe1, 0xe5, 0xfd, 0xa5, 0xba, 0x24, 0x53, 0xc1, 0x51, + 0x9d, 0xd5, 0x17, 0x1e, 0xb6, 0x38, 0x58, 0xd1, 0xd3, 0xa4, 0xd8, 0x1f, + 0xc6, 0x3e, 0xfd, 0xb2, 0x88, 0x61, 0x18, 0x52, 0x59, 0x16, 0x12, 0x62, + 0x9b, 0xa2, 0x83, 0x95, 0x1f, 0xb7, 0xb7, 0x7b, 0x2d, 0xe6, 0x8d, 0xbe, + 0xa8, 0x4d, 0x69, 0x5b, 0xdb, 0xb6, 0xa6, 0xfd, 0xd3, 0x02, 0xa9, 0xde, + 0xb3, 0x77, 0xd3, 0xfd, 0xf6, 0x87, 0xc5, 0x47, 0xec, 0x1b, 0xa1, 0x94, + 0x68, 0x44, 0x1b, 0x98, 0xb2, 0xdc, 0xb2, 0xb2, 0x75, 0x91, 0xf3, 0xd8, + 0x94, 0xa0, 0x2f, 0x53, 0x65, 0x28, 0xb7, 0x80, 0x1f, 0xc5, 0xac, 0xd0, + 0x66, 0x97, 0x5c, 0xdf, 0xcb, 0x4d, 0x5c, 0x2b, 0x6a, 0xb5, 0x25, 0xaf, + 0x8f, 0x4f, 0x0a, 0x97, 0x3f, 0x9a, 0xc9, 0x68, 0xe8, 0x14, 0xe7, 0x22, + 0xe7, 0x2a, 0x17, 0xa4, 0x56, 0x6b, 0x5b, 0xdb, 0xfe, 0x7d, 0xed, 0xad, + 0x56, 0x6e, 0xe6, 0xd1, 0xd7, 0x4d, 0xbc, 0xca, 0xf3, 0x30, 0x81, 0x43, + 0x16, 0x2a, 0x56, 0x89, 0xac, 0x68, 0xe0, 0x59, 0x05, 0x8b, 0x78, 0x33, + 0x51, 0x94, 0x06, 0x53, 0x33, 0x11, 0xfb, 0x11, 0xb1, 0x88, 0xc0, 0x71, + 0x9a, 0xda, 0xdd, 0x1c, 0x69, 0xe3, 0x03, 0x9e, 0x17, 0x8c, 0xa2, 0x39, + 0xff, 0x68, 0x60, 0x8d, 0x96, 0x95, 0x96, 0x79, 0x45, 0xeb, 0xf7, 0x86, + 0xef, 0x05, 0x90, 0xf1, 0x70, 0x1c, 0x48, 0x60, 0x88, 0xb8, 0x64, 0x5a, + 0xf3, 0xc8, 0x1f, 0x4a, 0x60, 0x53, 0x86, 0xc2, 0xcb, 0x72, 0xc4, 0x00, + 0x5e, 0x1e, 0x08, 0xca, 0x31, 0x9d, 0xf9, 0x8c, 0x21, 0xcf, 0x55, 0xe4, + 0x9f, 0xfd, 0xfa, 0x6b, 0xaf, 0x5f, 0x86, 0x87, 0xbd, 0xa4, 0x6e, 0x2f, + 0x43, 0x41, 0x99, 0xe2, 0x92, 0x76, 0x79, 0x61, 0xc8, 0xed, 0x42, 0xe0, + 0x0b, 0x19, 0xe2, 0x38, 0x44, 0xd3, 0x06, 0x37, 0x8d, 0x56, 0xc3, 0xe5, + 0xf0, 0x5d, 0xc3, 0xd2, 0x36, 0x38, 0x17, 0x72, 0xad, 0x56, 0x6b, 0x4c, + 0x2f, 0x58, 0xd7, 0x88, 0x88, 0x81, 0xd5, 0x8b, 0xc3, 0x9c, 0xa6, 0x07, + 0xe6, 0xfa, 0x90, 0x75, 0x9b, 0xcd, 0xd0, 0x97, 0x81, 0xef, 0x9d, 0x7b, + 0x85, 0x66, 0x1e, 0xe0, 0xf2, 0x86, 0xe2, 0x8a, 0x77, 0x34, 0x75, 0xaa, + 0x74, 0x62, 0xc2, 0x68, 0x24, 0x05, 0x26, 0xf6, 0x46, 0x5c, 0xd2, 0x7d, + 0xda, 0x59, 0x55, 0xac, 0xe5, 0x9c, 0x97, 0x68, 0x8a, 0x87, 0x21, 0xf7, + 0xaf, 0xb1, 0x5a, 0x61, 0xb7, 0x3d, 0xbb, 0xf2, 0x2b, 0x02, 0x32, 0xc3, + 0x6b, 0x5e, 0x6f, 0xe0, 0x1d, 0xd7, 0x00, 0xb7, 0x2f, 0xa3, 0xb7, 0x86, + 0x87, 0xe5, 0x16, 0x65, 0xa5, 0x10, 0xad, 0x77, 0xf0, 0x5d, 0x0f, 0x86, + 0x43, 0x22, 0xe8, 0x36, 0x90, 0x1f, 0x0f, 0xdc, 0x86, 0xf4, 0xee, 0x77, + 0x0f, 0xb3, 0x81, 0x61, 0x91, 0x08, 0xfc, 0xb6, 0xa3, 0xb4, 0x76, 0x0c, + 0x76, 0xfe, 0x1b, 0xbf, 0xfd, 0x9a, 0x19, 0xa8, 0x47, 0x16, 0x68, 0xc6, + 0x7e, 0xde, 0xf4, 0xde, 0x49, 0x3e, 0xb9, 0x19, 0x66, 0xd6, 0x7f, 0x39, + 0x3f, 0xe2, 0xcb, 0x17, 0x9e, 0x87, 0xcb, 0x2d, 0x0f, 0xce, 0xdc, 0x15, + 0xea, 0xac, 0xf9, 0x45, 0x76, 0xce, 0xa2, 0x40, 0x0a, 0xcb, 0xdc, 0x9c, + 0x04, 0xe4, 0x66, 0x3f, 0x2c, 0x8f, 0x4b, 0x21, 0x88, 0x94, 0xb2, 0xdc, + 0x8a, 0x89, 0x34, 0xc3, 0x11, 0x78, 0x67, 0x78, 0x42, 0x53, 0x3b, 0x43, + 0xe0, 0x42, 0xbb, 0x28, 0x1d, 0x67, 0x40, 0x36, 0xc4, 0x84, 0x93, 0x86, + 0x0a, 0xcb, 0x5f, 0xdd, 0xe0, 0xf3, 0xfd, 0x54, 0x20, 0xce, 0x6b, 0x39, + 0x3c, 0x57, 0x7e, 0x83, 0x80, 0x23, 0x0d, 0xa6, 0x13, 0x82, 0x94, 0xe9, + 0x0e, 0xa9, 0x65, 0xfe, 0x0a, 0xf8, 0x4e, 0x92, 0xe8, 0xbc, 0xe7, 0x9e, + 0x8a, 0x8a, 0x81, 0xb9, 0x8d, 0x1b, 0xa1, 0x06, 0xde, 0x40, 0x03, 0xf9, + 0xf9, 0xae, 0x8d, 0x7d, 0x0f, 0x83, 0x09, 0x68, 0x02, 0xf9, 0xad, 0xd0, + 0xcb, 0xc9, 0xed, 0xd8, 0x83, 0x61, 0x36, 0x49, 0x4c, 0xdb, 0xaa, 0x96, + 0xf3, 0xdd, 0x98, 0x9f, 0xfd, 0x79, 0xe9, 0x3e, 0xbe, 0xe3, 0x2e, 0x2b, + 0xbb, 0x84, 0x20, 0x20, 0x15, 0xf5, 0x7e, 0x3e, 0x85, 0x90, 0x98, 0x0b, + 0x8b, 0x9b, 0x17, 0x60, 0xb7, 0xb3, 0xa7, 0x4d, 0x1a, 0xff, 0x61, 0x16, + 0x7c, 0xb0, 0xca, 0x70, 0xa9, 0xc2, 0x20, 0x9b, 0xe1, 0x79, 0x38, 0x97, + 0x58, 0xb8, 0x40, 0xa1, 0x6e, 0xa9, 0x72, 0x80, 0x05, 0x51, 0xb7, 0x82, + 0x3f, 0x90, 0x0a, 0xba, 0x32, 0x46, 0x32, 0x02, 0xdd, 0xb4, 0x68, 0x85, + 0xc3, 0xf1, 0xf6, 0x92, 0xee, 0x21, 0x66, 0x8f, 0x8e, 0x5a, 0x4a, 0x4b, + 0xb6, 0x33, 0x96, 0x9c, 0x14, 0xe5, 0x47, 0x6d, 0xc3, 0x0f, 0x25, 0xed, + 0xbb, 0x7d, 0x4e, 0xa7, 0x0f, 0xca, 0x53, 0x03, 0x43, 0xde, 0xb9, 0x90, + 0xa6, 0x9c, 0x34, 0x4e, 0xc5, 0x29, 0x1b, 0xac, 0x28, 0x89, 0x12, 0x1b, + 0x8c, 0xc8, 0xbe, 0x22, 0xcf, 0xf4, 0xb0, 0xe5, 0xe6, 0xec, 0xaf, 0x14, + 0xac, 0xe4, 0x90, 0x48, 0x85, 0x76, 0x65, 0x24, 0x2d, 0xda, 0x34, 0x01, + 0x09, 0x51, 0xc1, 0xbf, 0xeb, 0x50, 0xc0, 0xe1, 0xfd, 0xb2, 0x7a, 0x88, + 0xd1, 0x56, 0xe5, 0x97, 0x2d, 0x6a, 0x41, 0x50, 0x5b, 0xba, 0xba, 0x78, + 0xde, 0x68, 0x77, 0x10, 0x25, 0x1f, 0xb6, 0x03, 0x53, 0x43, 0x45, 0xb3, + 0xe8, 0x10, 0x0c, 0xa4, 0x12, 0x43, 0x14, 0x83, 0x3a, 0x72, 0x88, 0x63, + 0x48, 0xd7, 0xb3, 0x1b, 0xa2, 0x2b, 0x31, 0x16, 0x0a, 0xb7, 0x1d, 0x23, + 0x24, 0x57, 0x1d, 0x97, 0x3f, 0x7c, 0x82, 0x7e, 0xd8, 0x64, 0x79, 0x66, + 0x4d, 0x45, 0x82, 0x29, 0x21, 0x7b, 0xea, 0xee, 0x2d, 0x2d, 0x45, 0x8b, + 0xdf, 0x27, 0x2c, 0x4b, 0x8a, 0xf5, 0x0d, 0xa2, 0xf4, 0xc0, 0x90, 0x6e, + 0xe7, 0x21, 0xa7, 0x33, 0x84, 0x0a, 0x10, 0xc5, 0xfd, 0x89, 0x4d, 0x8e, + 0xdb, 0x0f, 0x31, 0x10, 0x8d, 0xb0, 0x8d, 0x10, 0x5d, 0x32, 0xa9, 0xa9, + 0x78, 0xa8, 0xf1, 0xa2, 0x54, 0x45, 0x85, 0xff, 0xae, 0xc0, 0x50, 0x3a, + 0xe2, 0x35, 0xb8, 0x10, 0x26, 0xc8, 0x4c, 0x9b, 0x88, 0x0a, 0x99, 0x8f, + 0xcd, 0x21, 0x8e, 0xf0, 0xfa, 0x11, 0x3a, 0x34, 0x1d, 0x54, 0x1b, 0x16, + 0xc8, 0x44, 0xc1, 0xae, 0x98, 0x47, 0x38, 0xb2, 0xe4, 0xc9, 0xd2, 0x62, + 0xd6, 0xc5, 0x0d, 0x63, 0x63, 0x3d, 0xa8, 0x61, 0xfb, 0xf6, 0x06, 0x4e, + 0x7a, 0x60, 0x02, 0xbb, 0xbe, 0x33, 0x4e, 0x78, 0xec, 0xae, 0x07, 0x59, + 0x67, 0x99, 0x08, 0x94, 0x25, 0x03, 0xbd, 0x06, 0x72, 0xbe, 0x8a, 0x3d, + 0xd8, 0x23, 0xd7, 0x27, 0xef, 0xb4, 0x23, 0x9d, 0x43, 0xb2, 0x00, 0x30, + 0x38, 0x99, 0x0a, 0xa3, 0xd3, 0xde, 0x5b, 0x25, 0x7f, 0x61, 0xc7, 0x46, + 0x43, 0x16, 0x2d, 0x2b, 0x2b, 0x06, 0xfa, 0x0d, 0x8a, 0x32, 0xd2, 0xfd, + 0xfb, 0xeb, 0x38, 0x90, 0x15, 0xb5, 0x78, 0x7f, 0x1b, 0x3a, 0xdb, 0xdb, + 0x2c, 0x55, 0xb0, 0x6d, 0xf7, 0x2a, 0x07, 0x05, 0xb7, 0x22, 0x58, 0xac, + 0xf6, 0xd2, 0x94, 0xc6, 0x54, 0x4f, 0xbc, 0x65, 0x8c, 0x90, 0x9e, 0x0a, + 0x89, 0xf4, 0x3c, 0x58, 0x6b, 0x45, 0x9d, 0x83, 0x60, 0xf9, 0x6e, 0x5f, + 0xee, 0xe5, 0x7f, 0x2c, 0xe1, 0x6b, 0x4a, 0xd5, 0x09, 0x4a, 0x69, 0x54, + 0x7c, 0xac, 0x26, 0x37, 0x4e, 0xc9, 0x17, 0x8b, 0x48, 0xc0, 0x22, 0x16, + 0xa6, 0xad, 0x88, 0x12, 0x66, 0x93, 0x65, 0xb0, 0xfa, 0x2c, 0x87, 0x4c, + 0x2a, 0xdf, 0xda, 0x2e, 0x93, 0x96, 0xfd, 0xe0, 0x6e, 0x58, 0x17, 0x71, + 0xbe, 0x47, 0xb2, 0x7f, 0xb4, 0x3f, 0xf2, 0x69, 0x77, 0x92, 0x46, 0xec, + 0xce, 0x5e, 0xfa, 0x92, 0xb2, 0xde, 0x64, 0xf7, 0xb9, 0xb2, 0x8d, 0x89, + 0xb1, 0xb4, 0x82, 0x47, 0x09, 0x1e, 0x0f, 0x9e, 0xa0, 0x13, 0xbc, 0x90, + 0x7d, 0x0f, 0xd9, 0x26, 0xcf, 0xd5, 0x27, 0x57, 0xdb, 0x1d, 0x4a, 0xa2, + 0x74, 0x0a, 0x82, 0x25, 0x74, 0xae, 0x6f, 0x95, 0x7d, 0xef, 0xd9, 0xd1, + 0xa3, 0x7d, 0xfa, 0x5e, 0x67, 0x14, 0x74, 0xd7, 0x75, 0xb3, 0x08, 0xf2, + 0x18, 0xae, 0xcb, 0x4f, 0x0a, 0x8f, 0x6f, 0x84, 0xc1, 0x36, 0x39, 0x3f, + 0x53, 0xcb, 0xc7, 0xfb, 0x7c, 0x16, 0x06, 0x38, 0x6f, 0x6d, 0x82, 0x89, + 0xef, 0x65, 0x94, 0xb6, 0x67, 0xa5, 0x45, 0xc6, 0xcb, 0xe4, 0x8c, 0x90, + 0xf6, 0x4f, 0x74, 0xad, 0x3d, 0x31, 0x4c, 0x0a, 0xfa, 0xf8, 0xbd, 0x5d, + 0xfe, 0x46, 0xc3, 0x71, 0x45, 0x9d, 0x3e, 0xfe, 0x40, 0x00, 0x09, 0x42, + 0x17, 0xfd, 0x3b, 0x00, 0x92, 0x41, 0x68, 0x2f, 0xfa, 0x69, 0x75, 0xd6, + 0xaf, 0x1f, 0x63, 0x6c, 0x0f, 0x83, 0x27, 0xd2, 0xfe, 0x4a, 0xb4, 0x1f, + 0x21, 0xed, 0xfb, 0x85, 0xa5, 0x31, 0xa5, 0xb2, 0xd7, 0x9a, 0x8b, 0xd3, + 0x3e, 0xff, 0xa2, 0xa7, 0x18, 0xb8, 0xa7, 0xcf, 0x6c, 0xde, 0xac, 0x24, + 0xca, 0x7d, 0x51, 0x73, 0x51, 0x01, 0xbc, 0x99, 0x8f, 0x96, 0x8c, 0x6a, + 0x64, 0x97, 0xde, 0xd3, 0x60, 0x7e, 0x4b, 0x5e, 0x09, 0xfa, 0xdd, 0x75, + 0xda, 0x02, 0x5d, 0xc6, 0x99, 0x0c, 0x74, 0x4d, 0x1f, 0x6c, 0xe1, 0x94, + 0x74, 0xbc, 0xe7, 0xbe, 0x41, 0x36, 0x26, 0x6c, 0x77, 0x04, 0x6f, 0xec, + 0xc4, 0xce, 0xf8, 0xd1, 0xf0, 0xf3, 0xb2, 0x81, 0x5f, 0x21, 0x0d, 0x3c, + 0x5d, 0x59, 0xe9, 0x63, 0xac, 0xdf, 0x17, 0xde, 0xa3, 0xe0, 0xb4, 0x9d, + 0x71, 0xfa, 0xdd, 0xb7, 0x0e, 0x98, 0x26, 0x45, 0x37, 0x4a, 0x40, 0x32, + 0x25, 0x19, 0x32, 0x9b, 0x69, 0x8e, 0xf6, 0xea, 0x50, 0xc2, 0x01, 0xa2, + 0x99, 0x43, 0x04, 0xc1, 0x04, 0xec, 0xdf, 0x99, 0x9f, 0xc5, 0x38, 0xcb, + 0x9c, 0xdd, 0x42, 0x0b, 0xb4, 0xfe, 0xa9, 0xe2, 0x1d, 0xe1, 0x30, 0xb3, + 0xc0, 0x69, 0x1d, 0x41, 0x87, 0x2c, 0xdb, 0xad, 0x1e, 0xd2, 0x68, 0x7d, + 0xae, 0x43, 0xea, 0xd3, 0x00, 0xf1, 0xcb, 0x33, 0x73, 0x53, 0xd2, 0x85, + 0x82, 0x05, 0xa9, 0x28, 0x9a, 0x45, 0xff, 0xe2, 0xe2, 0x86, 0xee, 0xa8, + 0xee, 0x6e, 0xb1, 0xa1, 0xfe, 0x2b, 0x37, 0x1f, 0x1c, 0xf7, 0xd9, 0xd2, + 0xec, 0x3c, 0x3e, 0x84, 0x35, 0xc0, 0xc3, 0x6f, 0x57, 0xca, 0xc3, 0x4a, + 0xc0, 0xa0, 0x30, 0xc9, 0xe6, 0x8b, 0x19, 0x03, 0x44, 0x7f, 0xbf, 0x25, + 0xad, 0x6e, 0x31, 0x3e, 0x8f, 0xb8, 0xf0, 0xa6, 0x7f, 0x64, 0x7a, 0x60, + 0x69, 0x73, 0x5f, 0x25, 0x36, 0x7a, 0xc4, 0xa9, 0xac, 0xfa, 0xf0, 0xaa, + 0xee, 0xe1, 0x8c, 0x39, 0x19, 0x1f, 0x4a, 0xb3, 0xe2, 0x06, 0x98, 0x16, + 0x45, 0x72, 0xab, 0x64, 0xa1, 0xbe, 0xb9, 0xbf, 0xa6, 0xc3, 0xeb, 0xa8, + 0x1c, 0xa8, 0x7a, 0x56, 0x2b, 0xfc, 0x32, 0x86, 0x92, 0x9e, 0x90, 0xbe, + 0xfa, 0xe5, 0xdf, 0x06, 0xbf, 0x23, 0x2f, 0x20, 0x6b, 0xcb, 0xc8, 0x8e, + 0xc0, 0xbf, 0x8d, 0x62, 0x6d, 0x17, 0x26, 0x01, 0x82, 0x5f, 0xb0, 0x93, + 0x47, 0xca, 0xdd, 0x34, 0xa1, 0xab, 0x79, 0x2a, 0xd4, 0x6e, 0x77, 0x1e, + 0x42, 0x22, 0x05, 0x42, 0xe8, 0x1a, 0xa0, 0x27, 0x68, 0x16, 0x3d, 0xc8, + 0x4d, 0xba, 0x56, 0xd3, 0x68, 0x9e, 0x56, 0xf5, 0x5d, 0x38, 0x75, 0xea, + 0x82, 0x93, 0x54, 0x98, 0xc5, 0x7a, 0x19, 0xf1, 0x54, 0xe5, 0x2f, 0x17, + 0xc8, 0x49, 0xf3, 0xe4, 0xa4, 0xff, 0xbe, 0x7a, 0x7a, 0x55, 0xc6, 0x25, + 0xf3, 0x82, 0x67, 0xa1, 0x62, 0xd4, 0xee, 0x7b, 0xca, 0xb1, 0x14, 0x58, + 0x39, 0xe2, 0x1f, 0xb7, 0x92, 0xc4, 0xf5, 0xeb, 0xa7, 0xf7, 0xf6, 0xe2, + 0xcb, 0x61, 0x2f, 0x6f, 0xb1, 0xc2, 0xf8, 0xc3, 0xd4, 0xd4, 0x95, 0x2b, + 0xfa, 0xbd, 0x8e, 0x09, 0x97, 0x8a, 0x79, 0xfa, 0xe7, 0x34, 0x69, 0xb7, + 0x57, 0xf8, 0xf3, 0xcf, 0xd3, 0xe5, 0x95, 0x26, 0xdf, 0x85, 0xc9, 0xef, + 0x0b, 0x2d, 0xbc, 0x5a, 0x95, 0xdf, 0xaf, 0x42, 0xd5, 0xce, 0x93, 0xa7, + 0xc4, 0x29, 0xf3, 0x3a, 0x45, 0x3b, 0xa4, 0xdd, 0x6d, 0x84, 0x3d, 0x1d, + 0x9f, 0xb7, 0x8a, 0x56, 0xf7, 0x9b, 0xae, 0x89, 0x89, 0xd8, 0xcf, 0xa5, + 0x93, 0x01, 0x03, 0xb9, 0x77, 0x97, 0x96, 0x2a, 0x07, 0x7e, 0xc9, 0x38, + 0x5e, 0x60, 0x31, 0x3f, 0xb4, 0x2f, 0x73, 0xaa, 0x85, 0xec, 0x09, 0xf4, + 0x94, 0x4b, 0x4e, 0x66, 0xc2, 0x73, 0x2f, 0x1e, 0xbe, 0xbf, 0x5d, 0x21, + 0x08, 0x54, 0xe7, 0xf8, 0xfd, 0xd2, 0x67, 0x49, 0x51, 0x0d, 0x4a, 0x9b, + 0x5c, 0x81, 0x96, 0x2c, 0x9b, 0x25, 0x50, 0x49, 0xfc, 0xc2, 0x6f, 0x85, + 0x57, 0xd1, 0x5b, 0x62, 0x63, 0x50, 0xee, 0x82, 0xe7, 0x44, 0x14, 0x74, + 0x85, 0xfe, 0x91, 0xec, 0xb7, 0xbb, 0xc8, 0x41, 0xd2, 0xf5, 0x6b, 0xf3, + 0x8f, 0x9b, 0x82, 0x1a, 0x1a, 0xac, 0xcd, 0xcd, 0xcf, 0xe5, 0x6d, 0xf7, + 0x42, 0xdf, 0x1e, 0xcb, 0x3a, 0xd9, 0x19, 0xf6, 0x02, 0x1b, 0x94, 0xa7, + 0xd4, 0xdd, 0xfc, 0x25, 0x32, 0xdf, 0xb9, 0x6a, 0x24, 0x21, 0x7e, 0xb8, + 0x68, 0x38, 0x3e, 0x01, 0x42, 0x15, 0x5d, 0x6d, 0x0e, 0xf4, 0x96, 0x34, + 0x3f, 0x48, 0xba, 0x19, 0xc2, 0xf3, 0xfe, 0x53, 0xa7, 0x18, 0x52, 0x52, + 0x59, 0x64, 0x24, 0x35, 0x7f, 0xf0, 0x56, 0x19, 0x3a, 0x06, 0x4c, 0xf5, + 0x25, 0x15, 0x50, 0x56, 0x13, 0x75, 0xd6, 0x13, 0xd3, 0xde, 0xb3, 0x57, + 0x19, 0x02, 0x68, 0x95, 0x44, 0x99, 0x24, 0x1d, 0xd3, 0xcc, 0x78, 0xbd, + 0x33, 0xc9, 0x33, 0x1f, 0xf8, 0x3e, 0xcd, 0x98, 0x34, 0xe9, 0xb8, 0x94, + 0x0d, 0x23, 0x5c, 0x6b, 0x27, 0x89, 0x8a, 0x92, 0x1e, 0x83, 0x4e, 0xff, + 0xd7, 0xa2, 0xc7, 0x24, 0x3a, 0x91, 0x0c, 0x0c, 0x18, 0x4b, 0x8d, 0x03, + 0xe6, 0x37, 0xa5, 0x93, 0xd2, 0xd0, 0x4c, 0xe7, 0x52, 0x2e, 0x94, 0x5b, + 0x75, 0x0b, 0x80, 0xe5, 0x5c, 0x8c, 0x2f, 0x8b, 0x2c, 0x52, 0xd5, 0x0b, + 0x7a, 0xdd, 0x93, 0xdd, 0x7f, 0x5a, 0x95, 0x7c, 0x49, 0x79, 0x58, 0x1f, + 0xbd, 0x6b, 0x64, 0x75, 0x33, 0xb6, 0xb3, 0xb2, 0xe0, 0x50, 0xea, 0x05, + 0xed, 0xfc, 0x0e, 0xc6, 0xc6, 0x56, 0x4d, 0x02, 0x86, 0xf4, 0x49, 0xe1, + 0xda, 0x9e, 0xf7, 0x44, 0x63, 0x1a, 0x6b, 0x8e, 0x55, 0xc5, 0x14, 0x3d, + 0x1b, 0x72, 0x50, 0x6c, 0x44, 0x07, 0x43, 0x8e, 0xba, 0x99, 0x3e, 0xca, + 0xb4, 0xf1, 0x76, 0x20, 0x5f, 0x85, 0xa9, 0x48, 0xb5, 0x66, 0x93, 0x69, + 0x6f, 0x62, 0x7e, 0x5a, 0x70, 0xeb, 0x1b, 0x1d, 0x69, 0xbf, 0x5f, 0x78, + 0xc0, 0xf8, 0x2a, 0xa4, 0xfe, 0x27, 0x93, 0xb4, 0xe9, 0xd0, 0xc8, 0xb7, + 0x89, 0x0b, 0xf1, 0x0b, 0xb7, 0x93, 0x7b, 0xd5, 0xc1, 0x91, 0xa0, 0xf5, + 0xd4, 0x7b, 0xb4, 0xc2, 0x3c, 0xf5, 0x60, 0x6d, 0x5d, 0xd0, 0x60, 0x12, + 0x2f, 0x1f, 0xf0, 0xfd, 0xb7, 0xfe, 0xa2, 0xb6, 0x4b, 0x02, 0x42, 0xa0, + 0x60, 0x38, 0xce, 0xda, 0xb2, 0x90, 0x42, 0x09, 0xfe, 0xf9, 0x78, 0xdf, + 0xea, 0xdd, 0x57, 0xae, 0xb5, 0x89, 0x62, 0x2a, 0x25, 0xda, 0xb4, 0x91, + 0x97, 0x9b, 0xa1, 0x93, 0x49, 0x19, 0x93, 0x12, 0x19, 0xf9, 0x98, 0x2b, + 0x71, 0xb9, 0x89, 0x28, 0xdc, 0xf0, 0xae, 0xb7, 0xd9, 0xb0, 0x2c, 0xd5, + 0x72, 0xec, 0x5d, 0x5d, 0x43, 0xd6, 0xbd, 0x2c, 0x55, 0x16, 0x43, 0xe6, + 0xc2, 0x34, 0x2e, 0xad, 0xb8, 0xa8, 0x7a, 0x36, 0xf7, 0xfb, 0x8b, 0xaa, + 0x8c, 0xa4, 0xfa, 0x17, 0x17, 0x6c, 0x14, 0x21, 0x94, 0x8d, 0x20, 0x8a, + 0xd8, 0x04, 0x3f, 0xb3, 0x1a, 0x6c, 0xf4, 0x8a, 0x45, 0x8b, 0xaf, 0x70, + 0x54, 0x33, 0x10, 0xd2, 0xf9, 0x74, 0xc1, 0x9a, 0xa6, 0x6b, 0x82, 0xda, + 0x99, 0x7b, 0x86, 0x58, 0x3d, 0xf0, 0x1e, 0xaa, 0xd4, 0x45, 0x02, 0x64, + 0xc2, 0x0e, 0x19, 0x73, 0x7c, 0x35, 0xe7, 0x87, 0x85, 0xc6, 0x0c, 0xb8, + 0x2e, 0x98, 0xba, 0x77, 0xaa, 0x03, 0xcd, 0x6f, 0x9c, 0x56, 0x86, 0x78, + 0x69, 0xa6, 0x28, 0x3b, 0x5f, 0x0c, 0x57, 0x0a, 0xbe, 0xfc, 0xd5, 0x63, + 0xc3, 0x10, 0x0d, 0x71, 0x17, 0xee, 0x4a, 0x53, 0x15, 0x79, 0x8a, 0x54, + 0x4b, 0x6b, 0x9c, 0xbd, 0x9c, 0x04, 0x3e, 0x0a, 0x9b, 0x07, 0xb3, 0xd2, + 0x30, 0x8b, 0xd3, 0x3e, 0x68, 0xe7, 0x1a, 0x0a, 0xbc, 0x0d, 0x8e, 0x0e, + 0xce, 0x94, 0x1f, 0xe2, 0xcb, 0x86, 0xbf, 0xe1, 0x62, 0x57, 0x28, 0x46, + 0xda, 0x22, 0x5d, 0x50, 0xd2, 0x2c, 0xad, 0x5c, 0xa8, 0xfe, 0x58, 0xa8, + 0x52, 0x5e, 0x51, 0x38, 0xd7, 0x46, 0xd4, 0x61, 0xaa, 0x44, 0x55, 0x46, + 0xee, 0x48, 0xda, 0x64, 0xda, 0x09, 0x5e, 0x0a, 0x32, 0xb3, 0xba, 0x14, + 0x14, 0xfa, 0xa6, 0xa3, 0x2b, 0x40, 0xbc, 0x1f, 0x66, 0x15, 0x19, 0x26, + 0x29, 0x9e, 0x75, 0xff, 0xb5, 0x0a, 0x7d, 0x11, 0xf9, 0x77, 0x30, 0xc5, + 0x3e, 0x0f, 0x07, 0xf7, 0x23, 0x48, 0x42, 0x29, 0x48, 0x60, 0x89, 0xa3, + 0x2d, 0x94, 0xc9, 0x93, 0xa2, 0xfa, 0xfb, 0x2b, 0x64, 0x65, 0xa2, 0x13, + 0x85, 0xe2, 0x17, 0x79, 0x27, 0xb6, 0xbb, 0x36, 0x2d, 0x71, 0xd2, 0x66, + 0x6f, 0xe2, 0x2e, 0xd6, 0xde, 0x78, 0x6a, 0xc0, 0xf5, 0xca, 0x82, 0x58, + 0xa5, 0x31, 0xcf, 0xa8, 0x0c, 0x21, 0x34, 0x45, 0xa8, 0x63, 0x9b, 0xf0, + 0x11, 0xb1, 0x6a, 0x07, 0x1b, 0xbb, 0xfc, 0xd6, 0x66, 0x2f, 0x36, 0x26, + 0xd7, 0xd1, 0x1a, 0x1b, 0xa2, 0xbe, 0xa9, 0x55, 0x05, 0xbf, 0x00, 0x16, + 0xb1, 0xee, 0x4f, 0x7f, 0xaf, 0x08, 0x6f, 0xb5, 0x89, 0x1f, 0x2e, 0x3f, + 0xfc, 0x1f, 0xb3, 0x9d, 0xe9, 0x20, 0xff, 0x82, 0xb3, 0xd9, 0xd8, 0xb4, + 0x42, 0xb7, 0x2d, 0x49, 0xfd, 0x80, 0x46, 0xbe, 0xab, 0x14, 0xa4, 0x4e, + 0x51, 0xe4, 0x04, 0xb5, 0xea, 0xe5, 0x14, 0xcd, 0x27, 0x92, 0x94, 0x00, + 0x71, 0xac, 0xd9, 0x50, 0x70, 0xcd, 0xec, 0x73, 0x46, 0x91, 0xb4, 0xa9, + 0x10, 0x6e, 0x99, 0x03, 0x5d, 0x02, 0x25, 0x80, 0xb0, 0xa2, 0x28, 0x55, + 0xf3, 0x76, 0xb2, 0xfb, 0x0c, 0x71, 0x8d, 0xa1, 0x2c, 0x92, 0x11, 0xce, + 0x5a, 0x79, 0x28, 0xf1, 0x23, 0x12, 0xcb, 0xe6, 0x00, 0x79, 0xe8, 0xcf, + 0x32, 0x97, 0x4f, 0x56, 0x9f, 0x8c, 0x6e, 0x4f, 0x7d, 0x19, 0x2f, 0xe8, + 0xbc, 0xea, 0xe0, 0xbb, 0x31, 0x7f, 0xa4, 0xe6, 0xa8, 0xe7, 0x65, 0x73, + 0x63, 0xa3, 0xe3, 0x33, 0x5b, 0xd2, 0x02, 0x79, 0x89, 0xc3, 0xd2, 0x71, + 0x69, 0x74, 0xc8, 0x91, 0x9d, 0x37, 0x51, 0x70, 0x3f, 0x32, 0x8b, 0xcc, + 0x21, 0xb0, 0xe3, 0x60, 0x9a, 0x7f, 0xb1, 0xdc, 0x2b, 0xff, 0x67, 0x82, + 0x8f, 0xec, 0xda, 0x1d, 0xc8, 0xe5, 0xba, 0xce, 0xae, 0xa6, 0x2e, 0xe9, + 0x4c, 0x79, 0xa2, 0x68, 0x1b, 0x29, 0x96, 0x78, 0xdb, 0x38, 0x6f, 0xbb, + 0xd3, 0x5b, 0xa8, 0xf9, 0x82, 0x8c, 0x20, 0xda, 0x18, 0xe4, 0xa1, 0xfb, + 0x1a, 0x34, 0x8e, 0x5d, 0x7d, 0x27, 0xc2, 0x8a, 0xd7, 0x31, 0x3f, 0xf3, + 0x91, 0xcf, 0x5a, 0x81, 0x6c, 0x69, 0xc8, 0x96, 0x77, 0x98, 0xd6, 0xac, + 0x0b, 0xd2, 0x53, 0xcc, 0x97, 0x2f, 0xf3, 0x0d, 0x0e, 0xdb, 0x19, 0xcb, + 0x1b, 0x5e, 0xf0, 0xf1, 0x41, 0xe5, 0x1d, 0x29, 0xaf, 0xbd, 0x8c, 0x95, + 0xbe, 0xe3, 0x87, 0x83, 0x7a, 0x04, 0x66, 0xe3, 0xe9, 0x18, 0x5b, 0xf1, + 0xbb, 0x7d, 0xeb, 0x6f, 0xab, 0xb3, 0xe5, 0xfb, 0xa2, 0x52, 0x1e, 0x51, + 0x48, 0xb3, 0xda, 0xf4, 0x59, 0x16, 0xc5, 0x0a, 0x43, 0x0f, 0x92, 0x9c, + 0x2b, 0xe6, 0x34, 0x5f, 0x88, 0x0f, 0xf1, 0x8d, 0xa9, 0xb8, 0x19, 0x1b, + 0xf3, 0x69, 0x74, 0x5c, 0xe8, 0x7b, 0x46, 0xbc, 0xad, 0x4a, 0xa2, 0x90, + 0x24, 0xe4, 0x29, 0x63, 0xa3, 0xe3, 0xa5, 0xbe, 0xff, 0xe3, 0x31, 0x7f, + 0x8e, 0x8e, 0xad, 0xf2, 0xf0, 0x0a, 0x42, 0x18, 0x43, 0x0e, 0x85, 0x05, + 0x24, 0x60, 0xa3, 0xbc, 0xf9, 0x91, 0xb5, 0xe8, 0xaf, 0x0a, 0x5a, 0x62, + 0x1f, 0x87, 0x1d, 0x58, 0xcb, 0xd0, 0x13, 0xb4, 0xd6, 0x4a, 0x3b, 0xe8, + 0x45, 0x7f, 0xd4, 0x79, 0x87, 0x0f, 0xc3, 0x6d, 0xad, 0xef, 0x9c, 0x02, + 0x93, 0xe8, 0x16, 0xcd, 0xb6, 0x63, 0x65, 0xd7, 0x42, 0x99, 0x52, 0x67, + 0x57, 0x55, 0xc4, 0x10, 0x20, 0x51, 0xd0, 0x09, 0x86, 0xe9, 0xda, 0x75, + 0x63, 0x7e, 0x6e, 0x9f, 0x86, 0xa2, 0x59, 0x46, 0xc2, 0xb7, 0x23, 0x8c, + 0xe6, 0x74, 0x9d, 0x37, 0xe5, 0x75, 0x26, 0xab, 0x02, 0x67, 0x3e, 0xd6, + 0xbf, 0xfd, 0xeb, 0xac, 0x78, 0xd7, 0x63, 0xd8, 0x0a, 0x99, 0x56, 0x17, + 0x55, 0x27, 0xd7, 0xda, 0x27, 0xcc, 0xa3, 0x5b, 0x8c, 0x4d, 0x76, 0x9f, + 0xa2, 0xe9, 0xaa, 0x72, 0x36, 0x9a, 0x33, 0xb1, 0x86, 0xfc, 0x99, 0xfc, + 0xe7, 0x94, 0xb5, 0x13, 0x49, 0xa0, 0x3b, 0xe1, 0x7c, 0xb7, 0xcd, 0xb8, + 0x21, 0xf1, 0x56, 0xd6, 0xc7, 0x5d, 0x1f, 0x7f, 0x1c, 0xab, 0xd7, 0xd2, + 0x9a, 0x16, 0xfc, 0xbc, 0xc7, 0x62, 0x89, 0x89, 0x36, 0x8a, 0xbe, 0xad, + 0x55, 0xfe, 0xd4, 0x66, 0x09, 0x71, 0x35, 0xa9, 0x30, 0xe9, 0xbb, 0x9d, + 0x73, 0xaf, 0x64, 0xce, 0x91, 0xbb, 0xb3, 0x35, 0x6e, 0x77, 0x64, 0xbd, + 0x78, 0x64, 0x4a, 0x97, 0x1e, 0xb9, 0x9a, 0xff, 0xfa, 0x01, 0xc0, 0xc2, + 0x9e, 0x8f, 0x36, 0x59, 0x07, 0x78, 0xbe, 0xa2, 0x82, 0x44, 0xec, 0x79, + 0xb5, 0x59, 0x1b, 0x0f, 0xac, 0x60, 0x96, 0x25, 0x05, 0xa5, 0x60, 0xf1, + 0x2b, 0xf2, 0x48, 0x49, 0x65, 0x19, 0x9c, 0xf0, 0x75, 0xd7, 0xcc, 0xc8, + 0xef, 0x03, 0xfe, 0x27, 0x55, 0x4a, 0xaf, 0x7f, 0xb2, 0x77, 0x23, 0x7d, + 0x42, 0xa9, 0x09, 0x6f, 0x64, 0x25, 0x69, 0x24, 0x45, 0x34, 0x32, 0x59, + 0xee, 0x3f, 0x69, 0xe6, 0xba, 0x1b, 0x76, 0x39, 0xb6, 0x88, 0xff, 0x7f, + 0xa6, 0xbf, 0x38, 0xf3, 0xe3, 0xc7, 0x10, 0xd0, 0x0a, 0xc1, 0xb1, 0x04, + 0x24, 0xb8, 0xda, 0xdb, 0x5e, 0x68, 0x23, 0x47, 0x33, 0x3c, 0x8d, 0x6c, + 0x1c, 0x76, 0x19, 0xfc, 0x61, 0xd1, 0xb4, 0x40, 0x36, 0xc0, 0xa6, 0x36, + 0x1c, 0x40, 0x1e, 0xe4, 0x20, 0x97, 0xe6, 0x2e, 0x64, 0x77, 0xab, 0xc3, + 0x87, 0xe6, 0x92, 0xc9, 0xe8, 0x63, 0x08, 0x89, 0xdd, 0xa8, 0xbc, 0x26, + 0xf1, 0x70, 0x0a, 0xf7, 0xce, 0x60, 0xfe, 0x48, 0xc0, 0x4a, 0xa6, 0x9d, + 0x8b, 0xb9, 0x13, 0xd9, 0xe7, 0xa6, 0x61, 0x98, 0x2e, 0xe1, 0x3c, 0x21, + 0x5c, 0x2f, 0x0f, 0x87, 0xa3, 0x57, 0xcc, 0x2c, 0x51, 0x17, 0xec, 0x00, + 0xab, 0xcd, 0xe1, 0xec, 0x9a, 0xcf, 0xf5, 0x9d, 0x28, 0x90, 0x28, 0x7a, + 0x1f, 0x38, 0x3a, 0xe0, 0x1d, 0x7b, 0x97, 0x78, 0xa8, 0xef, 0x0b, 0x79, + 0x46, 0x09, 0x4c, 0x93, 0x91, 0x63, 0xfa, 0x6b, 0x22, 0xf1, 0xd6, 0xf6, + 0x8a, 0x6c, 0xbe, 0xfa, 0xa6, 0xef, 0xf9, 0x8a, 0x19, 0x69, 0xe6, 0x80, + 0x8c, 0x0f, 0x16, 0x91, 0xa2, 0x11, 0x62, 0x37, 0x30, 0x26, 0x5f, 0xdf, + 0x39, 0x20, 0xe5, 0xa1, 0xb8, 0x2c, 0x4e, 0x32, 0xe2, 0xb9, 0x1b, 0xc1, + 0x2c, 0x26, 0x0c, 0x62, 0x91, 0x7b, 0x1a, 0x65, 0x26, 0xac, 0xc0, 0x24, + 0x18, 0x53, 0x41, 0x5a, 0xa6, 0xb8, 0x24, 0x6c, 0xaf, 0xd7, 0xd3, 0x61, + 0x25, 0x12, 0xdd, 0x1e, 0xe4, 0x5b, 0xf1, 0xa5, 0x85, 0x4a, 0xfe, 0xbe, + 0x5d, 0xe3, 0xbd, 0xf5, 0x4d, 0xe2, 0x37, 0xb7, 0xbc, 0x1a, 0xe1, 0x33, + 0xf8, 0x27, 0xf4, 0x2e, 0x29, 0x05, 0xcd, 0xcd, 0x6f, 0xbf, 0x5d, 0xda, + 0x28, 0xf1, 0xfa, 0x3b, 0xb4, 0xda, 0xac, 0xeb, 0xf4, 0x77, 0x76, 0x36, + 0xb5, 0x86, 0xcf, 0x78, 0x25, 0x8d, 0xdf, 0x02, 0x0a, 0xcd, 0x30, 0x84, + 0xb1, 0xc5, 0xbc, 0xf6, 0x88, 0xef, 0xa5, 0x19, 0x72, 0xd5, 0x0f, 0xe3, + 0x2d, 0xf5, 0xcf, 0x14, 0x08, 0xcf, 0x13, 0x77, 0xf4, 0xb2, 0xd1, 0x27, + 0x12, 0xd1, 0x3d, 0xab, 0x64, 0xde, 0x9c, 0x9e, 0x06, 0x6a, 0x96, 0x72, + 0xed, 0x47, 0x8e, 0xa2, 0x42, 0x96, 0x35, 0x7f, 0x63, 0x42, 0x3d, 0x71, + 0x04, 0x1c, 0xe5, 0x6d, 0x1b, 0xec, 0xbe, 0x7c, 0x6d, 0xcf, 0x86, 0x1e, + 0xfb, 0x3b, 0x3d, 0x6a, 0x34, 0xf6, 0xf5, 0x30, 0x76, 0x9b, 0x7c, 0xec, + 0x79, 0x81, 0x15, 0x60, 0x26, 0x0d, 0x41, 0x7b, 0xa7, 0xe0, 0x84, 0x5d, + 0x1b, 0xdd, 0x82, 0xb0, 0x76, 0x8a, 0x22, 0x03, 0x82, 0xe7, 0x1d, 0x68, + 0x66, 0x38, 0xe6, 0x8a, 0x01, 0x94, 0x02, 0xf4, 0x22, 0x8e, 0x33, 0x66, + 0xb8, 0xd1, 0x25, 0x9d, 0xca, 0xf8, 0x3a, 0x3c, 0x43, 0x76, 0xd6, 0x2f, + 0x85, 0xb9, 0xb6, 0x3a, 0x32, 0x0c, 0xfd, 0x7e, 0x8a, 0xe8, 0x45, 0x84, + 0x85, 0x2a, 0x24, 0x33, 0x2b, 0xcc, 0xed, 0x64, 0x1a, 0x06, 0x86, 0x28, + 0x3b, 0x71, 0x10, 0xfc, 0x33, 0x5f, 0x7f, 0xe3, 0x3a, 0x48, 0x7d, 0x00, + 0x47, 0x7d, 0x3d, 0xb4, 0x2c, 0xeb, 0x6d, 0x4f, 0xb8, 0xe5, 0x97, 0x91, + 0xe1, 0x5b, 0x6d, 0x6d, 0x87, 0xdf, 0x39, 0x3c, 0xea, 0x75, 0x15, 0x73, + 0xa2, 0x95, 0x36, 0x74, 0x52, 0x84, 0x5b, 0x08, 0xa1, 0xa0, 0x86, 0x7c, + 0x5b, 0x58, 0xda, 0x4d, 0xf4, 0xe1, 0x46, 0xfa, 0xf7, 0x4c, 0xb8, 0xb0, + 0xb1, 0xf1, 0xa5, 0x97, 0x1a, 0x31, 0x23, 0x9d, 0xd9, 0xd1, 0xc9, 0x2b, + 0xb4, 0x7c, 0xee, 0x5b, 0x31, 0xe4, 0xb5, 0xe2, 0xae, 0xee, 0xae, 0x42, + 0x8d, 0xd3, 0x3b, 0xb0, 0x49, 0x1d, 0x23, 0xc9, 0x91, 0xc4, 0xa8, 0x9b, + 0xfa, 0x37, 0x05, 0x98, 0x43, 0x8c, 0x55, 0x1b, 0x71, 0xd0, 0x64, 0x8d, + 0x6d, 0x2e, 0xbf, 0x57, 0x26, 0x85, 0x95, 0x89, 0xcb, 0xea, 0x2b, 0xb0, + 0xab, 0x1b, 0xea, 0x35, 0xcb, 0x19, 0x5e, 0x35, 0x67, 0x56, 0x70, 0x33, + 0x7e, 0x57, 0xe1, 0x67, 0x73, 0x5b, 0xc4, 0xc3, 0xd9, 0x80, 0x5c, 0x79, + 0xb3, 0xe1, 0xf7, 0xa2, 0x0a, 0x36, 0x21, 0xb7, 0xbc, 0x22, 0xaf, 0x68, + 0xed, 0xda, 0xa2, 0xbc, 0xb0, 0xfa, 0xdc, 0xf4, 0xfc, 0x96, 0x0f, 0x8c, + 0x6b, 0xa0, 0x64, 0xd7, 0xef, 0xbf, 0xc5, 0xd4, 0x29, 0xd4, 0xd3, 0xea, + 0x58, 0xe7, 0x50, 0xc6, 0x90, 0x33, 0xd6, 0x14, 0x29, 0xea, 0x3a, 0xff, + 0xf6, 0x1b, 0xda, 0x55, 0x37, 0x4d, 0x77, 0x02, 0xfb, 0x51, 0xfc, 0xf7, + 0x86, 0x9b, 0x8b, 0x6d, 0xfe, 0x0f, 0x9a, 0x69, 0xfa, 0xcc, 0x9e, 0xed, + 0x83, 0xa6, 0x6f, 0xac, 0x48, 0x72, 0xde, 0xad, 0x6d, 0x6a, 0x8a, 0x53, + 0x91, 0xa7, 0x42, 0xc7, 0x31, 0x7b, 0x5f, 0x59, 0xb7, 0xfe, 0xf9, 0x88, + 0xbd, 0x06, 0xac, 0x75, 0x9f, 0x0f, 0x43, 0x5f, 0x1b, 0xd8, 0xe8, 0xdb, + 0x38, 0xb0, 0x3f, 0x27, 0x40, 0xfd, 0x89, 0x74, 0x46, 0x10, 0x88, 0x2f, + 0x33, 0xe5, 0x95, 0x9d, 0xd8, 0xf8, 0xe0, 0x33, 0x29, 0x1f, 0xf7, 0xe0, + 0xa1, 0x96, 0x9a, 0x55, 0xa3, 0xb6, 0x83, 0x25, 0x46, 0xc7, 0xdd, 0x7e, + 0x2d, 0xa8, 0x74, 0x27, 0x7f, 0xda, 0xae, 0x78, 0x30, 0x59, 0xb3, 0x43, + 0x29, 0xb8, 0x30, 0x13, 0x12, 0x22, 0x7e, 0x34, 0xf9, 0x79, 0xda, 0xc9, + 0x5e, 0xd9, 0x98, 0x94, 0xa7, 0x72, 0x3b, 0x90, 0xa5, 0x33, 0xed, 0xe6, + 0xdd, 0xd6, 0x9c, 0xf7, 0xb3, 0xb7, 0xaa, 0xee, 0x7b, 0xd0, 0xe3, 0x4f, + 0xe4, 0x17, 0xc1, 0xb0, 0xa4, 0xc0, 0x34, 0x25, 0xa6, 0x3b, 0x29, 0x55, + 0x79, 0xa9, 0x24, 0x79, 0x7d, 0xad, 0xee, 0x6e, 0x77, 0xd3, 0x06, 0x33, + 0x8b, 0x0d, 0xf0, 0xdf, 0x5e, 0xdb, 0xfd, 0xfc, 0x71, 0x66, 0x1e, 0x2a, + 0x68, 0xc9, 0x6c, 0x07, 0x2b, 0x3e, 0x7d, 0x9c, 0x23, 0xa9, 0x98, 0x4f, + 0x57, 0x3d, 0xf6, 0x3c, 0xdc, 0x72, 0xab, 0x74, 0x34, 0x33, 0x74, 0x49, + 0xd7, 0x38, 0xcb, 0x82, 0x38, 0x75, 0x87, 0x59, 0x77, 0xa7, 0xa3, 0x70, + 0xf5, 0xfc, 0xc9, 0xed, 0xdb, 0x4e, 0xbb, 0xc5, 0x1b, 0x92, 0xea, 0xd5, + 0x03, 0xd7, 0x67, 0xd6, 0x94, 0xb6, 0xb2, 0xfb, 0x5b, 0x09, 0x96, 0x96, + 0xa5, 0x09, 0x91, 0x35, 0x37, 0xd3, 0x8d, 0x10, 0x1c, 0xe7, 0xa4, 0xe7, + 0x5d, 0xbc, 0x1c, 0xed, 0xe4, 0x04, 0x16, 0x24, 0xc5, 0x84, 0x59, 0x44, + 0xcb, 0xb4, 0x6b, 0x81, 0xdb, 0xc4, 0x3c, 0x0f, 0xb9, 0x6b, 0x4d, 0xf8, + 0x70, 0x2f, 0x80, 0x61, 0xd0, 0xbe, 0xc1, 0x61, 0xfe, 0xbf, 0x18, 0xce, + 0x71, 0x79, 0xae, 0xe6, 0x24, 0x3e, 0x6b, 0x04, 0x22, 0x9a, 0x7c, 0xf4, + 0x01, 0xa2, 0x80, 0x84, 0x6e, 0xd1, 0x11, 0x27, 0xa9, 0xd9, 0xb1, 0xf8, + 0xdd, 0xf5, 0xb3, 0x7a, 0xa9, 0xb5, 0x19, 0x44, 0xa6, 0x3d, 0xc8, 0x43, + 0x33, 0x0c, 0xaf, 0x5c, 0x52, 0x6c, 0x3b, 0x1b, 0xce, 0x62, 0x56, 0xd0, + 0x09, 0x2c, 0xe5, 0xca, 0xf3, 0x94, 0x01, 0xfa, 0xf6, 0x76, 0xa2, 0x2f, + 0xb0, 0x58, 0x5e, 0xfc, 0xaf, 0xf4, 0xc1, 0xde, 0xde, 0xaa, 0x04, 0x53, + 0xbc, 0x51, 0xfa, 0xa0, 0x74, 0xf7, 0x6e, 0x98, 0x32, 0x67, 0x2d, 0xc7, + 0xde, 0x56, 0x2c, 0xae, 0x4c, 0xe6, 0xa2, 0x02, 0x1c, 0x59, 0x38, 0x3a, + 0xf6, 0xa2, 0x27, 0xec, 0xd6, 0xf3, 0x67, 0xd1, 0x3f, 0x54, 0x77, 0x26, + 0x76, 0x56, 0xa7, 0xe8, 0x32, 0x8e, 0x8c, 0xae, 0xf5, 0x18, 0x1e, 0x8b, + 0x69, 0xda, 0xf4, 0x94, 0x3e, 0xac, 0x2e, 0xf7, 0x9e, 0x37, 0xae, 0x36, + 0x5f, 0x5d, 0xe5, 0xbe, 0x20, 0x19, 0xdd, 0xfc, 0x9e, 0xf8, 0xde, 0xe6, + 0xd1, 0xfc, 0xc7, 0x1a, 0xb4, 0x3d, 0x6a, 0x4a, 0x2f, 0x13, 0xdf, 0x18, + 0xfd, 0x4e, 0x47, 0xb0, 0x67, 0xed, 0xa8, 0xe4, 0xc2, 0x8b, 0x69, 0xa5, + 0x0b, 0xbc, 0xc3, 0x81, 0x6b, 0x3f, 0xfa, 0xc8, 0xeb, 0x22, 0xb5, 0x56, + 0xed, 0x56, 0xed, 0x90, 0xdf, 0x84, 0x4c, 0x43, 0xdd, 0xf8, 0x05, 0x9d, + 0x4c, 0xab, 0x93, 0x19, 0xe2, 0xd5, 0x89, 0xdb, 0xb5, 0x27, 0x87, 0xce, + 0x03, 0xbb, 0x45, 0xc6, 0x69, 0x97, 0x66, 0xd6, 0xb4, 0x53, 0x04, 0xda, + 0x17, 0x81, 0x72, 0xce, 0xfd, 0x3a, 0x64, 0xba, 0x73, 0xfe, 0x8c, 0x8c, + 0x6b, 0xf0, 0xbf, 0x17, 0x29, 0xa2, 0x7d, 0xfe, 0x43, 0xbe, 0x68, 0xc5, + 0xc3, 0x43, 0xef, 0xe8, 0x78, 0x31, 0x14, 0x5a, 0x15, 0x66, 0xe4, 0xed, + 0x93, 0x85, 0x41, 0x44, 0x70, 0x12, 0x67, 0x22, 0xa1, 0x0a, 0xaf, 0x0e, + 0x36, 0x22, 0xd6, 0xa5, 0xb4, 0x3f, 0x9b, 0x88, 0x61, 0x08, 0x2d, 0x20, + 0x81, 0x5e, 0x28, 0x83, 0x1a, 0x04, 0x73, 0xf6, 0xb8, 0x91, 0xbb, 0x3a, + 0xc5, 0xd0, 0xab, 0x6c, 0xcb, 0x26, 0x8c, 0xa7, 0xe9, 0x0a, 0x97, 0x9f, + 0x3b, 0x29, 0x03, 0xf8, 0x6f, 0x63, 0x2e, 0x03, 0x3b, 0x1c, 0x66, 0xe4, + 0x63, 0x0e, 0x84, 0x11, 0x33, 0xbc, 0xde, 0xbf, 0x2b, 0x33, 0x46, 0xa0, + 0xbb, 0xf7, 0xf6, 0xd0, 0xc1, 0x7f, 0xb6, 0xf5, 0x93, 0xe3, 0x9c, 0xee, + 0x2e, 0x3d, 0x92, 0xf7, 0x1a, 0xcc, 0x36, 0x91, 0x10, 0x3f, 0x8a, 0xf7, + 0x8a, 0x25, 0x3f, 0x6f, 0x22, 0xf3, 0xcf, 0x6b, 0x4c, 0xd9, 0xb1, 0xc1, + 0x91, 0x64, 0x9c, 0xbd, 0xc5, 0xfe, 0x9c, 0x39, 0xb1, 0x4d, 0xb0, 0x91, + 0x88, 0xf1, 0x10, 0x88, 0x9d, 0xd7, 0x75, 0x30, 0xf2, 0x1b, 0x51, 0x1c, + 0x7a, 0x61, 0x58, 0x48, 0xc5, 0x72, 0x99, 0xb7, 0x06, 0xc4, 0xa3, 0x4b, + 0x41, 0x89, 0x51, 0x3f, 0x77, 0x4a, 0xf3, 0x43, 0xc9, 0x32, 0xb2, 0x98, + 0x4c, 0x9c, 0x55, 0xe4, 0x98, 0x2a, 0x93, 0x1b, 0x03, 0x40, 0x6b, 0x69, + 0xfc, 0x12, 0x0a, 0x4c, 0x81, 0x12, 0x84, 0x51, 0xc6, 0xa8, 0xb2, 0xa9, + 0xf3, 0xcd, 0xc5, 0x93, 0xba, 0x9c, 0x2c, 0x3e, 0xe3, 0xa2, 0x12, 0x25, + 0x4b, 0xd0, 0x84, 0xeb, 0x1f, 0x20, 0x41, 0x47, 0xca, 0xd7, 0xad, 0x2b, + 0x5f, 0xa1, 0xf5, 0x43, 0x14, 0xe1, 0xc7, 0x1d, 0x8c, 0x52, 0x61, 0xde, + 0xdd, 0xd5, 0xfa, 0x04, 0x19, 0x10, 0x32, 0xc8, 0x63, 0x73, 0x57, 0x83, + 0x33, 0x6f, 0x70, 0x82, 0x14, 0x15, 0x4f, 0x58, 0x2a, 0x9e, 0x06, 0xe9, + 0x61, 0x54, 0x74, 0xbf, 0x13, 0x62, 0x10, 0x3f, 0xeb, 0x10, 0xfc, 0xa2, + 0x3e, 0xd5, 0xa4, 0x05, 0xd1, 0x09, 0x5a, 0x75, 0xfe, 0xd6, 0xd5, 0x24, + 0x97, 0x8f, 0x8d, 0x74, 0xf8, 0x57, 0xfb, 0x8b, 0x86, 0xda, 0x15, 0xe4, + 0x51, 0x8c, 0x20, 0x0a, 0x40, 0xdc, 0xc5, 0x7e, 0xa2, 0x1e, 0xb9, 0xb2, + 0xe7, 0xf9, 0x70, 0xd2, 0x1f, 0x0e, 0x33, 0x1e, 0xa9, 0x58, 0xdd, 0xd6, + 0x78, 0x3e, 0x03, 0xe3, 0x53, 0xd2, 0xc9, 0x79, 0x6f, 0x8f, 0xaa, 0x22, + 0xe1, 0xc6, 0x9f, 0xb0, 0x3d, 0xa9, 0x1b, 0xaa, 0x6b, 0xdd, 0xc8, 0x8d, + 0xa8, 0xab, 0x30, 0x95, 0x47, 0x65, 0xe9, 0x28, 0xe7, 0xff, 0xca, 0xfe, + 0x5f, 0x8e, 0x7f, 0x0c, 0xd5, 0x4f, 0x5d, 0xdd, 0x86, 0x10, 0x90, 0x06, + 0x37, 0x52, 0x1c, 0x84, 0x2d, 0x57, 0x33, 0x0c, 0xec, 0xde, 0xbd, 0xf8, + 0x00, 0x19, 0x57, 0xb7, 0x08, 0xc4, 0x8a, 0x58, 0xb4, 0x8b, 0x2f, 0xc8, + 0xdc, 0x15, 0xf6, 0x90, 0x45, 0x12, 0x64, 0xbb, 0x65, 0x8b, 0xa0, 0x6c, + 0x46, 0xb2, 0xad, 0x57, 0xd9, 0x49, 0xc5, 0x2f, 0xbd, 0x64, 0xf3, 0x47, + 0xc4, 0xfa, 0x41, 0xb3, 0xcf, 0x33, 0x61, 0xc2, 0xea, 0x8a, 0x0a, 0x61, + 0x6e, 0x95, 0xee, 0x10, 0xf3, 0xc9, 0x00, 0xd9, 0x49, 0xdd, 0x58, 0x69, + 0xb5, 0xfa, 0xdd, 0xb9, 0x4a, 0x49, 0x63, 0x41, 0x51, 0x63, 0xc3, 0x60, + 0x63, 0xe3, 0x60, 0x43, 0x63, 0x11, 0x55, 0x70, 0x8d, 0xc0, 0x9e, 0x7c, + 0xe9, 0xcc, 0xd5, 0x2f, 0xf8, 0x0b, 0xc1, 0x97, 0x92, 0xab, 0x51, 0x4d, + 0xe1, 0x41, 0x63, 0xfd, 0xf7, 0x23, 0x31, 0x2b, 0xc2, 0xa9, 0x6a, 0x65, + 0xe9, 0x61, 0x1e, 0x95, 0x85, 0xa8, 0xa6, 0xba, 0xef, 0x52, 0x60, 0x3c, + 0x79, 0xc2, 0xf3, 0x07, 0xe3, 0x7e, 0x90, 0x2f, 0xfb, 0xe1, 0xae, 0xff, + 0x6b, 0x4a, 0x53, 0xfd, 0xfb, 0x67, 0x59, 0x6a, 0xf9, 0x2c, 0x32, 0x29, + 0xe2, 0xfb, 0xe1, 0xfa, 0x32, 0xfd, 0x27, 0xd0, 0x7a, 0x39, 0xe7, 0xc7, + 0xb2, 0x1f, 0x0f, 0xc6, 0x59, 0x4e, 0x00, 0xb7, 0xc7, 0xd3, 0x57, 0xfc, + 0x9a, 0xfa, 0xa1, 0x29, 0x23, 0x7c, 0x9f, 0x5d, 0x0c, 0x9a, 0x2f, 0xf8, + 0xf3, 0x61, 0xc8, 0x8f, 0xab, 0x50, 0x34, 0x7a, 0x3b, 0x72, 0x4f, 0x1c, + 0x69, 0x2b, 0x45, 0x18, 0x86, 0x91, 0xe1, 0xc5, 0xd2, 0xe9, 0x4e, 0x73, + 0xed, 0x67, 0x23, 0x8d, 0x41, 0xf2, 0xb2, 0x35, 0x9d, 0x1d, 0x9d, 0x9d, + 0x7b, 0xf6, 0x00, 0x19, 0x3a, 0x46, 0xb6, 0x19, 0xfc, 0xcc, 0xe2, 0x3e, + 0x34, 0xe8, 0x18, 0x58, 0x31, 0x77, 0x70, 0x84, 0x8a, 0xd9, 0x4c, 0xbb, + 0xbf, 0xab, 0x38, 0x1b, 0xc4, 0x22, 0x2b, 0x4f, 0xb8, 0xd5, 0xae, 0xf7, + 0xfb, 0xf5, 0xbd, 0x43, 0xde, 0xa0, 0x4b, 0x41, 0x1f, 0x4c, 0xaf, 0xdd, + 0x35, 0x75, 0x85, 0xac, 0xcd, 0x33, 0xb6, 0x1e, 0x8a, 0x9b, 0x00, 0x8b, + 0x37, 0xdc, 0xb1, 0xd8, 0x43, 0xcf, 0xe0, 0x90, 0x71, 0x36, 0xac, 0x8b, + 0xc1, 0xbb, 0x52, 0x71, 0xe0, 0xa9, 0xd0, 0xff, 0x88, 0xa9, 0xba, 0xda, + 0xeb, 0x17, 0xef, 0x6c, 0x9a, 0xfe, 0xcf, 0x0c, 0xcb, 0x76, 0xbe, 0xb1, + 0x61, 0x4a, 0x40, 0x2f, 0x03, 0x8e, 0xbb, 0x6a, 0xc5, 0xa7, 0x75, 0xe0, + 0x8e, 0x93, 0x84, 0x25, 0x58, 0x10, 0x04, 0x4c, 0x58, 0xa8, 0x98, 0xb8, + 0xae, 0xef, 0x43, 0xbe, 0x81, 0x68, 0xb0, 0x68, 0xdc, 0xa1, 0x67, 0x9e, + 0x94, 0xfd, 0x69, 0xbc, 0x28, 0xcf, 0xad, 0xa2, 0xdd, 0x4e, 0xa6, 0x94, + 0xa0, 0xaf, 0x7f, 0x86, 0xe6, 0x16, 0x94, 0xcf, 0x4c, 0x23, 0xa4, 0x40, + 0xbd, 0x42, 0xfa, 0x0c, 0x25, 0x18, 0x78, 0x5a, 0xa4, 0x55, 0x4c, 0xa0, + 0x68, 0xd2, 0xca, 0x18, 0x5c, 0xe7, 0x0d, 0x2a, 0x81, 0x92, 0x54, 0x17, + 0x33, 0x9e, 0xf9, 0x94, 0xbd, 0x66, 0x68, 0x7d, 0xd1, 0xa5, 0xf1, 0xf1, + 0x3f, 0xe6, 0xf1, 0xd3, 0xb9, 0xc6, 0x88, 0x7f, 0x55, 0xca, 0x22, 0x64, + 0x2c, 0xee, 0x7d, 0xa0, 0x72, 0x16, 0x2f, 0xa2, 0xe7, 0xb4, 0x8b, 0xf2, + 0x67, 0x9f, 0x65, 0x78, 0xd6, 0x5c, 0x80, 0xcc, 0x66, 0xfe, 0xdc, 0xb3, + 0xac, 0x7c, 0x79, 0x98, 0x54, 0x57, 0x15, 0x17, 0x8e, 0x3e, 0x72, 0x1a, + 0xa8, 0xd9, 0x65, 0x28, 0x78, 0xb7, 0x6f, 0x7e, 0x9b, 0x25, 0x73, 0x64, + 0x2a, 0x6a, 0xfa, 0xce, 0x7b, 0xb9, 0x1a, 0x0c, 0x74, 0xc7, 0x44, 0xc3, + 0x49, 0x5d, 0xb3, 0x1b, 0xb9, 0xdd, 0xc7, 0xc4, 0x6e, 0xe9, 0x2d, 0x37, + 0x7a, 0xcf, 0x68, 0x62, 0xe9, 0x15, 0xe5, 0x2d, 0xfb, 0x67, 0xbc, 0x73, + 0x6f, 0xa7, 0xbc, 0x3d, 0x57, 0x74, 0x1a, 0x7f, 0x8c, 0xb9, 0x96, 0x10, + 0x07, 0x9c, 0xc0, 0xc1, 0x30, 0x20, 0x53, 0x68, 0x6e, 0x62, 0x97, 0x5c, + 0xdf, 0x14, 0xcb, 0xce, 0x41, 0xa7, 0xd9, 0xcc, 0x65, 0x6f, 0x78, 0x26, + 0x99, 0x28, 0x59, 0xfc, 0x19, 0x3c, 0x9e, 0xe2, 0x4e, 0x31, 0x72, 0x0e, + 0xb3, 0x78, 0x4a, 0xa0, 0x84, 0xcb, 0x76, 0x4a, 0xc0, 0x17, 0x8e, 0xd0, + 0x5c, 0xfc, 0x20, 0x33, 0x68, 0xb0, 0x61, 0x82, 0x45, 0xdb, 0xa2, 0x82, + 0x06, 0x95, 0x0f, 0xe1, 0xe2, 0xad, 0x05, 0xf4, 0x1b, 0xf8, 0x9b, 0x84, + 0x34, 0x64, 0xfb, 0x4d, 0x68, 0x2e, 0x43, 0xab, 0x96, 0x1f, 0x13, 0x0c, + 0xeb, 0xb6, 0xae, 0x1b, 0x08, 0xee, 0x47, 0x1e, 0x33, 0x3a, 0x56, 0xfe, + 0x90, 0x5a, 0xa1, 0x7e, 0x48, 0x7f, 0x39, 0x60, 0x59, 0xfe, 0x59, 0x7d, + 0x20, 0xf6, 0x68, 0x5b, 0x18, 0xd3, 0x07, 0xd8, 0x9e, 0xe5, 0xb0, 0x13, + 0x8b, 0x06, 0xef, 0xe3, 0x34, 0x1b, 0x27, 0x3f, 0x3d, 0xd3, 0x73, 0x4f, + 0x93, 0x7b, 0xd6, 0x9f, 0x1c, 0xe5, 0xed, 0xbb, 0x62, 0xdb, 0xec, 0xad, + 0xab, 0x9f, 0x78, 0xa3, 0x0d, 0x0f, 0x31, 0x37, 0x1e, 0xde, 0xcd, 0x67, + 0x6e, 0x96, 0x67, 0xb8, 0xe5, 0xa0, 0x0f, 0x46, 0x0f, 0x34, 0x18, 0x37, + 0xad, 0x10, 0xc5, 0x65, 0x74, 0x6f, 0x0a, 0x8a, 0x7c, 0x76, 0x54, 0xbb, + 0xbe, 0x35, 0xb1, 0x0a, 0xf3, 0x0e, 0xb1, 0xc5, 0x8e, 0xb5, 0x88, 0x3a, + 0x99, 0x9c, 0x5f, 0xac, 0x5b, 0x44, 0x1e, 0x04, 0x3e, 0x2a, 0x2e, 0xe3, + 0xac, 0x1c, 0x87, 0x3e, 0xba, 0xb7, 0x2c, 0xb2, 0x09, 0x33, 0x37, 0xa8, + 0x94, 0x39, 0x8b, 0x39, 0x4a, 0x49, 0x57, 0x8d, 0xcf, 0x86, 0x8a, 0x5a, + 0x07, 0x82, 0x89, 0x81, 0xb7, 0xa9, 0x89, 0x0d, 0x37, 0xff, 0xb7, 0x9b, + 0x61, 0xde, 0x3b, 0x7c, 0x78, 0xc1, 0x9d, 0xc0, 0x78, 0x49, 0xa8, 0xf6, + 0x7a, 0x82, 0x89, 0xde, 0x6c, 0x3e, 0x75, 0xe5, 0x61, 0x96, 0xae, 0xa6, + 0xf5, 0x4e, 0xf3, 0xa4, 0x7c, 0x54, 0xf8, 0x04, 0x66, 0x47, 0x41, 0x7e, + 0xff, 0x21, 0x83, 0x9c, 0x61, 0xe8, 0x59, 0x34, 0x4b, 0x83, 0x07, 0xb7, + 0x93, 0xb8, 0x3b, 0x66, 0xaf, 0x0b, 0x36, 0x20, 0xee, 0x5f, 0x5d, 0x3a, + 0xd9, 0x2f, 0x04, 0xc7, 0x7b, 0x61, 0xef, 0x78, 0x3f, 0xe1, 0xb8, 0x7d, + 0x4c, 0xae, 0x56, 0xcd, 0xe9, 0x62, 0x4d, 0xe6, 0x8e, 0x3e, 0x30, 0x30, + 0x16, 0x1e, 0xa4, 0x92, 0x30, 0xba, 0x39, 0xe3, 0x57, 0x18, 0xc9, 0x1c, + 0x93, 0x09, 0x10, 0xcd, 0x63, 0xed, 0xd9, 0xc9, 0x9f, 0x17, 0xee, 0xff, + 0x81, 0x0a, 0xa5, 0x8a, 0x26, 0x82, 0xcb, 0x5c, 0xcb, 0x1a, 0xcb, 0xd8, + 0x04, 0x23, 0x53, 0xa6, 0xfb, 0x02, 0xb7, 0x21, 0x2d, 0x48, 0x1c, 0x41, + 0xd5, 0x7c, 0xfb, 0x7d, 0xf2, 0x06, 0xe6, 0x4b, 0xed, 0x63, 0x5f, 0x64, + 0xc2, 0x79, 0x49, 0x26, 0x27, 0x82, 0x1a, 0xae, 0x6c, 0x44, 0x84, 0x8c, + 0xcd, 0xce, 0xd9, 0xcf, 0xa0, 0xae, 0x2c, 0xb0, 0x67, 0x26, 0xc4, 0x0f, + 0xea, 0x12, 0xe4, 0xcf, 0x38, 0x71, 0x13, 0x91, 0x39, 0x63, 0xf5, 0x8d, + 0x1a, 0x71, 0x1f, 0x58, 0xb6, 0xcc, 0xdb, 0xde, 0xf6, 0xb9, 0xb7, 0x8d, + 0x7a, 0xb9, 0xf3, 0x9e, 0x64, 0xe6, 0xf9, 0xe2, 0x44, 0x5d, 0xb0, 0x37, + 0xe9, 0x88, 0x17, 0x02, 0x48, 0xb3, 0xa3, 0xa3, 0xb5, 0x32, 0xea, 0xd4, + 0x2f, 0x5e, 0x53, 0x42, 0xbc, 0xc9, 0x08, 0x3d, 0xa8, 0x52, 0xb3, 0xb6, + 0xad, 0xcb, 0x8f, 0xf9, 0x7e, 0x1e, 0x77, 0xf9, 0x6b, 0x6d, 0xa1, 0xae, + 0xae, 0x9c, 0xd5, 0xbb, 0x99, 0xdb, 0x37, 0x88, 0xab, 0xde, 0xfa, 0x64, + 0xfd, 0x6d, 0x3c, 0x81, 0x10, 0x9a, 0xc0, 0x86, 0x53, 0x99, 0x8d, 0x56, + 0x50, 0x0e, 0x61, 0xd4, 0x28, 0x86, 0x79, 0x92, 0x07, 0x77, 0x31, 0x86, + 0xb9, 0xff, 0x7e, 0xc8, 0xa9, 0x20, 0x8e, 0x91, 0xc0, 0x85, 0x4a, 0x44, + 0x10, 0xe0, 0x88, 0x19, 0x3c, 0x24, 0x7f, 0xd9, 0xcd, 0x30, 0x5d, 0x13, + 0x60, 0xcc, 0x52, 0xec, 0x6f, 0x75, 0x78, 0x3f, 0xbf, 0x69, 0x0c, 0xd8, + 0x9b, 0x57, 0xa8, 0xcd, 0xdc, 0x62, 0x72, 0xf7, 0x1f, 0xa8, 0xed, 0xd9, + 0x86, 0xc0, 0x48, 0xcd, 0x52, 0x72, 0x39, 0x4d, 0xd1, 0xd8, 0xdd, 0x92, + 0x02, 0x44, 0x72, 0x93, 0x34, 0xbe, 0x59, 0x43, 0x7b, 0x68, 0x70, 0x64, + 0xa3, 0x6c, 0x50, 0x6a, 0x54, 0x0a, 0x20, 0xeb, 0xf7, 0xd3, 0x0e, 0x1e, + 0xe1, 0x4f, 0xa9, 0x2d, 0x13, 0xee, 0xf1, 0x25, 0x54, 0xd8, 0x38, 0x36, + 0x42, 0xa6, 0x51, 0xec, 0x24, 0xcc, 0x1a, 0xc1, 0x13, 0x24, 0x6a, 0x57, + 0x02, 0x89, 0x58, 0x59, 0xa8, 0x00, 0x8e, 0xb0, 0x84, 0xcc, 0xdf, 0xf1, + 0x7b, 0xc6, 0xb2, 0xcb, 0xf5, 0x0b, 0x2c, 0x28, 0x5d, 0x6e, 0x37, 0xf4, + 0x66, 0x0f, 0x73, 0xff, 0x44, 0x20, 0x90, 0x64, 0x37, 0xf9, 0x2b, 0x6c, + 0x7b, 0x61, 0x21, 0xa0, 0x69, 0x39, 0x87, 0x1f, 0x94, 0x14, 0x91, 0xd8, + 0x41, 0x53, 0x4f, 0x46, 0xe9, 0x51, 0x1d, 0x37, 0x3b, 0xe8, 0x09, 0x08, + 0xbb, 0x3f, 0xf5, 0xef, 0x76, 0xa9, 0x86, 0x42, 0xb9, 0x6c, 0xa7, 0xe5, + 0xf9, 0x68, 0x9d, 0x4f, 0x17, 0xbd, 0x0f, 0xce, 0xcf, 0xa4, 0x45, 0xa0, + 0x6a, 0xd3, 0x84, 0xb8, 0x67, 0x8f, 0x68, 0xac, 0xf0, 0x3e, 0x95, 0xd7, + 0x30, 0xdd, 0x0a, 0xd3, 0xbe, 0xc6, 0x19, 0xe7, 0xc7, 0x85, 0xf2, 0x74, + 0xef, 0xd6, 0xac, 0x86, 0x7b, 0xde, 0x52, 0x7b, 0x83, 0x87, 0x0a, 0xe5, + 0xed, 0x7f, 0x6a, 0xe4, 0x43, 0xc6, 0xa6, 0x75, 0x03, 0x62, 0x3e, 0x87, + 0xc8, 0x65, 0x23, 0xb2, 0x9b, 0x9f, 0x23, 0x1c, 0xa3, 0x65, 0xcc, 0xcd, + 0xa0, 0xde, 0x7c, 0x87, 0x57, 0xa2, 0x74, 0x84, 0xad, 0x46, 0xff, 0x38, + 0x39, 0xce, 0x80, 0x05, 0xcc, 0xa1, 0x25, 0x63, 0x5a, 0xdc, 0xab, 0x02, + 0x20, 0xee, 0x00, 0x4c, 0xd5, 0x6e, 0x93, 0x02, 0x6c, 0xe3, 0x71, 0x3e, + 0x18, 0x20, 0x58, 0xad, 0xb7, 0x39, 0x4e, 0x42, 0xfe, 0x5f, 0x41, 0x65, + 0x7c, 0x73, 0xd7, 0x2e, 0xaa, 0x35, 0xd6, 0xd4, 0xdc, 0xca, 0x34, 0x31, + 0xfa, 0xd5, 0x4d, 0x4d, 0xab, 0x8b, 0x1a, 0x55, 0x43, 0xdf, 0x8d, 0xb4, + 0xd0, 0x83, 0xf3, 0xf1, 0x91, 0xa0, 0x42, 0x6c, 0x2a, 0x4e, 0x4d, 0x8a, + 0xe2, 0xe4, 0x94, 0xa9, 0xa1, 0xcd, 0xd7, 0x66, 0x57, 0x3a, 0x1e, 0x82, + 0x1c, 0x18, 0xa9, 0x37, 0x7e, 0xe2, 0x31, 0xc2, 0x37, 0x68, 0x92, 0x26, + 0xc7, 0xfd, 0x37, 0x1a, 0x45, 0xe7, 0xdc, 0xa3, 0x8f, 0x40, 0x37, 0x6b, + 0x4e, 0x48, 0x51, 0x72, 0xc4, 0x4f, 0x93, 0x03, 0xfe, 0xb4, 0x06, 0x4e, + 0x5b, 0x12, 0x90, 0x50, 0x7d, 0x33, 0x7e, 0x1a, 0xcf, 0xdb, 0xc6, 0xec, + 0x11, 0x83, 0x31, 0xf5, 0xe7, 0xf0, 0xd6, 0x72, 0x52, 0xec, 0x93, 0x47, + 0xd6, 0x46, 0xd9, 0xc2, 0x15, 0x79, 0x72, 0x0a, 0x29, 0x4a, 0x42, 0x3d, + 0x43, 0xa7, 0x23, 0x60, 0xb4, 0x44, 0xa2, 0x16, 0x06, 0x55, 0xea, 0x6e, + 0xb5, 0x34, 0xbb, 0x27, 0xb2, 0x99, 0x4c, 0x08, 0xa1, 0xce, 0x4e, 0x80, + 0xe8, 0x21, 0x3a, 0x88, 0x18, 0xac, 0xb4, 0xed, 0xb2, 0x1a, 0xe8, 0x1c, + 0x83, 0x28, 0xb0, 0x02, 0x5d, 0x68, 0xbe, 0x38, 0xcd, 0xc7, 0x4d, 0x8a, + 0x7d, 0xaa, 0xd8, 0xad, 0x3f, 0xe6, 0x5a, 0xe3, 0x5e, 0x3e, 0x52, 0xe4, + 0xda, 0x9e, 0xf0, 0xce, 0x7b, 0xba, 0x92, 0xce, 0x4b, 0x1b, 0xcb, 0x27, + 0xf0, 0x04, 0xec, 0xbc, 0xbe, 0xfd, 0xf2, 0x3b, 0xfb, 0xd4, 0x4d, 0xd4, + 0xf6, 0x84, 0x58, 0x5b, 0x4e, 0xcb, 0x8f, 0xa7, 0xac, 0x71, 0xad, 0x27, + 0x8e, 0x1c, 0x1f, 0xdb, 0x91, 0xf0, 0xce, 0xe8, 0xd7, 0x63, 0x6d, 0x0c, + 0xb8, 0xea, 0x91, 0x2f, 0xcb, 0x24, 0xf9, 0x13, 0x1a, 0xb1, 0x24, 0x6b, + 0x18, 0x04, 0x3a, 0x85, 0xa6, 0xe8, 0x6b, 0x98, 0xd0, 0xed, 0xd2, 0x18, + 0x19, 0xea, 0x27, 0x43, 0x6a, 0x35, 0x3e, 0xd2, 0x39, 0x76, 0xc7, 0x90, + 0x40, 0x50, 0x03, 0x67, 0xea, 0xfa, 0xe7, 0xbd, 0x11, 0xdf, 0xe3, 0xaf, + 0xc3, 0x43, 0x0f, 0x79, 0xb7, 0x6f, 0x1f, 0xf3, 0xba, 0x1f, 0xc7, 0x1e, + 0x2c, 0x63, 0x1a, 0xaa, 0x3d, 0x99, 0x85, 0x15, 0x15, 0x1b, 0xfe, 0xdc, + 0x76, 0x4b, 0x70, 0x44, 0xc4, 0xfe, 0x56, 0xb2, 0x9f, 0x1c, 0xd5, 0x6a, + 0x33, 0x90, 0x1b, 0x6f, 0xc6, 0xaf, 0xff, 0x79, 0xf8, 0x58, 0x99, 0x51, + 0x14, 0xe8, 0x28, 0x8a, 0x34, 0x67, 0x1a, 0xaa, 0x37, 0x97, 0x25, 0x66, + 0x9c, 0x42, 0x81, 0xc6, 0xb6, 0x7b, 0xd3, 0x92, 0x34, 0xc6, 0xf8, 0xb4, + 0x20, 0x03, 0x5f, 0xe9, 0x24, 0x5c, 0x67, 0x96, 0x3e, 0x03, 0xa7, 0x1f, + 0x4f, 0xc7, 0x29, 0x99, 0xc2, 0x3e, 0xa5, 0x74, 0x34, 0xed, 0x31, 0x69, + 0x49, 0x07, 0xa1, 0xb3, 0x2c, 0x59, 0x69, 0x6f, 0x24, 0x67, 0xcc, 0x6b, + 0xf5, 0x19, 0xff, 0xc5, 0xe9, 0xb7, 0x6a, 0x59, 0x7d, 0x41, 0xcd, 0x40, + 0x4f, 0xa5, 0xb2, 0xb7, 0xb0, 0x45, 0x29, 0x3d, 0x91, 0x36, 0x26, 0x5d, + 0x35, 0x32, 0x33, 0x25, 0xc4, 0x45, 0x97, 0x3c, 0x9e, 0xda, 0xaf, 0x5d, + 0x72, 0x07, 0x39, 0x48, 0x54, 0xee, 0x79, 0x25, 0x22, 0xa3, 0x4e, 0x53, + 0x14, 0x4a, 0xa7, 0xd9, 0xef, 0x5d, 0xa6, 0x51, 0xfe, 0xbe, 0xb1, 0x20, + 0xdb, 0x54, 0xd1, 0x67, 0xaa, 0xc8, 0x0e, 0xc1, 0x69, 0x46, 0x4d, 0xcd, + 0x13, 0xe9, 0x39, 0x49, 0xef, 0xbd, 0x38, 0x3c, 0xa2, 0x19, 0x0f, 0x08, + 0xa5, 0xc1, 0xbc, 0x7f, 0xbf, 0xc6, 0xee, 0x8e, 0x0d, 0x7a, 0xc7, 0x5b, + 0x42, 0xf9, 0x66, 0xfb, 0x99, 0xdd, 0x63, 0x83, 0xbf, 0xbd, 0x7f, 0x3e, + 0x19, 0x6f, 0x5b, 0x06, 0x9e, 0xbb, 0xb6, 0x6c, 0x5d, 0xb9, 0x23, 0x30, + 0xc8, 0x6d, 0x57, 0x55, 0x99, 0xff, 0x50, 0xb5, 0x1e, 0xca, 0xbb, 0x8d, + 0xec, 0x9e, 0x49, 0x4b, 0x06, 0x7f, 0x4f, 0xd9, 0xde, 0x3e, 0x93, 0x99, + 0x39, 0x33, 0x16, 0x0b, 0x69, 0xa5, 0xae, 0x3d, 0x70, 0x63, 0xa5, 0xdc, + 0x5d, 0x1c, 0xfd, 0x54, 0x66, 0x7c, 0x2e, 0x9b, 0xbb, 0xe9, 0xbf, 0x8a, + 0xf8, 0x5c, 0xea, 0xff, 0xd7, 0xa9, 0x33, 0x92, 0x4a, 0x67, 0x89, 0x50, + 0xf3, 0x0b, 0x60, 0x44, 0x68, 0x15, 0x9f, 0xe3, 0x9f, 0xb6, 0xac, 0x72, + 0x4d, 0xa1, 0x69, 0x4d, 0x65, 0x59, 0x83, 0x8b, 0x91, 0x8d, 0xc8, 0x6c, + 0xc8, 0x26, 0x40, 0xa9, 0xca, 0x39, 0xe8, 0x44, 0x18, 0x3b, 0x0c, 0x2b, + 0xc3, 0x16, 0xca, 0x5c, 0xfc, 0x84, 0x8d, 0x55, 0x9b, 0xce, 0x56, 0xb4, + 0x90, 0x9d, 0x3b, 0x3c, 0xb2, 0x29, 0x43, 0xbe, 0x8c, 0x9d, 0x4f, 0xd7, + 0x66, 0xd4, 0x32, 0xc7, 0x32, 0xac, 0x30, 0x32, 0x05, 0x09, 0x20, 0x1f, + 0xd6, 0xa4, 0x47, 0x6b, 0x4c, 0x39, 0xba, 0xb4, 0x20, 0x3f, 0xd7, 0x59, + 0x40, 0xf2, 0x6b, 0xeb, 0xa7, 0x1a, 0xd3, 0xb2, 0x5d, 0x22, 0xe8, 0x84, + 0xba, 0x9e, 0x8f, 0x53, 0x74, 0x5e, 0x5d, 0x4a, 0x42, 0x9a, 0x2e, 0x6d, + 0x3b, 0xa5, 0x24, 0x4a, 0x2a, 0xc8, 0xe6, 0x76, 0xcc, 0xe3, 0x6b, 0x03, + 0xa0, 0x44, 0xc5, 0x5b, 0x85, 0x79, 0x68, 0x55, 0x4c, 0x0d, 0x31, 0xe7, + 0x41, 0x43, 0x88, 0xb3, 0x49, 0x27, 0xa5, 0x9f, 0xc3, 0xab, 0x42, 0x36, + 0x76, 0x6c, 0x3f, 0x84, 0x1c, 0x3c, 0xa1, 0x9f, 0xf6, 0x05, 0x72, 0x37, + 0xd1, 0x4d, 0x2d, 0x23, 0x1a, 0x46, 0x95, 0x0a, 0x34, 0xbb, 0x1a, 0x4a, + 0xe8, 0xd3, 0x2b, 0x77, 0x20, 0x86, 0xae, 0xcf, 0x23, 0x04, 0xba, 0xea, + 0x97, 0xea, 0xaa, 0x6d, 0x74, 0xd0, 0x9c, 0xb4, 0x4d, 0x0d, 0x81, 0xcb, + 0x5e, 0x6f, 0xab, 0xae, 0xfa, 0xa5, 0xac, 0x21, 0x28, 0x2d, 0x2d, 0x68, + 0xce, 0xeb, 0x7b, 0xa2, 0xeb, 0xc8, 0xe6, 0x3a, 0x12, 0x5d, 0x06, 0x80, + 0xe2, 0x97, 0xe5, 0x81, 0x7e, 0xfb, 0xf9, 0x6b, 0x27, 0x82, 0x6a, 0xd3, + 0x6d, 0xf5, 0x81, 0x46, 0xaf, 0x5d, 0xe7, 0x4f, 0x2c, 0xfc, 0xc6, 0xef, + 0xdf, 0xc1, 0xeb, 0xf4, 0xc0, 0x5a, 0xd1, 0x23, 0x81, 0x27, 0xf2, 0x88, + 0x25, 0x0c, 0xcf, 0x2b, 0x98, 0xaa, 0x00, 0x51, 0x8d, 0x09, 0x0a, 0xfa, + 0x19, 0xea, 0x17, 0x2c, 0x10, 0x64, 0x43, 0x3f, 0x23, 0x0e, 0x42, 0x40, + 0x53, 0x8b, 0x17, 0x71, 0x91, 0x76, 0x28, 0x04, 0x05, 0x5f, 0x45, 0x0e, + 0xc2, 0x40, 0xd2, 0xdd, 0xb6, 0x01, 0x17, 0xde, 0xbb, 0x6c, 0x56, 0xb0, + 0xe6, 0x6c, 0xba, 0xc2, 0x97, 0x0f, 0x29, 0x24, 0xdf, 0xcf, 0xf0, 0xe2, + 0x2e, 0x7b, 0x09, 0x09, 0xee, 0x93, 0x6f, 0x49, 0x9a, 0xce, 0x7e, 0x63, + 0xc6, 0x1f, 0x27, 0xeb, 0xf0, 0x7a, 0x42, 0x02, 0x00, 0x06, 0xb8, 0x22, + 0x69, 0x5f, 0xd7, 0xbe, 0x96, 0xfc, 0xb7, 0x4a, 0x6a, 0x72, 0x09, 0xa3, + 0x29, 0xbe, 0xc8, 0xc4, 0x39, 0x50, 0x95, 0x10, 0x5f, 0x69, 0x1c, 0xbf, + 0x24, 0x26, 0xbc, 0x2d, 0x9d, 0xcb, 0xff, 0x20, 0xe5, 0xcd, 0xe5, 0x0f, + 0x1b, 0xd2, 0xc9, 0xd3, 0x1b, 0xbb, 0x9b, 0x83, 0xf9, 0x44, 0x7e, 0x48, + 0x70, 0x7c, 0xda, 0x74, 0xf2, 0xea, 0x00, 0xc5, 0xd6, 0xa0, 0x29, 0x2c, + 0x35, 0x77, 0xa9, 0x9c, 0xce, 0x90, 0x11, 0x2c, 0x0c, 0xa8, 0x23, 0xd1, + 0x4b, 0xe4, 0x26, 0xb7, 0xd7, 0xc0, 0xbc, 0x67, 0xd0, 0x32, 0x6d, 0x9e, + 0x54, 0x3d, 0x98, 0xf7, 0xe8, 0x9f, 0xcf, 0x00, 0x17, 0x59, 0x9a, 0x63, + 0x03, 0x4d, 0x68, 0x02, 0x1f, 0x76, 0xe0, 0xca, 0x86, 0xa9, 0x94, 0xd1, + 0x94, 0x91, 0x94, 0xdd, 0x29, 0xb0, 0x31, 0xac, 0xa1, 0x9d, 0xde, 0xa4, + 0x57, 0xef, 0x73, 0xa5, 0xfc, 0xbb, 0xcd, 0x9f, 0xff, 0x49, 0xe6, 0x27, + 0xe7, 0xa7, 0x21, 0x28, 0x61, 0x72, 0x34, 0x8a, 0x6e, 0x94, 0x77, 0x1c, + 0xe6, 0x94, 0x44, 0x39, 0xef, 0xd2, 0xf9, 0x78, 0x1a, 0x61, 0xec, 0xe8, + 0x68, 0xcb, 0xc5, 0xe0, 0x49, 0xb4, 0xf2, 0xa1, 0xa8, 0x6f, 0xbc, 0x68, + 0xeb, 0xf7, 0xab, 0x27, 0x26, 0xba, 0xc3, 0xa5, 0x35, 0xbb, 0x65, 0x1f, + 0xf9, 0xbb, 0x04, 0xf0, 0xfa, 0xe5, 0xfb, 0x94, 0xf9, 0x16, 0x4b, 0x6e, + 0xce, 0xdc, 0xfd, 0xf7, 0xab, 0x1b, 0x39, 0x1d, 0xa2, 0x51, 0xd7, 0x72, + 0x85, 0xc4, 0x5c, 0xe3, 0x07, 0x1a, 0xa1, 0x19, 0x22, 0x01, 0x14, 0x41, + 0xd5, 0xa0, 0x96, 0x0b, 0xf7, 0x51, 0xcb, 0xb1, 0xd4, 0xa6, 0x90, 0xe0, + 0xf8, 0xee, 0x3d, 0x7c, 0x8c, 0x9f, 0x90, 0xae, 0x10, 0x4c, 0x9b, 0x96, + 0x50, 0xd1, 0x6a, 0x5e, 0xe7, 0xc3, 0x0a, 0x81, 0x44, 0x6d, 0x31, 0x8f, + 0xbe, 0x88, 0x90, 0x62, 0xa2, 0x6b, 0x74, 0x0b, 0x1d, 0x85, 0xdc, 0xbc, + 0xee, 0x11, 0xe7, 0xcc, 0x5e, 0xd8, 0xde, 0xe9, 0x89, 0xbc, 0x27, 0xf2, + 0x3f, 0xcf, 0x5b, 0x90, 0x8a, 0x6b, 0x70, 0xc3, 0xf0, 0xc8, 0xe9, 0x91, + 0xe1, 0x27, 0x47, 0x06, 0xea, 0xd5, 0xe5, 0xee, 0x8a, 0x06, 0x1e, 0x87, + 0x3e, 0xcf, 0x84, 0x76, 0x39, 0x6c, 0x53, 0x0b, 0xe5, 0xd8, 0xc0, 0xcc, + 0x58, 0x5b, 0x98, 0x9c, 0x94, 0xfc, 0xf8, 0x63, 0xb1, 0xe7, 0xc5, 0xe9, + 0x80, 0x7e, 0x1a, 0x25, 0x24, 0x26, 0xff, 0x6e, 0x78, 0xf5, 0x62, 0x4d, + 0xd8, 0xd5, 0x08, 0x29, 0x5f, 0x1a, 0xd1, 0x8f, 0xbd, 0x3e, 0x68, 0x9d, + 0xc7, 0x87, 0xb3, 0x6f, 0x83, 0x60, 0xab, 0xf3, 0x37, 0x90, 0x46, 0x73, + 0x69, 0x4f, 0xd5, 0x4a, 0x0b, 0x2e, 0x5b, 0xae, 0x4d, 0x72, 0x95, 0x58, + 0x56, 0xf6, 0x54, 0x95, 0x26, 0x5a, 0xe2, 0x5b, 0xc8, 0x86, 0xfc, 0xe4, + 0x2a, 0x7c, 0x77, 0x1f, 0x1e, 0x4f, 0x88, 0xd0, 0xaa, 0xc6, 0xfb, 0xee, + 0x56, 0x61, 0x28, 0x94, 0xa1, 0xe0, 0x01, 0xe4, 0x6d, 0xcd, 0x46, 0x55, + 0x5c, 0x5c, 0xdc, 0x86, 0x78, 0xed, 0xd7, 0x2b, 0x2b, 0x2b, 0xf3, 0xca, + 0xca, 0xa8, 0x32, 0xc7, 0x91, 0xe0, 0xb9, 0x53, 0x7f, 0x0b, 0x88, 0x1e, + 0xfd, 0xf3, 0x27, 0x3b, 0xb3, 0xc6, 0xb3, 0x02, 0xf4, 0x93, 0x53, 0x0d, + 0x32, 0x7f, 0x42, 0xfc, 0xc6, 0xf8, 0x84, 0x8d, 0xf1, 0x71, 0xb0, 0xfd, + 0xdf, 0x5a, 0xdd, 0xf5, 0x36, 0x2f, 0xeb, 0xc7, 0x77, 0xc6, 0x66, 0x1b, + 0x9c, 0x8f, 0x43, 0x8e, 0x2e, 0x98, 0x8b, 0xad, 0xa6, 0x3d, 0x5f, 0x1d, + 0x72, 0xb9, 0x54, 0xad, 0xab, 0x81, 0xf7, 0xd0, 0x66, 0x31, 0x6f, 0x4c, + 0xfb, 0xef, 0x17, 0xe7, 0xde, 0x46, 0x5f, 0xee, 0x50, 0xc4, 0x7f, 0x79, + 0xaa, 0xa5, 0xf5, 0x73, 0x2f, 0xab, 0x67, 0xdd, 0x3a, 0x11, 0x04, 0x75, + 0xbe, 0xb6, 0x5b, 0xba, 0xa2, 0x7f, 0x3a, 0x09, 0x91, 0xf2, 0x1b, 0xa3, + 0x54, 0x17, 0x4a, 0x67, 0x54, 0xe9, 0x5d, 0xa9, 0x17, 0xcb, 0x2d, 0xfe, + 0x38, 0xe5, 0x52, 0x24, 0x56, 0x9c, 0x0a, 0x44, 0x56, 0x6c, 0x37, 0x4e, + 0x63, 0xa7, 0xf6, 0xc0, 0x81, 0x0c, 0x97, 0x01, 0xbb, 0xf7, 0x69, 0xfb, + 0x96, 0x5f, 0xba, 0x24, 0xee, 0xd9, 0x33, 0xcb, 0x30, 0x9c, 0x08, 0x65, + 0x6c, 0xf6, 0xf8, 0xc5, 0x85, 0x8b, 0xde, 0x39, 0x16, 0xd4, 0x09, 0x3e, + 0xf0, 0x7e, 0xf0, 0x41, 0xf3, 0x39, 0xef, 0x9f, 0xd9, 0x11, 0xf5, 0xd9, + 0x11, 0xe3, 0xb1, 0x62, 0x42, 0x5d, 0x20, 0x9a, 0x82, 0x5f, 0x1f, 0x9f, + 0x96, 0xb2, 0x4e, 0xfe, 0x61, 0xdd, 0xf0, 0x32, 0x0a, 0x97, 0x0f, 0x29, + 0x45, 0x2b, 0xe7, 0xb5, 0x58, 0x16, 0x7f, 0xa2, 0x71, 0xde, 0x2d, 0xba, + 0xe7, 0xe7, 0x17, 0x1b, 0x7f, 0xa6, 0xb1, 0xbd, 0xbd, 0x1a, 0x7d, 0xed, + 0xb5, 0x76, 0xfb, 0x54, 0xff, 0x3a, 0xf7, 0xaf, 0x7f, 0xb5, 0xb7, 0x7d, + 0x39, 0x32, 0x12, 0xc9, 0xee, 0xc4, 0xab, 0x0b, 0x10, 0xae, 0x4c, 0xa9, + 0x16, 0xb7, 0xf1, 0x5a, 0xf5, 0x61, 0xeb, 0x35, 0x73, 0xed, 0x1d, 0x3d, + 0x8b, 0xd6, 0x6a, 0x5f, 0xe6, 0x95, 0x53, 0x0f, 0xb3, 0x6a, 0x74, 0x26, + 0x40, 0x52, 0x14, 0x6c, 0xe7, 0x67, 0xb3, 0x45, 0x9f, 0xb0, 0xa7, 0xb1, + 0xd9, 0x1f, 0x1d, 0x75, 0x4f, 0x27, 0x6c, 0x8b, 0x79, 0xcc, 0x9e, 0x5c, + 0x17, 0x6d, 0x76, 0x85, 0x51, 0x0c, 0x6c, 0x32, 0x0d, 0xbf, 0x62, 0x2b, + 0x19, 0x30, 0x8d, 0x7e, 0x98, 0xf0, 0x31, 0xc0, 0x52, 0x36, 0xa0, 0xc0, + 0x08, 0x7b, 0x80, 0xe2, 0x8c, 0x6c, 0x24, 0xd8, 0xee, 0x53, 0x50, 0x06, + 0x03, 0x76, 0xee, 0x59, 0x54, 0xbc, 0xed, 0xcb, 0xe8, 0x01, 0x13, 0xd2, + 0x77, 0xef, 0x24, 0xac, 0xb8, 0xb8, 0x69, 0x31, 0xa9, 0xdc, 0xe0, 0x4d, + 0xbd, 0x7c, 0x20, 0x4e, 0xcf, 0x96, 0x64, 0x7f, 0x5a, 0x90, 0x40, 0xc7, + 0xc8, 0x5b, 0x1b, 0xd3, 0x5b, 0x93, 0x87, 0x0e, 0x45, 0xc6, 0xb9, 0xcb, + 0xbe, 0x72, 0x3f, 0xd6, 0x29, 0x97, 0x21, 0x2f, 0xfa, 0x12, 0xcd, 0xa1, + 0xf5, 0x4b, 0x85, 0x65, 0xbf, 0xcd, 0xa1, 0x93, 0xac, 0xd8, 0xa4, 0xfd, + 0xef, 0x59, 0x02, 0x3e, 0xed, 0xc7, 0x21, 0x62, 0x9a, 0x24, 0xf3, 0x89, + 0x46, 0x2e, 0xfd, 0xd4, 0x62, 0x9f, 0xee, 0x5b, 0xee, 0x5b, 0xdd, 0xc2, + 0x9f, 0xad, 0xeb, 0xdb, 0x38, 0xa2, 0xaf, 0x31, 0x9d, 0xbb, 0xd3, 0xb7, + 0xa0, 0x2b, 0xe5, 0x4a, 0x75, 0x74, 0x81, 0x70, 0x91, 0xed, 0xf0, 0x5e, + 0xbc, 0x78, 0x6b, 0xe6, 0xa2, 0x57, 0x73, 0x61, 0x24, 0x6b, 0xe3, 0x23, + 0xeb, 0xff, 0xe1, 0xcb, 0x32, 0x5b, 0xbe, 0xbd, 0xfd, 0x8f, 0x75, 0xb0, + 0xe5, 0xca, 0x9f, 0x9c, 0x37, 0xe3, 0x4f, 0xc9, 0x23, 0x1b, 0xb3, 0x63, + 0xde, 0x8b, 0x6e, 0x7f, 0x6b, 0xb1, 0xac, 0xf1, 0xaf, 0xbb, 0xb5, 0xa4, + 0xf2, 0xaf, 0x70, 0x5d, 0x1e, 0xaf, 0xdd, 0xce, 0xad, 0x5b, 0xec, 0x5f, + 0x84, 0x27, 0x98, 0x3c, 0xdc, 0x7c, 0x32, 0x34, 0xfe, 0x72, 0x75, 0x09, + 0xbb, 0xba, 0x2e, 0x77, 0x99, 0x12, 0x5a, 0x87, 0x02, 0xab, 0xc9, 0xe1, + 0xe4, 0x85, 0x64, 0x8d, 0x66, 0x65, 0xe0, 0x9a, 0xb8, 0xe4, 0x02, 0x32, + 0xa8, 0x3e, 0xb9, 0xb5, 0x4e, 0x32, 0x29, 0x59, 0xc3, 0x71, 0x05, 0xae, + 0xcc, 0x7f, 0xad, 0x24, 0x4a, 0x05, 0xc6, 0xb3, 0x0e, 0x9b, 0xed, 0xf4, + 0xe3, 0x0a, 0x05, 0xb3, 0x57, 0x9d, 0xe8, 0x81, 0x44, 0xd7, 0x3a, 0xbe, + 0x80, 0x17, 0x93, 0x46, 0x5d, 0xab, 0xce, 0xaf, 0xfd, 0x32, 0x03, 0x05, + 0x71, 0xcb, 0x24, 0xac, 0x64, 0x44, 0xa6, 0x63, 0x25, 0xbb, 0xe5, 0x2b, + 0xc5, 0x99, 0x7a, 0x39, 0xf6, 0x6d, 0x16, 0xb1, 0x45, 0x09, 0x8c, 0xaa, + 0xed, 0x55, 0xe9, 0x47, 0x8b, 0xec, 0x22, 0x8f, 0x30, 0x8b, 0xe1, 0xc2, + 0xc8, 0xaf, 0xba, 0x33, 0xc5, 0xe7, 0x49, 0x72, 0x3d, 0xe1, 0x1d, 0xd2, + 0x28, 0xb8, 0x1b, 0x53, 0xb5, 0x74, 0xce, 0xcc, 0xf1, 0xad, 0xce, 0xd5, + 0x70, 0x9c, 0x1d, 0x06, 0x11, 0x85, 0x43, 0x6f, 0x83, 0x26, 0x62, 0x21, + 0xc1, 0x63, 0xd6, 0x10, 0xd2, 0x3d, 0x8d, 0x62, 0xa7, 0xc8, 0x94, 0x13, + 0xd7, 0x8b, 0xfd, 0x40, 0xfa, 0xfa, 0x44, 0x9f, 0x5c, 0xbb, 0x5c, 0x12, + 0xde, 0x45, 0xf8, 0xea, 0x42, 0xf7, 0x4e, 0xfe, 0x79, 0xe6, 0xb9, 0xce, + 0xce, 0xda, 0x98, 0x64, 0x69, 0x72, 0xcc, 0xbb, 0x23, 0xf3, 0x9b, 0xda, + 0xda, 0x96, 0x6d, 0xbb, 0xc1, 0x47, 0x04, 0x29, 0x8c, 0x18, 0x3f, 0x7f, + 0x3d, 0x98, 0x5a, 0x54, 0xfd, 0x35, 0xae, 0xfb, 0x49, 0x82, 0x45, 0xe9, + 0x25, 0x88, 0xb0, 0x59, 0x92, 0x13, 0x8d, 0xcc, 0x18, 0x63, 0x7d, 0xc1, + 0x04, 0x67, 0xb5, 0xd4, 0xac, 0x3b, 0x5c, 0x9b, 0x42, 0x87, 0xfa, 0x67, + 0x58, 0x27, 0xc0, 0x09, 0x8b, 0x59, 0x5b, 0x6a, 0xad, 0x76, 0x47, 0x92, + 0x46, 0xb4, 0x35, 0xd9, 0x3e, 0x3c, 0x8e, 0x86, 0xbe, 0x0b, 0xd8, 0x20, + 0x64, 0x00, 0x41, 0x48, 0x2c, 0x0f, 0x5f, 0xf8, 0x44, 0x9b, 0x50, 0xc5, + 0x69, 0xb8, 0x50, 0x76, 0x02, 0xb4, 0x15, 0xb6, 0x3e, 0xfa, 0x4b, 0xfc, + 0x1a, 0x9e, 0x80, 0x51, 0x60, 0x68, 0x8a, 0x30, 0xe2, 0x88, 0xed, 0x6e, + 0x6c, 0xa4, 0xe1, 0x01, 0xcb, 0x14, 0xc1, 0x54, 0x45, 0x1a, 0x41, 0x72, + 0xe4, 0xd0, 0xc0, 0xd8, 0x3a, 0x7f, 0x0c, 0xea, 0x2e, 0x4e, 0x86, 0xf5, + 0xcb, 0xe5, 0x52, 0xaa, 0xbf, 0x64, 0x2f, 0x3e, 0xbc, 0x82, 0x2d, 0xc5, + 0xa1, 0xe5, 0x32, 0xb5, 0xba, 0x5b, 0xee, 0x67, 0x17, 0x2b, 0x38, 0xa5, + 0xa6, 0xd5, 0x50, 0x16, 0xd4, 0x96, 0xc9, 0xb9, 0x00, 0x1f, 0x5a, 0x18, + 0xf0, 0xe3, 0x2b, 0x64, 0x6b, 0x76, 0x4d, 0x9f, 0x50, 0x0f, 0x39, 0xd4, + 0x6b, 0x09, 0x0b, 0xb2, 0xcc, 0xe5, 0x58, 0x2a, 0x52, 0xbb, 0x37, 0xbf, + 0xcd, 0x50, 0xbd, 0x4b, 0x0a, 0x5a, 0x4d, 0x53, 0xdd, 0x67, 0xcd, 0xf0, + 0x6e, 0x3c, 0xcb, 0x18, 0xc1, 0x0f, 0x5a, 0x1b, 0x56, 0xfe, 0xf7, 0xdd, + 0xd9, 0x05, 0x05, 0xb5, 0x57, 0x8f, 0xf6, 0xf0, 0xca, 0x6d, 0x45, 0x2c, + 0x02, 0x5a, 0x81, 0x07, 0xa4, 0xc6, 0x37, 0x1e, 0x79, 0xb3, 0xb9, 0x5f, + 0xca, 0x20, 0x65, 0x54, 0x79, 0x14, 0xa6, 0x68, 0xb5, 0xe5, 0xc7, 0x9d, + 0x14, 0xcd, 0xd6, 0x0e, 0xfd, 0x57, 0x70, 0xde, 0x68, 0x47, 0xba, 0xf0, + 0xf2, 0x9f, 0xfb, 0x18, 0xb2, 0xd0, 0x3d, 0xd2, 0x11, 0x35, 0x3e, 0xbd, + 0x30, 0x6e, 0x56, 0x2d, 0x7a, 0xf5, 0xa4, 0x10, 0x8a, 0xf0, 0x0b, 0x22, + 0xc6, 0xbe, 0x11, 0x6c, 0x79, 0xa6, 0xbe, 0x8e, 0x57, 0xab, 0x7f, 0x98, + 0x0a, 0x51, 0x68, 0xf7, 0xa2, 0x97, 0x43, 0x2d, 0x82, 0x55, 0xf1, 0x5d, + 0x95, 0x3c, 0x6e, 0x3a, 0x3a, 0xe5, 0x3b, 0x7f, 0x52, 0xdf, 0xd9, 0x82, + 0xa7, 0x20, 0xd4, 0xee, 0x80, 0x62, 0x75, 0xbb, 0xfa, 0x6b, 0x74, 0x2d, + 0x98, 0x99, 0x82, 0x6b, 0x09, 0x66, 0x7d, 0x3d, 0x91, 0xca, 0x72, 0xc7, + 0x9c, 0xfa, 0x98, 0x18, 0x63, 0xec, 0x08, 0x71, 0xb5, 0x5e, 0xb5, 0x37, + 0x18, 0x0d, 0xdb, 0xb5, 0x68, 0xab, 0xf3, 0x99, 0x50, 0xd7, 0xa2, 0x50, + 0xab, 0x29, 0x13, 0x77, 0x91, 0x8e, 0x82, 0xb4, 0xe3, 0x75, 0x69, 0xc4, + 0x9f, 0x70, 0x3f, 0x95, 0xeb, 0x67, 0xe7, 0xd0, 0x91, 0x47, 0xa9, 0x91, + 0x01, 0xc4, 0x2c, 0xdb, 0xec, 0x7d, 0x15, 0x36, 0xaa, 0xbe, 0xa4, 0x11, + 0xdd, 0x3d, 0x82, 0xc6, 0x4f, 0xd1, 0xa0, 0xea, 0x7d, 0x05, 0x34, 0x54, + 0xee, 0x91, 0x1e, 0x92, 0x37, 0x2b, 0xd1, 0x91, 0x3f, 0x72, 0x45, 0x42, + 0xab, 0x8f, 0xa0, 0xb9, 0x09, 0x05, 0xf7, 0x4f, 0xd9, 0x3d, 0x8a, 0xbb, + 0xff, 0x14, 0xf4, 0xa0, 0x56, 0x3d, 0x6f, 0x42, 0x14, 0xfa, 0xef, 0x64, + 0x57, 0xc6, 0xf7, 0xa3, 0x0d, 0x43, 0x6a, 0x85, 0xb6, 0xbe, 0xd1, 0x4f, + 0xc9, 0xe1, 0x3a, 0xff, 0x7b, 0x48, 0xfa, 0xfd, 0x05, 0x9f, 0xf9, 0xd4, + 0xc2, 0x2f, 0xb7, 0x81, 0xa6, 0xd6, 0xb5, 0xd6, 0x5d, 0xb8, 0x02, 0x8e, + 0x59, 0x60, 0xa4, 0xb5, 0x40, 0xc1, 0x54, 0x11, 0xab, 0xfd, 0x5b, 0xc3, + 0xc7, 0x81, 0x82, 0x07, 0x7a, 0xdf, 0x54, 0xa0, 0xf2, 0xac, 0xf8, 0xcf, + 0x46, 0x70, 0xdf, 0xbe, 0x4d, 0xce, 0x7e, 0x60, 0x85, 0x7d, 0xf4, 0x9b, + 0xd3, 0xdc, 0x8f, 0xfc, 0x27, 0xae, 0x62, 0xb4, 0x63, 0x8a, 0xbe, 0x86, + 0x5c, 0x6f, 0x39, 0xac, 0xa7, 0xa0, 0x78, 0x7c, 0x57, 0x31, 0x29, 0xaf, + 0x1c, 0x83, 0x1a, 0x0d, 0xff, 0x43, 0x27, 0xee, 0xfd, 0x72, 0x77, 0xaf, + 0xa6, 0xef, 0x34, 0x5b, 0x7e, 0x0e, 0xf8, 0x88, 0xa2, 0x73, 0x04, 0xa3, + 0x5d, 0x86, 0x9b, 0x9a, 0x65, 0xe9, 0xcd, 0x83, 0xb0, 0x85, 0x53, 0x71, + 0x99, 0x86, 0x5c, 0x70, 0xd9, 0xa8, 0x8c, 0x7b, 0x78, 0xa3, 0x91, 0x9f, + 0xf9, 0x4c, 0xba, 0x90, 0xc8, 0xc1, 0x82, 0x97, 0x5e, 0x33, 0xc3, 0x15, + 0xcb, 0xef, 0x15, 0x73, 0xa5, 0xbd, 0xc7, 0x1f, 0x44, 0x15, 0xb9, 0xd3, + 0x7c, 0xbe, 0xc1, 0xa1, 0x9f, 0xa0, 0x34, 0xb3, 0xc5, 0x3b, 0x4c, 0x2d, + 0xc7, 0x10, 0xc8, 0xb8, 0x33, 0x72, 0x8c, 0xe3, 0xbb, 0x96, 0x63, 0x89, + 0xbd, 0xda, 0xb7, 0x43, 0xcd, 0x82, 0x55, 0x09, 0x5d, 0xb7, 0xfd, 0x64, + 0xaf, 0xba, 0xbf, 0x01, 0x17, 0x59, 0x76, 0x0a, 0x05, 0x57, 0x77, 0xed, + 0x6c, 0xc8, 0x1b, 0xb7, 0xc3, 0xa1, 0x53, 0x41, 0x3d, 0x99, 0xca, 0x7c, + 0xb7, 0x0d, 0x76, 0x75, 0x92, 0x36, 0x2c, 0x9d, 0x83, 0xed, 0xbf, 0xdb, + 0xde, 0x17, 0x55, 0xd0, 0x30, 0xcf, 0x91, 0x9c, 0xee, 0xf7, 0xad, 0x71, + 0x33, 0x82, 0xbb, 0x28, 0x1f, 0x07, 0xdb, 0x1d, 0x58, 0x88, 0x92, 0xb1, + 0x3c, 0xf8, 0x02, 0xed, 0xcb, 0xe3, 0xb2, 0x58, 0xa9, 0x61, 0x2f, 0x4e, + 0x3b, 0xb6, 0x5e, 0x8d, 0x20, 0x68, 0x07, 0x8d, 0x45, 0x4c, 0x3b, 0x9c, + 0xa1, 0x20, 0x5c, 0x47, 0xdc, 0x7e, 0x41, 0x9f, 0x10, 0x10, 0x38, 0xcc, + 0xa5, 0x83, 0x3c, 0x21, 0xa4, 0x95, 0x49, 0xfc, 0x21, 0x46, 0x09, 0xb7, + 0x01, 0xbb, 0xc1, 0xcc, 0x27, 0x4b, 0x90, 0x68, 0xc7, 0x0e, 0x7c, 0x59, + 0x3f, 0x95, 0x07, 0xc7, 0xef, 0x21, 0x67, 0x40, 0x86, 0x10, 0x80, 0xa1, + 0x0b, 0x85, 0x92, 0x34, 0x3a, 0x45, 0x9e, 0x9f, 0x70, 0x52, 0x88, 0x5b, + 0xfb, 0x24, 0x66, 0x19, 0x63, 0x33, 0x1a, 0xa5, 0x57, 0x98, 0xd0, 0xbe, + 0xe9, 0x61, 0xcc, 0x4b, 0x04, 0x11, 0x72, 0x76, 0x2a, 0x1c, 0xcf, 0x39, + 0x28, 0xca, 0x76, 0x80, 0x68, 0xc3, 0xf3, 0x45, 0x51, 0xd6, 0xb6, 0x5b, + 0x3a, 0xce, 0x21, 0x18, 0x41, 0x09, 0x7b, 0xbf, 0x3c, 0xe7, 0xd0, 0x2d, + 0x2a, 0x30, 0xa4, 0xd5, 0xd3, 0xff, 0xf7, 0x3e, 0x39, 0x31, 0xf9, 0xfe, + 0x9f, 0x60, 0x55, 0xad, 0xf0, 0x7e, 0x18, 0xda, 0x72, 0xec, 0xdd, 0xb1, + 0xb1, 0x3f, 0x16, 0x55, 0xa8, 0x3f, 0x9f, 0x92, 0xc6, 0x7a, 0x96, 0x46, + 0x44, 0x41, 0x41, 0x77, 0x1a, 0x69, 0xf9, 0x80, 0x1f, 0x31, 0x62, 0x49, + 0xea, 0xce, 0x47, 0x08, 0x58, 0x60, 0x09, 0x89, 0xe8, 0x77, 0x2c, 0xba, + 0x81, 0x35, 0xb6, 0x56, 0x4e, 0x41, 0xa7, 0x24, 0xd4, 0x93, 0x0d, 0xd6, + 0x78, 0x11, 0x1f, 0x9e, 0x0d, 0x2b, 0x18, 0x82, 0x99, 0xff, 0x40, 0x1f, + 0xb1, 0xad, 0x6b, 0xf4, 0x35, 0xa4, 0x2a, 0x5f, 0xec, 0x95, 0x0a, 0xce, + 0xde, 0x3c, 0x5b, 0x13, 0xf0, 0xcd, 0x8c, 0xd2, 0x1a, 0xa8, 0x15, 0x43, + 0x14, 0x9a, 0xda, 0x94, 0x2b, 0xc1, 0xd3, 0xdc, 0x34, 0x26, 0x5c, 0x9f, + 0x9c, 0xa2, 0xd9, 0x4d, 0x00, 0xa6, 0x98, 0x55, 0xc9, 0x4b, 0xa7, 0x68, + 0x68, 0x8a, 0xef, 0x5d, 0x70, 0xc8, 0x14, 0x21, 0xd9, 0x9e, 0xa1, 0xd6, + 0xea, 0xe3, 0x65, 0xe1, 0x32, 0xa6, 0x5d, 0x40, 0x10, 0xa0, 0xa6, 0xcf, + 0xc8, 0xb2, 0xa6, 0xe0, 0x0c, 0x2e, 0x4d, 0x3b, 0xf6, 0xac, 0xeb, 0xd7, + 0x7a, 0xd3, 0xcb, 0xce, 0x74, 0xb2, 0xa8, 0x40, 0x45, 0x2b, 0x68, 0x70, + 0xee, 0x5c, 0xe9, 0x5a, 0xa8, 0x8a, 0x9a, 0x1a, 0x8b, 0x92, 0x74, 0xb7, + 0x74, 0x2a, 0xd5, 0x9c, 0x4a, 0xb3, 0x96, 0x73, 0xe4, 0xa8, 0xee, 0xfb, + 0xa2, 0xf0, 0x42, 0x83, 0xad, 0x21, 0xde, 0x4d, 0xc2, 0x17, 0x5d, 0x33, + 0x0f, 0x23, 0x7d, 0xba, 0x61, 0x8a, 0xf9, 0x07, 0xf3, 0x1f, 0x39, 0xf1, + 0x1d, 0x83, 0xe5, 0xbf, 0x7e, 0xf2, 0xc9, 0xef, 0xff, 0xa2, 0x3a, 0x3a, + 0x5d, 0xf8, 0xae, 0xf1, 0xf1, 0x11, 0xff, 0xef, 0xe5, 0x15, 0x7d, 0xbd, + 0x33, 0x3a, 0x31, 0xcf, 0xa3, 0x44, 0x1a, 0xb2, 0x1b, 0x5e, 0x8b, 0x89, + 0xc5, 0xf8, 0xbf, 0x47, 0x6e, 0x49, 0xdb, 0x70, 0x5b, 0x40, 0xcf, 0x9e, + 0x6e, 0x62, 0x9f, 0x47, 0x74, 0x0c, 0x11, 0xd8, 0x62, 0xf4, 0xc6, 0x1b, + 0x93, 0xe7, 0xdf, 0x50, 0x26, 0x2c, 0x1d, 0x10, 0xce, 0xfd, 0xfb, 0x33, + 0xdb, 0x7a, 0xdb, 0xa7, 0x89, 0x16, 0x70, 0x93, 0x0e, 0xfb, 0x1e, 0xf1, + 0x4a, 0xdb, 0x51, 0xbb, 0xf4, 0x6b, 0xcb, 0xec, 0xcd, 0xc0, 0x0b, 0xbf, + 0xe1, 0x09, 0x61, 0x02, 0xf3, 0x0b, 0xe8, 0xe6, 0xaf, 0x8e, 0x1d, 0xfc, + 0xde, 0x4e, 0x66, 0xef, 0xbe, 0x96, 0xce, 0x7d, 0x7c, 0x3b, 0x04, 0x69, + 0xbf, 0x9c, 0x4c, 0x52, 0x25, 0xf0, 0x24, 0x70, 0x38, 0xb4, 0x2a, 0x82, + 0x30, 0xdf, 0x00, 0x5f, 0x14, 0x6e, 0x53, 0x63, 0xc7, 0x1a, 0xc6, 0xc7, + 0x0d, 0x5b, 0xb7, 0x42, 0xb5, 0x2a, 0x91, 0xc2, 0x10, 0xc7, 0x22, 0xa9, + 0x2c, 0xb7, 0x65, 0x09, 0xa7, 0x4e, 0xbd, 0xe1, 0xd5, 0xa5, 0xb9, 0x05, + 0xcb, 0x29, 0x84, 0x93, 0xc4, 0xb6, 0xc5, 0xfb, 0x99, 0x4f, 0xc7, 0x0d, + 0x35, 0x35, 0x0f, 0x5f, 0x0e, 0x61, 0x96, 0x72, 0xb5, 0x68, 0xfa, 0xfa, + 0x3d, 0x38, 0x1c, 0x5e, 0xbe, 0x64, 0x69, 0x01, 0x89, 0x2c, 0x67, 0xfd, + 0x5c, 0x31, 0x9c, 0x44, 0x21, 0xa9, 0xf2, 0x96, 0x4a, 0xf0, 0x25, 0xc6, + 0x10, 0x64, 0x0b, 0x19, 0xf0, 0x57, 0x1b, 0x88, 0x07, 0x81, 0xdb, 0xd4, + 0x76, 0xf5, 0x49, 0xc3, 0x86, 0x0d, 0x8f, 0x0d, 0x3f, 0xf9, 0xe4, 0x94, + 0xd6, 0x8f, 0x30, 0x82, 0x37, 0x22, 0x27, 0x70, 0x3b, 0x48, 0xbb, 0xd0, + 0xbe, 0x59, 0xe4, 0x48, 0x47, 0x0f, 0x63, 0x25, 0xed, 0x36, 0x24, 0x57, + 0x4c, 0xac, 0x8e, 0x88, 0xb3, 0xd3, 0x4a, 0xf3, 0x0e, 0x3f, 0x7e, 0x38, + 0x0f, 0x49, 0x57, 0x46, 0xc4, 0xd9, 0x03, 0x01, 0x21, 0x04, 0xed, 0xf4, + 0x30, 0xef, 0x7f, 0x3c, 0x04, 0x33, 0x3d, 0xbc, 0x38, 0x38, 0xa6, 0x05, + 0xda, 0xf0, 0x54, 0x22, 0x36, 0xda, 0x34, 0xf6, 0xb9, 0xf3, 0xba, 0x7b, + 0x30, 0xff, 0x53, 0x14, 0x2a, 0xa6, 0xbb, 0x74, 0xbd, 0x5b, 0x9c, 0x79, + 0x39, 0x24, 0x9b, 0x26, 0x5e, 0xce, 0x98, 0xf1, 0x3e, 0xd7, 0x41, 0xbc, + 0xc8, 0x43, 0xd5, 0x52, 0xc1, 0x61, 0x03, 0xc5, 0x41, 0xc0, 0x18, 0x13, + 0x8f, 0x0d, 0x39, 0x05, 0x27, 0xa6, 0xdd, 0x4e, 0x82, 0x20, 0x88, 0x65, + 0x16, 0x16, 0x44, 0xc5, 0xdb, 0x79, 0x65, 0x9c, 0x55, 0x9c, 0x02, 0xa8, + 0xce, 0x9c, 0x93, 0x5e, 0x32, 0xe6, 0x2b, 0x78, 0x5d, 0x3c, 0xf2, 0x80, + 0x77, 0xf3, 0x96, 0x19, 0xef, 0x22, 0x9b, 0xf0, 0x48, 0x70, 0x84, 0x9c, + 0xd8, 0x59, 0x71, 0xf1, 0x91, 0x71, 0xda, 0x4e, 0xd7, 0x9f, 0xe6, 0xfa, + 0xc0, 0xe7, 0xe8, 0xf3, 0x8d, 0x60, 0x35, 0x46, 0x98, 0xd1, 0x52, 0xca, + 0x06, 0xc5, 0xae, 0x3e, 0x38, 0xb2, 0x1d, 0x4d, 0xcf, 0x5f, 0x46, 0x41, + 0x06, 0xf0, 0x11, 0x29, 0x6b, 0x4c, 0x0c, 0x9f, 0xe1, 0x42, 0xdc, 0xb8, + 0x59, 0x55, 0x01, 0x75, 0x36, 0x8d, 0xfa, 0x3f, 0xb5, 0x6a, 0x8f, 0xe1, + 0x48, 0xf5, 0x07, 0xe3, 0x53, 0x3d, 0x4f, 0x05, 0xed, 0x93, 0x9f, 0x6e, + 0xfc, 0x3b, 0xf8, 0x97, 0x2f, 0xf5, 0xa6, 0xc8, 0x52, 0x9b, 0xcf, 0x53, + 0x98, 0xe2, 0x3a, 0xce, 0x6f, 0xca, 0x61, 0x0a, 0x43, 0x99, 0xa8, 0xd5, + 0x6a, 0xbf, 0x5a, 0x21, 0x25, 0x85, 0x55, 0xf3, 0xcc, 0x53, 0x7c, 0xb5, + 0x8c, 0x38, 0xaf, 0xca, 0x74, 0x7e, 0x30, 0x12, 0x19, 0x36, 0x2a, 0xb6, + 0x0e, 0x0f, 0xea, 0xe4, 0x92, 0x8d, 0xf1, 0x6e, 0x37, 0x22, 0xf6, 0xea, + 0x4a, 0xf8, 0x2e, 0xef, 0x78, 0x78, 0xd9, 0xe3, 0x78, 0x83, 0x01, 0x2c, + 0xac, 0xfe, 0x32, 0xc5, 0x3b, 0x9e, 0x0d, 0xdd, 0xc9, 0x38, 0xd0, 0xb0, + 0xb2, 0xb1, 0xa1, 0xb4, 0x53, 0xc2, 0xfc, 0x9c, 0x6a, 0x7c, 0x74, 0xf5, + 0x33, 0x61, 0xef, 0x99, 0xfb, 0x1d, 0x1e, 0x1d, 0xdd, 0x64, 0x14, 0xdc, + 0x45, 0x1e, 0x7d, 0xf4, 0x6a, 0x07, 0xc9, 0x2f, 0x1f, 0x4d, 0x1f, 0x4f, + 0xd7, 0x97, 0x37, 0xaf, 0x4b, 0x6e, 0x48, 0xeb, 0x3c, 0x92, 0x7e, 0x38, + 0xbd, 0xa0, 0x3c, 0xfe, 0x9e, 0xee, 0xf7, 0xd7, 0xff, 0x79, 0x7d, 0x77, + 0x80, 0x05, 0x14, 0x68, 0x38, 0x54, 0xdb, 0x90, 0x00, 0x93, 0x1f, 0xeb, + 0xbc, 0x20, 0xa6, 0xcf, 0xdb, 0x02, 0xdc, 0xf2, 0x1f, 0xe6, 0x03, 0x7d, + 0x8b, 0x3f, 0x10, 0xd0, 0x44, 0x69, 0x76, 0xee, 0x34, 0x96, 0x16, 0xe3, + 0x67, 0x5d, 0xca, 0x30, 0x8f, 0xbb, 0xde, 0x9c, 0x61, 0x98, 0x79, 0x1c, + 0xcb, 0xaa, 0x38, 0x39, 0x7f, 0x20, 0xaf, 0x2b, 0x53, 0xe3, 0x7f, 0x85, + 0x9b, 0x6a, 0xdf, 0x6e, 0x0f, 0xf0, 0xf7, 0x65, 0x16, 0x04, 0xc4, 0xb1, + 0x9f, 0xa7, 0xd3, 0xd9, 0x49, 0xdf, 0x8d, 0xac, 0xff, 0xde, 0xf1, 0xae, + 0x1e, 0xf5, 0xe6, 0x3b, 0x6f, 0x65, 0xfc, 0xc5, 0x37, 0x56, 0xf2, 0x5a, + 0xc6, 0x84, 0xa3, 0xee, 0x01, 0x13, 0x8f, 0x1b, 0x54, 0xea, 0x1b, 0x65, + 0xa6, 0x1d, 0x6b, 0xb3, 0xc1, 0xf8, 0x93, 0x3e, 0x4a, 0x93, 0x3e, 0x90, + 0xae, 0xc9, 0xd5, 0x50, 0xb7, 0x14, 0x1a, 0xbf, 0x68, 0x13, 0x4f, 0xd8, + 0x6e, 0x72, 0xf2, 0xab, 0x34, 0x6d, 0x43, 0xb6, 0xd9, 0xac, 0x18, 0x18, + 0x5e, 0xb0, 0x5a, 0x4b, 0x8f, 0x2d, 0x3b, 0xc7, 0xaa, 0xef, 0xc1, 0x5d, + 0x42, 0x84, 0xd8, 0x82, 0x47, 0x36, 0x71, 0x3c, 0x33, 0xfb, 0xbb, 0x6a, + 0xf7, 0x91, 0xef, 0x28, 0x6a, 0xec, 0x6d, 0xd7, 0x6c, 0x9c, 0x31, 0x4e, + 0xa8, 0xe6, 0x5f, 0x7c, 0xa0, 0xdc, 0x82, 0x0e, 0x14, 0x60, 0x39, 0xa4, + 0x2e, 0x15, 0x5f, 0x7f, 0x39, 0xfe, 0x24, 0x2c, 0x2d, 0x79, 0xdf, 0x6b, + 0xdf, 0x4a, 0x59, 0x7a, 0x93, 0x4c, 0x2d, 0x7e, 0x0e, 0xf3, 0xe7, 0x06, + 0xfe, 0x9d, 0x99, 0xd9, 0xf7, 0xf8, 0xb3, 0xd9, 0x21, 0x9a, 0x95, 0x22, + 0xa5, 0x37, 0xb3, 0xa6, 0x95, 0xaa, 0x19, 0x2e, 0xd9, 0x97, 0x62, 0x46, + 0xf5, 0x55, 0x7e, 0x6b, 0x52, 0xcb, 0x32, 0xad, 0xdd, 0xd2, 0xcf, 0x63, + 0xd7, 0xb4, 0xb5, 0x01, 0xb6, 0xe2, 0x22, 0xad, 0x48, 0x0f, 0xdd, 0x9b, + 0x84, 0x28, 0xde, 0x6f, 0xb0, 0x1e, 0x0e, 0xdf, 0xfc, 0x7a, 0x87, 0x23, + 0xb2, 0xed, 0xba, 0x4d, 0x51, 0x9f, 0x7a, 0xc4, 0x77, 0x6a, 0x36, 0xd4, + 0xd5, 0x79, 0xdd, 0xb9, 0x86, 0x1d, 0x9e, 0x3e, 0x32, 0xee, 0xfd, 0x73, + 0x91, 0xd7, 0x6a, 0xf5, 0x6e, 0xda, 0x38, 0x36, 0x3c, 0xec, 0x6d, 0x6b, + 0x13, 0xff, 0xb1, 0x86, 0xf1, 0xea, 0x99, 0xc1, 0x53, 0x6b, 0xdf, 0x78, + 0xa3, 0xab, 0x6b, 0x30, 0xdf, 0x45, 0x84, 0x35, 0xca, 0xe7, 0xc5, 0xea, + 0xea, 0x55, 0xe5, 0x91, 0x35, 0x6d, 0x91, 0x28, 0xe6, 0x0f, 0x0d, 0x3d, + 0xf8, 0xc0, 0x48, 0x47, 0xbf, 0x68, 0xcb, 0x3c, 0x02, 0x72, 0xc6, 0xcd, + 0xf7, 0x31, 0x3a, 0xda, 0xaa, 0x85, 0xde, 0x77, 0x25, 0xa0, 0xbd, 0x40, + 0x3d, 0xa3, 0x50, 0x93, 0x21, 0x94, 0x7b, 0x3b, 0x16, 0x38, 0x46, 0x18, + 0x95, 0xfe, 0x2f, 0xcc, 0xca, 0xed, 0xac, 0x07, 0x18, 0x63, 0x3a, 0x1c, + 0xf3, 0xb3, 0x03, 0xb2, 0x1a, 0x08, 0x34, 0xef, 0x01, 0x34, 0xa6, 0x05, + 0xc8, 0x55, 0x39, 0xaf, 0xd1, 0x25, 0x67, 0x56, 0x3b, 0x6a, 0x2c, 0xac, + 0x96, 0x7a, 0x82, 0x58, 0x4d, 0x85, 0xa4, 0xa8, 0xde, 0x42, 0x5f, 0xf3, + 0x45, 0x69, 0xd6, 0xd3, 0x2e, 0x03, 0x56, 0xbb, 0xa7, 0xe5, 0xdd, 0x01, + 0xd7, 0xfc, 0xdd, 0x7b, 0xfe, 0xa1, 0xa1, 0x9a, 0xd0, 0x73, 0x0f, 0xed, + 0x6a, 0x29, 0xfd, 0x8b, 0xba, 0x95, 0xea, 0xfe, 0x6f, 0xee, 0xad, 0x60, + 0xc1, 0x13, 0xae, 0x51, 0x36, 0x77, 0x76, 0x64, 0xf7, 0xd9, 0x99, 0xd3, + 0x4f, 0xba, 0xa3, 0x2a, 0x94, 0xc5, 0x6f, 0x5d, 0x8e, 0xc9, 0x88, 0xb9, + 0xfc, 0x56, 0x31, 0x41, 0xcb, 0x9a, 0x94, 0xe5, 0x51, 0xeb, 0xf6, 0xe4, + 0x66, 0x98, 0xfa, 0x7a, 0xab, 0xb2, 0x06, 0x32, 0x06, 0xb2, 0xb4, 0x51, + 0x10, 0xdd, 0xf4, 0xa3, 0x28, 0x7a, 0x82, 0xb6, 0x3a, 0x68, 0xbc, 0x46, + 0x58, 0x7a, 0xfe, 0xc0, 0x91, 0x21, 0x0f, 0x0d, 0x61, 0x85, 0xe3, 0xb3, + 0xe5, 0xf9, 0xe5, 0xb7, 0xd0, 0xb2, 0xf2, 0x11, 0xef, 0xc6, 0x3d, 0x0a, + 0x69, 0x79, 0xd9, 0xc8, 0xad, 0xbb, 0xd4, 0x8e, 0x1d, 0xeb, 0xd6, 0xdd, + 0xd2, 0x0b, 0xed, 0x48, 0xf4, 0xf6, 0x33, 0xac, 0x97, 0x0d, 0x08, 0x8d, + 0x69, 0x02, 0x3e, 0x8f, 0xe4, 0xa5, 0x4b, 0x29, 0xbb, 0x9f, 0xc2, 0x25, + 0x31, 0x9e, 0x83, 0x06, 0x9b, 0x36, 0x8d, 0x70, 0xdc, 0xcc, 0xf2, 0x26, + 0xad, 0x4d, 0xee, 0xd6, 0xcb, 0x5b, 0x32, 0xb9, 0x91, 0x7d, 0x6b, 0x93, + 0xb6, 0x2f, 0x16, 0xa9, 0x47, 0x64, 0xe7, 0x69, 0x46, 0x32, 0x6a, 0x19, + 0x93, 0x70, 0xa7, 0x24, 0xc9, 0x87, 0x3d, 0xe9, 0x8f, 0x02, 0xb7, 0x6d, + 0xa3, 0xf8, 0xec, 0x0c, 0x60, 0x56, 0xc7, 0xb7, 0x26, 0x37, 0x0e, 0xdb, + 0xe2, 0xd5, 0x50, 0xf4, 0x39, 0x1a, 0x1a, 0x08, 0xda, 0x99, 0x09, 0xfc, + 0x6e, 0x1c, 0x21, 0xe8, 0x63, 0x99, 0xbf, 0x31, 0x60, 0x1f, 0x26, 0xfc, + 0x40, 0xf4, 0xd6, 0x4f, 0xa1, 0xc6, 0xd5, 0x86, 0x51, 0xc8, 0x3f, 0x81, + 0x0c, 0xad, 0x6a, 0x65, 0x5f, 0x08, 0x0a, 0x3a, 0x66, 0x7b, 0x20, 0x7a, + 0x38, 0xea, 0xa5, 0x0a, 0x70, 0x76, 0x8e, 0x7f, 0xd4, 0x60, 0x23, 0x73, + 0xba, 0x5f, 0x5f, 0x83, 0x3a, 0x74, 0x09, 0x0a, 0xc4, 0x73, 0x1f, 0x86, + 0x7b, 0x9f, 0xbb, 0xbd, 0xc1, 0x9c, 0xdf, 0x92, 0xb0, 0xc9, 0x5e, 0x5c, + 0xa5, 0xe2, 0xc1, 0xfe, 0x7c, 0x53, 0x25, 0xdd, 0x7f, 0xa4, 0x68, 0x03, + 0xdd, 0x62, 0x7e, 0x34, 0x4e, 0xe5, 0x54, 0x85, 0x95, 0x5e, 0x5f, 0xf3, + 0x87, 0x1c, 0xb5, 0xac, 0xfe, 0x6a, 0x55, 0x5c, 0xd9, 0x29, 0xa4, 0x58, + 0x73, 0xec, 0xd3, 0xcc, 0xcc, 0xb3, 0xf4, 0x41, 0xa1, 0x8b, 0x23, 0x9b, + 0x70, 0x88, 0xcc, 0xf7, 0xe5, 0x75, 0x69, 0x1b, 0x6a, 0x93, 0xbc, 0x5e, + 0x7b, 0xd3, 0x66, 0x73, 0xb0, 0x22, 0xef, 0xfa, 0x22, 0x40, 0x72, 0x89, + 0xcd, 0x89, 0xd2, 0xe0, 0x4e, 0xf5, 0xcb, 0xb6, 0xb9, 0xf9, 0xc7, 0x80, + 0x76, 0x4c, 0xaa, 0xd7, 0x83, 0xe4, 0xf4, 0xb8, 0x94, 0x91, 0xc9, 0x61, + 0x72, 0xa5, 0x41, 0x1d, 0x1e, 0x68, 0x72, 0xbb, 0xe8, 0x8e, 0x6c, 0x54, + 0x76, 0x67, 0xb0, 0xe2, 0x4e, 0x0f, 0x3d, 0x3d, 0x8f, 0x5d, 0x92, 0x5d, + 0x40, 0x86, 0x66, 0x69, 0x83, 0x8b, 0x26, 0x34, 0xe1, 0x68, 0x9a, 0x5e, + 0xe4, 0xe9, 0x09, 0xda, 0x40, 0x8e, 0x5f, 0xd6, 0xe0, 0x03, 0x8b, 0x59, + 0xca, 0xcd, 0xf3, 0xd8, 0xe3, 0xf4, 0x20, 0xbf, 0x9b, 0xf6, 0x1b, 0xc4, + 0x69, 0x51, 0x3f, 0x38, 0x04, 0xdd, 0x2b, 0xbc, 0x73, 0xde, 0x1d, 0x02, + 0xa2, 0x91, 0xcb, 0x25, 0xb2, 0x62, 0x33, 0xff, 0xff, 0x03, 0xa6, 0x92, + 0xf5, 0xa6, 0x92, 0x50, 0xf7, 0x01, 0xef, 0x1c, 0x04, 0xaf, 0x10, 0x04, + 0xe2, 0x39, 0x3f, 0xa7, 0xf4, 0x17, 0x65, 0x71, 0xd4, 0x75, 0xeb, 0x23, + 0xdd, 0xdf, 0xdb, 0x9c, 0xc4, 0x69, 0xfb, 0x0a, 0xce, 0xb5, 0x6d, 0xa1, + 0x20, 0x97, 0xfa, 0x96, 0x6e, 0x89, 0x49, 0xc6, 0xdb, 0xa5, 0xad, 0xad, + 0x7b, 0xdb, 0xda, 0xd6, 0xe4, 0xd7, 0x97, 0x5c, 0x9b, 0x2a, 0x73, 0xb8, + 0x90, 0x0b, 0x39, 0x0a, 0xae, 0x54, 0xfa, 0x7f, 0xfb, 0x8d, 0x40, 0xb4, + 0x0a, 0xca, 0x6e, 0x91, 0x1c, 0x48, 0x91, 0xe6, 0xb5, 0x55, 0x0b, 0xfd, + 0xc2, 0x88, 0x40, 0x30, 0xc8, 0x99, 0x09, 0xa6, 0xed, 0x26, 0x2c, 0xe7, + 0x66, 0x99, 0x6b, 0x51, 0xcc, 0x4a, 0xbd, 0x1e, 0xcb, 0xb4, 0x79, 0xe6, + 0x21, 0xc6, 0x0e, 0xfd, 0x63, 0x3c, 0x81, 0x59, 0x17, 0xc4, 0x59, 0x60, + 0xd6, 0x3d, 0x3d, 0x94, 0x04, 0x67, 0x6c, 0x68, 0x94, 0x53, 0x1d, 0x55, + 0xf8, 0x14, 0x81, 0xae, 0x35, 0xd4, 0x18, 0x3a, 0x1a, 0xa2, 0xa0, 0xad, + 0xc5, 0xca, 0x5d, 0x99, 0x4d, 0x74, 0x83, 0x4a, 0x2a, 0x9c, 0x2e, 0x2d, + 0x67, 0x55, 0xc4, 0x20, 0x2a, 0x0b, 0x33, 0xfb, 0x83, 0x94, 0x0c, 0xf3, + 0x83, 0xd8, 0xa5, 0x9a, 0xfd, 0x81, 0xd5, 0x6f, 0xdd, 0x0f, 0x8e, 0x4d, + 0x66, 0x80, 0x28, 0x6c, 0x43, 0xcf, 0x27, 0x19, 0x35, 0x30, 0x6a, 0x42, + 0x85, 0xf8, 0x31, 0x34, 0xa6, 0xc9, 0xbc, 0x49, 0xa1, 0x31, 0x3f, 0xd8, + 0x68, 0x58, 0xdd, 0x22, 0xbf, 0xb1, 0x8a, 0xa2, 0x56, 0xdd, 0x90, 0x7f, + 0x94, 0x46, 0x63, 0x7c, 0x2e, 0x1e, 0x00, 0x16, 0x96, 0x27, 0xf2, 0xf2, + 0xe3, 0xe3, 0x5a, 0xf2, 0xe3, 0x12, 0xf3, 0xa3, 0x12, 0x96, 0xab, 0x04, + 0x64, 0x1e, 0xb1, 0x86, 0x63, 0xf6, 0x61, 0xa9, 0xe2, 0xea, 0x9e, 0xd0, + 0x51, 0x7a, 0xd8, 0x47, 0x7a, 0xb2, 0x38, 0x34, 0xce, 0x3e, 0xfb, 0xbe, + 0xd0, 0x8f, 0x34, 0x26, 0xcc, 0xa7, 0xc7, 0x85, 0x42, 0xae, 0xed, 0x00, + 0xf2, 0x82, 0x16, 0xb6, 0x60, 0x4d, 0xe6, 0xf8, 0xce, 0x1a, 0x62, 0x8a, + 0x5d, 0x9b, 0x9d, 0xd4, 0xec, 0xa4, 0xd6, 0x65, 0xee, 0x88, 0x10, 0xb1, + 0x12, 0x66, 0x03, 0x21, 0xbe, 0x89, 0x99, 0xc5, 0xbb, 0x26, 0x94, 0x87, + 0xf6, 0x80, 0x13, 0xc7, 0x2c, 0x56, 0x51, 0x46, 0x39, 0x78, 0x39, 0xeb, + 0x64, 0x45, 0x71, 0xc3, 0x82, 0x0a, 0x2a, 0x5d, 0xe8, 0x8c, 0xc1, 0x70, + 0x93, 0x7c, 0x93, 0x0e, 0x27, 0xf4, 0x35, 0xdd, 0xe6, 0x7f, 0x60, 0xb8, + 0xdf, 0x35, 0xc7, 0xcc, 0xd7, 0xee, 0x34, 0x9b, 0x1a, 0x2a, 0x77, 0xf4, + 0xb7, 0xe4, 0xac, 0x2d, 0x3f, 0xbc, 0xcf, 0xe7, 0x85, 0xda, 0x8c, 0x32, + 0xaf, 0x52, 0x2d, 0x8b, 0x9f, 0x7c, 0x3b, 0xe5, 0x95, 0x49, 0x5d, 0x0a, + 0x9e, 0x7c, 0x55, 0xa6, 0x7e, 0xaa, 0xac, 0xbc, 0xa4, 0x5a, 0xda, 0x9a, + 0x1b, 0x04, 0xc3, 0x0c, 0xa3, 0xc0, 0x9b, 0x8c, 0xff, 0xe1, 0x4c, 0x50, + 0xfd, 0xa9, 0xf2, 0xac, 0xba, 0x40, 0x53, 0x52, 0x90, 0xd2, 0xd8, 0x7a, + 0xac, 0xb0, 0xdf, 0xdd, 0x55, 0x87, 0x48, 0xf2, 0x8e, 0x55, 0xd9, 0x9b, + 0x25, 0x69, 0x48, 0x27, 0x5e, 0x4e, 0xdf, 0x6c, 0xa4, 0xb3, 0xfa, 0x1a, + 0x24, 0xc8, 0x54, 0x9c, 0x33, 0x8e, 0xc3, 0x01, 0xbc, 0x29, 0xb1, 0x9d, + 0x8e, 0x66, 0xfc, 0xeb, 0x3e, 0x6b, 0xb5, 0x75, 0xfb, 0xe5, 0x31, 0xdb, + 0xba, 0x15, 0xdb, 0xba, 0x63, 0x36, 0x2c, 0xbc, 0xb2, 0x03, 0x8c, 0x7e, + 0xff, 0x56, 0x7b, 0xe6, 0x36, 0x0e, 0xfb, 0xd2, 0xf1, 0x00, 0xce, 0x33, + 0x83, 0x42, 0xc2, 0xa8, 0xbf, 0xd6, 0xdb, 0x94, 0x3f, 0xef, 0xa5, 0xe2, + 0x42, 0x8c, 0xb1, 0xee, 0x4d, 0x5a, 0xef, 0xf5, 0x2f, 0xae, 0x8d, 0x7d, + 0x5f, 0x83, 0x27, 0xa4, 0x8b, 0x1f, 0x6d, 0x13, 0x85, 0xf1, 0xde, 0x54, + 0x4f, 0x2f, 0x4f, 0x8f, 0x1e, 0x64, 0xa7, 0x1f, 0xe5, 0x6b, 0x0b, 0xdd, + 0x3c, 0x7e, 0x65, 0x54, 0x58, 0xe5, 0xbf, 0x6b, 0xab, 0xf4, 0x02, 0xe4, + 0x19, 0x3f, 0x30, 0xac, 0x9c, 0x92, 0x97, 0x6f, 0x13, 0xf5, 0x6e, 0xa1, + 0xdc, 0x73, 0x66, 0xaa, 0x9f, 0x91, 0xb2, 0xb3, 0x2f, 0x65, 0x7b, 0x3f, + 0x2d, 0xb6, 0xcb, 0x9f, 0x6a, 0x84, 0x7b, 0x7b, 0xe4, 0xd1, 0x2d, 0x95, + 0x59, 0x95, 0x2d, 0x31, 0x32, 0xe8, 0xd1, 0x63, 0x7d, 0x97, 0xb7, 0x85, + 0xf1, 0xab, 0xcc, 0x4b, 0xc7, 0xdd, 0x2a, 0xae, 0xcf, 0xc3, 0x3a, 0xaf, + 0x6e, 0xa5, 0xb2, 0x3f, 0xb3, 0x61, 0x78, 0x5e, 0x00, 0x83, 0x96, 0xa5, + 0x12, 0x88, 0x56, 0x29, 0x77, 0x89, 0x26, 0x66, 0xeb, 0xd2, 0x14, 0x22, + 0x49, 0x98, 0x36, 0x32, 0x32, 0xac, 0x31, 0xa5, 0x5f, 0xf7, 0xda, 0x26, + 0x03, 0xbe, 0x2c, 0x9f, 0xff, 0x7c, 0xff, 0xc0, 0x80, 0x1f, 0x5e, 0x22, + 0xac, 0x91, 0xdb, 0x2f, 0x8d, 0xce, 0x7c, 0x5c, 0x42, 0x21, 0xfb, 0xa2, + 0x9b, 0x20, 0xba, 0x5b, 0xf1, 0x2d, 0x83, 0x9f, 0xb9, 0xff, 0x00, 0x8c, + 0x3d, 0x95, 0xd8, 0xfe, 0xec, 0xb3, 0x5e, 0xd7, 0xf0, 0xb9, 0xaf, 0x59, + 0x1a, 0x39, 0x11, 0xcd, 0x72, 0x2e, 0x67, 0x88, 0x01, 0x00, 0xba, 0xcf, + 0xb0, 0xfa, 0x2f, 0xbc, 0xe4, 0x19, 0x21, 0x84, 0x5c, 0x8c, 0x4d, 0xb0, + 0xd9, 0xa0, 0xb4, 0x94, 0xb3, 0x39, 0x85, 0x0d, 0xa2, 0xec, 0xa2, 0xbf, + 0xf5, 0xa6, 0x30, 0x59, 0x2b, 0xb7, 0xd3, 0x57, 0x65, 0x0f, 0x07, 0x56, + 0x79, 0x59, 0x2d, 0xcd, 0xe6, 0x38, 0xcf, 0xeb, 0x0e, 0x16, 0x1b, 0xd4, + 0xb8, 0x5b, 0x47, 0x02, 0x79, 0x27, 0x76, 0xda, 0x7a, 0x33, 0xfd, 0xae, + 0xc4, 0xb0, 0x47, 0x6f, 0x9b, 0x42, 0x8e, 0x1a, 0xc6, 0xef, 0xc8, 0xe6, + 0x2f, 0x87, 0xba, 0x70, 0xa3, 0x66, 0x37, 0xd3, 0xc2, 0x27, 0x4e, 0x66, + 0x47, 0xf9, 0xdf, 0xfc, 0x2e, 0xfc, 0x9c, 0x22, 0xcc, 0x5f, 0x73, 0xe5, + 0xc3, 0xac, 0xf7, 0xa2, 0xab, 0x9a, 0x90, 0xba, 0xde, 0x9f, 0x0b, 0xd7, + 0xe9, 0x4d, 0x19, 0x5f, 0xff, 0x7c, 0xf5, 0xc9, 0xcb, 0x9e, 0xcb, 0xaa, + 0x67, 0x07, 0x67, 0xe9, 0x8e, 0x33, 0x8c, 0x36, 0x77, 0x0a, 0xd4, 0x7c, + 0xd2, 0x1f, 0xd1, 0x2c, 0x56, 0x64, 0x6a, 0x37, 0x03, 0x1b, 0x56, 0x95, + 0xd1, 0x39, 0x78, 0xff, 0x3b, 0x7d, 0xe5, 0x2c, 0xf6, 0x60, 0xb6, 0xbc, + 0xef, 0x9d, 0xfb, 0x07, 0x3b, 0x33, 0x14, 0x67, 0x2a, 0x1a, 0xd6, 0x08, + 0xa9, 0xb0, 0x94, 0x0f, 0x1a, 0xcd, 0xed, 0xfe, 0x55, 0x0a, 0xbf, 0x82, + 0x55, 0x10, 0x2d, 0xc5, 0x52, 0x88, 0x21, 0x10, 0x5c, 0x31, 0x80, 0xcf, + 0xa7, 0xcb, 0xfe, 0x16, 0x95, 0x2b, 0x1d, 0x97, 0x06, 0x9e, 0xb5, 0x3c, + 0x1b, 0x18, 0x2e, 0x6a, 0x6e, 0xd4, 0xdf, 0x7e, 0x8c, 0x68, 0x59, 0x44, + 0x97, 0x9d, 0xff, 0x06, 0xde, 0x88, 0x3a, 0xd7, 0x37, 0xb5, 0x29, 0x03, + 0x5f, 0xe5, 0x59, 0x5e, 0xd5, 0x6c, 0x2c, 0x9b, 0x39, 0x3a, 0x9c, 0x52, + 0x3e, 0x97, 0xb3, 0xd1, 0x3c, 0xfc, 0x45, 0x53, 0x79, 0x9e, 0xe5, 0x2b, + 0xb6, 0xbc, 0xeb, 0xdf, 0x2e, 0xa2, 0xfd, 0x59, 0x93, 0xcd, 0xd9, 0x7d, + 0x5d, 0xf9, 0xc8, 0x3b, 0x3a, 0x53, 0x06, 0xb6, 0xea, 0x0c, 0x1d, 0x57, + 0x70, 0x96, 0xae, 0xbe, 0xe0, 0xed, 0x68, 0xbf, 0x65, 0x7e, 0x87, 0xc8, + 0xc8, 0x45, 0xe8, 0xe7, 0xce, 0x2a, 0x75, 0x8e, 0x62, 0x30, 0x24, 0xba, + 0xbd, 0xe9, 0x5f, 0xaf, 0xf2, 0xff, 0xa5, 0xc0, 0x88, 0x42, 0xf8, 0xfe, + 0xa2, 0x85, 0x66, 0xd9, 0x2f, 0x53, 0xc7, 0xfd, 0x7e, 0xc1, 0xef, 0xcf, + 0xf2, 0x45, 0x07, 0x90, 0x20, 0x7c, 0x6f, 0xe9, 0x1d, 0xf5, 0x25, 0xd5, + 0x6f, 0x75, 0xe0, 0xef, 0xdc, 0xb9, 0x53, 0x3d, 0x3d, 0x33, 0x79, 0x6b, + 0x66, 0x64, 0xc4, 0xeb, 0x9e, 0x62, 0xc3, 0x0f, 0x4f, 0x3f, 0x1d, 0xd9, + 0x96, 0xb6, 0xb1, 0x2d, 0xf2, 0x7b, 0xe8, 0xc0, 0x2f, 0xe3, 0xd0, 0x19, + 0x4a, 0x62, 0xac, 0x3f, 0x13, 0x14, 0xf9, 0x2c, 0x3b, 0xd7, 0xed, 0xeb, + 0xb2, 0xb9, 0x7d, 0xae, 0x6f, 0x08, 0x5d, 0x20, 0xbd, 0xba, 0xd9, 0xc5, + 0x41, 0x5b, 0x67, 0xe8, 0x66, 0xd9, 0xb6, 0x2f, 0x31, 0x9c, 0xf6, 0x7d, + 0x42, 0x39, 0x61, 0x7b, 0xa1, 0x5d, 0x87, 0x56, 0xd9, 0x96, 0xa1, 0x34, + 0xf6, 0x62, 0x75, 0xce, 0x56, 0xf9, 0xc1, 0x80, 0x94, 0xb0, 0x6a, 0x93, + 0x3f, 0xf8, 0x22, 0x42, 0x8b, 0xd9, 0x9b, 0x31, 0x49, 0x35, 0x31, 0x1d, + 0xe1, 0x49, 0xa0, 0xe2, 0x07, 0x8b, 0x47, 0xa3, 0x70, 0x04, 0xd6, 0xd0, + 0x4e, 0xfa, 0x6b, 0x83, 0x2c, 0x6b, 0x55, 0x4c, 0x86, 0x39, 0x61, 0x39, + 0x92, 0xeb, 0x52, 0xb5, 0x84, 0x59, 0x42, 0x5e, 0xd4, 0x7e, 0x03, 0x05, + 0x70, 0x58, 0xf0, 0x03, 0x2a, 0xfd, 0x90, 0xe6, 0x9d, 0x1e, 0x0d, 0x76, + 0x76, 0x0c, 0xf4, 0x4f, 0xde, 0x66, 0xf1, 0x54, 0x2e, 0xb5, 0x34, 0xaa, + 0xf8, 0x25, 0x95, 0x57, 0x95, 0xff, 0xd7, 0x7e, 0xc4, 0x56, 0x2f, 0xf5, + 0x26, 0xe6, 0x45, 0xce, 0x55, 0x47, 0x58, 0xb1, 0x0e, 0x72, 0x2b, 0x1f, + 0x1c, 0xce, 0xad, 0x82, 0x3e, 0xcf, 0xd0, 0xf4, 0xd2, 0x0c, 0x61, 0x2d, + 0xcf, 0xd7, 0x6a, 0x36, 0x2d, 0x29, 0xf8, 0x36, 0x90, 0xfe, 0xb0, 0xba, + 0x79, 0xd2, 0x7f, 0xfd, 0x3d, 0x1c, 0x50, 0x83, 0x23, 0xfb, 0x0d, 0xc7, + 0xbc, 0x93, 0x3b, 0xd3, 0x56, 0x19, 0x8d, 0xfd, 0xb3, 0x80, 0xdc, 0xc3, + 0xa7, 0x0c, 0x4b, 0x08, 0xd0, 0x9c, 0x27, 0x89, 0x6b, 0xc3, 0xd6, 0xf1, + 0x49, 0xad, 0x9e, 0x97, 0x89, 0x27, 0x7d, 0x1b, 0x6e, 0xbf, 0xb7, 0xc5, + 0x73, 0x7b, 0x6c, 0xd5, 0xa1, 0x35, 0x61, 0x67, 0x3f, 0x4b, 0x9f, 0x37, + 0x04, 0x10, 0x60, 0x0d, 0x35, 0x7a, 0x69, 0x10, 0x7a, 0xd8, 0xea, 0x7e, + 0xe0, 0x2f, 0x4c, 0x51, 0x22, 0x4a, 0x64, 0x8a, 0xfe, 0xf2, 0x80, 0xdb, + 0x7a, 0x78, 0x3c, 0x57, 0xae, 0xa5, 0xdf, 0xab, 0x67, 0x74, 0xb0, 0xc2, + 0x34, 0x48, 0x7b, 0x47, 0xe6, 0x2d, 0xb7, 0x5a, 0x7f, 0xcf, 0xb2, 0x21, + 0x83, 0x48, 0x9a, 0xf5, 0xc8, 0xa7, 0x87, 0x96, 0x1c, 0x83, 0x8d, 0x5d, + 0xcf, 0x21, 0x90, 0xa2, 0x5e, 0xb0, 0x1c, 0xff, 0xa0, 0xf3, 0x29, 0x64, + 0x67, 0x1b, 0xfa, 0x60, 0xe7, 0xb1, 0x6f, 0x6d, 0xa9, 0xab, 0x09, 0xca, + 0x4a, 0x4f, 0x4c, 0x5b, 0x0b, 0xca, 0xd2, 0x0c, 0xad, 0x5b, 0x74, 0x34, + 0x52, 0x67, 0x93, 0xe3, 0x7d, 0xb1, 0xc7, 0xf8, 0xd3, 0x5b, 0x9b, 0xef, + 0xad, 0x7d, 0x6c, 0xf4, 0xa7, 0x2f, 0xdf, 0x2f, 0xe1, 0x8c, 0xff, 0x56, + 0xc9, 0x43, 0x99, 0x1c, 0xf4, 0xf7, 0x0d, 0xdd, 0xad, 0xa4, 0x29, 0xc9, + 0x03, 0x81, 0xfa, 0x2d, 0x73, 0xdd, 0x52, 0xd9, 0xbc, 0x4c, 0xf2, 0xdc, + 0x17, 0x13, 0x52, 0x26, 0xcc, 0xdd, 0x3d, 0x2c, 0x0c, 0x6d, 0x09, 0x57, + 0xff, 0x03, 0x9c, 0xde, 0x5f, 0x63, 0x09, 0x2d, 0x9d, 0x1e, 0xa3, 0xe3, + 0xe3, 0x96, 0xaa, 0xd1, 0xe3, 0xef, 0xa5, 0xfe, 0x36, 0xd0, 0xde, 0x7e, + 0xab, 0xa3, 0x7d, 0xe0, 0x4c, 0x73, 0x69, 0x20, 0x5d, 0x8d, 0xa0, 0xc1, + 0xa7, 0xc7, 0x7c, 0xd0, 0xe1, 0xa5, 0x9f, 0xb2, 0x08, 0x94, 0xc5, 0xd3, + 0x79, 0x88, 0x7b, 0xac, 0xf0, 0x7e, 0xb7, 0x64, 0xbb, 0x58, 0xf9, 0x59, + 0xbc, 0xba, 0xfe, 0xfe, 0x1f, 0x8d, 0x86, 0xad, 0xc6, 0x5f, 0x0a, 0x36, + 0xbf, 0xb9, 0x34, 0x34, 0x61, 0x6d, 0x25, 0xa1, 0x18, 0xf2, 0x61, 0x82, + 0xf6, 0xe3, 0x83, 0x09, 0x31, 0x1f, 0xc3, 0xa1, 0x93, 0xe1, 0xfc, 0x74, + 0xe9, 0xdf, 0x7c, 0xb2, 0x39, 0x01, 0x6f, 0x7d, 0x21, 0xbb, 0xa3, 0xdd, + 0x5b, 0x57, 0xbb, 0x35, 0x40, 0x85, 0x00, 0xa3, 0xd3, 0x26, 0xd3, 0x9c, + 0x34, 0x72, 0x95, 0xa2, 0xe5, 0xdf, 0xeb, 0x72, 0xd2, 0x36, 0x35, 0x2d, + 0x85, 0x39, 0x30, 0x04, 0xcb, 0x20, 0x5a, 0x19, 0x34, 0xa8, 0xd8, 0x19, + 0xe0, 0x06, 0x0b, 0x48, 0x90, 0x9c, 0x57, 0x83, 0xab, 0xd7, 0x3f, 0x10, + 0xd5, 0x1b, 0xbd, 0x67, 0x43, 0x42, 0x8d, 0x33, 0x4a, 0xa6, 0xaf, 0x45, + 0xbd, 0xf4, 0xc9, 0x40, 0x4c, 0x6b, 0xb3, 0xa1, 0xd4, 0xa6, 0xbb, 0xd2, + 0x22, 0xf9, 0x5e, 0x3c, 0xc8, 0xf5, 0x04, 0x32, 0x0e, 0xfb, 0x8a, 0x15, + 0x41, 0x92, 0xd3, 0xd0, 0x69, 0x40, 0xc4, 0xf2, 0x8a, 0x8a, 0xc1, 0xae, + 0xcd, 0x2b, 0xb3, 0x77, 0x48, 0x4f, 0xe6, 0x3d, 0x09, 0x0e, 0x1d, 0xe8, + 0xcc, 0x19, 0xe4, 0x40, 0x64, 0xb8, 0x2d, 0x99, 0xb6, 0xa3, 0x59, 0x84, + 0x44, 0x14, 0xc1, 0xf3, 0x76, 0xfe, 0x85, 0x00, 0x5c, 0x10, 0x04, 0x84, + 0x0d, 0x8c, 0xad, 0x6e, 0xb0, 0x3b, 0xc2, 0xc7, 0xc4, 0xd3, 0x59, 0x5d, + 0x9c, 0x55, 0x9f, 0xc5, 0x96, 0x4e, 0xf3, 0xa3, 0x02, 0xf2, 0x0b, 0x4a, + 0x39, 0x1b, 0x18, 0x94, 0xaf, 0x44, 0xba, 0x5b, 0x3a, 0xe5, 0x7e, 0x9f, + 0x87, 0x4a, 0x96, 0x26, 0x23, 0xc4, 0x6d, 0x9b, 0x6f, 0xff, 0xca, 0x4b, + 0x96, 0xc5, 0x8d, 0x46, 0xa4, 0x3b, 0xa9, 0x96, 0xc3, 0x8f, 0x95, 0x48, + 0xcf, 0x3d, 0xf3, 0x83, 0x8f, 0x90, 0x3f, 0x1f, 0x9d, 0x73, 0x5f, 0x4f, + 0x45, 0xc5, 0x16, 0x83, 0x1f, 0x95, 0xaf, 0x5b, 0x77, 0xa8, 0xb8, 0xbc, + 0xa4, 0xbd, 0x7e, 0xaf, 0xb3, 0x06, 0x48, 0x22, 0x1a, 0x00, 0xba, 0xe8, + 0x5e, 0xe9, 0xe6, 0x85, 0xbf, 0xac, 0x9e, 0x56, 0xa4, 0x33, 0x73, 0x52, + 0x88, 0x59, 0xfe, 0x69, 0x62, 0x37, 0x69, 0x42, 0x9c, 0x98, 0x10, 0x0f, + 0x70, 0x44, 0x91, 0x9c, 0x60, 0x1f, 0x16, 0x20, 0xc4, 0xcf, 0x1d, 0x81, + 0x96, 0x44, 0xcd, 0x45, 0xc9, 0xfd, 0xb3, 0xec, 0xf9, 0xe3, 0x2f, 0x05, + 0x4d, 0x51, 0x83, 0x3c, 0x94, 0xd1, 0x4b, 0xe9, 0x59, 0xca, 0xd7, 0x43, + 0x97, 0x07, 0x2b, 0xe1, 0xd2, 0x4b, 0x63, 0x0d, 0x86, 0x94, 0x91, 0x9a, + 0x66, 0xcc, 0x32, 0x96, 0x30, 0xa3, 0x92, 0xb5, 0xdb, 0x3b, 0xb1, 0x8a, + 0x08, 0x3f, 0x32, 0x99, 0xd1, 0x2a, 0xdc, 0xf8, 0xb7, 0x17, 0x0e, 0x7c, + 0xb6, 0x6a, 0x96, 0x42, 0xd4, 0xec, 0xbc, 0x3d, 0xf1, 0xe8, 0x17, 0x07, + 0xc6, 0x39, 0x0f, 0xab, 0x96, 0x93, 0xa8, 0x02, 0xe7, 0xc1, 0x4b, 0x85, + 0xf7, 0xa7, 0x9b, 0x29, 0x39, 0xf3, 0xea, 0x3e, 0x5d, 0xf2, 0x5a, 0x8c, + 0x0f, 0xd2, 0x39, 0x4b, 0xc4, 0xdc, 0x91, 0x95, 0x75, 0xba, 0xa5, 0xce, + 0x64, 0x8a, 0xba, 0xbe, 0xb7, 0x48, 0x14, 0x45, 0x08, 0x86, 0xad, 0x99, + 0x6d, 0x57, 0xc0, 0x9d, 0xd0, 0x73, 0x22, 0xc4, 0xa1, 0x37, 0x61, 0x6a, + 0x57, 0xd1, 0x80, 0x86, 0xb6, 0xd1, 0x3d, 0x50, 0xb6, 0xb2, 0x6c, 0xf1, + 0x9f, 0x2b, 0x3e, 0x8f, 0x20, 0x16, 0x6f, 0x53, 0xbd, 0x64, 0xd9, 0xda, + 0x20, 0x56, 0xfd, 0x08, 0x6d, 0xdf, 0xfd, 0x0a, 0xc8, 0x5c, 0xe8, 0x6c, + 0x8e, 0x2c, 0xb6, 0xfb, 0x6e, 0x6e, 0x5d, 0xfe, 0x4a, 0x4d, 0xc8, 0x13, + 0x8b, 0xb8, 0xd2, 0xc7, 0xc2, 0x57, 0xaa, 0x66, 0x04, 0x90, 0xe0, 0xf0, + 0xb2, 0x7d, 0x64, 0xc9, 0x94, 0x0d, 0x0c, 0x50, 0x97, 0x02, 0xe7, 0x1f, + 0x67, 0xa8, 0xea, 0xaf, 0x97, 0x74, 0x98, 0x5b, 0x3a, 0x9e, 0xde, 0xc0, + 0x6c, 0x3a, 0x16, 0xa3, 0x3d, 0x2f, 0x95, 0xbc, 0x9a, 0xfa, 0xb5, 0x67, + 0xac, 0xac, 0x3a, 0x9c, 0x6a, 0xb9, 0x22, 0x7c, 0x85, 0x5e, 0x98, 0xb0, + 0x23, 0xbb, 0x3a, 0x13, 0x65, 0xe4, 0x35, 0x18, 0x5e, 0x5d, 0xf9, 0x31, + 0x4d, 0xc7, 0xd3, 0x5a, 0x7a, 0x73, 0xcf, 0xaf, 0xd4, 0xcb, 0x02, 0xe3, + 0xc6, 0x4e, 0xc8, 0x06, 0x0e, 0x82, 0x5d, 0xe8, 0x40, 0xb6, 0x84, 0xcf, + 0xa9, 0xcf, 0xff, 0xb4, 0x00, 0x9c, 0x00, 0x66, 0x95, 0xa3, 0xce, 0xfc, + 0x74, 0xca, 0x05, 0xa2, 0x7d, 0x7b, 0xf7, 0x7e, 0x6b, 0xbb, 0x01, 0x3b, + 0x4e, 0x26, 0xeb, 0x63, 0x27, 0xfb, 0x6f, 0x0f, 0x74, 0x19, 0xb2, 0x7c, + 0xfd, 0x63, 0x03, 0x77, 0xd9, 0xd0, 0x07, 0x79, 0xe2, 0x26, 0xdc, 0x3d, + 0x8e, 0xfc, 0x62, 0xb5, 0x13, 0xee, 0xb6, 0x96, 0x01, 0x23, 0x59, 0xc5, + 0x1d, 0xc7, 0x3f, 0x7b, 0xee, 0xb3, 0xbf, 0xae, 0x6c, 0xd9, 0xa4, 0xb5, + 0xbf, 0xba, 0x85, 0xf7, 0x55, 0xb2, 0x87, 0x59, 0x5b, 0x5e, 0x05, 0x43, + 0xa1, 0xc2, 0x50, 0xe0, 0xb7, 0x1d, 0x9e, 0x17, 0x94, 0x5f, 0xf6, 0xfe, + 0xfa, 0xff, 0x2d, 0x3c, 0xb8, 0x5d, 0xc7, 0xa8, 0x06, 0xd5, 0x83, 0x2a, + 0xcc, 0x36, 0x87, 0xaa, 0x9f, 0x3d, 0xb0, 0xfe, 0xfd, 0xfe, 0x92, 0xfe, + 0xe2, 0xd8, 0x3b, 0xee, 0xe9, 0xbf, 0xb8, 0xd2, 0xeb, 0x2e, 0xff, 0x3b, + 0xa6, 0xa9, 0xfa, 0xd2, 0xf1, 0xdc, 0xba, 0x8c, 0x6b, 0x6f, 0xf8, 0xbe, + 0x5f, 0xf8, 0x5f, 0xe2, 0x37, 0x51, 0x5d, 0x99, 0x22, 0xb6, 0x6f, 0xc3, + 0xf1, 0x47, 0x76, 0x8d, 0x3e, 0xa6, 0xaa, 0xfa, 0x77, 0x5c, 0xe2, 0x74, + 0xe9, 0x74, 0x62, 0xec, 0x72, 0x1d, 0xaf, 0xbe, 0x99, 0x5d, 0x83, 0xea, + 0x11, 0x85, 0x8c, 0xec, 0x38, 0xfe, 0xda, 0xb9, 0x8f, 0x2e, 0x9c, 0xcb, + 0x3b, 0x37, 0xf5, 0xcf, 0x73, 0xaf, 0x1d, 0x6f, 0xbd, 0x78, 0x2d, 0xe3, + 0xda, 0x8e, 0x9f, 0x13, 0x2a, 0xce, 0x46, 0x4a, 0xce, 0x26, 0x54, 0xfc, + 0x0c, 0x67, 0xf9, 0xda, 0xc8, 0x3a, 0xe4, 0x4d, 0xaa, 0x89, 0xda, 0x86, + 0x1c, 0xd0, 0x08, 0x2f, 0x33, 0xd4, 0xb1, 0xc7, 0x95, 0xb2, 0xc1, 0xd8, + 0x63, 0x21, 0xca, 0x5f, 0x87, 0x64, 0xca, 0xa7, 0x31, 0x9b, 0x36, 0x1f, + 0x5f, 0x1e, 0xc4, 0x88, 0xf1, 0xb5, 0xb4, 0x29, 0xab, 0x63, 0xaa, 0x2b, + 0x23, 0xf8, 0xd9, 0x9b, 0x3f, 0x5b, 0x23, 0x21, 0x19, 0x7e, 0xef, 0xcd, + 0xc2, 0x29, 0xc0, 0x78, 0xc2, 0x12, 0xd1, 0x9f, 0xfc, 0x5f, 0x7b, 0xd1, + 0xd7, 0x49, 0xcb, 0xd1, 0xd7, 0x4f, 0xe4, 0xe6, 0x61, 0x78, 0x82, 0xda, + 0x92, 0x68, 0x4a, 0x78, 0x09, 0x4b, 0xfb, 0xf6, 0x6c, 0x5d, 0xc8, 0x24, + 0xed, 0x2f, 0x96, 0xd1, 0xf1, 0xff, 0x9f, 0xe2, 0xc8, 0x8c, 0x53, 0x54, + 0xf8, 0x3e, 0xcc, 0x67, 0x22, 0x9c, 0x56, 0x1f, 0xbf, 0x1c, 0xb1, 0x5e, + 0x68, 0x3d, 0x1e, 0x12, 0x82, 0xd3, 0x68, 0x82, 0x87, 0x6a, 0xd0, 0x4d, + 0xaf, 0x7d, 0x33, 0xea, 0x23, 0x95, 0x45, 0xce, 0x65, 0x82, 0x46, 0xf4, + 0x84, 0xb2, 0x2a, 0x35, 0xa9, 0xff, 0xa8, 0x54, 0x12, 0xc2, 0x41, 0x63, + 0x3d, 0xb1, 0xa3, 0xf3, 0x3f, 0x1a, 0x4f, 0xd6, 0x04, 0x58, 0xc3, 0x20, + 0xb3, 0x54, 0xbd, 0xf4, 0xfc, 0xc9, 0xbd, 0x01, 0x83, 0xd4, 0x38, 0xc5, + 0x4f, 0xf1, 0xe4, 0xa3, 0xfb, 0x4b, 0x34, 0x5f, 0xcb, 0x77, 0xb2, 0xc1, + 0xd5, 0x9d, 0xa3, 0x14, 0x94, 0x85, 0xd9, 0x9a, 0x84, 0x7f, 0x8e, 0x49, + 0xdc, 0x94, 0x5b, 0x72, 0xe4, 0x9f, 0x78, 0x62, 0x49, 0x37, 0xcc, 0x4d, + 0xff, 0xe0, 0x37, 0xc1, 0xcd, 0xa1, 0x57, 0xb5, 0x84, 0x02, 0xa5, 0xb9, + 0x1c, 0x99, 0xa2, 0x9e, 0xf9, 0xb1, 0xf2, 0x15, 0x0a, 0x53, 0x67, 0xb0, + 0x02, 0x33, 0xbd, 0xba, 0xc2, 0xfc, 0xc9, 0x32, 0x8c, 0x5c, 0x9c, 0x62, + 0x61, 0x49, 0x08, 0x0e, 0xa6, 0xb8, 0x6e, 0x34, 0xf0, 0xaa, 0xca, 0x02, + 0x69, 0x88, 0x2e, 0xee, 0x51, 0xb4, 0xfd, 0x43, 0x13, 0x80, 0x3f, 0x57, + 0x24, 0x09, 0x1e, 0x21, 0x29, 0x9c, 0x36, 0x40, 0xf7, 0xdd, 0xd1, 0xd2, + 0xf0, 0x88, 0xf9, 0x2b, 0xf3, 0x2e, 0x24, 0xcf, 0xbb, 0x13, 0xf1, 0x2f, + 0x7e, 0x10, 0xcc, 0x08, 0x15, 0xf0, 0x51, 0x98, 0x20, 0x6b, 0x34, 0x71, + 0x65, 0x62, 0x27, 0xf6, 0xd3, 0x02, 0x6d, 0xfb, 0x71, 0xd8, 0x0b, 0xa4, + 0x81, 0x1d, 0x9e, 0xc0, 0x73, 0x49, 0x13, 0x49, 0x26, 0xea, 0xbe, 0xa8, + 0x40, 0x9c, 0x2c, 0x3d, 0x8e, 0x0e, 0x2a, 0x14, 0x8a, 0xda, 0xee, 0xf7, + 0x55, 0x73, 0xfa, 0xf9, 0x02, 0x46, 0xce, 0xa9, 0xde, 0xd7, 0x7f, 0x27, + 0xe9, 0x14, 0xde, 0x6f, 0xde, 0xc9, 0x9a, 0xb4, 0x5f, 0x2a, 0x13, 0xd3, + 0x0c, 0xef, 0x14, 0x9c, 0xff, 0x15, 0x87, 0x88, 0xfa, 0xed, 0x6b, 0x4c, + 0xe3, 0xc1, 0xb0, 0x78, 0x3b, 0xaf, 0x4c, 0x53, 0x57, 0x68, 0x77, 0x6c, + 0x2c, 0xf2, 0x27, 0x91, 0x13, 0x13, 0xbd, 0xe5, 0xcf, 0x61, 0x20, 0x3e, + 0x8a, 0x62, 0xd6, 0x26, 0x88, 0x2d, 0x1d, 0x65, 0xb2, 0x66, 0xb1, 0xe2, + 0x80, 0xe5, 0x0d, 0xb7, 0x17, 0x80, 0x38, 0xfa, 0x57, 0xaa, 0x2f, 0x1e, + 0x5e, 0x59, 0xbf, 0xe5, 0x0b, 0xc7, 0x17, 0x9b, 0x18, 0xcc, 0xbb, 0x88, + 0xf0, 0xf4, 0xc5, 0x21, 0x00, 0xc2, 0xf0, 0x13, 0x84, 0x21, 0xf6, 0x66, + 0x5e, 0xfb, 0xe8, 0xbc, 0x7d, 0x1e, 0x82, 0xf7, 0x27, 0x68, 0xa0, 0x54, + 0x55, 0xa9, 0xab, 0x6f, 0x5d, 0x7f, 0x38, 0x55, 0x4c, 0x3d, 0xbc, 0xac, + 0x58, 0x44, 0x3b, 0xad, 0x5a, 0xa6, 0x24, 0x86, 0x52, 0xd6, 0xdb, 0x28, + 0x1b, 0xe2, 0xf4, 0x25, 0x95, 0xf3, 0xaa, 0xb2, 0x04, 0xc8, 0xce, 0x19, + 0x50, 0x6c, 0x94, 0x0e, 0x48, 0x97, 0xa8, 0xe2, 0x4b, 0x02, 0x02, 0xd8, + 0xe1, 0x3c, 0xb5, 0x22, 0x5a, 0x2d, 0x23, 0x49, 0x23, 0xa1, 0xb4, 0x32, + 0x74, 0x60, 0xe7, 0xd1, 0x81, 0x98, 0x81, 0xab, 0x03, 0x33, 0x09, 0xb9, + 0xad, 0xa9, 0x36, 0x5b, 0xff, 0xc8, 0x88, 0x7d, 0xa6, 0x8b, 0xec, 0xdc, + 0x88, 0x62, 0xe4, 0x5e, 0xda, 0xaa, 0x75, 0xb9, 0x60, 0x49, 0x4f, 0x71, + 0x40, 0x73, 0x5d, 0x28, 0x42, 0x95, 0xd0, 0x76, 0x2d, 0x1e, 0xad, 0xc1, + 0xd3, 0xc5, 0x3d, 0x51, 0xca, 0x85, 0x8f, 0x99, 0x7c, 0x13, 0xae, 0x97, + 0x0d, 0x33, 0xb2, 0x39, 0x08, 0x1a, 0x76, 0x34, 0xea, 0xdd, 0x9b, 0x8a, + 0x09, 0x8e, 0xf9, 0x63, 0x6d, 0x3a, 0x68, 0xcc, 0x47, 0x01, 0x16, 0xd5, + 0x44, 0xcd, 0x18, 0xfc, 0x19, 0xa9, 0x53, 0x36, 0x64, 0x93, 0xbb, 0x24, + 0x11, 0xa7, 0x44, 0xaf, 0x44, 0x48, 0x02, 0x79, 0xbc, 0xbb, 0xde, 0x95, + 0xfd, 0xbf, 0x82, 0x12, 0xdb, 0x2e, 0x11, 0x6d, 0x68, 0x19, 0xd0, 0xf3, + 0x5d, 0xf7, 0xbb, 0x1d, 0xdc, 0x22, 0x8d, 0x38, 0x87, 0x7b, 0x3b, 0x55, + 0x3f, 0x47, 0xd7, 0xd3, 0xf0, 0x48, 0xbc, 0xb7, 0x20, 0x36, 0xfa, 0xdb, + 0xde, 0x12, 0x45, 0xcd, 0xff, 0x6a, 0x96, 0xf4, 0x7e, 0x1b, 0x1d, 0x9b, + 0x72, 0xef, 0x16, 0xb7, 0xf1, 0x6b, 0xe3, 0x7d, 0x15, 0xf7, 0xc1, 0x4d, + 0xea, 0xad, 0x1b, 0xdf, 0x86, 0xce, 0x9d, 0x80, 0x49, 0x36, 0x26, 0x15, + 0x0d, 0x0e, 0xed, 0x2c, 0x9a, 0x5a, 0x15, 0x88, 0xd2, 0xa6, 0xe9, 0x25, + 0x81, 0xbd, 0x2e, 0x43, 0xaa, 0x35, 0x39, 0x61, 0x2c, 0x41, 0xf1, 0xc4, + 0x89, 0xf3, 0xe7, 0x4f, 0x3c, 0xa1, 0x48, 0x38, 0x91, 0xa0, 0xc9, 0x70, + 0xb1, 0x8b, 0x2c, 0x5c, 0xf9, 0xc0, 0x1b, 0xab, 0x8b, 0xce, 0x7f, 0x28, + 0xf4, 0xdd, 0xbb, 0xce, 0x98, 0x95, 0x5d, 0xf5, 0xe6, 0xd2, 0x54, 0xfd, + 0x88, 0xe0, 0x4b, 0x71, 0x31, 0x17, 0xe6, 0xee, 0x95, 0x53, 0x07, 0x25, + 0xff, 0xc3, 0x5a, 0xcc, 0x25, 0xb4, 0xc9, 0xe6, 0x32, 0x9f, 0xa7, 0xcc, + 0x85, 0x0b, 0x1c, 0xe6, 0xd4, 0xae, 0xd2, 0xd8, 0x60, 0x8c, 0xa8, 0xf4, + 0x54, 0x77, 0x8d, 0x74, 0x9f, 0x8b, 0x2f, 0x0c, 0xd1, 0xc9, 0xd2, 0x64, + 0x62, 0xb3, 0x98, 0xd7, 0xae, 0xa6, 0x11, 0x2d, 0x1d, 0x03, 0x62, 0xc4, + 0xa2, 0xee, 0x10, 0x3a, 0x46, 0xa7, 0xe1, 0xb3, 0xd6, 0x7e, 0x50, 0xd5, + 0x8b, 0x5c, 0xf9, 0x15, 0xe1, 0x6a, 0xee, 0xbf, 0xa7, 0x58, 0x84, 0x88, + 0xfe, 0xdc, 0xf4, 0x89, 0x0d, 0xb1, 0xb1, 0xd2, 0xd6, 0x73, 0x66, 0x9e, + 0x54, 0x49, 0xbc, 0x62, 0x81, 0xe8, 0x95, 0x2c, 0x0b, 0x14, 0x44, 0x5c, + 0x85, 0x21, 0x68, 0xd4, 0x6e, 0x34, 0x5e, 0xef, 0xe9, 0xc5, 0xb8, 0xb7, + 0xe7, 0x56, 0xc4, 0xed, 0xde, 0xae, 0x5b, 0xbd, 0x3d, 0x1b, 0x7b, 0x7a, + 0xaf, 0x7b, 0x4f, 0x18, 0x0f, 0x56, 0xdb, 0x08, 0xa1, 0xd2, 0x6f, 0xf4, + 0x04, 0x46, 0x1a, 0x86, 0x59, 0xc2, 0xd6, 0x8d, 0xb3, 0xdc, 0x98, 0x6a, + 0x78, 0xa8, 0xd6, 0x41, 0x2d, 0xcf, 0x73, 0x85, 0x6b, 0x4e, 0x86, 0x66, + 0x0c, 0xcf, 0x1a, 0x6d, 0xcd, 0xe8, 0x3f, 0xb1, 0xbb, 0xbc, 0x62, 0xbd, + 0x5b, 0x28, 0x27, 0x80, 0x37, 0x7e, 0xeb, 0xf9, 0xff, 0x1d, 0x22, 0x25, + 0x93, 0x72, 0x1f, 0xa3, 0x69, 0x4d, 0xd2, 0x59, 0x88, 0xfc, 0x37, 0xa8, + 0x8c, 0x7b, 0x9f, 0x0f, 0x1d, 0xbc, 0xb4, 0x93, 0x6e, 0x92, 0x1e, 0x54, + 0xcd, 0xff, 0x5c, 0x98, 0x03, 0xd3, 0xa6, 0xc1, 0xc5, 0x13, 0xbb, 0xea, + 0x54, 0x07, 0xa5, 0x73, 0xbe, 0xd7, 0x7c, 0x01, 0x01, 0x9e, 0x9e, 0x1b, + 0x82, 0xe4, 0xa4, 0xb2, 0xcd, 0xe7, 0x7d, 0x63, 0xe3, 0xb7, 0xc0, 0x00, + 0x62, 0x11, 0xc6, 0xaa, 0xd2, 0x00, 0x2d, 0x51, 0x55, 0xf8, 0xd7, 0x51, + 0x58, 0x2c, 0x49, 0x90, 0x48, 0x44, 0xc4, 0xbb, 0x58, 0xca, 0x41, 0x28, + 0x94, 0x43, 0xc4, 0x01, 0xe5, 0xf6, 0xb0, 0x31, 0xa5, 0x1f, 0x3b, 0x37, + 0xd6, 0xd5, 0xb9, 0x86, 0xd7, 0x97, 0x67, 0x0a, 0x63, 0x9d, 0x2a, 0xcc, + 0x5e, 0xcc, 0xa3, 0xf3, 0xd4, 0xb5, 0x03, 0xf5, 0xc5, 0x1f, 0x06, 0xe4, + 0x40, 0xed, 0xa6, 0x10, 0xfc, 0x37, 0xf7, 0xae, 0xe3, 0xe5, 0x32, 0xcd, + 0xfa, 0xe8, 0xca, 0xf5, 0xeb, 0x4b, 0x57, 0x57, 0x6d, 0x5f, 0xfc, 0xba, + 0x32, 0x7d, 0x5a, 0x34, 0x4c, 0xd5, 0x26, 0xbd, 0x72, 0x79, 0x77, 0xdc, + 0xf1, 0xae, 0x7f, 0x7c, 0x35, 0xce, 0x72, 0xd4, 0x50, 0xf8, 0x15, 0xb7, + 0x59, 0xef, 0x88, 0x1c, 0x55, 0x3f, 0xc5, 0x60, 0x80, 0xdb, 0xb5, 0xe6, + 0x8b, 0x32, 0xe7, 0x02, 0x25, 0xc6, 0xc3, 0x49, 0x2a, 0x51, 0x15, 0x6f, + 0x2f, 0xca, 0x2c, 0x3a, 0x14, 0xaf, 0xba, 0xa0, 0xd2, 0xf5, 0xeb, 0xd6, + 0x65, 0x63, 0x73, 0xd1, 0xca, 0x98, 0x5a, 0x87, 0x9c, 0x41, 0xd8, 0xc8, + 0x09, 0x5b, 0xde, 0xbe, 0x3e, 0x77, 0xdd, 0x7b, 0x6b, 0xee, 0x16, 0x36, + 0x59, 0x2c, 0xaf, 0xbf, 0xce, 0xef, 0x5c, 0x97, 0x2a, 0xfa, 0x71, 0xb0, + 0x46, 0x7f, 0xe1, 0xcb, 0xde, 0xfe, 0xf8, 0xbc, 0x44, 0x6a, 0x8e, 0xe1, + 0xdc, 0x38, 0x69, 0xec, 0xff, 0x52, 0xb1, 0xe0, 0x3a, 0xb8, 0x0b, 0xce, + 0x1a, 0xae, 0x9c, 0x13, 0xb9, 0x9e, 0x6a, 0x2c, 0x31, 0x1b, 0xa5, 0xeb, + 0x56, 0x18, 0xf3, 0xcd, 0xc9, 0x2c, 0x74, 0x1c, 0x10, 0x93, 0x11, 0xb7, + 0xea, 0x12, 0x69, 0xf0, 0xc5, 0x9b, 0x2b, 0xa4, 0x4a, 0xb1, 0xf2, 0x73, + 0xef, 0x41, 0xf1, 0xc7, 0xdf, 0x24, 0x9e, 0xa0, 0x25, 0xf2, 0xab, 0x08, + 0x52, 0xac, 0x60, 0xb0, 0x97, 0xbc, 0xba, 0x46, 0x60, 0x41, 0x36, 0x04, + 0x26, 0x8b, 0xe6, 0xe5, 0x36, 0xa8, 0x92, 0xc5, 0xb7, 0xe1, 0x2d, 0xc1, + 0x01, 0x47, 0x65, 0xaa, 0x93, 0x90, 0xc2, 0x60, 0xb4, 0x29, 0xce, 0xe5, + 0x18, 0x13, 0xd6, 0x6d, 0x79, 0xd6, 0x68, 0xac, 0xf4, 0xeb, 0xf5, 0xda, + 0xbc, 0x91, 0xb1, 0xd1, 0x16, 0x75, 0x93, 0xe8, 0xcf, 0x93, 0xaf, 0xa0, + 0xa4, 0x2b, 0x7a, 0xcb, 0x73, 0x11, 0xe1, 0x07, 0x73, 0x62, 0x40, 0x2d, + 0x1c, 0xa2, 0x58, 0xb5, 0x8e, 0x5a, 0xfe, 0x1c, 0xd9, 0x1d, 0x1e, 0xb1, + 0x1c, 0x2a, 0x1a, 0x5b, 0x6a, 0x4c, 0x68, 0x04, 0x67, 0xf7, 0xf9, 0x07, + 0xe9, 0x5e, 0x2a, 0x2b, 0x5f, 0x4a, 0x0b, 0xfb, 0x1f, 0x2b, 0x83, 0x7f, + 0xc0, 0xe8, 0x8b, 0x30, 0x78, 0x66, 0x4e, 0x44, 0x22, 0xc0, 0x46, 0x9f, + 0x41, 0xdf, 0x91, 0x30, 0x55, 0x34, 0x99, 0xa0, 0x96, 0x32, 0x12, 0xa9, + 0x55, 0x92, 0x94, 0xf8, 0x7a, 0xbc, 0x46, 0x1d, 0x27, 0x3f, 0x2c, 0x2d, + 0x6e, 0xf2, 0xd6, 0xa4, 0xe8, 0xd4, 0xba, 0x94, 0x25, 0xfa, 0x02, 0xc9, + 0x80, 0x54, 0x9d, 0x98, 0xf6, 0xb6, 0x9a, 0x56, 0x37, 0x60, 0x55, 0xe3, + 0xf3, 0x53, 0x1c, 0x27, 0xda, 0x1d, 0x6e, 0xda, 0x01, 0xc9, 0x59, 0xaa, + 0x67, 0x13, 0x92, 0xd5, 0xf1, 0xcd, 0x93, 0x92, 0xca, 0xe8, 0x5e, 0x5b, + 0x70, 0xf3, 0xe3, 0x25, 0xe7, 0xa8, 0x73, 0x52, 0x02, 0xf8, 0x31, 0x25, + 0x51, 0x27, 0x4c, 0x26, 0x8c, 0xeb, 0xdf, 0x05, 0x04, 0xe9, 0xac, 0x81, + 0x4e, 0xbb, 0x9e, 0xf4, 0x68, 0xde, 0xc4, 0xbf, 0xfe, 0x35, 0x91, 0x86, + 0xd7, 0xcf, 0x94, 0x97, 0xc7, 0x0c, 0x18, 0xb7, 0x95, 0x2d, 0x81, 0xd1, + 0xc0, 0xc8, 0xac, 0xbf, 0xdf, 0xa2, 0x5c, 0xbe, 0xc2, 0xad, 0xca, 0xf0, + 0xf1, 0x42, 0xc1, 0xa4, 0xce, 0x9e, 0x3d, 0x47, 0x71, 0xa1, 0x5b, 0xcf, + 0xd1, 0x06, 0x4e, 0x81, 0x30, 0x75, 0xed, 0xda, 0x85, 0xb1, 0xf1, 0xae, + 0x9b, 0x18, 0xff, 0x44, 0x18, 0x67, 0xa3, 0x30, 0x80, 0x11, 0xe2, 0xe8, + 0x3c, 0x42, 0x66, 0xa9, 0x20, 0xc8, 0xff, 0xa7, 0x35, 0xba, 0xd9, 0xd4, + 0xff, 0x3b, 0x19, 0x79, 0x4e, 0x2d, 0x19, 0x7b, 0x91, 0x17, 0xcc, 0xfb, + 0xbf, 0x4f, 0xba, 0x8d, 0x8f, 0x8e, 0x67, 0x54, 0xca, 0xdd, 0xd7, 0xf8, + 0xdc, 0x98, 0x0d, 0xa3, 0x16, 0x6c, 0x11, 0xf1, 0x0f, 0x9e, 0x22, 0x2c, + 0x9b, 0x2d, 0xef, 0x0f, 0x54, 0x19, 0x48, 0xf3, 0x45, 0xdd, 0x29, 0x03, + 0xf1, 0x05, 0x77, 0xef, 0x0f, 0x7e, 0xee, 0x26, 0x4c, 0xf6, 0xcf, 0xd1, + 0x92, 0xa1, 0xd7, 0x8a, 0x93, 0x6a, 0x15, 0x47, 0xf7, 0x0a, 0xe0, 0xfc, + 0x2c, 0x97, 0x12, 0xdb, 0xdf, 0x8b, 0xb7, 0x4c, 0xde, 0x78, 0xf4, 0x91, + 0xad, 0xa8, 0xf7, 0xe5, 0x7e, 0x6a, 0x13, 0xdb, 0x7c, 0x5f, 0x9d, 0xcd, + 0x80, 0xbf, 0x5f, 0x3a, 0x35, 0x9d, 0x7d, 0xbe, 0x75, 0x8e, 0xa6, 0xf8, + 0x52, 0x5b, 0x6f, 0x9b, 0xf0, 0x95, 0xc8, 0x1c, 0xf4, 0x37, 0x91, 0xb5, + 0xa8, 0x17, 0xb2, 0x66, 0x20, 0x2b, 0xfa, 0xb9, 0xff, 0x3c, 0xc3, 0xe3, + 0xd8, 0xd2, 0x2d, 0xea, 0x1c, 0x06, 0x03, 0xfc, 0xf5, 0xcd, 0x1e, 0x3b, + 0xb0, 0xf1, 0xb7, 0x7f, 0xa5, 0x9b, 0xd5, 0x70, 0xf5, 0x6c, 0x36, 0x4c, + 0x1d, 0x32, 0x48, 0xa3, 0xcc, 0xea, 0xc4, 0xbb, 0x3a, 0x47, 0xba, 0x27, + 0xfa, 0x4f, 0xcd, 0x48, 0xfd, 0x3a, 0x62, 0x1e, 0xa0, 0xd0, 0x48, 0x08, + 0xa0, 0x41, 0xd3, 0xc4, 0xe9, 0x7d, 0x1b, 0x36, 0x36, 0xb4, 0xe0, 0x54, + 0x19, 0x26, 0x58, 0xce, 0x19, 0x54, 0xb4, 0x50, 0x29, 0x33, 0x42, 0x48, + 0xaa, 0x0a, 0xd1, 0x99, 0x8d, 0xc3, 0x26, 0x1f, 0xe1, 0x1c, 0x55, 0xf2, + 0x61, 0xa9, 0xd2, 0x14, 0x31, 0x0b, 0x8b, 0x81, 0xe8, 0x06, 0x2b, 0xa2, + 0x50, 0x19, 0xa1, 0xd1, 0x19, 0x6f, 0x03, 0x80, 0x18, 0x89, 0x6c, 0x55, + 0x58, 0x2d, 0x39, 0xc4, 0x06, 0x11, 0x1b, 0xb9, 0xcd, 0xdf, 0xf9, 0xbb, + 0xed, 0x1c, 0x78, 0x84, 0xca, 0x3b, 0x68, 0x59, 0x10, 0x41, 0x0b, 0x00, + 0x84, 0x20, 0x58, 0xaa, 0xa4, 0x98, 0x8c, 0xb6, 0x44, 0x02, 0x50, 0x03, + 0x9b, 0x69, 0x98, 0xc5, 0xf3, 0x6b, 0x0a, 0x2c, 0xa9, 0x10, 0x41, 0x11, + 0x3b, 0xc0, 0xba, 0x49, 0xba, 0x3d, 0x4f, 0x81, 0x71, 0xe8, 0xfd, 0xa2, + 0x43, 0x6c, 0xca, 0x48, 0x64, 0x22, 0xb9, 0x14, 0x20, 0xb5, 0x93, 0xac, + 0x20, 0xe0, 0x26, 0xf3, 0x00, 0x0a, 0x9a, 0x46, 0x7e, 0xb6, 0x02, 0x52, + 0xcc, 0x06, 0x00, 0xe0, 0xc8, 0xc1, 0x48, 0xad, 0x8e, 0x8c, 0xb2, 0x54, + 0x30, 0xc4, 0xdb, 0x3a, 0xc4, 0x11, 0x52, 0xcc, 0x04, 0x6a, 0x83, 0x08, + 0x11, 0xdb, 0xda, 0x4e, 0x25, 0x28, 0x2c, 0xb8, 0x1d, 0x37, 0x22, 0x8c, + 0xa3, 0xf5, 0xb6, 0xad, 0x7c, 0x94, 0x85, 0x2d, 0x66, 0x24, 0xa5, 0xb2, + 0xe8, 0x2f, 0x0e, 0xf4, 0x5a, 0x07, 0x00, 0xde, 0x60, 0x0c, 0x81, 0x97, + 0x13, 0x24, 0x3b, 0x12, 0x38, 0x9d, 0x27, 0x16, 0x01, 0xe0, 0x6c, 0x95, + 0xc6, 0xc0, 0xfc, 0x81, 0xa1, 0x89, 0x01, 0x0c, 0x26, 0xe4, 0x64, 0xc1, + 0x78, 0x11, 0x1b, 0xb6, 0xe8, 0x19, 0xc6, 0x82, 0xe8, 0xd0, 0x58, 0xd9, + 0x34, 0x39, 0x92, 0x85, 0x63, 0x84, 0x12, 0x0d, 0x16, 0x15, 0x7a, 0xa3, + 0x9f, 0x57, 0xbf, 0x80, 0xda, 0x14, 0xed, 0xc0, 0x01, 0x92, 0xcb, 0x4f, + 0x1c, 0x75, 0x94, 0x95, 0x44, 0x5b, 0x0a, 0xa2, 0x84, 0x79, 0xfc, 0x17, + 0x27, 0x2b, 0xb0, 0x23, 0x59, 0x84, 0x6e, 0xa9, 0x4a, 0x7c, 0xc2, 0x70, + 0x2b, 0x53, 0x83, 0xce, 0x6a, 0x8c, 0x63, 0x5b, 0x00, 0xed, 0x2a, 0xd5, + 0xb0, 0x8e, 0x41, 0x72, 0x24, 0xa9, 0xd5, 0xc8, 0x67, 0xa0, 0x2b, 0x15, + 0x11, 0xac, 0x36, 0xad, 0x0d, 0xca, 0x60, 0x3b, 0x02, 0x63, 0x05, 0x58, + 0x7c, 0xe6, 0x34, 0x2a, 0xb0, 0x77, 0x45, 0xfe, 0xa0, 0x24, 0xdd, 0x72, + 0xab, 0x22, 0xae, 0x90, 0x52, 0x57, 0xd2, 0x4f, 0x83, 0x19, 0x13, 0x9f, + 0x41, 0x49, 0x11, 0x0e, 0x66, 0x43, 0x26, 0x56, 0x8e, 0x0c, 0xab, 0x91, + 0x85, 0x74, 0x15, 0x01, 0xe3, 0x87, 0x13, 0x6e, 0xe6, 0xe4, 0xa6, 0x17, + 0x33, 0xbf, 0x37, 0x62, 0xb6, 0x19, 0x03, 0x38, 0x10, 0x83, 0xbe, 0xc4, + 0x55, 0x10, 0x5d, 0xc0, 0xe4, 0x4c, 0x23, 0x6b, 0x3c, 0x9f, 0xd3, 0x60, + 0xb3, 0xea, 0xdf, 0xfc, 0x72, 0x44, 0x46, 0x2b, 0x48, 0xa0, 0x88, 0xd0, + 0x6e, 0xed, 0xb9, 0xbd, 0xe0, 0x67, 0x06, 0x21, 0x64, 0x1d, 0xdc, 0x99, + 0x02, 0xb6, 0xe5, 0x7a, 0x5c, 0xa1, 0x30, 0xde, 0x8a, 0x1e, 0x58, 0x54, + 0x40, 0x20, 0x8a, 0x24, 0x39, 0x1b, 0x30, 0xae, 0xa2, 0x1d, 0xf8, 0x45, + 0x22, 0x60, 0x94, 0xaa, 0xd8, 0xd9, 0x13, 0x35, 0x82, 0xb1, 0xc1, 0x8e, + 0xad, 0xef, 0xf7, 0x0e, 0x6a, 0x14, 0xf5, 0x30, 0x0c, 0x5a, 0xe1, 0x5d, + 0xd1, 0x86, 0xb1, 0x05, 0x7c, 0x0b, 0x67, 0x41, 0x09, 0xfd, 0x82, 0x5f, + 0xdb, 0x1f, 0xc9, 0x04, 0x91, 0xce, 0x85, 0x14, 0xe5, 0x64, 0x16, 0x21, + 0xea, 0x00, 0xa0, 0x97, 0xb8, 0x02, 0x07, 0x54, 0xe9, 0x9c, 0x25, 0xbf, + 0x1d, 0x10, 0x37, 0x28, 0x87, 0x63, 0x3f, 0x26, 0x3f, 0xb1, 0x71, 0x15, + 0x9a, 0x35, 0x96, 0x43, 0xf5, 0xb1, 0x5e, 0x3a, 0xa1, 0xb2, 0xda, 0x11, + 0xc9, 0x39, 0x40, 0x3f, 0xe3, 0x51, 0x6c, 0x84, 0xd8, 0xa9, 0x3e, 0xf4, + 0xb3, 0x94, 0xec, 0x0a, 0x98, 0x85, 0x82, 0xaa, 0xe0, 0xe2, 0x8e, 0xa5, + 0x5a, 0x54, 0x9d, 0xaf, 0x54, 0xd3, 0x48, 0x41, 0xa0, 0xb8, 0xa0, 0xc5, + 0x13, 0xf6, 0x33, 0x8b, 0x7e, 0xa3, 0x59, 0x96, 0xce, 0xa8, 0x06, 0xd2, + 0x18, 0x5a, 0x84, 0x4a, 0xcc, 0x02, 0xfa, 0xc1, 0xb5, 0x2c, 0xbc, 0x24, + 0x56, 0x50, 0x72, 0x2b, 0xd4, 0x62, 0x1c, 0x8c, 0x1e, 0xf0, 0x03, 0x3e, + 0xc0, 0x9f, 0xc4, 0x8e, 0xf9, 0x45, 0x52, 0xb3, 0xe2, 0x94, 0x73, 0x83, + 0x20, 0xd2, 0xc4, 0xc0, 0x4f, 0xe1, 0x6c, 0x3d, 0x5d, 0x7f, 0xb4, 0x86, + 0x17, 0xfd, 0x94, 0xbc, 0x74, 0x92, 0x6e, 0x58, 0x00, 0x0d, 0x02, 0x0c, + 0xad, 0x08, 0xd9, 0xd6, 0x0d, 0xd6, 0x20, 0xe4, 0x15, 0xe9, 0xa4, 0x31, + 0x5a, 0xce, 0x6f, 0x94, 0xaa, 0xab, 0x02, 0xb9, 0xc3, 0x3e, 0xf6, 0x8a, + 0x5d, 0x7a, 0x28, 0xfc, 0x71, 0xcb, 0xb6, 0x93, 0x62, 0xbe, 0x51, 0x52, + 0x10, 0xff, 0x75, 0xb4, 0xac, 0xd1, 0x41, 0xa2, 0x2d, 0x05, 0x85, 0x70, + 0xdd, 0xe8, 0xf3, 0xd1, 0x10, 0xbe, 0xee, 0x8f, 0x86, 0xb1, 0x2c, 0xfe, + 0x68, 0x82, 0x10, 0x47, 0xaa, 0x89, 0xe5, 0x8f, 0x26, 0xd1, 0xf0, 0xe5, + 0x37, 0x14, 0x32, 0xb1, 0x5f, 0xb8, 0xdb, 0x66, 0xbb, 0x3d, 0x76, 0xb2, + 0xda, 0x68, 0x93, 0x41, 0x6a, 0x79, 0x72, 0xe4, 0x5a, 0x45, 0xad, 0xca, + 0x36, 0xdb, 0x6c, 0xb4, 0x59, 0x3f, 0x1d, 0xb5, 0x1a, 0x5b, 0xf5, 0xca, + 0xa2, 0x56, 0x66, 0xb3, 0xcd, 0xd4, 0x9a, 0x6b, 0xc8, 0xae, 0x8b, 0xda, + 0x1f, 0x03, 0xfd, 0x76, 0x1a, 0x76, 0xb5, 0xef, 0x68, 0xb0, 0xce, 0x06, + 0x83, 0x37, 0xdb, 0x6a, 0x03, 0x38, 0xbb, 0x46, 0xaf, 0x6d, 0xb6, 0x3a, + 0x6c, 0xd1, 0x8d, 0x86, 0x1a, 0x75, 0x83, 0x11, 0x53, 0x22, 0x83, 0x87, + 0xba, 0x73, 0x91, 0x7e, 0x16, 0x6a, 0xd6, 0xd8, 0xa8, 0x56, 0xe4, 0x19, + 0x05, 0x15, 0x07, 0xf4, 0x32, 0xe5, 0xdf, 0x88, 0xbb, 0xbd, 0x1a, 0x0b, + 0x54, 0x77, 0x0d, 0x00, 0xa8, 0xea, 0x4a, 0xb2, 0xb2, 0x35, 0x57, 0xe2, + 0x94, 0x6e, 0xb5, 0x32, 0x19, 0x19, 0x4b, 0x7d, 0xff, 0xd7, 0xf9, 0xe7, + 0xca, 0x03, 0x00, 0x00 +}; + +#define fav_icon_len 12171 +static const char fav_icon[] PROGMEM ={ + 0x1f, 0x8b, 0x08, 0x08, 0x25, 0xd9, 0xfb, 0x5a, 0x04, 0x00, 0x66, 0x61, + 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x00, 0xed, 0x9d, + 0x05, 0x5c, 0xd5, 0xc9, 0x16, 0xc7, 0x2f, 0x69, 0x2b, 0xd6, 0x9a, 0xcf, + 0xce, 0xb5, 0xd7, 0x75, 0xd5, 0x5d, 0x3b, 0xd7, 0xd6, 0xd5, 0xb5, 0xbb, + 0x5b, 0x51, 0x77, 0xed, 0xc5, 0x4e, 0xec, 0x02, 0xc5, 0xa2, 0x43, 0x54, + 0x40, 0x05, 0x25, 0x55, 0x0c, 0x04, 0x04, 0x14, 0x15, 0x95, 0xb0, 0x50, + 0xb1, 0x11, 0x3b, 0xee, 0x79, 0xbf, 0x99, 0xff, 0xb9, 0x41, 0x09, 0xc6, + 0xbe, 0xf8, 0xbc, 0x37, 0xef, 0xf3, 0x7d, 0xf3, 0xdf, 0xeb, 0xbd, 0xf3, + 0x9f, 0x33, 0x73, 0xa6, 0xcf, 0x19, 0x54, 0x2a, 0x03, 0x95, 0x89, 0xca, + 0xcc, 0x4c, 0xc4, 0xe5, 0x54, 0x63, 0x8d, 0x55, 0xaa, 0xde, 0x2a, 0x95, + 0xaa, 0x78, 0x71, 0xe5, 0xbf, 0x57, 0xe4, 0x52, 0xa9, 0x02, 0xf0, 0x59, + 0xb9, 0x72, 0xca, 0x7f, 0x3b, 0xe3, 0x7b, 0xed, 0xf2, 0xab, 0x54, 0x75, + 0xeb, 0xf2, 0x7f, 0x57, 0x56, 0xa9, 0x9e, 0x94, 0x51, 0xa9, 0x5a, 0xb4, + 0x50, 0xfe, 0xbb, 0x5a, 0x2b, 0x95, 0x6a, 0x6b, 0x1b, 0x95, 0xaa, 0x1a, + 0xd2, 0xc0, 0x57, 0xf1, 0x89, 0xf2, 0x79, 0x66, 0x81, 0x32, 0x08, 0xf7, + 0x93, 0x1f, 0x90, 0xd3, 0x83, 0x63, 0xb4, 0xf8, 0xbe, 0x3b, 0x38, 0x46, + 0xce, 0x0f, 0xa2, 0x29, 0xe9, 0xf9, 0x33, 0xca, 0x2a, 0xdc, 0x4f, 0xb9, + 0x47, 0x43, 0xef, 0x0d, 0x25, 0xe3, 0x57, 0x15, 0x49, 0x45, 0xad, 0xc0, + 0x18, 0x60, 0x09, 0x3c, 0xc8, 0xe4, 0x65, 0x18, 0xfe, 0xed, 0x26, 0xbe, + 0xf3, 0x22, 0xc3, 0xdf, 0xc6, 0x3c, 0x89, 0xa0, 0x66, 0xcf, 0x8a, 0x93, + 0x19, 0xa9, 0xf0, 0xbf, 0x42, 0xa0, 0x31, 0x18, 0x09, 0xd6, 0x83, 0x63, + 0xe0, 0x26, 0xa9, 0x5e, 0x7f, 0xa0, 0x92, 0x17, 0x9f, 0x52, 0xd4, 0xfd, + 0xa7, 0xa9, 0x7e, 0xfb, 0x28, 0xe5, 0x2e, 0x8d, 0xc5, 0x6f, 0xdb, 0xe2, + 0x5b, 0x55, 0x81, 0x29, 0x19, 0xe3, 0xff, 0x6b, 0x80, 0x21, 0x60, 0x0b, + 0x38, 0x4b, 0xaa, 0x0f, 0x29, 0xa4, 0xba, 0x4d, 0xa4, 0x0a, 0x26, 0x2a, + 0xe9, 0xfa, 0x94, 0xee, 0x3f, 0xd5, 0xe5, 0xc3, 0xe5, 0xde, 0x40, 0x9a, + 0xab, 0xbc, 0x4d, 0xa6, 0xf1, 0xfd, 0xf3, 0x02, 0xd4, 0xdd, 0xa3, 0x3f, + 0x2d, 0xb3, 0x5d, 0x47, 0xcb, 0x6d, 0xad, 0xa8, 0xa7, 0xa7, 0x03, 0x99, + 0xdd, 0x4c, 0x96, 0xbf, 0x55, 0x39, 0x82, 0x75, 0x44, 0x43, 0xed, 0xee, + 0xc9, 0xdf, 0x3e, 0x49, 0xbe, 0x4b, 0xce, 0xaf, 0x8c, 0x69, 0x27, 0x7e, + 0xb7, 0x12, 0x98, 0xa7, 0x14, 0xa0, 0xb9, 0x6b, 0xa7, 0xd3, 0x86, 0x0d, + 0x1b, 0xb4, 0xac, 0x5e, 0xbd, 0x9a, 0x9c, 0x7d, 0x8f, 0x93, 0xd9, 0x8e, + 0xe7, 0xa4, 0x5a, 0x88, 0xdf, 0x4f, 0x22, 0x32, 0x19, 0xf2, 0x92, 0x92, + 0x1e, 0x3d, 0xa7, 0xf8, 0x24, 0x3b, 0x3a, 0x8f, 0xdf, 0x05, 0x83, 0x23, + 0x42, 0x5a, 0xaf, 0xee, 0xb4, 0x7e, 0xfd, 0x7a, 0x72, 0x72, 0x72, 0xd2, + 0x62, 0x6f, 0x6f, 0x2f, 0xd3, 0xf8, 0x6d, 0x96, 0x07, 0xa9, 0x7a, 0xe1, + 0xf7, 0xed, 0x40, 0x53, 0x22, 0xe7, 0x23, 0x49, 0x94, 0x98, 0xb4, 0x80, + 0x9e, 0xab, 0x55, 0xf4, 0x14, 0x3c, 0x00, 0xbb, 0xed, 0x96, 0x68, 0x7f, + 0xcf, 0x41, 0x3e, 0x6f, 0xdc, 0xb8, 0x91, 0x96, 0xaf, 0xb6, 0x25, 0x55, + 0x39, 0xfc, 0xb6, 0x34, 0x28, 0x4e, 0xb4, 0xd8, 0xf2, 0x3e, 0x25, 0xdd, + 0x58, 0x40, 0x94, 0x08, 0x35, 0xb8, 0x05, 0xe2, 0x54, 0x64, 0xb7, 0x2b, + 0xf3, 0xdf, 0xaf, 0x5a, 0x66, 0x4b, 0x45, 0xf1, 0x35, 0x33, 0x90, 0x17, + 0x2c, 0x5f, 0x8c, 0xdf, 0x5f, 0xb3, 0x23, 0x0a, 0xc2, 0x7f, 0x78, 0x03, + 0x17, 0x15, 0x79, 0xad, 0xea, 0x46, 0x96, 0x96, 0x96, 0x74, 0xe4, 0xc8, + 0x11, 0x6d, 0xfe, 0xbd, 0xbc, 0xbc, 0xe4, 0xef, 0xa7, 0xf7, 0xf0, 0xa0, + 0xf6, 0xf8, 0xda, 0xcf, 0xa0, 0x1e, 0xf0, 0x74, 0x4a, 0xa2, 0xe4, 0xc7, + 0x89, 0xf4, 0x7a, 0x87, 0x11, 0xd1, 0x7a, 0x7c, 0x30, 0x4f, 0x45, 0x29, + 0x23, 0xf3, 0xd3, 0x91, 0xbd, 0x3b, 0x68, 0xcd, 0x9a, 0x35, 0xa9, 0xca, + 0x70, 0x89, 0xf9, 0x6a, 0x5a, 0x5f, 0xe0, 0x39, 0xcd, 0xc0, 0xd7, 0x86, + 0x81, 0xdf, 0x8c, 0x5f, 0xd2, 0x83, 0xfb, 0xc9, 0x32, 0x7f, 0xf7, 0xf6, + 0xf4, 0x27, 0x9a, 0x8c, 0x0f, 0x7b, 0x83, 0x46, 0x48, 0xa3, 0x4c, 0x01, + 0xf2, 0xec, 0x3a, 0x88, 0xec, 0x16, 0xaf, 0x27, 0xbb, 0x25, 0xd6, 0xe4, + 0xd5, 0xdd, 0x95, 0xae, 0x14, 0x48, 0x21, 0x1f, 0xfc, 0xf3, 0x76, 0xb0, + 0x18, 0xec, 0x18, 0x7c, 0x57, 0x2b, 0x5f, 0xca, 0x83, 0x44, 0x7a, 0x36, + 0xf0, 0x3b, 0xf9, 0x5b, 0x2a, 0x09, 0x0c, 0xf2, 0xa2, 0x80, 0x1a, 0x81, + 0x89, 0xc0, 0x16, 0x5c, 0xa2, 0xd7, 0xaa, 0x77, 0x74, 0x19, 0xff, 0x24, + 0xd2, 0xd8, 0x5d, 0xfc, 0x29, 0x3d, 0xbe, 0x97, 0x92, 0x4a, 0x07, 0x9f, + 0x44, 0x87, 0xd3, 0xb3, 0x1f, 0x90, 0x86, 0xa9, 0x21, 0xbe, 0x5f, 0x86, + 0x2b, 0x69, 0x2a, 0xb0, 0x01, 0x67, 0x48, 0xad, 0x7a, 0x42, 0x8f, 0x55, + 0x6a, 0x0a, 0xc1, 0x6f, 0xef, 0x46, 0x3c, 0xc9, 0xb0, 0x0d, 0xa4, 0x24, + 0x26, 0xd2, 0xbd, 0xfe, 0xc3, 0xe9, 0x95, 0x51, 0x1d, 0xfc, 0xa6, 0x1b, + 0x98, 0x01, 0xac, 0x81, 0x3f, 0xbd, 0x32, 0x8e, 0xa1, 0x3b, 0x03, 0xef, + 0xd0, 0xf3, 0xbb, 0x78, 0x6f, 0x16, 0xe1, 0x59, 0x22, 0xea, 0xc5, 0xce, + 0x97, 0x92, 0x16, 0x78, 0x80, 0x00, 0x4a, 0xb2, 0xbf, 0x4c, 0xc9, 0x77, + 0x9f, 0x66, 0xf8, 0x5d, 0xd5, 0x57, 0x86, 0x6a, 0xa0, 0x38, 0xa8, 0x9b, + 0x45, 0x3f, 0xa3, 0x56, 0xab, 0xe5, 0xfb, 0x44, 0x9c, 0xd9, 0xf3, 0xbb, + 0x77, 0xef, 0x28, 0xe6, 0x66, 0x2c, 0x05, 0xc6, 0x86, 0x51, 0x50, 0x6c, + 0x04, 0x5d, 0xbd, 0x19, 0x2f, 0x3e, 0xd3, 0xfe, 0xbb, 0x0c, 0xe9, 0x9f, + 0x35, 0x71, 0x86, 0x7c, 0xf8, 0xf0, 0x81, 0xf6, 0xc7, 0x79, 0x51, 0xd7, + 0xf8, 0xd1, 0x94, 0xef, 0x4e, 0x1b, 0x52, 0x7d, 0xec, 0x43, 0x2a, 0xf5, + 0x64, 0xb0, 0x14, 0x7d, 0xc2, 0x0e, 0xca, 0x7f, 0xdb, 0x9e, 0xba, 0xc7, + 0x07, 0x91, 0x47, 0x5c, 0x0c, 0x7d, 0xfc, 0xf8, 0x31, 0xd3, 0x74, 0x32, + 0x0a, 0x61, 0x89, 0xe7, 0xa8, 0x41, 0x5c, 0x3d, 0xa4, 0x95, 0x1f, 0x2d, + 0xb7, 0x22, 0xf8, 0x05, 0xf4, 0x04, 0x93, 0xc0, 0x32, 0xb0, 0x07, 0xf8, + 0x80, 0x08, 0x7c, 0x27, 0x91, 0x7e, 0x8c, 0xbd, 0x4a, 0xe1, 0x89, 0x77, + 0xf5, 0x93, 0xc8, 0x54, 0x0e, 0xe7, 0xeb, 0xdb, 0xa9, 0xda, 0x73, 0x53, + 0x2a, 0x84, 0x36, 0x6d, 0x20, 0xfa, 0x33, 0x75, 0x49, 0xf0, 0x23, 0xd2, + 0xea, 0x86, 0x78, 0x02, 0xe2, 0x15, 0x88, 0xed, 0x11, 0x07, 0x82, 0x18, + 0x3c, 0x3f, 0x43, 0xff, 0xa8, 0xa6, 0x1c, 0x57, 0x93, 0x69, 0xf7, 0x85, + 0x58, 0x91, 0x46, 0xa6, 0xe5, 0x73, 0x10, 0x69, 0xb7, 0x7d, 0x63, 0x40, + 0x3f, 0x22, 0xed, 0x72, 0x20, 0x37, 0x50, 0xa9, 0x0b, 0x80, 0x1a, 0xa0, + 0x23, 0x18, 0x0f, 0x56, 0x01, 0x57, 0x70, 0x16, 0xdc, 0x41, 0x59, 0xbd, + 0x27, 0xd5, 0x03, 0x35, 0xa9, 0x2e, 0xab, 0xc9, 0x30, 0xf0, 0x35, 0xed, + 0x0e, 0x8d, 0xcd, 0xb0, 0x7c, 0x2e, 0xdd, 0x39, 0x43, 0x23, 0x9f, 0x9b, + 0x50, 0x1f, 0xee, 0x4b, 0xeb, 0x81, 0x12, 0xc0, 0x48, 0xf6, 0xc9, 0xe5, + 0x40, 0x6b, 0x1e, 0x17, 0xd6, 0x00, 0x0f, 0x70, 0x11, 0xe9, 0xa3, 0x5f, + 0x7c, 0x86, 0xb4, 0xaf, 0x92, 0xd2, 0xc7, 0x7a, 0x11, 0xe5, 0xd8, 0x95, + 0x4c, 0x61, 0xd7, 0xb5, 0x65, 0xa5, 0xad, 0xcb, 0xd5, 0xf1, 0x75, 0x68, + 0x36, 0xf2, 0x2b, 0x4a, 0xa0, 0x3f, 0xe2, 0xb6, 0xa0, 0x16, 0x9e, 0xcd, + 0x3e, 0xa2, 0x06, 0xce, 0xd7, 0xa5, 0x31, 0x87, 0x66, 0xd1, 0x10, 0x8b, + 0x89, 0x34, 0xd4, 0x62, 0x1a, 0x4d, 0x3e, 0xea, 0x48, 0xe5, 0x43, 0xd0, + 0xab, 0xbe, 0x44, 0xde, 0x63, 0xd5, 0x4a, 0xda, 0x07, 0xc1, 0x6e, 0x3c, + 0x6f, 0x20, 0xfa, 0x71, 0x4d, 0x9c, 0xa8, 0x73, 0x6d, 0xfa, 0x61, 0xf1, + 0xfb, 0xc8, 0x1a, 0xe9, 0xad, 0x05, 0x0b, 0x81, 0x39, 0x18, 0x04, 0x5a, + 0x3f, 0x37, 0xa0, 0x45, 0xfe, 0x33, 0x29, 0x20, 0x20, 0x80, 0x36, 0x6d, + 0xda, 0x44, 0x53, 0xa7, 0x4e, 0x95, 0xec, 0xda, 0xb5, 0x8b, 0x0e, 0x1f, + 0x3e, 0x4c, 0x5b, 0x2f, 0x5c, 0x25, 0x63, 0x7f, 0x8c, 0x2f, 0xfb, 0x90, + 0xae, 0x35, 0x58, 0x09, 0xe6, 0x01, 0x73, 0x35, 0x79, 0x9c, 0x8c, 0xd3, + 0x96, 0xcf, 0xe1, 0xf8, 0x8e, 0x74, 0x00, 0x79, 0x75, 0x04, 0x3b, 0x78, + 0x64, 0x9c, 0x83, 0x7c, 0x6f, 0x3b, 0x39, 0x97, 0x7a, 0xf7, 0xee, 0x4d, + 0xdb, 0xb6, 0x6d, 0x4b, 0xc7, 0x8a, 0x15, 0x2b, 0x68, 0xcb, 0x96, 0x2d, + 0xb4, 0xf5, 0xc4, 0x55, 0x52, 0xad, 0xfd, 0x48, 0xaa, 0xf9, 0xdc, 0xad, + 0x8c, 0x04, 0x03, 0x88, 0xba, 0x5b, 0xc4, 0xc9, 0xb4, 0xdf, 0xbc, 0x79, + 0x4d, 0xbe, 0x77, 0x73, 0xd3, 0x69, 0xe4, 0x37, 0x50, 0xad, 0x8c, 0x25, + 0x6e, 0x88, 0x57, 0x87, 0x97, 0x23, 0x7f, 0x7f, 0x7f, 0xd1, 0x87, 0xca, + 0xfc, 0xcf, 0x99, 0x33, 0x87, 0xe6, 0xcd, 0x9b, 0x27, 0x99, 0x3b, 0x77, + 0x2e, 0x79, 0x7b, 0x7b, 0xd3, 0xe2, 0xc5, 0x8b, 0xe5, 0x77, 0x2a, 0x4e, + 0x08, 0x25, 0xd5, 0x10, 0xa4, 0xdb, 0x0b, 0x79, 0xef, 0x84, 0xb8, 0x0d, + 0x51, 0xfe, 0x56, 0xb7, 0x65, 0x1b, 0x4c, 0xb8, 0x71, 0x91, 0x6e, 0x21, + 0xbd, 0x04, 0x70, 0x1d, 0x5c, 0x02, 0xe7, 0x81, 0xa3, 0xcf, 0x18, 0xb2, + 0xb1, 0xb1, 0x11, 0xe9, 0x8b, 0xf4, 0xd2, 0xb6, 0x1b, 0xf9, 0xd9, 0xce, + 0x9d, 0x3b, 0x69, 0xf3, 0xe6, 0xcd, 0x34, 0x61, 0x81, 0x37, 0xa9, 0x9a, + 0x20, 0xed, 0x06, 0xa0, 0x2e, 0xa8, 0x09, 0xaa, 0x7d, 0xa0, 0xab, 0xd7, + 0x6e, 0x52, 0x7c, 0xbc, 0x2f, 0xbd, 0x45, 0x7a, 0xaf, 0xc1, 0x2b, 0xf0, + 0x02, 0x3c, 0x07, 0x16, 0x0b, 0x07, 0xd2, 0xb4, 0x69, 0xd3, 0xb4, 0xe9, + 0xa7, 0x09, 0xda, 0xf4, 0x27, 0x4e, 0x44, 0x9d, 0x8f, 0xb0, 0x90, 0xe3, + 0x9a, 0xea, 0x3b, 0x50, 0x04, 0x14, 0x06, 0x05, 0x89, 0x02, 0x8f, 0x5f, + 0xa7, 0xf8, 0x58, 0x5f, 0x4c, 0x14, 0x54, 0xa4, 0x7e, 0x08, 0x92, 0x54, + 0x18, 0x34, 0x10, 0x63, 0xdc, 0x5b, 0x34, 0x3f, 0x55, 0xfa, 0x69, 0xdb, + 0x4c, 0xaa, 0xf4, 0x87, 0x0f, 0xb1, 0x90, 0xe3, 0x5e, 0x6e, 0xf4, 0xe3, + 0x39, 0x11, 0xe7, 0x00, 0xa6, 0x78, 0x0e, 0x0c, 0xbc, 0x4e, 0x09, 0xf1, + 0x17, 0x48, 0x7d, 0x09, 0x1f, 0x5c, 0x00, 0xe1, 0xe0, 0xac, 0x4a, 0x8e, + 0x8b, 0x47, 0x6d, 0x47, 0x6b, 0xca, 0x47, 0x96, 0x79, 0x52, 0x52, 0x12, + 0x3d, 0x7a, 0xf4, 0x48, 0xf2, 0xf0, 0xe1, 0x43, 0x51, 0x1f, 0xda, 0xf2, + 0x99, 0x37, 0xde, 0x9b, 0xea, 0xe2, 0x67, 0xd5, 0x41, 0x25, 0x50, 0x16, + 0x94, 0x56, 0xa1, 0x7c, 0x62, 0x6e, 0xd0, 0xeb, 0xd7, 0xaf, 0xe9, 0xde, + 0xc1, 0x5c, 0xa4, 0x3e, 0x8a, 0x7c, 0x7b, 0x02, 0x17, 0xb0, 0x0b, 0x75, + 0xb0, 0xb0, 0x8c, 0xac, 0xbb, 0x95, 0x2b, 0x57, 0x52, 0x42, 0x42, 0x02, + 0xad, 0x5b, 0xb7, 0x2e, 0x15, 0xd7, 0xae, 0x5d, 0x93, 0xe9, 0x1f, 0x3a, + 0x74, 0x88, 0x86, 0x97, 0x0f, 0xa5, 0xdf, 0x90, 0xdf, 0xf6, 0xa0, 0x39, + 0x68, 0x24, 0xc8, 0x27, 0xeb, 0x57, 0xca, 0x1a, 0xbf, 0xef, 0x57, 0x52, + 0xdb, 0x22, 0x5d, 0x2b, 0xbc, 0x78, 0x0d, 0x62, 0x0b, 0x30, 0x09, 0xbd, + 0x8b, 0xe3, 0x1a, 0x5a, 0xb8, 0x70, 0x21, 0xad, 0x5d, 0xbb, 0x36, 0x43, + 0x1d, 0x1d, 0x34, 0x68, 0x10, 0xd9, 0x98, 0x7b, 0xd3, 0x22, 0xd5, 0x47, + 0x32, 0xc7, 0x4f, 0x47, 0x20, 0xdd, 0xbe, 0x88, 0xbb, 0x81, 0x3f, 0xbb, + 0xc6, 0x69, 0xeb, 0x2a, 0xee, 0xac, 0x0b, 0xa9, 0x2d, 0xf1, 0xe1, 0x42, + 0x30, 0x03, 0x8c, 0x04, 0xdd, 0x55, 0xf4, 0xb2, 0xa1, 0x21, 0xc5, 0x6c, + 0xb6, 0xd4, 0xb6, 0xaf, 0x29, 0x53, 0xa6, 0x08, 0x44, 0xfb, 0x92, 0x73, + 0x07, 0xaf, 0x3f, 0xfd, 0xe9, 0x80, 0x2a, 0x99, 0xf6, 0xe0, 0xeb, 0xe2, + 0xe7, 0xf3, 0xc1, 0x54, 0x30, 0x4a, 0x94, 0xfd, 0xfe, 0x58, 0x6d, 0x5d, + 0xbd, 0x7f, 0xff, 0x9e, 0x12, 0x16, 0xd4, 0x24, 0xf5, 0x44, 0xe4, 0x7b, + 0x30, 0xe8, 0x0c, 0x1a, 0x29, 0x05, 0xa9, 0x36, 0x31, 0xa2, 0xc8, 0xb2, + 0x0d, 0xe8, 0xf0, 0x88, 0x39, 0xb4, 0x70, 0xe0, 0x44, 0x5a, 0x34, 0x70, + 0x3a, 0xf9, 0x8e, 0x77, 0xa1, 0xd0, 0x32, 0x41, 0xf4, 0x08, 0xf9, 0x8e, + 0x44, 0x5a, 0x3e, 0xc0, 0x1e, 0x6c, 0x02, 0x4b, 0xc1, 0xe2, 0x7a, 0xb1, + 0xa2, 0xcf, 0x49, 0xd5, 0xc7, 0xdd, 0x89, 0x0a, 0xa6, 0x94, 0xbe, 0xc6, + 0x44, 0x1d, 0x95, 0xb4, 0xd5, 0xa2, 0xa2, 0xf2, 0x22, 0x56, 0xe5, 0x07, + 0xb5, 0xe4, 0xb8, 0xad, 0x56, 0xc6, 0x6d, 0xc4, 0x01, 0x88, 0x6f, 0xd0, + 0x7b, 0xd5, 0x7b, 0xba, 0x8d, 0xf4, 0xc2, 0x78, 0xfe, 0xe0, 0x84, 0xe7, + 0x8d, 0x26, 0xc9, 0x14, 0x13, 0x72, 0x27, 0xc3, 0xb1, 0xe5, 0x9a, 0xf3, + 0x16, 0x7a, 0xdb, 0xc8, 0x80, 0xa8, 0x0a, 0xbe, 0x5c, 0x18, 0x18, 0x98, + 0xf0, 0xa4, 0xad, 0x11, 0xe8, 0x03, 0xfe, 0x04, 0xdb, 0xc0, 0x11, 0x70, + 0x09, 0xef, 0x79, 0x46, 0x29, 0x48, 0x33, 0x0e, 0x5f, 0x0d, 0x01, 0x87, + 0x0c, 0xde, 0xd0, 0xa9, 0xed, 0xd7, 0xd3, 0x8e, 0x2f, 0xa9, 0xb8, 0xb6, + 0x67, 0x0b, 0xa5, 0x94, 0x32, 0x46, 0xb9, 0xe0, 0x07, 0x2a, 0x33, 0xa4, + 0x51, 0x15, 0xb4, 0xc4, 0xf3, 0x40, 0xc4, 0xb3, 0xc0, 0x16, 0xe0, 0x01, + 0xc2, 0x40, 0x22, 0x7d, 0x80, 0x0c, 0x0f, 0xf1, 0x8e, 0xf3, 0x26, 0xcf, + 0x29, 0x1c, 0x69, 0x67, 0x32, 0x46, 0xa6, 0x2e, 0xab, 0xd3, 0xa7, 0x28, + 0xbe, 0x56, 0x3d, 0xfc, 0xbe, 0x24, 0xa8, 0x0b, 0xda, 0x23, 0xfd, 0xa1, + 0x88, 0xe7, 0x20, 0xde, 0x84, 0x78, 0x1f, 0xe2, 0x53, 0x20, 0x16, 0xcf, + 0xcf, 0x29, 0xa6, 0x4e, 0x1c, 0xdd, 0x3a, 0x7b, 0x27, 0xdd, 0xf8, 0xfe, + 0x89, 0x20, 0xeb, 0x3c, 0xce, 0xc5, 0x83, 0xe2, 0x7e, 0x1d, 0x47, 0x77, + 0x73, 0x77, 0x41, 0x3a, 0xa2, 0x63, 0x9c, 0x0b, 0x36, 0xe2, 0xd9, 0x99, + 0x12, 0x73, 0x1f, 0xa0, 0xb8, 0x8e, 0xa7, 0x28, 0x76, 0x5f, 0x8c, 0xfc, + 0x6e, 0x86, 0x41, 0x97, 0xef, 0x4f, 0xc9, 0x25, 0xdb, 0x60, 0xc2, 0x85, + 0x18, 0x8a, 0xf7, 0x0b, 0x07, 0x11, 0x94, 0x70, 0xf1, 0x3a, 0xfa, 0xdd, + 0x37, 0xe2, 0xdf, 0xb2, 0x44, 0xf5, 0x37, 0x87, 0x6a, 0xbc, 0xd6, 0x6b, + 0xf1, 0x05, 0xeb, 0xbd, 0xec, 0x04, 0x21, 0xc3, 0xab, 0x57, 0xaf, 0x04, + 0x59, 0xd6, 0xc9, 0xb7, 0x08, 0x2f, 0x5f, 0xbe, 0xa4, 0x03, 0x17, 0x8f, + 0xd0, 0xb8, 0xe8, 0x25, 0xf4, 0xd3, 0xa5, 0xb1, 0x54, 0x38, 0x7a, 0x20, + 0x99, 0xc4, 0x8c, 0x00, 0xe6, 0x78, 0x5e, 0x4c, 0x0d, 0x2f, 0xed, 0xa4, + 0x09, 0xd1, 0x47, 0xc8, 0xf3, 0x62, 0xa8, 0xac, 0x97, 0x6f, 0x15, 0x1e, + 0x3e, 0x7e, 0x48, 0xb3, 0xa3, 0xe6, 0x51, 0xe1, 0xeb, 0xd5, 0x94, 0xf9, + 0x10, 0x35, 0x01, 0x5d, 0x78, 0x2d, 0x39, 0x15, 0x2c, 0x06, 0x9b, 0x79, + 0x14, 0xf7, 0xc1, 0x77, 0xce, 0x50, 0xd1, 0x6b, 0x7e, 0x34, 0x2f, 0x32, + 0x84, 0x9e, 0x3c, 0x7d, 0x4a, 0x5f, 0x1a, 0x44, 0x99, 0x3a, 0x44, 0xed, + 0xa5, 0x52, 0x37, 0x8a, 0x20, 0x5d, 0x13, 0x20, 0xe2, 0xca, 0xa0, 0x21, + 0xe8, 0x00, 0x06, 0xe9, 0xbd, 0x7f, 0x2b, 0x70, 0x05, 0x7e, 0xe0, 0x3c, + 0x88, 0x07, 0x4f, 0xe8, 0xbb, 0xb8, 0x58, 0x72, 0x8c, 0xba, 0xf8, 0xd9, + 0xf5, 0x23, 0x74, 0x78, 0x46, 0xc8, 0x30, 0x2a, 0xff, 0x56, 0x45, 0x85, + 0x91, 0x92, 0xb1, 0x5c, 0x83, 0xe7, 0x03, 0x65, 0xc1, 0x0f, 0x3c, 0x93, + 0xeb, 0x0f, 0xa6, 0x80, 0x25, 0xc0, 0x1a, 0xec, 0x07, 0xc7, 0x41, 0x34, + 0xb8, 0x8b, 0x72, 0x78, 0x2d, 0xe7, 0x9f, 0xaa, 0xdb, 0x6f, 0x68, 0xac, + 0x5f, 0x88, 0x1c, 0x53, 0xb2, 0x13, 0xc4, 0xbb, 0xa7, 0x86, 0x76, 0xa1, + 0xc6, 0xbc, 0x62, 0xff, 0x07, 0xc8, 0x0b, 0x94, 0x32, 0x28, 0xc6, 0x9f, + 0xb6, 0x04, 0x7d, 0xc0, 0x64, 0xb0, 0x14, 0xd8, 0x00, 0x4f, 0x70, 0x16, + 0xc4, 0x82, 0xa7, 0xa4, 0x7a, 0x8f, 0xb9, 0xd1, 0x63, 0x34, 0xfb, 0x78, + 0x10, 0xa5, 0xa6, 0x5e, 0x07, 0xb3, 0xce, 0x83, 0x28, 0xa7, 0xe5, 0x21, + 0x43, 0xe9, 0x37, 0xb5, 0x22, 0x61, 0x23, 0x50, 0x1d, 0x14, 0x07, 0xa6, + 0xda, 0x32, 0xa8, 0xc4, 0xf3, 0xfa, 0x5e, 0x3c, 0xaf, 0x5f, 0xae, 0x37, + 0xaf, 0x8f, 0x04, 0x89, 0x90, 0xfd, 0x2d, 0xa9, 0x92, 0xf1, 0xde, 0x9b, + 0xe0, 0x02, 0x77, 0x69, 0x3e, 0x6a, 0x1a, 0xeb, 0x7a, 0xf6, 0x93, 0x75, + 0x71, 0x28, 0x72, 0x27, 0x8d, 0x7d, 0xa7, 0x68, 0x56, 0x4f, 0x2e, 0xe5, + 0x9f, 0xb8, 0xd6, 0x0b, 0x02, 0x03, 0x59, 0x13, 0xa5, 0x00, 0xcf, 0xfb, + 0x69, 0x22, 0x58, 0x01, 0x1c, 0x78, 0xde, 0x7f, 0x15, 0xef, 0x4e, 0x56, + 0xca, 0x3d, 0x11, 0xef, 0x8c, 0xe6, 0xf9, 0xb3, 0x37, 0x70, 0x03, 0x36, + 0x6f, 0xc8, 0x21, 0xe8, 0x62, 0x26, 0x7a, 0xfe, 0x80, 0xe6, 0xde, 0x28, + 0x44, 0xb3, 0xb8, 0x54, 0x87, 0xb3, 0x84, 0x6d, 0xf9, 0x6d, 0xe5, 0x40, + 0x6e, 0x60, 0xf8, 0xc8, 0x8c, 0x4a, 0x38, 0xfc, 0x40, 0xd3, 0x7c, 0x57, + 0x50, 0x9f, 0xbf, 0xc6, 0xd2, 0xf0, 0x15, 0x33, 0x69, 0xbc, 0xc7, 0x76, + 0x2a, 0xe3, 0xb4, 0x9a, 0x8c, 0x1e, 0x46, 0x2b, 0xeb, 0x82, 0x24, 0x31, + 0x0c, 0xf1, 0xbb, 0x0f, 0x03, 0x67, 0xf1, 0x6e, 0xd9, 0x05, 0xd3, 0x77, + 0x8b, 0xe2, 0xe9, 0xc9, 0x93, 0xf4, 0xed, 0x62, 0x5f, 0xd4, 0x1f, 0xb4, + 0x9e, 0xa5, 0xf9, 0x0b, 0x4c, 0x03, 0xa3, 0x80, 0x66, 0xdd, 0x50, 0x17, + 0x75, 0xd2, 0x25, 0xa2, 0x39, 0x5d, 0xbe, 0x75, 0x99, 0xba, 0x77, 0xef, + 0x4e, 0xd1, 0xd1, 0xd1, 0x72, 0xae, 0xb4, 0x6a, 0xd5, 0x2a, 0x3a, 0x75, + 0xea, 0x94, 0xfc, 0xec, 0xea, 0x9d, 0x3b, 0xd4, 0xfa, 0x34, 0xf4, 0xff, + 0xca, 0x47, 0xed, 0xba, 0x41, 0x65, 0xcf, 0x43, 0xa3, 0x25, 0x58, 0x0c, + 0x30, 0xd4, 0xcc, 0xb3, 0x8d, 0x4c, 0xbd, 0xce, 0x4e, 0x49, 0x21, 0xab, + 0xf8, 0x82, 0xb2, 0x16, 0xad, 0xc0, 0x3a, 0xd6, 0xaa, 0xd9, 0x60, 0x3c, + 0xe8, 0x87, 0x77, 0xb7, 0xdb, 0x58, 0x9d, 0x16, 0x2d, 0x5a, 0x44, 0x4b, + 0x97, 0x2e, 0xa5, 0x1a, 0x35, 0x6a, 0xc8, 0xf9, 0x7e, 0xcb, 0x96, 0x2d, + 0xa9, 0x43, 0x87, 0x0e, 0x34, 0x66, 0xcc, 0x18, 0xf9, 0xd9, 0xf2, 0xe5, + 0xcb, 0x21, 0xdb, 0x13, 0x1a, 0xe5, 0x71, 0x86, 0x54, 0x07, 0x90, 0x87, + 0xdd, 0x78, 0xdf, 0x06, 0xb0, 0x94, 0x87, 0xa0, 0x69, 0x60, 0x3c, 0x51, + 0x91, 0xe1, 0xd7, 0x64, 0xbf, 0xa9, 0x09, 0x21, 0xd1, 0x2e, 0xe4, 0x8d, + 0x77, 0x78, 0x70, 0x2b, 0xb6, 0xe5, 0x16, 0xb5, 0x16, 0x2c, 0x04, 0x16, + 0x11, 0x4d, 0xe5, 0x7c, 0x6e, 0xfb, 0xf6, 0xed, 0x14, 0x12, 0x12, 0x92, + 0x29, 0x07, 0x0e, 0x1c, 0xa0, 0x5e, 0xbd, 0x7a, 0xd1, 0xdb, 0xb7, 0x6f, + 0xa9, 0xf5, 0x56, 0x94, 0xc3, 0x4a, 0xbc, 0x6f, 0x1e, 0x30, 0x07, 0x63, + 0xc1, 0x50, 0xd0, 0x5f, 0x99, 0xcf, 0x7b, 0xf8, 0xea, 0xf4, 0x20, 0xe0, + 0xd2, 0x08, 0x3a, 0x83, 0xf7, 0x9c, 0x00, 0xfe, 0xbc, 0xef, 0x74, 0x80, + 0xb5, 0x6a, 0xc3, 0x13, 0x43, 0xba, 0x7e, 0x33, 0x5a, 0xee, 0xbf, 0x9c, + 0x38, 0x71, 0x42, 0xca, 0x37, 0x7d, 0xfa, 0x74, 0x21, 0xb3, 0x3e, 0xb2, + 0x3c, 0xee, 0xdf, 0xbf, 0x2f, 0xe6, 0x96, 0x72, 0xce, 0x76, 0x35, 0xe1, + 0x0e, 0x19, 0x8d, 0x7b, 0xa8, 0x59, 0x97, 0x28, 0xfb, 0x54, 0x5d, 0xc0, + 0xaf, 0xa0, 0x35, 0xd1, 0x84, 0x65, 0xd1, 0xba, 0xf7, 0x47, 0xd7, 0x16, + 0x9a, 0x4b, 0x97, 0x40, 0x14, 0x08, 0x03, 0xa7, 0x59, 0xa3, 0x17, 0xb9, + 0x95, 0x94, 0x75, 0x5b, 0xbb, 0x76, 0x6d, 0xf1, 0x7e, 0x31, 0x07, 0x94, + 0xef, 0xb8, 0x77, 0xef, 0x5e, 0x2a, 0xf6, 0xed, 0xdb, 0x27, 0xe7, 0xa3, + 0x17, 0x2e, 0x5c, 0xa0, 0xea, 0xd5, 0xab, 0xcb, 0xdf, 0x94, 0xee, 0xe8, + 0xa8, 0x5d, 0xb7, 0xa8, 0x9a, 0x81, 0xc6, 0xe0, 0x27, 0xf0, 0x03, 0x51, + 0xc3, 0xdf, 0xa3, 0xb5, 0x6d, 0xfe, 0x74, 0x74, 0x1e, 0x7a, 0x80, 0x77, + 0xdd, 0x57, 0x5a, 0x2f, 0xdd, 0x02, 0x09, 0xe0, 0x9a, 0xa8, 0x0f, 0xef, + 0xb1, 0x14, 0x16, 0x16, 0x46, 0xe6, 0xe6, 0xe6, 0xe2, 0xfd, 0xa2, 0x0e, + 0xe4, 0xdc, 0x39, 0x6d, 0x08, 0x0e, 0x0e, 0x16, 0xba, 0x28, 0xdf, 0x3f, + 0x6a, 0xd4, 0x28, 0xf9, 0x9b, 0x29, 0x7f, 0xa1, 0x24, 0xeb, 0xe2, 0x7d, + 0x35, 0x40, 0x35, 0x50, 0x19, 0x54, 0x04, 0xe5, 0xa1, 0x03, 0x35, 0xa2, + 0xc5, 0xbb, 0xe5, 0xb8, 0x76, 0x3d, 0xd6, 0x90, 0xde, 0x63, 0xdd, 0xf7, + 0x4e, 0x2d, 0x49, 0xb5, 0xee, 0x59, 0xb2, 0xac, 0x9f, 0x5c, 0x8f, 0x75, + 0xec, 0xd8, 0x31, 0xdb, 0xef, 0x87, 0x5e, 0xca, 0xdf, 0x0c, 0x1e, 0xb6, + 0x58, 0x59, 0xf7, 0x14, 0x02, 0x05, 0x81, 0x19, 0x28, 0xa0, 0x60, 0x52, + 0xf0, 0x8a, 0xd0, 0x41, 0xf9, 0xfe, 0xb8, 0x28, 0xec, 0x51, 0x3d, 0xc5, + 0x54, 0xe0, 0x09, 0x78, 0x0c, 0x1e, 0x81, 0x87, 0x20, 0x09, 0xbd, 0xdb, + 0xa2, 0x2f, 0x7f, 0xff, 0x90, 0xc1, 0x4b, 0xf4, 0xd6, 0x45, 0x78, 0x27, + 0x30, 0x06, 0x46, 0xe2, 0x33, 0xe3, 0x2b, 0xe2, 0xdd, 0xb2, 0x0c, 0xa2, + 0x7d, 0x73, 0x93, 0x9c, 0xac, 0x5e, 0x07, 0x31, 0x40, 0x6f, 0xdd, 0xe4, + 0xed, 0x30, 0xe6, 0xb3, 0xcb, 0x7f, 0xe4, 0xc8, 0x91, 0xf2, 0x37, 0xb3, + 0x27, 0x1d, 0xd1, 0xad, 0x9b, 0x40, 0x09, 0xf0, 0x1d, 0x28, 0x02, 0xca, + 0x17, 0x8e, 0xd6, 0xf6, 0xc5, 0xd1, 0x87, 0x31, 0x4f, 0x0f, 0xc5, 0x87, + 0x67, 0xc0, 0x49, 0x10, 0x08, 0x8e, 0x02, 0xac, 0xab, 0xf6, 0xcd, 0x2b, + 0x91, 0x4a, 0xff, 0x0e, 0x1e, 0x3c, 0x48, 0x43, 0x87, 0x0e, 0x15, 0xeb, + 0xb7, 0x54, 0x8c, 0x1b, 0x37, 0x8e, 0xf6, 0xec, 0xd9, 0x93, 0x4a, 0xff, + 0x5a, 0x97, 0x76, 0xc2, 0xba, 0x4a, 0xd9, 0x46, 0xfc, 0x01, 0xd4, 0xe2, + 0xb5, 0x5c, 0x15, 0xd0, 0xf9, 0x27, 0x9d, 0xfe, 0x47, 0xfb, 0x0c, 0x23, + 0x3a, 0x86, 0x0f, 0x0f, 0x83, 0x83, 0xc0, 0x05, 0xd8, 0x02, 0x2b, 0x8c, + 0x64, 0x4b, 0x0d, 0xe8, 0x46, 0x4c, 0xa4, 0x6c, 0x7f, 0x9e, 0x9e, 0x9e, + 0x32, 0xcf, 0xe7, 0xce, 0x9d, 0x13, 0x6b, 0xa3, 0x54, 0x9c, 0x3e, 0x7d, + 0x5a, 0xec, 0x5d, 0xc8, 0xf7, 0xcf, 0x9f, 0x3f, 0x9f, 0x62, 0x2f, 0xdf, + 0xa2, 0xc1, 0x86, 0x8f, 0xb4, 0xeb, 0xae, 0xf6, 0xa0, 0x25, 0x68, 0x02, + 0x1a, 0x02, 0x8b, 0x71, 0xba, 0xf7, 0x5f, 0x3c, 0xed, 0xa4, 0xbc, 0xd3, + 0x0e, 0xec, 0x04, 0x5b, 0x80, 0x66, 0x5d, 0x36, 0x1d, 0xa3, 0xda, 0x1f, + 0x8d, 0x65, 0x1b, 0x6b, 0xd7, 0xae, 0x1d, 0x1d, 0x3d, 0x7a, 0x54, 0xbc, + 0x3f, 0x53, 0x1c, 0x1d, 0x1d, 0x69, 0xf6, 0xec, 0xd9, 0xb4, 0xb6, 0x79, + 0x84, 0x6e, 0x5d, 0x06, 0x06, 0x80, 0x5e, 0xa0, 0x8b, 0xc8, 0x8b, 0x58, + 0x5b, 0xed, 0xbf, 0xa0, 0x7d, 0xff, 0xf3, 0xe7, 0xcf, 0x29, 0x61, 0x0d, + 0x94, 0x72, 0x13, 0xfe, 0x71, 0x35, 0x58, 0x04, 0x66, 0x81, 0x09, 0x60, + 0x90, 0xb2, 0x6e, 0x0b, 0x99, 0xd6, 0x9f, 0xee, 0xa0, 0x7f, 0x5f, 0xb6, + 0x6c, 0x59, 0x66, 0xfd, 0xaf, 0xe8, 0x9b, 0xe5, 0xba, 0x74, 0x6a, 0x65, + 0x4b, 0x88, 0xa2, 0x96, 0xc9, 0x2d, 0x01, 0xb3, 0xc1, 0x64, 0x30, 0x1a, + 0x0c, 0x06, 0x7d, 0x0a, 0x5f, 0x93, 0xba, 0xa7, 0x1f, 0xa2, 0x1c, 0xcd, + 0x95, 0x8d, 0xe0, 0x39, 0xba, 0x4c, 0xcb, 0xc2, 0xeb, 0xa0, 0x54, 0xa0, + 0xba, 0x22, 0xca, 0xa1, 0x45, 0x63, 0xba, 0x11, 0x19, 0x95, 0xe9, 0xf8, + 0x73, 0x33, 0xfa, 0x26, 0x1d, 0x6f, 0x1a, 0x01, 0x55, 0x52, 0x2b, 0xeb, + 0x3a, 0x51, 0x85, 0x2c, 0xd2, 0x02, 0xf0, 0x27, 0xe7, 0xc3, 0x66, 0x56, + 0x44, 0xfa, 0xf1, 0x37, 0xe9, 0x1e, 0xdd, 0x9a, 0x6a, 0xa6, 0xc8, 0x3c, + 0x0c, 0xfc, 0x2e, 0x0a, 0x4a, 0xbe, 0x3b, 0xd5, 0xba, 0xef, 0xa9, 0x41, + 0x69, 0x72, 0x2d, 0xd6, 0x88, 0x7c, 0x27, 0x2e, 0xa7, 0x85, 0x3d, 0xc7, + 0xd2, 0xea, 0x41, 0xb3, 0xc8, 0x73, 0xa4, 0x0d, 0xb9, 0x97, 0xda, 0x42, + 0x4f, 0x0c, 0x6e, 0xa5, 0x5a, 0xf7, 0xf9, 0xb0, 0x2a, 0xd9, 0x80, 0xf5, + 0x60, 0x19, 0x98, 0x59, 0x24, 0x81, 0x1e, 0x3d, 0x7c, 0x4c, 0x19, 0x85, + 0x88, 0xfd, 0x56, 0xf4, 0x7e, 0xa0, 0xd8, 0x4c, 0x07, 0xed, 0xc4, 0xbb, + 0x59, 0x61, 0x8b, 0xcb, 0xc6, 0xcb, 0x1d, 0x48, 0x55, 0x20, 0xd7, 0x85, + 0x60, 0x16, 0xd8, 0x02, 0x3c, 0x40, 0x18, 0xb8, 0xab, 0xac, 0x0b, 0xb9, + 0x19, 0x9f, 0xe1, 0x3c, 0xb8, 0x82, 0x5d, 0x60, 0x83, 0xea, 0x2d, 0x1d, + 0xdb, 0x13, 0xf9, 0xc9, 0xf9, 0x57, 0xc8, 0x3c, 0x0c, 0x50, 0x6d, 0xf8, + 0xdd, 0xdf, 0x73, 0xc3, 0xcd, 0x23, 0xde, 0x9d, 0x03, 0x94, 0x02, 0xf5, + 0xc0, 0xaf, 0xca, 0x60, 0xa6, 0xac, 0x1b, 0x81, 0x7b, 0xaa, 0x75, 0xe3, + 0x6b, 0x95, 0x5a, 0x1e, 0x61, 0x44, 0x83, 0x53, 0x9c, 0x87, 0x7d, 0xf8, + 0xcc, 0x76, 0xe8, 0x99, 0x2c, 0xe7, 0xc2, 0xa2, 0x4f, 0x0c, 0x1f, 0x85, + 0xf4, 0x6b, 0xe2, 0x47, 0x65, 0xf8, 0x70, 0xc3, 0xd0, 0x90, 0x3b, 0xd0, + 0x4a, 0xbc, 0xe6, 0xee, 0x0a, 0xb4, 0xeb, 0x4a, 0xe0, 0x02, 0x02, 0x79, + 0xd2, 0x93, 0x44, 0x1f, 0x71, 0x36, 0xf0, 0x0c, 0x3f, 0xbb, 0x01, 0xa2, + 0x40, 0x30, 0xde, 0xed, 0xdc, 0xf5, 0x9c, 0x9c, 0xdb, 0x66, 0x27, 0x88, + 0x3c, 0x84, 0x8c, 0xeb, 0x4f, 0xef, 0x8b, 0x70, 0xc7, 0xa9, 0xca, 0x05, + 0x4a, 0x82, 0x9a, 0xa0, 0x39, 0xf8, 0x0d, 0x8c, 0xe1, 0xc1, 0x7d, 0x03, + 0x1f, 0x42, 0x1d, 0x03, 0xe7, 0x79, 0xd2, 0x99, 0x42, 0x6f, 0xf1, 0x4e, + 0xa5, 0x1e, 0xde, 0xd2, 0xe1, 0xa1, 0x67, 0xb2, 0xfd, 0x6e, 0xfd, 0xba, + 0x88, 0xd8, 0x6e, 0x45, 0xb7, 0xcc, 0x0a, 0xb3, 0xec, 0xe5, 0xc1, 0x0f, + 0x3c, 0x98, 0xf6, 0x06, 0xe3, 0xc0, 0x7c, 0xb0, 0x1e, 0xd8, 0xf1, 0xde, + 0x43, 0x08, 0xb8, 0x06, 0x1e, 0x92, 0x1a, 0x65, 0x70, 0xa5, 0x50, 0x02, + 0x85, 0xee, 0x8c, 0xcc, 0xb2, 0xcc, 0x3f, 0x15, 0x1e, 0xa2, 0xdf, 0x89, + 0x34, 0x9f, 0x4b, 0xf1, 0x05, 0xea, 0x8a, 0xb2, 0xe7, 0xba, 0xef, 0x07, + 0x26, 0xf0, 0xfb, 0xd7, 0x81, 0xbd, 0x3c, 0xd9, 0x0b, 0xc6, 0x7b, 0xa3, + 0x29, 0xb6, 0xe0, 0x59, 0x8a, 0xf8, 0x23, 0x8c, 0x1e, 0x3d, 0x78, 0x44, + 0xdf, 0x2a, 0x88, 0x3e, 0xea, 0x82, 0x93, 0x27, 0x45, 0x0f, 0x5b, 0x42, + 0xd1, 0xb5, 0xc6, 0xd3, 0xc5, 0xdc, 0xc3, 0x28, 0xd6, 0x70, 0x32, 0x98, + 0x47, 0x17, 0xf3, 0xac, 0xa4, 0x8b, 0xb5, 0xf7, 0xd2, 0xc5, 0x11, 0x3e, + 0x74, 0xc1, 0x35, 0x14, 0xf3, 0xc9, 0xac, 0xcf, 0x64, 0xbe, 0x36, 0x7c, + 0xab, 0xf5, 0xb7, 0xea, 0xdf, 0x1c, 0xaa, 0xf1, 0x59, 0xd1, 0xd0, 0x6c, + 0xec, 0x53, 0xa4, 0xd9, 0x07, 0xfa, 0xac, 0x73, 0xa0, 0x7f, 0xf7, 0xf3, + 0xb7, 0x0a, 0x48, 0x4b, 0xee, 0x15, 0x9f, 0x3c, 0x7b, 0x8a, 0xf6, 0x06, + 0xee, 0xa3, 0xd5, 0xfe, 0x7b, 0x68, 0xc6, 0xe1, 0x8d, 0xf4, 0xc7, 0x91, + 0xad, 0x64, 0x19, 0xe0, 0x44, 0xb6, 0x81, 0x5e, 0x74, 0x2a, 0xe4, 0x2c, + 0x3d, 0x7e, 0xfc, 0xf8, 0x9b, 0xbf, 0xf7, 0x4b, 0x11, 0xf3, 0x92, 0xe0, + 0xd0, 0x53, 0x34, 0x3d, 0x60, 0x11, 0xd5, 0x09, 0xea, 0x41, 0xa6, 0x17, + 0x5a, 0x90, 0xe1, 0xeb, 0x1e, 0x58, 0xab, 0x0e, 0x02, 0x63, 0xc1, 0x0c, + 0x60, 0xc1, 0x67, 0x4c, 0x5b, 0xc9, 0xf0, 0xa5, 0x0d, 0xe5, 0x88, 0x5a, + 0x4f, 0xf5, 0x02, 0xad, 0x68, 0x66, 0x80, 0x3b, 0x9d, 0x0d, 0x0f, 0xcb, + 0xf2, 0x1d, 0x20, 0x5b, 0x7b, 0x76, 0x9f, 0xa3, 0x3f, 0x2f, 0x5e, 0xbc, + 0xa0, 0xad, 0x7e, 0x56, 0x54, 0xdd, 0xbf, 0x11, 0x19, 0x26, 0x57, 0x42, + 0xde, 0x6a, 0x83, 0x9f, 0x95, 0x15, 0xa9, 0xba, 0x3b, 0x18, 0x88, 0x67, + 0x91, 0xff, 0xe9, 0x60, 0x01, 0x9e, 0x57, 0x23, 0xde, 0x06, 0xec, 0x94, + 0xfd, 0x10, 0xf5, 0x31, 0x10, 0x4c, 0x86, 0x4f, 0x4e, 0x50, 0x2d, 0x3f, + 0x67, 0xda, 0xe1, 0x7f, 0x4c, 0xec, 0x4d, 0x65, 0x5b, 0x67, 0xbe, 0x54, + 0x7f, 0x44, 0x79, 0xdb, 0x1f, 0xb7, 0xa3, 0x72, 0x27, 0xca, 0x61, 0x3d, + 0x9e, 0x07, 0x79, 0x29, 0xca, 0x2b, 0xf8, 0x1a, 0xbc, 0xa3, 0xd0, 0x0a, + 0x74, 0x05, 0x03, 0xf8, 0xec, 0x6d, 0x3a, 0x10, 0xf9, 0xb7, 0xe4, 0x15, + 0xb0, 0x03, 0x9f, 0xc5, 0xf9, 0xf3, 0x9e, 0xca, 0x05, 0x65, 0x4f, 0xe9, + 0x7d, 0x22, 0x55, 0x0a, 0x3a, 0x4a, 0xae, 0xc1, 0x27, 0x3f, 0x3b, 0x4f, + 0xea, 0x6c, 0xd4, 0x91, 0xe0, 0xf6, 0x9d, 0x5b, 0xf4, 0xdb, 0xe1, 0x0e, + 0x94, 0xff, 0x85, 0x01, 0x19, 0xc9, 0x73, 0x48, 0x13, 0x60, 0x06, 0x4a, + 0x83, 0xaa, 0xa0, 0x3e, 0x68, 0x0e, 0x3a, 0x83, 0x7e, 0x60, 0xb4, 0xae, + 0xfc, 0xd5, 0x6b, 0xc0, 0x76, 0xe0, 0x04, 0x0e, 0x81, 0x20, 0x10, 0x06, + 0xae, 0x80, 0x5b, 0xe0, 0xb1, 0xdc, 0x97, 0x32, 0x7c, 0x9a, 0x0c, 0x7b, + 0x8e, 0x43, 0x74, 0xf7, 0xde, 0xbd, 0x2c, 0xf3, 0xf3, 0x39, 0xfa, 0x13, + 0x74, 0xde, 0x9f, 0xea, 0x87, 0x16, 0x97, 0x7b, 0x56, 0x85, 0x91, 0xf7, + 0x5c, 0x88, 0x0d, 0xd4, 0x06, 0x78, 0xa7, 0xa8, 0x83, 0x62, 0x88, 0x2b, + 0x82, 0xba, 0xca, 0x1e, 0xa2, 0xba, 0x03, 0xe8, 0x83, 0xe7, 0x51, 0x9c, + 0xff, 0x85, 0xca, 0x8a, 0x5f, 0x6d, 0x03, 0x5c, 0xf0, 0xec, 0x2d, 0x74, + 0x07, 0x44, 0x2a, 0x7b, 0x5a, 0xea, 0x7b, 0x20, 0x05, 0x7c, 0x20, 0xd5, + 0x2b, 0x35, 0xf6, 0xb6, 0xd4, 0x54, 0xfa, 0xc8, 0x19, 0x0a, 0x8e, 0xbc, + 0xf0, 0xd5, 0xfa, 0x23, 0xfe, 0x7d, 0xdf, 0x49, 0x07, 0x9c, 0x5d, 0xe7, + 0xa0, 0x5a, 0x7c, 0x72, 0x5d, 0x12, 0x98, 0x29, 0xbb, 0x6e, 0xbc, 0xfb, + 0x55, 0x08, 0x94, 0x61, 0x1d, 0x6a, 0x0c, 0xda, 0x83, 0xdf, 0xc1, 0x48, + 0xde, 0xad, 0x59, 0xc8, 0xb6, 0x39, 0xbb, 0xc0, 0x3e, 0xb6, 0xd1, 0x39, + 0xcb, 0xab, 0xfa, 0x9b, 0xe0, 0xb1, 0xb2, 0x2f, 0xf6, 0x0e, 0x79, 0x7f, + 0x26, 0xa6, 0x8a, 0x20, 0x0e, 0x67, 0x67, 0x3e, 0x57, 0xe9, 0xc0, 0xc9, + 0xac, 0xe7, 0x65, 0x9f, 0xa8, 0x1b, 0xfc, 0xde, 0x91, 0x5a, 0xdd, 0x31, + 0xa5, 0xa6, 0x28, 0xf3, 0x1f, 0x41, 0x0d, 0x50, 0x1e, 0x14, 0x03, 0x79, + 0xd4, 0x9a, 0x3a, 0xc8, 0x0b, 0x4a, 0xb0, 0x0e, 0x35, 0x00, 0x6d, 0x40, + 0x4f, 0x30, 0x1c, 0x4c, 0x03, 0x8b, 0xc0, 0x06, 0xb0, 0x17, 0x1c, 0x04, + 0x01, 0x20, 0x1c, 0x5c, 0xe3, 0xb2, 0x7f, 0x01, 0x5b, 0x81, 0x8f, 0x98, + 0x5a, 0x21, 0xff, 0x49, 0x20, 0x01, 0x5c, 0x02, 0xe1, 0x38, 0xfb, 0x3b, + 0x78, 0x83, 0x0e, 0x9c, 0x38, 0xf3, 0x45, 0xfa, 0x73, 0x22, 0xdc, 0x0f, + 0xf6, 0x06, 0x39, 0xb1, 0xa3, 0xac, 0x9c, 0x5d, 0x37, 0x45, 0x5c, 0x1f, + 0x54, 0xc7, 0x73, 0x59, 0xd6, 0xa3, 0x1c, 0x40, 0xd6, 0x84, 0xba, 0x30, + 0x28, 0x8f, 0xe7, 0xba, 0x88, 0x5b, 0x28, 0x7d, 0x10, 0x0d, 0x43, 0x6c, + 0xae, 0xe4, 0x9f, 0x36, 0x29, 0x7d, 0x8f, 0xda, 0x0b, 0xcf, 0x27, 0x11, + 0x5f, 0x00, 0x37, 0xf0, 0xfc, 0x04, 0xf1, 0x7b, 0x45, 0x6f, 0x1e, 0x8a, + 0x23, 0x28, 0xc4, 0x97, 0x45, 0xde, 0xc5, 0xb4, 0x19, 0xb1, 0x9f, 0x9a, + 0x72, 0xef, 0xba, 0x4a, 0xc1, 0xe1, 0x17, 0x3e, 0x4b, 0x7f, 0x6e, 0xdc, + 0x4c, 0xa0, 0x21, 0xe1, 0xc5, 0x68, 0x30, 0xde, 0xd0, 0x9b, 0x7b, 0x94, + 0xb6, 0x42, 0xbb, 0x79, 0x97, 0xb8, 0x2a, 0xef, 0x56, 0xe6, 0x07, 0x86, + 0x64, 0x80, 0xff, 0xcf, 0xcb, 0x9f, 0xa4, 0xdd, 0x47, 0x37, 0xe7, 0x7d, + 0xec, 0x2d, 0xbc, 0x8f, 0xee, 0xcd, 0xba, 0x13, 0x03, 0x44, 0xd9, 0xbf, + 0x54, 0xf4, 0xe6, 0x09, 0x29, 0x36, 0x5b, 0x31, 0xe0, 0x3c, 0x4f, 0xf9, + 0xfd, 0xc0, 0x21, 0xb0, 0x0f, 0x4b, 0x05, 0xcb, 0x33, 0x74, 0xf7, 0xee, + 0xbd, 0x6c, 0xe9, 0x8f, 0xe8, 0x23, 0x67, 0x1d, 0x6e, 0x4d, 0x93, 0x51, + 0xb6, 0x63, 0xc0, 0x50, 0xd0, 0x17, 0x74, 0x65, 0x1b, 0x82, 0x5f, 0x40, + 0x5d, 0x50, 0x89, 0xf5, 0x28, 0x97, 0xb6, 0x2f, 0x2a, 0x0a, 0xaa, 0x80, + 0x46, 0xa0, 0x23, 0x8f, 0x61, 0x53, 0xc1, 0x12, 0xee, 0xfb, 0x5d, 0x81, + 0x1f, 0x38, 0x0f, 0x12, 0xc0, 0x53, 0xe8, 0x0d, 0xda, 0xec, 0x73, 0xb1, + 0x27, 0x0b, 0xae, 0x81, 0xf3, 0x20, 0x18, 0xf8, 0x02, 0x2f, 0xe0, 0x0a, + 0xec, 0x80, 0x8d, 0x9a, 0xba, 0xad, 0x3e, 0x94, 0x2d, 0xfd, 0x39, 0x18, + 0xb8, 0x9b, 0xe6, 0xbc, 0x32, 0xa0, 0x99, 0x6a, 0xe5, 0x14, 0x60, 0x1c, + 0x18, 0x8e, 0xe7, 0x7e, 0x88, 0xbb, 0xb1, 0x2e, 0x89, 0x91, 0xaa, 0xb6, + 0x6c, 0x0b, 0xbc, 0x8f, 0x2f, 0x65, 0xc8, 0x87, 0xb2, 0x2c, 0x43, 0xb9, + 0x4e, 0xd5, 0xa1, 0xf6, 0x41, 0xe3, 0xe8, 0x1f, 0x63, 0x1b, 0xd1, 0x18, + 0x1b, 0x0b, 0x9a, 0xe1, 0xb2, 0x9e, 0x0a, 0x0f, 0x6a, 0x41, 0x1d, 0x83, + 0x76, 0x50, 0xde, 0x60, 0xf4, 0xa1, 0x6f, 0xa3, 0x58, 0xef, 0x5f, 0x2b, + 0x7a, 0x73, 0x1f, 0x5c, 0x07, 0x11, 0xa4, 0xe4, 0xfd, 0x98, 0x5a, 0x59, + 0xf6, 0x39, 0x23, 0xde, 0x0b, 0xac, 0xc5, 0x52, 0x0c, 0xb6, 0x20, 0xcb, + 0x93, 0xc9, 0xcd, 0xe7, 0x64, 0xda, 0x7c, 0xa7, 0xdb, 0x6f, 0x9d, 0x13, + 0xfc, 0x0f, 0x5a, 0xce, 0xbd, 0xc6, 0x5c, 0x30, 0x83, 0x77, 0xb3, 0x47, + 0xf2, 0xc9, 0x42, 0x77, 0x45, 0x97, 0x52, 0x9f, 0x03, 0xe0, 0x3c, 0xe2, + 0x7b, 0xbf, 0x5a, 0x34, 0x72, 0xd1, 0x68, 0xea, 0xdc, 0xb9, 0xb3, 0x4c, + 0xab, 0x45, 0x8b, 0x16, 0xe4, 0xe3, 0xe3, 0x43, 0x91, 0x91, 0x91, 0x54, + 0xad, 0x5a, 0x35, 0xf9, 0xd9, 0x88, 0x11, 0x23, 0xa8, 0x8f, 0xf9, 0x64, + 0xaa, 0xe3, 0xeb, 0x85, 0xf6, 0xfa, 0x8a, 0x54, 0x8f, 0x94, 0xbe, 0x46, + 0x15, 0xc9, 0x7b, 0xd2, 0x47, 0xc1, 0x01, 0x5e, 0x36, 0xed, 0x02, 0x5b, + 0x79, 0x19, 0xb1, 0x52, 0xd9, 0x23, 0xae, 0x64, 0x1e, 0x28, 0xc6, 0xe9, + 0x4c, 0xf5, 0xc7, 0xcd, 0x6f, 0x3d, 0x6d, 0xfd, 0x88, 0xbd, 0x51, 0x94, + 0xa7, 0x25, 0x58, 0x06, 0x2c, 0x80, 0xa8, 0x8b, 0x29, 0x60, 0x34, 0x18, + 0x08, 0x7a, 0xb0, 0x2e, 0x35, 0x04, 0xd5, 0xe2, 0x4c, 0x68, 0xcd, 0xd1, + 0x95, 0xf2, 0x0c, 0xc2, 0xdd, 0xdd, 0x5d, 0xec, 0xa7, 0x89, 0xb4, 0xd2, + 0xe6, 0x5f, 0x7e, 0x36, 0x7c, 0xf8, 0x70, 0xda, 0xba, 0x75, 0xab, 0x3c, + 0x6b, 0x5e, 0x7f, 0xd4, 0x97, 0x72, 0x1e, 0xbf, 0x8a, 0x73, 0x04, 0xd6, + 0x19, 0x1f, 0xe0, 0xce, 0xfa, 0xb2, 0x1d, 0x6c, 0x02, 0xab, 0xc1, 0x12, + 0x60, 0x01, 0x66, 0x83, 0xe9, 0xef, 0x69, 0xbb, 0x8b, 0x7f, 0x46, 0xfa, + 0x23, 0xd3, 0x5c, 0x15, 0x58, 0x89, 0xf6, 0xaa, 0x95, 0x53, 0x93, 0x6d, + 0x88, 0x37, 0x28, 0x33, 0x17, 0x5a, 0x82, 0xe7, 0x79, 0x3c, 0x1b, 0x18, + 0xa7, 0xe6, 0x73, 0x08, 0xc4, 0x4d, 0xc2, 0x4d, 0x68, 0x95, 0xd5, 0x32, + 0x3a, 0x7b, 0xf6, 0xac, 0x40, 0xee, 0x45, 0x37, 0x6d, 0xda, 0x54, 0x3e, + 0x37, 0x68, 0xd0, 0x40, 0xd8, 0xf2, 0x49, 0x9b, 0xc4, 0x0a, 0x15, 0x2a, + 0xc8, 0xcf, 0xba, 0x75, 0xeb, 0x46, 0x33, 0x67, 0xce, 0xa4, 0xd0, 0xd0, + 0x50, 0xf9, 0xce, 0x93, 0x11, 0x51, 0x54, 0xd0, 0x11, 0xfa, 0xe4, 0xad, + 0x56, 0xce, 0x21, 0xf6, 0x20, 0xde, 0x0a, 0xd6, 0xe2, 0x79, 0x99, 0x26, + 0xdf, 0x78, 0x9e, 0x8e, 0x78, 0xb2, 0x5a, 0x2e, 0x2d, 0x6b, 0x8e, 0xf6, + 0xcb, 0x50, 0x7f, 0x4e, 0x9d, 0xf5, 0x27, 0xd7, 0x17, 0x86, 0xe4, 0x86, + 0xbc, 0x39, 0x01, 0x3b, 0xb0, 0x53, 0xc8, 0x41, 0x8a, 0x1c, 0x2b, 0x59, + 0xa7, 0x66, 0xf1, 0xe9, 0x4c, 0xdf, 0x78, 0x63, 0xda, 0x02, 0xbb, 0x4d, + 0x53, 0x53, 0x53, 0xaa, 0x53, 0xa7, 0xce, 0x67, 0x51, 0xb4, 0x68, 0x51, + 0x69, 0xbb, 0x28, 0xc2, 0x49, 0xf4, 0x8d, 0x39, 0x37, 0x5e, 0xe5, 0x73, + 0x0c, 0xd6, 0x95, 0x85, 0xc4, 0xf9, 0x06, 0x93, 0x78, 0x8f, 0x7d, 0x04, + 0x49, 0x9b, 0x19, 0xc3, 0x3e, 0x4f, 0xe8, 0x4c, 0x48, 0x78, 0x3a, 0xfd, + 0x71, 0x0d, 0x18, 0x4f, 0xc7, 0x84, 0x3d, 0x0e, 0xf0, 0x02, 0xfb, 0x81, + 0x0b, 0xb0, 0x07, 0xbb, 0xd4, 0x4a, 0x7d, 0xac, 0x07, 0xcb, 0x45, 0x5d, + 0xbc, 0x43, 0x1d, 0xf9, 0x2c, 0xa5, 0x8b, 0x17, 0x2f, 0x52, 0xa5, 0x4a, + 0x95, 0xb2, 0x9c, 0xa3, 0xa4, 0x25, 0x36, 0x36, 0x96, 0x8a, 0x15, 0x2b, + 0x26, 0xf6, 0x4b, 0xe5, 0x7f, 0xaf, 0x77, 0xf1, 0x25, 0xd5, 0x8a, 0xd7, + 0xd0, 0x71, 0x94, 0xf1, 0x1c, 0xb5, 0x52, 0xde, 0x13, 0xc1, 0x68, 0x30, + 0x0c, 0x0c, 0x04, 0x7d, 0x41, 0x2f, 0xd0, 0x43, 0x4d, 0x7f, 0x5a, 0xfa, + 0xa7, 0xd3, 0x9f, 0x3d, 0x41, 0x95, 0xe9, 0x94, 0x38, 0xe9, 0x43, 0xfe, + 0x02, 0x10, 0xfb, 0x0a, 0x59, 0xf8, 0xf4, 0x6d, 0x9f, 0x5a, 0xe9, 0xbd, + 0x77, 0x03, 0x2b, 0x3c, 0xcf, 0x0f, 0xa8, 0x26, 0xce, 0x22, 0xd2, 0xe5, + 0xff, 0xf6, 0xed, 0xdb, 0x72, 0x1f, 0x7f, 0xc7, 0x8e, 0x1d, 0x19, 0x21, + 0xf7, 0xf7, 0xaf, 0x5f, 0x57, 0x6c, 0x0a, 0x02, 0x03, 0x03, 0xa9, 0x48, + 0x91, 0x22, 0xb0, 0x07, 0x8a, 0x97, 0xba, 0x5b, 0x67, 0x3a, 0xe6, 0x15, + 0xd3, 0x90, 0xbf, 0xf1, 0x6a, 0x65, 0x0b, 0x66, 0xb0, 0x26, 0xcf, 0x78, + 0xee, 0x8e, 0xb8, 0x33, 0xe8, 0x80, 0xe7, 0x76, 0x6a, 0xaa, 0xd7, 0x27, + 0x50, 0x3f, 0xff, 0xf2, 0xbd, 0xde, 0xd7, 0x8c, 0x29, 0x92, 0x4f, 0x49, + 0x43, 0x79, 0x94, 0x09, 0x06, 0x41, 0x7c, 0x7a, 0x7a, 0x84, 0x67, 0xbe, + 0xce, 0x1f, 0xd0, 0x96, 0xe7, 0xf5, 0x23, 0x5b, 0x5b, 0x5b, 0x61, 0x73, + 0x25, 0xf3, 0x8f, 0x20, 0xe5, 0x29, 0x53, 0xa6, 0x0c, 0xf5, 0xec, 0xd9, + 0x93, 0x06, 0x0e, 0x1c, 0x98, 0x21, 0x7d, 0xfb, 0xf6, 0x15, 0xba, 0x23, + 0xcf, 0x4a, 0x44, 0x68, 0xd2, 0xa4, 0x89, 0xd8, 0x13, 0x95, 0x69, 0x0d, + 0x19, 0x3f, 0x07, 0x79, 0x7e, 0xab, 0x6c, 0x61, 0xf4, 0x62, 0xb3, 0xce, + 0x8e, 0x6c, 0x1e, 0xda, 0x1a, 0xb4, 0x00, 0x4d, 0xc1, 0xcf, 0xd8, 0x23, + 0xff, 0x31, 0x52, 0xac, 0xe3, 0xb4, 0x65, 0x7f, 0xfc, 0xc4, 0x51, 0x8a, + 0x7d, 0x6f, 0x40, 0xb1, 0x28, 0xdb, 0x6b, 0x20, 0x86, 0xed, 0xae, 0x2e, + 0x80, 0x08, 0x10, 0x06, 0xce, 0x80, 0x13, 0xc0, 0x3a, 0x34, 0x07, 0xf5, + 0xe9, 0xd3, 0x47, 0xd8, 0x91, 0x89, 0xbe, 0x46, 0x53, 0xfe, 0xf2, 0x8c, + 0xa6, 0x40, 0x81, 0x02, 0x59, 0xea, 0x4e, 0xd5, 0xaa, 0x55, 0x45, 0x9f, + 0x24, 0x9e, 0x65, 0xfe, 0x5b, 0xb5, 0x6a, 0x25, 0xd2, 0x92, 0xb2, 0xe5, + 0x69, 0x83, 0x12, 0x6b, 0xaf, 0x46, 0x7e, 0x41, 0x73, 0xf0, 0x0b, 0x68, + 0xc4, 0x76, 0x5c, 0xf5, 0xd9, 0x96, 0xab, 0x0e, 0xc6, 0x82, 0x5a, 0x2f, + 0xe9, 0xd4, 0xe9, 0x10, 0x6d, 0xf9, 0xfb, 0x05, 0x6e, 0xa5, 0x24, 0x65, + 0x44, 0xa7, 0xbb, 0xc8, 0xe3, 0x1d, 0xc4, 0xb7, 0x10, 0xdf, 0x50, 0x56, + 0x17, 0x52, 0xae, 0x18, 0x9e, 0x31, 0xba, 0x04, 0x35, 0xd7, 0xc8, 0xad, + 0xaf, 0x3f, 0x72, 0x1f, 0xda, 0xcc, 0xcc, 0x2c, 0xcb, 0x75, 0x53, 0xda, + 0xfc, 0xfb, 0xf9, 0xe9, 0xfa, 0x93, 0x8e, 0xa3, 0x82, 0x44, 0x5e, 0x95, + 0xed, 0xac, 0x3a, 0x6c, 0x77, 0xf6, 0x3d, 0x9e, 0xab, 0x21, 0xae, 0xa2, + 0xe6, 0x73, 0x1a, 0xc4, 0x15, 0xb0, 0x67, 0xe8, 0x18, 0xa0, 0xfd, 0x5d, + 0x40, 0xe0, 0x02, 0x7a, 0x81, 0xbc, 0xa5, 0x80, 0xe7, 0x20, 0x19, 0x3c, + 0x03, 0x4f, 0xc1, 0x63, 0xf0, 0x08, 0x68, 0xce, 0x91, 0x86, 0x8d, 0x2b, + 0x4a, 0xf5, 0xeb, 0xd7, 0x97, 0xd4, 0xaa, 0x55, 0x4b, 0xa3, 0x3f, 0xda, + 0xfc, 0x67, 0x11, 0x34, 0xf9, 0xd7, 0xe8, 0x8f, 0x38, 0x53, 0xd0, 0xa6, + 0x57, 0xbc, 0xe2, 0x30, 0xe4, 0x8d, 0x14, 0xdb, 0xed, 0xb2, 0xe0, 0x1f, + 0x6c, 0x0e, 0x54, 0x8a, 0xb7, 0x09, 0x8b, 0x83, 0x62, 0x0a, 0x96, 0xeb, + 0xfd, 0xb5, 0xe5, 0x12, 0xe0, 0x3f, 0x15, 0xf3, 0x1e, 0x55, 0x3a, 0x3e, + 0xe8, 0x50, 0xce, 0xa1, 0x80, 0x9d, 0xfd, 0x28, 0xb1, 0xaf, 0x2d, 0x10, + 0x7d, 0x7b, 0xda, 0xf2, 0xff, 0x6c, 0xfd, 0xc1, 0x18, 0xa1, 0x4d, 0x6f, + 0xca, 0x34, 0xf4, 0xda, 0x05, 0x50, 0xbe, 0xf9, 0x99, 0x7c, 0x4c, 0xde, + 0x34, 0xe4, 0x51, 0xd3, 0xf4, 0x3f, 0xbc, 0xb4, 0xe5, 0xef, 0x7f, 0x6c, + 0x0a, 0x36, 0xe2, 0x54, 0x12, 0x75, 0x32, 0xe2, 0x64, 0x8e, 0x9f, 0x21, + 0x16, 0xf0, 0x19, 0x96, 0x1a, 0xd8, 0xef, 0xc9, 0x5e, 0xfe, 0xb3, 0xab, + 0x3f, 0xa9, 0xf2, 0x3f, 0xd9, 0x0e, 0xe7, 0x58, 0x6a, 0x79, 0x8e, 0x65, + 0x84, 0xd8, 0x50, 0x80, 0x67, 0x03, 0xc4, 0x0a, 0xba, 0xe7, 0x69, 0xd3, + 0x74, 0xf9, 0x0f, 0x3c, 0xb6, 0x40, 0xda, 0x19, 0xd2, 0x5d, 0x90, 0x08, + 0xee, 0x80, 0xdb, 0xe0, 0x26, 0x6f, 0x16, 0xc7, 0x83, 0x38, 0x70, 0x0d, + 0xf6, 0xac, 0x83, 0x8b, 0x7c, 0x53, 0xfd, 0xc1, 0xdc, 0x42, 0x9b, 0x5e, + 0xd9, 0xe2, 0x23, 0xb4, 0xe7, 0x60, 0x85, 0x40, 0x41, 0x50, 0x00, 0xe4, + 0x07, 0xf9, 0x40, 0x5e, 0xde, 0x72, 0xcf, 0x0d, 0xd6, 0x58, 0xea, 0xe9, + 0xcf, 0xb1, 0xcd, 0xa4, 0x8e, 0x45, 0xf9, 0x5e, 0x03, 0x57, 0xc1, 0x15, + 0x70, 0x19, 0x5c, 0x04, 0x51, 0xe0, 0x3c, 0x08, 0x05, 0x67, 0xd0, 0x9f, + 0xee, 0x6d, 0x22, 0x7e, 0x93, 0x65, 0xfb, 0xcd, 0xae, 0xfe, 0x70, 0xfb, + 0x95, 0x0c, 0xfe, 0x35, 0x88, 0xaa, 0xa3, 0x6c, 0xab, 0x80, 0x8a, 0xa0, + 0x1c, 0x28, 0x03, 0x4a, 0x81, 0x92, 0xa0, 0x38, 0xf8, 0x0e, 0x14, 0x05, + 0x76, 0x7b, 0xfd, 0x75, 0x6b, 0xad, 0x20, 0x6f, 0xfa, 0x10, 0x61, 0x80, + 0x83, 0x0e, 0xe4, 0x51, 0x18, 0xdf, 0x9d, 0x43, 0x7c, 0x56, 0x39, 0x24, + 0x50, 0x1f, 0x07, 0x01, 0x78, 0x3e, 0x86, 0x18, 0xe7, 0x70, 0xe1, 0xeb, + 0x4d, 0x33, 0xea, 0x3f, 0x65, 0x9f, 0x9e, 0x3b, 0x77, 0x6e, 0x8a, 0x88, + 0x80, 0x3d, 0xfa, 0xd5, 0xab, 0x19, 0x21, 0xce, 0x86, 0xe4, 0xb8, 0x1b, + 0x13, 0x13, 0x93, 0x61, 0xff, 0xf9, 0x4b, 0xee, 0xd3, 0x38, 0x87, 0x53, + 0xcb, 0x73, 0xb8, 0xfa, 0x88, 0xeb, 0x80, 0x9a, 0x78, 0x16, 0x32, 0x55, + 0x05, 0x95, 0xf0, 0x5c, 0x01, 0x71, 0x79, 0xc3, 0x57, 0x14, 0xac, 0xb7, + 0x36, 0xbe, 0x79, 0xf3, 0x26, 0xc5, 0xba, 0x1b, 0x2b, 0x67, 0x94, 0x41, + 0xc0, 0x5f, 0xe4, 0x97, 0x7d, 0x2d, 0xbc, 0xc0, 0x7e, 0x95, 0xf6, 0x1c, + 0xef, 0xc3, 0x0e, 0xcc, 0x1f, 0x26, 0xfe, 0x4e, 0x7b, 0xf7, 0xee, 0x15, + 0x76, 0x09, 0x32, 0xff, 0x1c, 0xa4, 0x1d, 0x43, 0xf9, 0xf2, 0xe5, 0xa9, + 0x6c, 0xd9, 0xb2, 0x19, 0x52, 0xae, 0x5c, 0x39, 0x61, 0x6f, 0xa9, 0x79, + 0xaf, 0xcc, 0xff, 0xac, 0x59, 0xb3, 0x64, 0x5a, 0x63, 0x06, 0xce, 0xa1, + 0x9e, 0xaa, 0x77, 0xca, 0x39, 0x1e, 0x68, 0x0d, 0x9a, 0xb1, 0x0f, 0xc7, + 0x4f, 0x42, 0x1e, 0xf6, 0xe5, 0xa8, 0x0d, 0xbe, 0x37, 0x8d, 0x92, 0x7b, + 0x95, 0x08, 0xda, 0x35, 0xd7, 0xf1, 0x6d, 0x15, 0x49, 0xed, 0xa3, 0x94, + 0xb1, 0xda, 0x03, 0xec, 0x67, 0xdb, 0x55, 0x07, 0xb0, 0x1b, 0x58, 0x83, + 0x8d, 0x60, 0x15, 0x74, 0x68, 0x7a, 0x45, 0x39, 0x0f, 0xbf, 0x74, 0xe9, + 0x92, 0x98, 0x03, 0x88, 0xb4, 0xb2, 0xd4, 0x9b, 0x74, 0xe8, 0xf4, 0x47, + 0xce, 0xbd, 0xc7, 0x7f, 0xef, 0x87, 0x73, 0x40, 0xe8, 0x10, 0xe8, 0x03, + 0x7a, 0x80, 0xce, 0x6c, 0x03, 0xdb, 0x1a, 0xb4, 0x00, 0xa2, 0x6e, 0x1a, + 0x83, 0xae, 0x75, 0x02, 0xd2, 0xf5, 0x0d, 0x01, 0xf6, 0x38, 0x77, 0x71, + 0x57, 0xf2, 0x4c, 0x22, 0xcf, 0x7b, 0x95, 0x03, 0x36, 0xf5, 0x36, 0xb0, + 0x01, 0xcf, 0xab, 0x10, 0x2f, 0x02, 0x73, 0xd0, 0x97, 0x4e, 0xc1, 0x4a, + 0x76, 0xf3, 0x7c, 0xf9, 0xbb, 0xc9, 0x93, 0x27, 0xcb, 0xb6, 0xf7, 0xf4, + 0xe9, 0xd3, 0x2c, 0xf7, 0x6a, 0xf8, 0x39, 0x5d, 0xfe, 0xed, 0x56, 0x1c, + 0xa5, 0xf9, 0x38, 0xcf, 0x99, 0xa9, 0x42, 0x7a, 0x40, 0x9c, 0x67, 0x0e, + 0x45, 0xdc, 0x0f, 0xf4, 0xc2, 0x73, 0x77, 0xc4, 0x9d, 0x80, 0xa8, 0x97, + 0x36, 0x88, 0x97, 0x4e, 0xf3, 0x4b, 0x37, 0x7f, 0x3e, 0x7d, 0xdc, 0x87, + 0x5e, 0xed, 0x32, 0x50, 0x0e, 0xe4, 0xb6, 0xf3, 0x59, 0xef, 0x7a, 0x99, + 0x6f, 0xe5, 0xfc, 0x73, 0x1e, 0x98, 0x0e, 0xc6, 0xcb, 0xc4, 0xe9, 0x66, + 0x17, 0x23, 0x3a, 0xe7, 0x7b, 0x48, 0xd4, 0x9d, 0x3c, 0x67, 0x2d, 0x55, + 0xaa, 0x14, 0xd5, 0xad, 0x5b, 0xf7, 0xb3, 0xc8, 0x93, 0x27, 0x0f, 0x2d, + 0x9f, 0x6b, 0x49, 0x2b, 0x4d, 0xe2, 0xb4, 0xe7, 0x90, 0xf3, 0xd9, 0xe4, + 0x77, 0x12, 0x18, 0x03, 0x86, 0xf1, 0x19, 0x71, 0x1f, 0xd0, 0x13, 0x74, + 0x32, 0x7c, 0x46, 0xa7, 0x4e, 0x9e, 0x4b, 0x3b, 0x7f, 0x96, 0x75, 0x18, + 0xb4, 0xa0, 0x1c, 0xa9, 0x37, 0xa3, 0x8c, 0xd7, 0x29, 0x7a, 0xa2, 0x5e, + 0x02, 0xe6, 0x83, 0x3f, 0xc1, 0x64, 0x30, 0x1a, 0x0c, 0x04, 0x3d, 0x40, + 0x5b, 0x15, 0x5d, 0x69, 0x98, 0x9b, 0xce, 0x79, 0x1f, 0x12, 0xf3, 0x47, + 0x61, 0x27, 0x93, 0xed, 0xf5, 0x8b, 0x66, 0xbd, 0xb3, 0x79, 0xa9, 0x15, + 0x6d, 0x32, 0x0a, 0x21, 0x57, 0x94, 0xe9, 0x6e, 0xb0, 0x19, 0xac, 0x02, + 0x8b, 0xc0, 0x1c, 0x30, 0x1d, 0x4c, 0x02, 0x63, 0xc0, 0x70, 0x30, 0x08, + 0x0c, 0xa8, 0xe6, 0x2b, 0xca, 0x2c, 0xc3, 0x75, 0xb0, 0x1f, 0x6c, 0xa5, + 0x3e, 0xae, 0x54, 0x0e, 0xa7, 0xd5, 0x16, 0xca, 0x59, 0xb7, 0x7a, 0x1a, + 0x10, 0x65, 0x3e, 0x1c, 0x71, 0x3f, 0xd0, 0x4d, 0x54, 0x22, 0xdb, 0x14, + 0x7f, 0x8f, 0x7a, 0x28, 0x65, 0x44, 0xde, 0x16, 0xf3, 0x45, 0x7b, 0xc8, + 0xf6, 0xfa, 0x51, 0xcc, 0x55, 0x0f, 0x2d, 0xf1, 0x21, 0x5f, 0xe3, 0x78, + 0x3a, 0xc5, 0xf6, 0xcc, 0xfb, 0x90, 0xec, 0x5e, 0xc4, 0xdb, 0xc0, 0x5a, + 0x51, 0x17, 0x88, 0x2d, 0xc0, 0x2c, 0x3c, 0x4f, 0xd3, 0xca, 0xf1, 0x81, + 0xec, 0xb7, 0xf8, 0x66, 0xba, 0x7e, 0x7f, 0xf6, 0xec, 0x19, 0x9d, 0x99, + 0x8a, 0x49, 0xc6, 0x1c, 0x5d, 0x25, 0x4a, 0x65, 0x1c, 0xc2, 0x3e, 0x57, + 0x5d, 0xb8, 0x63, 0x68, 0x04, 0x6a, 0x80, 0x32, 0xca, 0x00, 0xf3, 0x1e, + 0xe7, 0xa8, 0x41, 0x15, 0x6b, 0xd3, 0xe2, 0x81, 0xc3, 0xa9, 0x53, 0xa7, + 0x4e, 0x9f, 0x5c, 0xbf, 0x4f, 0xef, 0x6e, 0x4e, 0x01, 0x55, 0xfd, 0x60, + 0x8a, 0xf2, 0x4e, 0x77, 0x8e, 0xca, 0x67, 0xb9, 0xee, 0xc0, 0x8e, 0xd5, + 0x57, 0x34, 0x39, 0x51, 0x94, 0x8b, 0x59, 0xa7, 0x66, 0x0a, 0x7d, 0x2a, + 0x1b, 0x94, 0xf6, 0x7c, 0x3f, 0x5d, 0x9f, 0xe0, 0xef, 0x62, 0x45, 0x6f, + 0x26, 0x1b, 0xc8, 0x32, 0x57, 0x8f, 0x60, 0x7d, 0xe9, 0x05, 0x3a, 0x81, + 0x56, 0x5c, 0xee, 0xb5, 0x40, 0x79, 0x50, 0x18, 0x98, 0x00, 0x55, 0x2e, + 0x69, 0xbb, 0xfc, 0x01, 0xe7, 0xb0, 0xe1, 0xa6, 0x0d, 0x29, 0xf0, 0x97, + 0xd1, 0x34, 0xb5, 0x44, 0x13, 0xda, 0x35, 0x78, 0x3e, 0xb9, 0x8c, 0x5b, + 0x4b, 0xa3, 0xcd, 0x7e, 0xa5, 0xc0, 0x66, 0x3b, 0x29, 0x34, 0x87, 0x13, + 0xbe, 0x93, 0x80, 0xef, 0x2a, 0xe7, 0xb0, 0x0f, 0x40, 0x2c, 0x88, 0x00, + 0x27, 0xb9, 0x1e, 0xf6, 0x03, 0x07, 0x60, 0xc3, 0xfa, 0xb4, 0x06, 0x88, + 0xba, 0x98, 0x67, 0x90, 0x42, 0x1e, 0xf6, 0x41, 0x59, 0xee, 0xff, 0x08, + 0xdb, 0xe5, 0x23, 0x93, 0x9b, 0x92, 0x5a, 0x34, 0x9c, 0xfe, 0xc8, 0xdb, + 0x6f, 0xa0, 0x23, 0x9e, 0x35, 0x79, 0x17, 0x1d, 0x70, 0x45, 0xc4, 0xc5, + 0x80, 0x18, 0xc8, 0x55, 0x46, 0xc8, 0x4f, 0x41, 0x20, 0x26, 0x8e, 0x3f, + 0x20, 0x6e, 0x03, 0x7a, 0xe3, 0x79, 0x3c, 0xe2, 0xf9, 0x60, 0x3d, 0x9e, + 0xed, 0x11, 0x7b, 0x83, 0x10, 0x3c, 0x5f, 0x47, 0xfc, 0x08, 0xbc, 0xa7, + 0x14, 0x31, 0x5d, 0x41, 0xde, 0x62, 0x40, 0x38, 0x9e, 0x4f, 0x68, 0x64, + 0xc0, 0xb3, 0x23, 0xe2, 0x5d, 0x60, 0x2b, 0x9e, 0xd7, 0x21, 0x5e, 0xdc, + 0xc1, 0x4b, 0xe8, 0x7d, 0xb6, 0xf6, 0x0f, 0xe3, 0x63, 0xaf, 0x53, 0x64, + 0xaf, 0xc2, 0xe8, 0xb8, 0xd8, 0xce, 0xa2, 0x25, 0xeb, 0x4c, 0x6d, 0x76, + 0x78, 0x28, 0xc9, 0x93, 0x12, 0x43, 0x91, 0xff, 0x3c, 0xa0, 0x04, 0xa8, + 0xc6, 0xe7, 0xc0, 0x1d, 0x40, 0x7f, 0xf6, 0xc9, 0xfb, 0x8b, 0x37, 0x70, + 0x6c, 0x35, 0xe7, 0xc0, 0x7c, 0x16, 0x9f, 0x08, 0x5e, 0xd0, 0x7b, 0xe4, + 0xeb, 0x09, 0xbb, 0x34, 0x5e, 0x06, 0xa1, 0xe0, 0x38, 0xeb, 0xd2, 0x01, + 0xb6, 0xd3, 0xd8, 0x23, 0x74, 0xa8, 0xd8, 0x39, 0xba, 0x75, 0xeb, 0x76, + 0xb6, 0xf6, 0x0f, 0x35, 0x84, 0x1c, 0xf3, 0xa2, 0x5b, 0xad, 0x4d, 0x48, + 0xdd, 0x82, 0xcb, 0xbd, 0x0e, 0xa8, 0x0c, 0x4a, 0x83, 0x82, 0xc0, 0x54, + 0xe8, 0x8d, 0x09, 0x28, 0x04, 0xca, 0x81, 0xda, 0xa0, 0x19, 0xe8, 0x02, + 0x06, 0x81, 0x49, 0xe0, 0x2f, 0xb0, 0x0e, 0xec, 0x01, 0x07, 0x41, 0x10, + 0x88, 0x00, 0x42, 0x87, 0x1e, 0xcb, 0xb3, 0xf4, 0x57, 0xac, 0x47, 0x09, + 0x20, 0x1a, 0x9c, 0x03, 0xc7, 0xb9, 0x1e, 0x0e, 0x82, 0x2d, 0x39, 0xe2, + 0xe8, 0xb4, 0x5f, 0xd8, 0x67, 0xef, 0x3f, 0x8b, 0x38, 0xd0, 0xc1, 0x86, + 0xee, 0x37, 0x84, 0xed, 0xbf, 0x70, 0x36, 0xa9, 0x8a, 0xfc, 0x96, 0x01, + 0x62, 0x72, 0x98, 0x4b, 0xe4, 0xdd, 0x00, 0xe4, 0x15, 0x65, 0x8f, 0xb8, + 0x0a, 0xf8, 0x11, 0xcf, 0xad, 0x10, 0xf7, 0x00, 0x43, 0xf1, 0x3c, 0x05, + 0xb1, 0x05, 0x58, 0x8b, 0xe7, 0x5d, 0x88, 0xdd, 0x81, 0x1f, 0x9e, 0x43, + 0x11, 0x5f, 0x05, 0xf7, 0x64, 0x1d, 0x7c, 0x40, 0x1e, 0x93, 0x01, 0xa6, + 0xbe, 0xb2, 0x2d, 0x5c, 0x00, 0x21, 0x62, 0x1a, 0x83, 0xd8, 0xc9, 0xf4, + 0x36, 0x1d, 0x73, 0x38, 0xf9, 0x55, 0xe7, 0x17, 0x81, 0x76, 0x36, 0x74, + 0xab, 0x9a, 0x29, 0x51, 0x39, 0x24, 0x5a, 0x8c, 0x27, 0xb2, 0x46, 0x1a, + 0xbb, 0x91, 0x42, 0xec, 0x83, 0x59, 0x83, 0x75, 0xa7, 0x2d, 0xe8, 0x09, + 0x86, 0xb3, 0xf3, 0x94, 0x05, 0x10, 0xf9, 0xdf, 0x09, 0xdc, 0x78, 0x83, + 0xf0, 0x0c, 0xeb, 0xd0, 0x2d, 0xf0, 0x44, 0xd6, 0xc1, 0x1b, 0xe4, 0xf5, + 0x31, 0x4f, 0xd9, 0xaf, 0x82, 0x48, 0xa1, 0x3f, 0x39, 0xe3, 0xc8, 0xcf, + 0x31, 0xeb, 0xf3, 0x30, 0x75, 0x36, 0xe6, 0x29, 0x62, 0x8c, 0x8a, 0xac, + 0x5c, 0x98, 0xd4, 0x66, 0xac, 0x37, 0xb2, 0xcd, 0xe6, 0x03, 0xc5, 0x41, + 0x25, 0xf6, 0x99, 0x68, 0x0a, 0x3a, 0x88, 0xb6, 0x0b, 0x46, 0x82, 0x69, + 0x60, 0x01, 0x58, 0x03, 0x76, 0x00, 0x17, 0x70, 0x04, 0x9c, 0x04, 0x91, + 0x20, 0x0e, 0x24, 0x81, 0x17, 0xf4, 0x11, 0x7e, 0x2d, 0x2f, 0x58, 0x8f, + 0x6e, 0x08, 0xbd, 0x29, 0x16, 0x4a, 0x21, 0x7e, 0xd9, 0x3b, 0x5b, 0xfd, + 0x84, 0xfe, 0xa4, 0x92, 0x2f, 0x01, 0x6d, 0xfa, 0x48, 0xab, 0xa6, 0xf4, + 0x46, 0xda, 0xcc, 0xe4, 0xc4, 0x7b, 0x21, 0x8f, 0x5c, 0xa0, 0x56, 0x97, + 0xba, 0xa3, 0x96, 0x1b, 0x1c, 0x9d, 0x11, 0xf7, 0x03, 0xa3, 0xf1, 0x3c, + 0x5d, 0x93, 0x7f, 0x3c, 0x6f, 0x47, 0xec, 0x04, 0x0e, 0xe1, 0x59, 0xb4, + 0x81, 0x70, 0x10, 0x83, 0xe7, 0x3b, 0x88, 0x9f, 0xca, 0x3a, 0x78, 0x87, + 0x7c, 0xdf, 0x33, 0x78, 0x49, 0xae, 0x6d, 0xbc, 0xe8, 0xe6, 0x8d, 0x5b, + 0x59, 0xce, 0x9d, 0xb2, 0x53, 0xf6, 0x7a, 0xdf, 0xd1, 0xf6, 0xad, 0xfe, + 0x56, 0xd6, 0x74, 0xba, 0x78, 0x05, 0x94, 0x59, 0x71, 0xee, 0x33, 0x6b, + 0x21, 0x6e, 0x04, 0x5a, 0xb3, 0x4f, 0xcf, 0x00, 0x30, 0x06, 0xcf, 0x33, + 0x38, 0xff, 0x96, 0xc0, 0x1a, 0x38, 0xb0, 0x9f, 0x8c, 0x3f, 0x08, 0x01, + 0xd1, 0xdc, 0x8e, 0x1f, 0xa2, 0x0d, 0xa4, 0xd0, 0xf1, 0x7f, 0x1c, 0x27, + 0xff, 0xdd, 0x01, 0xa2, 0x8f, 0xcc, 0x32, 0x5f, 0xfa, 0x70, 0xc8, 0xb6, + 0x1f, 0x8c, 0x66, 0x9c, 0xf6, 0xb5, 0xdc, 0x40, 0x81, 0xe5, 0x1b, 0xd3, + 0x2b, 0x03, 0x61, 0x37, 0xf5, 0x0b, 0x6f, 0x34, 0xf5, 0x00, 0x83, 0xd8, + 0x86, 0xe7, 0x0f, 0xb0, 0x80, 0x0d, 0xa4, 0xad, 0x80, 0x3d, 0x6f, 0x8e, + 0xfb, 0x82, 0xd3, 0x20, 0x8a, 0x52, 0x0c, 0x2f, 0x92, 0x7f, 0xa5, 0x03, + 0x74, 0x6c, 0xbd, 0x8f, 0xb4, 0x83, 0xf9, 0xd2, 0x90, 0x1d, 0xfd, 0xc9, + 0xe0, 0x59, 0xd6, 0x47, 0xb0, 0x8f, 0x2f, 0xf9, 0x8f, 0x99, 0x87, 0xf9, + 0x43, 0x77, 0xba, 0x6e, 0xdc, 0x89, 0x3e, 0x18, 0x0c, 0x41, 0x99, 0x8e, + 0x17, 0xf9, 0x47, 0xbc, 0x10, 0xac, 0xc6, 0xf3, 0x36, 0xc4, 0x76, 0xf4, + 0xde, 0xc0, 0x8d, 0x62, 0x8c, 0x77, 0x53, 0x40, 0x65, 0x1b, 0xf2, 0x9b, + 0xe0, 0x8e, 0x7e, 0x31, 0x58, 0xcc, 0xfd, 0xb2, 0xf5, 0xae, 0x6f, 0xa1, + 0x3f, 0x59, 0x3d, 0xdf, 0xba, 0x75, 0x8b, 0x4e, 0x78, 0x43, 0x9e, 0xcd, + 0x8e, 0x14, 0xb0, 0x60, 0x27, 0xf9, 0x4f, 0xb3, 0x02, 0x36, 0x78, 0x76, + 0x20, 0xff, 0xad, 0x07, 0xe8, 0xc4, 0xd1, 0x40, 0x61, 0xeb, 0x98, 0x65, + 0x3a, 0x9f, 0xf3, 0xfc, 0x25, 0xfa, 0xf3, 0x9f, 0x14, 0x54, 0xff, 0x0f, + 0xff, 0xd6, 0x50, 0x8d, 0x7d, 0xc9, 0x16, 0x64, 0xc3, 0x4e, 0xeb, 0xff, + 0xe1, 0x5f, 0x17, 0x78, 0x5f, 0x45, 0xf4, 0xcb, 0x62, 0x6f, 0x5f, 0xf8, + 0x13, 0x8b, 0xf3, 0x55, 0xf1, 0xf9, 0x7f, 0x5d, 0x1b, 0xcf, 0x4e, 0x10, + 0x32, 0x7a, 0x1e, 0xf1, 0x82, 0x5f, 0xc8, 0x3a, 0xea, 0xed, 0x36, 0x9d, + 0xea, 0xbb, 0x0d, 0xa1, 0x12, 0x2e, 0x3d, 0xc9, 0xcc, 0xe3, 0x77, 0x32, + 0xf1, 0xec, 0x4d, 0xa6, 0x9e, 0x03, 0xa8, 0xa0, 0xc7, 0x28, 0x7c, 0x36, + 0x9e, 0x1a, 0xb8, 0xce, 0xa5, 0x7e, 0x6e, 0x6b, 0x68, 0x89, 0x1b, 0xfc, + 0xf2, 0x7d, 0xbc, 0xa5, 0x7f, 0xf5, 0x7f, 0x63, 0x10, 0x7b, 0x8a, 0x2b, + 0x9c, 0xd7, 0x50, 0x23, 0xe7, 0xae, 0x94, 0x33, 0xa8, 0x3e, 0x19, 0xbd, + 0x10, 0x77, 0x26, 0x74, 0x64, 0x2f, 0xb1, 0x81, 0x60, 0x24, 0x9f, 0x76, + 0xfe, 0xc1, 0xde, 0x53, 0xcb, 0xd8, 0x8b, 0x69, 0x1b, 0x9f, 0xc6, 0x39, + 0x93, 0x51, 0xb2, 0x0b, 0xe5, 0xf2, 0xb7, 0xa4, 0xa6, 0xce, 0x6b, 0x69, + 0x8d, 0xb3, 0xad, 0xf4, 0x0d, 0xff, 0x4f, 0x0e, 0x62, 0xbc, 0xf6, 0xf0, + 0xf1, 0xa4, 0x76, 0x0e, 0xdd, 0xc8, 0x34, 0xb4, 0x1c, 0xec, 0x10, 0xaa, + 0x09, 0xbb, 0x17, 0xf6, 0xca, 0x6b, 0xc9, 0x3e, 0x90, 0xbf, 0x81, 0x01, + 0x2c, 0xff, 0x44, 0x3d, 0xf9, 0x97, 0xb3, 0xfc, 0x56, 0x60, 0x2f, 0x70, + 0xe1, 0x13, 0x4a, 0x5f, 0xc5, 0xcb, 0x49, 0x7d, 0x8e, 0x72, 0x9c, 0x72, + 0xa0, 0x2e, 0x0e, 0xdb, 0xc9, 0xdb, 0xcf, 0xef, 0x3f, 0xaa, 0x9d, 0x88, + 0xbc, 0x78, 0xfa, 0x7a, 0x52, 0x3d, 0xfb, 0x1f, 0xc9, 0xe8, 0x81, 0xb0, + 0xc0, 0xfa, 0x0e, 0x94, 0x61, 0x2f, 0xc0, 0xda, 0x6c, 0xbf, 0xd7, 0x9c, + 0xed, 0xaf, 0x7a, 0xb0, 0xb5, 0xc4, 0x88, 0x0c, 0xe4, 0x5f, 0x0f, 0xac, + 0xd9, 0x9b, 0xcc, 0x0d, 0x1c, 0x62, 0x7b, 0xbe, 0x53, 0x20, 0x9c, 0x4f, + 0xd9, 0xe2, 0xc8, 0x38, 0x31, 0x92, 0x1a, 0xdb, 0xed, 0x24, 0xdf, 0xe3, + 0xc7, 0xff, 0xed, 0xe5, 0x20, 0xce, 0x7c, 0xbb, 0xed, 0xee, 0x4c, 0x39, + 0x6e, 0x1b, 0x0b, 0x8b, 0x21, 0xf6, 0x38, 0x2c, 0xc4, 0x36, 0x43, 0x15, + 0x40, 0x0d, 0xf6, 0x46, 0x6c, 0x0a, 0xda, 0xb2, 0xa5, 0x4b, 0x5f, 0xf6, + 0x56, 0x9c, 0xc0, 0xf2, 0x5b, 0xb0, 0x17, 0xe1, 0x06, 0xbe, 0x55, 0xc3, + 0x1e, 0xb8, 0xb3, 0x4d, 0x51, 0x20, 0x9f, 0xf8, 0x46, 0x82, 0xab, 0x6c, + 0x97, 0x96, 0x24, 0x4f, 0xf1, 0x8c, 0x71, 0xdf, 0xcb, 0xef, 0xbb, 0x76, + 0xc9, 0x3d, 0xf6, 0x7f, 0x75, 0x10, 0xe5, 0xbe, 0x63, 0xbf, 0x35, 0x95, + 0x0b, 0x2c, 0x48, 0x05, 0x90, 0x9b, 0x9c, 0xc0, 0x40, 0x6b, 0x77, 0x97, + 0x1f, 0x14, 0x63, 0xdf, 0xdb, 0x6a, 0x7c, 0x83, 0xca, 0xcf, 0xa0, 0x0d, + 0xe8, 0xc2, 0x1e, 0x92, 0xc3, 0xd2, 0xc8, 0xbf, 0x12, 0x6c, 0x04, 0x36, + 0x6c, 0x4f, 0x75, 0x10, 0x1c, 0x15, 0xba, 0xcf, 0xa7, 0xde, 0x17, 0xd9, + 0x4f, 0xf6, 0x0e, 0x9f, 0x5c, 0xbe, 0x50, 0xec, 0x0a, 0xdf, 0xab, 0xa9, + 0x88, 0x97, 0x0f, 0xd9, 0x79, 0x79, 0xfd, 0xcb, 0x74, 0x41, 0x8c, 0x5b, + 0xa3, 0xac, 0x07, 0x52, 0x85, 0x24, 0x23, 0x59, 0xcb, 0x45, 0x40, 0x3e, + 0xf6, 0x39, 0xd6, 0xe9, 0x40, 0x61, 0x50, 0x5a, 0xaf, 0x0d, 0x34, 0x62, + 0x1b, 0xd6, 0x4e, 0x6c, 0x79, 0x36, 0x14, 0x8c, 0x4f, 0x23, 0xff, 0x26, + 0xb6, 0x0c, 0x71, 0xd2, 0x6b, 0xfb, 0xa7, 0xf8, 0xe4, 0xff, 0x0a, 0xb8, + 0x01, 0xee, 0xf3, 0x29, 0x2e, 0xce, 0xe3, 0x3f, 0xe2, 0xbc, 0xf1, 0x15, + 0xe6, 0x99, 0x4f, 0xb1, 0x6d, 0x10, 0x79, 0x9b, 0x46, 0x6f, 0xd9, 0x21, + 0x6d, 0xeb, 0xff, 0xce, 0x20, 0xe6, 0xf8, 0x9d, 0x77, 0x36, 0xa4, 0xda, + 0x38, 0xd3, 0xaf, 0xc2, 0x16, 0xba, 0x25, 0x40, 0x41, 0x90, 0x2b, 0x95, + 0x0e, 0x14, 0x60, 0x2f, 0xe4, 0xf2, 0xdc, 0x06, 0x1a, 0x70, 0x1f, 0xd0, + 0x81, 0xbd, 0x74, 0x87, 0xb0, 0x05, 0xd8, 0x0c, 0x3d, 0xf9, 0xb7, 0x70, + 0xdf, 0xef, 0xc2, 0x6d, 0x3f, 0x80, 0x75, 0x3f, 0x0a, 0x5c, 0x07, 0xb7, + 0xb9, 0xee, 0x5f, 0xa2, 0xee, 0x3f, 0x12, 0x8e, 0x15, 0x14, 0x9f, 0xe5, + 0x07, 0x8a, 0x8d, 0x9d, 0xc1, 0x95, 0x37, 0xd4, 0xd2, 0xd2, 0xfa, 0x6f, + 0x1b, 0x33, 0xc5, 0xf8, 0xd3, 0xd1, 0xa9, 0x86, 0xd4, 0xe4, 0xfa, 0xa0, + 0x26, 0xd7, 0x6e, 0x19, 0xee, 0xf1, 0xf2, 0x0b, 0xc9, 0xb5, 0x3a, 0x90, + 0x87, 0x35, 0xa3, 0x0c, 0xb7, 0x81, 0x1f, 0xb8, 0x0f, 0x68, 0xcf, 0x63, + 0xe0, 0x60, 0x3d, 0xf9, 0xa5, 0x1d, 0x36, 0xfb, 0xc4, 0xef, 0xe5, 0xbe, + 0xcf, 0x9b, 0x7d, 0xd3, 0xc3, 0xb8, 0xdf, 0x4b, 0xd0, 0xd5, 0xbd, 0xfa, + 0x9d, 0xd4, 0x7b, 0x2c, 0xcd, 0x15, 0x3b, 0xb1, 0x44, 0xb6, 0x15, 0xbb, + 0x02, 0x22, 0xd5, 0xd4, 0xc0, 0x72, 0x2f, 0x6c, 0x0a, 0xef, 0xd2, 0xb7, + 0x0c, 0x89, 0xb8, 0xd7, 0xab, 0xbb, 0x53, 0x4d, 0xd9, 0x83, 0xb5, 0x00, + 0x8d, 0x59, 0xa2, 0xef, 0x41, 0x45, 0xd6, 0xf4, 0xc2, 0x2c, 0xb5, 0xa1, + 0x56, 0x07, 0xcc, 0x40, 0x49, 0xf6, 0x3f, 0xaf, 0xc3, 0x7d, 0x40, 0x5b, + 0x1e, 0x03, 0xd8, 0x0e, 0x5d, 0x27, 0x3f, 0x8f, 0xfd, 0x76, 0xec, 0x97, + 0x7f, 0x8c, 0xad, 0x5c, 0x22, 0xc0, 0x35, 0xbd, 0xba, 0x7f, 0xa5, 0xd3, + 0xfb, 0x27, 0x6c, 0x93, 0x9b, 0xc0, 0xf6, 0x95, 0x51, 0x20, 0x54, 0xb1, + 0x0f, 0x6d, 0xb0, 0x7c, 0xcf, 0x37, 0xd3, 0x03, 0xd1, 0xde, 0xfb, 0xef, + 0x6c, 0x28, 0x6d, 0xe3, 0x3a, 0xb1, 0x04, 0xcd, 0xb9, 0x45, 0xd7, 0x63, + 0x7f, 0xfb, 0x0a, 0x7a, 0xed, 0x20, 0x07, 0x50, 0x5a, 0x42, 0x5a, 0x3b, + 0xf6, 0x86, 0xa0, 0x75, 0x1a, 0x3b, 0xf6, 0x19, 0x7a, 0x76, 0xec, 0xd6, + 0x69, 0xed, 0xd8, 0xb9, 0xdf, 0x8b, 0xe7, 0xba, 0x7f, 0x2e, 0x6c, 0x62, + 0x15, 0xbd, 0x7f, 0x06, 0xee, 0x83, 0x1b, 0xe0, 0xaa, 0xbe, 0xec, 0x20, + 0x40, 0xf1, 0xdd, 0x6f, 0x69, 0x61, 0xf5, 0xd5, 0xfd, 0x81, 0xe8, 0x53, + 0xcd, 0xad, 0xfb, 0xd2, 0x20, 0xb4, 0xf7, 0x3e, 0x3c, 0x7b, 0xe9, 0xac, + 0x57, 0x06, 0x0d, 0x79, 0x86, 0x53, 0x8d, 0x7b, 0xfb, 0x62, 0xdc, 0x17, + 0x1a, 0xe9, 0x74, 0x80, 0xb5, 0xa3, 0x2a, 0xb7, 0x9a, 0x16, 0x9c, 0x42, + 0x3f, 0x30, 0x5a, 0xcf, 0x8e, 0x7f, 0x0d, 0x8f, 0x7d, 0x4e, 0xdc, 0xf6, + 0x83, 0x58, 0xf7, 0x63, 0xc0, 0x2d, 0xae, 0xfb, 0x37, 0xf0, 0x0d, 0x60, + 0xbd, 0x7f, 0xc0, 0xdb, 0x9c, 0xd7, 0xc0, 0x85, 0xb4, 0xb2, 0x03, 0x4f, + 0xf4, 0x07, 0x2e, 0x6f, 0x68, 0xf4, 0xca, 0x1d, 0x5f, 0x35, 0x2e, 0xd8, + 0xb8, 0x6e, 0xa0, 0x11, 0x0f, 0x8d, 0xe4, 0x6c, 0x6d, 0x30, 0xe7, 0xba, + 0xa7, 0x5e, 0x19, 0x34, 0xe3, 0xd9, 0x4d, 0x6d, 0xee, 0x0b, 0xfe, 0xc1, + 0xed, 0x20, 0x57, 0x2a, 0x1d, 0x28, 0xc6, 0xad, 0xa4, 0x2e, 0xf7, 0x01, + 0x1d, 0x79, 0x0c, 0x1c, 0xc5, 0xf2, 0x2f, 0x04, 0xeb, 0xb8, 0xef, 0x77, + 0xe5, 0xb6, 0x1f, 0xcc, 0x63, 0x7e, 0x1c, 0xd7, 0x7d, 0x8a, 0xd2, 0xe7, + 0xbd, 0xe2, 0x36, 0x7f, 0x07, 0x5c, 0x07, 0x17, 0x41, 0x98, 0x9e, 0xec, + 0xde, 0xec, 0xda, 0xe8, 0xa6, 0xd8, 0x8a, 0x1a, 0x6d, 0xbc, 0x4d, 0x7b, + 0xf7, 0x79, 0xd2, 0x97, 0x84, 0x2b, 0x57, 0xae, 0xd0, 0xb0, 0x13, 0xf9, + 0x68, 0x2a, 0x8f, 0x54, 0xa3, 0x78, 0xd4, 0xea, 0x9f, 0xb6, 0x0c, 0x94, + 0xde, 0x3d, 0x13, 0x3b, 0x7c, 0x13, 0x6e, 0x15, 0x65, 0xb3, 0x61, 0x87, + 0xbf, 0x1b, 0xb8, 0xeb, 0xdb, 0xe1, 0x73, 0xdd, 0x3f, 0x51, 0xec, 0xf0, + 0xdf, 0xa2, 0xee, 0x9f, 0xea, 0xec, 0xf0, 0x55, 0xd1, 0x7a, 0xb2, 0xfb, + 0xb3, 0xec, 0x07, 0x81, 0x2b, 0x70, 0x00, 0xbb, 0xe5, 0xf6, 0x2c, 0x15, + 0xf9, 0xd3, 0xe7, 0xb3, 0xe7, 0x48, 0x42, 0x67, 0xa6, 0xed, 0x6a, 0x2b, + 0x6d, 0x4b, 0x67, 0x72, 0x2e, 0x27, 0x72, 0x8b, 0x1d, 0xce, 0xad, 0xb7, + 0x17, 0xe8, 0xa2, 0x57, 0x06, 0x3f, 0xb2, 0x84, 0xe5, 0xb9, 0xc6, 0xf3, + 0x4a, 0x0d, 0x30, 0xe0, 0xa7, 0x12, 0x4a, 0x1b, 0x48, 0xaa, 0x47, 0xb9, + 0xbc, 0x1a, 0x52, 0xd9, 0x6d, 0xed, 0xc9, 0xb8, 0x5f, 0x15, 0x1a, 0xe9, + 0xba, 0x84, 0xc6, 0xba, 0x5b, 0x52, 0xde, 0x21, 0x4d, 0xa9, 0xd4, 0xfa, + 0xd1, 0x94, 0xfb, 0xa0, 0x05, 0xe4, 0xdb, 0xcf, 0x63, 0xfe, 0x75, 0xae, + 0xfb, 0x17, 0x8a, 0xde, 0x3f, 0xe7, 0x36, 0x1f, 0x0f, 0x2e, 0xb1, 0xec, + 0xc1, 0x2c, 0xfb, 0x11, 0xde, 0x02, 0x75, 0x01, 0x76, 0x7c, 0x2c, 0x60, + 0xc5, 0xae, 0xa6, 0xeb, 0xd4, 0xf4, 0xfb, 0xfc, 0x5d, 0x9f, 0xd5, 0x0e, + 0xbc, 0x7c, 0xdc, 0x69, 0xde, 0x3d, 0x23, 0x69, 0xe1, 0xfe, 0x17, 0x98, + 0xcd, 0x3d, 0xd5, 0x14, 0x1e, 0xb5, 0x46, 0x70, 0x0f, 0xfe, 0xbb, 0xae, + 0x0c, 0x74, 0x7e, 0x00, 0x5c, 0xdb, 0x85, 0x35, 0x7d, 0xe1, 0x07, 0x13, + 0xf8, 0x4c, 0x14, 0xa3, 0x42, 0xbd, 0x4b, 0x53, 0xaf, 0xbe, 0xbf, 0xcb, + 0x3e, 0xc9, 0xd5, 0xd5, 0x55, 0xec, 0x8f, 0x69, 0xcf, 0x3c, 0xbf, 0xfb, + 0xee, 0x3b, 0x71, 0x3f, 0xa8, 0xf4, 0xf9, 0x9c, 0x34, 0x75, 0x0a, 0xe5, + 0xe9, 0xd8, 0x92, 0xf2, 0x1d, 0xb2, 0xc5, 0x38, 0xf7, 0x88, 0xfd, 0x00, + 0x88, 0xfd, 0x00, 0xc0, 0x65, 0x10, 0xce, 0xb2, 0xfb, 0x81, 0xc3, 0xec, + 0x4e, 0xeb, 0xc4, 0x6e, 0x95, 0x3b, 0xd8, 0xc5, 0x77, 0x03, 0x6f, 0x11, + 0xaf, 0x80, 0x0f, 0xff, 0x1f, 0xb1, 0xb0, 0xe5, 0x3b, 0x4e, 0xd9, 0x09, + 0x62, 0xef, 0x76, 0xba, 0x63, 0x2d, 0x79, 0x97, 0xc5, 0x2a, 0x52, 0x56, + 0xa6, 0x8b, 0x80, 0x46, 0x17, 0xcc, 0xc1, 0x04, 0x6e, 0x0f, 0x83, 0xd2, + 0xfa, 0x11, 0xf0, 0x98, 0x50, 0x85, 0x57, 0x00, 0x66, 0x21, 0x26, 0x64, + 0x6e, 0x67, 0x4e, 0x0f, 0x1e, 0x3c, 0x10, 0xe7, 0xf7, 0xf2, 0x9c, 0x18, + 0x21, 0x53, 0xf9, 0x11, 0xc4, 0x3d, 0x04, 0xc2, 0x5e, 0x53, 0xda, 0xed, + 0xcc, 0xb1, 0xb7, 0xa3, 0x1c, 0x81, 0x27, 0x31, 0xd6, 0xa9, 0x95, 0xfe, + 0xee, 0x8a, 0x4e, 0x76, 0x9d, 0x1f, 0x81, 0x9e, 0xbe, 0x5b, 0x73, 0x9d, + 0xaf, 0x65, 0x7b, 0xdf, 0x25, 0x60, 0x81, 0xe2, 0x76, 0xdb, 0x78, 0x82, + 0x6d, 0xb6, 0x74, 0xe0, 0xe0, 0x21, 0x17, 0xdc, 0xa1, 0x61, 0x24, 0x67, + 0x23, 0x1b, 0xf9, 0x4e, 0x8f, 0x95, 0x60, 0x29, 0xf7, 0xd4, 0x73, 0x58, + 0x17, 0x26, 0x71, 0x0f, 0x3e, 0x04, 0xf4, 0xd1, 0x2b, 0x83, 0x5f, 0x40, + 0x9d, 0x0f, 0x18, 0xed, 0xed, 0xaa, 0x53, 0x44, 0x94, 0xd6, 0x6f, 0xfc, + 0xb3, 0xe5, 0xd7, 0x84, 0xcb, 0x97, 0xaf, 0x50, 0xbd, 0xad, 0x7b, 0xa0, + 0xf3, 0x6f, 0x15, 0x1f, 0x8a, 0x60, 0xde, 0xea, 0xf7, 0xe4, 0xb6, 0x6e, + 0xc7, 0x77, 0xb5, 0x6c, 0x65, 0xd7, 0xde, 0x55, 0x7c, 0x7f, 0xc9, 0x42, + 0x76, 0xb7, 0x9d, 0xa5, 0x1c, 0x19, 0x18, 0x8f, 0x4d, 0xa4, 0x23, 0xd8, + 0x93, 0xcf, 0xaa, 0xdd, 0x2f, 0x76, 0x6a, 0x46, 0x7b, 0xd9, 0x2b, 0x68, + 0x3b, 0xd0, 0x94, 0xc3, 0x1a, 0x92, 0xab, 0x34, 0xd9, 0x26, 0xe6, 0x4b, + 0x5d, 0xd0, 0xf9, 0x31, 0x0c, 0x23, 0x9d, 0x1f, 0x43, 0xeb, 0xd7, 0xd0, + 0x09, 0xab, 0xd6, 0xf2, 0x2c, 0x43, 0x3f, 0x34, 0x6b, 0xd6, 0xec, 0x8b, + 0xe4, 0xd7, 0xdc, 0x25, 0xd5, 0x65, 0xd5, 0x36, 0xd4, 0x79, 0x8a, 0xe2, + 0x36, 0xed, 0xc1, 0x77, 0xd4, 0xec, 0xd5, 0xab, 0xf3, 0x35, 0x60, 0x39, + 0x58, 0xa4, 0x27, 0xf7, 0x0c, 0xbe, 0x4b, 0x65, 0x92, 0x72, 0x74, 0xd2, + 0x69, 0x8a, 0xfd, 0x27, 0xe5, 0x8f, 0x8a, 0x8a, 0xa2, 0x8d, 0xd1, 0x26, + 0x72, 0x06, 0xee, 0xc8, 0xb3, 0xb1, 0xdd, 0xe9, 0xcb, 0x41, 0xf1, 0x83, + 0x60, 0x5d, 0x98, 0xae, 0xef, 0x07, 0x81, 0x7a, 0x1f, 0x64, 0xd5, 0x42, + 0xda, 0x6a, 0xe5, 0xcd, 0x9b, 0x57, 0x1f, 0x69, 0xcf, 0x9e, 0x23, 0x47, + 0x0e, 0xf9, 0x9c, 0x2b, 0x57, 0x2e, 0x32, 0x36, 0x36, 0xd6, 0xfc, 0x9b, + 0x7c, 0xce, 0x99, 0x33, 0xa7, 0x78, 0x96, 0xb1, 0x89, 0x89, 0x89, 0x7c, + 0x2e, 0x54, 0xa8, 0x90, 0xb0, 0x67, 0xd1, 0xb6, 0xcb, 0x2e, 0x4b, 0xac, + 0x30, 0xb6, 0xbd, 0x4d, 0xef, 0x07, 0xb1, 0x02, 0x2c, 0x4e, 0x23, 0xf7, + 0x54, 0x3e, 0x6a, 0x1f, 0x0b, 0x46, 0x2a, 0x47, 0xa7, 0x39, 0xba, 0x9e, + 0x96, 0x76, 0xd9, 0x99, 0x85, 0x5d, 0x2e, 0xf3, 0xe9, 0x30, 0xdf, 0x6b, + 0xb3, 0x9f, 0x67, 0xe2, 0xce, 0xbc, 0x22, 0xdf, 0xc3, 0x33, 0x94, 0x6d, + 0x5c, 0x0e, 0x96, 0xdc, 0x26, 0x2c, 0x58, 0x17, 0xa6, 0x08, 0xf9, 0xed, + 0xab, 0x08, 0x7b, 0x29, 0x69, 0x73, 0xd4, 0xb5, 0x6b, 0x57, 0x71, 0x27, + 0xe2, 0x57, 0x21, 0xec, 0xa8, 0x8a, 0x17, 0x2f, 0x2e, 0xce, 0x5f, 0xb4, + 0x7a, 0x50, 0x77, 0x16, 0x72, 0xb2, 0x9d, 0x6d, 0xfa, 0x57, 0x73, 0x1b, + 0xff, 0x0b, 0xcc, 0x66, 0xb9, 0xa7, 0x28, 0x77, 0xf6, 0xc8, 0xa3, 0xca, + 0x11, 0x7c, 0xed, 0xc0, 0x40, 0x76, 0x41, 0xef, 0xfd, 0x91, 0x2c, 0xb7, + 0x38, 0x67, 0xaa, 0xfb, 0xab, 0x5d, 0x6a, 0x4a, 0x9b, 0xf2, 0xa3, 0x6c, + 0x57, 0x7e, 0x88, 0x67, 0xa3, 0xee, 0xbc, 0x2a, 0x73, 0xe0, 0x15, 0x8a, + 0x0d, 0xeb, 0xc3, 0x06, 0xee, 0x23, 0x97, 0x80, 0xd1, 0x61, 0xc6, 0x14, + 0x76, 0x5e, 0xda, 0x3f, 0x09, 0xf9, 0xe5, 0xbd, 0x17, 0x5f, 0x1b, 0x84, + 0xfd, 0x5c, 0xc5, 0x8a, 0x15, 0xa9, 0x5e, 0xbd, 0x7a, 0xd2, 0xb7, 0x55, + 0x84, 0x4b, 0x97, 0x2f, 0x53, 0x8e, 0xa9, 0xe8, 0x13, 0x97, 0xc9, 0xbe, + 0x4d, 0xe7, 0xcf, 0x30, 0x99, 0x8f, 0x07, 0x47, 0x81, 0x61, 0x60, 0x30, + 0x9b, 0x5b, 0xf4, 0x61, 0xbb, 0xf5, 0x1e, 0x8a, 0xed, 0xfa, 0x2f, 0x03, + 0x9d, 0x32, 0x7a, 0x95, 0xd4, 0x8b, 0x3d, 0xe7, 0x4c, 0x29, 0x98, 0x57, + 0x5e, 0x81, 0x6c, 0x5f, 0x7f, 0x8c, 0xcb, 0xc2, 0x4b, 0xb9, 0x63, 0x48, + 0xeb, 0xc7, 0x61, 0x2b, 0xca, 0x81, 0xf5, 0x61, 0xfd, 0x47, 0xf4, 0x91, + 0xb6, 0x13, 0x45, 0x32, 0x99, 0xc9, 0x2f, 0xf4, 0x42, 0xd8, 0x0c, 0x09, + 0x3b, 0xcc, 0x2c, 0x11, 0xe3, 0x05, 0x07, 0x61, 0x4b, 0x28, 0xec, 0xdf, + 0x85, 0xfd, 0xbe, 0xb6, 0xff, 0x9e, 0xb3, 0xce, 0x1e, 0x7a, 0xfe, 0x3e, + 0x43, 0x3f, 0x0e, 0xd5, 0x80, 0x34, 0x32, 0x77, 0x05, 0x9d, 0xd9, 0xfc, + 0xa4, 0x3d, 0x4c, 0x24, 0x7e, 0xf6, 0x93, 0xe5, 0x9a, 0x36, 0xb8, 0x1f, + 0x70, 0xa0, 0xf0, 0x77, 0x86, 0x72, 0xd6, 0x7d, 0x8e, 0x67, 0x60, 0xa7, + 0xc0, 0x49, 0x9e, 0x8d, 0xfb, 0x73, 0x59, 0x78, 0x73, 0x59, 0xec, 0x17, + 0x3a, 0xc1, 0x6d, 0x63, 0xb6, 0x7f, 0x4e, 0xdd, 0x9a, 0x33, 0xbd, 0xfc, + 0xe2, 0x7e, 0x4f, 0xd1, 0x9e, 0x45, 0x9f, 0x97, 0x2d, 0xd0, 0xfe, 0xa5, + 0x7d, 0x1b, 0x07, 0xd9, 0x16, 0x0c, 0x0c, 0x0c, 0xa4, 0x7d, 0x18, 0x82, + 0x1c, 0x1b, 0xf3, 0xf5, 0xf2, 0x52, 0x74, 0x7c, 0x18, 0xeb, 0x77, 0x5f, + 0x96, 0xb9, 0x3b, 0xdf, 0xdb, 0xd4, 0x51, 0xc8, 0xcb, 0xa6, 0x13, 0xad, + 0x40, 0x0b, 0xe5, 0x4e, 0x25, 0xa3, 0x26, 0xc9, 0x74, 0xe8, 0xb0, 0x77, + 0x3a, 0xf9, 0xed, 0x5c, 0xa7, 0xd1, 0x15, 0x9e, 0x75, 0x5e, 0xe4, 0x5d, + 0x87, 0x08, 0xde, 0x79, 0x0c, 0xd5, 0x2b, 0x8f, 0x13, 0xbc, 0x33, 0xe1, + 0xcb, 0x65, 0xe1, 0x09, 0x5a, 0x0d, 0xc8, 0x27, 0xee, 0xdb, 0xd1, 0x20, + 0xfa, 0xb7, 0x54, 0xf2, 0xb7, 0x69, 0xd3, 0x46, 0xf4, 0xff, 0xa2, 0x6e, + 0x85, 0x0e, 0x64, 0x89, 0xb0, 0xbb, 0xad, 0x5c, 0xb9, 0xb2, 0xf6, 0xf7, + 0x0e, 0x0e, 0x0e, 0x42, 0x7e, 0xe1, 0xe3, 0xa3, 0x7d, 0x87, 0x59, 0xb5, + 0xae, 0x8a, 0xcc, 0x3d, 0x85, 0x5e, 0x73, 0x1d, 0xff, 0x9a, 0x46, 0xde, + 0xa6, 0xa0, 0x09, 0xdf, 0x23, 0xd5, 0x10, 0x34, 0x00, 0x30, 0x87, 0x59, + 0x6a, 0xe9, 0x9a, 0x4e, 0xfe, 0x3d, 0xae, 0xed, 0x29, 0x41, 0xe3, 0xd7, + 0xc0, 0xb3, 0xcf, 0xab, 0x20, 0x26, 0x55, 0x99, 0xa4, 0xf7, 0x43, 0x39, + 0xfc, 0x0c, 0xeb, 0x82, 0xe1, 0x03, 0xc4, 0x1d, 0xb4, 0x1a, 0x84, 0xbe, + 0xa6, 0x92, 0xff, 0xa7, 0x9f, 0x7e, 0xa2, 0xf1, 0xe3, 0xc7, 0x53, 0x76, + 0x03, 0xee, 0xa8, 0x11, 0x63, 0x62, 0x5a, 0xf9, 0xc5, 0x9d, 0x4a, 0xda, + 0x77, 0x8c, 0x18, 0x89, 0x19, 0x58, 0xeb, 0x44, 0x98, 0x07, 0xb0, 0xbc, + 0xcd, 0x59, 0xd6, 0x9f, 0xf5, 0x64, 0xad, 0xcf, 0x57, 0x80, 0xd4, 0x05, + 0xb5, 0x41, 0x2d, 0xe5, 0x4a, 0x92, 0xfe, 0x63, 0x5c, 0xd3, 0xf5, 0x7d, + 0xbb, 0x5d, 0x2b, 0x29, 0x7e, 0x1e, 0xf2, 0x4e, 0x2d, 0xf6, 0xf5, 0x50, + 0x76, 0x5c, 0x53, 0x95, 0xcb, 0x35, 0xbd, 0x32, 0xb9, 0x20, 0xda, 0xff, + 0x51, 0x23, 0x4a, 0x4e, 0x4e, 0x56, 0x12, 0xd2, 0xe9, 0xff, 0xdf, 0x22, + 0x3f, 0xeb, 0xbf, 0xd6, 0xaf, 0x27, 0xcf, 0x0f, 0xe8, 0x9d, 0x1b, 0x69, + 0x64, 0x4d, 0x23, 0x67, 0x0d, 0x50, 0x9d, 0xcd, 0xcf, 0xaa, 0xf2, 0x5d, + 0x5e, 0x95, 0x94, 0xfb, 0xbc, 0x1a, 0xb4, 0x75, 0x11, 0x32, 0xa7, 0xf2, + 0xbf, 0xb7, 0x75, 0xcd, 0xa9, 0xf5, 0x0d, 0x79, 0xa2, 0xe7, 0x1f, 0xf2, + 0x50, 0xf1, 0x11, 0xd1, 0xf9, 0xc1, 0xe8, 0x95, 0xcd, 0x0d, 0xb0, 0xdc, + 0xaa, 0x28, 0x59, 0x5b, 0x5b, 0xeb, 0x23, 0xc6, 0xed, 0xbf, 0x45, 0x7e, + 0xdc, 0xd5, 0x9b, 0xea, 0x3d, 0x65, 0xeb, 0x6f, 0x62, 0x3f, 0x18, 0x50, + 0x45, 0x77, 0x5f, 0x99, 0xce, 0xd7, 0x84, 0x29, 0x93, 0xda, 0xe7, 0xa4, + 0x64, 0x75, 0x17, 0x21, 0x73, 0x2a, 0xff, 0xce, 0x43, 0xde, 0xa6, 0x62, + 0x87, 0x41, 0xf2, 0x9a, 0x79, 0xc5, 0xbc, 0x04, 0x5a, 0x3f, 0x1a, 0x05, + 0x6d, 0x59, 0x0d, 0x1b, 0x63, 0x22, 0xe6, 0x35, 0xfa, 0x88, 0xfe, 0xeb, + 0x6f, 0x91, 0x1f, 0x76, 0xfc, 0xa9, 0xde, 0x93, 0xb3, 0xe0, 0x00, 0x9d, + 0x0f, 0x4d, 0x09, 0x7d, 0x3f, 0x1a, 0xbe, 0x43, 0xba, 0xa8, 0x44, 0x77, + 0x97, 0x74, 0x61, 0xc5, 0xb4, 0xac, 0x60, 0xe9, 0x83, 0xfa, 0x77, 0xbe, + 0xc8, 0xbe, 0x3b, 0x28, 0x00, 0x76, 0x73, 0x1f, 0x54, 0xa9, 0xf9, 0xa8, + 0x47, 0x26, 0x7e, 0x38, 0x6e, 0x6e, 0xfd, 0x44, 0x12, 0xff, 0x72, 0xfd, + 0x17, 0x61, 0xdc, 0x24, 0xcc, 0x4c, 0xf2, 0x41, 0xa6, 0xbc, 0x7a, 0xe4, + 0xc9, 0x80, 0xdc, 0xa9, 0x31, 0xca, 0x7d, 0x50, 0xc8, 0x9c, 0x6a, 0x7f, + 0x33, 0xe8, 0xa8, 0x01, 0xc1, 0xd8, 0x0c, 0xca, 0x90, 0x86, 0xe7, 0x69, + 0x48, 0x66, 0x9e, 0x29, 0xb8, 0x39, 0xf6, 0xfd, 0xf7, 0xc9, 0x3f, 0xce, + 0x5d, 0x98, 0x9a, 0x4a, 0x0c, 0xd2, 0xa0, 0xfa, 0x04, 0x86, 0x86, 0x1a, + 0xf9, 0x75, 0x7b, 0x9c, 0x3e, 0x6e, 0xa6, 0xca, 0x1d, 0x7a, 0x0f, 0x98, + 0x24, 0xe6, 0xbe, 0x8a, 0x7d, 0x80, 0xd2, 0xf8, 0x01, 0xdd, 0x52, 0xfc, + 0x80, 0xc6, 0x0d, 0x32, 0x11, 0x73, 0x76, 0x7d, 0xfe, 0x56, 0xfd, 0xd7, + 0x7f, 0x4f, 0xbe, 0x9c, 0x83, 0x32, 0xf5, 0x03, 0xca, 0xa5, 0xa0, 0xdc, + 0xe7, 0xc7, 0x98, 0x32, 0x85, 0xcd, 0x0e, 0x0a, 0x99, 0x53, 0xf5, 0x7f, + 0xae, 0xd6, 0x39, 0x34, 0x32, 0xe9, 0xfc, 0x9b, 0x12, 0xf4, 0x7c, 0x9c, + 0x62, 0xc1, 0x35, 0x36, 0xa4, 0xbc, 0xc2, 0x77, 0xfe, 0x5d, 0xc4, 0xae, + 0xed, 0x82, 0xc2, 0xff, 0xb6, 0xfe, 0xaf, 0x66, 0xe9, 0xcd, 0xd2, 0x54, + 0xbd, 0x34, 0x9b, 0x1e, 0x17, 0x67, 0x53, 0xd2, 0xa2, 0xec, 0x2b, 0x55, + 0x58, 0xcf, 0x5f, 0xca, 0x0c, 0x14, 0x60, 0xca, 0x97, 0x4c, 0xd5, 0xff, + 0x29, 0x7e, 0xbe, 0x56, 0x15, 0x74, 0xf2, 0xc5, 0xe8, 0xc9, 0x18, 0x0d, + 0x2e, 0xb0, 0x41, 0x7b, 0x04, 0x60, 0x3f, 0x24, 0x3a, 0xa3, 0x18, 0xb8, + 0xfb, 0xae, 0x33, 0x14, 0xf3, 0xb1, 0x7f, 0xb9, 0xfe, 0x8b, 0xbd, 0xa2, + 0xea, 0xb9, 0xbc, 0x14, 0x3f, 0x24, 0xc5, 0x0c, 0x98, 0xfd, 0x90, 0x14, + 0x93, 0xda, 0xb2, 0xe0, 0x1f, 0x7a, 0x65, 0x53, 0x42, 0xaf, 0x7c, 0x9a, + 0xfd, 0xa8, 0x19, 0xff, 0x74, 0xc1, 0x75, 0x7b, 0x1b, 0x45, 0xce, 0x48, + 0x96, 0x33, 0x1c, 0x84, 0xb2, 0xac, 0x67, 0xc1, 0x69, 0x55, 0x86, 0x7e, + 0x4c, 0x29, 0x6e, 0x18, 0x03, 0x86, 0xf4, 0xfb, 0xe4, 0xfc, 0xe7, 0xe7, + 0x9f, 0x7f, 0xa6, 0xc1, 0x83, 0x07, 0x53, 0x76, 0x83, 0xb8, 0x0f, 0xb1, + 0x64, 0xc9, 0x92, 0x9f, 0x9c, 0xff, 0x0c, 0x1b, 0x3a, 0x12, 0x3e, 0x4c, + 0x49, 0xa9, 0xfc, 0x98, 0xea, 0x2a, 0xa6, 0xe8, 0xa9, 0xca, 0xa4, 0x8a, + 0x5e, 0xb9, 0x94, 0xe7, 0x72, 0x19, 0xda, 0xdb, 0x25, 0xdd, 0x3b, 0xdd, + 0xf6, 0x60, 0xc1, 0x1c, 0xa2, 0x27, 0x6b, 0x30, 0x38, 0x01, 0x02, 0xf5, + 0xe4, 0xf5, 0xe1, 0x3b, 0x1f, 0x3d, 0x80, 0x3b, 0xfb, 0x6e, 0xd9, 0x63, + 0x0f, 0xa8, 0x65, 0x5e, 0xe1, 0xf3, 0xa7, 0x21, 0xed, 0xfc, 0x57, 0xf8, + 0xaf, 0x88, 0xfc, 0x8b, 0x7d, 0x01, 0xb1, 0x9e, 0xfb, 0x14, 0xc2, 0xa7, + 0x45, 0xec, 0x07, 0x88, 0xfb, 0x29, 0x33, 0x9a, 0xff, 0x6a, 0xdf, 0x51, + 0xb9, 0x40, 0x4f, 0xea, 0xac, 0xe7, 0xd3, 0xd5, 0x82, 0xef, 0x8a, 0x6c, + 0xcc, 0xe5, 0xf1, 0x23, 0xfb, 0x75, 0xd5, 0xe1, 0x7b, 0x2c, 0x6b, 0xf0, + 0xf5, 0x7c, 0xd5, 0xc0, 0x8a, 0x45, 0xe9, 0xe5, 0x77, 0x77, 0xdb, 0x4b, + 0x1f, 0x82, 0x0c, 0x75, 0xf2, 0xfa, 0xf2, 0x9d, 0x9a, 0x47, 0xd8, 0x57, + 0xed, 0xa0, 0x9e, 0xcc, 0x0e, 0x80, 0xfd, 0xa8, 0x68, 0x1b, 0xd6, 0x04, + 0xe6, 0x26, 0xba, 0x3d, 0xe6, 0xf4, 0xfa, 0xaf, 0xdc, 0xc1, 0xe0, 0xe6, + 0x46, 0x16, 0x16, 0x16, 0xf4, 0xd7, 0x5f, 0x7f, 0x65, 0xc9, 0xee, 0xdd, + 0xbb, 0x85, 0xdf, 0x50, 0x66, 0xfa, 0x2f, 0xd7, 0x87, 0x9d, 0x73, 0xfb, + 0x50, 0x3f, 0xbe, 0xa3, 0xb2, 0x1b, 0xe8, 0xc4, 0x65, 0xd1, 0x06, 0xb4, + 0x64, 0x1f, 0xb7, 0x5f, 0xd2, 0x94, 0xc7, 0x0f, 0x42, 0x47, 0x8c, 0x52, + 0xc8, 0xd3, 0xe3, 0x50, 0x86, 0xb6, 0x0c, 0xe7, 0xad, 0x4c, 0xa1, 0xd3, + 0x5c, 0xc7, 0x9e, 0xec, 0x6c, 0xb0, 0x8f, 0x65, 0x76, 0x04, 0xb6, 0x7c, + 0x31, 0xa2, 0x35, 0xd8, 0x0c, 0xd6, 0x29, 0xce, 0x2c, 0xea, 0xc5, 0xd8, + 0x17, 0x58, 0x38, 0x42, 0x93, 0x94, 0xd8, 0xbf, 0x12, 0xfe, 0x3e, 0x72, + 0xcf, 0xe6, 0x5b, 0x84, 0xb4, 0xf2, 0x2f, 0x9f, 0xba, 0x17, 0x2e, 0x3c, + 0x1f, 0x32, 0xf4, 0xc3, 0xea, 0x9a, 0xa6, 0x2c, 0x5a, 0x81, 0xe6, 0xa0, + 0xa9, 0xe6, 0xef, 0x36, 0xe5, 0x0c, 0x10, 0x36, 0x67, 0x19, 0xee, 0x7f, + 0xb8, 0x2c, 0xc6, 0x44, 0x79, 0x7f, 0x1a, 0x99, 0xed, 0xd9, 0xd9, 0xc2, + 0x86, 0x2f, 0xc7, 0xdc, 0x04, 0xd6, 0xa6, 0x71, 0xe2, 0xf9, 0x13, 0x6b, + 0xa3, 0x81, 0x86, 0x74, 0xf6, 0xd4, 0x49, 0x91, 0x94, 0xf8, 0xdb, 0x51, + 0x62, 0xbf, 0x4b, 0xf8, 0xd6, 0x4b, 0xbb, 0xa0, 0xaf, 0x0d, 0xfa, 0xf2, + 0x47, 0x9c, 0x8f, 0xa4, 0x71, 0x26, 0x67, 0xa5, 0x2b, 0xd3, 0x74, 0x3d, + 0x7f, 0xb4, 0xe1, 0x60, 0x10, 0xe8, 0xcb, 0x57, 0x71, 0xf6, 0x60, 0xb7, + 0xa6, 0x8e, 0x5c, 0x16, 0x6d, 0xb9, 0x2c, 0x7e, 0xfb, 0xc9, 0x21, 0xd3, + 0xf7, 0xb8, 0x58, 0xcf, 0x52, 0x9c, 0x4b, 0xec, 0xa5, 0x7e, 0xeb, 0x7c, + 0xee, 0xb6, 0x82, 0x8d, 0x7a, 0x72, 0x2f, 0x01, 0x7f, 0xf1, 0x9d, 0xa7, + 0xe6, 0x60, 0x9c, 0x92, 0x01, 0x97, 0xee, 0x65, 0x35, 0x7b, 0x17, 0xe2, + 0xde, 0x59, 0x31, 0x0f, 0x10, 0x6b, 0x59, 0xf1, 0xf7, 0x5f, 0xbe, 0x0a, + 0xdc, 0x5f, 0x2b, 0xe4, 0x97, 0x67, 0xba, 0xd3, 0xaa, 0xdb, 0x2b, 0x7e, + 0x60, 0xc0, 0x82, 0xb3, 0x30, 0x4d, 0xaf, 0x1c, 0x46, 0xf0, 0x9d, 0xa9, + 0xfd, 0x41, 0x6f, 0xd6, 0x89, 0xee, 0xda, 0xb2, 0x50, 0xd3, 0xba, 0xe5, + 0x8e, 0x99, 0xca, 0x1f, 0x16, 0x16, 0x4a, 0x57, 0x57, 0x9b, 0xe8, 0xea, + 0x7a, 0x0b, 0xcb, 0xbd, 0x46, 0x23, 0xb7, 0x7c, 0x69, 0xa6, 0x7e, 0x64, + 0x6a, 0xbc, 0x64, 0x47, 0xaf, 0x9f, 0xb5, 0x73, 0x6b, 0x17, 0x17, 0x17, + 0xca, 0x9f, 0x3f, 0xff, 0x17, 0xef, 0x7f, 0xea, 0x93, 0x2f, 0x5f, 0x3e, + 0x9a, 0xdb, 0x6a, 0x0b, 0xaa, 0xe5, 0x83, 0xe2, 0x47, 0x96, 0xc6, 0x05, + 0x72, 0x26, 0x97, 0xc3, 0x44, 0x30, 0x56, 0x94, 0x03, 0x67, 0x6b, 0x80, + 0x9e, 0x4e, 0xb4, 0x35, 0x0d, 0x11, 0xb6, 0x79, 0x9f, 0xdc, 0xff, 0x76, + 0x9c, 0xd3, 0x48, 0x69, 0xdb, 0x1b, 0xf4, 0xe4, 0x5e, 0xca, 0x17, 0xc2, + 0xce, 0x15, 0xba, 0xce, 0xf7, 0xcd, 0x8e, 0xe7, 0x97, 0x0c, 0xe4, 0x4e, + 0xa8, 0x93, 0xa2, 0x60, 0xef, 0x1a, 0x62, 0xbf, 0xb8, 0xd3, 0xcf, 0x42, + 0x0f, 0xbe, 0xd9, 0xfe, 0xb7, 0xd8, 0x3b, 0x5b, 0xd6, 0xc6, 0x0a, 0xdd, + 0xf0, 0x6b, 0xd9, 0x3c, 0x1d, 0xb8, 0x39, 0x6e, 0x16, 0x59, 0x64, 0x5d, + 0x58, 0xc8, 0xd9, 0xfb, 0x43, 0xaa, 0xa4, 0xae, 0x1c, 0x46, 0x82, 0xa1, + 0x9c, 0xcd, 0xd1, 0x6d, 0x6d, 0x29, 0xab, 0xe0, 0xb9, 0xcf, 0x8e, 0x9e, + 0x2f, 0x37, 0xc4, 0x20, 0xc1, 0x72, 0x2f, 0xcc, 0xa0, 0x80, 0xc7, 0x70, + 0xa2, 0xfd, 0xf8, 0xee, 0xd9, 0x8e, 0x7a, 0xbe, 0x60, 0xc2, 0x07, 0xaf, + 0x02, 0xda, 0x42, 0x8d, 0xb2, 0x74, 0xf6, 0xe4, 0x89, 0xaf, 0x3e, 0xff, + 0x08, 0x3f, 0x77, 0x9e, 0x36, 0x57, 0x71, 0xa0, 0x50, 0xd4, 0xfb, 0x09, + 0x3d, 0x1f, 0x30, 0x47, 0x6e, 0x9e, 0xdb, 0xb4, 0xee, 0xb0, 0xba, 0x66, + 0x39, 0x9b, 0xd5, 0x73, 0xaa, 0x5e, 0x39, 0x0c, 0x36, 0xba, 0x4f, 0x5e, + 0x07, 0xbd, 0xb3, 0x12, 0x5f, 0xf6, 0x31, 0x2e, 0x13, 0xaa, 0x2a, 0x72, + 0xcf, 0xd7, 0x4b, 0x6c, 0x0a, 0xd7, 0xf9, 0x48, 0xcd, 0xa5, 0xc4, 0xdc, + 0xb0, 0x7e, 0xcd, 0xdc, 0x0f, 0xee, 0x82, 0xb1, 0x11, 0xd9, 0x0e, 0x1f, + 0x45, 0x37, 0x6e, 0xdc, 0xf8, 0x6c, 0xf9, 0xc5, 0xfa, 0xc4, 0x76, 0x82, + 0x1d, 0x05, 0x19, 0x87, 0x65, 0xe8, 0x07, 0x77, 0x50, 0xcf, 0x0f, 0xce, + 0x9a, 0x9b, 0xa9, 0x25, 0x58, 0x0e, 0x16, 0x71, 0x95, 0xcd, 0xd2, 0x2b, + 0x87, 0xe1, 0x3f, 0xec, 0x95, 0x73, 0xde, 0xec, 0x04, 0x2f, 0x37, 0x7b, + 0x7a, 0x34, 0xcd, 0x48, 0x5f, 0x99, 0x74, 0x9d, 0xec, 0x40, 0xd9, 0x98, + 0x74, 0x97, 0x54, 0xb7, 0x60, 0xd9, 0xeb, 0x80, 0xca, 0x3c, 0xe1, 0x2c, + 0xc8, 0xf7, 0x0f, 0xb3, 0x1f, 0xdd, 0x09, 0x93, 0x7f, 0xd0, 0xb0, 0x02, + 0x65, 0xa8, 0x77, 0xd7, 0xee, 0x62, 0xae, 0x9c, 0x99, 0xfc, 0xf2, 0xcc, + 0x68, 0xe2, 0xa8, 0x09, 0xd4, 0x27, 0x77, 0x57, 0xf2, 0xcf, 0xe1, 0x49, + 0x1f, 0xa5, 0x1f, 0x9d, 0xb2, 0x1c, 0x8b, 0x57, 0x29, 0x53, 0xf1, 0x73, + 0xda, 0x32, 0x48, 0x7d, 0xf5, 0xf6, 0x0e, 0xee, 0xae, 0xd6, 0x66, 0xd0, + 0x64, 0x27, 0x1a, 0xdf, 0xa4, 0x23, 0x5e, 0xbe, 0x94, 0xdd, 0x20, 0xc6, + 0xac, 0x3d, 0xe3, 0xb0, 0x99, 0x36, 0x99, 0xfb, 0xf6, 0x51, 0xac, 0xef, + 0xfd, 0x35, 0x97, 0x62, 0xa7, 0x91, 0x9d, 0xfd, 0xf0, 0xe4, 0x62, 0xa4, + 0x08, 0x2f, 0xbc, 0x0c, 0x0c, 0x79, 0x41, 0x5e, 0x82, 0x37, 0x67, 0x7e, + 0xc4, 0x72, 0xba, 0x39, 0xf9, 0x1a, 0x36, 0xa5, 0x1d, 0x45, 0xdb, 0xd3, + 0x18, 0xfc, 0x8d, 0x40, 0xe7, 0x5e, 0x7f, 0x91, 0x5b, 0xdf, 0x65, 0x34, + 0x31, 0x57, 0x7b, 0xda, 0x5a, 0x68, 0x22, 0xf9, 0x18, 0xad, 0xc4, 0xd2, + 0xfa, 0x38, 0x29, 0x86, 0x1d, 0xf7, 0xc0, 0x4b, 0xf6, 0xc3, 0x53, 0x96, + 0x9e, 0xd7, 0x55, 0x72, 0x19, 0xa2, 0xf8, 0xe1, 0xa5, 0x29, 0x03, 0x3b, + 0xee, 0x13, 0xb6, 0x72, 0xd7, 0xb5, 0x9a, 0x75, 0x61, 0x31, 0x7e, 0x3f, + 0xa3, 0xb3, 0x4d, 0xb6, 0xce, 0x3e, 0xf5, 0x43, 0x14, 0xf6, 0x61, 0xcf, + 0xf6, 0xcd, 0xad, 0x1b, 0x50, 0xfa, 0x82, 0x9e, 0x2c, 0x7b, 0x3b, 0x3d, + 0xd9, 0xeb, 0xc9, 0x49, 0x65, 0x36, 0xfd, 0xf8, 0xda, 0xf1, 0x26, 0xf5, + 0x70, 0x60, 0x9e, 0xc6, 0x8f, 0x6f, 0x1f, 0xa5, 0xf7, 0xe3, 0x7b, 0x2a, + 0xfd, 0x59, 0xdf, 0x20, 0xb9, 0xb4, 0x7e, 0x7c, 0x67, 0x40, 0x20, 0x97, + 0x81, 0x07, 0xdf, 0x59, 0x6d, 0xcf, 0xd7, 0xa1, 0x5b, 0xe9, 0x0d, 0x5b, + 0x93, 0x0a, 0xfa, 0xc9, 0xb9, 0xdd, 0x97, 0x04, 0x87, 0x4d, 0xcb, 0xe9, + 0x59, 0x3f, 0x43, 0x65, 0x20, 0xed, 0xc1, 0x7d, 0x7c, 0x5b, 0xd0, 0x5c, + 0x4f, 0xf6, 0xea, 0xa0, 0x3c, 0x2f, 0xb0, 0xcc, 0x34, 0xf7, 0x3f, 0x1b, + 0x81, 0x7c, 0xbc, 0x21, 0x55, 0x89, 0x37, 0x26, 0x9b, 0xf0, 0x21, 0x44, + 0x1f, 0x3e, 0x90, 0x9b, 0xc6, 0x07, 0x38, 0x6b, 0xf8, 0x00, 0xd7, 0x15, + 0x78, 0x83, 0x60, 0x10, 0x09, 0xe2, 0xc0, 0x03, 0xa1, 0x03, 0xd2, 0x0f, + 0x30, 0x85, 0xdb, 0xc1, 0x0d, 0x95, 0xb2, 0x34, 0x3d, 0x9f, 0x41, 0x19, + 0xb8, 0xf1, 0xd8, 0xb0, 0x9b, 0xfb, 0x84, 0x95, 0xe8, 0xf3, 0x6c, 0xb7, + 0xb9, 0xd1, 0x97, 0x06, 0xd1, 0x0e, 0xac, 0x47, 0x77, 0xa1, 0x8f, 0xdd, + 0x65, 0x1f, 0x9f, 0x5e, 0xf6, 0xef, 0x79, 0x61, 0x55, 0x0a, 0x14, 0xd2, + 0xe8, 0xbd, 0x01, 0xdf, 0x7f, 0x5d, 0x98, 0x37, 0x1d, 0xab, 0xf3, 0x06, + 0x6d, 0x0b, 0x3e, 0x98, 0xe8, 0xc7, 0x87, 0x73, 0xd3, 0xf5, 0xe4, 0xdf, + 0xae, 0x18, 0x30, 0xb0, 0x1f, 0xa1, 0x72, 0xc8, 0x7f, 0x15, 0xdc, 0x61, + 0x1d, 0x78, 0x27, 0xfc, 0xb2, 0xe5, 0x9f, 0x3c, 0xb8, 0xc7, 0x7d, 0xc1, + 0x25, 0x10, 0xae, 0x52, 0x96, 0x6a, 0x01, 0x5c, 0x06, 0x9e, 0x5c, 0x06, + 0x8e, 0xa2, 0x0c, 0x0c, 0xde, 0x93, 0x45, 0xff, 0x6d, 0x9f, 0xad, 0xf7, + 0x19, 0x9d, 0xc1, 0xd9, 0x75, 0xab, 0xa5, 0x4c, 0xa6, 0x9b, 0x69, 0xfe, + 0x38, 0x00, 0xcb, 0x5e, 0x11, 0x94, 0xe6, 0x36, 0x9f, 0x57, 0xa3, 0xf7, + 0x26, 0x20, 0x3f, 0xd7, 0x7d, 0x05, 0xde, 0x8c, 0x6e, 0xcc, 0xf7, 0x70, + 0x77, 0x57, 0x0e, 0xa8, 0xd8, 0x0f, 0x51, 0x27, 0xbf, 0x35, 0x5f, 0x6e, + 0xe7, 0x09, 0xfc, 0x41, 0x08, 0x88, 0x06, 0x37, 0x14, 0x1d, 0x50, 0x7c, + 0x41, 0x65, 0x5f, 0xf8, 0x08, 0xdc, 0x01, 0xb1, 0xdc, 0x1f, 0x86, 0x81, + 0x53, 0x69, 0xca, 0x60, 0x9f, 0xb8, 0x1f, 0xa0, 0xc1, 0xf6, 0xaf, 0xf2, + 0xfd, 0x4b, 0x7b, 0x36, 0xb8, 0xbf, 0x5d, 0x25, 0x9d, 0xec, 0x35, 0x78, + 0x9c, 0x2b, 0xc3, 0x7f, 0xa0, 0xa1, 0x80, 0x46, 0xef, 0x45, 0xdd, 0xe7, + 0xd6, 0xab, 0xfb, 0x2a, 0x7c, 0xff, 0x7b, 0x13, 0x6e, 0xfb, 0xbf, 0xa5, + 0xf1, 0x63, 0x5c, 0xf8, 0x49, 0x3f, 0x46, 0x71, 0x3f, 0xbc, 0x62, 0xf0, + 0xf4, 0x4c, 0xe8, 0x80, 0xf4, 0x0b, 0x7f, 0xce, 0xed, 0xe0, 0x26, 0xb8, + 0x06, 0x2e, 0x80, 0x50, 0xfd, 0x32, 0xc0, 0x77, 0x16, 0xd5, 0x74, 0x90, + 0xb6, 0xba, 0xdf, 0x32, 0x5c, 0xc5, 0xdd, 0x30, 0xfb, 0x9b, 0x57, 0x52, + 0x36, 0x17, 0xaa, 0xf0, 0x46, 0x42, 0x71, 0x1e, 0xeb, 0x72, 0x69, 0x7c, + 0xde, 0x4d, 0xf9, 0x0f, 0x76, 0x14, 0xe3, 0xfb, 0xd7, 0x6b, 0xb0, 0xee, + 0x37, 0xe7, 0xb6, 0xdf, 0x8b, 0x0f, 0x29, 0xc7, 0x67, 0x20, 0xbf, 0x1d, + 0x70, 0x07, 0x3e, 0xe0, 0x24, 0x38, 0x0f, 0x62, 0xb8, 0x1f, 0x7c, 0x28, + 0xfb, 0x01, 0x35, 0x74, 0x00, 0xe6, 0x15, 0xda, 0x76, 0x90, 0x00, 0x62, + 0xb8, 0x3f, 0x3c, 0xa7, 0x52, 0xee, 0xad, 0x5f, 0x5e, 0xcb, 0x41, 0xce, + 0x37, 0xfe, 0x8e, 0x20, 0xf4, 0xc0, 0xb6, 0x45, 0x6d, 0xfa, 0x58, 0x9e, + 0xe7, 0x38, 0x85, 0x59, 0xef, 0x8d, 0x35, 0x7d, 0x5e, 0x1e, 0xae, 0xfb, + 0xd2, 0x7c, 0x18, 0x51, 0x9b, 0xfb, 0xfd, 0x56, 0x7c, 0x40, 0xd7, 0x9b, + 0x0f, 0x2c, 0x27, 0x82, 0x3f, 0x59, 0xfe, 0xd5, 0x6c, 0xc8, 0x60, 0xcb, + 0x63, 0xc0, 0x11, 0xee, 0x03, 0x42, 0x79, 0x1c, 0x88, 0x07, 0xf7, 0x85, + 0x0e, 0x80, 0xb7, 0x72, 0x3c, 0x7c, 0xc1, 0xed, 0x20, 0x11, 0xc4, 0xa9, + 0x94, 0xb9, 0x51, 0x38, 0xda, 0xfb, 0xf2, 0x86, 0x3b, 0xe4, 0x5e, 0xf6, + 0xdf, 0x19, 0x44, 0x7f, 0x60, 0xdd, 0xbb, 0x2b, 0x3d, 0x2b, 0x8a, 0x71, + 0x21, 0xbf, 0xbe, 0xde, 0xe7, 0xd0, 0xab, 0xfb, 0x72, 0xdc, 0xef, 0xfd, + 0xc0, 0xba, 0xdf, 0x16, 0x74, 0xe5, 0x43, 0xda, 0x11, 0x7c, 0x68, 0x3d, + 0x13, 0x2c, 0xd2, 0x93, 0x7f, 0x0f, 0x70, 0xe5, 0x3e, 0x30, 0x00, 0x9c, + 0xe5, 0x36, 0x70, 0x9d, 0xfb, 0xc1, 0x47, 0x5a, 0x1d, 0x78, 0x8b, 0x57, + 0x26, 0x73, 0x3b, 0xb8, 0x25, 0xf4, 0xdf, 0xe8, 0x01, 0xad, 0xe9, 0xbb, + 0x4d, 0x9e, 0xc3, 0xfd, 0x2b, 0x82, 0x18, 0x17, 0x1c, 0x57, 0xad, 0xa4, + 0xb3, 0x05, 0x73, 0xb3, 0xde, 0x1b, 0xeb, 0xd5, 0x7d, 0x29, 0x1e, 0xf3, + 0x6a, 0xb2, 0xee, 0x37, 0x03, 0xed, 0xf9, 0x30, 0xbe, 0x3f, 0x8f, 0x7d, + 0x93, 0xd3, 0xc8, 0xbf, 0x85, 0x0d, 0xb8, 0x5c, 0xb8, 0x0f, 0xf4, 0x03, + 0xa7, 0x40, 0x04, 0xb8, 0xc2, 0xfd, 0x60, 0x12, 0x48, 0xd6, 0xea, 0xc0, + 0x4b, 0x95, 0xf2, 0xe7, 0x6f, 0x3c, 0xf2, 0x05, 0x91, 0xd3, 0x26, 0xd7, + 0xaf, 0xee, 0xe7, 0xbf, 0x24, 0x88, 0x39, 0xd2, 0x1e, 0xac, 0xeb, 0x1e, + 0x1a, 0xe5, 0xd6, 0xab, 0xfb, 0xb2, 0x7c, 0xe0, 0x58, 0x87, 0x75, 0xbf, + 0x25, 0xb7, 0xfd, 0xdf, 0xf8, 0xa0, 0x7e, 0x14, 0x1b, 0xa9, 0xcc, 0x4a, + 0x23, 0xff, 0x2e, 0x1e, 0x03, 0x3d, 0xc0, 0x31, 0xee, 0x03, 0xc2, 0x78, + 0x1c, 0x88, 0x03, 0x89, 0xe0, 0xb1, 0x56, 0x07, 0x6e, 0x1a, 0x25, 0x92, + 0x55, 0x3b, 0x1b, 0x69, 0xa7, 0xfa, 0xef, 0x0c, 0x42, 0x17, 0x3c, 0xed, + 0x1d, 0xc8, 0xa9, 0x4a, 0x5d, 0x4a, 0x36, 0x2c, 0xcd, 0x63, 0x5e, 0x0d, + 0xd6, 0xfd, 0x5f, 0xf8, 0x92, 0xc4, 0x4e, 0xdc, 0xf7, 0x0d, 0xe2, 0xb1, + 0x7f, 0x6a, 0x1a, 0xf9, 0x37, 0x83, 0x9d, 0x3c, 0x06, 0x1e, 0xe0, 0x3e, + 0xf0, 0x38, 0x38, 0xc7, 0x6d, 0xe0, 0x1a, 0xf7, 0x83, 0x0f, 0xe8, 0x91, + 0xd1, 0x4d, 0xb2, 0xab, 0xb9, 0x97, 0x8e, 0xb8, 0x1f, 0xf9, 0xb7, 0xd4, + 0xf9, 0xa7, 0xd6, 0x8d, 0x1e, 0xf6, 0x8e, 0xe4, 0xd0, 0xe8, 0x57, 0xba, + 0x62, 0xa2, 0xe9, 0xf7, 0x9b, 0x72, 0xdb, 0xef, 0xc2, 0x7d, 0xdf, 0x10, + 0x1e, 0xfb, 0xcd, 0xc1, 0x6c, 0x96, 0x7f, 0x15, 0x1b, 0xb0, 0xd9, 0xb0, + 0x21, 0xa3, 0x3b, 0xf7, 0x81, 0x81, 0x3c, 0x17, 0x8e, 0x90, 0x77, 0x2a, + 0x44, 0x9a, 0xc2, 0xcf, 0xa7, 0xf9, 0x0e, 0xf2, 0x72, 0xf5, 0xfa, 0x66, + 0xfb, 0x8a, 0x7f, 0x47, 0x40, 0x9d, 0xc8, 0xbf, 0xe5, 0xe4, 0x38, 0x6b, + 0x11, 0x39, 0x57, 0xef, 0x40, 0x61, 0xa6, 0x4d, 0xe9, 0x9d, 0x61, 0x77, + 0xee, 0xfb, 0x86, 0x82, 0xb1, 0x9f, 0x90, 0xdf, 0x9e, 0xc7, 0x80, 0xc3, + 0xf4, 0xd6, 0xf0, 0x18, 0x9d, 0x31, 0xd9, 0x49, 0x4e, 0xb5, 0xd7, 0x93, + 0x3d, 0xec, 0x77, 0xa3, 0x2e, 0x44, 0xfd, 0x47, 0xd5, 0x77, 0x76, 0x02, + 0xf2, 0x2b, 0xd7, 0x1e, 0xee, 0x76, 0x8e, 0xe4, 0x62, 0xbe, 0x94, 0x5c, + 0xda, 0x4e, 0x24, 0xe7, 0x0a, 0xfd, 0xc9, 0x39, 0x67, 0x77, 0x3a, 0x62, + 0x3a, 0x80, 0xfc, 0x0d, 0x47, 0x90, 0xbf, 0xd1, 0x58, 0x3a, 0x6c, 0x3a, + 0x81, 0x9c, 0x72, 0x8d, 0x23, 0xe7, 0x4a, 0xb3, 0xc9, 0xe5, 0xd7, 0x95, + 0xe4, 0x3c, 0xdd, 0x9a, 0xf6, 0x3b, 0xee, 0x13, 0x3e, 0x37, 0xff, 0x75, + 0x32, 0x53, 0x36, 0xca, 0xe4, 0x7f, 0xc9, 0xff, 0xf9, 0x3f, 0x3d, 0xa8, + 0xfe, 0x1f, 0xfe, 0xa7, 0xc3, 0x3f, 0x01, 0x5b, 0x49, 0x1c, 0x91, 0xbe, + 0x86, 0x00, 0x00 +}; + +#define apple_touch_icon_png_len 4500 +static const char apple_touch_icon_png[] PROGMEM ={ + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x8c, 0x18, 0x83, 0x85, 0x00, 0x00, 0x11, + 0x5b, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xdd, 0x9b, 0x69, 0x94, 0x14, + 0x55, 0x96, 0xc7, 0x7f, 0x2f, 0x33, 0x72, 0xab, 0x7d, 0x83, 0xa2, 0xb4, + 0x6c, 0x54, 0x28, 0x28, 0x64, 0x51, 0x40, 0xa1, 0x6c, 0x59, 0xaa, 0x40, + 0x40, 0x59, 0x04, 0x77, 0xdb, 0xf1, 0x38, 0x3a, 0x38, 0xda, 0xa3, 0x23, + 0x4e, 0x8f, 0xc7, 0x66, 0xb0, 0x1d, 0xc7, 0x73, 0xfa, 0xb8, 0x8c, 0x68, + 0xdb, 0x47, 0x9b, 0x99, 0xee, 0x99, 0x61, 0x1c, 0xc6, 0xbd, 0x58, 0x04, + 0x1c, 0x59, 0x05, 0x4a, 0x40, 0x10, 0xd9, 0x5a, 0x41, 0x51, 0x91, 0x6e, + 0x2c, 0xca, 0xaa, 0x4a, 0x4a, 0xa8, 0x35, 0x2b, 0xb7, 0xc8, 0x78, 0xf3, + 0x21, 0x5e, 0x44, 0x46, 0x66, 0x65, 0x51, 0x40, 0xdb, 0xf3, 0x61, 0xa2, + 0xce, 0xe5, 0x46, 0x44, 0x46, 0x46, 0xbe, 0xff, 0xfb, 0xdf, 0x77, 0xdf, + 0x7d, 0xf7, 0x3e, 0x84, 0x61, 0x18, 0x92, 0xff, 0xe7, 0x87, 0x26, 0x84, + 0xf8, 0xb3, 0xbd, 0x5c, 0x4a, 0x49, 0x3c, 0x1e, 0xa7, 0xa1, 0xa1, 0x81, + 0x60, 0x30, 0x48, 0x67, 0x67, 0x17, 0x91, 0x70, 0x98, 0x40, 0x20, 0x40, + 0x6e, 0x5e, 0x2e, 0xa5, 0xa5, 0xa5, 0x94, 0x97, 0x97, 0xa3, 0x69, 0x1a, + 0x7f, 0xce, 0x76, 0x08, 0x8b, 0x49, 0xeb, 0x47, 0xa4, 0x4c, 0x12, 0x2b, + 0x84, 0xe8, 0xf5, 0xda, 0xf9, 0xbc, 0xf3, 0x7e, 0x30, 0x18, 0x64, 0xc7, + 0xb6, 0x83, 0x7c, 0xfe, 0xa1, 0xce, 0x1f, 0x3f, 0x81, 0xd6, 0xaf, 0xbc, + 0xe4, 0xc5, 0x2f, 0xa4, 0x48, 0x96, 0x92, 0x4f, 0x2e, 0x59, 0xba, 0x07, + 0xbf, 0x16, 0x47, 0xd2, 0x4e, 0x5c, 0x04, 0x09, 0xfb, 0xbe, 0x23, 0x7f, + 0x68, 0x9c, 0xa2, 0x2a, 0x41, 0xf1, 0x24, 0x8d, 0xf1, 0x35, 0x57, 0x52, + 0x52, 0x52, 0x92, 0xf1, 0xf7, 0x32, 0x9d, 0xf7, 0x00, 0x94, 0xa1, 0xcd, + 0xe2, 0x87, 0x30, 0xd7, 0x48, 0x24, 0xc2, 0x7b, 0xab, 0x3f, 0x64, 0xcd, + 0xab, 0x61, 0x8e, 0xee, 0xbc, 0x80, 0xfc, 0xc8, 0x58, 0x02, 0xd2, 0x4d, + 0x00, 0xc8, 0x82, 0x1e, 0xda, 0x3a, 0xcf, 0x56, 0xda, 0x12, 0x9f, 0x88, + 0xf3, 0x87, 0xc0, 0x5e, 0xf4, 0x9a, 0x20, 0xa5, 0xf7, 0x64, 0x53, 0x33, + 0xa7, 0x1a, 0xaf, 0xd7, 0xfb, 0xc3, 0x31, 0x79, 0x3e, 0x47, 0x28, 0x14, + 0xe2, 0x3f, 0x7e, 0xb7, 0x85, 0x65, 0x2f, 0x7b, 0x09, 0x37, 0x54, 0xe3, + 0x37, 0xfc, 0x29, 0x8d, 0xce, 0x3a, 0x83, 0x64, 0x67, 0x00, 0x9e, 0x05, + 0xf8, 0xd5, 0x3d, 0xe1, 0x0a, 0xb1, 0xef, 0xe2, 0x6d, 0x78, 0x7e, 0x66, + 0x30, 0x63, 0xfe, 0x74, 0xfc, 0x7e, 0xff, 0xf9, 0x83, 0x94, 0xe6, 0x61, + 0xd3, 0x9c, 0xae, 0x7b, 0x3b, 0x6a, 0x6b, 0xb7, 0xf0, 0xe4, 0xa2, 0x18, + 0xdf, 0x1f, 0x9f, 0x8e, 0x4f, 0x6a, 0x04, 0x90, 0xaa, 0xd1, 0xc2, 0xd1, + 0x70, 0x99, 0x02, 0x28, 0xa9, 0x05, 0x59, 0x48, 0x5b, 0x9b, 0xcf, 0x5a, + 0xe7, 0x82, 0x00, 0x52, 0x75, 0x94, 0xc0, 0x25, 0xa2, 0x6c, 0x1e, 0xb2, + 0x8e, 0xbc, 0x7f, 0xce, 0xa7, 0xfa, 0x86, 0x9a, 0x14, 0x93, 0x74, 0x6a, + 0xe7, 0xd0, 0x71, 0xfa, 0x84, 0xf3, 0x32, 0xd7, 0x60, 0x30, 0xc8, 0xdf, + 0xfc, 0xed, 0x56, 0xd6, 0xae, 0x9d, 0x8e, 0x2b, 0x5e, 0x4c, 0xc0, 0xd1, + 0xfb, 0xe9, 0xcc, 0x38, 0xc1, 0x59, 0x92, 0xa3, 0x00, 0x65, 0x23, 0x53, + 0xee, 0xa7, 0x33, 0x6d, 0x9b, 0x30, 0x12, 0x88, 0xd0, 0xec, 0xae, 0x67, + 0xeb, 0x6d, 0xbb, 0x98, 0xf1, 0xf2, 0x0d, 0x14, 0x17, 0x17, 0x9f, 0x3b, + 0x93, 0x7d, 0x79, 0x48, 0xab, 0x77, 0x76, 0x7e, 0xb4, 0x8f, 0xbf, 0xf8, + 0xe9, 0x69, 0xea, 0x1b, 0xa6, 0x41, 0x58, 0x40, 0x0c, 0xfc, 0xd2, 0x6a, + 0x90, 0x93, 0x91, 0x64, 0xc3, 0x73, 0xd2, 0x00, 0x5a, 0x3a, 0x47, 0x31, + 0x99, 0x0e, 0x34, 0x3b, 0x05, 0xa4, 0x44, 0x23, 0x0e, 0x84, 0x81, 0x28, + 0x92, 0x30, 0xff, 0x33, 0x68, 0x2b, 0x3f, 0x7a, 0x7b, 0x34, 0x97, 0x5f, + 0x79, 0xc5, 0x59, 0x83, 0x74, 0x49, 0x29, 0xb1, 0xc4, 0x02, 0xe5, 0xbc, + 0xb6, 0x8e, 0x37, 0x6b, 0x3f, 0xe0, 0xfa, 0xfb, 0x7c, 0xd4, 0xb7, 0x4f, + 0x03, 0x0f, 0xe0, 0x05, 0x34, 0x49, 0x1c, 0x49, 0x1c, 0x6c, 0xd1, 0x91, + 0xe8, 0x40, 0x02, 0x48, 0x20, 0x49, 0x20, 0x31, 0x00, 0xa9, 0xfe, 0x40, + 0x79, 0x48, 0x40, 0x20, 0x71, 0x21, 0x71, 0x2b, 0xd1, 0x00, 0x0d, 0x89, + 0x86, 0xc4, 0x83, 0xc4, 0x8d, 0x81, 0xf5, 0x0b, 0x92, 0x18, 0x10, 0x67, + 0xf6, 0xb1, 0xab, 0x88, 0x5f, 0x7b, 0x84, 0x0f, 0xd7, 0x6c, 0x4d, 0x21, + 0xe2, 0x4c, 0xe2, 0x12, 0x42, 0x60, 0x89, 0xed, 0x72, 0xd3, 0xae, 0x97, + 0xbe, 0xbe, 0x91, 0x7b, 0x9f, 0xbd, 0x94, 0x2e, 0xd7, 0x48, 0xf0, 0x0a, + 0xf0, 0x09, 0x13, 0xa4, 0x57, 0x90, 0x70, 0x09, 0xf5, 0xf3, 0xc2, 0x16, + 0x1d, 0x14, 0x50, 0x81, 0x81, 0x50, 0x20, 0x85, 0x0d, 0xcd, 0xfa, 0xd7, + 0x85, 0xc0, 0xad, 0x44, 0x43, 0x28, 0x90, 0x02, 0x0f, 0x02, 0x0f, 0xa8, + 0xb7, 0xc5, 0x1c, 0x12, 0x45, 0x10, 0xe3, 0xca, 0xf6, 0x81, 0xf4, 0xff, + 0x49, 0x23, 0x5b, 0xde, 0xd9, 0xd0, 0xa3, 0xcd, 0x99, 0xc4, 0xd5, 0x57, + 0x2f, 0xbc, 0xb1, 0xfc, 0x03, 0x1e, 0xfc, 0x6d, 0x05, 0x31, 0xff, 0x25, + 0xe0, 0x93, 0xe0, 0x95, 0xe0, 0x91, 0x29, 0xe7, 0xba, 0xa3, 0xbf, 0x75, + 0x87, 0x98, 0x2c, 0x9a, 0x62, 0xfd, 0x09, 0x25, 0x2e, 0x87, 0x58, 0x4c, + 0x7a, 0x1c, 0xe2, 0x22, 0x61, 0x33, 0x68, 0x4a, 0x34, 0x45, 0x57, 0x86, + 0xfb, 0x71, 0xc1, 0x3d, 0xf5, 0xd4, 0xbd, 0xbb, 0xb9, 0x6f, 0x26, 0xcf, + 0x64, 0xcb, 0x3b, 0x77, 0xef, 0xe7, 0x81, 0xa5, 0x03, 0x88, 0x65, 0x5d, + 0x02, 0x3e, 0x4c, 0x06, 0xfd, 0x98, 0xe7, 0x5e, 0xa5, 0x7d, 0x60, 0x68, + 0x28, 0x36, 0x93, 0xda, 0x62, 0x52, 0x07, 0x0c, 0x25, 0x26, 0x9b, 0x26, + 0x8b, 0x02, 0x70, 0x2b, 0xd1, 0x30, 0x47, 0x80, 0x53, 0xcc, 0xb7, 0x44, + 0xd5, 0x1b, 0xa3, 0x19, 0xa5, 0x32, 0x52, 0x48, 0xce, 0xbd, 0x07, 0xf9, + 0xec, 0xc0, 0xa7, 0xbd, 0x3b, 0x1d, 0x21, 0x7a, 0x07, 0xd9, 0xdc, 0xdc, + 0xcc, 0x5d, 0xbf, 0x6e, 0x25, 0x94, 0x33, 0x3c, 0x09, 0xcc, 0x2f, 0x95, + 0x4e, 0x02, 0xb4, 0x24, 0x6e, 0xfa, 0x21, 0x1b, 0xa4, 0x35, 0x3e, 0x13, + 0x6a, 0x7c, 0x5a, 0xe3, 0x12, 0x7b, 0x2c, 0x26, 0x01, 0x3a, 0x41, 0x7a, + 0x01, 0x17, 0xba, 0x03, 0x4c, 0xa4, 0x97, 0x73, 0x53, 0xc6, 0xb6, 0x97, + 0xf0, 0xed, 0x4f, 0x6a, 0x69, 0x6d, 0x6d, 0xed, 0xd5, 0x71, 0xba, 0xd2, + 0xc7, 0xa2, 0x75, 0x3c, 0xf8, 0x42, 0x1d, 0xf5, 0x39, 0xd7, 0x9a, 0x80, + 0xfc, 0x02, 0x02, 0x22, 0xc9, 0xa4, 0x5f, 0x98, 0xee, 0xcf, 0x2f, 0x94, + 0x98, 0x40, 0xcd, 0x11, 0x03, 0xb1, 0xb4, 0xf1, 0x69, 0x8d, 0x4d, 0xcb, + 0x58, 0xcd, 0xf1, 0x88, 0x3d, 0x16, 0x3d, 0x4a, 0xbc, 0x08, 0xbc, 0x48, + 0x35, 0xf6, 0x2c, 0x89, 0x38, 0xc4, 0x04, 0x2a, 0x88, 0x28, 0xc0, 0xe6, + 0xf9, 0xec, 0xa3, 0xfd, 0x59, 0xff, 0xb3, 0xdf, 0xf6, 0xea, 0x53, 0x34, + 0xa7, 0x57, 0xb5, 0x8e, 0x77, 0xd6, 0x6e, 0x61, 0x6d, 0x68, 0x9a, 0xc9, + 0x92, 0x0b, 0x70, 0x49, 0x53, 0xdb, 0xbe, 0x43, 0x5a, 0xdd, 0x94, 0xb4, + 0x45, 0x1d, 0x12, 0xba, 0x24, 0xaa, 0x83, 0xd7, 0xf6, 0x85, 0xa6, 0xd9, + 0x76, 0xf0, 0x07, 0x3a, 0xdc, 0x9f, 0xf3, 0x7d, 0x4e, 0x2b, 0x97, 0x96, + 0x17, 0xd3, 0xd0, 0xdc, 0x46, 0x4e, 0x5b, 0x36, 0x97, 0x25, 0x86, 0x53, + 0xc4, 0x20, 0x05, 0xd0, 0xfc, 0x39, 0x41, 0x1c, 0x69, 0xb3, 0x16, 0xce, + 0xa0, 0xa3, 0xea, 0xf3, 0xa8, 0x3a, 0x8f, 0xe1, 0x22, 0xce, 0xe4, 0x37, + 0x3b, 0xd8, 0x71, 0xfb, 0x16, 0x26, 0x5e, 0x3f, 0x35, 0x33, 0x93, 0x4e, + 0x09, 0x85, 0x42, 0x3c, 0xbe, 0x21, 0x8e, 0x91, 0x5f, 0xe2, 0x60, 0xca, + 0x21, 0x01, 0x87, 0x0e, 0xa4, 0x5d, 0xfb, 0x05, 0x31, 0x61, 0xf6, 0x7f, + 0x98, 0x7a, 0x5a, 0x73, 0x9e, 0x26, 0x67, 0xfa, 0x83, 0xbc, 0x70, 0x38, + 0xc2, 0x25, 0xf7, 0xaf, 0x27, 0x30, 0x7b, 0x13, 0x8b, 0x0f, 0xcf, 0x22, + 0xf7, 0xbe, 0x43, 0x7c, 0x39, 0xeb, 0x55, 0xaa, 0x8e, 0x18, 0xbc, 0x73, + 0xc7, 0xe3, 0x2c, 0xc9, 0x7a, 0x92, 0x26, 0x71, 0x0c, 0x0f, 0x86, 0x83, + 0xbd, 0x70, 0x1a, 0x8b, 0x61, 0x87, 0x0e, 0xa7, 0x7c, 0x0e, 0x11, 0xca, + 0x75, 0x8d, 0x53, 0x8f, 0xad, 0x24, 0x16, 0x8b, 0xf5, 0xf4, 0xae, 0xe9, + 0x36, 0xfc, 0x6f, 0x2b, 0xb7, 0x72, 0xbc, 0x6c, 0x5a, 0x32, 0x8c, 0xb1, + 0x45, 0x42, 0x96, 0x25, 0xe9, 0x41, 0x67, 0xf2, 0x9e, 0xe1, 0x6d, 0x63, + 0xec, 0xa4, 0x15, 0x2c, 0xdf, 0x75, 0x8a, 0x09, 0x37, 0x1d, 0xa5, 0xec, + 0x52, 0x18, 0x3e, 0xfc, 0x32, 0xdc, 0x6e, 0x77, 0x8a, 0xc5, 0xb8, 0x5c, + 0x2e, 0x86, 0x56, 0x0e, 0xa5, 0x68, 0x44, 0x2e, 0x87, 0xaa, 0x76, 0x21, + 0xf6, 0x76, 0xb3, 0x6a, 0xda, 0x0a, 0x4e, 0xd1, 0x08, 0x74, 0x23, 0x09, + 0x23, 0xe9, 0x06, 0x5b, 0xc2, 0xea, 0x7e, 0xb7, 0xfd, 0x39, 0x29, 0x12, + 0xe1, 0xba, 0x23, 0x1a, 0x9b, 0x96, 0xad, 0xe8, 0x61, 0x99, 0x29, 0x53, + 0x48, 0x38, 0x1c, 0xe6, 0xd7, 0x87, 0xbd, 0xc8, 0x2c, 0xb7, 0x09, 0xca, + 0x06, 0x97, 0x1e, 0xb3, 0x49, 0xc8, 0x76, 0x80, 0xce, 0x36, 0xef, 0xf9, + 0xb2, 0x0f, 0xf1, 0xf2, 0x8b, 0x3b, 0xf9, 0x60, 0xdb, 0x4d, 0x54, 0x55, + 0x8d, 0x4e, 0x31, 0x99, 0xde, 0x9c, 0x82, 0x75, 0x8c, 0x1c, 0x33, 0x92, + 0x9b, 0x36, 0xdc, 0xca, 0xde, 0x7f, 0x3f, 0xc6, 0x81, 0xac, 0xdf, 0x03, + 0x21, 0x05, 0x26, 0x84, 0x74, 0x68, 0x27, 0x40, 0x69, 0x77, 0x46, 0x04, + 0x49, 0x18, 0xbf, 0x8c, 0x91, 0x78, 0x61, 0x1d, 0xba, 0xae, 0xa7, 0x04, + 0x09, 0x9a, 0xf3, 0x47, 0xdf, 0xdd, 0xbc, 0x9d, 0xef, 0x2e, 0xae, 0x36, + 0x2f, 0x74, 0xcc, 0xf9, 0x30, 0x0e, 0xc4, 0x65, 0xd2, 0x0d, 0x6a, 0x0e, + 0xdf, 0xef, 0xc6, 0x1e, 0xab, 0x79, 0x72, 0x0f, 0xab, 0x7f, 0xe3, 0xa6, + 0x7a, 0xd2, 0x2c, 0x8e, 0x1c, 0x39, 0x42, 0x30, 0x18, 0xa4, 0xa5, 0xa5, + 0x05, 0x9f, 0xcf, 0x47, 0x5d, 0x5d, 0x1d, 0x4d, 0x4d, 0x4d, 0x74, 0x76, + 0x76, 0x52, 0x57, 0x57, 0x47, 0x43, 0x43, 0x03, 0xa7, 0x4f, 0x9f, 0xa6, + 0xae, 0xae, 0x8e, 0x6f, 0xbf, 0xfd, 0x96, 0x8e, 0x8e, 0x0e, 0xea, 0xea, + 0xea, 0x00, 0xf0, 0x0d, 0xca, 0x62, 0xfb, 0x13, 0x5f, 0xd1, 0xf8, 0x4f, + 0x5f, 0x33, 0x2b, 0x5e, 0xe9, 0x60, 0x32, 0x92, 0xe6, 0x5d, 0x9d, 0x7e, + 0xdc, 0x1a, 0xfd, 0x3a, 0x35, 0xc7, 0xe2, 0xd4, 0xad, 0xdb, 0xc8, 0xd4, + 0x39, 0x33, 0x33, 0x2f, 0xb5, 0xae, 0xfb, 0xd5, 0x7b, 0x6c, 0x2a, 0x99, + 0x03, 0x09, 0x01, 0xba, 0x04, 0x5d, 0xe9, 0xb8, 0x30, 0x81, 0xc6, 0x04, + 0xc4, 0x24, 0x44, 0x04, 0x44, 0x95, 0xee, 0x06, 0xdf, 0xa9, 0xcf, 0xd8, + 0xf0, 0x8b, 0x28, 0x93, 0x27, 0x5c, 0xc9, 0xc6, 0x8d, 0x1b, 0xb9, 0xf1, + 0xc6, 0x1b, 0xd1, 0x34, 0x8d, 0x3f, 0x65, 0x09, 0xf7, 0xd4, 0x3f, 0x3c, + 0xc9, 0xac, 0x97, 0x3d, 0x8c, 0x09, 0x15, 0x22, 0x14, 0x5b, 0x42, 0x39, + 0x1d, 0xa1, 0x02, 0x04, 0x91, 0x02, 0x32, 0x61, 0x07, 0x95, 0xab, 0x6f, + 0x1e, 0xc8, 0xbc, 0xe5, 0x2f, 0xd9, 0x1e, 0x56, 0x73, 0xae, 0x2e, 0xb6, + 0x53, 0x66, 0x9a, 0x64, 0x42, 0xaa, 0xef, 0x48, 0xb3, 0x83, 0xe2, 0x32, + 0xc9, 0xac, 0x47, 0x69, 0xaf, 0xd2, 0x46, 0x3b, 0x8b, 0xef, 0xa8, 0x67, + 0xf2, 0x84, 0x59, 0x6c, 0xdb, 0xb6, 0x8d, 0x9b, 0x6f, 0xbe, 0x99, 0x27, + 0x9e, 0x78, 0x82, 0x85, 0x0b, 0x17, 0x9e, 0x37, 0xc8, 0xf2, 0xf2, 0x72, + 0x46, 0x8d, 0xbb, 0x82, 0x53, 0x4b, 0x24, 0x2d, 0xf7, 0x1c, 0xa4, 0x1f, + 0x2e, 0xe5, 0x49, 0x23, 0xa0, 0x00, 0x62, 0x47, 0xcd, 0x3a, 0xc2, 0x8e, + 0x98, 0xcd, 0x09, 0x2b, 0x7f, 0xd3, 0x01, 0x3a, 0x3a, 0x3a, 0xc8, 0xcb, + 0xcb, 0x33, 0xc7, 0xa4, 0xe5, 0x81, 0xb6, 0xee, 0x3d, 0x48, 0xb4, 0x72, + 0x4c, 0xaa, 0xd7, 0xcc, 0x12, 0x90, 0xed, 0x90, 0x1c, 0x01, 0xb9, 0x0e, + 0xc9, 0x13, 0x4c, 0x2a, 0xf8, 0x80, 0x87, 0xee, 0x9e, 0x49, 0x7d, 0x7d, + 0x3d, 0x73, 0xe7, 0xce, 0xe5, 0xd1, 0x47, 0x1f, 0xe5, 0xf1, 0xc7, 0x1f, + 0x47, 0xd3, 0xb4, 0xf3, 0x16, 0x8b, 0x81, 0x69, 0x77, 0xcf, 0xa3, 0xee, + 0xfa, 0x38, 0x82, 0x4e, 0x04, 0x1d, 0x4a, 0x77, 0x22, 0xe8, 0x42, 0x10, + 0xb2, 0x05, 0x42, 0x08, 0xba, 0x6d, 0x8f, 0x7b, 0x75, 0x48, 0xf2, 0xc9, + 0x8e, 0x8f, 0x6c, 0xef, 0x6a, 0x33, 0xb9, 0xbd, 0xcd, 0x40, 0x96, 0xbb, + 0xc0, 0x50, 0x73, 0x5f, 0xc2, 0x21, 0x96, 0xd9, 0xea, 0x96, 0x75, 0x28, + 0xb3, 0x6d, 0xae, 0xe7, 0xb9, 0xdb, 0x2f, 0xc1, 0xe5, 0x72, 0xd1, 0xd2, + 0xd2, 0x42, 0x38, 0x1c, 0x66, 0xd1, 0xa2, 0x45, 0xf6, 0x62, 0xf6, 0xc4, + 0x89, 0x13, 0x1c, 0x3e, 0x7c, 0x98, 0x3e, 0x56, 0x73, 0x54, 0x54, 0x54, + 0x50, 0x51, 0x51, 0x91, 0x31, 0x3f, 0x33, 0xfc, 0xb9, 0x3b, 0xf9, 0x72, + 0xe3, 0x2f, 0xa9, 0x34, 0xbc, 0x8a, 0x45, 0x6b, 0xfc, 0xc5, 0x15, 0x83, + 0x09, 0x84, 0x5a, 0xef, 0x08, 0x15, 0x2d, 0xfb, 0x0d, 0x83, 0xc8, 0x8e, + 0x7d, 0x30, 0x7b, 0x66, 0xd2, 0x5c, 0xa5, 0x94, 0xec, 0x09, 0x4b, 0x93, + 0xb9, 0x84, 0x23, 0xd8, 0x4c, 0x01, 0x2b, 0x92, 0x20, 0x75, 0x13, 0x68, + 0x76, 0xdd, 0x7f, 0xf3, 0xfc, 0xa1, 0x03, 0x00, 0x74, 0x76, 0x76, 0xa6, + 0x24, 0xb8, 0xf6, 0xee, 0xdd, 0x4b, 0x4d, 0x4d, 0x0d, 0x7e, 0xbf, 0xbf, + 0xcf, 0x4c, 0x5c, 0x47, 0x47, 0x07, 0x2b, 0x57, 0xae, 0x64, 0xce, 0x9c, + 0x39, 0xf6, 0xb3, 0x8b, 0x17, 0x2f, 0x66, 0xd9, 0xb2, 0x65, 0x00, 0x54, + 0xe6, 0x7c, 0xcb, 0xb3, 0x1d, 0xe5, 0x2a, 0x96, 0xd2, 0x6d, 0x27, 0x83, + 0x02, 0x66, 0xc5, 0x54, 0xd8, 0x6b, 0x1e, 0x03, 0x3e, 0x49, 0xc6, 0xb3, + 0x9a, 0x95, 0x36, 0xfc, 0xda, 0xed, 0x31, 0xa7, 0x0b, 0x99, 0x06, 0x32, + 0x9d, 0xd5, 0x04, 0xf6, 0x38, 0xbd, 0xb6, 0xb0, 0x95, 0x21, 0x05, 0x43, + 0x00, 0x38, 0x79, 0xf2, 0x64, 0xca, 0xd4, 0xf0, 0xee, 0xbb, 0xef, 0x72, + 0xcd, 0x35, 0xd7, 0xb0, 0x61, 0xc3, 0x86, 0x3e, 0x41, 0xce, 0x9f, 0x3f, + 0x9f, 0xda, 0xda, 0x5a, 0x66, 0xcf, 0x9e, 0x6d, 0xdf, 0x2b, 0x2b, 0x2b, + 0x63, 0xd0, 0xa0, 0x41, 0xa6, 0x23, 0xf2, 0xe6, 0xa0, 0xd7, 0x1e, 0xc7, + 0x6d, 0xaf, 0x54, 0xf5, 0xb4, 0x86, 0xa5, 0x37, 0x58, 0xe2, 0xfa, 0xe2, + 0x08, 0x86, 0x61, 0x24, 0xcd, 0xb5, 0xa1, 0xa1, 0x81, 0xd8, 0x45, 0x17, + 0x99, 0x4c, 0x5a, 0xa1, 0x9a, 0x04, 0xa4, 0x50, 0xe6, 0xab, 0xb4, 0x93, + 0xd5, 0x13, 0x7f, 0xe4, 0x99, 0x47, 0xfe, 0x9a, 0x61, 0xc3, 0x2a, 0x11, + 0x42, 0xb0, 0x6f, 0xdf, 0x3e, 0x5e, 0x7b, 0xed, 0x35, 0x9b, 0x4d, 0x5d, + 0xd7, 0xc9, 0xcd, 0xcd, 0xb5, 0xc7, 0xc5, 0x99, 0xf2, 0x48, 0xb9, 0xb9, + 0xb9, 0x04, 0x83, 0xc1, 0x14, 0x73, 0xbd, 0xeb, 0xae, 0xbb, 0x98, 0x3b, + 0x77, 0x2e, 0x42, 0x08, 0x1a, 0x4e, 0x34, 0xf0, 0x45, 0xed, 0x54, 0x46, + 0xe1, 0x56, 0x66, 0x69, 0xa8, 0xd0, 0x3f, 0xc9, 0x9c, 0xb5, 0x20, 0xb7, + 0x56, 0xaf, 0x85, 0xad, 0x21, 0x4e, 0x9f, 0x3e, 0x4d, 0x49, 0x49, 0x89, + 0x09, 0xb2, 0xb9, 0xb9, 0x19, 0x2e, 0x1a, 0x9a, 0x64, 0xd2, 0x16, 0x99, + 0xaa, 0xed, 0xce, 0x92, 0xb8, 0x0f, 0x1c, 0xe6, 0xe9, 0xa7, 0xdf, 0xc1, + 0xe5, 0x32, 0x83, 0xa6, 0xf6, 0xf6, 0xf6, 0x5e, 0x27, 0xff, 0xf4, 0xf8, + 0x38, 0x53, 0xbc, 0x9c, 0x7e, 0xfd, 0xca, 0x2b, 0xaf, 0xb0, 0x72, 0xe5, + 0x4a, 0xfb, 0xfe, 0x1c, 0x5f, 0x27, 0xa3, 0xa2, 0x42, 0xe5, 0x1b, 0xa4, + 0x63, 0x5d, 0x63, 0x38, 0x1b, 0x6c, 0xaf, 0x74, 0x4a, 0x71, 0x11, 0x0c, + 0x06, 0x29, 0x2e, 0x2e, 0x36, 0x33, 0xe8, 0x1d, 0x9d, 0x9d, 0xc8, 0x8a, + 0x3c, 0xd0, 0x14, 0x93, 0x6a, 0xdd, 0xe7, 0xc8, 0x56, 0xa4, 0x01, 0x17, + 0xe4, 0xd3, 0x41, 0x41, 0x41, 0x81, 0xdd, 0xa8, 0x78, 0x3c, 0x9e, 0xe2, + 0x30, 0xd2, 0xd7, 0x74, 0x67, 0x95, 0x70, 0x72, 0x3c, 0x97, 0x95, 0x95, + 0x65, 0x4f, 0x01, 0x00, 0xa1, 0x42, 0x0f, 0x34, 0xb7, 0x28, 0xb6, 0x7a, + 0x34, 0xca, 0xd9, 0x55, 0x00, 0x14, 0x48, 0x8d, 0x83, 0x4d, 0x4d, 0x0c, + 0x1f, 0x3e, 0xdc, 0x1c, 0x93, 0x91, 0x68, 0x94, 0x44, 0x9e, 0xbb, 0xc7, + 0x83, 0x26, 0xd8, 0x4c, 0x9e, 0x51, 0x72, 0x61, 0x79, 0x11, 0x4b, 0x1e, + 0x5c, 0x62, 0xf7, 0xfe, 0xfe, 0xfd, 0xfb, 0x59, 0xb1, 0x62, 0xc5, 0x19, + 0xc3, 0xb7, 0xb3, 0x49, 0x7b, 0x5a, 0xd7, 0xf3, 0xe7, 0xcf, 0xb7, 0xcd, + 0x55, 0x4a, 0xc9, 0x86, 0xc3, 0x9f, 0xc1, 0xa9, 0x7a, 0xc7, 0x73, 0x8e, + 0xce, 0x51, 0xad, 0x74, 0xb6, 0x56, 0x13, 0x09, 0x42, 0xa1, 0x50, 0xb2, + 0x16, 0xe2, 0xf7, 0xf9, 0xd0, 0x44, 0x0c, 0xdd, 0xa3, 0x39, 0xf3, 0x78, + 0x9c, 0x81, 0x4e, 0xbe, 0x6b, 0x6f, 0xe2, 0xa1, 0x87, 0x1e, 0xb2, 0x1f, + 0x3f, 0x75, 0xea, 0x54, 0x9f, 0xec, 0x38, 0xaf, 0xd3, 0x75, 0xfa, 0xe7, + 0x4b, 0x97, 0x2e, 0x65, 0xf3, 0xe6, 0xcd, 0xf6, 0xfd, 0x31, 0x4d, 0xc7, + 0xa0, 0x50, 0x35, 0x4b, 0x26, 0xb5, 0xd5, 0x2c, 0xe1, 0xd4, 0x80, 0xee, + 0xf2, 0x90, 0x93, 0x93, 0x93, 0x9c, 0x42, 0xf2, 0xf3, 0xf2, 0xa0, 0xe3, + 0x24, 0x94, 0x14, 0xa6, 0x99, 0x80, 0x34, 0xbb, 0x4c, 0x18, 0x69, 0x3a, + 0x41, 0x7b, 0x2e, 0xb4, 0xb5, 0xb5, 0xd9, 0x63, 0xb2, 0xbb, 0xbb, 0xbb, + 0xcf, 0x94, 0xe6, 0xd9, 0xdc, 0xb7, 0x8e, 0xee, 0xee, 0x6e, 0x3a, 0x3a, + 0x3a, 0x92, 0xe6, 0xab, 0xb7, 0x42, 0x41, 0xd2, 0x2f, 0x48, 0xc3, 0x01, + 0x34, 0x83, 0xb4, 0x0a, 0xd3, 0x43, 0xdb, 0x20, 0x07, 0x0c, 0x18, 0x00, + 0xcd, 0xf5, 0x50, 0xe2, 0x83, 0x94, 0x81, 0x6c, 0xbd, 0xc9, 0x30, 0x01, + 0x62, 0x80, 0x30, 0x5d, 0x6c, 0x62, 0x78, 0x29, 0x4f, 0x5e, 0xf6, 0x24, + 0x43, 0x87, 0x0c, 0x05, 0x60, 0xdf, 0xbe, 0x7d, 0xac, 0x5b, 0xb7, 0xae, + 0x4f, 0x26, 0xcf, 0x76, 0x9c, 0x3e, 0xfc, 0xf0, 0xc3, 0xcc, 0x9b, 0x37, + 0x0f, 0x80, 0xc6, 0xc6, 0x46, 0x82, 0x33, 0xdf, 0x30, 0x43, 0xc9, 0x44, + 0x6a, 0x73, 0xd2, 0x66, 0x0e, 0x5b, 0x82, 0xba, 0xa0, 0xb2, 0xb4, 0x34, + 0x39, 0x4f, 0x96, 0x97, 0x97, 0xe3, 0xdb, 0xba, 0x0b, 0x7d, 0x78, 0x79, + 0xda, 0x37, 0x0c, 0xc7, 0x3c, 0xe4, 0x9c, 0x24, 0x75, 0x18, 0x94, 0xcb, + 0xa2, 0xbf, 0x7f, 0x89, 0x0a, 0x5f, 0x7e, 0xc6, 0x79, 0xb2, 0xaf, 0x65, + 0x56, 0x5f, 0x4b, 0xaf, 0xd7, 0x5f, 0x7f, 0x9d, 0xdd, 0xbb, 0x77, 0x9b, + 0xac, 0x36, 0xd7, 0xf3, 0xab, 0x32, 0x89, 0x74, 0x4e, 0x93, 0xbd, 0x4f, + 0x91, 0x60, 0x40, 0xbb, 0xaf, 0x98, 0xc2, 0xc2, 0x42, 0x73, 0xa9, 0x25, + 0x84, 0x40, 0xd3, 0x34, 0x86, 0xc6, 0x75, 0x0e, 0x88, 0x6e, 0x65, 0x07, + 0x96, 0x3d, 0x24, 0x40, 0x26, 0x1c, 0x5a, 0x07, 0xa9, 0x83, 0x88, 0x83, + 0x88, 0xb3, 0xb9, 0xa0, 0x13, 0xf9, 0x69, 0x30, 0x25, 0xe2, 0xb1, 0x58, + 0x2a, 0x29, 0x29, 0x61, 0xcd, 0x9a, 0x35, 0xac, 0x5a, 0xb5, 0xaa, 0x4f, + 0xd6, 0xf6, 0xec, 0xd9, 0xc3, 0x55, 0x57, 0x5d, 0x95, 0xf2, 0x5c, 0x53, + 0x53, 0x13, 0x89, 0x44, 0xc2, 0x0c, 0xfb, 0x1a, 0xeb, 0xf0, 0x0c, 0xea, + 0xb1, 0xaa, 0x02, 0x47, 0xf3, 0x9c, 0x81, 0x8b, 0x94, 0x60, 0x0c, 0x1e, + 0x96, 0x8c, 0x5d, 0xad, 0xde, 0xab, 0x12, 0x3e, 0x0e, 0xc8, 0xee, 0xa4, + 0xc1, 0xf7, 0x08, 0x71, 0x12, 0x26, 0x40, 0x62, 0x20, 0xcd, 0xe4, 0x63, + 0xe8, 0xae, 0x91, 0xfc, 0xe3, 0x4d, 0xd7, 0x31, 0x7a, 0xe4, 0xe5, 0xec, + 0xdf, 0xbf, 0x9f, 0xaa, 0xaa, 0x2a, 0x9b, 0x91, 0x07, 0x1e, 0x78, 0x80, + 0xdd, 0xbb, 0x77, 0xb3, 0x60, 0xc1, 0x82, 0x3e, 0xd9, 0x1c, 0x36, 0x6c, + 0x18, 0x0b, 0x17, 0x2e, 0x44, 0x4a, 0x49, 0x43, 0x43, 0x03, 0x1d, 0x1d, + 0x1d, 0x2c, 0x5a, 0xb4, 0x88, 0x59, 0xb3, 0x66, 0x71, 0xf4, 0xeb, 0xaf, + 0x88, 0x3e, 0x33, 0x02, 0x99, 0x05, 0xc2, 0xfa, 0x69, 0x05, 0x54, 0x28, + 0xb0, 0x32, 0x91, 0x21, 0x00, 0x1a, 0x39, 0xde, 0x6e, 0x8b, 0x5d, 0x69, + 0x9e, 0xe4, 0xce, 0xe5, 0x5f, 0x13, 0x21, 0xa4, 0x26, 0x53, 0x4d, 0xd4, + 0x7a, 0x93, 0xb0, 0xba, 0x30, 0x66, 0xe7, 0x42, 0xe5, 0x60, 0x0f, 0x8b, + 0x56, 0xac, 0x60, 0xfd, 0x88, 0x51, 0x3d, 0xc6, 0x5b, 0x41, 0x41, 0x01, + 0xab, 0x57, 0xaf, 0x3e, 0xab, 0x1a, 0x8b, 0x75, 0x74, 0x75, 0x75, 0x31, + 0x6f, 0xde, 0x3c, 0x26, 0x4c, 0x98, 0xc0, 0x8c, 0x19, 0x33, 0x00, 0xf8, + 0xfd, 0xdb, 0xbf, 0xe0, 0xb6, 0x8b, 0x13, 0xa8, 0x55, 0x16, 0x22, 0x6d, + 0xad, 0x2c, 0xf4, 0x9e, 0x61, 0x67, 0x48, 0x77, 0x11, 0x18, 0x3d, 0xb1, + 0xe7, 0x7a, 0x72, 0xca, 0xd8, 0x71, 0x04, 0xf6, 0x2e, 0xa7, 0xbb, 0xea, + 0xd2, 0x24, 0x73, 0xb6, 0x79, 0xea, 0xc9, 0x2e, 0x14, 0xa9, 0xc9, 0xde, + 0x4d, 0x35, 0x1d, 0xbc, 0xba, 0xb1, 0x96, 0xcb, 0xfb, 0x0d, 0x36, 0x5d, + 0xb7, 0xae, 0xdb, 0xe9, 0x87, 0x73, 0x2d, 0xbd, 0xdf, 0x7b, 0xef, 0xbd, + 0x84, 0x42, 0x21, 0x36, 0x6f, 0xde, 0x8c, 0xa6, 0x69, 0x6c, 0x5d, 0xbf, + 0x9c, 0x09, 0xde, 0x55, 0xc9, 0x84, 0x6c, 0x04, 0x64, 0x1a, 0x50, 0xe9, + 0x60, 0xd4, 0x02, 0xf9, 0x71, 0x67, 0x2e, 0xe3, 0x7e, 0x3c, 0xc1, 0xb6, + 0x20, 0x1b, 0x64, 0xbf, 0x7e, 0xfd, 0xa8, 0xd9, 0x6d, 0xf0, 0xbe, 0x08, + 0x3b, 0xbe, 0x61, 0x31, 0x18, 0x4f, 0xea, 0x94, 0x44, 0x6f, 0x04, 0x8a, + 0xe3, 0x2c, 0x28, 0x5d, 0xce, 0xb3, 0x07, 0xa6, 0x92, 0x48, 0x24, 0x18, + 0x30, 0x60, 0xc0, 0x79, 0xd5, 0xff, 0xa5, 0x94, 0xf8, 0x7c, 0x3e, 0x76, + 0xed, 0xda, 0x45, 0x51, 0x51, 0x11, 0x9f, 0x1f, 0x3a, 0x48, 0xf6, 0x91, + 0xfb, 0xb9, 0xa0, 0xdc, 0x91, 0xab, 0xd2, 0x14, 0x40, 0x47, 0x16, 0x5b, + 0x38, 0xc7, 0xa8, 0x32, 0xdd, 0xce, 0x41, 0xd7, 0x93, 0x9b, 0x9b, 0x9b, + 0x5c, 0x85, 0x38, 0x7f, 0xe8, 0x9e, 0xc0, 0xa5, 0xac, 0xef, 0x6e, 0xc1, + 0xc8, 0x12, 0x8e, 0x6f, 0xc6, 0x1d, 0x05, 0x00, 0x4b, 0x22, 0x0e, 0xe9, + 0xa6, 0x7b, 0x8c, 0xe4, 0xe7, 0x2d, 0xaf, 0xf1, 0xcc, 0x4b, 0xcf, 0x51, + 0x75, 0xf9, 0x38, 0xfb, 0x7d, 0x8b, 0x17, 0x2f, 0xc6, 0xe7, 0xf3, 0xb1, + 0x60, 0xc1, 0x02, 0x96, 0x2c, 0x59, 0x42, 0x57, 0x57, 0x17, 0x0b, 0x17, + 0x2e, 0x64, 0xe9, 0xd2, 0xa5, 0x9c, 0x38, 0x71, 0x82, 0xa7, 0x9e, 0x7a, + 0x8a, 0xb7, 0xde, 0x7a, 0x8b, 0x83, 0x07, 0x0f, 0xf2, 0xfc, 0xf3, 0xcf, + 0x53, 0x5e, 0x5e, 0x4e, 0x45, 0x45, 0x05, 0x9f, 0x1f, 0x3e, 0xc8, 0xc9, + 0x8f, 0x67, 0x52, 0x33, 0xa2, 0xdd, 0x4c, 0xef, 0x38, 0xeb, 0x09, 0x51, + 0x47, 0xba, 0x3d, 0x96, 0xe6, 0x88, 0xe2, 0xd0, 0x16, 0x71, 0x91, 0x3f, + 0xe5, 0xee, 0xcc, 0xa5, 0x3b, 0x80, 0x39, 0x93, 0xa6, 0x32, 0xb0, 0xee, + 0x98, 0xd9, 0x6d, 0x32, 0x0c, 0xb2, 0xdb, 0x14, 0x9c, 0x3a, 0xa4, 0x32, + 0x69, 0x0e, 0x91, 0x5d, 0x44, 0xa7, 0x0b, 0x9e, 0x9e, 0xf8, 0x06, 0xf5, + 0xf1, 0x46, 0xaa, 0xab, 0xab, 0xa9, 0xae, 0xae, 0xa6, 0x5f, 0xbf, 0x7e, + 0x0c, 0x18, 0x30, 0x80, 0x9a, 0x9a, 0x1a, 0xca, 0xca, 0xca, 0x28, 0x29, + 0x29, 0xa1, 0xba, 0xba, 0x9a, 0xf2, 0xf2, 0x72, 0x8a, 0x8a, 0x8a, 0xa8, + 0xa9, 0xa9, 0x61, 0xe0, 0xc0, 0x81, 0xe4, 0xe5, 0xe5, 0x51, 0x5d, 0x5d, + 0xcd, 0xe0, 0xc1, 0x83, 0xd9, 0xba, 0xa5, 0x96, 0xce, 0x6f, 0x6a, 0xa8, + 0x19, 0xd7, 0x8c, 0xcc, 0x01, 0x99, 0x93, 0x5a, 0xc5, 0x95, 0xaa, 0x80, + 0x29, 0xd3, 0x2a, 0xb6, 0x52, 0xc9, 0x87, 0xee, 0x4a, 0x26, 0x4d, 0x9d, + 0x9e, 0x9a, 0x5c, 0x76, 0x5e, 0x78, 0xbd, 0x5e, 0x1e, 0x35, 0x86, 0x21, + 0x62, 0xa1, 0xd4, 0xac, 0xb5, 0x54, 0xf6, 0xe2, 0x04, 0x2c, 0x15, 0x60, + 0x19, 0xb2, 0x33, 0x6a, 0xa1, 0x31, 0x21, 0xee, 0xb9, 0xe2, 0x11, 0x66, + 0xaf, 0xb8, 0x81, 0x43, 0x5f, 0x1c, 0x3a, 0xa7, 0x94, 0xe4, 0xd1, 0xa3, + 0x5f, 0xb1, 0x7c, 0xf9, 0x2d, 0x54, 0x5e, 0x7c, 0x3b, 0xe3, 0xab, 0xda, + 0x4d, 0x10, 0x16, 0x20, 0x05, 0xce, 0x02, 0x26, 0xd3, 0x80, 0x49, 0x55, + 0xee, 0xee, 0xf6, 0xb8, 0xf0, 0x4d, 0xff, 0x39, 0x2e, 0x97, 0x2b, 0xa5, + 0xc6, 0xda, 0x23, 0x83, 0xfe, 0x57, 0x53, 0xe7, 0x31, 0x64, 0x53, 0x03, + 0x88, 0x08, 0x88, 0xb0, 0x43, 0xba, 0x4d, 0x8d, 0xf3, 0xba, 0xbb, 0xe7, + 0x79, 0xff, 0x28, 0x1b, 0x6e, 0x7d, 0x9f, 0xc9, 0xee, 0xd1, 0xd4, 0x5d, + 0xb4, 0x96, 0xa0, 0xfe, 0x1d, 0x27, 0x1a, 0x4e, 0x60, 0x18, 0x46, 0x8f, + 0xad, 0x31, 0x8d, 0x8d, 0x8d, 0x7c, 0xdf, 0xf6, 0x0d, 0x97, 0x5c, 0xb1, + 0x97, 0x86, 0xe8, 0x08, 0x66, 0xde, 0xb6, 0x8a, 0x01, 0x17, 0x83, 0x08, + 0x80, 0xc8, 0x4a, 0xd3, 0xe9, 0xe7, 0x4e, 0xf1, 0x9b, 0xb2, 0x29, 0x7e, + 0x39, 0xd7, 0xce, 0xbb, 0xb3, 0x67, 0x8d, 0xd2, 0x30, 0x0c, 0x99, 0xbe, + 0xc1, 0x60, 0x75, 0xdd, 0x06, 0x6e, 0xa9, 0xdc, 0x4c, 0xa2, 0x54, 0x4b, + 0xfa, 0x6d, 0x19, 0x03, 0x11, 0x05, 0xa9, 0xc6, 0xa2, 0x50, 0xda, 0x66, + 0x32, 0x04, 0x74, 0x01, 0x9d, 0xf8, 0x85, 0x4e, 0xbe, 0x84, 0x7c, 0xa0, + 0x20, 0x01, 0xda, 0x17, 0xe0, 0xfd, 0xd2, 0x4f, 0x4e, 0x5b, 0x2e, 0x97, + 0x5d, 0x54, 0xc1, 0xa9, 0xe6, 0xe3, 0xf8, 0xfc, 0xa7, 0x18, 0x5c, 0x19, + 0x63, 0xe4, 0x08, 0x49, 0xb1, 0x66, 0x3e, 0x9b, 0x27, 0x20, 0x57, 0x82, + 0x37, 0xa6, 0x5e, 0xa5, 0x5e, 0x2d, 0x54, 0x02, 0xdd, 0xfe, 0xe9, 0x28, + 0xc8, 0x68, 0xd2, 0x45, 0x88, 0x38, 0x1c, 0xff, 0x5e, 0xa3, 0x79, 0xca, + 0x46, 0xaa, 0x26, 0x4c, 0xe9, 0x61, 0x39, 0x5a, 0xa6, 0xd5, 0xc0, 0xdc, + 0xc9, 0x33, 0xb8, 0xe5, 0xed, 0x9d, 0xbc, 0x73, 0x47, 0x67, 0xd2, 0x9d, + 0x59, 0x53, 0x87, 0x70, 0x3a, 0x9d, 0x70, 0xda, 0x75, 0x04, 0x17, 0xba, + 0x59, 0xbe, 0x14, 0xca, 0x3f, 0x68, 0x90, 0x3f, 0x0a, 0x0a, 0x46, 0x45, + 0x28, 0x20, 0x82, 0x46, 0x0b, 0x43, 0x31, 0x63, 0x6d, 0x2b, 0xde, 0x76, + 0x4e, 0x4a, 0x5e, 0x01, 0x9a, 0x07, 0xdc, 0xfe, 0x94, 0x9a, 0x9f, 0x6a, + 0x63, 0x72, 0x6d, 0x25, 0x84, 0x55, 0x8c, 0x32, 0x13, 0x17, 0x1f, 0xe7, + 0xcc, 0xe7, 0xf6, 0x6b, 0x6a, 0x32, 0xc6, 0xc5, 0xae, 0xde, 0x82, 0xe7, + 0xdf, 0x4c, 0xfb, 0x3b, 0x06, 0xad, 0x6f, 0x53, 0x5d, 0x16, 0x49, 0x76, + 0xa3, 0x8c, 0xa4, 0x79, 0xd7, 0x88, 0x63, 0x4a, 0x89, 0x99, 0x55, 0x76, + 0x87, 0x03, 0x74, 0x4b, 0xbb, 0x2d, 0xf6, 0x72, 0x48, 0x92, 0xcc, 0xa6, + 0xa4, 0xfb, 0xf0, 0xa8, 0x4a, 0x06, 0x4a, 0xab, 0x0e, 0x6a, 0xd7, 0x46, + 0x95, 0x56, 0xe3, 0x4f, 0xaa, 0xcf, 0xa4, 0x0f, 0xd6, 0x36, 0x8e, 0x60, + 0xe6, 0x7d, 0xcf, 0xf7, 0x3a, 0x75, 0xf5, 0x5a, 0x84, 0x2d, 0x29, 0x29, + 0xe1, 0xed, 0xf2, 0x47, 0x28, 0x38, 0xd0, 0x9e, 0xca, 0xa0, 0x48, 0xaf, + 0xf8, 0xc6, 0x6c, 0xed, 0x26, 0x91, 0x02, 0x50, 0xc3, 0x4c, 0x36, 0xb8, + 0x93, 0xb9, 0x06, 0x10, 0x0a, 0xa4, 0x48, 0x46, 0x62, 0xce, 0x58, 0x2a, + 0x0e, 0x44, 0x05, 0x24, 0xdc, 0x0a, 0xa8, 0x2f, 0x03, 0x50, 0x3f, 0x08, + 0xf5, 0xd9, 0xc7, 0x4d, 0x25, 0x54, 0xde, 0xfa, 0x76, 0x4a, 0x16, 0xe1, + 0x8c, 0xbb, 0x3f, 0xd2, 0x65, 0xec, 0xc8, 0xd1, 0xfc, 0x57, 0xe8, 0x3e, + 0x02, 0x5f, 0x76, 0x99, 0x8c, 0xca, 0x98, 0xd2, 0x6a, 0x6c, 0xda, 0xe7, + 0x51, 0x90, 0x71, 0x33, 0xb1, 0xae, 0xb6, 0x14, 0x78, 0x24, 0x68, 0xd2, + 0x64, 0xd2, 0x2d, 0xcd, 0x12, 0xa7, 0x70, 0x2c, 0x51, 0xa5, 0x54, 0x89, + 0x7a, 0x25, 0x71, 0x25, 0x31, 0x4b, 0x03, 0xd2, 0x63, 0x02, 0xed, 0x21, + 0x5e, 0x93, 0xc9, 0xcf, 0x4e, 0xe6, 0xc0, 0xd8, 0x37, 0x19, 0x5a, 0x79, + 0xd9, 0xd9, 0xef, 0xfe, 0xc8, 0xb4, 0x03, 0xe4, 0x86, 0x89, 0xd7, 0xf1, + 0x9f, 0x8d, 0xf7, 0xe3, 0xff, 0x2a, 0x9c, 0x64, 0x51, 0x44, 0xcd, 0x31, + 0xea, 0x10, 0xb7, 0x30, 0xcc, 0xf1, 0xa4, 0xc4, 0xad, 0xc4, 0x05, 0xb8, + 0x84, 0xaa, 0xdd, 0x26, 0x37, 0x80, 0x98, 0x4c, 0x0a, 0x95, 0xce, 0x4d, + 0x93, 0x98, 0x12, 0x5d, 0x98, 0xb6, 0x2f, 0x1c, 0x82, 0xcf, 0x64, 0xf1, + 0x70, 0x63, 0x0e, 0xed, 0x3f, 0x7a, 0x93, 0xab, 0x27, 0x4c, 0x3b, 0xf7, + 0xdd, 0x1f, 0x99, 0xf6, 0xf2, 0xdc, 0x31, 0xe5, 0x26, 0xde, 0x0a, 0x2e, + 0xa4, 0x60, 0xbf, 0xb5, 0x0a, 0x49, 0xae, 0x44, 0xcc, 0x73, 0xdd, 0x66, + 0x2e, 0x9d, 0x45, 0x97, 0xca, 0xa4, 0x58, 0x1a, 0x47, 0x02, 0xd0, 0xce, + 0x72, 0xca, 0xd4, 0xb2, 0x4b, 0xdc, 0xa1, 0xa5, 0xdb, 0x04, 0x2a, 0x1d, + 0x83, 0x7d, 0xf7, 0xd7, 0x25, 0x74, 0x95, 0xad, 0x62, 0x62, 0xf5, 0x9c, + 0x8c, 0x6d, 0xee, 0x93, 0xc9, 0x4c, 0x02, 0x30, 0x6f, 0xf2, 0x6c, 0xb6, + 0x78, 0x7f, 0xc7, 0x90, 0xf7, 0x0b, 0x4c, 0x80, 0x22, 0x19, 0x3c, 0x6a, + 0x42, 0xe2, 0x11, 0xe0, 0x49, 0x63, 0xd1, 0x66, 0x53, 0xa4, 0xb2, 0x68, + 0xa7, 0x74, 0xd5, 0xb8, 0xb4, 0x19, 0xb5, 0x2a, 0x12, 0x4a, 0xc7, 0x95, + 0x48, 0xcd, 0x64, 0xd1, 0xd0, 0x60, 0xcd, 0x8e, 0x11, 0x14, 0x0e, 0xaf, + 0xe3, 0xea, 0x6b, 0xa6, 0xf5, 0xc8, 0x15, 0xf5, 0xca, 0xa4, 0xb3, 0x17, + 0x7a, 0x8b, 0x46, 0xac, 0xeb, 0x31, 0x23, 0xc7, 0xb0, 0xfb, 0xc7, 0xef, + 0xf1, 0x97, 0xb5, 0xd7, 0xa1, 0x7d, 0x97, 0xb0, 0x4b, 0x66, 0x9a, 0xb9, + 0x39, 0xcb, 0x2c, 0x5d, 0xca, 0xd4, 0xd2, 0xa5, 0x4b, 0x26, 0xb7, 0x19, + 0x08, 0x47, 0x22, 0xd0, 0xb9, 0xdd, 0xc0, 0xb9, 0x1c, 0x74, 0x7a, 0x5b, + 0x4b, 0x1b, 0x2e, 0x38, 0xde, 0xe4, 0xa1, 0x76, 0xd3, 0x4f, 0x99, 0x32, + 0xf7, 0x23, 0x2a, 0x2b, 0x87, 0x9f, 0x53, 0xa6, 0xa1, 0xcf, 0xbd, 0x75, + 0xbd, 0x7d, 0x79, 0xfd, 0xce, 0xf5, 0x3c, 0xd6, 0xba, 0x90, 0xa3, 0xd3, + 0x3f, 0xc7, 0xef, 0x97, 0xa9, 0x95, 0x77, 0xc7, 0x5e, 0xd6, 0xec, 0x0c, + 0x9b, 0x09, 0xb3, 0xce, 0x70, 0x2f, 0xfd, 0x3d, 0x84, 0x5c, 0xec, 0xda, + 0x34, 0x8a, 0x0b, 0xcb, 0x5e, 0x64, 0xfc, 0xf8, 0x9a, 0xf3, 0x5a, 0xe1, + 0x9c, 0x17, 0x48, 0xeb, 0x88, 0x46, 0xa3, 0x2c, 0xfb, 0x60, 0x19, 0xff, + 0x62, 0xbc, 0x48, 0xcb, 0xe4, 0x6f, 0xf0, 0xe7, 0x19, 0x29, 0x7b, 0x5d, + 0x03, 0x67, 0xd8, 0xeb, 0x1a, 0x90, 0x66, 0x35, 0x30, 0xd3, 0x66, 0x5f, + 0xbf, 0x04, 0xbd, 0xcd, 0xc5, 0x91, 0xed, 0xc3, 0x28, 0xf2, 0x3e, 0xc6, + 0xb4, 0x6b, 0xef, 0xc4, 0xe3, 0xf1, 0xfc, 0x30, 0x9b, 0x7a, 0x33, 0xed, + 0x15, 0xed, 0x6d, 0x0f, 0xa9, 0xf3, 0x5a, 0xd7, 0x75, 0x36, 0x6e, 0xdf, + 0xc0, 0xaa, 0xae, 0x65, 0xec, 0x2f, 0xd8, 0x44, 0x60, 0x5c, 0x88, 0x80, + 0xdf, 0x30, 0x4b, 0x9c, 0x12, 0x5b, 0x67, 0x89, 0x24, 0x38, 0xbf, 0xba, + 0xb6, 0xb6, 0x20, 0x04, 0x00, 0x77, 0xb7, 0x8b, 0xe3, 0x7b, 0xf2, 0x08, + 0x74, 0x5e, 0xcf, 0xc0, 0xfc, 0xbb, 0x99, 0x34, 0x71, 0x5a, 0xca, 0x86, + 0x8a, 0xb3, 0x69, 0xcf, 0x0f, 0xbe, 0x73, 0xb9, 0xb7, 0x32, 0xdc, 0x47, + 0x7b, 0x77, 0xf0, 0x69, 0x74, 0x07, 0xdf, 0xf0, 0x09, 0x27, 0x5d, 0x5f, + 0x20, 0x0a, 0xdb, 0xc8, 0xef, 0x27, 0xc9, 0x2f, 0x80, 0x80, 0x27, 0x8e, + 0x3f, 0xee, 0x41, 0xb6, 0x4a, 0xf4, 0x16, 0x17, 0x5a, 0x5b, 0x31, 0x45, + 0x89, 0x61, 0xf4, 0x13, 0xe3, 0x29, 0x0b, 0x4c, 0xa4, 0x6a, 0xdc, 0x44, + 0xb2, 0xb3, 0xb3, 0xfb, 0xdc, 0x03, 0x7f, 0xa6, 0x52, 0x43, 0xfa, 0x33, + 0x7f, 0x92, 0xb9, 0x9e, 0xcd, 0x61, 0x18, 0x06, 0xa7, 0x4f, 0x9f, 0xb6, + 0x37, 0x4a, 0xb4, 0xb7, 0xb7, 0x93, 0x9f, 0x9f, 0x4f, 0xff, 0xfe, 0xfd, + 0x29, 0x2d, 0x2d, 0xa5, 0xb0, 0xb0, 0xd0, 0x4e, 0x50, 0xff, 0x9f, 0xfc, + 0x6f, 0x82, 0xf4, 0x5e, 0x3b, 0xd3, 0x96, 0xe7, 0xde, 0xea, 0x1c, 0xbd, + 0x7d, 0xf7, 0x6c, 0xb6, 0x80, 0xf7, 0xf6, 0x9b, 0x99, 0x12, 0x60, 0xe7, + 0x62, 0xb6, 0xff, 0x0b, 0xe3, 0x25, 0x70, 0xfd, 0x81, 0xa0, 0x2d, 0x81, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; diff --git a/Arduino/McLighting/json_functions.h b/Arduino/McLighting/json_functions.h new file mode 100644 index 00000000..84fb74f3 --- /dev/null +++ b/Arduino/McLighting/json_functions.h @@ -0,0 +1,266 @@ +#include //https://github.com/bblanchon/ArduinoJson + +#if defined(ARDUINOJSON_VERSION) + #if !(ARDUINOJSON_VERSION_MAJOR == 6 and ARDUINOJSON_VERSION_MINOR >= 8) + #error "Install ArduinoJson v6.8.x or higher" + #endif +#endif + +char * listStateJSONfull() { + const size_t bufferSize = JSON_ARRAY_SIZE(12) + JSON_OBJECT_SIZE(19) + 250; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["segment"] = State.segment; + root["start"] = segState.start; + root["stop"] = segState.stop; + root["mode"] = (uint8_t) State.mode; + root["fx_mode"] = segState.mode[State.segment]; + root["speed"] = segState.speed[State.segment]; + root["brightness"] = State.brightness; + JsonArray color = root.createNestedArray("color"); + color.add(main_color.white); + color.add(main_color.red); + color.add(main_color.green); + color.add(main_color.blue); + color.add(back_color.white); + color.add(back_color.red); + color.add(back_color.green); + color.add(back_color.blue); + color.add(xtra_color.white); + color.add(xtra_color.red); + color.add(xtra_color.green); + color.add(xtra_color.blue); + root["ws_fxopt"] = segState.options; + root["hostname"] = HOSTNAME; + #if defined(ENABLE_MQTT) + root["mqtt_host"] = mqtt_host; + root["mqtt_port"] = mqtt_port; + root["mqtt_user"] = mqtt_user; + root["mqtt_pass"] = mqtt_pass; + #endif + root["ws_seg"] = Config.segments; + root["ws_cnt"] = Config.stripSize; + root["ws_rgbo"] = Config.RGBOrder; + root["ws_pin"] = Config.pin; + root["ws_trans"] = Config.transEffect; + uint16_t msg_len = measureJson(root) + 1; + char * buffer = (char *) malloc(msg_len); + serializeJson(root, buffer, msg_len); + jsonBuffer.clear(); + return buffer; +} + +char * listStateJSON() { + const size_t bufferSize = JSON_OBJECT_SIZE(3) + 25; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["segment"] = State.segment; + root["mode"] = (uint8_t) State.mode; + root["brightness"] = State.brightness; + uint16_t msg_len = measureJson(root) + 1; + char * buffer = (char *) malloc(msg_len); + serializeJson(root, buffer, msg_len); + jsonBuffer.clear(); + return buffer; +} + +char * listSegmentStateJSON(uint8_t _seg) { + const size_t bufferSize = JSON_ARRAY_SIZE(12) + JSON_OBJECT_SIZE(6) + 100; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["start"] = strip->getSegment(_seg)->start; + root["stop"] = strip->getSegment(_seg)->stop; + root["fx_mode"] = segState.mode[_seg]; + root["speed"] = segState.speed[_seg]; + JsonArray color = root.createNestedArray("color"); + //color.add((strip->getColors(_seg)[0] >> 24) & 0xFF); + color.add((segState.colors[_seg][0] >> 24) & 0xFF); + color.add((segState.colors[_seg][0] >> 16) & 0xFF); + color.add((segState.colors[_seg][0] >> 8) & 0xFF); + color.add((segState.colors[_seg][0]) & 0xFF); + color.add((segState.colors[_seg][1] >> 24) & 0xFF); + color.add((segState.colors[_seg][1] >> 16) & 0xFF); + color.add((segState.colors[_seg][1] >> 8) & 0xFF); + color.add((segState.colors[_seg][1]) & 0xFF); + color.add((segState.colors[_seg][2] >> 24) & 0xFF); + color.add((segState.colors[_seg][2] >> 16) & 0xFF); + color.add((segState.colors[_seg][2] >> 8) & 0xFF); + color.add((segState.colors[_seg][2]) & 0xFF); + root["ws_fxopt"] = strip->getOptions(_seg); + uint16_t msg_len = measureJson(root) + 1; + char * buffer = (char *) malloc(msg_len); + serializeJson(root, buffer, msg_len); + jsonBuffer.clear(); + return buffer; +} + +void getStateJSON() { + char * buffer = listStateJSONfull(); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send ( 200, "application/json", buffer); + free (buffer); +} + +char * listConfigJSON() { + #if defined(ENABLE_MQTT) + const size_t bufferSize = JSON_OBJECT_SIZE(10) + 150; + #else + const size_t bufferSize = JSON_OBJECT_SIZE(6) + 100; + #endif + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["hostname"] = HOSTNAME; + #if defined(ENABLE_MQTT) + root["mqtt_host"] = mqtt_host; + root["mqtt_port"] = mqtt_port; + root["mqtt_user"] = mqtt_user; + root["mqtt_pass"] = mqtt_pass; + #endif + root["ws_seg"] = Config.segments; + root["ws_cnt"] = Config.stripSize; + root["ws_rgbo"] = Config.RGBOrder; + root["ws_pin"] = Config.pin; + root["ws_trans"] = Config.transEffect; + uint16_t msg_len = measureJson(root) + 1; + char * buffer = (char *) malloc(msg_len); + serializeJson(root, buffer, msg_len); + jsonBuffer.clear(); + return buffer; +} + +void getConfigJSON() { + char * buffer = listConfigJSON(); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send ( 200, "application/json", buffer); + free (buffer); +} + +char * listModesJSON() { + const size_t bufferSize = JSON_ARRAY_SIZE(strip->getModeCount() + 3) + (strip->getModeCount() + 1)*JSON_OBJECT_SIZE(2) + 2000; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonArray root = jsonBuffer.to(); + JsonObject objecttoggle = root.createNestedObject(); + objecttoggle["mode"] = "toggle"; + objecttoggle["name"] = "TOGGLE"; + JsonObject objecton = root.createNestedObject(); + objecton["mode"] = "on"; + objecton["name"] = "ON"; + JsonObject objectoff = root.createNestedObject(); + objectoff["mode"] = "off"; + objectoff["name"] = "OFF"; + for (uint8_t i = 0; i < strip->getModeCount(); i++) { + JsonObject object = root.createNestedObject(); + object["mode"] = i; + object["name"] = strip->getModeName(i); + } + uint16_t msg_len = measureJson(root) + 1; + char * buffer = (char *) malloc(msg_len); + serializeJson(root, buffer, msg_len); + jsonBuffer.clear(); + return buffer; +} + +void getModesJSON() { + char * buffer = listModesJSON(); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send ( 200, "application/json", buffer); + free (buffer); +} + +char * listESPStateJSON() { + const size_t bufferSize = JSON_OBJECT_SIZE(31) + 1500; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["HOSTNAME"] = HOSTNAME; + root["version"] = SKETCH_VERSION; + root["heap"] = ESP.getFreeHeap(); + root["sketch_size"] = ESP.getSketchSize(); + root["free_sketch_space"] = ESP.getFreeSketchSpace(); + root["flash_chip_size"] = ESP.getFlashChipSize(); + root["flash_chip_real_size"] = ESP.getFlashChipRealSize(); + root["flash_chip_speed"] = ESP.getFlashChipSpeed(); + root["sdk_version"] = ESP.getSdkVersion(); + root["core_version"] = ESP.getCoreVersion(); + root["cpu_freq"] = ESP.getCpuFreqMHz(); + root["chip_id"] = ESP.getFlashChipId(); + #if defined(USE_WS2812FX_DMA) + #if USE_WS2812FX_DMA == 0 + root["animation_lib"] = "WS2812FX_DMA"; + #endif + #if USE_WS2812FX_DMA == 1 + root["animation_lib"] = "WS2812FX_UART1"; + #endif + #if USE_WS2812FX_DMA == 2 + root["animation_lib"] = "WS2812FX_UART2"; + #endif + #else + root["animation_lib"] = "WS2812FX"; + #endif + root["ws2812_pin"] = Config.pin; + root["led_count"] = Config.stripSize; + root["rgb_order"] = Config.RGBOrder; + if (strstr(Config.RGBOrder, "W") != NULL) { + root["rgbw_mode"] = "ON"; + } else { + root["rgbw_mode"] = "OFF"; + } + #if defined(ENABLE_BUTTON) + root["button_mode"] = "ON"; + root["button_pin"] = ENABLE_BUTTON; + #else + root["button_mode"] = "OFF"; + #endif + #if defined(ENABLE_BUTTON_GY33) + root["button_gy33"] = "ON"; + root["gy33_pin"] = ENABLE_BUTTON_GY33; + #else + root["button_gy33"] = "OFF"; + #endif + #if defined(ENABLE_REMOTE) + root["ir_remote"] = "ON"; + root["tsop_ir_pin"] = ENABLE_REMOTE; + #else + root["ir_remote"] = "OFF"; + #endif + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + root["mqtt"] = "MQTT"; + #endif + #if ENABLE_MQTT == 1 + root["mqtt"] = "AMQTT"; + #endif + #else + root["mqtt"] = "OFF"; + #endif + #if defined(ENABLE_HOMEASSISTANT) + root["home_assistant"] = "ON"; + #else + root["home_assistant"] = "OFF"; + #endif + #if defined(ENABLE_OTA) + #if ENABLE_OTA == 0 + root["ota"] = "ARDUINO"; + #endif + #if ENABLE_OTA == 1 + root["ota"] = "HTTP"; + #endif + #else + root["ota"] = "OFF"; + #endif + #if defined(ENABLE_STATE_SAVE) + root["state_save"] = "SPIFFS"; + #else + root["state_save"] = "OFF"; + #endif + uint16_t msg_len = measureJson(root) + 1; + char * buffer = (char *) malloc(msg_len); + serializeJson(root, buffer, msg_len); + jsonBuffer.clear(); + return buffer; +} +void getESPStateJSON() { + char * buffer = listESPStateJSON(); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "application/json", buffer); + free (buffer); +} diff --git a/Arduino/McLighting/mode_custom_ws2812fx_animations.h b/Arduino/McLighting/mode_custom_ws2812fx_animations.h new file mode 100644 index 00000000..52be4361 --- /dev/null +++ b/Arduino/McLighting/mode_custom_ws2812fx_animations.h @@ -0,0 +1,258 @@ +// Prototypes +uint16_t convertSpeed(uint8_t _mcl_speed); +uint32_t trans(uint32_t _newcolor, uint32_t _oldcolor, uint8_t _level, uint8_t _steps); +// End Prototypes +/* +Example of adding the example: https://github.com/kitesurfer1404/WS2812FX/blob/master/examples/ws2812fx_custom_FastLED/ws2812fx_custom_FastLED.ino +as a custom effect + +More info on how to create custom aniamtions for WS2812FX: https://github.com/kitesurfer1404/WS2812FX/blob/master/extras/WS2812FX%20Users%20Guide.md#custom-effects +*/ + +uint16_t handleSegmentOFF(void) { + WS2812FX::Segment* _seg = strip->getSegment(); + return _seg->speed/(_seg->stop - _seg->start); +} + +// *************************************************************************** +// Function for automatic cycling +// *************************************************************************** +void handleAutoPlay(uint8_t _seg) { + //WS2812FX::Segment* _seg = strip->getSegment(); + if (autoDelay[_seg] <= millis()) { + uint32_t _hex_colors[3] = {}; + //if (_seg == + _hex_colors[0] = autoParams[autoCount[_seg]][0]; + _hex_colors[1] = autoParams[autoCount[_seg]][1]; + _hex_colors[2] = autoParams[autoCount[_seg]][2]; + //} + strip->setColors(_seg, _hex_colors); + strip->setSpeed(_seg, convertSpeed((uint16_t)autoParams[autoCount[_seg]][3])); + strip->setMode(_seg, (uint8_t)autoParams[autoCount[_seg]][4]); + //strip->trigger(); + autoDelay[_seg] = millis() + (unsigned long)autoParams[autoCount[_seg]][5]; + DBG_OUTPUT_PORT.printf("autoTick[%d][%d]: {0x%08x, 0x%08x, 0x%08x, %d, %d, %d}\r\n", _seg, autoCount[_seg], autoParams[autoCount[_seg]][0], autoParams[autoCount[_seg]][1], autoParams[autoCount[_seg]][2], autoParams[autoCount[_seg]][3], autoParams[autoCount[_seg]][4], autoParams[autoCount[_seg]][5]); + autoCount[_seg]++; + if (autoCount[_seg] >= (sizeof(autoParams) / sizeof(autoParams[0]))) autoCount[_seg] = 0; + } +} + +uint16_t handleAuto(void) { + WS2812FX::Segment* _seg = strip->getSegment(); + return _seg->speed/(_seg->stop - _seg->start); +} + +uint16_t handleCustomWS(void) { + WS2812FX::Segment* _seg = strip->getSegment(); + return _seg->speed/(_seg->stop - _seg->start); +} + +#if defined(CUSTOM_WS2812FX_ANIMATIONS) + // *************************************************************************** + // TV mode to be reviewed + // *************************************************************************** + uint16_t darkTime[10] = {250,250,250,250,250,250,250,250,250,250}; + uint8_t dipInterval[10] = {10,10,10,10,10,10,10,10,10,10}; + unsigned long dipStartTime[10] = {}; + uint8_t ledState[10] = {LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW}; + unsigned long previousMillis[10]= {0,0,0,0,0,0,0,0,0,0}; + uint16_t interv[10] = {2000,2000,2000,2000,2000,2000,2000,2000,2000,2000}; + uint8_t twitch[10]= {50,50,50,50,50,50,50,50,50,50}; + uint8_t dipCount[10] = {0,0,0,0,0,0,0,0,0,0}; + bool timeToDip[10] = {false,false,false,false,false,false,false,false,false,false}; + + + void hsb2rgbAN1(uint16_t index, uint8_t sat, uint8_t bright, uint16_t led) { + // Source: https://blog.adafruit.com/2012/03/14/constant-brightness-hsb-to-rgb-algorithm/ + uint8_t temp[5], n = (index >> 8) % 3; + temp[0] = temp[3] = (uint8_t)(( (sat ^ 255) * bright) / 255); + temp[1] = temp[4] = (uint8_t)((((( (index & 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); + temp[2] = (uint8_t)(((((((index & 255) ^ 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); + strip->setPixelColor(led, temp[n + 2], temp[n + 1], temp[n], 0); + } + + + uint16_t handleTV(void) { + WS2812FX::Segment* _seg = strip->getSegment(); + uint8_t _seg_num = strip->getSegmentIndex(); + if (timeToDip[_seg_num] == false) { + if((millis() - previousMillis[_seg_num]) > interv[_seg_num]) { + previousMillis[_seg_num] = millis(); + //interv = random(750,4001);//Adjusts the interval for more/less frequent random light changes + interv[_seg_num] = random(800-(512 - (_seg->speed/64)),6001-(2731 - (_seg->speed/24))); + twitch[_seg_num] = random(40,100);// Twitch provides motion effect but can be a bit much if too high + dipCount[_seg_num]++; + } + if((millis() - previousMillis[_seg_num]) < twitch[_seg_num]) { + uint16_t led=random(_seg->start, _seg->stop); + ledState[_seg_num] = ledState[_seg_num] == LOW ? HIGH : LOW; // if the LED is off turn it on and vice-versa: + ledstates[led] = ((ledState[_seg_num]) ? 255 : 0); + for (uint16_t j=_seg->start; j<=_seg->stop; j++) { + uint16_t index = (j%3 == 0) ? 400 : random(0,767); + hsb2rgbAN1(index, 200, ledstates[j], j); + } + if (dipCount[_seg_num] > dipInterval[_seg_num]) { + timeToDip[_seg_num] = true; + dipCount[_seg_num] = 0; + dipStartTime[_seg_num] = millis(); + darkTime[_seg_num] = random(50,150); + dipInterval[_seg_num] = random(5,250);// cycles of flicker + } + } + } else { + if (millis() - dipStartTime[_seg_num] < darkTime[_seg_num]) { + for (uint16_t i = _seg->start; i <= _seg->stop; i++) { + ledstates[i] = 0; + for (uint16_t j=_seg->start; j<=_seg->stop; j++) { + uint16_t index = (j%3 == 0) ? 400 : random(0,767); + hsb2rgbAN1(index, 200, ledstates[j], j); + } + } + } else { + timeToDip[_seg_num] = false; + } + } + return _seg->speed/(_seg->stop - _seg->start); + } + // *************************************************************************** + // E1.31 mode + // *************************************************************************** + uint16_t handleE131(void) { + WS2812FX::Segment* _seg = strip->getSegment(); + return _seg->speed/(_seg->stop - _seg->start); + } + + void handleE131Play(void) { + if (!e131->isEmpty()) { + e131_packet_t packet; + e131->pull(&packet); // Pull packet from ring buffer + + uint16_t universe = htons(packet.universe); + uint8_t *data = packet.property_values + 1; + + if (universe < START_UNIVERSE || universe > END_UNIVERSE) return; //async will take care about filling the buffer + + // Serial.printf("Universe %u / %u Channels | Packet#: %u / Errors: %u / CH1: %u\n", + // htons(packet.universe), // The Universe for this packet + // htons(packet.property_value_count) - 1, // Start code is ignored, we're interested in dimmer data + // e131.stats.num_packets, // Packet counter + // e131.stats.packet_errors, // Packet error counter + // packet.property_values[1]); // Dimmer data for Channel 1 + /* #if defined(RGBW) + uint16_t multipacketOffset = (universe - START_UNIVERSE) * 128; //if more than 128 LEDs * 4 colors = 512 channels, client will send in next higher universe + if (Config.stripSize <= multipacketOffset) return _seg->speed/(_seg->stop - _seg->start); + uint16_t len = (128 + multipacketOffset > Config.stripSize) ? (Config.stripSize - multipacketOffset) : 128; + #else*/ + uint16_t multipacketOffset = (universe - START_UNIVERSE) * 170; //if more than 170 LEDs * 3 colors = 510 channels, client will send in next higher universe + if (Config.stripSize <= multipacketOffset) return; + uint16_t len = (170 + multipacketOffset > Config.stripSize) ? (Config.stripSize - multipacketOffset) : 170; + /* #endif */ + for (uint8_t k = 0; k < Config.segments; k++) { + if (segState.mode[k] == FX_MODE_CUSTOM_3) { + for (uint16_t i = 0; i < len; i++){ + if ((i >= strip->getSegment(k)->start) && (i <= strip->getSegment(k)->stop)) { + uint16_t j = i * 3; + /* #if defined(RGBW) + strip->setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], data[j + 3]); + #else */ + strip->setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], 0); + /* #endif */ + } + } + } + } + } + } + + /* + * paste in the Fire2012 code with a small edit at the end which uses the + * setPixelColor() function to copy the color data to the ws2812fx instance. + */ + #include //https://github.com/FastLED/FastLED + // Fire2012 by Mark Kriegsman, July 2012 + // as part of "Five Elements" shown here: http://youtu.be/knWiGsmgycY + //// + // This basic one-dimensional 'fire' simulation works roughly as follows: + // There's a underlying array of 'heat' cells, that model the temperature + // at each point along the line. Every cycle through the simulation, + // four steps are performed: + // 1) All cells cool down a little bit, losing heat to the air + // 2) The heat from each cell drifts 'up' and diffuses a little + // 3) Sometimes randomly new 'sparks' of heat are added at the bottom + // 4) The heat from each cell is rendered as a color into the leds array + // The heat-to-color mapping uses a black-body radiation approximation. + // + // Temperature is in arbitrary units from 0 (cold black) to 255 (white hot). + // + // This simulation scales it self a bit depending on NUM_LEDS; it should look + // "OK" on anywhere from 20 to 100 LEDs without too much tweaking. + // + // I recommend running this simulation at anywhere from 30-100 frames per second, + // meaning an interframe delay of about 10-35 milliseconds. + // + // Looks best on a high-density LED setup (60+ pixels/meter). + // + // + // There are two main parameters you can play with to control the look and + // feel of your fire: COOLING (used in step 1 above), and SPARKING (used + // in step 3 above). + // + // COOLING: How much does the air cool as it rises? + // Less cooling = taller flames. More cooling = shorter flames. + // Default 50, suggested range 20-100 + #define COOLING 70 + + // SPARKING: What chance (out of 255) is there that a new spark will be lit? + // Higher chance = more roaring fire. Lower chance = more flickery fire. + // Default 120, suggested range 50-200. + #define SPARKING 120 + + uint16_t handleFire2012(void) { + // Array of temperature readings at each simulation cell + WS2812FX::Segment* _seg = strip->getSegment(); + + // Step 1. Cool down every cell a little + for( uint16_t i = _seg->start; i <= _seg->stop; i++) { + ledstates[i] = qsub8(ledstates[i], random8(0, ((COOLING * 10) / (_seg->stop - _seg->start)+1) + 2)); + } + + // Step 2. Heat from each cell drifts 'up' and diffuses a little + for( uint16_t k= _seg->stop; k >= (_seg->start + 2); k--) { + ledstates[k] = (ledstates[k - 1] + ledstates[k - 2] + ledstates[k - 2]) / 3; + } + + // Step 3. Randomly ignite new 'sparks' of heat near the bottom + if( random8() < SPARKING ) { + uint8_t y = random8(7) + _seg->start; + ledstates[y] = qadd8(ledstates[y], random8(160,255) ); + } + + // Step 4. Map from heat cells to LED colors + for( uint16_t j = _seg->start; j <= _seg->stop; j++) { + CRGB color = HeatColor(ledstates[j]); + uint16_t pixel; + if ((_seg->options & 128) > 0) { + pixel = _seg->stop + (_seg->start - j); + } else { + pixel = j; + } + strip->setPixelColor(pixel, color.red, color.green, color.blue, 0); + } + return _seg->speed/(_seg->stop - _seg->start); + } + + uint16_t handleGradient(void) { + WS2812FX::Segment* _seg = strip->getSegment(); + for(uint16_t j = 0; j <= (_seg->stop - _seg->start); j++) { + uint16_t pixel; + if ((_seg->options & 128) > 0) { + pixel = _seg->stop - j; + } else { + pixel = _seg->start + j; + } + uint32_t color = trans(_seg->colors[1], _seg->colors[0], j, (_seg->stop - _seg->start)); + strip->setPixelColor(pixel, ((color >> 16) & 0xFF), ((color >> 8) & 0xFF), ((color >> 0) & 0xFF), ((color >> 24) & 0xFF)); + } + return _seg->speed/(_seg->stop - _seg->start); + } +#endif diff --git a/Arduino/McLighting/request_handlers.h b/Arduino/McLighting/request_handlers.h index 7572a724..fa1c68bc 100644 --- a/Arduino/McLighting/request_handlers.h +++ b/Arduino/McLighting/request_handlers.h @@ -1,114 +1,107 @@ // *************************************************************************** // Request handlers // *************************************************************************** -void getArgs() { - if (server.arg("rgb") != "") { - uint32_t rgb = (uint32_t) strtol(server.arg("rgb").c_str(), NULL, 16); +// *************************************************************************** +// Handler functions for WS and MQTT +// *************************************************************************** +bool handleSetMainColor(uint8_t * mypayload) { + // decode rgb data + uint32_t rgb = (uint32_t) strtoul((const char *) &mypayload[1], NULL, 16); + if (rgb != segState.colors[State.segment][0]) { + main_color.white = ((rgb >> 24) & 0xFF); main_color.red = ((rgb >> 16) & 0xFF); main_color.green = ((rgb >> 8) & 0xFF); main_color.blue = ((rgb >> 0) & 0xFF); - } else { - main_color.red = server.arg("r").toInt(); - main_color.green = server.arg("g").toInt(); - main_color.blue = server.arg("b").toInt(); - } - ws2812fx_speed = constrain(server.arg("s").toInt(), 0, 255); - if (server.arg("s") == "") { - ws2812fx_speed = 196; - } - - if (server.arg("m") != "") { - ws2812fx_mode = constrain(server.arg("m").toInt(), 0, strip.getModeCount() - 1); - } - - main_color.red = constrain(main_color.red, 0, 255); - main_color.green = constrain(main_color.green, 0, 255); - main_color.blue = constrain(main_color.blue, 0, 255); - - DBG_OUTPUT_PORT.print("Mode: "); - DBG_OUTPUT_PORT.print(mode); - DBG_OUTPUT_PORT.print(", Color: "); - DBG_OUTPUT_PORT.print(main_color.red); - DBG_OUTPUT_PORT.print(", "); - DBG_OUTPUT_PORT.print(main_color.green); - DBG_OUTPUT_PORT.print(", "); - DBG_OUTPUT_PORT.print(main_color.blue); - DBG_OUTPUT_PORT.print(", Speed:"); - DBG_OUTPUT_PORT.print(ws2812fx_speed); - DBG_OUTPUT_PORT.print(", Brightness:"); - DBG_OUTPUT_PORT.println(brightness); + return true; + } + return false; } - -long convertSpeed(int mcl_speed) { - long ws2812_speed = mcl_speed * 256; - ws2812_speed = SPEED_MAX - ws2812_speed; - if (ws2812_speed < SPEED_MIN) { - ws2812_speed = SPEED_MIN; - } - if (ws2812_speed > SPEED_MAX) { - ws2812_speed = SPEED_MAX; +bool handleSetBackColor(uint8_t * mypayload) { + // decode rgb data + uint32_t rgb = (uint32_t) strtoul((const char *) &mypayload[2], NULL, 16); + if (rgb != segState.colors[State.segment][1]) { + back_color.white = ((rgb >> 24) & 0xFF); + back_color.red = ((rgb >> 16) & 0xFF); + back_color.green = ((rgb >> 8) & 0xFF); + back_color.blue = ((rgb >> 0) & 0xFF); + return true; } - return ws2812_speed; + return false; } - - -// *************************************************************************** -// Handler functions for WS and MQTT -// *************************************************************************** -void handleSetMainColor(uint8_t * mypayload) { +bool handleSetXtraColor(uint8_t * mypayload) { // decode rgb data - uint32_t rgb = (uint32_t) strtol((const char *) &mypayload[1], NULL, 16); - main_color.red = ((rgb >> 16) & 0xFF); - main_color.green = ((rgb >> 8) & 0xFF); - main_color.blue = ((rgb >> 0) & 0xFF); - strip.setColor(main_color.red, main_color.green, main_color.blue); + uint32_t rgb = (uint32_t) strtoul((const char *) &mypayload[3], NULL, 16); + if (rgb != segState.colors[State.segment][2]) { + xtra_color.white = ((rgb >> 24) & 0xFF); + xtra_color.red = ((rgb >> 16) & 0xFF); + xtra_color.green = ((rgb >> 8) & 0xFF); + xtra_color.blue = ((rgb >> 0) & 0xFF); + return true; + } + return false; } -void handleSetAllMode(uint8_t * mypayload) { +bool handleSetAllMode(uint8_t * mypayload) { // decode rgb data - uint32_t rgb = (uint32_t) strtol((const char *) &mypayload[1], NULL, 16); - - main_color.red = ((rgb >> 16) & 0xFF); - main_color.green = ((rgb >> 8) & 0xFF); - main_color.blue = ((rgb >> 0) & 0xFF); - - for (int i = 0; i < strip.numPixels(); i++) { - strip.setPixelColor(i, main_color.red, main_color.green, main_color.blue); + uint32_t rgb = (uint32_t) strtoul((const char *) &mypayload[1], NULL, 16); + if ((State.mode = OFF) || (segState.mode[State.segment] != strip->getMode(State.segment)) || (rgb != segState.colors[State.segment][0])) { + main_color.white = ((rgb >> 24) & 0xFF); + main_color.red = ((rgb >> 16) & 0xFF); + main_color.green = ((rgb >> 8) & 0xFF); + main_color.blue = ((rgb >> 0) & 0xFF); + DBG_OUTPUT_PORT.printf("WS: Set all leds to main color: R: [%u] G: [%u] B: [%u] W: [%u]\r\n", main_color.red, main_color.green, main_color.blue, main_color.white); + fx_mode = FX_MODE_STATIC; + State.mode = SET; + return true; } - strip.show(); - DBG_OUTPUT_PORT.printf("WS: Set all leds to main color: [%u] [%u] [%u]\n", main_color.red, main_color.green, main_color.blue); - exit_func = true; - mode = ALL; + return false; } void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { // decode led index - char templed[3]; - strncpy (templed, (const char *) &mypayload[firstChar], 2 ); + char templed[5]; + strncpy (templed, (const char *) &mypayload[firstChar], 4 ); + templed[4] = 0x00; uint8_t led = atoi(templed); - DBG_OUTPUT_PORT.printf("led value: [%i]. Entry threshold: <= [%i] (=> %s)\n", led, strip.numPixels(), mypayload ); - if (led <= strip.numPixels()) { + DBG_OUTPUT_PORT.printf("led value: [%i]. Entry threshold: <= [%i] (=> %s)\r\n", led, Config.stripSize, mypayload ); + if (led <= Config.stripSize) { char redhex[3]; char greenhex[3]; char bluehex[3]; - strncpy (redhex, (const char *) &mypayload[2 + firstChar], 2 ); - strncpy (greenhex, (const char *) &mypayload[4 + firstChar], 2 ); - strncpy (bluehex, (const char *) &mypayload[6 + firstChar], 2 ); + char whitehex[3]; + strncpy (whitehex, (const char *) &mypayload[4 + firstChar], 2 ); + strncpy (redhex, (const char *) &mypayload[6 + firstChar], 2 ); + strncpy (greenhex, (const char *) &mypayload[8 + firstChar], 2 ); + strncpy (bluehex, (const char *) &mypayload[10 + firstChar], 2 ); + whitehex[2] = 0x00; + redhex[2] = 0x00; + greenhex[2] = 0x00; + bluehex[2] = 0x00; + /* ledstates[led].red = strtol(redhex, NULL, 16); ledstates[led].green = strtol(greenhex, NULL, 16); ledstates[led].blue = strtol(bluehex, NULL, 16); - DBG_OUTPUT_PORT.printf("rgb.red: [%s] rgb.green: [%s] rgb.blue: [%s]\n", redhex, greenhex, bluehex); - DBG_OUTPUT_PORT.printf("rgb.red: [%i] rgb.green: [%i] rgb.blue: [%i]\n", strtol(redhex, NULL, 16), strtol(greenhex, NULL, 16), strtol(bluehex, NULL, 16)); - DBG_OUTPUT_PORT.printf("WS: Set single led [%i] to [%i] [%i] [%i] (%s)!\n", led, ledstates[led].red, ledstates[led].green, ledstates[led].blue, mypayload); - - - strip.setPixelColor(led, ledstates[led].red, ledstates[led].green, ledstates[led].blue); - strip.show(); + ledstates[led].white = strtol(whitehex, NULL, 16); + DBG_OUTPUT_PORT.printf("rgb.red: [%s] rgb.green: [%s] rgb.blue: [%s] rgb.white: [%s]\r\n", redhex, greenhex, bluehex, whitehex); + DBG_OUTPUT_PORT.printf("rgb.red: [%i] rgb.green: [%i] rgb.blue: [%i] rgb.white: [%i]\r\n", strtol(redhex, NULL, 16), strtol(greenhex, NULL, 16), strtol(bluehex, NULL, 16), strtol(whitehex, NULL, 16)); + DBG_OUTPUT_PORT.printf("WS: Set single led [%i] to [%i] [%i] [%i] [%i] (%s)!\r\n", led, ledstates[led].red, ledstates[led].green, ledstates[led].blue, ledstates[led].white, mypayload); + strip->setPixelColor(led, ledstates[led].red, ledstates[led].green, ledstates[led].blue, ledstates[led].white); + */ + LEDState color; + color.red = strtol(redhex, NULL, 16); + color.green = strtol(greenhex, NULL, 16); + color.blue = strtol(bluehex, NULL, 16); + color.white = strtol(whitehex, NULL, 16); + //DBG_OUTPUT_PORT.printf("rgb.red: [%s] rgb.green: [%s] rgb.blue: [%s] rgb.white: [%s]\r\n", redhex, greenhex, bluehex, whitehex); + //DBG_OUTPUT_PORT.printf("rgb.red: [%i] rgb.green: [%i] rgb.blue: [%i] rgb.white: [%i]\r\n", strtol(redhex, NULL, 16), strtol(greenhex, NULL, 16), strtol(bluehex, NULL, 16), strtol(whitehex, NULL, 16)); + //DBG_OUTPUT_PORT.printf("WS: Set single led [%i] to [%i] [%i] [%i] [%i] (%s)!\r\n", led, color.red, color.green, color.blue, color.white, mypayload); + strip->setPixelColor(led, color.red, color.green, color.blue, color.white); + strip->show(); } - exit_func = true; - mode = CUSTOM; + State.mode = HOLD; + fx_mode= FX_MODE_CUSTOM_1; } void handleSetDifferentColors(uint8_t * mypayload) { @@ -123,30 +116,27 @@ void handleSetDifferentColors(uint8_t * mypayload) { void handleRangeDifferentColors(uint8_t * mypayload) { uint8_t* nextCommand = 0; nextCommand = (uint8_t*) strtok((char*) mypayload, "R"); - // While there is a range to process R0110<00ff00> + // While there is a range to process R00010010<0000ff00> while (nextCommand) { // Loop for each LED. - char startled[3] = { 0, 0, 0 }; - char endled[3] = { 0, 0, 0 }; - char colorval[7] = { 0, 0, 0, 0, 0, 0, 0 }; - strncpy ( startled, (const char *) &nextCommand[0], 2 ); - strncpy ( endled, (const char *) &nextCommand[2], 2 ); - strncpy ( colorval, (const char *) &nextCommand[4], 6 ); - int rangebegin = atoi(startled); - int rangeend = atoi(endled); - DBG_OUTPUT_PORT.printf("Setting RANGE from [%i] to [%i] as color [%s] \n", rangebegin, rangeend, colorval); + char startled[5]; + char endled[5]; + char colorval[9]; + strncpy ( startled, (const char *) &nextCommand[0], 4 ); + startled[4] = 0x00; + strncpy ( endled, (const char *) &nextCommand[4], 4 ); + endled[4] = 0x00; + strncpy ( colorval, (const char *) &nextCommand[8], 8 ); + colorval[8] = 0x00; + uint8_t rangebegin = atoi(startled); + uint8_t rangeend = atoi(endled); + DBG_OUTPUT_PORT.printf("Setting RANGE from [%i] to [%i] as color [%s]\r\n", rangebegin, rangeend, colorval); while ( rangebegin <= rangeend ) { - char rangeData[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - if ( rangebegin < 10 ) { - // Create the valid 'nextCommand' structure - sprintf(rangeData, "0%d%s", rangebegin, colorval); - } - if ( rangebegin >= 10 ) { - // Create the valid 'nextCommand' structure - sprintf(rangeData, "%d%s", rangebegin, colorval); - } + char rangeData[18]; + snprintf(rangeData, sizeof(rangeData), "%04d%s", rangebegin, colorval); + rangeData[sizeof(rangeData) - 1] = 0x00; // Set one LED handleSetSingleLED((uint8_t*) rangeData, 0); rangebegin++; @@ -157,117 +147,110 @@ void handleRangeDifferentColors(uint8_t * mypayload) { } } -void setModeByStateString(String saved_state_string) { - String str_mode = getValue(saved_state_string, '|', 1); - mode = static_cast(str_mode.toInt()); - String str_ws2812fx_mode = getValue(saved_state_string, '|', 2); - ws2812fx_mode = str_ws2812fx_mode.toInt(); - String str_ws2812fx_speed = getValue(saved_state_string, '|', 3); - ws2812fx_speed = str_ws2812fx_speed.toInt(); - String str_brightness = getValue(saved_state_string, '|', 4); - brightness = str_brightness.toInt(); - String str_red = getValue(saved_state_string, '|', 5); - main_color.red = str_red.toInt(); - String str_green = getValue(saved_state_string, '|', 6); - main_color.green = str_green.toInt(); - String str_blue = getValue(saved_state_string, '|', 7); - main_color.blue = str_blue.toInt(); - - DBG_OUTPUT_PORT.printf("ws2812fx_mode: %d\n", ws2812fx_mode); - DBG_OUTPUT_PORT.printf("ws2812fx_speed: %d\n", ws2812fx_speed); - DBG_OUTPUT_PORT.printf("brightness: %d\n", brightness); - DBG_OUTPUT_PORT.printf("main_color.red: %d\n", main_color.red); - DBG_OUTPUT_PORT.printf("main_color.green: %d\n", main_color.green); - DBG_OUTPUT_PORT.printf("main_color.blue: %d\n", main_color.blue); - - strip.setMode(ws2812fx_mode); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - strip.setBrightness(brightness); - strip.setColor(main_color.red, main_color.green, main_color.blue); -} - -void handleSetNamedMode(String str_mode) { - exit_func = true; - - if (str_mode.startsWith("=off")) { - mode = OFF; - } - if (str_mode.startsWith("=all")) { - mode = ALL; - } - if (str_mode.startsWith("=wipe")) { - mode = WIPE; - } - if (str_mode.startsWith("=rainbow")) { - mode = RAINBOW; - } - if (str_mode.startsWith("=rainbowCycle")) { - mode = RAINBOWCYCLE; - } - if (str_mode.startsWith("=theaterchase")) { - mode = THEATERCHASE; - } - if (str_mode.startsWith("=twinkleRandom")) { - mode = TWINKLERANDOM; - } - if (str_mode.startsWith("=theaterchaseRainbow")) { - mode = THEATERCHASERAINBOW; - } - if (str_mode.startsWith("=tv")) { - mode = TV; +bool setModeByStateString(String saved_state_string) { + if (getValue(saved_state_string, '|', 0) == "STA") { + DBG_OUTPUT_PORT.printf("Parsed state: %s\r\n", saved_state_string.c_str()); + + String str_mode = getValue(saved_state_string, '|', 1); + State.mode = static_cast(str_mode.toInt()); + + String str_fx_mode = getValue(saved_state_string, '|', 2); + fx_mode = str_fx_mode.toInt(); + + String _fx_speed = getValue(saved_state_string, '|', 3); + segState.speed[State.segment] = _fx_speed.toInt(); + #if defined(ENABLE_MQTT) + //snprintf(mqtt_buf, sizeof(mqtt_buf), "OK ?%i", _fx_speed); + //sendmqtt(); + #endif + + String str_brightness = getValue(saved_state_string, '|', 4); + State.brightness = str_brightness.toInt(); + + String str_red = getValue(saved_state_string, '|', 5); + main_color.red = str_red.toInt(); + String str_green = getValue(saved_state_string, '|', 6); + main_color.green = str_green.toInt(); + String str_blue = getValue(saved_state_string, '|', 7); + main_color.blue = str_blue.toInt(); + String str_white = getValue(saved_state_string, '|', 8); + main_color.white = str_white.toInt(); + + str_red = getValue(saved_state_string, '|', 9); + back_color.red = str_red.toInt(); + str_green = getValue(saved_state_string, '|', 10); + back_color.green = str_green.toInt(); + str_blue = getValue(saved_state_string, '|', 11); + back_color.blue = str_blue.toInt(); + str_white = getValue(saved_state_string, '|', 12); + back_color.white = str_white.toInt(); + + str_red = getValue(saved_state_string, '|', 13); + xtra_color.red = str_red.toInt(); + str_green = getValue(saved_state_string, '|', 14); + xtra_color.green = str_green.toInt(); + str_blue = getValue(saved_state_string, '|', 15); + xtra_color.blue = str_blue.toInt(); + str_white = getValue(saved_state_string, '|', 16); + xtra_color.white = str_white.toInt(); + + DBG_OUTPUT_PORT.print("Set to state: "); + DBG_OUTPUT_PORT.println(listStateJSON()); + return true; + } else { + DBG_OUTPUT_PORT.println("Saved state not found!"); + return false; } + return false; } void handleSetWS2812FXMode(uint8_t * mypayload) { - mode = HOLD; - uint8_t ws2812fx_mode = (uint8_t) strtol((const char *) &mypayload[1], NULL, 10); - ws2812fx_mode = constrain(ws2812fx_mode, 0, 255); - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(ws2812fx_mode); - strip.start(); -} - -char* listStatusJSON() { - char json[255]; - - char modeName[30]; - strncpy_P(modeName, (PGM_P)strip.getModeName(strip.getMode()), sizeof(modeName)); // copy from progmem - - snprintf(json, sizeof(json), "{\"mode\":%d, \"ws2812fx_mode\":%d, \"ws2812fx_mode_name\":\"%s\", \"speed\":%d, \"brightness\":%d, \"color\":[%d, %d, %d]}", - mode, strip.getMode(), modeName, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue); - return json; -} - -void getStatusJSON() { - server.send ( 200, "application/json", listStatusJSON() ); -} - -String listModesJSON() { - String modes = "["; - for (uint8_t i = 0; i < strip.getModeCount(); i++) { - modes += "{\"mode\":"; - modes += i; - modes += ", \"name\":\""; - modes += strip.getModeName(i); - modes += "\"},"; - } - modes += "{}]"; - return modes; -} - -void getModesJSON() { - server.send ( 200, "application/json", listModesJSON() ); + if (isDigit(mypayload[1])) { + fx_mode = (uint8_t) strtol((const char *) &mypayload[1], NULL, 10); + fx_mode = constrain(fx_mode, 0, strip->getModeCount() - 1); + State.mode = SET; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", fx_mode); + sendmqtt(); + #endif + } else { + if (strcmp((char *) &mypayload[1], "toggle") == 0) { + if (State.mode == OFF) { + State.mode = SET; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", segState.mode[State.segment]); + sendmqtt(); + #endif + } else { + State.mode = OFF; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /off", ""); + sendmqtt(); + #endif + } + } + if (strcmp((char *) &mypayload[1], "on") == 0) { + State.mode = SET; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", segState.mode[State.segment]); + sendmqtt(); + #endif + } + if (strcmp((char *) &mypayload[1], "off") == 0) { + State.mode = OFF; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /off", ""); + sendmqtt(); + #endif + } + } } - // *************************************************************************** // HTTP request handlers // *************************************************************************** void handleMinimalUpload() { - char temp[1500]; - - snprintf ( temp, 1500, - "\ + char message[] = "\ \ \ ESP8266 Upload\ @@ -282,13 +265,13 @@ void handleMinimalUpload() { \ \ \ - " - ); - server.send ( 200, "text/html", temp ); + "; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send ( 200, "text/html", message ); } void handleNotFound() { - String message = "File Not Found\n\n"; + String message = "File Not Found\r\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; @@ -302,31 +285,395 @@ void handleNotFound() { server.send ( 404, "text/plain", message ); } -// automatic cycling -Ticker autoTicker; -int autoCount = 0; +// *************************************************************************** +// Functions and variables +// *************************************************************************** +void Dbg_Prefix(bool _mqtt, uint8_t _num) { + if (_mqtt == true) { + DBG_OUTPUT_PORT.print("MQTT: "); + } else { + DBG_OUTPUT_PORT.print("WS: "); + webSocket.sendTXT(_num, "OK"); + } +} + +void checkpayload(uint8_t * _payload, bool mqtt = false, uint8_t num = 0) { + // Select segment + boolean _updateState = false; + boolean _updateSegState = false; + // / ==> Set active segment + if (_payload[0] == 'S') { + if (_payload[1] == 's') { + uint8_t _seg = (uint8_t) strtol((const char *) &_payload[2], NULL, 10); + _seg = constrain(_seg, 0, Config.segments - 1); + if (prevsegment != _seg) { + prevsegment = State.segment; + State.segment = _seg; + getSegmentParams(State.segment); + //memcpy(hexcolors_trans, segState.colors[State.segment], sizeof(hexcolors_trans)); + _updateState = true; + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set segment to: [%u]\r\n", _seg); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK Ss%i", _seg); + sendmqtt(); + #endif + } + } + // / ==> Set segment first LED + if (_payload[1] == '[') { + uint16_t _seg_start = (uint16_t) strtol((const char *) &_payload[2], NULL, 10); + _seg_start = constrain(_seg_start, 0, Config.stripSize - 1); + if (_seg_start != segState.start) { + segState.start = _seg_start; + _updateSegState = true; + setSegmentSize(); + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set segment start to: [%u]\r\n", _seg_start); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK S[%i", _seg_start); + sendmqtt(); + #endif + } + } + // / ==> Set segment last LED + if (_payload[1] == ']') { + uint16_t _seg_stop = (uint16_t) strtol((const char *) &_payload[2], NULL, 10); + _seg_stop = constrain(_seg_stop, segState.start, Config.stripSize - 1); + if (_seg_stop != segState.stop) { + segState.stop = _seg_stop; + _updateSegState = true; + setSegmentSize(); + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set segment stop to: [%u]\r\n", _seg_stop); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK S]%i", _seg_stop); + sendmqtt(); + #endif + } + } + if (_payload[1] == 'o') { + uint8_t _fx_options = (uint8_t) strtol((const char *) &_payload[2], NULL, 10); + _fx_options = ((constrain(_fx_options, 0, 255)>>1)<<1); + if (_fx_options != segState.options) { + segState.options= _fx_options; + _updateSegState = true; + strip->setOptions(State.segment, segState.options); + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set segment options to: [%u]\r\n", _fx_options); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK So%i", _fx_options); + sendmqtt(); + #endif + } + } + char * buffer = listSegmentStateJSON(State.segment); + if (mqtt == true) { + DBG_OUTPUT_PORT.print("MQTT: "); + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + mqtt_client->publish(mqtt_outtopic, buffer); + #endif + #if ENABLE_MQTT == 1 + mqtt_client->publish(mqtt_outtopic, qospub, false, buffer); + #endif + #endif + } else { + DBG_OUTPUT_PORT.print("WS: "); + webSocket.sendTXT(num, "OK"); + webSocket.sendTXT(num, buffer); + } + } + // / ==> Set WS2812 mode. + if (_payload[0] == '/') { + handleSetWS2812FXMode(_payload); + if (fx_mode != strip->getMode(State.segment)) { + _updateSegState = true; + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set WS2812 mode: [%s]\r\n", _payload); + } + } + // # ==> Set main color - ## ==> Set 2nd color - ### ==> Set 3rd color + if (_payload[0] == '#') { + if (_payload[2] == '#') { + _updateSegState = handleSetXtraColor(_payload); + if (_updateSegState) { + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set 3rd color to: R: [%u] G: [%u] B: [%u] W: [%u]\r\n", xtra_color.red, xtra_color.green, xtra_color.blue, xtra_color.white); + } + } else if (_payload[1] == '#') { + _updateSegState = handleSetBackColor(_payload); + if (_updateSegState) { + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set 2nd color to: R: [%u] G: [%u] B: [%u] W: [%u]\r\n", back_color.red, back_color.green, back_color.blue, back_color.white); + } + } else { + _updateSegState = handleSetMainColor(_payload); + if (_updateSegState) { + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set main color to: R: [%u] G: [%u] B: [%u] W: [%u]\r\n", main_color.red, main_color.green, main_color.blue, main_color.white); + } + } + if (_updateSegState) { + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %s", _payload); + #endif + State.mode = SET; + } + } + + // ? ==> Set speed + if (_payload[0] == '?') { + uint16_t _fx_speed = (uint16_t) strtol((const char *) &_payload[1], NULL, 10); + _fx_speed = constrain(_fx_speed, SPEED_MIN, SPEED_MAX ); + //if (segState.speed[State.segment] != _fx_speed) {} + State.mode = SET; + segState.speed[State.segment] = _fx_speed; + _updateSegState = true; + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set speed to: [%u]\r\n", _fx_speed); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK ?%i", _fx_speed); + sendmqtt(); + #endif + } -void autoTick() { - strip.setColor(autoParams[autoCount][0]); - strip.setSpeed(convertSpeed((uint8_t)autoParams[autoCount][1])); - strip.setMode((uint8_t)autoParams[autoCount][2]); - autoTicker.once((float)autoParams[autoCount][3], autoTick); - DBG_OUTPUT_PORT.print("autoTick "); - DBG_OUTPUT_PORT.println(autoCount); + // % ==> Set brightness + if (_payload[0] == '%') { + uint8_t b = (uint8_t) strtol((const char *) &_payload[1], NULL, 10); + State.brightness = constrain(b, 0, 255); + if (strip->getBrightness() != State.brightness) { + State.mode = SET; + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set brightness to: [%u]\r\n", State.brightness); + _updateState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %%%i", State.brightness); + sendmqtt(); + #endif + } + } - autoCount++; - if (autoCount >= (sizeof(autoParams) / sizeof(autoParams[0]))) autoCount = 0; -} + // * ==> Set main color and light all LEDs (Shortcut) + if (_payload[0] == '*') { + _updateSegState = handleSetAllMode(_payload); + if (_updateSegState) { + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set main color and light all LEDs [%s]\r\n", _payload); + } + } -void handleAutoStart() { - autoCount = 0; - autoTick(); - strip.start(); -} + // ! ==> Set single LED in given color + if (_payload[0] == '!') { + handleSetSingleLED(_payload, 1); + Dbg_Prefix(mqtt, num); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %s", _payload); + #endif + DBG_OUTPUT_PORT.printf("Set single LED in given color [%s]\r\n", _payload); + } + + // + ==> Set multiple LED in the given colors + if (_payload[0] == '+') { + handleSetDifferentColors(_payload); + Dbg_Prefix(mqtt, num); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %s", _payload); + #endif + DBG_OUTPUT_PORT.printf("Set multiple LEDs in given color [%s]\r\n", _payload); + } -void handleAutoStop() { - autoTicker.detach(); - strip.stop(); + // + ==> Set range of LEDs in the given color + if (_payload[0] == 'R') { + handleRangeDifferentColors(_payload); + Dbg_Prefix(mqtt, num); + DBG_OUTPUT_PORT.printf("Set range of LEDs in given color [%s]\r\n", _payload); + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %s", _payload); + #endif + } +#if defined(ENABLE_STATE_SAVE) + if (_updateState) { + //State.mode = SET; + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + } + if (_updateSegState) { + State.mode = SET; + if(save_seg_state.active()) save_seg_state.detach(); + save_seg_state.once(3, tickerSaveSegmentState); + + } + _updateState = false; + _updateSegState = false; +#endif + + // $ ==> Get config Info. + if (_payload[0] == 'C') { + bool _updateStrip = false; + bool _updateConfig = false; + bool _updateState = false; + if (_payload[1] == 's') { + if (_payload[2] == 's') { + char _num_segments[3]; + snprintf(_num_segments, sizeof(_num_segments), "%s", &_payload[3]); + _num_segments[2] = 0x00; + Config.segments = constrain(atoi(_num_segments), 1, MAX_NUM_SEGMENTS - 1); + if (State.segment >= Config.segments) { + State.segment = Config.segments - 1; + _updateState = true; + } + _updateStrip = true; + } + if (_payload[2] == 'c') { + char tmp_count[6]; + snprintf(tmp_count, sizeof(tmp_count), "%s", &_payload[3]); + tmp_count[5] = 0x00; + Config.stripSize = constrain(atoi(tmp_count), 1, MAXLEDS); + _updateStrip = true; + } + if (_payload[2] == 'r') { + char _rgbOrder[5]; + snprintf(_rgbOrder, sizeof(_rgbOrder), "%s", &_payload[3]); + _rgbOrder[4] = 0x00; + checkRGBOrder(_rgbOrder); + _updateStrip=true; + } + #if !defined(USE_WS2812FX_DMA) + if (_payload[2] == 'p') { + char tmp_pin[3]; + snprintf(tmp_pin, sizeof(tmp_pin), "%s", &_payload[3]); + tmp_pin[2] = 0x00; + checkPin(atoi(tmp_pin)); + _updateStrip = true; + } + #endif + } + if (_updateStrip){ + initStrip(); + } + if (_payload[1] == 'h') { + snprintf(HOSTNAME, sizeof(HOSTNAME), "%s", &_payload[2]); + HOSTNAME[sizeof(HOSTNAME) - 1] = 0x00; + _updateConfig = true; + } + #if defined(ENABLE_MQTT) + if (_payload[1] == 'm') { + if (_payload[2] == 'h') { + snprintf(mqtt_host, sizeof(mqtt_host), "%s", &_payload[3]); + mqtt_host[sizeof(mqtt_host) - 1] = 0x00; + _updateConfig = true; + } + if (_payload[2] == 'p') { + char tmp_port[6]; + snprintf(tmp_port, sizeof(tmp_port), "%s", &_payload[3]); + tmp_port[sizeof(tmp_port) - 1] = 0x00; + mqtt_port = constrain(atoi(tmp_port), 0, 65535); + _updateConfig = true; + } + if (_payload[2] == 'u') { + snprintf(mqtt_user, sizeof(mqtt_user), "%s", &_payload[3]); + mqtt_user[sizeof(mqtt_user) - 1] = 0x00; + _updateConfig = true; + } + if (_payload[2] == 'w') { + snprintf(mqtt_pass, sizeof(mqtt_pass), "%s", &_payload[3]); + mqtt_pass[sizeof(mqtt_pass) - 1] = 0x00; + _updateConfig = true; + } + } + if (_updateConfig) { + initMqtt(); + } + #endif + if (_payload[1] == 'e') { + char _transEffect[2]; + snprintf(_transEffect, sizeof(_transEffect), "%s", &_payload[2]); + _transEffect[sizeof(_transEffect) - 1] = 0x00; + Config.transEffect = atoi(_transEffect); + _updateConfig = true; + } + + char * buffer = listConfigJSON(); + if (mqtt == true) { + DBG_OUTPUT_PORT.print("MQTT: "); + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + mqtt_client->publish(mqtt_outtopic, buffer); + #endif + #if ENABLE_MQTT == 1 + mqtt_client->publish(mqtt_outtopic, qospub, false, buffer); + #endif + #endif + } else { + DBG_OUTPUT_PORT.print("WS: "); + webSocket.sendTXT(num, "OK"); + webSocket.sendTXT(num, buffer); + } +#if defined(ENABLE_STATE_SAVE) + if (_updateStrip || _updateConfig) { + if(save_conf.active()) save_conf.detach(); + save_conf.once(3, tickerSaveConfig); + } + if (_updateState) { + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + } +#endif + _updateStrip = false; + _updateConfig = false; + _updateState = false; + DBG_OUTPUT_PORT.printf("Get status info: %s\r\n", buffer); + free (buffer); + } + + // $ ==> Get status Info. + if (_payload[0] == '$') { + char * buffer = listStateJSONfull(); + if (mqtt == true) { + DBG_OUTPUT_PORT.print("MQTT: "); + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + mqtt_client->publish(mqtt_outtopic, buffer); + #endif + #if ENABLE_MQTT == 1 + mqtt_client->publish(mqtt_outtopic, qospub, false, buffer); + #endif + #endif + } else { + DBG_OUTPUT_PORT.print("WS: "); + webSocket.sendTXT(num, "OK"); + webSocket.sendTXT(num, buffer); + } + DBG_OUTPUT_PORT.printf("Get status info: %s\r\n", buffer); + free (buffer); + } + + // ~ ==> Get WS2812 modes. + if (_payload[0] == '~') { + char * buffer = listModesJSON(); + if (mqtt == true) { + DBG_OUTPUT_PORT.print("MQTT: "); + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + uint16_t msg_len = strlen(buffer) + 1; + mqtt_client->beginPublish(mqtt_outtopic, msg_len, true); + mqtt_client->write((const uint8_t*)buffer, msg_len); + mqtt_client->endPublish(); + #endif + #if ENABLE_MQTT == 1 + mqtt_client->publish(mqtt_outtopic, qospub, false, buffer); + #endif + #endif + } else { + DBG_OUTPUT_PORT.print("WS: "); + webSocket.sendTXT(num, "OK"); + webSocket.sendTXT(num, buffer); + } + DBG_OUTPUT_PORT.println("Get WS2812 modes."); + DBG_OUTPUT_PORT.println(buffer); + free (buffer); + } } // *************************************************************************** @@ -335,12 +682,12 @@ void handleAutoStop() { void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght) { switch (type) { case WStype_DISCONNECTED: - DBG_OUTPUT_PORT.printf("WS: [%u] Disconnected!\n", num); + DBG_OUTPUT_PORT.printf("WS: [%u] Disconnected!\r\n", num); break; case WStype_CONNECTED: { IPAddress ip = webSocket.remoteIP(num); - DBG_OUTPUT_PORT.printf("WS: [%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload); + DBG_OUTPUT_PORT.printf("WS: [%u] Connected from %d.%d.%d.%d url: %s\r\n", num, ip[0], ip[1], ip[2], ip[3], payload); // send message to client webSocket.sendTXT(num, "Connected"); @@ -348,300 +695,909 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght break; case WStype_TEXT: - DBG_OUTPUT_PORT.printf("WS: [%u] get Text: %s\n", num, payload); + DBG_OUTPUT_PORT.printf("WS: [%u] get Text: %s\r\n", num, payload); - // # ==> Set main color - if (payload[0] == '#') { - handleSetMainColor(payload); - DBG_OUTPUT_PORT.printf("Set main color to: [%u] [%u] [%u]\n", main_color.red, main_color.green, main_color.blue); - webSocket.sendTXT(num, "OK"); - } + checkpayload(payload, false, num); + break; + } +} + +// *************************************************************************** +// MQTT callback / connection handler +// *************************************************************************** +#if defined(ENABLE_MQTT) + + #if defined(ENABLE_HOMEASSISTANT) + void tickerSendState(){ + new_ha_mqtt_msg = true; + } + + LEDState temp2rgb(uint16_t kelvin) { + uint16_t tmp_internal = kelvin / 100.0; + LEDState tmp_color; + + // red + if (tmp_internal <= 66) { + tmp_color.red = 255; + } else { + float tmp_red = 329.698727446 * pow(tmp_internal - 60, -0.1332047592); + if (tmp_red < 0) { + tmp_color.red = 0; + } else if (tmp_red > 255) { + tmp_color.red = 255; + } else { + tmp_color.red = tmp_red; + } + } + + // green + if (tmp_internal <= 66) { + float tmp_green = 99.4708025861 * log(tmp_internal) - 161.1195681661; + if (tmp_green < 0) { + tmp_color.green = 0; + } else if (tmp_green > 255) { + tmp_color.green = 255; + } else { + tmp_color.green = tmp_green; + } + } else { + float tmp_green = 288.1221695283 * pow(tmp_internal - 60, -0.0755148492); + if (tmp_green < 0) { + tmp_color.green = 0; + } else if (tmp_green > 255) { + tmp_color.green = 255; + } else { + tmp_color.green = tmp_green; + } + } + + // blue + if (tmp_internal >= 66) { + tmp_color.blue = 255; + } else if (tmp_internal <= 19) { + tmp_color.blue = 0; + } else { + float tmp_blue = 138.5177312231 * log(tmp_internal - 10) - 305.0447927307; + if (tmp_blue < 0) { + tmp_color.blue = 0; + } else if (tmp_blue > 255) { + tmp_color.blue = 255; + } else { + tmp_color.blue = tmp_blue; + } + } + return tmp_color; + } + + void sendState() { + const size_t bufferSize = JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(12) + 1000; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["state"] = (State.mode != OFF) ? on_cmd : off_cmd; + #if defined(ENABLE_MQTT_INCLUDE_IP) + root["ip"] = WiFi.localIP().toString(); + #endif + root["segment"] = State.segment; + JsonObject color = root.createNestedObject("color"); + color["r"] = main_color.red; + color["g"] = main_color.green; + color["b"] = main_color.blue; + color["w"] = main_color.white; + color["r2"] = back_color.red; + color["g2"] = back_color.green; + color["b2"] = back_color.blue; + color["w2"] = back_color.white; + color["r3"] = xtra_color.red; + color["g3"] = xtra_color.green; + color["b3"] = xtra_color.blue; + color["w3"] = xtra_color.white; + if (strstr(Config.RGBOrder, "W") != NULL) { + root["white_value"]= main_color.white; + } + root["brightness"] = State.brightness; + root["color_temp"] = color_temp; + root["speed"] = segState.speed[State.segment]; + //char modeName[30]; + //strncpy_P(modeName, (PGM_P)strip->getModeName(strip->getMode()), sizeof(modeName)); // copy from progmem + #if defined(ENABLE_HOMEASSISTANT) + if (State.mode == OFF){ + root["effect"] = "OFF"; + } else { + root["effect"] = strip->getModeName(strip->getMode()); + } + #endif + uint16_t msg_len = measureJson(root) + 1; + char buffer[msg_len]; + serializeJson(root, buffer, sizeof(buffer)); + jsonBuffer.clear(); + #if ENABLE_MQTT == 0 + //mqtt_client->publish(mqtt_ha_state_out, buffer, true); + mqtt_client->beginPublish(mqtt_ha_state_out, msg_len-1, true); + mqtt_client->write((const uint8_t*)buffer, msg_len-1); + mqtt_client->endPublish(); + DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\r\n", mqtt_ha_state_out, buffer); + #endif + #if ENABLE_MQTT == 1 + mqtt_client->publish(mqtt_ha_state_out, 1, true, buffer); + DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\r\n", mqtt_ha_state_out, buffer); + #endif + new_ha_mqtt_msg = false; + ha_send_data.detach(); + DBG_OUTPUT_PORT.printf("Heap size: %u\r\n", ESP.getFreeHeap()); + } - // ? ==> Set speed - if (payload[0] == '?') { - uint8_t d = (uint8_t) strtol((const char *) &payload[1], NULL, 10); - ws2812fx_speed = constrain(d, 0, 255); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - DBG_OUTPUT_PORT.printf("WS: Set speed to: [%u]\n", ws2812fx_speed); - webSocket.sendTXT(num, "OK"); + bool processJson(char* message) { + bool _updateState = false; + bool _updateSegState = false; + const size_t bufferSize = JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(12) + 500; + DynamicJsonDocument jsonBuffer(bufferSize); + DeserializationError error = deserializeJson(jsonBuffer, message); + if (error) { + DBG_OUTPUT_PORT.print("parseObject() failed: "); + DBG_OUTPUT_PORT.println(error.c_str()); + jsonBuffer.clear(); + return false; + } + //DBG_OUTPUT_PORT.println("JSON ParseObject() done!"); + JsonObject root = jsonBuffer.as(); + + if (root.containsKey("state")) { + const char* state_in = root["state"]; + if (strcmp(state_in, on_cmd) == 0) { + State.mode = SET; + _updateState = true; + } + else if (strcmp(state_in, off_cmd) == 0) { + State.mode = OFF; + _updateState = true; + jsonBuffer.clear(); + return true; + } + } + if (root.containsKey("segment")) { + uint8_t json_segment = constrain((uint8_t) root["segment"], 0, Config.segments - 1); + if (prevsegment != json_segment) { + prevsegment = State.segment; + State.segment = json_segment; + getSegmentParams(State.segment); + State.mode = SET; + _updateState = true; + } + } + if (root.containsKey("color")) { + JsonObject color = root["color"]; + if (color.containsKey("r")) { main_color.red = (uint8_t) color["r"]; } + if (color.containsKey("g")) { main_color.green = (uint8_t) color["g"]; } + if (color.containsKey("b")) { main_color.blue = (uint8_t) color["b"]; } + if (color.containsKey("w")) { main_color.white = (uint8_t) color["w"]; } + if (color.containsKey("r2")) { back_color.red = (uint8_t) color["r2"]; } + if (color.containsKey("g2")) { back_color.green = (uint8_t) color["g2"]; } + if (color.containsKey("b2")) { back_color.blue = (uint8_t) color["b2"]; } + if (color.containsKey("w2")) { back_color.white = (uint8_t) color["w2"]; } + if (color.containsKey("r3")) { xtra_color.red = (uint8_t) color["r3"]; } + if (color.containsKey("g3")) { xtra_color.green = (uint8_t) color["g3"]; } + if (color.containsKey("b3")) { xtra_color.blue = (uint8_t) color["b3"]; } + if (color.containsKey("w3")) { xtra_color.white = (uint8_t) color["w3"]; } + _updateSegState = true; } - // % ==> Set brightness - if (payload[0] == '%') { - uint8_t b = (uint8_t) strtol((const char *) &payload[1], NULL, 10); - brightness = ((b >> 0) & 0xFF); - DBG_OUTPUT_PORT.printf("WS: Set brightness to: [%u]\n", brightness); - strip.setBrightness(brightness); - webSocket.sendTXT(num, "OK"); + if (root.containsKey("white_value")) { + uint8_t json_white_value = constrain((uint8_t) root["white_value"], 0, 255); + if (json_white_value != main_color.white) { + main_color.white = json_white_value; + _updateSegState = true; + } } - // * ==> Set main color and light all LEDs (Shortcut) - if (payload[0] == '*') { - handleSetAllMode(payload); - webSocket.sendTXT(num, "OK"); + if (root.containsKey("speed")) { + uint8_t _fx_speed = constrain((uint8_t) root["speed"], 0, 255); + if (_fx_speed != segState.speed[State.segment]) { + segState.speed[State.segment] = _fx_speed; + _updateSegState = true; + } } - // ! ==> Set single LED in given color - if (payload[0] == '!') { - handleSetSingleLED(payload, 1); - webSocket.sendTXT(num, "OK"); + if (root.containsKey("color_temp")) { + //temp comes in as mireds, need to convert to kelvin then to RGB + color_temp = (uint16_t) root["color_temp"]; + uint16_t kelvin = 1000000 / color_temp; + main_color = temp2rgb(kelvin); + _updateSegState = true; } - // + ==> Set multiple LED in the given colors - if (payload[0] == '+') { - handleSetDifferentColors(payload); - webSocket.sendTXT(num, "OK"); + if (root.containsKey("brightness")) { + uint8_t json_brightness = constrain((uint8_t) root["brightness"], 0, 255); //fix #224 + if (json_brightness != State.brightness) { + State.brightness = json_brightness; + State.mode = SET; + _updateState = true; + } } - // + ==> Set range of LEDs in the given color - if (payload[0] == 'R') { - handleRangeDifferentColors(payload); - webSocket.sendTXT(num, "OK"); + if (root.containsKey("effect")) { + String effectString = root["effect"].as(); + #if defined(ENABLE_HOMEASSISTANT) + if(effectString == "OFF"){ + State.mode = OFF; + _updateState = true; + } + #endif + for (uint8_t i = 0; i < strip->getModeCount(); i++) { + if(String(strip->getModeName(i)) == effectString) { + State.mode = SET; + fx_mode = i; + _updateState = true; + _updateSegState = true; + break; + } + } } + #if defined(ENABLE_STATE_SAVE) + if (_updateState) { + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + } + if (_updateSegState) { + State.mode = SET; + if(save_seg_state.active()) save_seg_state.detach(); + save_seg_state.once(3, tickerSaveSegmentState); + } + #endif + _updateState = false; + _updateSegState = false; + jsonBuffer.clear(); + return true; + } + #endif + + #if ENABLE_MQTT == 0 + void onMqttMessage(char* topic, byte* payload_in, uint16_t length) { + #endif + + #if ENABLE_MQTT == 1 + void onMqttMessage(char* topic, char* payload_in, AsyncMqttClientMessageProperties properties, size_t length, size_t index, size_t total) { + #endif + uint8_t * payload = (uint8_t *) malloc(length + 1); + memcpy(payload, payload_in, length); + payload[length] = 0; + DBG_OUTPUT_PORT.printf("MQTT: Recieved [%s]: %s\r\n", topic, payload); + + #if defined(ENABLE_HOMEASSISTANT) + if (strcmp(topic, mqtt_ha_state_in) == 0) { + if (!processJson((char*)payload)) { + return; + } + if(ha_send_data.active()) ha_send_data.detach(); + ha_send_data.once(DELAY_MQTT_HA_MESSAGE, tickerSendState); + } else if (strcmp(topic, mqtt_intopic) == 0) { + #endif - // = ==> Activate named mode - if (payload[0] == '=') { - // we get mode data - String str_mode = String((char *) &payload[0]); + checkpayload(payload, true); - handleSetNamedMode(str_mode); + #if defined(ENABLE_HOMEASSISTANT) + } + #endif + free(payload); + } - DBG_OUTPUT_PORT.printf("Activated mode [%u]!\n", mode); - webSocket.sendTXT(num, "OK"); + #if ENABLE_MQTT == 0 + void mqtt_reconnect() { + // Loop until we're reconnected + while (!mqtt_client->connected() && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) { + mqtt_reconnect_retries++; + DBG_OUTPUT_PORT.printf("Attempting MQTT connection %d / %d ...\r\n", mqtt_reconnect_retries, MQTT_MAX_RECONNECT_TRIES); + // Attempt to connect + if (mqtt_client->connect(mqtt_clientid, mqtt_user, mqtt_pass, mqtt_will_topic, 2, true, mqtt_will_payload, true)) { + DBG_OUTPUT_PORT.println("MQTT connected!"); + // Once connected, publish an announcement... + char message[18 + strlen(HOSTNAME) + 1]; + strcpy(message, "McLighting ready: "); + strcat(message, HOSTNAME); + mqtt_client->publish(mqtt_outtopic, message); + // ... and resubscribe + mqtt_client->subscribe(mqtt_intopic, qossub); + if(mqtt_lwt_boot_flag) { + mqtt_client->publish(mqtt_will_topic, "ONLINE"); + //mqtt_lwt_boot_flag = false; + } + #if defined(ENABLE_HOMEASSISTANT) + ha_send_data.detach(); + mqtt_client->subscribe(mqtt_ha_state_in, qossub); + ha_send_data.once(DELAY_MQTT_HA_MESSAGE, tickerSendState); + #if defined(MQTT_HOMEASSISTANT_SUPPORT) + const size_t bufferSize = JSON_ARRAY_SIZE(strip->getModeCount()+ 4) + JSON_OBJECT_SIZE(11) + 1500; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["name"] = mqtt_clientid; + #if defined(MQTT_HOME_ASSISTANT_0_87_SUPPORT) + root["schema"] = "json"; + #else + root["platform"] = "mqtt_json"; + #endif + root["state_topic"] = mqtt_ha_state_out; + root["command_topic"] = mqtt_ha_state_in; + #if !defined(MQTT_HOME_ASSISTANT_0_87_SUPPORT) + root["on_command_type"] = "first"; + #endif + root["brightness"] = "true"; + root["rgb"] = "true"; + if (strstr(Config.RGBOrder, "W") != NULL) { + root["white_value"]= "true"; + } + root["optimistic"] = "false"; + root["color_temp"] = "true"; + root["effect"] = "true"; + JsonArray effect_list = root.createNestedArray("effect_list"); + effect_list.add("OFF"); + for (uint8_t i = 0; i < strip->getModeCount(); i++) { + effect_list.add(strip->getModeName(i)); + } + // Following will never work for PubSubClient as message size > 1.6kB + // char buffer[measureJson(json) + 1]; + // serializeJson(root, buffer, sizeof(buffer)); + // mqtt_client->publish(String("homeassistant/light/" + String(HOSTNAME) + "/config").c_str(), buffer, true); + + // Alternate way to publish large messages using PubSubClient + uint16_t msg_len = measureJson(root) + 1; + char buffer[msg_len]; + serializeJson(root, buffer, sizeof(buffer)); + DBG_OUTPUT_PORT.println(buffer); + mqtt_client->beginPublish(mqtt_ha_config, msg_len-1, true); + mqtt_client->write((const uint8_t*)buffer, msg_len-1); + mqtt_client->endPublish(); + #endif + #endif + + DBG_OUTPUT_PORT.printf("MQTT topic in: %s\r\n", mqtt_intopic); + DBG_OUTPUT_PORT.printf("MQTT topic out: %s\r\n", mqtt_outtopic); + } else { + DBG_OUTPUT_PORT.print("failed, rc="); + DBG_OUTPUT_PORT.print(mqtt_client->state()); + DBG_OUTPUT_PORT.println(" try again in 5 seconds"); + // Wait 5 seconds before retrying + delay(5000); } + } + if (mqtt_reconnect_retries >= MQTT_MAX_RECONNECT_TRIES) { + DBG_OUTPUT_PORT.printf("MQTT connection failed, giving up after %d tries ...\r\n", mqtt_reconnect_retries); + } + } + #endif + #if ENABLE_MQTT == 1 + void connectToWifi() { + DBG_OUTPUT_PORT.println("Re-connecting to Wi-Fi..."); + WiFi.setSleepMode(WIFI_NONE_SLEEP); + WiFi.mode(WIFI_STA); + WiFi.hostname(HOSTNAME); + WiFi.begin(); + } - // $ ==> Get status Info. - if (payload[0] == '$') { - DBG_OUTPUT_PORT.printf("Get status info."); - - String json = listStatusJSON(); - DBG_OUTPUT_PORT.println(json); - webSocket.sendTXT(num, json); - } + void connectToMqtt() { + DBG_OUTPUT_PORT.println("Connecting to MQTT..."); + mqtt_client->connect(); + } - // ~ ==> Get WS2812 modes. - if (payload[0] == '~') { - DBG_OUTPUT_PORT.printf("Get WS2812 modes."); + void onWifiConnect(const WiFiEventStationModeGotIP& event) { + DBG_OUTPUT_PORT.println("Connected to Wi-Fi."); + connectToMqtt(); + } - String json = listModesJSON(); - DBG_OUTPUT_PORT.println(json); - webSocket.sendTXT(num, json); - } + void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) { + DBG_OUTPUT_PORT.println("Disconnected from Wi-Fi."); + #if defined(ENABLE_HOMEASSISTANT) + ha_send_data.detach(); + #endif + mqttReconnectTimer.detach(); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi + wifiReconnectTimer.once(2, connectToWifi); + } - // / ==> Set WS2812 mode. - if (payload[0] == '/') { - handleSetWS2812FXMode(payload); - webSocket.sendTXT(num, "OK"); + void onMqttConnect(bool sessionPresent) { + DBG_OUTPUT_PORT.println("Connected to MQTT."); + DBG_OUTPUT_PORT.print("Session present: "); + DBG_OUTPUT_PORT.println(sessionPresent); + char message[18 + strlen(HOSTNAME) + 1]; + strcpy(message, "McLighting ready: "); + strcat(message, HOSTNAME); + mqtt_client->publish(mqtt_outtopic, qospub, false, message); + //Subscribe + uint16_t packetIdSub1 = mqtt_client->subscribe(mqtt_intopic, qossub); + DBG_OUTPUT_PORT.printf("Subscribing at QoS %d, packetId: ", qossub); DBG_OUTPUT_PORT.println(packetIdSub1); + if(mqtt_lwt_boot_flag) { + mqtt_client->publish(mqtt_will_topic, qospub, false, "ONLINE"); + mqtt_lwt_boot_flag = false; } + #if defined(ENABLE_HOMEASSISTANT) + ha_send_data.detach(); + uint16_t packetIdSub2 = mqtt_client->subscribe((char *)mqtt_ha_state_in, qossub); + DBG_OUTPUT_PORT.printf("Subscribing at QoS %d, packetId: ", qossub); DBG_OUTPUT_PORT.println(packetIdSub2); + #if defined(MQTT_HOMEASSISTANT_SUPPORT) + const size_t bufferSize = JSON_ARRAY_SIZE(strip->getModeCount()+ 4) + JSON_OBJECT_SIZE(11) + 1500; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["name"] = mqtt_clientid; + #if defined(MQTT_HOME_ASSISTANT_0_87_SUPPORT) + root["schema"] = "json"; + #else + root["platform"] = "mqtt_json"; + #endif + root["state_topic"] = mqtt_ha_state_out; + root["command_topic"] = mqtt_ha_state_in; + #if !defined(MQTT_HOME_ASSISTANT_0_87_SUPPORT) + root["on_command_type"] = "first"; + #endif + root["brightness"] = "true"; + root["rgb"] = "true"; + if (strstr(Config.RGBOrder, "W") != NULL) { + root["white_value"]= "true"; + } + root["optimistic"] = "false"; + root["color_temp"] = "true"; + root["effect"] = "true"; + JsonArray effect_list = root.createNestedArray("effect_list"); + effect_list.add("OFF"); + for (uint8_t i = 0; i < strip->getModeCount(); i++) { + effect_list.add(strip->getModeName(i)); + } + char buffer[measureJson(root) + 1]; + serializeJson(root, buffer, sizeof(buffer)); + jsonBuffer.clear(); + mqtt_client->publish(mqtt_ha_config, qospub, true, buffer); + #endif + #endif + } - // start auto cycling - if (strcmp((char *)payload, "start") == 0 ) { - handleAutoStart(); - webSocket.sendTXT(num, "OK"); + void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) { + DBG_OUTPUT_PORT.print("Disconnected from MQTT, reason: "); + if (reason == AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT) { + DBG_OUTPUT_PORT.println("Bad server fingerprint."); + } else if (reason == AsyncMqttClientDisconnectReason::TCP_DISCONNECTED) { + DBG_OUTPUT_PORT.println("TCP Disconnected."); + } else if (reason == AsyncMqttClientDisconnectReason::MQTT_UNACCEPTABLE_PROTOCOL_VERSION) { + DBG_OUTPUT_PORT.println("Bad server fingerprint."); + } else if (reason == AsyncMqttClientDisconnectReason::MQTT_IDENTIFIER_REJECTED) { + DBG_OUTPUT_PORT.println("MQTT Identifier rejected."); + } else if (reason == AsyncMqttClientDisconnectReason::MQTT_SERVER_UNAVAILABLE) { + DBG_OUTPUT_PORT.println("MQTT server unavailable."); + } else if (reason == AsyncMqttClientDisconnectReason::MQTT_MALFORMED_CREDENTIALS) { + DBG_OUTPUT_PORT.println("MQTT malformed credentials."); + } else if (reason == AsyncMqttClientDisconnectReason::MQTT_NOT_AUTHORIZED) { + DBG_OUTPUT_PORT.println("MQTT not authorized."); + } else if (reason == AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE) { + DBG_OUTPUT_PORT.println("Not enough space on esp8266."); } - - // stop auto cycling - if (strcmp((char *)payload, "stop") == 0 ) { - handleAutoStop(); - webSocket.sendTXT(num, "OK"); + if (WiFi.isConnected()) { + mqttReconnectTimer.once(5, connectToMqtt); } - break; - } -} - -void checkForRequests() { - webSocket.loop(); - server.handleClient(); -} - + } + #endif +#endif // *************************************************************************** -// MQTT callback / connection handler +// Button management // *************************************************************************** -#ifdef ENABLE_MQTT -void mqtt_callback(char* topic, byte* payload_in, unsigned int length) { - uint8_t * payload = (uint8_t *)malloc(length + 1); - memcpy(payload, payload_in, length); - payload[length] = NULL; - DBG_OUTPUT_PORT.printf("MQTT: Message arrived [%s]\n", payload); - - // # ==> Set main color - if (payload[0] == '#') { - handleSetMainColor(payload); - DBG_OUTPUT_PORT.printf("MQTT: Set main color to [%u] [%u] [%u]\n", main_color.red, main_color.green, main_color.blue); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); - } - - // ? ==> Set speed - if (payload[0] == '?') { - uint8_t d = (uint8_t) strtol((const char *) &payload[1], NULL, 10); - ws2812fx_speed = constrain(d, 0, 255); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - DBG_OUTPUT_PORT.printf("MQTT: Set speed to [%u]\n", ws2812fx_speed); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); - } - - // % ==> Set brightness - if (payload[0] == '%') { - uint8_t b = (uint8_t) strtol((const char *) &payload[1], NULL, 10); - brightness = constrain(b, 0, 255); - strip.setBrightness(brightness); - DBG_OUTPUT_PORT.printf("MQTT: Set brightness to [%u]\n", brightness); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); +#if defined(ENABLE_BUTTON) + void shortKeyPress() { + DBG_OUTPUT_PORT.printf("Short button press\r\n"); + if (State.mode == OFF) { + setModeByStateString(BTN_MODE_SHORT); + prevmode = State.mode; + State.mode = SET; + } else { + State.mode = OFF; + } } - // * ==> Set main color and light all LEDs (Shortcut) - if (payload[0] == '*') { - handleSetAllMode(payload); - DBG_OUTPUT_PORT.printf("MQTT: Set main color and light all LEDs [%s]\n", payload); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); + // called when button is kept pressed for less than 2 seconds + void mediumKeyPress() { + DBG_OUTPUT_PORT.printf("Medium button press\r\n"); + setModeByStateString(BTN_MODE_MEDIUM); + prevmode = State.mode; + State.mode = SET; } - // ! ==> Set single LED in given color - if (payload[0] == '!') { - handleSetSingleLED(payload, 1); - DBG_OUTPUT_PORT.printf("MQTT: Set single LED in given color [%s]\n", payload); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); + // called when button is kept pressed for 2 seconds or more + void longKeyPress() { + DBG_OUTPUT_PORT.printf("Long button press\r\n"); + setModeByStateString(BTN_MODE_LONG); + prevmode = State.mode; + State.mode = SET; } - // + ==> Set multiple LED in the given colors - if (payload[0] == '+') { - handleSetDifferentColors(payload); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); - } + void button() { + if (millis() - keyPrevMillis >= keySampleIntervalMs) { + keyPrevMillis = millis(); - // R ==> Set range of LEDs in the given colors - if (payload[0] == 'R') { - handleRangeDifferentColors(payload); - DBG_OUTPUT_PORT.printf("MQTT: Set range of LEDS to single color: [%s]\n", payload); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); - } + byte currKeyState = digitalRead(ENABLE_BUTTON); - // = ==> Activate named mode - if (payload[0] == '=') { - String str_mode = String((char *) &payload[0]); - handleSetNamedMode(str_mode); - DBG_OUTPUT_PORT.printf("MQTT: Activate named mode [%s]\n", payload); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); + if ((prevKeyState == HIGH) && (currKeyState == LOW)) { + // key goes from not pressed to pressed + KeyPressCount = 0; + } + else if ((prevKeyState == LOW) && (currKeyState == HIGH)) { + if (KeyPressCount < longKeyPressCountMax && KeyPressCount >= mediumKeyPressCountMin) { + mediumKeyPress(); + } + else { + if (KeyPressCount < mediumKeyPressCountMin) { + shortKeyPress(); + } + } + } + else if (currKeyState == LOW) { + KeyPressCount++; + if (KeyPressCount >= longKeyPressCountMax) { + longKeyPress(); + } + } + prevKeyState = currKeyState; + } } +#endif - // $ ==> Get status Info. - if (payload[0] == '$') { - DBG_OUTPUT_PORT.printf("MQTT: Get status info.\n"); - mqtt_client.publish(mqtt_outtopic, listStatusJSON()); +#if defined(ENABLE_BUTTON_GY33) + void shortKeyPress_gy33() { + DBG_OUTPUT_PORT.printf("Short GY-33 button press\r\n"); + uint16_t red, green, blue, cl, ct, lux; + tcs.getRawData(&red, &green, &blue, &cl, &lux, &ct); + DBG_OUTPUT_PORT.printf("Raw Colors: R: [%d] G: [%d] B: [%d] Clear: [%d] Lux: [%d] Colortemp: [%d]\r\n", (int)red, (int)green, (int)blue, (int)cl, (int)lux, (int)ct); + uint8_t r, g, b, col, conf; + tcs.getData(&r, &g, &b, &col, &conf); + DBG_OUTPUT_PORT.printf("Colors: R: [%d] G: [%d] B: [%d] Color: [%d] Conf: [%d]\r\n", (int)r, (int)g, (int)b, (int)col, (int)conf); + main_color.red = (pow((r/255.0), GAMMA)*255); main_color.green = (pow((g/255.0), GAMMA)*255); main_color.blue = (pow((b/255.0), GAMMA)*255);main_color.white = 0; + State.mode = SET; } - // ~ ==> Get WS2812 modes. - // TODO: Fix this, doesn't return anything. Too long? - // Hint: https://github.com/knolleary/pubsubclient/issues/110 - if (payload[0] == '~') { - DBG_OUTPUT_PORT.printf("MQTT: Get WS2812 modes.\n"); - DBG_OUTPUT_PORT.printf("Error: Not implemented. Message too large for pubsubclient."); - mqtt_client.publish(mqtt_outtopic, "ERROR: Not implemented. Message too large for pubsubclient."); - //String json_modes = listModesJSON(); - //DBG_OUTPUT_PORT.printf(json_modes.c_str()); - - //int res = mqtt_client.publish(mqtt_outtopic, json_modes.c_str(), json_modes.length()); - //DBG_OUTPUT_PORT.printf("Result: %d / %d", res, json_modes.length()); + // called when button is kept pressed for less than 2 seconds + void mediumKeyPress_gy33() { + tcs.setConfig(MCU_LED_03, MCU_WHITE_OFF); } - // / ==> Set WS2812 mode. - if (payload[0] == '/') { - handleSetWS2812FXMode(payload); - DBG_OUTPUT_PORT.printf("MQTT: Set WS2812 mode [%s]\n", payload); - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); + // called when button is kept pressed for 2 seconds or more + void longKeyPress_gy33() { + tcs.setConfig(MCU_LED_OFF, MCU_WHITE_OFF); } - free(payload); -} + void button_gy33() { + if (millis() - keyPrevMillis_gy33 >= keySampleIntervalMs) { + keyPrevMillis_gy33 = millis(); -void mqtt_reconnect() { - // Loop until we're reconnected - while (!mqtt_client.connected() && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) { - mqtt_reconnect_retries++; - DBG_OUTPUT_PORT.printf("Attempting MQTT connection %d / %d ...\n", mqtt_reconnect_retries, MQTT_MAX_RECONNECT_TRIES); - // Attempt to connect - if (mqtt_client.connect(mqtt_clientid, mqtt_user, mqtt_pass)) { - DBG_OUTPUT_PORT.println("MQTT connected!"); - // Once connected, publish an announcement... - char * message = new char[18 + strlen(HOSTNAME) + 1]; - strcpy(message, "McLighting ready: "); - strcat(message, HOSTNAME); - mqtt_client.publish(mqtt_outtopic, message); - // ... and resubscribe - mqtt_client.subscribe(mqtt_intopic); + byte currKeyState_gy33 = digitalRead(ENABLE_BUTTON_GY33); - DBG_OUTPUT_PORT.printf("MQTT topic in: %s\n", mqtt_intopic); - DBG_OUTPUT_PORT.printf("MQTT topic out: %s\n", mqtt_outtopic); - } else { - DBG_OUTPUT_PORT.print("failed, rc="); - DBG_OUTPUT_PORT.print(mqtt_client.state()); - DBG_OUTPUT_PORT.println(" try again in 5 seconds"); - // Wait 5 seconds before retrying - delay(5000); + if ((prevKeyState_gy33 == HIGH) && (currKeyState_gy33 == LOW)) { + // key goes from not pressed to pressed + KeyPressCount_gy33 = 0; + } + else if ((prevKeyState_gy33 == LOW) && (currKeyState_gy33 == HIGH)) { + if (KeyPressCount_gy33 < longKeyPressCountMax_gy33 && KeyPressCount_gy33 >= mediumKeyPressCountMin_gy33) { + mediumKeyPress_gy33(); + } + else { + if (KeyPressCount_gy33 < mediumKeyPressCountMin_gy33) { + shortKeyPress_gy33(); + } + } + } + else if (currKeyState_gy33 == LOW) { + KeyPressCount_gy33++; + if (KeyPressCount_gy33 >= longKeyPressCountMax_gy33) { + longKeyPress_gy33(); + } + } + prevKeyState_gy33 = currKeyState_gy33; } } - if (mqtt_reconnect_retries >= MQTT_MAX_RECONNECT_TRIES) { - DBG_OUTPUT_PORT.printf("MQTT connection failed, giving up after %d tries ...\n", mqtt_reconnect_retries); - } -} #endif - +#if defined(ENABLE_REMOTE) // *************************************************************************** -// Button management +// Request handler for IR remote support // *************************************************************************** -#ifdef ENABLE_BUTTON -void shortKeyPress() { - DBG_OUTPUT_PORT.printf("Short button press\n"); - if (buttonState == false) { - setModeByStateString(BTN_MODE_SHORT); - buttonState = true; - } else { - mode = OFF; - buttonState = false; - } -} - -// called when button is kept pressed for less than 2 seconds -void mediumKeyPress() { - DBG_OUTPUT_PORT.printf("Medium button press\n"); - setModeByStateString(BTN_MODE_MEDIUM); -} - -// called when button is kept pressed for 2 seconds or more -void longKeyPress() { - DBG_OUTPUT_PORT.printf("Long button press\n"); - setModeByStateString(BTN_MODE_LONG); -} - -void button() { - if (millis() - keyPrevMillis >= keySampleIntervalMs) { - keyPrevMillis = millis(); - - byte currKeyState = digitalRead(BUTTON); - - if ((prevKeyState == HIGH) && (currKeyState == LOW)) { - // key goes from not pressed to pressed - KeyPressCount = 0; - } - else if ((prevKeyState == LOW) && (currKeyState == HIGH)) { - if (KeyPressCount < longKeyPressCountMax && KeyPressCount >= mediumKeyPressCountMin) { - mediumKeyPress(); +void handleRemote() { + uint8_t chng = 1; + bool _updateState = false; + bool _updateSegState = false; + if (irrecv.decode(&results)) { + DBG_OUTPUT_PORT.print("IR Code: 0x"); + DBG_OUTPUT_PORT.print(uint64ToString(results.value, HEX)); + DBG_OUTPUT_PORT.println(""); + if (results.value == rmt_commands[REPEATCMD]) { //Repeat + results.value = last_remote_cmd; + chng = 5; } - else { - if (KeyPressCount < mediumKeyPressCountMin) { - shortKeyPress(); + if (results.value == rmt_commands[ON_OFF]) { // ON/OFF TOGGLE + last_remote_cmd = 0; + if (State.mode == OFF) { + State.mode = SET; + _updateState = true; + } else { + State.mode = OFF; + _updateState = true; } } - } - else if (currKeyState == LOW) { - KeyPressCount++; - if (KeyPressCount >= longKeyPressCountMax) { - longKeyPress(); + if (State.mode == HOLD) { + if (results.value == rmt_commands[BRIGHTNESS_UP]) { //Brightness Up + last_remote_cmd = results.value; + if (State.brightness + chng <= 255) { + State.brightness = State.brightness + chng; + brightness_trans = State.brightness; + _updateState = true; + } + } + if (results.value == rmt_commands[BRIGHTNESS_DOWN]) { //Brightness down + last_remote_cmd = results.value; + if (State.brightness - chng >= 0) { + State.brightness = State.brightness - chng; + brightness_trans = State.brightness; + _updateState = true; + } + } + if ((segState.mode[State.segment] < FX_MODE_CUSTOM_0) || (segState.mode[State.segment] > FX_MODE_CUSTOM_1)) { + if (results.value == rmt_commands[SPEED_UP]) { //Speed Up + last_remote_cmd = results.value; + if (segState.speed[State.segment] + chng <= 65535) { + segState.speed[State.segment] = segState.speed[State.segment] + chng; + _updateSegState = true; + } + } + if (results.value == rmt_commands[SPEED_DOWN]) { //Speed down + last_remote_cmd = results.value; + if (segState.speed[State.segment] - chng >= 0) { + segState.speed[State.segment] = segState.speed[State.segment] - chng; + _updateSegState = true; + } + } + } + if ((segState.mode[State.segment] < FX_MODE_CUSTOM_0) || (segState.mode[State.segment] > FX_MODE_CUSTOM_4)) { + if (results.value == rmt_commands[RED_UP]) { //Red Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.red + chng <= 255) { + main_color.red = main_color.red + chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.red + chng <= 255) { + back_color.red = back_color.red + chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.red + chng <= 255) { + xtra_color.red = xtra_color.red + chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[RED_DOWN]) { //Red down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.red - chng >= 0) { + main_color.red = main_color.red - chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.red - chng >= 0) { + back_color.red = back_color.red - chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.red - chng >= 0) { + xtra_color.red = xtra_color.red - chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[GREEN_UP]) { //Green Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.green + chng <= 255) { + main_color.green = main_color.green + chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.green + chng <= 255) { + back_color.green = back_color.green + chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.green + chng <= 255) { + xtra_color.green = xtra_color.green + chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[GREEN_DOWN]) { //Green down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.green - chng >= 0) { + main_color.green = main_color.green - chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.green - chng >= 0) { + back_color.green = back_color.green - chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.green - chng >= 0) { + xtra_color.green = xtra_color.green - chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[BLUE_UP]) { //Blue Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.blue + chng <= 255) { + main_color.blue = main_color.blue + chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.blue + chng <= 255) { + back_color.blue = back_color.blue + chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.blue + chng <= 255) { + xtra_color.blue = xtra_color.blue + chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[BLUE_DOWN]) { //Blue down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.blue - chng >= 0) { + main_color.blue = main_color.blue - chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.blue - chng >= 0) { + back_color.blue = back_color.blue - chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.blue - chng >= 0) { + xtra_color.blue = xtra_color.blue - chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[WHITE_UP]) { //White Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.white + chng <= 255) { + main_color.white = main_color.white + chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.white + chng <= 255) { + back_color.white = back_color.white + chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.white + chng <= 255) { + xtra_color.white = xtra_color.white + chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[WHITE_DOWN]) { //White down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.white - chng >= 0) { + main_color.white = main_color.white - chng; + _updateSegState = true; + } + } + if (selected_color == 2) { + if (back_color.white - chng >= 0) { + back_color.white = back_color.white - chng; + _updateSegState = true; + } + } + if (selected_color == 3) { + if (xtra_color.white - chng >= 0) { + xtra_color.white = xtra_color.white - chng; + _updateSegState = true; + } + } + } + if (results.value == rmt_commands[COL_M]) { // Select Main Color + last_remote_cmd = 0; + selected_color = 1; + } + if (results.value == rmt_commands[COL_B]) { // Select Back Color + last_remote_cmd = 0; + selected_color = 2; + } + if (results.value == rmt_commands[COL_X]) { // Select Extra Color + last_remote_cmd = 0; + selected_color = 3; + } + } + } // end of if HOLD + if (results.value == rmt_commands[MODE_UP]) { //Mode Up + last_remote_cmd = results.value; + if ((segState.mode[State.segment] < strip->getModeCount()-1) && (State.mode == HOLD)) { + fx_mode = segState.mode[State.segment] + 1; + } + _updateSegState = true; + } + if (results.value == rmt_commands[MODE_DOWN]) { //Mode down + last_remote_cmd = results.value; + if ((segState.mode[State.segment] > 0) && (State.mode == HOLD)) { + fx_mode = segState.mode[State.segment] - 1; + } + _updateSegState = true; + } + if (results.value == rmt_commands[AUTOMODE]) { // Toggle Automode + last_remote_cmd = 0; + fx_mode = FX_MODE_CUSTOM_0; + _updateSegState = true; } + #if defined(CUSTOM_WS2812FX_ANIMATIONS) + if (results.value == rmt_commands[CUST_1]) { // Select TV Mode + last_remote_cmd = 0; + fx_mode = FX_MODE_CUSTOM_2; + _updateSegState = true; + } + #endif + if (results.value == rmt_commands[CUST_2]) { // Select Custom Mode 2 + last_remote_cmd = 0; + fx_mode = FX_MODE_RAINBOW_CYCLE; + _updateSegState = true; + } + if (results.value == rmt_commands[CUST_3]) { // Select Custom Mode 3 + last_remote_cmd = 0; + fx_mode = FX_MODE_FIRE_FLICKER; + _updateSegState = true; + } + if (results.value == rmt_commands[SEG_UP]) { // Select segment up + last_remote_cmd = 0; + if ((State.segment < Config.segments - 1) && (State.mode == HOLD)) { + prevsegment = State.segment; + State.segment = State.segment + 1; + getSegmentParams(State.segment); + } + _updateSegState = true; + } + if (results.value == rmt_commands[SEG_DOWN]) { // Select segment down + last_remote_cmd = 0; + if ((State.segment > 0) && (State.mode == HOLD)) { + prevsegment = State.segment; + State.segment = State.segment - 1; + getSegmentParams(State.segment); + } + _updateSegState = true; + } + irrecv.resume(); // Receive the next value } - prevKeyState = currKeyState; + #if defined(ENABLE_STATE_SAVE) + if (_updateState) { + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + } + if (_updateSegState) { + State.mode = SET; + if(save_seg_state.active()) save_seg_state.detach(); + save_seg_state.once(3, tickerSaveSegmentState); + } + #endif + _updateState = false; + _updateSegState = false; } -} -#endif +#endif diff --git a/Arduino/McLighting/rest_api.h b/Arduino/McLighting/rest_api.h new file mode 100644 index 00000000..15bf5660 --- /dev/null +++ b/Arduino/McLighting/rest_api.h @@ -0,0 +1,579 @@ +// *************************************************************************** +// Setup: Webserver handler +// *************************************************************************** +//list directory +server.on("/list", HTTP_GET, handleFileList); +//create file +server.on("/edit", HTTP_PUT, handleFileCreate); +//delete file +server.on("/edit", HTTP_DELETE, handleFileDelete); +//first callback is called after the request has ended with all parsed arguments +//second callback handles file uploads at that location +server.on("/edit", HTTP_POST, []() { + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", ""); +}, handleFileUpload); + +// *************************************************************************** +// Setup: SPIFFS Webserver handler +// *************************************************************************** + +server.on("/", HTTP_GET, [&](){ + #if defined(USE_HTML_MIN_GZ) + server.sendHeader("Content-Encoding", "gzip", true); + server.send_P(200, PSTR("text/html"), index_htm_gz, index_htm_gz_len); + #else + if (!handleFileRead(server.uri())) + handleNotFound(); + #endif +}); + +server.on("/material.woff2", HTTP_GET, [&](){ + #if defined(USE_HTML_MIN_GZ) + server.send_P(200, PSTR("text/plain"), material_icons_woff2, material_icons_woff2_len); + #else + if (!handleFileRead(server.uri())) + handleNotFound(); + #endif +}); + +server.on("/favicon.ico", HTTP_GET, [&](){ + #if defined(USE_HTML_MIN_GZ) + server.sendHeader("Content-Encoding", "gzip", true); + server.send_P(200, PSTR("text/plain"), fav_icon, fav_icon_len); + #else + if (!handleFileRead(server.uri())) + handleNotFound(); + #endif +}); + +server.on("/apple-touch-icon.png", HTTP_GET, [&](){ + #if defined(USE_HTML_MIN_GZ) + server.send_P(200, PSTR("text/plain"), apple_touch_icon_png, apple_touch_icon_png_len); + #else + if (!handleFileRead(server.uri())) + handleNotFound(); + #endif +}); + +server.on("/edit", HTTP_GET, [&](){ + #if defined(USE_HTML_MIN_GZ) + server.sendHeader("Content-Encoding", "gzip", true); + server.send_P(200, PSTR("text/html"), edit_htm_gz, edit_htm_gz_len); + #else + if (!handleFileRead("/edit.htm")) + handleNotFound(); + #endif +}); + + +//called when the url is not defined here +//use it to load content from SPIFFS +server.onNotFound([]() { + if (!handleFileRead(server.uri())) + handleNotFound(); +}); + +server.on("/upload", handleMinimalUpload); + +server.on("/esp_status", HTTP_GET, []() { //get heap status, analog input value and all GPIO statuses in one json call + getESPStateJSON(); +}); + +server.on("/restart", []() { + DBG_OUTPUT_PORT.printf("/restart\r\n"); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", "restarting..." ); + delay(1000); + ESP.restart(); +}); + +server.on("/reset_wlan", []() { + DBG_OUTPUT_PORT.printf("/reset_wlan\r\n"); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", "Resetting WLAN and restarting..." ); + WiFiManager wifiManager; + wifiManager.resetSettings(); + ESP.restart(); +}); + +server.on("/start_config_ap", []() { + DBG_OUTPUT_PORT.printf("/start_config_ap\r\n"); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", "Starting config AP ..." ); + WiFiManager wifiManager; + wifiManager.startConfigPortal(HOSTNAME); +}); + +server.on("/format_spiffs", []() { + DBG_OUTPUT_PORT.printf("/format_spiffs\r\n"); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", "Formatting SPIFFS ..." ); + SPIFFS.format(); +}); + +server.on("/get_brightness", []() { + char str_brightness[4]; + snprintf(str_brightness, sizeof(str_brightness), "%i", (int) (State.brightness / 2.55)); + str_brightness[sizeof(str_brightness) - 1] = 0x00; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", str_brightness ); + DBG_OUTPUT_PORT.printf("/get_brightness: %i\r\n", (int) (State.brightness / 2.55)); +}); + +server.on("/get_speed", []() { + char str_speed[4]; + snprintf(str_speed, sizeof(str_speed), "%i", segState.speed[State.segment]); + str_speed[sizeof(str_speed) - 1] = 0x00; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", str_speed ); + DBG_OUTPUT_PORT.printf("/get_speed: %i\r\n", segState.speed[State.segment]); +}); + +server.on("/get_switch", []() { + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", (State.mode == OFF) ? "0" : "1" ); + DBG_OUTPUT_PORT.printf("/get_switch: %s\r\n", (State.mode == OFF) ? "0" : "1"); +}); + +server.on("/get_color", []() { + char rgbcolor[7]; + snprintf(rgbcolor, sizeof(rgbcolor), "%02X%02X%02X", main_color.red, main_color.green, main_color.blue); + rgbcolor[sizeof(rgbcolor) - 1] = 0x00; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", rgbcolor); + DBG_OUTPUT_PORT.print("/get_color: "); + DBG_OUTPUT_PORT.println(rgbcolor); +}); + +server.on("/get_color1", []() { + char rgbcolor[9]; + snprintf(rgbcolor, sizeof(rgbcolor), "%02X%02X%02X%02X", main_color.white, main_color.red, main_color.green, main_color.blue); + rgbcolor[sizeof(rgbcolor) - 1] = 0x00; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", rgbcolor ); + DBG_OUTPUT_PORT.print("/get_color1: "); + DBG_OUTPUT_PORT.println(rgbcolor); +}); + +server.on("/get_color2", []() { + char rgbcolor[9]; + snprintf(rgbcolor, sizeof(rgbcolor), "%02X%02X%02X%02X", back_color.white, back_color.red, back_color.green, back_color.blue); + rgbcolor[sizeof(rgbcolor) - 1] = 0x00; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", rgbcolor ); + DBG_OUTPUT_PORT.print("/get_color2: "); + DBG_OUTPUT_PORT.println(rgbcolor); +}); + +server.on("/get_color3", []() { + char rgbcolor[9]; + snprintf(rgbcolor, sizeof(rgbcolor), "%02X%02X%02X%02X", xtra_color.white, xtra_color.red, xtra_color.green, xtra_color.blue); + rgbcolor[sizeof(rgbcolor) - 1] = 0x00; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", rgbcolor ); + DBG_OUTPUT_PORT.print("/get_color3: "); + DBG_OUTPUT_PORT.println(rgbcolor); +}); + +server.on("/get_modes", []() { + getModesJSON(); +}); + +server.on("/status", []() { + getStateJSON(); +}); + +server.on("/config", []() { + + /* + + // This will be used later when web-interface is ready and HTTP_GET will not be allowed to update the Strip Settings + + if(server.args() == 0 and server.method() != HTTP_POST) + { + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", "Only HTTP POST method is allowed and check the number of arguments!"); + return; + } + + */ + // ToDo do not save if no change + bool _updateStrip = false; + bool _updateConfig = false; + bool _updateState = false; + if(server.hasArg("ws_seg")){ + uint8_t _ws_seg = server.arg("ws_seg").toInt(); + _ws_seg = constrain(_ws_seg, 1, MAX_NUM_SEGMENTS - 1); + if (_ws_seg != Config.segments){ + Config.segments = _ws_seg; + _updateStrip = true; + if (State.segment >= Config.segments) { + State.segment = Config.segments - 1; + _updateState = true; + } + } + } + if(server.hasArg("ws_cnt")){ + uint16_t _stripSize = server.arg("ws_cnt").toInt(); + if (_stripSize > 0) { + _stripSize = constrain(_stripSize, 1, MAXLEDS); + if (_stripSize != Config.stripSize) { + Config.stripSize = _stripSize; + _updateStrip = true; + } + } + } + if(server.hasArg("ws_rgbo")){ + char _ws_rgbo[5]; + snprintf(_ws_rgbo, sizeof(_ws_rgbo), "%s", server.arg("ws_rgbo").c_str()); + _ws_rgbo[sizeof(_ws_rgbo) - 1] = 0x00; + checkRGBOrder(_ws_rgbo); + _updateStrip = true; + } + +#if !defined(USE_WS2812FX_DMA) + if(server.hasArg("ws_pin")){ + if (checkPin(server.arg("ws_pin").toInt())) { + _updateStrip = true; + DBG_OUTPUT_PORT.print("Pin was set to: "); + DBG_OUTPUT_PORT.println(Config.pin); + } else { + DBG_OUTPUT_PORT.println("invalid input or same value!"); + } + } +#endif + + if(_updateStrip) { + initStrip(); + } + + if(server.hasArg("hostname")){ + char _hostname[sizeof(HOSTNAME)]; + snprintf(_hostname, sizeof(_hostname), "%s", server.arg("hostname").c_str()); + _hostname[sizeof(_hostname) - 1] = 0x00; + if (strcmp(HOSTNAME, _hostname) != 0) { + strcpy(HOSTNAME, _hostname); + _updateConfig = true; + } + } + +#if defined(ENABLE_MQTT) + if(server.hasArg("mqtt_host")){ + char _mqtt_host[sizeof(mqtt_host)]; + snprintf(_mqtt_host, sizeof(_mqtt_host), "%s", server.arg("mqtt_host").c_str()); + _mqtt_host[sizeof(_mqtt_host) - 1] = 0x00; + if (strcmp(mqtt_host, _mqtt_host) != 0) { + strcpy(mqtt_host, _mqtt_host); + _updateConfig = true; + } + } + if(server.hasArg("mqtt_port")){ + uint16_t _mqtt_port = constrain(server.arg("mqtt_port").toInt(), 1, 65535); + if (_mqtt_port != mqtt_port) { + mqtt_port = _mqtt_port; + _updateConfig = true; + } + } + if(server.hasArg("mqtt_user")){ + char _mqtt_user[sizeof(mqtt_user)]; + snprintf(_mqtt_user, sizeof(_mqtt_user), "%s", server.arg("mqtt_user").c_str()); + _mqtt_user[sizeof(mqtt_user) - 1] = 0x00; + if (strcmp(mqtt_user, _mqtt_user) != 0) { + strcpy(mqtt_user, _mqtt_user); + _updateConfig = true; + } + } + if(server.hasArg("mqtt_pass")){ + char _mqtt_pass[sizeof(mqtt_pass)]; + snprintf(_mqtt_pass, sizeof(_mqtt_pass), "%s", server.arg("mqtt_pass").c_str()); + _mqtt_pass[sizeof(_mqtt_pass) - 1] = 0x00; + if (strcmp(mqtt_pass, _mqtt_pass) != 0) { + strcpy(mqtt_pass, _mqtt_pass); + _updateConfig = true; + } + } + if (_updateConfig) { + initMqtt(); + } +#endif + + if(server.hasArg("trans_effect")){ + Config.transEffect = server.arg("trans_effect").toInt(); + _updateConfig = true; + } + +#if defined(ENABLE_STATE_SAVE) + if (_updateStrip || _updateConfig) { + if(save_conf.active()) save_conf.detach(); + save_conf.once(3, tickerSaveConfig); + } + if (_updateState) { + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + } +#endif + _updateStrip = false; + _updateConfig = false; + _updateState = false; + getConfigJSON(); +}); + +server.on("/toggle", []() { + if (State.mode == OFF) { + State.mode = SET; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", segState.mode[State.segment]); + sendmqtt(); + #endif + } else { + State.mode = OFF; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /off", ""); + sendmqtt(); + #endif + } + getACK("OK"); + #if defined(ENABLE_STATE_SAVE) + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + #endif +}); + +server.on("/on", []() { + if (State.mode == OFF) { + State.mode = SET; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", segState.mode[State.segment]); + sendmqtt(); + #endif + getACK("OK"); + #if defined(ENABLE_STATE_SAVE) + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + #endif + } else { + getACK("NOK"); + } +}); + +server.on("/off", []() { + if (State.mode == HOLD) { + State.mode = OFF; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /off", ""); + sendmqtt(); + #endif + getACK("OK"); + #if defined(ENABLE_STATE_SAVE) + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + #endif + } else { + getACK("NOK"); + } +}); + +server.on("/set", []() { + prevmode = HOLD; + boolean _updateState = false; + boolean _updateSegState = false; + // Segment + if ((server.arg("seg") != "") && (server.arg("seg").toInt() >= 0) && (server.arg("seg").toInt() < Config.segments)) { + uint8_t _seg = server.arg("seg").toInt(); + if (prevsegment != _seg) { + prevsegment = State.segment; + State.segment = _seg; + getSegmentParams(State.segment); + //memcpy(hexcolors_trans, segState.colors[State.segment], sizeof(hexcolors_trans)); + State.mode = SET; + _updateState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK Ss%i", _seg); + sendmqtt(); + #endif + } + } + if ((server.arg("start") != "") && (server.arg("start").toInt() >= 0) && (server.arg("start").toInt() <= segState.stop)) { + uint16_t _seg_start = server.arg("start").toInt(); + _seg_start = constrain(segState.start, 0, Config.stripSize -1); + if (_seg_start != segState.start) { + segState.start = _seg_start; + setSegmentSize(); + _updateSegState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK S[%i", _seg_start); + sendmqtt(); + #endif + } + } + if ((server.arg("stop") != "") && (server.arg("stop").toInt() >= segState.start) && (server.arg("stop").toInt() <= Config.stripSize)) { + uint16_t _seg_stop = server.arg("stop").toInt(); + _seg_stop = constrain(_seg_stop, segState.start, Config.stripSize - 1); + if (_seg_stop != segState.stop) { + segState.stop = _seg_stop; + setSegmentSize(); + _updateSegState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK S]%i", _seg_stop); + sendmqtt(); + #endif + } + } + + if(server.hasArg("fxopt")){ + uint8_t _fx_options = ((constrain(server.arg("fxopt").toInt(), 0, 255)>>1)<<1); + if (_fx_options != segState.options) { + segState.options = _fx_options; + strip->setOptions(State.segment, segState.options); + _updateSegState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK So%i", _fx_options); + sendmqtt(); + #endif + } + } + //color wrgb + if (server.arg("rgb") != "") { + uint32_t rgb = (uint32_t) strtoul(server.arg("rgb").c_str(), NULL, 16); + main_color.white = ((rgb >> 24) & 0xFF); + main_color.red = ((rgb >> 16) & 0xFF); + main_color.green = ((rgb >> 8) & 0xFF); + main_color.blue = ((rgb >> 0) & 0xFF); + _updateSegState = true; + } else { + if ((server.arg("r") != "") && (server.arg("r").toInt() >= 0) && (server.arg("r").toInt() <= 255)) { + main_color.red = server.arg("r").toInt(); + _updateSegState = true; + } + if ((server.arg("g") != "") && (server.arg("g").toInt() >= 0) && (server.arg("g").toInt() <= 255)) { + main_color.green = server.arg("g").toInt(); + _updateSegState = true; + } + if ((server.arg("b") != "") && (server.arg("b").toInt() >= 0) && (server.arg("b").toInt() <= 255)) { + main_color.blue = server.arg("b").toInt(); + _updateSegState = true; + } + if ((server.arg("w") != "") && (server.arg("w").toInt() >= 0) && (server.arg("w").toInt() <= 255)){ + main_color.white = server.arg("w").toInt(); + _updateSegState = true; + } + } + if (server.arg("rgb2") != "") { + uint32_t rgb2 = (uint32_t) strtoul(server.arg("rgb2").c_str(), NULL, 16); + back_color.white = ((rgb2 >> 24) & 0xFF); + back_color.red = ((rgb2 >> 16) & 0xFF); + back_color.green = ((rgb2 >> 8) & 0xFF); + back_color.blue = ((rgb2 >> 0) & 0xFF); + _updateSegState = true; + } else { + if ((server.arg("r2") != "") && (server.arg("r2").toInt() >= 0) && (server.arg("r2").toInt() <= 255)) { + back_color.red = server.arg("r2").toInt(); + _updateSegState = true; + } + if ((server.arg("g2") != "") && (server.arg("g2").toInt() >= 0) && (server.arg("g2").toInt() <= 255)) { + back_color.green = server.arg("g2").toInt(); + _updateSegState = true; + } + if ((server.arg("b2") != "") && (server.arg("b2").toInt() >= 0) && (server.arg("b2").toInt() <= 255)) { + back_color.blue = server.arg("b2").toInt(); + _updateSegState = true; + } + if ((server.arg("w2") != "") && (server.arg("w2").toInt() >= 0) && (server.arg("w2").toInt() <= 255)){ + back_color.white = server.arg("w2").toInt(); + _updateSegState = true; + } + } + if (server.arg("rgb3") != "") { + uint32_t rgb3 = (uint32_t) strtoul(server.arg("rgb3").c_str(), NULL, 16); + xtra_color.white = ((rgb3 >> 24) & 0xFF); + xtra_color.red = ((rgb3 >> 16) & 0xFF); + xtra_color.green = ((rgb3 >> 8) & 0xFF); + xtra_color.blue = ((rgb3 >> 0) & 0xFF); + _updateSegState = true; + } else { + if ((server.arg("r3") != "") && (server.arg("r3").toInt() >= 0) && (server.arg("r3").toInt() <= 255)) { + xtra_color.red = server.arg("r3").toInt(); + _updateSegState = true; + } + if ((server.arg("g3") != "") && (server.arg("g3").toInt() >= 0) && (server.arg("g3").toInt() <= 255)) { + xtra_color.green = server.arg("g3").toInt(); + _updateSegState = true; + } + if ((server.arg("b3") != "") && (server.arg("b3").toInt() >= 0) && (server.arg("b3").toInt() <= 255)) { + xtra_color.blue = server.arg("b3").toInt(); + _updateSegState = true; + } + if ((server.arg("w3") != "") && (server.arg("w3").toInt() >= 0) && (server.arg("w3").toInt() <= 255)){ + xtra_color.white = server.arg("w3").toInt(); + _updateSegState = true; + } + } + main_color.red = constrain(main_color.red, 0, 255); + main_color.green = constrain(main_color.green, 0, 255); + main_color.blue = constrain(main_color.blue, 0, 255); + main_color.white = constrain(main_color.white, 0, 255); + back_color.red = constrain(back_color.red, 0, 255); + back_color.green = constrain(back_color.green, 0, 255); + back_color.blue = constrain(back_color.blue, 0, 255); + back_color.white = constrain(back_color.white, 0, 255); + xtra_color.red = constrain(xtra_color.red, 0, 255); + xtra_color.green = constrain(xtra_color.green, 0, 255); + xtra_color.blue = constrain(xtra_color.blue, 0, 255); + xtra_color.white = constrain(xtra_color.white, 0, 255); + + + // Speed + if ((server.arg("s") != "") && (server.arg("s").toInt() >= 0) && (server.arg("s").toInt() <= 255)) { + uint8_t _fx_speed = constrain(server.arg("s").toInt(), 0, 255); + segState.speed[State.segment] = _fx_speed; + _updateSegState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK ?%i", _fx_speed); + sendmqtt(); + #endif + } + + //Mode + if ((server.arg("m") != "") && (server.arg("m").toInt() >= 0) && (server.arg("m").toInt() <= strip->getModeCount())) { + fx_mode = constrain(server.arg("m").toInt(), 0, strip->getModeCount() - 1); + if (fx_mode != segState.mode[State.segment]) { + _updateSegState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", fx_mode); + sendmqtt(); + #endif + } + } + + // Brightness + if ((server.arg("c") != "") && (server.arg("c").toInt() >= 0) && (server.arg("c").toInt() <= 100)) { + State.brightness = constrain((int) server.arg("c").toInt() * 2.55, 0, 255); + } else if ((server.arg("p") != "") && (server.arg("p").toInt() >= 0) && (server.arg("p").toInt() <= 255)) { + State.brightness = constrain(server.arg("p").toInt(), 0, 255); + } + if (strip->getBrightness() != State.brightness) { + State.mode = SET; + _updateState = true; + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %%%i", State.brightness); + sendmqtt(); + #endif + } + //DBG_OUTPUT_PORT.printf("Get Args: %s\r\n", listStateJSONfull()); //possibly causing heap problems + getACK("OK"); + +#if defined(ENABLE_STATE_SAVE) + if (_updateState) { + if(save_state.active()) save_state.detach(); + save_state.once(3, tickerSaveState); + } + if (_updateSegState) { + State.mode = SET; + if(save_seg_state.active()) save_seg_state.detach(); + save_seg_state.once(3, tickerSaveSegmentState); + } +#endif + _updateState = false; + _updateSegState = false; +}); diff --git a/Arduino/McLighting/spiffs_webserver.h b/Arduino/McLighting/spiffs_webserver.h index a02fc6a0..df6fe402 100644 --- a/Arduino/McLighting/spiffs_webserver.h +++ b/Arduino/McLighting/spiffs_webserver.h @@ -32,126 +32,131 @@ File fsUploadFile; //format bytes String formatBytes(size_t bytes) { - if (bytes < 1024) { - return String(bytes) + "B"; - } else if (bytes < (1024 * 1024)) { - return String(bytes / 1024.0) + "KB"; - } else if (bytes < (1024 * 1024 * 1024)) { - return String(bytes / 1024.0 / 1024.0) + "MB"; - } else { - return String(bytes / 1024.0 / 1024.0 / 1024.0) + "GB"; - } + if (bytes < 1024) { + return String(bytes) + "B"; + } else if (bytes < (1024 * 1024)) { + return String(bytes / 1024.0) + "KB"; + } else if (bytes < (1024 * 1024 * 1024)) { + return String(bytes / 1024.0 / 1024.0) + "MB"; + } else { + return String(bytes / 1024.0 / 1024.0 / 1024.0) + "GB"; + } } String getContentType(String filename) { - if (server.hasArg("download")) return "application/octet-stream"; - else if (filename.endsWith(".htm")) return "text/html"; - else if (filename.endsWith(".html")) return "text/html"; - else if (filename.endsWith(".css")) return "text/css"; - else if (filename.endsWith(".js")) return "application/javascript"; - else if (filename.endsWith(".png")) return "image/png"; - else if (filename.endsWith(".gif")) return "image/gif"; - else if (filename.endsWith(".jpg")) return "image/jpeg"; - else if (filename.endsWith(".ico")) return "image/x-icon"; - else if (filename.endsWith(".xml")) return "text/xml"; - else if (filename.endsWith(".pdf")) return "application/x-pdf"; - else if (filename.endsWith(".zip")) return "application/x-zip"; - else if (filename.endsWith(".gz")) return "application/x-gzip"; - return "text/plain"; + if (server.hasArg("download")) return "application/octet-stream"; + else if (filename.endsWith(".htm")) return "text/html"; + else if (filename.endsWith(".html")) return "text/html"; + else if (filename.endsWith(".css")) return "text/css"; + else if (filename.endsWith(".js")) return "application/javascript"; + else if (filename.endsWith(".png")) return "image/png"; + else if (filename.endsWith(".gif")) return "image/gif"; + else if (filename.endsWith(".jpg")) return "image/jpeg"; + else if (filename.endsWith(".ico")) return "image/x-icon"; + else if (filename.endsWith(".xml")) return "text/xml"; + else if (filename.endsWith(".pdf")) return "application/x-pdf"; + else if (filename.endsWith(".zip")) return "application/x-zip"; + else if (filename.endsWith(".gz")) return "application/x-gzip"; + return "text/plain"; } bool handleFileRead(String path) { - DBG_OUTPUT_PORT.println("handleFileRead: " + path); - if (path.endsWith("/")) path += "index.htm"; - String contentType = getContentType(path); - String pathWithGz = path + ".gz"; - if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) { - if (SPIFFS.exists(pathWithGz)) - path += ".gz"; - File file = SPIFFS.open(path, "r"); - size_t sent = server.streamFile(file, contentType); - file.close(); - return true; - } - return false; + DBG_OUTPUT_PORT.println("handleFileRead: " + path); + if (path.endsWith("/")) path += "index.htm"; + String contentType = getContentType(path); + String pathWithGz = path + ".gz"; + if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) { + if (SPIFFS.exists(pathWithGz)) + path += ".gz"; + File file = SPIFFS.open(path, "r"); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + server.sendHeader("Pragma", "no-cache"); + server.sendHeader("Expires", "-1"); + size_t sent = server.streamFile(file, contentType); + file.close(); + return true; + } + return false; } void handleFileUpload() { - if (server.uri() != "/edit") return; - HTTPUpload& upload = server.upload(); - if (upload.status == UPLOAD_FILE_START) { - String filename = upload.filename; - if (!filename.startsWith("/")) filename = "/" + filename; - DBG_OUTPUT_PORT.print("handleFileUpload Name: "); - DBG_OUTPUT_PORT.println(filename); - fsUploadFile = SPIFFS.open(filename, "w"); - filename = String(); - } else if (upload.status == UPLOAD_FILE_WRITE) { - //DBG_OUTPUT_PORT.print("handleFileUpload Data: "); DBG_OUTPUT_PORT.println(upload.currentSize); - if (fsUploadFile) - fsUploadFile.write(upload.buf, upload.currentSize); - } else if (upload.status == UPLOAD_FILE_END) { - if (fsUploadFile) - fsUploadFile.close(); - DBG_OUTPUT_PORT.print("handleFileUpload Size: "); DBG_OUTPUT_PORT.println(upload.totalSize); - } + if (server.uri() != "/edit") return; + HTTPUpload& upload = server.upload(); + if (upload.status == UPLOAD_FILE_START) { + String filename = upload.filename; + if (!filename.startsWith("/")) filename = "/" + filename; + DBG_OUTPUT_PORT.print("handleFileUpload Name: "); + DBG_OUTPUT_PORT.println(filename); + fsUploadFile = SPIFFS.open(filename, "w"); + filename = String(); + } else if (upload.status == UPLOAD_FILE_WRITE) { + //DBG_OUTPUT_PORT.print("handleFileUpload Data: "); DBG_OUTPUT_PORT.println(upload.currentSize); + if (fsUploadFile) + fsUploadFile.write(upload.buf, upload.currentSize); + } else if (upload.status == UPLOAD_FILE_END) { + if (fsUploadFile) + fsUploadFile.close(); + DBG_OUTPUT_PORT.print("handleFileUpload Size: "); DBG_OUTPUT_PORT.println(upload.totalSize); + } } void handleFileDelete() { - if (server.args() == 0) return server.send(500, "text/plain", "BAD ARGS"); - String path = server.arg(0); - DBG_OUTPUT_PORT.println("handleFileDelete: " + path); - if (path == "/") - return server.send(500, "text/plain", "BAD PATH"); - if (!SPIFFS.exists(path)) - return server.send(404, "text/plain", "FileNotFound"); - SPIFFS.remove(path); - server.send(200, "text/plain", ""); - path = String(); + if (server.args() == 0) return server.send(500, "text/plain", "BAD ARGS"); + String path = server.arg(0); + DBG_OUTPUT_PORT.println("handleFileDelete: " + path); + if (path == "/") + return server.send(500, "text/plain", "BAD PATH"); + if (!SPIFFS.exists(path)) + return server.send(404, "text/plain", "FileNotFound"); + SPIFFS.remove(path); + server.send(200, "text/plain", ""); + path = String(); } void handleFileCreate() { - if (server.args() == 0) - return server.send(500, "text/plain", "BAD ARGS"); - String path = server.arg(0); - DBG_OUTPUT_PORT.println("handleFileCreate: " + path); - if (path == "/") - return server.send(500, "text/plain", "BAD PATH"); - if (SPIFFS.exists(path)) - return server.send(500, "text/plain", "FILE EXISTS"); - File file = SPIFFS.open(path, "w"); - if (file) - file.close(); - else - return server.send(500, "text/plain", "CREATE FAILED"); - server.send(200, "text/plain", ""); - path = String(); + if (server.args() == 0) + return server.send(500, "text/plain", "BAD ARGS"); + String path = server.arg(0); + DBG_OUTPUT_PORT.println("handleFileCreate: " + path); + if (path == "/") + return server.send(500, "text/plain", "BAD PATH"); + if (SPIFFS.exists(path)) + return server.send(500, "text/plain", "FILE EXISTS"); + File file = SPIFFS.open(path, "w"); + if (file) + file.close(); + else + return server.send(500, "text/plain", "CREATE FAILED"); + server.send(200, "text/plain", ""); + path = String(); } void handleFileList() { - if (!server.hasArg("dir")) { - server.send(500, "text/plain", "BAD ARGS"); - return; - } - - String path = server.arg("dir"); - DBG_OUTPUT_PORT.println("handleFileList: " + path); - Dir dir = SPIFFS.openDir(path); - path = String(); - - String output = "["; - while (dir.next()) { - File entry = dir.openFile("r"); - if (output != "[") output += ','; - bool isDir = false; - output += "{\"type\":\""; - output += (isDir) ? "dir" : "file"; - output += "\",\"name\":\""; - output += String(entry.name()).substring(1); - output += "\"}"; - entry.close(); - } - - output += "]"; - server.send(200, "text/json", output); -} + if (!server.hasArg("dir")) { + server.send(500, "text/plain", "BAD ARGS"); + return; + } + + String path = server.arg("dir"); + DBG_OUTPUT_PORT.println("handleFileList: " + path); + Dir dir = SPIFFS.openDir(path); + path = String(); + + String output = "["; + while (dir.next()) { + File entry = dir.openFile("r"); + if (output != "[") output += ','; + bool isDir = false; + output += "{\"type\":\""; + output += (isDir) ? "dir" : "file"; + output += "\",\"name\":\""; + output += String(entry.name()).substring(1); + output += "\"}"; + entry.close(); + } + + output += "]"; + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/json", output); +} diff --git a/Arduino/McLighting/version.h b/Arduino/McLighting/version.h new file mode 100644 index 00000000..78dbdc8c --- /dev/null +++ b/Arduino/McLighting/version.h @@ -0,0 +1 @@ +#define SKETCH_VERSION "3.1.4" diff --git a/Arduino/McLighting/version_info.ino b/Arduino/McLighting/version_info.ino new file mode 100644 index 00000000..5bde2b1f --- /dev/null +++ b/Arduino/McLighting/version_info.ino @@ -0,0 +1,281 @@ +/* + * 07 May 2018 v 2.1.0 + * - Start of versioning v2.1, added version support + * - '/esp_status' returns lot more info + * + * 11 May 2018 v 2.1.1 + * - Use ArduinoJSON to send JSON replies + * - Add strip.trigger() + * + * 17 Jun 2018 v 2.1.2 + * - Upgrade to ArduinoJSON 6.xx from ArduinoJSON 5.xx + * - Added example for static IP + * - Added more internal variables to /esp_status + * + * 5 Jul 2018 v 2.1.3 + * - Fixes for ArduinoJson 6.1.0-beta + * + * 10 Jul 2018 v 2.1.4 + * - Fixes measureJson() as pointed in #206 + * + * 2 Oct 2018 v 2.1.5 + * - Try fixing #224 HA brightness causes reboot + * + * 5 Nov 2018 v 2.1.6 + * - Retire NeoAnimationFX + * - Use DMA or UART method along with WS2812FX instead + * - fix #248 + * + * 3 Dec 2018 v 2.1.7 + * - Contributions by @ MrTheBarbarian from #270 + * - rethink ESP.getChipId implementaion + * - check ArduinoJSON version + * - Try restting prevmode as suggested in #276 + * + * 11 Dec 2018 v 2.1.8 + * - Fix Auto-Discovery for HA version >= 0.84 #286 + * - Fix #283 + * + * 12 Dec 2018 v 2.2.0 + * - Add E1.31 mode initial commit + * - E1.31 mode when activated now stops current animation + * + * 13 Dec 2018 v 2.1.9 + * - HA is not getting the correct animation name being run, boils down to changes to ArduinoJson library + * - Bump ArduinoJson library requirment for v6.7.0-beta (better memory management) + * - sendState() needs extra memory for jsonBuffer + * - sensState() effect can be sent directly instead of copying from PROGMEM + * + * 16 Dec 2018 v 2.1.10 + * - more ArduinoJson library memory managment fixes + * + * 18 Dec 2018 v 2.1.11 + * - More Auto-Discovery fix for HA version >= 0.84 #286 + * - Suggestions from https://github.com/home-assistant/home-assistant/issues/19420 + * + * 23 Dec 2018 v 2.2.0 + * - Add E1.31 mode to getModes(), no need to change McLightingUI + * + * 6 Jan 2019 v 2.2.0 + * - fix webserver not responding when E1.31 is mode is acivated: do a webserver.loop() for every 1.31 packet + * - HA E1.31 mode added + * + * 15 Feb 2019 v 2.2.0 rgbw 3colors + * - Code cleanup + * - Implemented support for back- and xtra-color + * - Implemented IR remote control + * - Remove some string data types (to be continued) + * + * 08 Mar 2018 v 2.2.1 rgbw 3colors + * - checkForRequests() is not needed + * - Minor fixes related to NeoPixelBus UART methods + * - Modify platformio.ini for future bump to esp8266-arduino v2.5.0 (shamelessly stolen settings from espurna project) + * - Gzipped index.htm & edit.htm, convereted to hex format using xxd -i abcd.gz > html_gz.h + * - Pointers added for WS2812FX & NeoPixelBus + * - new "REST API": /config?ws_cnt=xxx to change length of LED strip + * - new "REST API": /config?ws_rgbo=xxx to change RGB order + * - new "REST API": /config?ws_pin=GPIO_NO to change PIN# (Allowed GPIO values: 16/5/4/0/2/14/12/13/15/3/1) if not used DMA or UART. Otherwise it is ignored + * - added HA 0.87 version support https://github.com/toblum/McLighting/issues/327 + * - Added alternative way to send large messages using PubSubClient + * - Bump PIO core to 2.0.4 + * - Send HA state on MQTT connect, address https://github.com/toblum/McLighting/issues/349 + * - Add LWT for MQTT and AMQTT, address https://github.com/toblum/McLighting/issues/340 + * - Added file for custom WS2812FX animations in custom slots + * - Rename variables to be char instead of String + * - Added LED pixel count and PIN settings to WiFiManager + * - Gamma correction to LEDs via ws_fxopts + * + * 10 Mar 2019 v 2.2.2 rgbw 3colors + * - integraded neoconfig.json into config.json + * - Add compiler flag for WS2811 strips #define LED_TYPE_WS2811 + * - new "REST API": /config?hostname=xxx to change hostname + * - new "REST API": /config?mqtt_host=xxx to change mqtt hostname + * - new "REST API": /config?mqtt_port=xxx to change mqtt port + * - new "REST API": /config?mqtt_user=xxx to change mqtt username + * - new "REST API": /config?mqtt_pass=xxx to change mqtt password + * - new "REST API": /config?ws_fxopt=xxx to change ws2812fx options + * - Pointers added for PubSubClient & AMQTTCLient + * - RGBOrder is now stored human readable not as integer + * - Bugfix on Fire 2012 animation as one variable was destroyed + * + * 15 Mar 2019 v 2.2.2 rgbw 3colors + * websocket commands + * # Set Maincolor + * ## Set Back color + * ### Set xtra Color + * ? Set speed + * % Set brightness + * * Set all + * ! Set single LED + * + Set multiple LEDs + * R Set Range + * = Set named Mode (legacy) + * $ Get Status + * new from here + * C Get Config + * Ch Set hostname + * Cmh Set mqtt hostname + * Cmp Set mqtt port + * Cmu Set mqtt username + * Cmw Set mqtt password + * Csc Set Strip LED count + * Csr Set Strip RGB Order + * Csp Set Strip pin + * Cso Set Strip FX Options + * to here + * ~ Get Modes + * / Set modes + * + * 17 Mar 2019 + * adressed issue: #2 + * adressed issue: #3 + * + * 18 Mar 2019 + * adressed issue: #6 (possibly affects R[r_start][r_end][hexrgb] [...]; +[numled][hexrgb]+[numled][hexrgb]+[numled][hexrgb] !) + * + * 19 Mar 2019 + * included custom mode in UI + * adressed issue #4 + * + * Version Bump to 2.2.3 rgbw 3colors + * PubSubClient Bug fixes + * Reverted Pointers for MQTT for the moment + * + * 21 Mar 2019 + * Bugfixes + * added pointer for MQTT again + * Removed some String datatype and replaced with char array + * better responsiveness in ui for sliders + * + * 26 Mar 2019 + * Bugfixes + * + * 19 May 2019 + * Bugfixes regarding MQTT Hostname + * + * 08 September 2019 + * Version Bump to 2.2.5 rgbw 3colors + * adressed issue: #27 + * adressed issue: #28 (see new REST-API documentation) + * + * 10 September 2019 + * Version Bump to 2.2.6 rgbw 3colors + * adressed issue: #28 (see new REST-API documentation) again + * adressed issue: #26 + * adressed issue: #31 + * adressed issue: #32 + * + * 15 September 2019 + * Version Bump to 2.2.7.BETA1.rgbw.3colors + * adressed issue: #25 (added Custom Animation 'Gradient' with number 57) + * adressed issue: #30 (Status 'AUTO' is saved now) + * adressed issue: https://github.com/toblum/McLighting/issues/403 (Experimental Support of transitions: set transEffect = true in definitions.h) + * corrected use of DMA for Neopixelbus by Makuna (Tests for other strips than SK6812 GRBW were not made) + * + * 27 September 2019 + * Version Bump to 3.0.0.ALPHA1 + * removed LEGACY_ANIMATIONS + * removed old Custom Animations from beginning of list. + * added Custom Animation 'AutoPlay' with number 56 + * added Custom Animation 'Custom WS' with number 57 + * added Custom Animation 'TV' with number 58 + * added Custom Animation 'E1.31' with number 59 + * moved Custom Animation 'Fire2012' to number 60 + * moved Custom Animation 'Gradients' to number 61 + * REST-API changes (will be documented soon) + * + * 29 September 2019 + * Version Bump to 3.0.0.BETA1 + * further code changes + * bugfixes + * + * 30 September 2019 + * Version Bump to 3.1.0.ALPHA1 + * further code changes + * removal of saving to EEPROM + * first integration of multi segments + * + * 3 October 2019 + * Version Bump to 3.1.0.ALPHA2 + * further code changes + * further integration of multi segments + * integration of multi segments to GUI + * + * 5 October 2019 + * Version Bump to 3.1.0.ALPHA2 + * further code changes + * further integration of multi segments + * known problem: as always: AUTOPLAY (as it is not multi segment capable yet) + * + * 07 October + * Version Bump to 3.1.0.BETA1 + * bugfixes + * adressed issue: #39 uncooment //#define ENABLE_MQTT_INCLUDE_IP in defninitions.h + * + * 09 October + * Version Bump to 3.1.0.BETA2 + * bugfixes + * implemented https://github.com/FabLab-Luenen/McLighting/commit/589806d0fda737011426754a6d84c88535ded688 + * + * 20 October + * Version Bump to 3.1.0.BETA3 + * Bugfixes + * adressed issue: #39 + * + * 25 October + * Version Bump to 3.1.0.BETA4 + * Bugfixes + * Made GUI fully offline compatible (included material icons, etc.) + * After Timeout (#define WIFIMGR_PORTAL_TIMEOUT 180) in definitions.h Config Portal is closed and MCL is usable over own AP @192.168.4.1 + * adressed issue: #48 + * known problems: E1.31 is only working for one segment at the moment + * + * 26 October + * Version Bump to 3.1.0.BETA5 + * adressed issue: #44 + * known problems: + * Homeassistant will allways use active segment + * E1.31 is only working for one segment at the moment + * + * 09 December + * Version Bump to 3.1.0.BETA6 + * bugfixes for IR remote control + * Implemented segments to IR Remote + * Power supply update + * bugfix for Button definitions as speed and brightness were interchanged + * adressed issue #59 + * known problems: + * Homeassistant will allways use active segment + * E1.31 is only working for one segment at the moment + * + * 27 January 2020 + * Version Bump to 3.1.0.BETA7 + * small API changes + * work to solve heap problems + * + * 23 February 2020 + * Version Bump to 3.1.0 + * bugfixes + * E1.31 is now working for multi segments + * + * 18 April 2020 + * Version Bump to 3.1.1 + * bugfixes regarding issue #80 + * + * 19 April 2020 + * Version Bump to 3.1.2 + * Almost finished: bugfixes regarding issue #80 + * ToDo: bugfixes regarding issue #70 + * + * 25.10.2020 + * Updated WS2812FX Lib + * Version Bump to 3.1.3 + * fixed issue #100 + * included pull request from issue #93 + * Fixed a GUI bug on reloading + * ToDo: bugfixes regarding issue #70 + * + * 21.11.2020 + * Version Bump to 3.1.4 + * Bugfix Rest-API + */ diff --git a/LICENSE b/LICENSE index 65c5ca88..dde9b075 100644 --- a/LICENSE +++ b/LICENSE @@ -1,165 +1,21 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. +MIT License + +Copyright (c) 2018 Tobias Blum @toblum, Debashish Sahu @debsahu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 00000000..3e6666e0 --- /dev/null +++ b/NEWS.md @@ -0,0 +1,73 @@ +Update 13.05.2018: +I've worked on a new web UI for the last weeks. It's now available as an early preview. There is a [video](https://youtu.be/lryDPMA2qpY) that shows the new features. [Try it out](https://github.com/toblum/McLightingUI) if you want and leave some feedback. + +Update 07.04.2018: +And even more changes to McLighting! Most of them were contributed by user @debsahu. Thank you! +- Update arduino-esp8266 to latest, at least version 2.4.1 +- AMQTT is now the default MQTT library, it's a bit more lightweight and stable. You can still use PubSubClient if you want to. +- You can use @debsahu great NeoAnimationFX library as a alternative to WS2812FX. It's based on the NeoPixelBus instead of Adafruits NeoPixel library. It can handle longer strips more efficient. If you want, give it a try. WS2812FX is still the default. +- Some more changes regarding Homeassistant integration. +Please see the [Wiki](https://github.com/toblum/McLighting/wiki/Software-installation) for details on the required libraries. +If you have problems with the new version, let us know. You can get the last version [here](https://github.com/toblum/McLighting/tree/Before_AMQTT_NeoAnimationFX). + +I'm also working on a alternative web interface for McLighting in the meanwhile, but it may take some more time. +For the german users: McLighting was used in [Kliemannsland](https://youtu.be/3TUjszkS3bY?t=1211) (a funny web show) when they built a really big Neopixel installation. + +Update 18.03.2018: +The code for integration with homeassistant was merged into master. It's currently active by default. You can safely disable it in definitions.h when use do not want to use it, or want to use McLighting on a small ESP_01. +There are some informations in the [Wiki](https://github.com/toblum/McLighting/wiki/Homeassistant-integration). + +Update 17.02.2018: +User @debsahu contributed code for integration with homeassistant. It's currently in a separate branch (https://github.com/toblum/McLighting/tree/feature/ha_integration). If you're using Homeassistant, please try it out and give feedback. +User @FabLab-Luenn created a version of McLighting (https://github.com/FabLab-Luenen/McLighting) for 6812 and other RGBW strips. Give it a try, if you own such strips. +A thank you goes to all contributors. + +Update 12. / 15.02.2018: +Added Home Assistant Support using MQTT Light. A better implementation would be using MQTT Light JSON. +Replaced Home Assistant Support using MQTT Light to MQTT JSON Light. + +Update 31.01.2018: +User @codmpm did a very professional McLighting installation and even designed his own PCBs. He has a great writeup for his project at: https://allgeek.de/2018/01/29/esp8266-neopixel-controller/ (in german). + +Update 27.01.2018: +Many people asked if it's possible to connect more than one strip (currently not) or at least "sync" multiple McLighting nodes. Although it may be possible to connect more then one WS2812 strip to the same data pin (works in many cases, you just have to try), syncing many McLighting instances would be a benefit. This could easily be achieved done by software like [NodeRed](https://nodered.org/). I added a example flow to demonstrate that [here](https://github.com/toblum/McLighting/blob/master/clients/node_red/websocket_proxy.json). Have a look at the short video [here](https://youtu.be/g3CHtG9c520). + +Update 21.01.2018: +User @szepnorbee contributed code for button control. Thank you! It's merged into the master branch now. There is a short manual for configuration [here](https://github.com/toblum/McLighting/wiki/Button-control). + +Update 06.01.2018: +After som etesting I merged the "feature/save_state" banch into master, so everybody should now be able to use this new functionality. Basically McLighting now saves the current mode to EEPROM and restores the setting on reboot. So you wont need to select your favorite mode again. If you don't want to use this, you can disable it in definitions.h. +~~Some people noticed that there are currently problems compiling McLighting whe using ESP8266 core in version 2.4.0. This is due to a [problem](https://github.com/kitesurfer1404/WS2812FX/issues/58) with WS2812FX when using this version. For the moment you can stick to the 2.4.0 RC2 (also easily available via the boards manager).~~ (fixed now ) +Funny! McLighting was featured in the german radio show ["Netzbasteln"](https://www.deutschlandfunknova.de/beitrag/netzbasteln-wolkenlampe-mit-cloud-anschluss) on Deutschlandfunk Nova with a nice audio tutorial. + +Update 16.12.2017: +There was a breaking change in the WS2812FX library: Speeds have a new format (65535-0 instead of 0-255). I released a new version that converts the speeds settings. Please use the latest [WS2812FX library](https://github.com/kitesurfer1404/WS2812FX) (14.12.2017 or later) if use have an existing version installed. +I got many messages from people who use McLighting for own projects. User Brian Lough built a lighting system for his wedding and made a nice instruction video for his build: https://goo.gl/NbfKi8 + +Update 30.09.2017: +Thanks to [@moose4lord](https://github.com/moose4lord) Mclighting works with the newest version of WS1812FX and has a possibility to define autocycle patterns [Wiki](https://github.com/toblum/McLighting/wiki/Autocycling). Thank for contributing to McLighting everyone! +I was also informed of a new project that is loosely based on McLighting: [Responsive_LED_Control](https://github.com/doctormord/Responsive_LED_Control) That looks very promising. + +Update 07.08.2017: +As requested by many of you, McLighting now also features MQTT support. Thanks at @LeonVos for his attempts on this. I implemented the same API as used in WebSockets now for MQTT. Please have a look here for details: https://github.com/toblum/McLighting/wiki/MQTT-API I will try to add a new instruction video soon. + +Many of you also took McLighting and adapted the software according your needs. This is great. I found some videos on YouTube that show these projects. I collected them here: https://goo.gl/yG7M4h +If you have done something similar with McLighting, please drop me a note. I'm always interested in what you've done with it. + +Update 19.02.2017: +Added OTA support as promised by @markbajaj. Minor other improvements. + +Update 05.02.2017: +After a long time I was able to work a bit on McLighting v2 and it's finally out now. The main difference, among minor improvements and library updates, is the usage of the great WS2812FX library for color animations. It brings a lot (almost 50!) of new animations. +The API changed a little bit, because the speed can now be set as a value from 0 to 255, not the delay anymore. So the web inferface had to change accordingly. The new animation mode have to be set also by their number, instead of a dedicated url. The list of all animation modes can also be received by the API. All existing API endpoints are kept for downward compatibility. So you should be able to use the new version without big changes. The original version is kept as branch "mclighting_legacy". Documentation will be updated soon. + +Update 04.01.2017: +Now, there are two forks of McLighting (using the famous FastLED library). I did not notice it first, because I currently do not receive notification e-mails by Github (I have no idea why). Maybe you want to give them also a try, I will definitely do so as soon as I find time. +https://github.com/russp81/LEDLAMP_FASTLEDs +And this one was also forked: https://github.com/jake-b/Griswold-LED-Controller + +Update 12.08.2016: +There is now a [gitter.im](https://gitter.im/mclighting/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link) chat room for this project. + +Update 11.06.2016: +Today I presented the project at [Pi and More 9](https://piandmore.de/) and got some good feedback, even though my presentation was not perfect and time was too short to present everything I prepared. So I uploaded the [slides (german)](documentation/slides/Ein%20SmartLight%20im%20Selbstbau%20für%20unter%2015%20€_Pi%20and%20More%209.pdf) to this repository for your reference. \ No newline at end of file diff --git a/README.md b/README.md index cc32356d..1f3e1148 100644 --- a/README.md +++ b/README.md @@ -1,135 +1,114 @@ -# McLighting v2 - The ESP8266 based multi-client lighting gadget +# McLighting v3 - The ESP8266 based multi-client lighting gadget -[![Gitter](https://badges.gitter.im/mclighting/Lobby.svg)](https://gitter.im/mclighting/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Gitter](https://badges.gitter.im/mclighting/Lobby.svg)](https://gitter.im/mclighting/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Build Status](https://travis-ci.com/toblum/McLighting.svg?branch=master)](https://travis-ci.com/toblum/McLighting) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![version](https://img.shields.io/badge/version-v3.1.3-blue.svg)](https://github.com/FabLab-Luenen/McLighting/blob/master/Arduino/McLighting/version.h) -> Mc Lighting (the multi-client lighting gadget) is a very cheap internet-controllable lighting solution based on the famous ESP8266 microcontroller and WS2811/2812 led strips. It features a self-hosted responsive web-interface, a REST-API and a websocket connector. +McLighting (the multi-client lighting gadget) is a very cheap internet-controllable lighting solution based on the famous ESP8266 microcontroller and WS2811/2812 led strips. It features among other things a web-interface, a REST-API and a websocket connector. -> Because of it's open architecture and APIs it's easy to build new clients for different platforms (iOS, Android, Windows Universal Apps, Siri/Cortana integration, ...). +Because of it's open architecture and APIs it's easy to build new clients for different platforms (iOS, Android, Windows Universal Apps, Siri/Cortana integration, ...). -___ -Update 31.01.2018: -User @codmpm did a very professional McLighting installation and even designed his own PCBs. He has a great writeup for his project at: https://allgeek.de/2018/01/29/esp8266-neopixel-controller/ (in german). - -Update 27.01.2018: -Many people asked if it's possible to connect more than one strip (currently not) or at least "sync" multiple McLighting nodes. Although it may be possible to connect more then one WS2812 strip to the same data pin (works in many cases, you just have to try), syncing many McLighting instances would be a benefit. This could easily be achieved done by software like [NodeRed](https://nodered.org/). I added a example flow to demonstrate that [here](https://github.com/toblum/McLighting/blob/master/clients/node_red/websocket_proxy.json). Have a look at the short video [here](https://youtu.be/g3CHtG9c520). - -Update 21.01.2018: -User @szepnorbee contributed code for button control. Thank you! It's merged into the master branch now. There is a short manual for configuration [here](https://github.com/toblum/McLighting/wiki/Button-control). - -Update 06.01.2018: -After som etesting I merged the "feature/save_state" banch into master, so everybody should now be able to use this new functionality. Basically McLighting now saves the current mode to EEPROM and restores the setting on reboot. So you wont need to select your favorite mode again. If you don't want to use this, you can disable it in definitions.h. -~~Some people noticed that there are currently problems compiling McLighting whe using ESP8266 core in version 2.4.0. This is due to a [problem](https://github.com/kitesurfer1404/WS2812FX/issues/58) with WS2812FX when using this version. For the moment you can stick to the 2.4.0 RC2 (also easily available via the boards manager).~~ (fixed now ) -Funny! McLighting was featured in the german radio show ["Netzbasteln"](https://www.deutschlandfunknova.de/beitrag/netzbasteln-wolkenlampe-mit-cloud-anschluss) on Deutschlandfunk Nova with a nice audio tutorial. - -Update 16.12.2017: -There was a breaking change in the WS2812FX library: Speeds have a new format (65535-0 instead of 0-255). I released a new version that converts the speeds settings. Please use the latest [WS2812FX library](https://github.com/kitesurfer1404/WS2812FX) (14.12.2017 or later) if use have an existing version installed. -I got many messages from people who use McLighting for own projects. User Brian Lough built a lighting system for his wedding and made a nice instruction video for his build: https://goo.gl/NbfKi8 - -Update 30.09.2017: -Thanks to [@moose4lord](https://github.com/moose4lord) Mclighting works with the newest version of WS1812FX and has a possibility to define autocycle patterns [Wiki](https://github.com/toblum/McLighting/wiki/Autocycling). Thank for contributing to McLighting everyone! -I was also informed of a new project that is loosely based on McLighting: [Responsive_LED_Control](https://github.com/doctormord/Responsive_LED_Control) That looks very promising. - -Update 07.08.2017: -As requested by many of you, McLighting now also features MQTT support. Thanks at @LeonVos for his attempts on this. I implemented the same API as used in WebSockets now for MQTT. Please have a look here for details: https://github.com/toblum/McLighting/wiki/MQTT-API I will try to add a new instruction video soon. +[![Demo video WebClient](https://j.gifs.com/kRPrzN.gif)](https://youtu.be/rc6QVHKAXBs) -Many of you also took McLighting and adapted the software according your needs. This is great. I found some videos on YouTube that show these projects. I collected them here: https://goo.gl/yG7M4h -If you have done something similar with McLighting, please drop me a note. I'm always interested in what you've done with it. +[![Demo video Apple Homekit integration](https://j.gifs.com/gJP2o6.gif)](https://youtu.be/4JnGXZaPnrw) -Update 19.02.2017: -Added OTA support as promised by @markbajaj. Minor other improvements. +--- -Update 05.02.2017: -After a long time I was able to work a bit on McLighting v2 and it's finally out now. The main difference, among minor improvements and library updates, is the usage of the great WS2812FX library for color animations. It brings a lot (almost 50!) of new animations. -The API changed a little bit, because the speed can now be set as a value from 0 to 255, not the delay anymore. So the web inferface had to change accordingly. The new animation mode have to be set also by their number, instead of a dedicated url. The list of all animation modes can also be received by the API. All existing API endpoints are kept for downward compatibility. So you should be able to use the new version without big changes. The original version is kept as branch "mclighting_legacy". Documentation will be updated soon. +## The Hardware -Update 04.01.2017: -Now, there are two forks of McLighting (using the famous FastLED library). I did not notice it first, because I currently do not receive notification e-mails by Github (I have no idea why). Maybe you want to give them also a try, I will definitely do so as soon as I find time. -https://github.com/russp81/LEDLAMP_FASTLEDs -And this one was also forked: https://github.com/jake-b/Griswold-LED-Controller +The project is based on the ESP8266 and WD2811/WS2812 LED strips. There are many variations of the ESP chip out there, but for beginners we suggest a NodeMCU dev board, as these are as "plug 'n' play"as it can get. +A standalone ESP8266 or an Adafruit Huzzah should work too. -Update 12.08.2016: -There is now a [gitter.im](https://gitter.im/mclighting/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link) chat room for this project. +The RGB LED strips are also available in many different flavours (as strips or as standalone LEDs) and can easily be chained. -Update 11.06.2016: -Today I presented the project at [Pi and More 9](https://piandmore.de/) and got some good feedback, even though my presentation was not perfect and time was too short to present everything I prepared. So I uploaded the [slides (german)](documentation/slides/Ein%20SmartLight%20im%20Selbstbau%20für%20unter%2015%20€_Pi%20and%20More%209.pdf) to this repository for your reference. -___ +For a detailed explanation see our wiki: [Hardware](../../wiki/Hardware) -[![Demo video WebClient](https://j.gifs.com/kRPrzN.gif)](https://youtu.be/rc6QVHKAXBs) +## Software installation -[![Demo video Apple Homekit integration](https://j.gifs.com/gJP2o6.gif)](https://youtu.be/4JnGXZaPnrw) +You can read how to get started on the software side of this project +again in out wiki: [Software installation](../../wiki/Software-installation) +--- -## The Hardware +### Used Libraries -The project ist based on the famous ESP8266 microcontroller and WD2811/WS2812 LED strips. There are many variations of the ESP chip out there, but I chose the NodeMCU dev board, because it's powered by micro USB and has a voltage converter included to power the ESP which uses 3.3V. -A standalone ESP8266 or a Adafruit Huzzah should work too. +This project uses libraries and code by different authors: -The RGB LED strips are also available in many different flavours as strip or as standalone LEDs and can easily be chained. +- [esp8266](https://github.com/esp8266/Arduino) tested with version 2.7.4 -See wiki [Hardware](../../wiki/Hardware) +- [WiFiManager](https://github.com/tzapu/WiFiManager) by tzapu (tested with version 0.15.0) +- [WS2812FX](https://github.com/kitesurfer1404/WS2812FX) by kitesurfer1404 (tested with version 1.3.1) included in code. -## Software installation -See wiki [Software installation](../../wiki/Software-installation) +- [WebSockets](https://github.com/Links2004/arduinoWebSockets) by Links2004 (tested with version 2.3.0) +- [Adafruit NeoPixel](https://github.com/adafruit/Adafruit_NeoPixel) by adafruit (tested with 1.7.0) -### Used Libraries -This project uses libraries and code by different authors: -- WiFiManager by @tzapu (tested with version 0.12.0) - https://github.com/tzapu/WiFiManager -- WS2812FX by @kitesurfer1404 (tested with version downloaded 2017-02-05) - https://github.com/kitesurfer1404/WS2812FX -- WebSockets by @Links2004 (tested with version 2.0.6) - https://github.com/Links2004/arduinoWebSockets -- Adafruit NeoPixel by @adafruit (tested with 1.1.2) - https://github.com/adafruit/Adafruit_NeoPixel -- Optional: PubSubClient by @knolleary (tested with 2.6.0) - Only when you have activated MQTT in definitions.h. - https://github.com/knolleary/pubsubclient/ +- Optional: [PubSubClient](https://github.com/knolleary/pubsubclient/) by knolleary (tested with 2.8.0) + _Only when you have activated MQTT in definitions.h._ + +- Optional: [Brzo I2C](https://github.com/pasko-zh/brzo_i2c/) by pazko-zh (tested with 1.3.3) + _Only when you have activated GY33 in definitions.h._ + +- Optional: [FastLed](https://github.com/FastLED/FastLED/) by FastLED (tested with 3.3.3) + _Only when you have activated custom animations in definitions.h._ + + - Optional: [IRremoteESP8266](https://github.com/crankyoldgit/IRremoteESP8266) by crankyoldgit (tested with 2.7.12) + _Only when you have activated IR-Remote in definitions.h._ The sketch also uses the following built-in library: -- Ticker by @igrr +- Ticker by [@igrr](https://github.com/igrr) Parts of the code were taken or inspired by the following sources: -- HSB3RGB conversion - https://blog.adafruit.com/2012/03/14/constant-brightness-hsb-to-rgb-algorithm/ -- TV simulator logic inspired by @BulldogLowell - https://github.com/BulldogLowell/PhoneyTV -- SPIFFS Webserver by Hristo Gochkov - https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer/examples/FSBrowser + +- [HSB3RGB conversion](https://blog.adafruit.com/2012/03/14/constant-brightness-hsb-to-rgb-algorithm/) + +- [TV simulator](https://github.com/BulldogLowell/PhoneyTV) logic inspired by BulldogLowell + +- [SPIFFS Webserver](https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer/examples/FSBrowser) by Hristo Gochkov Thank you to all the authors for distributing their software that way. I hope I didn't miss any sources and mentioned every author. In case I forgot someone please let me know and I will fix it. ## Todos +- [x] Redesign of Code and bump to V3 +- [ ] Customer profile to define segments of (in)active areas on the strip [Issue](https://github.com/toblum/McLighting/issues/37) +- [ ] Additional clients +- [x] If no wifi, at least enable button mode. +- [x] Also enable McLighting in Wifi AP mode. +- [ ] Search a non-blocking alternative for wifiManager +- [ ] Multiple buttons/GPIO Inputs. [Issue](https://github.com/toblum/McLighting/issues/119) +- [ ] Music visualizer / Bring back ArtNet [Issue](https://github.com/toblum/McLighting/issues/111) +- [ ] Display version and parameters (Number of LEDs, definition settings, ..) in the web UI [Issue](https://github.com/toblum/McLighting/issues/150) +- [x] Remove old / wrong EEPROM settings completely [Issue] EEPROM saving discarded +- [x] Support multiple strips and control them separately or together [Issue](https://github.com/toblum/McLighting/issues/118) +- [x] Support for up to ten segments +- [x] Removal of LEGACY_ANIMATIONS +- [x] Include ws2812fx library to code due to modifications in library +- [x] Add TV, E1.31 and AUTO to CUSTOM_WS2812FX_ANIMATIONS +- [x] Save status: Added saving of status 'AUTO'. [Issue](https://github.com/FabLab-Luenen/McLighting/issues/30) +- [x] EXPERIMENTAL: Added transition feature on changing values of color brightness and speed. ATTENTION! Does not work properly for all WS2812fx effects. Can be set via UI or REST-API. +- [x] Added Custom Animation 'Gradient': [Issue](https://github.com/FabLab-Luenen/McLighting/issues/25) +- [x] Make number of pixels, MQTT and PIN configurable via front end [Issue](https://github.com/toblum/McLighting/issues/93) and [Issue](https://github.com/toblum/McLighting/issues/101) +- [x] Bundle webpages instead of SPIFFS [Issue](https://github.com/toblum/McLighting/issues/93) +- [x] IR remote support [issue](https://github.com/toblum/McLightingUI/issues/3) - [x] MQTT support -- [ ] Support multiple strips and control them separately or together -- [ ] Save favourite effects? [Issue](https://github.com/toblum/McLighting/issues/35) -- [ ] Make number of pixels, MQTT and PIN configurable via front end [Issue](https://github.com/toblum/McLighting/issues/93) -- [ ] OTA update [Issue](https://github.com/toblum/McLighting/issues/93) -- [ ] Bundle webpages instead of SPIFFS [Issue](https://github.com/toblum/McLighting/issues/93) -- [ ] Remove old / wrong EEPROM settings completely (https://github.com/toblum/McLighting/issues/92) +- [x] Save favourite effects? [Issue](https://github.com/toblum/McLighting/issues/35) +- [x] OTA update [Issue](https://github.com/toblum/McLighting/issues/92) - [x] Fix issue with websockets connection problems -- [ ] Add support for 433MHz wireless socket using the [RC switch](https://github.com/sui77/rc-switch) library. -- [ ] Switch to the [NeoPixelBus library](https://github.com/Makuna/NeoPixelBus/wiki) +- [x] Switch to the [NeoPixelBus library](https://github.com/Makuna/NeoPixelBus/wiki) - [x] Use the led strip for status information in connection phase - [x] Enhance the documentation - [x] Stability improvements - [x] RGBW mode [Issue](https://github.com/toblum/McLighting/issues/24) - [x] Add called command to response [Issue](https://github.com/toblum/McLighting/issues/19) -- [ ] Customer profile to define segments of (in)active areas on the strip [Issue](https://github.com/toblum/McLighting/issues/37) - [x] Button control [Issue](https://github.com/toblum/McLighting/issues/36) - [x] Retain last state [Issue](https://github.com/toblum/McLighting/issues/47) -- [ ] Additional clients -- [ ] If no wifi, at least enable button mode. [Issue](https://github.com/toblum/McLighting/issues/88) -- [ ] Also enable McLighting in Wifi AP mode. -- [ ] Make a set of NodeRed nodes. +- [x] Make a set of NodeRed nodes. ## Licence -[GNU LGPLv3](http://www.gnu.org/licenses/lgpl-3.0.txt) +[MIT](https://choosealicense.com/licenses/mit/) ## Disclaimer diff --git a/clients/Android/McLightningApp.aia b/clients/Android/McLightningApp.aia new file mode 100644 index 00000000..8d4278df Binary files /dev/null and b/clients/Android/McLightningApp.aia differ diff --git a/clients/Android/McLightningApp.apk b/clients/Android/McLightningApp.apk new file mode 100644 index 00000000..be6970d2 Binary files /dev/null and b/clients/Android/McLightningApp.apk differ diff --git a/clients/AutoHotKey/LICENSE b/clients/AutoHotKey/LICENSE new file mode 100644 index 00000000..13de1fda --- /dev/null +++ b/clients/AutoHotKey/LICENSE @@ -0,0 +1,24 @@ +The following liscence applies to the inclueded Websocket class which was created by G33kDude (https://github.com/G33kDude/WebSocket.ahk): + + +MIT License + +Copyright (c) 2017 GeekDude + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/clients/AutoHotKey/LedKeyboardShortcuts.ahk b/clients/AutoHotKey/LedKeyboardShortcuts.ahk new file mode 100644 index 00000000..5d44d086 --- /dev/null +++ b/clients/AutoHotKey/LedKeyboardShortcuts.ahk @@ -0,0 +1,418 @@ +#NoEnv +#SingleInstance force ; only lets one run +SetBatchLines, -1 + +#Persistent ; prevents the script from exiting automatically + +; Register a function to be called on exit: +OnExit("ExitFunc") + +; make the notification box +notificationEnable := true ; set this to false to disable the notification popups +notificationTime := 1 ; seconds the notifications stay + +n := new Notification("Starting led shortcuts!", 200,14, ,notificationTime) + +; make the socket +socket := new McLightingServer("ws://192.168.1.33:81") ; replace with the ip address of the mclighting controller + +incrementAmount := 10 ; how finely you adjust the color, speed, and brightness per keypress +maxColor := 255 +maxMode := 56 ; the maximum mode id number + +red := 127 +green := 127 +blue := 127 + +brightness := 127 +speed := 127 +mode := 1 + +^#Numpad4:: ; switch modes down + mode := mode - 1 + if(mode < 0) + mode := maxMode + cmd = /%mode% ; / is the set effect mode command + setNotification("Mode: " + mode) + sendCmd(cmd) + ; MsgBox %cmd% + return + + +^#Numpad6:: ; switch modes up + mode := mode + 1 + if(mode > maxMode) + mode := 0 + setNotification("Mode: " + mode) + cmd = /%mode% + sendCmd(cmd) + ; MsgBox %cmd% + return + +^#Numpad5:: ; turn off + setNotification("Leds are off") + sendCmd("=off") ; = is the set control command + return + +^#Numpad0:: ; turn on to static color + setNotification("Leds are on") + cmd := "*"+toHexColor(red,green,blue) ; * is the set all command + sendCmd(cmd) ; = is the set control command + return + + +^#NumpadSub:: ; decreases brightness + brightness := brightness - incrementAmount + if(brightness < 0) + brightness := 0 + cmd = `%%brightness% ; % is the set brightness mode command. ` is the escape character + setNotification("Brightness: " + brightness) + sendCmd(cmd) + ; MsgBox %cmd% + return + +^#NumpadAdd:: ; increases brightness + brightness := brightness + incrementAmount + if(brightness > maxColor) + brightness := maxColor + cmd = `%%brightness% ; % is the set brightness mode command + setNotification("Brightness: " + brightness) + sendCmd(cmd) + ; MsgBox %cmd% + return + +^#NumpadDiv:: ; decreases speed + speed := speed - incrementAmount + if(speed < 0) + speed := 0 + cmd = ?%speed% ; ? is the set brightness mode command + setNotification("Speed: "+ speed) + sendCmd(cmd) + ; MsgBox %cmd% + return + +^#NumpadMult:: ; increases speed + speed := speed + incrementAmount + if(speed > maxColor) + speed := maxColor + cmd = ?%speed% ; ? is the set brightness mode command + setNotification("Speed: "+ speed) + sendCmd(cmd) + ; MsgBox %cmd% + return + + +^#Numpad7:: ; increase red amount + red := red + incrementAmount + if(red > maxColor) + red := maxColor + + cmd := "#"+toHexColor(red,green,blue) ; # is the set main color command + ; MsgBox %cmd% + setNotification("Red: " + red) + sendCmd(cmd) + + return + +^#Numpad1:: ; decrease red amount + red := red - incrementAmount + if(red < 0) + red := 0 + + cmd := "#"+toHexColor(red,green,blue) ; # is the set main color command + ; MsgBox %cmd% + setNotification("Red: " + red) + sendCmd(cmd) + + return + +^#Numpad8:: ; increase green amount + green := green + incrementAmount + if(green > maxColor) + green := maxColor + + cmd := "#"+toHexColor(red,green,blue) ; # is the set main color command + ; MsgBox %cmd% + setNotification("Green: " + green) + sendCmd(cmd) + + return + +^#Numpad2:: ; decrease green amount + green := green - incrementAmount + if(green < 0) + green := 0 + + cmd := "#"+toHexColor(red,green,blue) ; # is the set main color command + ; MsgBox %cmd% + setNotification("Green: " + green) + sendCmd(cmd) + + return + +^#Numpad9:: ; increase blue amount + blue := blue + incrementAmount + if(blue > maxColor) + blue := maxColor + + cmd := "#"+toHexColor(red,green,blue) ; # is the set main color command + ; MsgBox %cmd% + setNotification("Blue: " + blue) + sendCmd(cmd) + + return + +^#Numpad3:: ; decrease blue amount + blue := blue - incrementAmount + if(blue < 0) + blue := 0 + + cmd := "#"+toHexColor(red,green,blue) ; # is the set main color command + ; MsgBox %cmd% + setNotification("Blue: " + blue) + sendCmd(cmd) + + return + +sendCmd(cmd) +{ + global socket + ; MsgBox connected: %connected% + if( socket.connected ) + { + socket.Send(cmd) + ; MsgBox %cmd% + } + else + setNotification("Not connected to server!") + + return +} + +toHexColor(r, g, b) +{ + SetFormat, IntegerFast, hex ; To print values as hexadecimal + colorNum := r*65536 + g*256 + b + color = 000000%colorNum% ; convert to string and add preceeding zeros + color := StrReplace(color, "0x") ; replace the 0x from the middle + color := SubStr( color, -5 ) ; get last 6 characters + + SetFormat, IntegerFast, dec ; sets the print mode back to decimal + return ""+color ; +} + +setNotification(message) +{ + global notificationEnable + global n ; the notification class + if(notificationEnable) + { + n.updateMessage(message) + n.nshow() + } + + return +} + +ExitFunc(ExitReason, ExitCode) +{ + ; MsgBox Exiting + global n ; notification class + n.ndestroy() ; deletes the notification + return 0 ; must return zero to exit +} + +class McLightingServer extends WebSocket +{ + OnOpen(Event) + { + setNotification("Connection established!") + ; InputBox, Data, WebSocket, Enter some text to send through the websocket. + ; this.Send(Data) + + ; global connected + this.connected := 1 + ; MsgBox connection %connected% + } + + OnMessage(Event) + { + ; MsgBox, % "Received Data: " Event.data + ; this.Close() + } + + OnClose(Event) + { + setNotification("Websocket Closed!") + ; MsgBox closed! + this.connected := 0 + this.Disconnect() + ExitApp + } + + OnError(Event) + { + setNotification("Websocket Error") + ; MsgBox error! + this.connected := 0 + this.Close() + } + + __Delete() + { + ; setNotification(" Exiting Led controller ") ; sticks after program closes + ExitApp + } +} + +class WebSocket +{ + __New(WS_URL) + { + this.connected := false ; flag for connection status + static wb + + ; Create an IE instance + Gui, +hWndhOld + Gui, New, +hWndhWnd + this.hWnd := hWnd + Gui, Add, ActiveX, vWB, Shell.Explorer + Gui, %hOld%: Default + + ; Write an appropriate document + WB.Navigate("about:") + while (WB.ReadyState < 4) + sleep, 50 + this.document := WB.document + + ; Add our handlers to the JavaScript namespace + this.document.parentWindow.ahk_savews := this._SaveWS.Bind(this) + this.document.parentWindow.ahk_event := this._Event.Bind(this) + this.document.parentWindow.ahk_ws_url := WS_URL + + ; Add some JavaScript to the page to open a socket + Script := this.document.createElement("script") + Script.text := "ws = new WebSocket(ahk_ws_url);`n" + . "ws.onopen = function(event){ ahk_event('Open', event); };`n" + . "ws.onclose = function(event){ ahk_event('Close', event); };`n" + . "ws.onerror = function(event){ ahk_event('Error', event); };`n" + . "ws.onmessage = function(event){ ahk_event('Message', event); };" + this.document.body.appendChild(Script) + } + + ; Called by the JS in response to WS events + _Event(EventName, Event) + { + this["On" EventName](Event) + } + + ; Sends data through the WebSocket + Send(Data) + { + ; MsgBox %Data% + this.document.parentWindow.ws.send(Data) + } + + ; Closes the WebSocket connection + Close(Code:=1000, Reason:="") + { + this.document.parentWindow.ws.close(Code, Reason) + } + + ; Closes and deletes the WebSocket, removing + ; references so the class can be garbage collected + Disconnect() + { + if this.hWnd + { + this.Close() + Gui, % this.hWnd ": Destroy" + this.hWnd := False + } + } +} + +class Notification +{ + __New(message, pnW=700, pnH=300, position="b r", time=10000) + { + this.showTime := time ; time that the notification shows up for + + global pn_msg + this.pn_msg := message ; message to display + + Gui, Notify: +AlwaysOnTop +ToolWindow -SysMenu -Caption +LastFound + this.PN_hwnd := WinExist() + + WinSet, ExStyle, +0x20 + WinSet, Transparent, 0 ; makes the box transparent so that it can fade in and out. 255 -> opaque; 0 -> transparent + Gui, Notify: Color, 0x111111 ; background color + Gui, Notify: Font, cWhite s10 w500, Terminal ; message color, size, weight, and font + Gui, Notify: Add, Text, % " x" 20 " y" 12 " vpn_msg", % this.pn_msg ; add message + RealW := pnW + 50 + RealH := pnH + 20 + Gui, Notify: Show, W%RealW% H%RealH% NoActivate + this.WinMove(this.PN_hwnd, position) + global windowID := ("ahk_id "this.PN_hwnd) ; window id + this.nshow() + } + + ndestroy() { + this.winfade(windowID,0,50) ; fades the box out + Gui, Notify: Destroy + return + } + + nhide(){ ; called by the timer + showTimer: + SetTimer, showTimer, Off ; turn off the timer + global windowID + winfade(windowID,0,50) ; fades the box out + return + } + + nshow(){ + w:= ("ahk_id "+this.PN_hwnd) + + WinGet,s,Transparent,%w% ; makes the notification visible + s:=(s="")?255:s ;prevent trans unset bug + WinSet,Transparent,210,%w% + + Closetick := this.showTime*1000 + SetTimer, showTimer, % Closetick ; reset the hide timer + return + } + + updateMessage(message) { + this.pn_msg := message + GuiControl, Notify: Text, pn_msg, % this.pn_msg + return + } + + WinMove(hwnd,position) { + SysGet, Mon, MonitorWorkArea + WinGetPos,ix,iy,w,h, ahk_id %hwnd% + x := InStr(position,"l") ? MonLeft : InStr(position,"hc") ? (MonRight-w)/2 : InStr(position,"r") ? MonRight - w : ix + y := InStr(position,"t") ? MonTop : InStr(position,"vc") ? (MonBottom-h)/2 : InStr(position,"b") ? MonBottom - h : iy + WinMove, ahk_id %hwnd%,,x,y + return + } +} + +; winfade must be global for the timer to use it +winfade(w:="",t:=128,i:=1,d:=10) { + w:=(w="")?("ahk_id " WinActive("A")):w + t:=(t>255)?255:(t<0)?0:t + WinGet,s,Transparent,%w% + s:=(s="")?255:s ;prevent trans unset bug + WinSet,Transparent,%s%,%w% + i:=(st):(s/get_switch", - "powerOn": "http:///all?r=255&g=255&b=255", + "powerOn": "http:///on", "powerOff": "http:///off" }, "brightness": { "status": "http:///get_brightness", - "url": "http:///set_brightness?c=%s" + "url": "http:///set?c=%s" }, "color": { "status": "http:///get_color", - "url": "http:///all?rgb=%s", + "url": "http:///set?m=0?rgb=00%s", "brightness": true } } diff --git a/clients/web/apple-touch-icon.png b/clients/web/apple-touch-icon.png new file mode 100644 index 00000000..c00fb89d Binary files /dev/null and b/clients/web/apple-touch-icon.png differ diff --git a/clients/web/build/index.htm b/clients/web/build/index.htm deleted file mode 100644 index ce8333e4..00000000 --- a/clients/web/build/index.htm +++ /dev/null @@ -1,465 +0,0 @@ - - - - - - - - - - - - McLighting v2 - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Error on websocket connect.
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
pick a color
-
-
-
-
-
Auto:
- -
-
-
-
-
- -
-
-
-
-
-
-
-

-
-
-
-

-
-
-
-

-
-
- -
-
-
-

-
-
- -
-
-
-

-
-
-
-
- -
- - - - -
-
- Loading animations... -
-
-
-
-
- - - - - - - - - - - \ No newline at end of file diff --git a/clients/web/edit.htm b/clients/web/edit.htm new file mode 100644 index 00000000..728b7056 --- /dev/null +++ b/clients/web/edit.htm @@ -0,0 +1,676 @@ + + + + SPIFFS Editor + + + + + +
+
+
+ + + + diff --git a/clients/web/edit.htm.gz b/clients/web/edit.htm.gz new file mode 100644 index 00000000..03cc7007 Binary files /dev/null and b/clients/web/edit.htm.gz differ diff --git a/clients/web/favicon.ico b/clients/web/favicon.ico new file mode 100644 index 00000000..1c55beaf Binary files /dev/null and b/clients/web/favicon.ico differ diff --git a/clients/web/favicon.ico.gz b/clients/web/favicon.ico.gz new file mode 100644 index 00000000..9e0ba66b Binary files /dev/null and b/clients/web/favicon.ico.gz differ diff --git a/clients/web/graphs.js.gz b/clients/web/graphs.js.gz new file mode 100644 index 00000000..72435445 Binary files /dev/null and b/clients/web/graphs.js.gz differ diff --git a/clients/web/gulpfile.js b/clients/web/gulpfile.js deleted file mode 100644 index cb2773a0..00000000 --- a/clients/web/gulpfile.js +++ /dev/null @@ -1,55 +0,0 @@ -var gulp = require('gulp'), - request = require('request'), - fs = require('fs'), - connect = require('gulp-connect'), - fileinclude = require('gulp-file-include'); - -var src_dir = "src/"; -var build_dir = "build/"; - - -gulp.task('html', function() { - gulp.src(src_dir + '*.htm') - .pipe(fileinclude({ - prefix: '@@', - basepath: '@file' - })) - .pipe(gulp.dest('build')) - .pipe(connect.reload()); -}); - - -gulp.task('connect', function() { - connect.server({ - root: 'build', - livereload: true - }); -}); - -gulp.task('watch', function() { - gulp.watch(src_dir + '*.htm', ['html']); - gulp.watch(src_dir + 'js/*.js', ['html']); -}); - - -gulp.task('upload', ['html'], function() { - var url = 'http://192.168.0.49/edit'; - var options = { - url: url, - headers: { - 'Content-Type': 'multipart/form-data' - } - }; - - var r = request.post(options, function optionalCallback(err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); - }); - var form = r.form(); - form.append('data', fs.createReadStream(__dirname + "/" + build_dir + '/index.htm'), {filename: '/index.htm', contentType: "application/octet-stream"}); -}); - -gulp.task('default', ['html']); -gulp.task('serve', ['watch', 'connect']); \ No newline at end of file diff --git a/clients/web/index.htm b/clients/web/index.htm new file mode 100644 index 00000000..7b1c6920 --- /dev/null +++ b/clients/web/index.htm @@ -0,0 +1,2660 @@ + + + + McLighting + + + + + + + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/clients/web/index.htm.gz b/clients/web/index.htm.gz new file mode 100644 index 00000000..c777c419 Binary files /dev/null and b/clients/web/index.htm.gz differ diff --git a/clients/web/material.woff2 b/clients/web/material.woff2 new file mode 100644 index 00000000..d9c6038f Binary files /dev/null and b/clients/web/material.woff2 differ diff --git a/clients/web/package.json b/clients/web/package.json deleted file mode 100644 index 98632aaf..00000000 --- a/clients/web/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "mc_lighting", - "version": "2.0.0", - "description": "Web client for Mc Lighting", - "main": "index.html", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Tobias Blum", - "license": "MIT", - "dependencies": { - "fs": "0.0.2", - "gulp": "^3.9.1", - "gulp-connect": "^5.0.0", - "gulp-file-include": "^1.0.0", - "request": "^2.72.0" - } -} diff --git a/clients/web/src/index.htm b/clients/web/src/index.htm deleted file mode 100644 index b863d9fe..00000000 --- a/clients/web/src/index.htm +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - McLighting v2 - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Error on websocket connect.
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
pick a color
-
-
-
-
-
Auto:
- -
-
-
-
-
- -
-
-
-
-
-
-
-

-
-
-
-

-
-
-
-

-
-
- -
-
-
-

-
-
- -
-
-
-

-
-
-
-
- -
- - - - -
-
- Loading animations... -
-
-
-
-
- - - - - - - - - - - \ No newline at end of file diff --git a/clients/web/src/js/script.js b/clients/web/src/js/script.js deleted file mode 100644 index 60ef6d86..00000000 --- a/clients/web/src/js/script.js +++ /dev/null @@ -1,305 +0,0 @@ -(function($){ -$(function(){ - - // Settings - var host = window.location.hostname; - //host = "esp8266_02.local"; - - var ws_url = 'ws://' + host + ':81'; - var connection; - var ws_waiting = 0; - - // ****************************************************************** - // Side navigation - // ****************************************************************** - $('.button-collapse').sideNav(); - - // Navlinks - $('#mc-nav').on('click', '.mc-navlink', function(){ - console.log("Navigate to pane: ", $(this).data("pane")); - showPane($(this).data("pane")); - }); - - function showPane(pane) { - $('.mc_pane').addClass('hide'); - $('#' + pane).removeClass('hide'); - $('.button-collapse').sideNav('hide'); - - if (pane == "pane2") { - setMainColor(); - } - } - - - // ****************************************************************** - // init() - // ****************************************************************** - function init() { - console.log("Connection websockets to:", ws_url); - connection = new WebSocket(ws_url, ['arduino']); - - // Load modes async - $.getJSON("http://" + host + "/get_modes", function(data) { - //console.log("modes", data); - - var modes_html = ""; - data.forEach(function(current_mode){ - if (current_mode.mode !== undefined) { - modes_html += ''; - } - }); - - $('#modes').html(modes_html); - }); - - // When the connection is open, send some data to the server - connection.onopen = function () { - //connection.send('Ping'); // Send the message 'Ping' to the server - console.log('WebSocket Open'); - showPane('pane1'); - }; - - // Log errors - connection.onerror = function (error) { - console.log('WebSocket Error ' + error); - $('#mc-wsloader').addClass('hide'); - $('#mc-wserror').removeClass('hide'); - }; - - // Log messages from the server - connection.onmessage = function (e) { - console.log('WebSocket from server: ' + e.data); - ws_waiting = 0; - }; - } - - - // ****************************************************************** - // Modes - // ****************************************************************** - $("#pane2").on("click", ".btn_mode", function() { - var mode = $(this).attr("data-mode"); - last_mode = mode; - var btn = $(this); - setMode(mode, function() { - $(".btn_mode, .btn_mode_static").removeClass("red").addClass("blue"); - btn.removeClass("blue").addClass("red"); - }); - }); - - $("#pane2").on("click", ".btn_mode_static", function() { - var mode = $(this).attr("data-mode"); - var btn = $(this); - - wsSendCommand("=" + mode); - $(".btn_mode, .btn_mode_static").removeClass("red").addClass("blue"); - btn.removeClass("blue").addClass("red"); - }); - - $("#pane2").on("change", ".update_colors", setMainColor); - - $("#pane2").on("change", ".update_delay", function() { - var delay = $("#rng_delay").val(); - - wsSendCommand("?" + delay); - }); - - $("#pane2").on("change", ".update_brightness", function() { - var brightness = $("#rng_brightness").val(); - - wsSendCommand("%" + brightness); - }); - - $("#autoSwitch").on("change", function () { - if ($(this).prop('checked')) { - wsSendCommand("start"); - } else { - wsSendCommand("stop"); - } - }); - - function setMode(mode, finish_funtion) { - console.log("Mode: ", mode); - - wsSendCommand("/" + mode); - finish_funtion(); - } - - function setMainColor() { - var red = $("#rng_red").val(); - var green = $("#rng_green").val(); - var blue = $("#rng_blue").val(); - - var mainColorHex = componentToHex(red) + componentToHex(green) + componentToHex(blue); - wsSetMainColor(mainColorHex); - } - - - // ****************************************************************** - // WebSocket commands - // ****************************************************************** - function wsSendCommand(cmd) { - console.log("Send WebSocket command:", cmd); - if (ws_waiting == 0) { - connection.send(cmd); - ws_waiting++; - } else { - console.log("++++++++ WS call waiting, skip") - } - } - - - function wsSetAll(hexColor) { - console.log("wsSetAll() Set all colors to:", hexColor); - wsSendCommand("*" + hexColor); - } - - function wsSetMainColor(hexColor) { - console.log("wsSetMainColor() Set main colors to:", hexColor); - wsSendCommand("#" + hexColor); - } - - - - // ****************************************************************** - // Colorwheel - // ****************************************************************** - // this is supposed to work on mobiles (touch) as well as on a desktop (click) - // since we couldn't find a decent one .. this try of writing one by myself - // + google. swiping would be really nice - I will possibly implement it with - // jquery later - or never. - - var canvas = document.getElementById("myCanvas"); - // FIX: Cancel touch end event and handle click via touchstart - // canvas.addEventListener("touchend", function(e) { e.preventDefault(); }, false); - canvas.addEventListener("touchmove", doTouch, false); - canvas.addEventListener("click", doClick, false); - //canvas.addEventListener("mousemove", doClick, false); - - - var context = canvas.getContext('2d'); - var centerX = canvas.width / 2; - var centerY = canvas.height / 2; - var innerRadius = canvas.width / 4.5; - var outerRadius = (canvas.width - 10) / 2 - - //outer border - context.beginPath(); - //outer circle - context.arc(centerX, centerY, outerRadius, 0, 2 * Math.PI, false); - //draw the outer border: (gets drawn around the circle!) - context.lineWidth = 4; - context.strokeStyle = '#000000'; - context.stroke(); - context.closePath(); - - //fill with beautiful colors - //taken from here: http://stackoverflow.com/questions/18265804/building-a-color-wheel-in-html5 - for(var angle=0; angle<=360; angle+=1) { - var startAngle = (angle-2)*Math.PI/180; - var endAngle = angle * Math.PI/180; - context.beginPath(); - context.moveTo(centerX, centerY); - context.arc(centerX, centerY, outerRadius, startAngle, endAngle, false); - context.closePath(); - context.fillStyle = 'hsl('+angle+', 100%, 50%)'; - context.fill(); - context.closePath(); - } - - //inner border - context.beginPath(); - //context.arc(centerX, centerY, radius, startAngle, endAngle, counterClockwise); - context.arc(centerX, centerY, innerRadius, 0, 2 * Math.PI, false); - //fill the center - var my_gradient=context.createLinearGradient(0,0,170,0); - my_gradient.addColorStop(0,"black"); - my_gradient.addColorStop(1,"white"); - - context.fillStyle = my_gradient; - context.fillStyle = "white"; - context.fill(); - - //draw the inner line - context.lineWidth = 2; - context.strokeStyle = '#000000'; - context.stroke(); - context.closePath(); - - //get Mouse x/y canvas position - function getMousePos(canvas, evt) { - var rect = canvas.getBoundingClientRect(); - return { - x: evt.clientX - rect.left, - y: evt.clientY - rect.top - }; - } - - //comp to Hex - function componentToHex(c) { - //var hex = c.toString(16); - //return hex.length == 1 ? "0" + hex : hex; - return ("0"+(Number(c).toString(16))).slice(-2).toUpperCase(); - } - - //rgb/rgba to Hex - function rgbToHex(rgb) { - return componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]); - } - - //display the touch/click position and color info - function updateStatus(pos, color) { - var hexColor = rgbToHex(color); - wsSetAll(hexColor); - - hexColor = "#" + hexColor; - - $('#status').css("backgroundColor", hexColor); - $('#status_color').text(hexColor + " - R=" + color[0] + ", G=" + color[1] + ", B=" + color[2]); - $('#status_pos').text("x: " + pos.x + " - y: " + pos.y); - - $("#rng_red").val(color[0]); - $("#rng_green").val(color[1]); - $("#rng_blue").val(color[2]); - } - - //handle the touch event - function doTouch(event) { - //to not also fire on click - event.preventDefault(); - var el = event.target; - - //touch position - var pos = {x: Math.round(event.targetTouches[0].pageX - el.offsetLeft), - y: Math.round(event.targetTouches[0].pageY - el.offsetTop)}; - //color - var color = context.getImageData(pos.x, pos.y, 1, 1).data; - - updateStatus(pos, color); - } - - function doClick(event) { - //click position - var pos = getMousePos(canvas, event); - //color - var color = context.getImageData(pos.x, pos.y, 1, 1).data; - - //console.log("click", pos.x, pos.y, color); - updateStatus(pos, color); - - //now do sth with the color rgbToHex(color); - //don't do stuff when #000000 (outside circle and lines - } - - - // ****************************************************************** - // main - // ****************************************************************** - init(); - -}); // end of document ready -})(jQuery); // end of jQuery name space \ No newline at end of file diff --git a/documentation/pcb/Gerber.zip b/documentation/pcb/Gerber.zip new file mode 100644 index 00000000..45211348 Binary files /dev/null and b/documentation/pcb/Gerber.zip differ diff --git a/documentation/pcb/PCB_Schematic.pdf b/documentation/pcb/PCB_Schematic.pdf new file mode 100644 index 00000000..6bc6a48d Binary files /dev/null and b/documentation/pcb/PCB_Schematic.pdf differ diff --git a/documentation/pcb/Photo View.svg b/documentation/pcb/Photo View.svg new file mode 100644 index 00000000..a1ebda30 --- /dev/null +++ b/documentation/pcb/Photo View.svg @@ -0,0 +1,10 @@ +Photo View + \ No newline at end of file diff --git a/documentation/pics/arduino_boards_manager.png b/documentation/pics/arduino_boards_manager.png index 13934f5a..642009b7 100644 Binary files a/documentation/pics/arduino_boards_manager.png and b/documentation/pics/arduino_boards_manager.png differ diff --git a/documentation/pics/board_settings.png b/documentation/pics/board_settings.png new file mode 100644 index 00000000..95a65f7b Binary files /dev/null and b/documentation/pics/board_settings.png differ diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 00000000..e9860279 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,97 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[platformio] +src_dir = ./Arduino/McLighting/ +data_dir = ./Arduino/McLighting/data/ +default_envs = nodemcuv2 +description = The ESP8266 based multi-client lighting gadget + +[common] +# ------------------------------------------------------------------------------ +# PLATFORM: +# !! DO NOT confuse platformio's ESP8266 development platform with Arduino core for ESP8266 +# We use Arduino Core 2.5.0 (platformIO 2.0.4) as default +# +# arduino core 2.3.0 = platformIO 1.5.0 +# arduino core 2.4.0 = platformIO 1.6.0 +# arduino core 2.4.1 = platformIO 1.7.3 +# arduino core 2.4.2 = platformIO 1.8.0 +# arduino core 2.5.0 = platformIO 2.0.4 +# arduino core 2.5.1 = platformIO 2.1.1 +# arduino core 2.5.2 = platformIO 2.2.3 +# arduino core 2.6.1 = platformIO 2.3.0 +# arduino core 2.6.2 = platformIO 2.3.1 +# arduino core 2.6.3 = platformIO 2.3.2 +# arduino core stage = platformIO feature#stage +# ------------------------------------------------------------------------------ +arduino_core_2_3_0 = espressif8266@1.5.0 +arduino_core_2_4_0 = espressif8266@1.6.0 +arduino_core_2_4_1 = espressif8266@1.7.3 +arduino_core_2_4_2 = espressif8266@1.8.0 +arduino_core_2_5_0 = espressif8266@2.0.4 +arduino_core_2_5_1 = espressif8266@2.1.1 +arduino_core_2_5_2 = espressif8266@2.2.3 +arduino_core_2_6_1 = espressif8266@2.3.0 +arduino_core_2_6_2 = espressif8266@2.3.1 +arduino_core_2_6_3 = espressif8266@2.3.2 +arduino_core_stage = https://github.com/platformio/platform-espressif8266.git#feature/stage + +framework = arduino +;platform = ${common.arduino_core_2_4_2} +platform = ${common.arduino_core_2_6_3} +build_flags = + -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH + -DMQTT_MAX_PACKET_SIZE=512 ; PubSubClient Specific flags + -w ; supress all warnings +monitor_speed = 115200 +board_build.flash_mode = dio +upload_speed = 115200 +upload_resetmethod = nodemcu +lib_deps = + WiFiManager + AsyncMqttClient + ArduinoJson + WS2812FX + NeoPixelBus + WebSockets + ESPAsyncE131 + ESPAsyncUDP + https://github.com/FabLab-Luenen/GY33_MCU + Brzo I2C + IRremoteESP8266 + FastLED + +[env:esp01_1m] +board = esp01_1m +framework = ${common.framework} +platform = ${common.platform} +board_build.f_cpu = 160000000L +build_flags = + ${common.build_flags} -D D1=2 + -Wl,-Teagle.flash.1m128.ld ; Required for core > v2.5.0 or staging version +monitor_speed = ${common.monitor_speed} +upload_speed = ${common.upload_speed} +upload_resetmethod = ${common.upload_resetmethod} +board_build.flash_mode = dout +lib_deps = ${common.lib_deps} + +[env:nodemcuv2] +board = nodemcuv2 +framework = ${common.framework} +platform = ${common.platform} +board_build.f_cpu = 160000000L +build_flags = + ${common.build_flags} + -Wl,-Teagle.flash.4m2m.ld ; Required for core > v2.5.0 or staging version +monitor_speed = ${common.monitor_speed} +upload_speed = ${common.upload_speed} +upload_resetmethod = ${common.upload_resetmethod} +lib_deps = ${common.lib_deps} \ No newline at end of file