Add initial devices page (/devices) (#568)

This commit is contained in:
Darrell 2022-07-31 00:51:34 -04:00 committed by GitHub
parent f2e23e9911
commit 1846640b1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 3217 additions and 31 deletions

View File

@ -30,7 +30,7 @@ bool BleFingerprint::setId(const String& newId, short newIdType, const String& n
if ((idType != newIdType) || !id.equals(newId)) {
countable = !ignore && !BleFingerprintCollection::countIds.isEmpty() && prefixExists(BleFingerprintCollection::countIds, newId);
countable = !ignore && !hidden && !BleFingerprintCollection::countIds.isEmpty() && prefixExists(BleFingerprintCollection::countIds, newId);
bool newQuery = !ignore && !BleFingerprintCollection::query.isEmpty() && prefixExists(BleFingerprintCollection::query, newId);
if (newQuery != allowQuery)
{
@ -493,7 +493,6 @@ bool BleFingerprint::seen(BLEAdvertisedDevice *advertisedDevice)
newest = advertisedDevice->getRSSI();
rssi = median_of_3(oldest, recent, newest);
float ratio = (get1mRssi() - rssi) / (10.0f * BleFingerprintCollection::absorption);
raw = pow(10, ratio);
if (filter()) hasValue = true;
@ -525,7 +524,30 @@ void BleFingerprint::setInitial(int initalRssi, float initalDistance)
hasValue = filter() || filter();
}
bool BleFingerprint::report(JsonDocument *doc)
void BleFingerprint::fill(JsonObject *doc)
{
(*doc)[F("id")] = id;
if (!name.isEmpty()) (*doc)[F("name")] = name;
if (!disc.isEmpty()) (*doc)[F("disc")] = disc;
if (idType) (*doc)[F("idType")] = idType;
(*doc)[F("rssi@1m")] = get1mRssi();
(*doc)[F("rssi")] = rssi;
(*doc)[F("raw")] = serialized(String(raw, 2));
(*doc)[F("distance")] = serialized(String(output.value.position, 2));
(*doc)[F("speed")] = serialized(String(output.value.speed * 1e3f, 2));
(*doc)[F("mac")] = SMacf(address);
(*doc)[F("interval")] = (millis() - firstSeenMillis) / seenCount;
if (mv) (*doc)[F("mV")] = mv;
if (battery != 0xFF) (*doc)[F("batt")] = battery;
if (temp) (*doc)[F("temp")] = serialized(String(temp, 1));
if (humidity) (*doc)[F("rh")] = serialized(String(humidity, 1));
}
bool BleFingerprint::report(JsonObject *doc)
{
if (ignore || idType == 0 || hidden)
return false;
@ -544,27 +566,7 @@ bool BleFingerprint::report(JsonDocument *doc)
lastReportedMillis = now;
lastReported = output.value.position;
reported = true;
(*doc)[F("id")] = id;
if (!name.isEmpty()) (*doc)[F("name")] = name;
if (!disc.isEmpty()) (*doc)[F("disc")] = disc;
if (idType) (*doc)[F("idType")] = idType;
(*doc)[F("rssi@1m")] = get1mRssi();
(*doc)[F("rssi")] = rssi;
(*doc)[F("raw")] = serialized(String(raw, 2));
(*doc)[F("distance")] = serialized(String(output.value.position, 2));
(*doc)[F("speed")] = serialized(String(output.value.speed * 1e3f, 2));
(*doc)[F("mac")] = SMacf(address);
(*doc)[F("interval")] = (now - firstSeenMillis) / seenCount;
if (mv) (*doc)[F("mV")] = mv;
if (battery != 0xFF) (*doc)[F("batt")] = battery;
if (temp) (*doc)[F("temp")] = serialized(String(temp, 1));
if (humidity) (*doc)[F("rh")] = serialized(String(humidity, 1));
fill(doc);
return true;
}
@ -648,7 +650,7 @@ bool BleFingerprint::query()
bool BleFingerprint::shouldCount()
{
bool prevCounting = counting;
if (ignore || !countable)
if (ignore || !countable || !hasValue)
counting = false;
else if (getMsSinceFirstSeen() <= BleFingerprintCollection::countMs || getMsSinceLastSeen() > BleFingerprintCollection::countMs)
counting = false;

View File

@ -61,12 +61,16 @@ public:
bool seen(BLEAdvertisedDevice *advertisedDevice);
bool report(JsonDocument *doc);
void fill(JsonObject *doc);
bool report(JsonObject *doc);
bool query();
String getId() { return id; }
String getName() { return name; }
bool setId(const String &newId, short int newIdType, const String &newName = "");
void setInitial(int rssi, float distance);
@ -89,6 +93,8 @@ public:
unsigned long getMsSinceFirstSeen() const { return millis() - firstSeenMillis; };
bool getVisible() const { return !ignore && !hidden && hasValue; }
bool getAdded() const { return added; };
bool getIgnore() const { return ignore; };

View File

@ -30,9 +30,9 @@ build_flags =
build_unflags =
framework = arduino
lib_deps =
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.4
marvinroger/AsyncMqttClient@^0.9.0
bblanchon/ArduinoJson@^6.19.3
https://github.com/ESPresense/ESPAsyncWebServer.git
https://github.com/ESPresense/AsyncWiFiSettings.git
https://github.com/ESPresense/SoftFilters.git
https://github.com/ESPresense/NimBLE-Arduino.git

106
src/HttpServer.cpp Normal file
View File

@ -0,0 +1,106 @@
#include "MotionSensors.h"
#include <AsyncWiFiSettings.h>
#include <AsyncMqttClient.h>
#include "globals.h"
#include "mqtt.h"
#include "string_utils.h"
#include "defaults.h"
#include "GUI.h"
#include "HttpServer.h"
#include "AsyncJson.h"
#include "ArduinoJson.h"
#include "ui_bundle_css.h"
#include "ui_index_html.h"
#include "ui_index_js.h"
namespace HttpServer
{
bool deserializeState(JsonObject root ){return false;}
bool deserializeConfig(JsonObject doc, bool fromFS = false){return false;}
void serializeDevices(JsonObject& root)
{
JsonArray devices = root.createNestedArray("devices");
auto f = fingerprints.getCopy();
for (auto it = f.begin(); it != f.end(); ++it)
{
if ((*it)->getVisible()) {
JsonObject node = devices.createNestedObject();
(*it)->fill(&node);
}
}
}
void serveJson(AsyncWebServerRequest* request) {
byte subJson = 0;
const String& url = request->url();
if (url.indexOf("devices") > 0) subJson = 1;
AsyncJsonResponse* response = new AsyncJsonResponse(false, JSON_BUFFER_SIZE);
JsonObject root = response->getRoot();
switch (subJson)
{
case 1:
serializeDevices(root); break;
}
response->setLength();
request->send(response);
}
void serializeConfig(){};
void Init(AsyncWebServer *server)
{
DefaultHeaders::Instance().addHeader(F("Access-Control-Allow-Origin"), "*");
DefaultHeaders::Instance().addHeader(F("Access-Control-Allow-Methods"), "*");
DefaultHeaders::Instance().addHeader(F("Access-Control-Allow-Headers"), "*");
server->on("/", HTTP_OPTIONS, [](AsyncWebServerRequest *request) {
AsyncWebServerResponse *response = request->beginResponse(200);
response->addHeader(F("Access-Control-Max-Age"), F("7200"));
request->send(response);
});
server->on("/devices", HTTP_GET, [](AsyncWebServerRequest *request)
{ serveIndexHtml(request); });
server->on("/bundle.css", HTTP_GET, [](AsyncWebServerRequest *request)
{ serveBundleCss(request); });
server->on("/index.js", HTTP_GET, [](AsyncWebServerRequest *request)
{ serveIndexJs(request); });
server->on("/json", HTTP_GET, [](AsyncWebServerRequest *request)
{ serveJson(request); });
AsyncCallbackJsonWebHandler *handler = new AsyncCallbackJsonWebHandler("/json", [](AsyncWebServerRequest *request, JsonVariant &json)
{
bool verboseResponse = false;
bool isConfig = false;
{
DynamicJsonDocument doc(1500);
DeserializationError error = deserializeJson(doc, (uint8_t *) (request->_tempObject));
JsonObject root = doc.as<JsonObject>();
if (error || root.isNull())
{
request->send(400, "application/json", F("{\"error\":9}"));
return;
}
const String& url = request->url();
isConfig = url.indexOf("cfg") > -1;
if (!isConfig)
verboseResponse = deserializeState(root);
else
verboseResponse = deserializeConfig(root);
}
if (verboseResponse)
{
if (!isConfig)
{
serveJson(request);
return; //if JSON contains "v"
}
else
{
serializeConfig(); //Save new settings to FS
}
}
request->send(200, "application/json", F("{\"success\":true}")); });
server->addHandler(handler);
}
}

7
src/HttpServer.h Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#include <ESPAsyncWebServer.h>
namespace HttpServer
{
void Init(AsyncWebServer* server);
}

View File

@ -1,5 +1,7 @@
#pragma once
#define JSON_BUFFER_SIZE 20480
// Replace with your MQTT Broker address
#define DEFAULT_MQTT_HOST "mqtt.z13.org"

View File

@ -2,6 +2,7 @@
#include <Arduino.h>
#include <AsyncMqttClient.h>
#include <ArduinoJson.h>
#include <BleFingerprintCollection.h>
/*----------------------------------------------------------------------------
globals.h
@ -25,6 +26,7 @@ Setup variable declaration macros.
# define _INIT_N(x) UNPACK x
#endif
_DECL BleFingerprintCollection fingerprints;
_DECL char buffer[2048];
_DECL String room, id, statusTopic, teleTopic, roomsTopic, setTopic, configTopic;
_DECL AsyncMqttClient mqttClient;

View File

@ -158,7 +158,7 @@ void setupNetwork()
if (getUptimeSeconds() > 600)
ESP.restart();
};
AsyncWiFiSettings.onHttpSetup = HttpServer::Init;
#ifdef VERSION
AsyncWiFiSettings.info("ESPresense Version: " + String(VERSION));
@ -413,7 +413,8 @@ void connectToMqtt()
bool reportDevice(BleFingerprint *f)
{
doc.clear();
if (!f->report(&doc))
JsonObject obj = doc.to<JsonObject>();
if (!f->report(&obj))
return false;
serializeJson(doc, buffer);

View File

@ -24,6 +24,7 @@
#include <rom/rtc.h>
#include "Network.h"
#include "Enrollment.h"
#include "HttpServer.h"
#include "MotionSensors.h"
#include "I2C.h"
@ -55,8 +56,6 @@ uint16_t mqttPort;
bool autoUpdate, arduinoOta, prerelease;
bool discovery, activeScan, publishTele, publishRooms, publishDevices;
BleFingerprintCollection fingerprints;
bool updateInProgress() {
return updateStartedMillis > 0 && millis() - updateStartedMillis < 60000;
}

42
src/ui_bundle_css.h Normal file
View File

@ -0,0 +1,42 @@
/*
* Binary array for the Web UI.
* gzip is used for smaller size and improved speeds.
*
* Please see https://kno.wled.ge/advanced/custom-features/#changing-web-ui
* to find out how to easily modify the web UI source!
*/
// Autogenerated do not edit!!
const uint16_t BUNDLE_CSS_L = 355;
const uint8_t BUNDLE_CSS[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x95, 0x51, 0x5f, 0x4b, 0xc3, 0x30,
0x10, 0x7f, 0xdf, 0xa7, 0x08, 0x88, 0xa0, 0xb0, 0x8c, 0x76, 0x6c, 0x4e, 0xb2, 0x27, 0xf1, 0x45,
0xc1, 0x37, 0x3f, 0x41, 0x9a, 0x5c, 0xdb, 0xb3, 0x69, 0x52, 0x92, 0xdb, 0x9f, 0x6e, 0xf4, 0xbb,
0x9b, 0x54, 0xa7, 0x4e, 0x41, 0x91, 0x42, 0x4a, 0xee, 0x7e, 0xff, 0xee, 0x22, 0xbc, 0x73, 0xc4,
0x8e, 0x13, 0xc6, 0x94, 0x33, 0xce, 0xf3, 0xa0, 0x6a, 0x68, 0x41, 0x30, 0x83, 0x55, 0x4d, 0x4c,
0x4b, 0xdf, 0xac, 0x63, 0xaf, 0x74, 0x96, 0x78, 0x29, 0x5b, 0x34, 0xbd, 0x60, 0x8f, 0x96, 0xc0,
0x4f, 0xd9, 0xdd, 0x16, 0x2c, 0xc6, 0xff, 0x03, 0x98, 0x2d, 0x10, 0x2a, 0x19, 0x4b, 0x1e, 0xa5,
0x99, 0xb2, 0x20, 0x6d, 0xe0, 0x01, 0x3c, 0x96, 0x1f, 0xdc, 0x80, 0x87, 0x28, 0x9a, 0xdf, 0x74,
0xfb, 0x54, 0x32, 0x68, 0x81, 0xd7, 0x90, 0x2c, 0x04, 0x9b, 0x2f, 0x52, 0xf1, 0x14, 0x40, 0x30,
0x5f, 0x15, 0xf2, 0x6a, 0xbe, 0x5c, 0x4e, 0xd9, 0xe7, 0x91, 0xcd, 0x6e, 0x57, 0xd7, 0x89, 0x59,
0x48, 0xd5, 0x54, 0xde, 0x6d, 0xac, 0xe6, 0xef, 0xf0, 0x8b, 0xf9, 0x22, 0x7d, 0xa3, 0xc2, 0x9b,
0x55, 0x6f, 0xa9, 0x86, 0x80, 0x41, 0x30, 0xeb, 0x2c, 0x24, 0x16, 0xc1, 0x9e, 0xb8, 0x07, 0xab,
0x63, 0x26, 0x5b, 0x09, 0xe6, 0x3a, 0xc2, 0x36, 0x26, 0x7a, 0x82, 0x0a, 0x0b, 0x34, 0x48, 0x7d,
0x42, 0xf1, 0x1d, 0x14, 0x0d, 0xc6, 0x39, 0x47, 0x95, 0x36, 0xee, 0xa5, 0x1e, 0xd1, 0xd2, 0x52,
0x1c, 0x0b, 0x65, 0x00, 0x3d, 0xc2, 0x5a, 0x77, 0xe0, 0x2e, 0xec, 0x7f, 0xe0, 0x2a, 0x2f, 0xfb,
0xa0, 0xa4, 0x81, 0xaf, 0x62, 0xa3, 0x75, 0x9a, 0x9e, 0x4b, 0xfd, 0xb2, 0x09, 0x71, 0xde, 0x3c,
0xcb, 0x2e, 0xd7, 0x93, 0x61, 0xd2, 0x4a, 0xb4, 0xb3, 0xb0, 0x05, 0x43, 0x71, 0x17, 0x55, 0xe6,
0xca, 0xd5, 0xb1, 0x93, 0x5a, 0x27, 0xa9, 0xdc, 0x43, 0x3b, 0xd4, 0xf9, 0xb7, 0xee, 0x28, 0x15,
0x83, 0x54, 0x56, 0x28, 0x48, 0x6f, 0x30, 0x90, 0x2c, 0x0c, 0x9c, 0x50, 0x3a, 0xc8, 0x72, 0x45,
0xe7, 0xb7, 0xe3, 0x0e, 0x35, 0xd5, 0x22, 0x59, 0x0e, 0x33, 0x0c, 0xcf, 0xce, 0xff, 0x4d, 0x51,
0x1b, 0x1f, 0xe2, 0x62, 0x3b, 0x87, 0xa3, 0x47, 0xa4, 0xdd, 0x1b, 0x54, 0xcd, 0x7f, 0x79, 0xe4,
0xcf, 0xfb, 0x8c, 0x6a, 0x16, 0xc0, 0x80, 0xfa, 0x25, 0xe2, 0x2b, 0xa1, 0xd5, 0x04, 0xcd, 0x8d,
0x02, 0x00, 0x00
};
void serveBundleCss(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/css", BUNDLE_CSS, BUNDLE_CSS_L);
response->addHeader(F("Content-Encoding"), "gzip");
request->send(response);
}

35
src/ui_index_html.h Normal file
View File

@ -0,0 +1,35 @@
/*
* Binary array for the Web UI.
* gzip is used for smaller size and improved speeds.
*
* Please see https://kno.wled.ge/advanced/custom-features/#changing-web-ui
* to find out how to easily modify the web UI source!
*/
// Autogenerated do not edit!!
const uint16_t INDEX_HTML_L = 247;
const uint8_t INDEX_HTML[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x4d, 0x50, 0x3d, 0x53, 0xc3, 0x30,
0x0c, 0xdd, 0xfb, 0x2b, 0x84, 0x66, 0xd2, 0xc0, 0xc6, 0x71, 0x76, 0x16, 0x5a, 0x56, 0x7a, 0x47,
0x19, 0x18, 0x5d, 0x5b, 0x60, 0x81, 0xe3, 0xe4, 0x6c, 0x91, 0x36, 0xff, 0x1e, 0x3b, 0x81, 0x83,
0x49, 0x1f, 0xef, 0xe9, 0x3d, 0x49, 0xea, 0x6a, 0xf7, 0xf4, 0x70, 0x7c, 0x3d, 0xec, 0xc1, 0x4b,
0x1f, 0xba, 0x8d, 0xaa, 0x01, 0x82, 0x89, 0xef, 0x1a, 0x29, 0x62, 0xb7, 0x01, 0x50, 0x9e, 0x8c,
0xab, 0x49, 0x49, 0x7b, 0x12, 0x03, 0xd6, 0x9b, 0x94, 0x49, 0x34, 0xbe, 0x1c, 0x1f, 0x9b, 0x3b,
0x84, 0xf6, 0x3f, 0x18, 0x4d, 0x4f, 0x1a, 0x27, 0xa6, 0xf3, 0x38, 0x24, 0x41, 0xb0, 0x43, 0x14,
0x8a, 0x85, 0x7c, 0x66, 0x27, 0x5e, 0x3b, 0x9a, 0xd8, 0x52, 0xb3, 0x14, 0xd7, 0xc0, 0x91, 0x85,
0x4d, 0x68, 0xb2, 0x35, 0x81, 0xf4, 0xed, 0xf6, 0xe6, 0x4f, 0x4c, 0x58, 0x02, 0x75, 0xfb, 0xe7,
0x43, 0xa2, 0x4c, 0x31, 0xd3, 0x3d, 0xec, 0x96, 0xd1, 0xac, 0xda, 0x15, 0xaa, 0x9b, 0x05, 0x8e,
0x9f, 0x90, 0x28, 0x68, 0xcc, 0x32, 0x07, 0xca, 0x9e, 0xa8, 0x58, 0xca, 0x3c, 0x96, 0x15, 0x84,
0x2e, 0xd2, 0xda, 0x9c, 0x11, 0x7c, 0xa2, 0x37, 0x8d, 0xa7, 0xaf, 0xe8, 0x02, 0x6d, 0x6b, 0xa7,
0x9c, 0xd9, 0xfe, 0x1e, 0xa5, 0x4e, 0x83, 0x9b, 0x7f, 0x3c, 0x1d, 0x4f, 0xc0, 0x4e, 0xa3, 0x19,
0x47, 0xec, 0x54, 0x5b, 0xca, 0x85, 0x91, 0x6d, 0xe2, 0x51, 0x00, 0x72, 0xb2, 0x1a, 0x39, 0x3a,
0xba, 0x6c, 0x3f, 0x72, 0x25, 0xac, 0x40, 0x55, 0x5b, 0x45, 0x8a, 0xea, 0xf2, 0xc4, 0x6f, 0xaf,
0xf4, 0x09, 0x10, 0x55, 0x01, 0x00, 0x00
};
void serveIndexHtml(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", INDEX_HTML, INDEX_HTML_L);
response->addHeader(F("Content-Encoding"), "gzip");
request->send(response);
}

902
src/ui_index_js.h Normal file
View File

@ -0,0 +1,902 @@
/*
* Binary array for the Web UI.
* gzip is used for smaller size and improved speeds.
*
* Please see https://kno.wled.ge/advanced/custom-features/#changing-web-ui
* to find out how to easily modify the web UI source!
*/
// Autogenerated do not edit!!
const uint16_t INDEX_JS_L = 14125;
const uint8_t INDEX_JS[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xed, 0x7d, 0x6b, 0x73, 0xdb, 0x46,
0xb6, 0xe0, 0x67, 0xe5, 0x57, 0xc0, 0xba, 0xba, 0x31, 0xe8, 0xc0, 0x10, 0x41, 0xea, 0x49, 0x45,
0xf1, 0xc4, 0x8e, 0xa7, 0x26, 0xb5, 0x93, 0x78, 0x6a, 0x9c, 0x9b, 0xdd, 0x2a, 0x95, 0x8a, 0xa1,
0x48, 0x50, 0xc4, 0x98, 0x22, 0x38, 0x00, 0x28, 0x45, 0xd7, 0xd1, 0xdf, 0xd8, 0x1f, 0xb2, 0x9f,
0xf7, 0xd7, 0xec, 0x2f, 0xd9, 0x73, 0xfa, 0xfd, 0x04, 0x40, 0x8a, 0xb2, 0x33, 0xf7, 0x26, 0x55,
0x49, 0xc4, 0x7e, 0x9c, 0xee, 0x3e, 0x7d, 0xfa, 0xbc, 0xbb, 0x71, 0x3b, 0x2a, 0x82, 0xd1, 0x72,
0x19, 0x9c, 0x07, 0xe1, 0x74, 0xb5, 0x18, 0x57, 0x59, 0xbe, 0x08, 0xc2, 0x4e, 0xf0, 0xf1, 0x8b,
0x00, 0xfe, 0x79, 0xbe, 0x2a, 0xd3, 0xa0, 0xac, 0x8a, 0x6c, 0x5c, 0x3d, 0x3f, 0xfb, 0x82, 0x14,
0x89, 0x46, 0x8b, 0x3c, 0x5f, 0x62, 0xc3, 0xe0, 0x41, 0x2f, 0x1f, 0x95, 0x65, 0x76, 0xbd, 0x08,
0xab, 0x51, 0x11, 0x05, 0x65, 0x31, 0xe6, 0xa0, 0xf0, 0x9f, 0xfd, 0xfd, 0xe0, 0x4f, 0x55, 0xf9,
0x12, 0xaa, 0xf3, 0x22, 0x15, 0xa5, 0xd3, 0xbc, 0x08, 0xc2, 0x71, 0xbe, 0x28, 0xab, 0xe0, 0x43,
0x90, 0x2d, 0x48, 0x27, 0x51, 0x89, 0xff, 0x00, 0xa8, 0x8b, 0x0f, 0x97, 0x30, 0x43, 0xa8, 0x81,
0x3f, 0xce, 0x44, 0x65, 0x91, 0x56, 0xab, 0x62, 0x81, 0xf5, 0xb4, 0xcc, 0x98, 0x49, 0xb1, 0x5a,
0x84, 0xd3, 0x85, 0x3a, 0x01, 0xd6, 0x61, 0xba, 0x08, 0x3b, 0xce, 0x1e, 0x57, 0xf3, 0xd1, 0xe2,
0xc3, 0x30, 0xbf, 0xfa, 0x47, 0x3a, 0xae, 0x42, 0x47, 0xc7, 0x77, 0xa4, 0x26, 0x1e, 0x17, 0xe9,
0xa8, 0x4a, 0xc3, 0xc5, 0x6a, 0x3e, 0xef, 0xf8, 0x46, 0x1e, 0x8e, 0xe6, 0x73, 0x18, 0xbd, 0x54,
0xa1, 0xc0, 0xcf, 0x18, 0x56, 0xfb, 0x76, 0x34, 0x9e, 0x85, 0xd0, 0xc4, 0xdd, 0x37, 0x2b, 0x87,
0xfc, 0xef, 0xb0, 0x9a, 0x65, 0x8b, 0x6b, 0xc7, 0x3c, 0xaa, 0xfb, 0x65, 0x9a, 0x4f, 0x03, 0x52,
0x1d, 0x9c, 0x9f, 0x9f, 0x07, 0xcf, 0x79, 0x97, 0xe7, 0x4e, 0x98, 0xe5, 0x68, 0x9a, 0x0e, 0x17,
0x79, 0x35, 0x4c, 0xff, 0xb9, 0x1a, 0xcd, 0xc3, 0x51, 0x14, 0x5c, 0x39, 0xa0, 0x8e, 0x82, 0x67,
0xe7, 0xf0, 0x9f, 0x57, 0xc1, 0x15, 0xc0, 0x84, 0xff, 0x0c, 0x48, 0x09, 0xfe, 0xf5, 0xdb, 0x6f,
0x41, 0x18, 0x8e, 0x82, 0x2f, 0xbf, 0xe4, 0x23, 0x8f, 0xe8, 0xa8, 0x14, 0x53, 0xcf, 0x3b, 0xd8,
0x40, 0xaf, 0x11, 0xf3, 0xf1, 0x2e, 0x32, 0xbd, 0x59, 0x56, 0xf7, 0x21, 0x40, 0xf0, 0xe3, 0xf9,
0x43, 0x7a, 0x5f, 0x92, 0x16, 0xf1, 0x3c, 0x5d, 0x5c, 0x57, 0x33, 0x02, 0xba, 0xeb, 0x5e, 0xe1,
0xea, 0xaa, 0x1c, 0x17, 0xd9, 0x55, 0x1a, 0x96, 0x15, 0x10, 0x57, 0x14, 0xc4, 0x71, 0x3c, 0x86,
0x2d, 0xb8, 0x1a, 0x8d, 0x3f, 0x68, 0x7b, 0x90, 0x4d, 0x03, 0xda, 0x04, 0xd7, 0x48, 0x76, 0x50,
0xa9, 0x54, 0xa6, 0x80, 0xe4, 0x2d, 0x29, 0xed, 0x41, 0xfc, 0x45, 0x09, 0x75, 0xb5, 0x80, 0x01,
0x91, 0x22, 0x11, 0x52, 0x2c, 0x07, 0xd7, 0x46, 0xb5, 0x08, 0x95, 0xf4, 0x8a, 0xc9, 0x7f, 0x69,
0x7b, 0xc0, 0x35, 0x90, 0xd9, 0xf9, 0x37, 0x76, 0x0d, 0x14, 0x0f, 0x68, 0xa9, 0x73, 0xb9, 0xe3,
0xfc, 0x66, 0x99, 0x2f, 0xd2, 0x45, 0x35, 0x94, 0x3d, 0x44, 0x59, 0x14, 0x30, 0x1c, 0xf0, 0xa9,
0xa8, 0x4b, 0x14, 0xad, 0xe2, 0xbd, 0xbd, 0x38, 0x5f, 0x0c, 0x27, 0x29, 0x9c, 0xef, 0xfc, 0x3e,
0x5e, 0xae, 0xca, 0x59, 0x68, 0x61, 0x51, 0x40, 0x70, 0x6f, 0x23, 0x3d, 0x08, 0xc3, 0x72, 0x9e,
0x57, 0xe1, 0x24, 0x9d, 0x66, 0x8b, 0x0c, 0x8b, 0xa1, 0x5b, 0xf5, 0x6b, 0x14, 0xec, 0xed, 0x95,
0xe3, 0x7c, 0x09, 0x40, 0xf4, 0x33, 0x88, 0x1b, 0x20, 0xdb, 0x9a, 0xd8, 0xa7, 0xe8, 0x45, 0x80,
0x43, 0x00, 0x02, 0x18, 0xbe, 0x4e, 0xab, 0x21, 0xfd, 0x99, 0x2f, 0xaa, 0xf4, 0xd7, 0x86, 0x71,
0xce, 0x5c, 0x5b, 0x29, 0x7b, 0x5c, 0x74, 0x2f, 0x43, 0x0e, 0xbb, 0x63, 0xee, 0xae, 0xb1, 0xb6,
0xf5, 0x06, 0xb6, 0x69, 0x58, 0x19, 0x35, 0xb9, 0xc4, 0xa3, 0x33, 0x5d, 0x68, 0x93, 0x7b, 0xc5,
0x39, 0x25, 0x03, 0x13, 0x03, 0xcc, 0xb8, 0x9c, 0x67, 0x63, 0xd8, 0xfb, 0x48, 0xef, 0x0d, 0x7c,
0x24, 0xc4, 0x19, 0x77, 0x74, 0xbe, 0x38, 0x08, 0x94, 0xae, 0x67, 0xf5, 0x6b, 0x98, 0x8d, 0x16,
0xd7, 0x69, 0xa9, 0xad, 0x41, 0x4c, 0x7f, 0x92, 0x15, 0xd5, 0x7d, 0xfd, 0x36, 0x5d, 0xf4, 0xd8,
0x12, 0xdc, 0xfb, 0x35, 0x4f, 0xab, 0x12, 0xf6, 0x4a, 0x6b, 0x8f, 0x93, 0x26, 0x90, 0x3b, 0xc6,
0xae, 0x20, 0x64, 0x3e, 0x71, 0xd2, 0x80, 0x1c, 0xeb, 0xd5, 0x82, 0xf4, 0x4e, 0x27, 0xe6, 0x08,
0x0a, 0x4a, 0x71, 0x18, 0x1d, 0xd6, 0x83, 0x05, 0x99, 0xb1, 0x21, 0x3a, 0x23, 0x8d, 0x47, 0xd9,
0x60, 0xe9, 0xe4, 0x6f, 0xd2, 0xe2, 0x3a, 0x9d, 0xc0, 0xf4, 0x2f, 0x2e, 0xcf, 0x3c, 0x4d, 0x80,
0xfd, 0x40, 0xfd, 0x0f, 0xa3, 0x6a, 0x16, 0xdf, 0x8c, 0x7e, 0xd5, 0x67, 0xcf, 0x78, 0x53, 0x44,
0x86, 0x64, 0x3f, 0x3a, 0x36, 0x20, 0x22, 0xe5, 0xa0, 0x49, 0x90, 0x05, 0xc8, 0xc3, 0xe0, 0x7f,
0x5f, 0x23, 0x58, 0xfc, 0xe3, 0xab, 0xf3, 0x20, 0x71, 0x4d, 0x0f, 0xff, 0xa1, 0x93, 0xbb, 0xc8,
0x50, 0xfc, 0x69, 0xc3, 0x62, 0xd1, 0x6f, 0x64, 0x4c, 0xf8, 0xcb, 0x1e, 0xee, 0xc1, 0x87, 0x43,
0x0a, 0xb0, 0x0e, 0x8b, 0xac, 0xa1, 0xbe, 0x45, 0xbf, 0x19, 0xc8, 0x7f, 0xf8, 0xa2, 0xae, 0xb9,
0x93, 0x18, 0x57, 0xcb, 0x09, 0x67, 0x16, 0xc3, 0xab, 0x51, 0x99, 0x92, 0x93, 0x18, 0xd1, 0xb3,
0xee, 0x3f, 0x5b, 0x2a, 0xf9, 0x46, 0xd6, 0xa1, 0x1c, 0xda, 0x44, 0xab, 0x76, 0xa8, 0xe3, 0x2e,
0x14, 0x80, 0x8b, 0xc3, 0x34, 0xcc, 0xc8, 0x35, 0x07, 0x1d, 0x9f, 0x58, 0x1b, 0x2f, 0x43, 0xb5,
0x91, 0xbe, 0x90, 0x36, 0xbc, 0x07, 0x38, 0xef, 0x90, 0x20, 0x73, 0x38, 0x2d, 0xf2, 0x9b, 0x21,
0x19, 0x9c, 0x53, 0x9e, 0xb9, 0x66, 0x95, 0x85, 0x30, 0x51, 0xf9, 0x4d, 0xd0, 0xef, 0xb9, 0x97,
0xcf, 0xce, 0x9c, 0x45, 0xee, 0x82, 0xd4, 0x89, 0xa4, 0x0d, 0x1c, 0x30, 0xf7, 0x01, 0xa6, 0xde,
0xc7, 0x43, 0xd5, 0xd0, 0x18, 0xfe, 0xfe, 0xea, 0x2b, 0x17, 0x55, 0x0b, 0xea, 0x3d, 0x0f, 0x5e,
0x26, 0x2d, 0xe8, 0x50, 0x21, 0x28, 0x27, 0xe1, 0x71, 0x20, 0x06, 0x0a, 0x51, 0xb4, 0x0f, 0xab,
0x9c, 0xa9, 0x19, 0xb7, 0xa3, 0xf9, 0x2a, 0x75, 0x30, 0x69, 0x52, 0xce, 0x35, 0x01, 0x60, 0xc9,
0xcf, 0x9f, 0x03, 0x57, 0x25, 0x85, 0x4e, 0xa0, 0xa0, 0x28, 0xa7, 0x8b, 0x09, 0xea, 0xb6, 0xb0,
0x43, 0x11, 0xe8, 0x08, 0x13, 0x0d, 0x28, 0x2d, 0x8f, 0x69, 0xab, 0x37, 0xb3, 0x6c, 0x3e, 0x09,
0x49, 0x13, 0xb7, 0x0a, 0xb4, 0x28, 0xd3, 0xa2, 0xd2, 0x60, 0x45, 0xc1, 0x68, 0x31, 0x9e, 0xe5,
0x85, 0x03, 0x26, 0x6d, 0xfd, 0x3a, 0x05, 0x84, 0xa7, 0xa1, 0xda, 0x16, 0x55, 0x2f, 0xbf, 0x22,
0x3a, 0x49, 0x2b, 0x54, 0x36, 0xcd, 0x89, 0xe2, 0xef, 0x78, 0x39, 0x2a, 0x40, 0x0d, 0xf8, 0x11,
0xff, 0x2c, 0xd2, 0x9b, 0xfc, 0x36, 0x6d, 0x9a, 0x31, 0x53, 0x15, 0x86, 0x29, 0x82, 0xcc, 0xaa,
0xb4, 0x18, 0x61, 0x71, 0x19, 0xb1, 0x51, 0x0c, 0x55, 0xd5, 0x45, 0x1a, 0xb2, 0x53, 0x2c, 0xa8,
0xc4, 0xc9, 0xfe, 0x90, 0xa8, 0x65, 0x63, 0xa0, 0x96, 0x8e, 0x45, 0x47, 0x5a, 0x75, 0x3c, 0x09,
0xe5, 0x24, 0x1a, 0x0e, 0x57, 0x3a, 0x4f, 0x6f, 0x60, 0xe1, 0xe1, 0x62, 0x74, 0xe3, 0x22, 0x89,
0x49, 0x3e, 0x5e, 0x61, 0x3d, 0xd3, 0xf2, 0xdf, 0xaa, 0xad, 0xdd, 0xaa, 0xe7, 0xed, 0xf5, 0x70,
0x23, 0x98, 0x3f, 0xbe, 0x0f, 0x9f, 0xcf, 0xaa, 0x6a, 0x39, 0xd8, 0xdf, 0xbf, 0xbb, 0xbb, 0x8b,
0xef, 0xfa, 0x71, 0x5e, 0x5c, 0xef, 0xf7, 0xba, 0xdd, 0xee, 0x3e, 0xc0, 0x7c, 0x0e, 0x34, 0xe1,
0x1d, 0x93, 0x2a, 0x24, 0xa3, 0x6a, 0xd4, 0x3c, 0xd8, 0x4f, 0xd0, 0x14, 0x37, 0x99, 0x36, 0x77,
0xaf, 0x60, 0x39, 0x42, 0xad, 0xc3, 0x61, 0x67, 0xe0, 0x30, 0xcf, 0x03, 0x8f, 0x12, 0x4f, 0x8f,
0x96, 0xb7, 0x9b, 0xa7, 0xd7, 0x3c, 0x2b, 0xab, 0x74, 0xc1, 0x68, 0x38, 0xbd, 0x25, 0xfa, 0x2a,
0x70, 0xc5, 0xc9, 0x3c, 0x05, 0x83, 0x31, 0x5f, 0x92, 0x1d, 0xb5, 0x68, 0x75, 0x34, 0x99, 0xbc,
0xc5, 0xa6, 0x7f, 0x25, 0x9d, 0xd3, 0x22, 0xf4, 0x75, 0xb4, 0x74, 0x6e, 0xaa, 0x5f, 0x2f, 0x24,
0x95, 0xaf, 0x03, 0xc7, 0x3c, 0xfe, 0x55, 0x55, 0xf0, 0xc3, 0x07, 0x7f, 0x66, 0x57, 0xab, 0x0a,
0xfe, 0xb4, 0x78, 0x0b, 0x12, 0xaf, 0xc6, 0x58, 0x74, 0xe2, 0x55, 0xe6, 0xf2, 0x2d, 0x87, 0x12,
0x0a, 0x78, 0xca, 0x0a, 0xd2, 0x39, 0x58, 0xdf, 0x08, 0x8c, 0xf4, 0x00, 0x2e, 0xe0, 0x6a, 0x4e,
0x2c, 0x34, 0x3a, 0x05, 0x7b, 0x94, 0xd2, 0xd9, 0x87, 0x4f, 0xd9, 0xad, 0xd2, 0x23, 0x13, 0x00,
0xc6, 0x10, 0x32, 0x92, 0x76, 0x6c, 0xef, 0xb7, 0x45, 0x31, 0xba, 0x8f, 0x51, 0x2a, 0xf1, 0x46,
0x31, 0xe9, 0x85, 0x54, 0xe6, 0xc1, 0x1c, 0x4c, 0x64, 0x88, 0xf4, 0x17, 0x52, 0x59, 0x68, 0x52,
0x2e, 0xfe, 0x06, 0x2e, 0x01, 0xdc, 0xf7, 0x2b, 0xf2, 0xf7, 0x99, 0x86, 0x4b, 0xec, 0x13, 0xdf,
0xcd, 0xf2, 0x39, 0xa1, 0x65, 0xb2, 0x60, 0x02, 0x40, 0x77, 0x12, 0x60, 0x23, 0x06, 0x47, 0x82,
0x70, 0x4c, 0x23, 0x5b, 0x2c, 0x57, 0xd5, 0x90, 0x60, 0x20, 0x24, 0x7f, 0xbb, 0x76, 0x10, 0xcb,
0x63, 0xb6, 0x87, 0xeb, 0x0a, 0x89, 0x12, 0x90, 0x32, 0xae, 0x86, 0x94, 0x92, 0x42, 0xfa, 0xcb,
0x31, 0x86, 0x8b, 0x3f, 0xd2, 0xc6, 0x31, 0x23, 0xc2, 0x06, 0x1e, 0x49, 0xe5, 0x35, 0x6d, 0x8b,
0xa6, 0xa8, 0xd6, 0xd7, 0x52, 0x0a, 0x11, 0x91, 0xb4, 0x2e, 0x1e, 0x0e, 0xf9, 0x8a, 0xce, 0xed,
0x69, 0xf1, 0x7f, 0x58, 0x5b, 0x0a, 0x95, 0xa8, 0xc7, 0x55, 0xc1, 0x17, 0x6c, 0x4b, 0x69, 0x9f,
0x1c, 0x97, 0x7f, 0xb1, 0xe9, 0x71, 0x78, 0xdf, 0x83, 0xba, 0xff, 0x2b, 0x55, 0x01, 0xd0, 0x2d,
0xb4, 0xc8, 0xf9, 0x42, 0xca, 0x59, 0xbe, 0x9a, 0x4f, 0x02, 0xb0, 0x8d, 0x79, 0xd3, 0x1a, 0x1c,
0xd3, 0x5d, 0xa4, 0x3f, 0x74, 0x23, 0x97, 0xe8, 0x79, 0x0c, 0xc0, 0xd0, 0xc4, 0xd1, 0x3f, 0x57,
0x69, 0x71, 0xff, 0x9e, 0xfc, 0x9d, 0x17, 0xe1, 0xf3, 0xc1, 0x78, 0x96, 0x8e, 0x3f, 0xa4, 0x13,
0xea, 0xc7, 0x30, 0xf0, 0xd8, 0xb5, 0xfd, 0x4d, 0x26, 0x5c, 0x30, 0x8c, 0x8c, 0x22, 0x8e, 0x62,
0xf7, 0x09, 0x5b, 0x81, 0x71, 0x7d, 0x33, 0x24, 0x9c, 0x87, 0x98, 0x2b, 0x54, 0x80, 0x66, 0xf3,
0x28, 0xf8, 0x18, 0x5c, 0xad, 0xae, 0xae, 0xe6, 0x29, 0x1a, 0x53, 0xd3, 0x11, 0x1c, 0x7f, 0xb4,
0xc0, 0x17, 0xe3, 0x74, 0x3e, 0x82, 0x42, 0x5e, 0x16, 0x3c, 0xc0, 0x5f, 0x1f, 0x1f, 0xec, 0xf5,
0x62, 0x0b, 0x53, 0xd2, 0x90, 0x41, 0x9e, 0xbf, 0x21, 0x43, 0x92, 0x1f, 0xcf, 0x55, 0x06, 0x13,
0xa3, 0x8a, 0xab, 0x54, 0xb2, 0xe9, 0xb0, 0x49, 0xa8, 0x83, 0xf3, 0x39, 0xda, 0x0c, 0x56, 0x5b,
0xe4, 0x78, 0x0e, 0x46, 0x6d, 0xf0, 0x97, 0xea, 0x66, 0xfe, 0xd3, 0xe8, 0xda, 0x9c, 0x60, 0xb1,
0x22, 0xf8, 0xce, 0xca, 0x21, 0x88, 0x37, 0xbe, 0x1a, 0x93, 0xf6, 0xaa, 0x59, 0x56, 0xc6, 0x7a,
0x93, 0xb3, 0x9a, 0x06, 0xf4, 0x0f, 0x47, 0x0b, 0x44, 0x06, 0xf9, 0x03, 0xf7, 0x1d, 0x0f, 0xae,
0xd3, 0x99, 0x13, 0xce, 0x60, 0xaa, 0xce, 0x29, 0xcc, 0x68, 0x95, 0xab, 0xd7, 0x0d, 0xa9, 0x8a,
0x02, 0xae, 0xba, 0x31, 0x45, 0xcc, 0xed, 0x4e, 0xc2, 0x73, 0xf7, 0x8c, 0xce, 0xc8, 0x75, 0xcc,
0x08, 0x7f, 0x93, 0x2b, 0xea, 0x38, 0x8d, 0x40, 0xb1, 0x20, 0x55, 0xd5, 0x60, 0x8a, 0x21, 0xf2,
0xf9, 0x1f, 0xa5, 0x9e, 0xa0, 0xfe, 0x83, 0xf2, 0xa3, 0x1e, 0x5e, 0x7b, 0x58, 0xa4, 0x0b, 0x5a,
0x4b, 0xb4, 0xa9, 0xa7, 0xc1, 0xd8, 0x44, 0x9a, 0xad, 0xd5, 0xd3, 0xc5, 0x86, 0x4c, 0xd1, 0x75,
0xa1, 0x77, 0xe6, 0xdf, 0x14, 0x24, 0x58, 0x90, 0xda, 0x7f, 0xf9, 0xe9, 0x87, 0xbf, 0xc2, 0x54,
0xb0, 0x99, 0x63, 0xe7, 0x71, 0xc3, 0x15, 0x11, 0xc5, 0x3a, 0x5a, 0x12, 0x4a, 0x1f, 0x54, 0xcc,
0xc8, 0x18, 0xd6, 0xc5, 0xa5, 0xe9, 0x28, 0x0d, 0xdc, 0x99, 0x8a, 0x11, 0xaa, 0xe2, 0x13, 0xdc,
0x45, 0xac, 0x1f, 0x70, 0x66, 0xa1, 0xe7, 0x37, 0xb3, 0xcd, 0xa5, 0x1f, 0x19, 0x93, 0xb0, 0x73,
0xd6, 0x82, 0x6e, 0x15, 0xa4, 0x93, 0xff, 0x8d, 0x9c, 0xeb, 0x9f, 0x84, 0xce, 0x31, 0x16, 0xc2,
0x5f, 0x4d, 0xd5, 0x6b, 0x87, 0x6e, 0x4d, 0xfe, 0x87, 0x18, 0x1a, 0xaf, 0x0a, 0x34, 0x28, 0x86,
0xc2, 0xc3, 0x78, 0x66, 0x0b, 0x5f, 0xab, 0x8d, 0xf4, 0x5a, 0x6a, 0xfc, 0xcc, 0x6c, 0x06, 0xc8,
0x37, 0xc0, 0x3a, 0x2c, 0x66, 0x1b, 0xb8, 0xa9, 0x95, 0x3d, 0xb3, 0x9a, 0x18, 0x4a, 0xc4, 0xac,
0xc8, 0xef, 0x82, 0x45, 0x7a, 0x17, 0xbc, 0x2d, 0x0a, 0x14, 0x0d, 0x7f, 0x16, 0x4c, 0x1b, 0xcc,
0x71, 0x90, 0x82, 0xf9, 0xaa, 0x2a, 0xb3, 0x49, 0x2a, 0x27, 0x13, 0x10, 0x27, 0xc1, 0x68, 0x9e,
0xfd, 0xe7, 0x48, 0x75, 0x77, 0x2b, 0xfc, 0xd1, 0x83, 0x16, 0xa7, 0x27, 0x95, 0x30, 0xe1, 0xef,
0x32, 0xd0, 0xc7, 0x2b, 0x90, 0x49, 0x45, 0x68, 0xf3, 0x78, 0x15, 0x23, 0x9e, 0x35, 0xdb, 0x2a,
0xb0, 0x29, 0x64, 0x6a, 0x64, 0x0a, 0xe8, 0xca, 0x2e, 0x2d, 0x43, 0x38, 0xb5, 0xd5, 0x8d, 0x40,
0x0f, 0xb2, 0xa8, 0xb8, 0xc0, 0x41, 0x1c, 0x3a, 0x87, 0xd3, 0x09, 0xaf, 0x04, 0x84, 0x7e, 0x7a,
0xf7, 0xdd, 0xbb, 0x00, 0x2c, 0x51, 0xc0, 0x7d, 0x0a, 0xff, 0x2d, 0xb3, 0x6a, 0x45, 0xad, 0xba,
0xe0, 0x8e, 0x14, 0x10, 0x31, 0x59, 0xc2, 0xa0, 0x4c, 0x2b, 0x98, 0x70, 0xec, 0x4c, 0x5c, 0xd0,
0x32, 0x8c, 0x62, 0xc0, 0xa1, 0xbb, 0x4d, 0x0b, 0x54, 0x9b, 0x17, 0x2f, 0xbf, 0x7b, 0xf7, 0x43,
0x27, 0x48, 0x17, 0xb7, 0x59, 0x91, 0x2f, 0x90, 0xd5, 0xbd, 0xf2, 0x78, 0xf8, 0xc8, 0x30, 0xb8,
0xb8, 0x3a, 0xe1, 0xac, 0xe0, 0xed, 0xc1, 0xc1, 0x23, 0xc5, 0x52, 0xb9, 0x1b, 0x57, 0x1c, 0x9e,
0xe9, 0xc2, 0x46, 0xac, 0x0c, 0x0a, 0x11, 0x24, 0xaa, 0xee, 0x7b, 0x32, 0xba, 0x63, 0x00, 0xd7,
0xa0, 0x6c, 0x8f, 0x9f, 0x91, 0x3e, 0xf1, 0x24, 0x9d, 0x8e, 0x56, 0xf3, 0xea, 0x6f, 0x05, 0xf9,
0xd9, 0xca, 0xcf, 0xa7, 0xab, 0x75, 0x0f, 0x67, 0xea, 0xb1, 0x56, 0x1c, 0x46, 0x92, 0xc2, 0x4a,
0xc5, 0x77, 0x44, 0x1b, 0x5c, 0x65, 0x8b, 0x09, 0x18, 0xde, 0x43, 0x95, 0x4a, 0xf4, 0x16, 0x40,
0xa3, 0x93, 0xb4, 0xa8, 0x69, 0x30, 0x9d, 0xaf, 0xca, 0x59, 0x2d, 0x80, 0x32, 0x9f, 0xdf, 0x82,
0x82, 0xb5, 0x04, 0x9e, 0x9e, 0x95, 0x48, 0xb8, 0x7f, 0xa3, 0x7f, 0xc5, 0xac, 0x8a, 0x13, 0x3e,
0xb2, 0x22, 0xee, 0x6a, 0x44, 0x32, 0x59, 0xcd, 0x89, 0xf6, 0xaa, 0x68, 0x12, 0x92, 0x23, 0xb1,
0xfa, 0x21, 0x6d, 0x6f, 0xb3, 0x0b, 0x13, 0x8e, 0x49, 0xc3, 0x8e, 0x71, 0x6c, 0x2d, 0xd9, 0x9c,
0x7a, 0x0c, 0x94, 0xbe, 0x08, 0xc9, 0x82, 0x9b, 0x5c, 0x15, 0x60, 0xf6, 0x0e, 0x0d, 0xd4, 0x59,
0x11, 0x4d, 0x1d, 0xb1, 0x34, 0x8e, 0x33, 0xd5, 0x63, 0x8b, 0x70, 0x30, 0xc8, 0x70, 0xb0, 0x40,
0x6c, 0x58, 0x2a, 0xc7, 0x19, 0x0e, 0x0c, 0x32, 0xfa, 0x20, 0x2f, 0x00, 0xcc, 0x80, 0xb7, 0x4e,
0xe2, 0xe0, 0x5b, 0x30, 0x75, 0xae, 0x88, 0xbb, 0xe9, 0x3f, 0xc8, 0x22, 0x65, 0x9f, 0x08, 0x3b,
0xd1, 0xf6, 0x01, 0xf5, 0x21, 0x95, 0xac, 0xa5, 0x30, 0x1e, 0x39, 0x9c, 0x1e, 0x83, 0x03, 0xf4,
0x31, 0x20, 0xc3, 0xe8, 0x40, 0x90, 0x4a, 0x0b, 0xd8, 0x4b, 0x06, 0x8c, 0xf7, 0xe6, 0xd0, 0x18,
0xf0, 0x98, 0x43, 0xeb, 0x53, 0x68, 0xa3, 0x69, 0x95, 0x16, 0x1b, 0x4c, 0x2a, 0x0e, 0xde, 0xfe,
0xaf, 0x37, 0x6f, 0xff, 0xf6, 0x13, 0x07, 0xc7, 0xa4, 0xbb, 0x02, 0xae, 0xe4, 0x6c, 0x7e, 0xb2,
0x2a, 0x30, 0xb2, 0x0a, 0x1b, 0xc5, 0xf9, 0x7b, 0x90, 0x2f, 0x7e, 0xc8, 0x57, 0x78, 0x38, 0xef,
0x66, 0xd9, 0x78, 0x46, 0x38, 0x16, 0x6b, 0x9c, 0x2d, 0x14, 0x88, 0x6b, 0x2e, 0xe9, 0x7d, 0x06,
0x1c, 0x45, 0xd9, 0x8e, 0x9b, 0xec, 0x7a, 0xc6, 0xc9, 0x57, 0xe1, 0xf5, 0xc4, 0x98, 0x28, 0xf9,
0xd8, 0x94, 0x17, 0x82, 0x31, 0x7f, 0x7d, 0x0d, 0x6c, 0x6e, 0xb4, 0xc8, 0x91, 0x75, 0x72, 0x88,
0x08, 0x2b, 0xa8, 0x72, 0xbe, 0xe1, 0x11, 0x59, 0xc4, 0x34, 0x9f, 0xcf, 0xf3, 0x3b, 0x5c, 0x52,
0x59, 0xa5, 0xcb, 0x32, 0xb8, 0x5e, 0x8d, 0x8a, 0x49, 0x30, 0xba, 0x1e, 0x65, 0x78, 0xb6, 0x70,
0x67, 0xd4, 0xad, 0xff, 0x8e, 0xae, 0x5e, 0xdd, 0x7d, 0xd4, 0x58, 0xee, 0xd9, 0xbc, 0x26, 0x81,
0xc2, 0x0a, 0xee, 0x32, 0x42, 0x27, 0x48, 0xa9, 0x50, 0x01, 0xe3, 0xc2, 0x70, 0x0a, 0x3a, 0x2c,
0xd6, 0x31, 0x42, 0xc5, 0x0c, 0x80, 0x4d, 0x68, 0xcf, 0xf1, 0x08, 0x33, 0x0c, 0x46, 0x80, 0x36,
0xa8, 0x2d, 0x46, 0x8b, 0xca, 0x9c, 0x7f, 0x1c, 0xbc, 0x4e, 0x49, 0x23, 0x05, 0x28, 0x59, 0x11,
0x56, 0x03, 0xea, 0xd1, 0x8a, 0x04, 0xba, 0xfa, 0x90, 0x2e, 0x2b, 0x21, 0x9c, 0x49, 0x3d, 0x3b,
0x42, 0x74, 0xfd, 0x06, 0x78, 0x32, 0xf4, 0x32, 0x1b, 0x7f, 0x50, 0x80, 0xae, 0x96, 0x4c, 0xe0,
0x60, 0xfb, 0x74, 0x54, 0xcc, 0x33, 0xc0, 0x2d, 0x69, 0x3d, 0x4f, 0xa7, 0x00, 0x7b, 0x3a, 0x25,
0xb3, 0xbe, 0xce, 0x89, 0x92, 0xb0, 0xba, 0x06, 0x12, 0x80, 0x3a, 0xea, 0x4b, 0x97, 0xeb, 0x8b,
0x83, 0x9f, 0xb4, 0xf5, 0xdb, 0x8a, 0x0c, 0x35, 0xbd, 0x61, 0xca, 0xe5, 0x08, 0x78, 0x02, 0x81,
0x09, 0x0c, 0x02, 0xa3, 0xad, 0x93, 0xa0, 0x44, 0xe0, 0xa3, 0xca, 0x37, 0x65, 0x05, 0x2e, 0xec,
0x39, 0x2c, 0x1e, 0x08, 0x77, 0x8a, 0x53, 0xbe, 0xcb, 0xaa, 0x19, 0xe9, 0xb4, 0x4b, 0xe9, 0x6b,
0x57, 0x3b, 0xee, 0xb1, 0x72, 0x1a, 0x1d, 0x27, 0x11, 0xa5, 0x1a, 0x82, 0xe3, 0xf4, 0x84, 0xda,
0x8f, 0xc6, 0x2d, 0xd4, 0xf3, 0xc7, 0x48, 0x43, 0x39, 0x33, 0xf5, 0x94, 0xf1, 0xe3, 0xbb, 0x9f,
0x82, 0x19, 0x2c, 0x14, 0x67, 0x97, 0x69, 0x67, 0x4d, 0x45, 0x12, 0x9b, 0x0a, 0x3f, 0x50, 0x28,
0xc1, 0x81, 0xeb, 0x03, 0x39, 0x65, 0x37, 0xe9, 0x19, 0x59, 0x58, 0x09, 0xd8, 0x50, 0xa4, 0x43,
0x89, 0x66, 0x97, 0xb6, 0xdd, 0x74, 0xc2, 0xea, 0xd1, 0x16, 0x04, 0x80, 0xc4, 0x0e, 0x78, 0x4c,
0xe1, 0x78, 0x93, 0x95, 0x5f, 0xa5, 0x30, 0xa3, 0x2c, 0x2f, 0xe2, 0x2f, 0x54, 0x57, 0x81, 0x06,
0xff, 0x9c, 0x60, 0xe1, 0x7d, 0x5a, 0xa9, 0x42, 0x85, 0x8c, 0x91, 0x4d, 0x7e, 0xa5, 0x86, 0x00,
0x8c, 0xf2, 0x5d, 0x1e, 0xbc, 0x00, 0xcc, 0xbd, 0x08, 0xd0, 0x95, 0x47, 0x61, 0xc3, 0x79, 0x32,
0xa6, 0x24, 0x26, 0xa2, 0x73, 0x76, 0x5e, 0x6b, 0xf9, 0x2c, 0x90, 0x2a, 0x74, 0xbd, 0xd7, 0xad,
0x3f, 0x92, 0xd3, 0x95, 0x1b, 0xf2, 0x08, 0x19, 0x7d, 0x56, 0x94, 0x15, 0x0d, 0xdc, 0xeb, 0xfc,
0x9b, 0x0f, 0x5d, 0x9a, 0x3d, 0x90, 0x04, 0x4d, 0x8e, 0xa3, 0x37, 0x02, 0xb6, 0x03, 0x2a, 0x4f,
0x28, 0x10, 0xf0, 0xb5, 0x75, 0xae, 0x79, 0xdc, 0xd3, 0x1b, 0x64, 0x55, 0x57, 0x64, 0x76, 0xbe,
0xe0, 0x80, 0x1d, 0x71, 0x4c, 0x5e, 0xf5, 0xd5, 0x57, 0x76, 0x5d, 0x93, 0x41, 0x61, 0xf7, 0x60,
0x72, 0x5e, 0xd5, 0x60, 0x6b, 0x8d, 0x55, 0xf7, 0x08, 0x4a, 0xb8, 0x45, 0x0b, 0x6a, 0xd9, 0xf8,
0x08, 0x44, 0xba, 0x8a, 0xb9, 0x1e, 0xbb, 0x86, 0x21, 0xd9, 0xd2, 0xa5, 0x38, 0x6a, 0xad, 0xc5,
0xd8, 0x2d, 0x97, 0x98, 0x91, 0x65, 0x5a, 0x85, 0xb0, 0xc3, 0xa8, 0x70, 0xc0, 0x79, 0x21, 0xa2,
0x46, 0x65, 0xc5, 0x29, 0x3f, 0xb7, 0x94, 0x5e, 0x2c, 0xc2, 0x50, 0x04, 0xad, 0xa0, 0x1e, 0xe4,
0x70, 0x40, 0xe8, 0x37, 0xc0, 0xc5, 0x25, 0x5f, 0x56, 0x3a, 0x61, 0x0a, 0x49, 0xfa, 0xcf, 0x15,
0xee, 0x34, 0x05, 0x5e, 0xc6, 0x71, 0xdc, 0x68, 0x52, 0x5b, 0x6a, 0x4c, 0xb3, 0x71, 0xad, 0x1b,
0x26, 0x00, 0xca, 0x84, 0xe1, 0x8c, 0x8b, 0x13, 0xb5, 0x4e, 0x3f, 0xed, 0xf1, 0x6c, 0x54, 0x86,
0x32, 0xd1, 0xc5, 0xa3, 0xa6, 0xc3, 0xd2, 0x60, 0x21, 0xc0, 0xa1, 0x75, 0xd9, 0x99, 0x2d, 0x48,
0x98, 0x38, 0x0d, 0xe6, 0x79, 0xbe, 0x2c, 0x9d, 0x3d, 0x8d, 0xd1, 0x40, 0x52, 0xca, 0xd1, 0xce,
0x9c, 0x3d, 0x84, 0xae, 0xd7, 0x69, 0x0a, 0xec, 0x9b, 0x1a, 0xbd, 0x13, 0x8b, 0x3a, 0xad, 0x3d,
0x70, 0x4a, 0xf3, 0x9d, 0x61, 0xd9, 0x54, 0x3d, 0xf7, 0x36, 0x41, 0x9a, 0x9e, 0x12, 0xa3, 0x95,
0x45, 0x8c, 0x72, 0xae, 0xf5, 0xea, 0xb9, 0x03, 0x67, 0xe3, 0x39, 0x48, 0x64, 0x15, 0x96, 0xfb,
0x60, 0x1a, 0xcc, 0xb3, 0x53, 0x93, 0x86, 0x10, 0xc2, 0xc9, 0xb7, 0x82, 0xe8, 0xf1, 0xb4, 0x18,
0x5d, 0xa3, 0x95, 0x48, 0x62, 0x0c, 0x2e, 0x6f, 0x1e, 0xb4, 0xe1, 0xb6, 0x82, 0xa1, 0xe4, 0xb3,
0x8c, 0x3f, 0x68, 0x40, 0xb9, 0x2e, 0xb3, 0x29, 0x3a, 0x67, 0x35, 0x11, 0x78, 0x68, 0x6c, 0x44,
0xb7, 0xd9, 0x18, 0x22, 0x44, 0xff, 0x32, 0xb9, 0xb4, 0x2a, 0xc5, 0x24, 0xbf, 0xfc, 0x52, 0xfd,
0x19, 0x2f, 0x71, 0x70, 0x92, 0xaa, 0x40, 0xd3, 0x6e, 0xac, 0x8e, 0xe4, 0x3c, 0xb3, 0x79, 0x09,
0xd3, 0xd4, 0x61, 0x62, 0x78, 0xac, 0x12, 0x16, 0x6f, 0x58, 0x55, 0x45, 0x4e, 0xd2, 0x0e, 0x5d,
0x32, 0x92, 0xd4, 0x96, 0x86, 0x99, 0x75, 0x0d, 0xfa, 0xd2, 0x72, 0x48, 0xab, 0x34, 0x91, 0x47,
0x8b, 0xd0, 0xf3, 0xa0, 0xe3, 0x72, 0x10, 0x74, 0x23, 0x1d, 0x6d, 0x03, 0x30, 0x07, 0xf5, 0xa2,
0xe5, 0x80, 0x77, 0x87, 0x93, 0x49, 0xd5, 0x1e, 0x3a, 0x90, 0x6d, 0xca, 0x1a, 0xf1, 0xad, 0x74,
0xfc, 0xc1, 0x35, 0x19, 0xc2, 0x19, 0x68, 0x79, 0x6c, 0xb9, 0x01, 0xf9, 0xf6, 0xb2, 0xfa, 0xb1,
0x93, 0xac, 0xc5, 0x72, 0x58, 0xab, 0xa5, 0x3b, 0x74, 0x0b, 0xca, 0x48, 0x49, 0x12, 0x4b, 0x86,
0xd9, 0x22, 0xbc, 0x9a, 0xe7, 0xe3, 0x0f, 0x11, 0x70, 0x0f, 0x40, 0xbe, 0x39, 0x1b, 0x52, 0x87,
0xbb, 0x4c, 0xfe, 0x88, 0x33, 0x73, 0x52, 0x7c, 0x2b, 0xc0, 0xea, 0x07, 0xdc, 0xa7, 0xb4, 0xbd,
0xb1, 0xed, 0xac, 0x6b, 0x48, 0x07, 0x68, 0x30, 0x37, 0x95, 0xa9, 0x01, 0x6c, 0x6d, 0x6e, 0x3c,
0xc8, 0xef, 0x4e, 0x2a, 0x74, 0xcc, 0x36, 0x77, 0x39, 0xc2, 0xc5, 0x8c, 0x91, 0xe5, 0xd2, 0xe9,
0x76, 0x5a, 0x45, 0x94, 0x44, 0x47, 0xe4, 0x9e, 0xae, 0x75, 0xf2, 0x8d, 0xa1, 0xf6, 0x6f, 0xd8,
0x71, 0xfb, 0x5b, 0xda, 0x60, 0xcc, 0x74, 0x5c, 0xf9, 0x04, 0x02, 0x4d, 0x90, 0x23, 0x4e, 0x51,
0x67, 0xbd, 0xc4, 0xfe, 0x24, 0x4c, 0x1e, 0xcf, 0xe8, 0x9d, 0xfb, 0x9a, 0x7b, 0xf6, 0x55, 0x8b,
0x1e, 0xfb, 0x16, 0xe2, 0x1a, 0x5c, 0x73, 0xea, 0xea, 0x69, 0x84, 0xcb, 0x22, 0x1d, 0x4d, 0xb8,
0xa7, 0x64, 0x0e, 0x66, 0xee, 0x1c, 0x0c, 0x52, 0x26, 0xe2, 0x6d, 0x3d, 0x96, 0x29, 0x94, 0xe8,
0x54, 0x3c, 0x33, 0xaa, 0xaa, 0x7c, 0x48, 0x92, 0x73, 0x60, 0x33, 0x9c, 0xf5, 0xa3, 0xf1, 0x18,
0x2d, 0x6d, 0xe0, 0xe4, 0x53, 0x12, 0x55, 0xf9, 0xc8, 0x53, 0x91, 0x06, 0x41, 0x12, 0x28, 0xad,
0xb9, 0x0a, 0x41, 0xe7, 0xc2, 0x35, 0x06, 0x53, 0x78, 0x65, 0x2f, 0x5f, 0x7a, 0x02, 0xa7, 0xa2,
0xab, 0xa5, 0x28, 0xd0, 0x06, 0x18, 0x47, 0x60, 0xeb, 0x73, 0x46, 0x53, 0x17, 0x2e, 0xca, 0x50,
0x93, 0xd9, 0xd3, 0x7b, 0xe2, 0x94, 0xa8, 0x23, 0xa0, 0x67, 0x21, 0x6b, 0xb5, 0xe8, 0xf8, 0xa9,
0x48, 0x41, 0xd8, 0x05, 0x34, 0xc7, 0xcc, 0xa9, 0xa4, 0x4d, 0xc6, 0x9f, 0x3d, 0x97, 0x45, 0xed,
0x5c, 0x34, 0xc4, 0x93, 0x91, 0x7c, 0xcd, 0xa5, 0x10, 0xe7, 0x13, 0x5a, 0x90, 0x3f, 0xce, 0xbc,
0xad, 0x6d, 0xd8, 0xee, 0x55, 0xb8, 0x57, 0x62, 0x97, 0x88, 0x9d, 0xc3, 0xb1, 0xeb, 0x54, 0x78,
0x72, 0x0c, 0x1e, 0xb5, 0x4f, 0x6d, 0xa7, 0xfe, 0xd0, 0x18, 0xcc, 0xb1, 0x07, 0x55, 0xb6, 0xd6,
0x19, 0x38, 0xe4, 0xe4, 0xc1, 0x94, 0x89, 0xce, 0x17, 0xf5, 0xbb, 0x20, 0x92, 0x68, 0x6b, 0xf2,
0xe5, 0x68, 0x0f, 0x7f, 0xba, 0x30, 0x3d, 0xe7, 0xec, 0x0e, 0x04, 0xfb, 0xb5, 0x2c, 0x40, 0xb9,
0xf5, 0xdf, 0x43, 0x50, 0x5b, 0x69, 0x49, 0xb7, 0x24, 0x34, 0xae, 0x56, 0x3e, 0x93, 0x59, 0x14,
0x5a, 0xf9, 0x40, 0xf0, 0x01, 0x77, 0x86, 0xb9, 0xd4, 0xf1, 0x28, 0xcb, 0x56, 0xa6, 0x62, 0xc8,
0x9d, 0xb1, 0xe7, 0x6a, 0xc7, 0x0d, 0xee, 0xa1, 0xcb, 0x4c, 0x34, 0xe3, 0xb8, 0x11, 0x8b, 0x01,
0xbc, 0xb5, 0xf3, 0x5f, 0xe8, 0xd6, 0x7d, 0x0c, 0xb8, 0xca, 0x85, 0x36, 0xd5, 0xf0, 0x86, 0xba,
0x05, 0x65, 0x2a, 0x7d, 0x14, 0xa8, 0x8a, 0x16, 0x89, 0xac, 0xa8, 0x06, 0xa7, 0xdc, 0x1a, 0x55,
0x91, 0x13, 0x5a, 0xdc, 0x4d, 0xa8, 0x4f, 0xa7, 0x73, 0x66, 0x46, 0xb0, 0x3c, 0x93, 0x63, 0x46,
0x0a, 0xf3, 0x53, 0x06, 0x33, 0x92, 0x85, 0x28, 0x9c, 0xa0, 0xaa, 0x2b, 0xd3, 0xf4, 0xc2, 0x08,
0x42, 0x77, 0x78, 0x9b, 0x7d, 0x92, 0x94, 0xb1, 0xc8, 0xf4, 0x6e, 0x28, 0x17, 0x8e, 0x9a, 0x0f,
0xc3, 0x47, 0x7c, 0x33, 0x5a, 0x92, 0x2b, 0x2e, 0xf1, 0x34, 0x9b, 0xc3, 0x68, 0xa1, 0x72, 0xab,
0xc5, 0x23, 0x6f, 0x25, 0x1c, 0xdf, 0x41, 0x34, 0x6f, 0x2b, 0x80, 0x3d, 0xa6, 0x4f, 0xa0, 0xd3,
0x86, 0x2b, 0x7a, 0x18, 0x02, 0x43, 0xdf, 0xdb, 0xc9, 0x35, 0xfa, 0x63, 0xa1, 0xc9, 0x4b, 0xc5,
0x67, 0x71, 0x37, 0x2a, 0x79, 0xf6, 0x23, 0x3a, 0x7c, 0x6f, 0x6e, 0xd2, 0x49, 0x06, 0xd8, 0x9b,
0xdf, 0x47, 0x3e, 0x38, 0x37, 0x39, 0xe6, 0xd2, 0x66, 0x1f, 0xa0, 0x4d, 0x00, 0x9d, 0xd1, 0xc3,
0x59, 0xae, 0xe6, 0xe8, 0x47, 0x84, 0xbf, 0x99, 0xe5, 0x2e, 0x62, 0x87, 0x25, 0xfc, 0x70, 0x02,
0xe2, 0x6a, 0xe7, 0x06, 0xcb, 0x34, 0xef, 0x79, 0x90, 0x6d, 0x71, 0x64, 0xfd, 0x3e, 0x38, 0x95,
0x87, 0x35, 0x4d, 0x05, 0x4f, 0xa2, 0xa8, 0xf3, 0xb4, 0x39, 0x93, 0x45, 0x29, 0x39, 0xed, 0xed,
0x79, 0xcf, 0x4a, 0x5b, 0x03, 0x4d, 0xb1, 0xc3, 0xbc, 0x08, 0xab, 0xb1, 0xa1, 0xdc, 0x69, 0xa4,
0x6a, 0xa8, 0x92, 0x70, 0x2f, 0x54, 0x5d, 0x88, 0xd7, 0x1d, 0xb6, 0x75, 0x4a, 0x62, 0x0f, 0xe3,
0xf9, 0x8a, 0x6c, 0xa9, 0x3a, 0x7b, 0xd0, 0x89, 0x57, 0x78, 0x46, 0x88, 0x63, 0xdc, 0x04, 0x06,
0xdc, 0x8f, 0xc4, 0x29, 0x03, 0xe0, 0xd7, 0x70, 0x26, 0xcb, 0x0a, 0x30, 0xfd, 0xaa, 0x63, 0xce,
0x53, 0x3b, 0x5c, 0xea, 0xbc, 0xcd, 0x9c, 0x16, 0xd6, 0x9e, 0xde, 0x99, 0x51, 0xf7, 0xd8, 0xa9,
0xe8, 0xdf, 0x8c, 0x3e, 0xa4, 0x34, 0xb9, 0x5c, 0xdd, 0x99, 0xcc, 0x54, 0xe9, 0x35, 0x1a, 0xa2,
0x79, 0xdb, 0xdd, 0x4b, 0xc2, 0xe0, 0x5f, 0x5a, 0x2e, 0x19, 0xcb, 0x9b, 0x40, 0x8e, 0xa8, 0xcf,
0x19, 0x67, 0x45, 0xde, 0x4c, 0x05, 0xcc, 0x1c, 0x18, 0xf9, 0xc8, 0x3c, 0xec, 0x76, 0xdc, 0x57,
0xb2, 0xac, 0x69, 0x86, 0x19, 0x26, 0xab, 0xc3, 0x24, 0x7f, 0x0b, 0x60, 0xc6, 0xbf, 0x9d, 0x07,
0x61, 0x12, 0x7c, 0xfd, 0x35, 0x68, 0x83, 0xc1, 0xbf, 0x63, 0xb1, 0x2f, 0x23, 0x3b, 0xd3, 0x28,
0x95, 0xa5, 0x80, 0xe1, 0xf6, 0xc2, 0xf6, 0x2c, 0xc6, 0x98, 0x8d, 0x45, 0xc5, 0x91, 0x14, 0x00,
0xe2, 0x52, 0x5d, 0x14, 0x10, 0x49, 0x16, 0xb1, 0x1c, 0xf1, 0x61, 0x59, 0xdd, 0x93, 0x14, 0x2a,
0xd5, 0x94, 0xb7, 0x29, 0x9e, 0x1a, 0xae, 0x6d, 0xfd, 0xbd, 0xed, 0x1d, 0x9e, 0x9e, 0xf3, 0x64,
0x99, 0xda, 0x7c, 0x21, 0x03, 0x42, 0x4e, 0x86, 0xd1, 0x5d, 0xfd, 0xea, 0x2a, 0x46, 0x1f, 0x5f,
0x65, 0x8a, 0x0e, 0xba, 0x76, 0x47, 0x6c, 0x74, 0x40, 0x2e, 0xd2, 0x45, 0x46, 0x6a, 0x2a, 0xc7,
0x99, 0x6e, 0xd2, 0x00, 0x87, 0x9a, 0x0c, 0x8c, 0x3b, 0x98, 0xd6, 0xd8, 0xf3, 0x6c, 0x9a, 0x8e,
0xef, 0xc7, 0x73, 0x7d, 0x7c, 0xce, 0xe0, 0x6c, 0x3f, 0x81, 0x3c, 0x41, 0xee, 0xba, 0x0c, 0x4c,
0x8b, 0xc5, 0x02, 0xc6, 0xb2, 0xab, 0x35, 0x47, 0x8e, 0x5d, 0xad, 0xf2, 0x48, 0xbb, 0x96, 0xdd,
0xfb, 0x18, 0x10, 0x2f, 0xc9, 0x0f, 0x20, 0x0d, 0x79, 0x52, 0x27, 0xbf, 0x78, 0x82, 0x77, 0x2a,
0xad, 0xed, 0x7f, 0x65, 0x51, 0x04, 0x49, 0xb2, 0x60, 0x5d, 0x70, 0x94, 0x8e, 0x8d, 0x12, 0x0c,
0x39, 0xde, 0xd3, 0xbb, 0xa0, 0x56, 0xca, 0x97, 0xf0, 0xa1, 0xd5, 0x23, 0x96, 0x5e, 0x01, 0xd3,
0x8f, 0xe8, 0x87, 0x6c, 0x39, 0x64, 0x7b, 0x42, 0x73, 0x11, 0x75, 0x46, 0x9b, 0xe7, 0xb0, 0x38,
0xbe, 0x28, 0xaa, 0xb3, 0xe0, 0x9a, 0x5c, 0xf3, 0xc7, 0xb6, 0xa6, 0x5b, 0x86, 0x60, 0x50, 0x3d,
0x2a, 0xc8, 0x8a, 0xb5, 0x82, 0x90, 0xf5, 0xec, 0xe8, 0x26, 0x1f, 0x6a, 0x8d, 0xf7, 0xb6, 0xc7,
0x50, 0x30, 0x3f, 0x7e, 0x58, 0x8d, 0xcb, 0x76, 0xbc, 0xd8, 0x71, 0xc0, 0x63, 0xaa, 0x83, 0xc2,
0xe4, 0x3f, 0x3e, 0x44, 0xc0, 0x23, 0x22, 0x54, 0x6f, 0xc9, 0x0d, 0x52, 0x8c, 0xcc, 0xd5, 0x2a,
0x40, 0x3c, 0x45, 0x18, 0x1b, 0x72, 0x6f, 0xeb, 0x2b, 0xf2, 0x0b, 0x39, 0xe5, 0x00, 0x01, 0xb9,
0xb5, 0x1d, 0x36, 0x5d, 0x58, 0xb3, 0xbc, 0x96, 0x4b, 0xcb, 0x48, 0x7e, 0x98, 0xf8, 0x93, 0xa7,
0x1f, 0x77, 0x6a, 0x2d, 0x37, 0x68, 0x2e, 0xb7, 0x8b, 0xc9, 0x34, 0xf2, 0xb7, 0xf3, 0xe6, 0x84,
0x82, 0x32, 0xde, 0x28, 0x54, 0x33, 0xc2, 0x5d, 0x43, 0x10, 0xac, 0xfb, 0x41, 0xf9, 0x04, 0xca,
0x1a, 0x17, 0xd3, 0x2c, 0x54, 0x3d, 0x98, 0xb7, 0x1d, 0x55, 0xb1, 0xe6, 0x74, 0xc4, 0x72, 0xd2,
0xd0, 0x73, 0x30, 0x5a, 0xb8, 0x66, 0xe1, 0x10, 0xfd, 0x42, 0xe8, 0xe9, 0x17, 0xaa, 0xac, 0x95,
0xcb, 0x74, 0x8c, 0x9a, 0x32, 0x51, 0x04, 0x41, 0x65, 0x5b, 0xe4, 0xc1, 0x77, 0xef, 0x7e, 0x90,
0xac, 0xf4, 0x0b, 0x97, 0x2a, 0x71, 0x6e, 0x4a, 0x07, 0xa0, 0x04, 0xa3, 0x84, 0x6d, 0x31, 0xde,
0xed, 0x35, 0xc8, 0x57, 0xa6, 0x67, 0xf3, 0xc3, 0xe4, 0xf4, 0x9f, 0xb1, 0x16, 0xb3, 0xfb, 0x49,
0x81, 0x2b, 0xf0, 0x2b, 0xe6, 0x98, 0xe8, 0x88, 0x33, 0xe2, 0xd9, 0xfc, 0x06, 0xec, 0x33, 0x57,
0xf2, 0x54, 0x5a, 0xce, 0xb3, 0x45, 0xf5, 0x12, 0x58, 0x22, 0xa6, 0x38, 0xbd, 0x5c, 0x00, 0xcb,
0x79, 0x09, 0x25, 0x69, 0xf0, 0x27, 0xb4, 0xf3, 0xf0, 0x62, 0xf0, 0xb2, 0x7a, 0x49, 0x1b, 0xed,
0x2f, 0xf2, 0x97, 0x98, 0x5e, 0x85, 0xe2, 0xe1, 0xe5, 0xa8, 0xc4, 0x34, 0x47, 0x1e, 0xe2, 0x6c,
0xa9, 0x69, 0xcd, 0xc9, 0xad, 0x86, 0xd2, 0x31, 0x13, 0x52, 0xee, 0xcf, 0x3b, 0x6c, 0x6d, 0xe2,
0x7f, 0xea, 0x15, 0x8d, 0xc3, 0x4e, 0xd3, 0xe5, 0x54, 0xbe, 0x0b, 0x30, 0x5e, 0x91, 0xdb, 0xa7,
0x49, 0x77, 0x0d, 0x6b, 0x2c, 0x94, 0x8f, 0x62, 0x0c, 0x51, 0x63, 0xd5, 0xea, 0x3b, 0x2e, 0x7f,
0x73, 0x2b, 0x57, 0xc8, 0x23, 0xcd, 0xa0, 0x74, 0x44, 0x2b, 0xdd, 0x31, 0x1c, 0xb7, 0x2e, 0x62,
0x72, 0x7f, 0x3d, 0x0d, 0xe9, 0xc5, 0x0b, 0xda, 0xfd, 0x45, 0xf0, 0x1a, 0x0f, 0x16, 0x4d, 0x16,
0x47, 0xa7, 0xc8, 0xfb, 0xdb, 0x74, 0xae, 0x85, 0x9f, 0xe3, 0xe0, 0x3f, 0x4a, 0x50, 0x9b, 0xef,
0x66, 0x29, 0x5a, 0x13, 0xb7, 0xe7, 0xe4, 0xb4, 0xb0, 0x30, 0xe2, 0x8b, 0x7d, 0x25, 0xd5, 0x9c,
0xf6, 0x7c, 0x23, 0x04, 0xa8, 0x24, 0x83, 0x3d, 0x26, 0xf6, 0xad, 0xc4, 0x56, 0xdb, 0x3a, 0xc1,
0xd0, 0x7d, 0x14, 0x24, 0xae, 0xa4, 0xd9, 0x3d, 0xa9, 0x7e, 0xfb, 0x5e, 0x04, 0xd8, 0xc3, 0x87,
0x1a, 0x48, 0xa6, 0xa0, 0xd7, 0xd3, 0x6a, 0xe5, 0x50, 0xd2, 0x54, 0x5c, 0x3b, 0x7f, 0x92, 0x68,
0x05, 0xbe, 0xba, 0x73, 0x22, 0xfe, 0xcf, 0xdc, 0xf2, 0x9d, 0xe9, 0xdb, 0xee, 0xc0, 0xa2, 0x76,
0x17, 0xca, 0xc7, 0x33, 0x32, 0x76, 0x25, 0x43, 0x82, 0x24, 0x25, 0xef, 0xa6, 0x75, 0xe1, 0x4a,
0x72, 0x51, 0x8f, 0x74, 0x7c, 0x46, 0xcd, 0x82, 0x5a, 0x3f, 0x77, 0x19, 0x97, 0x4b, 0x92, 0x1a,
0x49, 0xba, 0xd8, 0x28, 0x7f, 0x70, 0xe2, 0x17, 0x48, 0x0d, 0x18, 0xa7, 0xe5, 0x83, 0xd2, 0xd2,
0xe7, 0xf7, 0xb0, 0x15, 0x9e, 0xc8, 0x67, 0xe2, 0x69, 0x09, 0xde, 0xc5, 0xc5, 0x25, 0x39, 0x8a,
0x15, 0xa9, 0xe9, 0xbb, 0xe0, 0x22, 0xc1, 0x0b, 0x88, 0x67, 0xed, 0xe0, 0x39, 0x2e, 0x2f, 0x3c,
0xb8, 0x3d, 0xed, 0x2c, 0xf7, 0x83, 0xbf, 0xbe, 0x50, 0x0c, 0xff, 0xb9, 0x4a, 0x89, 0x5e, 0xc1,
0x45, 0x9e, 0x72, 0x74, 0xde, 0x10, 0x91, 0x82, 0x52, 0xea, 0x97, 0xbf, 0x83, 0xbc, 0x43, 0xc6,
0xf6, 0x0b, 0x7d, 0xf0, 0x81, 0x26, 0x0f, 0x8d, 0x30, 0xd5, 0xab, 0x24, 0xb2, 0x90, 0x64, 0x71,
0xdd, 0x73, 0xb8, 0xf4, 0x66, 0x0a, 0x07, 0xf3, 0x27, 0x38, 0xaa, 0xa3, 0x1b, 0x9e, 0x8e, 0xc4,
0x3c, 0x43, 0xe4, 0x97, 0xd1, 0xe2, 0xe3, 0x7b, 0xe0, 0x20, 0xd5, 0xfb, 0x2a, 0x5f, 0xfe, 0x98,
0x57, 0xd9, 0x34, 0x4b, 0x8b, 0x87, 0x12, 0x4b, 0x02, 0xfa, 0x5f, 0xcc, 0x1e, 0x81, 0xd1, 0x97,
0xa8, 0xc7, 0x40, 0xed, 0x98, 0x25, 0xef, 0xe2, 0xa9, 0x56, 0xc7, 0x2d, 0xb5, 0xb3, 0x2b, 0x1f,
0x4a, 0x61, 0x2b, 0xa0, 0xfa, 0x47, 0x44, 0x61, 0x3a, 0x1c, 0x8d, 0xfa, 0x0e, 0x0a, 0x44, 0x0d,
0x82, 0xbb, 0x22, 0xab, 0x6c, 0x00, 0xf2, 0x45, 0x0e, 0x77, 0x34, 0xd0, 0x42, 0x27, 0x62, 0xf3,
0x7f, 0x32, 0x50, 0x2e, 0x6c, 0x5e, 0x81, 0xb5, 0x4f, 0x2d, 0x1a, 0x92, 0xfe, 0x44, 0x92, 0xb6,
0x5a, 0xe1, 0xf7, 0xe3, 0x8b, 0xf3, 0x87, 0x4d, 0x70, 0x7c, 0xbe, 0x45, 0x24, 0x3b, 0x71, 0xc4,
0x18, 0x9a, 0x8a, 0x6b, 0xd4, 0xae, 0x71, 0x14, 0xd3, 0x8c, 0x94, 0x74, 0xe9, 0xc8, 0x8c, 0x32,
0x53, 0xfc, 0x89, 0xaf, 0xca, 0x79, 0xab, 0x8c, 0x5c, 0xce, 0xd7, 0x1f, 0xa2, 0x61, 0x13, 0x92,
0x5d, 0x5c, 0x67, 0x95, 0xeb, 0xd8, 0xa2, 0x95, 0x9b, 0x0b, 0xe1, 0xcc, 0xf1, 0x39, 0x22, 0x62,
0x9f, 0xe2, 0xfe, 0x65, 0xf4, 0x10, 0xdc, 0xbb, 0x39, 0x12, 0xcd, 0x2a, 0x06, 0xd5, 0x90, 0x1f,
0xb5, 0x67, 0xe6, 0xf1, 0xb3, 0x22, 0x4a, 0x9e, 0xf8, 0x81, 0xec, 0x87, 0xaa, 0xa2, 0x82, 0xac,
0xba, 0xe8, 0x89, 0x6c, 0x86, 0xef, 0x7b, 0x74, 0xce, 0x5a, 0x34, 0x64, 0xb3, 0xd2, 0x1f, 0x6a,
0x29, 0xf4, 0xcb, 0x9c, 0xcd, 0xda, 0xb6, 0x50, 0xe8, 0xf9, 0xd2, 0xeb, 0x66, 0xe9, 0xbc, 0xa3,
0xe8, 0x41, 0x13, 0x4d, 0xd5, 0xe9, 0xd5, 0x81, 0x73, 0xad, 0x07, 0x8c, 0x0f, 0xf2, 0x2a, 0x8b,
0x55, 0x1c, 0x7c, 0x15, 0x24, 0x97, 0x35, 0x88, 0x79, 0x68, 0x8f, 0x32, 0x5f, 0x32, 0x56, 0xdb,
0x80, 0x93, 0x33, 0x96, 0x63, 0xe4, 0x93, 0xd8, 0x4f, 0xa3, 0xe0, 0x61, 0x98, 0x2e, 0x98, 0x65,
0xe5, 0xd4, 0xa1, 0x1c, 0xaf, 0x17, 0xc1, 0xb6, 0xa0, 0xbf, 0x09, 0x3a, 0x65, 0x2c, 0x80, 0x6a,
0x9e, 0x52, 0xd7, 0xb9, 0x44, 0x49, 0x61, 0xf4, 0x34, 0xdc, 0xbc, 0x0a, 0x59, 0x92, 0x18, 0xba,
0xfc, 0xed, 0x78, 0x9d, 0x45, 0x6d, 0x5c, 0x66, 0xff, 0x49, 0x6f, 0x8a, 0x3a, 0x93, 0xb0, 0x08,
0x53, 0x3a, 0xa7, 0x1c, 0x25, 0x2c, 0xd1, 0x68, 0xc1, 0xe7, 0x08, 0x34, 0x45, 0xc9, 0x91, 0xa6,
0xb4, 0x5a, 0x38, 0xed, 0xcd, 0x06, 0x2d, 0x45, 0x9d, 0x15, 0x8b, 0xdf, 0x7b, 0x57, 0x51, 0xbb,
0x92, 0xae, 0x8f, 0x46, 0x71, 0x35, 0xbe, 0xb3, 0xc8, 0x56, 0x6a, 0x7b, 0x5d, 0x1d, 0xe4, 0x52,
0x13, 0x7d, 0xfb, 0x48, 0x73, 0x57, 0x57, 0x2c, 0x77, 0x56, 0xbe, 0x04, 0xe5, 0xbc, 0x78, 0x91,
0xde, 0x82, 0xb2, 0x54, 0x12, 0xff, 0x02, 0x93, 0x93, 0x17, 0x97, 0x91, 0x42, 0x36, 0x12, 0xed,
0x74, 0x41, 0x3b, 0x5c, 0x93, 0xab, 0xd2, 0x02, 0x30, 0x4c, 0x6e, 0xbc, 0x56, 0xdf, 0xb3, 0x5f,
0x5a, 0x2c, 0x67, 0x67, 0x67, 0x9a, 0x56, 0x60, 0x5e, 0xfd, 0xb2, 0xff, 0x8f, 0x32, 0x5f, 0xec,
0xb3, 0x91, 0x7e, 0xe9, 0xb0, 0xca, 0x1d, 0x7a, 0x49, 0x61, 0x82, 0x1d, 0x26, 0x31, 0x36, 0x09,
0x3b, 0x46, 0x5d, 0x81, 0x75, 0x48, 0xe3, 0x45, 0xcc, 0x7a, 0x2b, 0x2d, 0xc6, 0x78, 0x45, 0x27,
0x0c, 0xd3, 0x5f, 0xe9, 0x90, 0x54, 0x30, 0x90, 0xb4, 0x49, 0xb2, 0xb4, 0x7c, 0x0e, 0x87, 0x32,
0xbf, 0xc6, 0xfa, 0x33, 0x11, 0x81, 0xd8, 0x79, 0x00, 0x85, 0xb0, 0xdb, 0x45, 0x1f, 0x2f, 0xfd,
0xcd, 0x5f, 0x6b, 0x93, 0xcb, 0xa5, 0x2f, 0xce, 0xb1, 0x51, 0x48, 0x52, 0x98, 0x58, 0x1c, 0x5f,
0xb3, 0x00, 0xc6, 0xf0, 0xc9, 0xa1, 0xed, 0xbf, 0x20, 0x86, 0xe5, 0xf0, 0x26, 0x47, 0xbf, 0x73,
0xb9, 0x5f, 0x12, 0xc3, 0xe1, 0x25, 0x11, 0x8c, 0xfb, 0x65, 0x31, 0xde, 0xa7, 0x96, 0xc4, 0x4f,
0xf8, 0x3b, 0xa6, 0x95, 0xc1, 0x35, 0x3e, 0x11, 0x40, 0xf2, 0x9a, 0x41, 0xca, 0x33, 0x1b, 0xe5,
0xb6, 0x1f, 0x1f, 0x9c, 0xc6, 0x5d, 0x14, 0xb2, 0x76, 0xf0, 0x14, 0x5f, 0xc6, 0x10, 0xcf, 0xc8,
0x90, 0x54, 0x2c, 0x7c, 0xed, 0x40, 0xf1, 0xac, 0xb3, 0x0d, 0x22, 0x66, 0x39, 0x7b, 0xe0, 0x4a,
0x79, 0xf6, 0x89, 0x4d, 0x5d, 0xd4, 0x5e, 0x1c, 0xf6, 0x50, 0xeb, 0x47, 0x18, 0x22, 0x03, 0x41,
0xad, 0x3d, 0xc0, 0xda, 0xec, 0x4c, 0xc3, 0x96, 0xa8, 0x76, 0xd0, 0x13, 0x99, 0xe2, 0xaf, 0x4b,
0xd0, 0x26, 0xd2, 0x89, 0xf6, 0x2e, 0x14, 0x4f, 0xca, 0xc5, 0xcd, 0x0a, 0x3f, 0x06, 0x45, 0x7e,
0x37, 0x08, 0x84, 0xbf, 0xff, 0x4b, 0xc0, 0xdd, 0x78, 0x08, 0x65, 0xe5, 0x8b, 0xfd, 0xe0, 0x44,
0x6c, 0x97, 0x17, 0xa4, 0x78, 0x58, 0x87, 0xac, 0x4f, 0x02, 0xdc, 0x7f, 0x01, 0xff, 0x03, 0x10,
0x6c, 0x61, 0x20, 0xf6, 0xb1, 0x6c, 0xc1, 0x4b, 0x60, 0x31, 0x62, 0xb3, 0xbc, 0x48, 0x1d, 0x26,
0x5b, 0x41, 0xeb, 0x61, 0x2d, 0x5a, 0x8f, 0x37, 0x40, 0x2b, 0x2c, 0x6d, 0x8b, 0x18, 0x95, 0xd0,
0x9e, 0x14, 0x99, 0xbd, 0xa7, 0x42, 0x66, 0x4b, 0xa4, 0xcd, 0x80, 0xab, 0x81, 0x90, 0xf6, 0xe3,
0x8d, 0x42, 0x2b, 0xf3, 0xa2, 0x7a, 0x47, 0xef, 0xd3, 0x68, 0x28, 0x14, 0xe5, 0xb0, 0xea, 0x5e,
0x24, 0xdb, 0xbe, 0xbe, 0x77, 0x34, 0x7c, 0x7d, 0x0f, 0xad, 0x12, 0x9d, 0x27, 0x78, 0x66, 0x62,
0xe3, 0xdc, 0x9a, 0x87, 0x3e, 0x38, 0xa2, 0x21, 0xb9, 0x34, 0x66, 0xa0, 0x0c, 0x8b, 0xf5, 0xdd,
0x4b, 0x7d, 0x6c, 0xff, 0xae, 0xf4, 0x9f, 0x9e, 0xc4, 0x8f, 0xba, 0xbc, 0xd6, 0xae, 0x4a, 0x5a,
0x53, 0xbf, 0x7f, 0x09, 0x07, 0xdb, 0x58, 0xc2, 0x51, 0x6f, 0x4d, 0xc2, 0x02, 0xcd, 0x3f, 0xec,
0x1d, 0x27, 0x83, 0x03, 0x18, 0xf0, 0xdf, 0x40, 0xfa, 0x97, 0xb3, 0xfc, 0xee, 0xcf, 0x24, 0xfd,
0xe0, 0x2f, 0x64, 0x7b, 0xdd, 0xa9, 0x25, 0xd9, 0x74, 0x48, 0x32, 0x47, 0x86, 0x47, 0xe4, 0x8d,
0x3d, 0x3e, 0x57, 0xd4, 0x7a, 0x2b, 0xf6, 0xae, 0x28, 0xfd, 0xa1, 0xfc, 0x4d, 0x16, 0x4b, 0x54,
0x98, 0x61, 0x1f, 0xe6, 0x08, 0xa7, 0x39, 0x9f, 0xaf, 0x6e, 0x16, 0x25, 0xdb, 0xeb, 0x83, 0x4b,
0xb3, 0x2d, 0x19, 0x81, 0xdf, 0x6a, 0xa4, 0x75, 0x2e, 0xdd, 0x5a, 0x85, 0xeb, 0x49, 0x81, 0xdf,
0xd9, 0x51, 0x00, 0xd2, 0x00, 0x01, 0x5b, 0x88, 0x2c, 0x07, 0x12, 0xf2, 0x51, 0x95, 0x3a, 0x02,
0x6e, 0x8d, 0x10, 0x97, 0x5f, 0xc8, 0x19, 0x73, 0x8c, 0x90, 0x95, 0x21, 0x12, 0xdf, 0x12, 0x06,
0xff, 0x3d, 0x80, 0xe2, 0xc4, 0xde, 0x25, 0xcf, 0x01, 0x9a, 0x18, 0x3c, 0x0e, 0x4d, 0xd9, 0x2d,
0x64, 0xb5, 0x22, 0xb7, 0x77, 0xaa, 0x42, 0x79, 0x7a, 0x60, 0xb7, 0x2a, 0x76, 0x45, 0xaf, 0x1d,
0x3f, 0x56, 0xe8, 0x82, 0xbd, 0x48, 0x31, 0xd1, 0x22, 0xbd, 0xb1, 0x50, 0xf5, 0x20, 0xc0, 0xe3,
0xa9, 0x66, 0xaf, 0x1d, 0x89, 0x5a, 0xe2, 0xc2, 0x62, 0x4b, 0xe8, 0x88, 0xc5, 0x6b, 0x00, 0xc8,
0xc3, 0x3f, 0x15, 0xd8, 0x5a, 0xbb, 0xc4, 0xeb, 0xb8, 0x0b, 0x7f, 0x30, 0xfd, 0x61, 0x02, 0x16,
0xed, 0x71, 0xb5, 0x2b, 0x9a, 0x3e, 0x30, 0x2e, 0xb0, 0x63, 0xe5, 0xf1, 0xc8, 0xa9, 0x1a, 0x2f,
0x7f, 0x21, 0x5c, 0x91, 0xeb, 0xb3, 0x75, 0x3c, 0xdc, 0x90, 0x79, 0x2b, 0x57, 0x56, 0x34, 0x7c,
0xf0, 0x07, 0xcd, 0xa0, 0x49, 0xd5, 0x88, 0x11, 0x07, 0x28, 0xb1, 0xdc, 0x65, 0xa8, 0x64, 0x9e,
0x2b, 0x4b, 0x9d, 0xb2, 0x7b, 0x06, 0x9c, 0x15, 0x8f, 0xca, 0xf7, 0x15, 0x5e, 0x21, 0x23, 0x0f,
0x34, 0x44, 0x01, 0x3b, 0x37, 0x11, 0xf5, 0xe6, 0xe2, 0xdb, 0x13, 0xdf, 0xd3, 0x27, 0x79, 0x68,
0xda, 0x10, 0x7d, 0xa3, 0x85, 0x06, 0xe1, 0x45, 0x8b, 0xf7, 0xec, 0x45, 0x1d, 0xda, 0xe4, 0x67,
0x72, 0x35, 0x12, 0xe8, 0xb2, 0x7f, 0x7c, 0x7c, 0x7a, 0x7c, 0xda, 0x3d, 0xb1, 0x70, 0xd1, 0xe2,
0x9c, 0xc2, 0x3f, 0x04, 0xd7, 0x12, 0xff, 0x74, 0x03, 0xd6, 0x3d, 0x9a, 0xf0, 0x8f, 0xcd, 0xe3,
0xda, 0x1e, 0x45, 0x65, 0x70, 0x82, 0x37, 0x7d, 0x23, 0xb5, 0x41, 0xcc, 0x4d, 0x06, 0xec, 0xf3,
0x01, 0xf5, 0xec, 0x7f, 0xd2, 0xf8, 0x41, 0x8d, 0x90, 0xb8, 0xfa, 0x7b, 0x78, 0x88, 0x80, 0xa9,
0x02, 0xab, 0x3b, 0x67, 0x3e, 0xea, 0xab, 0xb4, 0xd9, 0x88, 0x3f, 0x1f, 0x0c, 0x6c, 0xaf, 0x43,
0xe5, 0xe6, 0x40, 0x32, 0xc7, 0xda, 0x80, 0x6c, 0x83, 0x43, 0xe6, 0xe3, 0xd8, 0x4c, 0xfb, 0x70,
0xe0, 0x26, 0xf8, 0x19, 0xa0, 0x3a, 0x1b, 0xfd, 0xc0, 0x9c, 0x59, 0xf8, 0x56, 0x38, 0xaa, 0x93,
0x67, 0x5a, 0x0d, 0x0d, 0xb4, 0xd6, 0x1d, 0x41, 0x05, 0xa3, 0x0f, 0x32, 0xe9, 0x5b, 0xce, 0x46,
0x9d, 0xe5, 0xd0, 0x4c, 0x48, 0x37, 0x26, 0x27, 0xad, 0x5b, 0x05, 0xac, 0x38, 0xe3, 0x6a, 0x72,
0x94, 0x71, 0xc4, 0x65, 0x39, 0x7b, 0x71, 0xb0, 0x2a, 0xe4, 0x08, 0xda, 0xbb, 0x81, 0xca, 0x7e,
0xa8, 0xb9, 0x60, 0x4d, 0xbc, 0x67, 0x22, 0xf1, 0xf1, 0xa0, 0x1b, 0x78, 0x8a, 0xec, 0x3f, 0xe9,
0x0e, 0x0e, 0xe1, 0xfc, 0xd7, 0x8b, 0xf9, 0x53, 0x4b, 0xcc, 0xd3, 0xc7, 0x9b, 0x14, 0x91, 0x4d,
0x43, 0x63, 0x67, 0x66, 0x8b, 0x21, 0x61, 0x41, 0xaa, 0x0f, 0x92, 0x54, 0xde, 0xd0, 0xec, 0x60,
0xa5, 0x04, 0xdf, 0xa8, 0xc8, 0xcb, 0xd4, 0xad, 0x30, 0x1c, 0x10, 0x46, 0x64, 0x30, 0x2f, 0xa4,
0xa9, 0x5e, 0xef, 0xf2, 0x82, 0x70, 0x28, 0xae, 0xc4, 0x1f, 0x5e, 0xc6, 0x32, 0xa9, 0xfa, 0x31,
0xba, 0xc4, 0xc1, 0x63, 0x74, 0x89, 0x83, 0xd0, 0xa7, 0xde, 0xa9, 0x23, 0xb8, 0x74, 0x09, 0xf3,
0xb5, 0x2e, 0xaa, 0xe2, 0x0f, 0xd9, 0x5b, 0x7b, 0x8a, 0x46, 0x00, 0x87, 0xcc, 0xd5, 0x82, 0x73,
0xe9, 0x83, 0x4b, 0xfa, 0x42, 0x06, 0x7f, 0x4a, 0xcd, 0x40, 0x92, 0x39, 0x6c, 0x9d, 0xea, 0x41,
0x41, 0xa8, 0xea, 0x07, 0x2d, 0x91, 0x02, 0x7c, 0x47, 0x3c, 0x16, 0x26, 0x9a, 0xd0, 0x92, 0x4f,
0xa8, 0xa5, 0x98, 0xef, 0xb4, 0x99, 0x79, 0xdd, 0xb2, 0x09, 0x6f, 0xe0, 0x7a, 0x76, 0x8c, 0xeb,
0x2d, 0x1c, 0x6d, 0x42, 0x77, 0xb1, 0xa9, 0x19, 0x20, 0xec, 0xee, 0x06, 0x5f, 0x05, 0xa1, 0xfe,
0x6a, 0xaa, 0x21, 0xae, 0x39, 0x9d, 0x1e, 0x5e, 0x42, 0x8d, 0x21, 0x8e, 0x39, 0x5f, 0x3c, 0xb8,
0xec, 0x74, 0x00, 0xd0, 0x6e, 0x60, 0xe8, 0x47, 0xfa, 0x01, 0xe7, 0xf4, 0x2f, 0xe5, 0x3b, 0x87,
0xed, 0x3e, 0x02, 0xf4, 0xa9, 0xba, 0x3c, 0x9b, 0xa0, 0xef, 0xce, 0x95, 0xa6, 0xec, 0xa4, 0x9f,
0xc7, 0x28, 0x65, 0x1c, 0x69, 0x5a, 0x12, 0xb6, 0x54, 0x98, 0x78, 0x35, 0xc5, 0xfb, 0xd3, 0xe8,
0x6d, 0x7c, 0x0c, 0x9f, 0xee, 0xe6, 0x7e, 0x67, 0x70, 0x5d, 0xd4, 0x2a, 0x73, 0x27, 0xa9, 0x44,
0x8c, 0x9b, 0xa9, 0x33, 0x63, 0xec, 0x8c, 0x19, 0x63, 0xe9, 0x42, 0xa1, 0x28, 0x82, 0x6f, 0x85,
0xa4, 0xdc, 0xf8, 0x07, 0xc4, 0x53, 0xa8, 0x5a, 0x90, 0xd5, 0x25, 0x62, 0x96, 0x24, 0x7c, 0xe4,
0x54, 0x25, 0xa9, 0x32, 0xc5, 0xaa, 0xf5, 0x49, 0x6b, 0x1a, 0xa6, 0xca, 0x59, 0x85, 0x82, 0x09,
0x8b, 0x3e, 0x48, 0x4e, 0x0f, 0xfa, 0xbd, 0xae, 0x47, 0x3d, 0xdc, 0x94, 0x2b, 0xaf, 0xa7, 0x39,
0x1e, 0x3c, 0x52, 0x73, 0xf4, 0x30, 0xde, 0xdf, 0x99, 0xe6, 0x78, 0xb0, 0x1d, 0xcd, 0xd1, 0x4d,
0xff, 0xbf, 0x3b, 0x05, 0xf2, 0xa0, 0x5e, 0x81, 0xd4, 0x9d, 0x7e, 0x16, 0xd3, 0x4c, 0x8e, 0xfa,
0x27, 0x07, 0xf2, 0x05, 0x49, 0x8d, 0x29, 0x63, 0x46, 0x45, 0xf8, 0x59, 0x98, 0xb5, 0x8a, 0xa8,
0xb6, 0x32, 0xa4, 0xd3, 0x06, 0x01, 0x0e, 0xb3, 0x8e, 0x5b, 0x80, 0xc6, 0xd9, 0xa3, 0xc7, 0xf5,
0x40, 0x9d, 0xc9, 0xd6, 0x18, 0xde, 0x36, 0x14, 0x5c, 0xf6, 0xe8, 0xe8, 0x66, 0x4a, 0xae, 0x64,
0x87, 0x4a, 0x8e, 0x88, 0xe4, 0xb4, 0x6d, 0x74, 0xdd, 0xe3, 0xc3, 0x41, 0xd2, 0x63, 0x8e, 0x2e,
0x58, 0x64, 0x5c, 0xa6, 0xa3, 0x62, 0x3c, 0xfb, 0x59, 0x10, 0x8e, 0x50, 0x19, 0x1a, 0xbc, 0x5e,
0x27, 0x96, 0x3a, 0x4c, 0x1e, 0xbf, 0x3d, 0x33, 0x7e, 0xaf, 0xaf, 0xfb, 0x1a, 0x3a, 0x20, 0x85,
0x42, 0xff, 0xeb, 0xd2, 0x00, 0x1d, 0xf5, 0x5c, 0xff, 0xeb, 0x33, 0xfd, 0x8f, 0xbd, 0xd6, 0xfb,
0x08, 0xf5, 0x8f, 0x40, 0x50, 0x55, 0x3b, 0x52, 0xb0, 0x6b, 0x38, 0x7a, 0xd8, 0x38, 0x82, 0xd6,
0x2d, 0x04, 0x3c, 0xe6, 0x04, 0x12, 0xff, 0x06, 0x3f, 0x80, 0x87, 0x4d, 0xda, 0xd2, 0x06, 0x9a,
0x0b, 0x9b, 0xbd, 0xa9, 0xb8, 0x78, 0x9e, 0x3e, 0xfe, 0x14, 0xea, 0x02, 0xc7, 0x27, 0x45, 0x76,
0xe4, 0x22, 0x85, 0xcf, 0xa3, 0x2a, 0x58, 0x9b, 0xd2, 0xef, 0x1d, 0x1f, 0x9d, 0x20, 0x37, 0xb6,
0xb7, 0x9c, 0x30, 0xe3, 0xcf, 0x40, 0x09, 0x16, 0x2b, 0x6e, 0xa4, 0xce, 0xa7, 0x61, 0xc4, 0x02,
0x2b, 0xb1, 0xc4, 0xc7, 0xda, 0xc4, 0xa3, 0x31, 0xf3, 0x6d, 0xd1, 0xe3, 0x36, 0xb8, 0x39, 0x19,
0x7d, 0xab, 0xfc, 0xf9, 0xe4, 0x68, 0x90, 0x1c, 0x21, 0x7f, 0x46, 0x59, 0xa0, 0xe1, 0xf4, 0x02,
0xd9, 0x35, 0xb1, 0x6a, 0x46, 0x25, 0x33, 0x20, 0xdc, 0x3c, 0x5a, 0x57, 0xa9, 0x0c, 0x2e, 0x6d,
0xf9, 0x28, 0x2a, 0x41, 0x91, 0xfb, 0x2f, 0x68, 0x25, 0x43, 0xd5, 0x51, 0xef, 0x32, 0xc6, 0x2f,
0x09, 0x20, 0x79, 0xed, 0x7a, 0x02, 0x1a, 0xb4, 0x03, 0xd3, 0x68, 0x18, 0x93, 0x6f, 0x66, 0xa7,
0x75, 0xa6, 0xb2, 0xe2, 0x70, 0x27, 0xd1, 0xf0, 0xca, 0x24, 0x4e, 0xcb, 0xc8, 0xb5, 0xe7, 0xe0,
0x5e, 0x8b, 0x6e, 0xe2, 0xb6, 0x32, 0x84, 0x37, 0x60, 0xa3, 0x14, 0x90, 0xd7, 0x00, 0xe4, 0xd5,
0xd5, 0xe6, 0xae, 0xf0, 0x06, 0x43, 0x85, 0x7c, 0x6d, 0x4d, 0x65, 0x3e, 0xed, 0x36, 0x18, 0x18,
0x86, 0x7c, 0x6c, 0x3f, 0x0a, 0x24, 0xda, 0x1f, 0x33, 0x0f, 0xc7, 0xd6, 0x90, 0x29, 0xad, 0xb5,
0x65, 0x1a, 0x2b, 0x6b, 0xb1, 0xfb, 0x67, 0x66, 0xe3, 0x06, 0x67, 0xc7, 0xa3, 0x18, 0x80, 0x30,
0xe4, 0x1b, 0xf5, 0xae, 0xfe, 0xe0, 0x44, 0x1c, 0x6b, 0x86, 0x2c, 0x3c, 0xc8, 0xf0, 0x67, 0xe3,
0x29, 0xee, 0xdb, 0x11, 0xc6, 0x99, 0x7a, 0x20, 0x67, 0xba, 0x96, 0xe5, 0xf6, 0xa2, 0x51, 0x50,
0x98, 0x11, 0xee, 0xa4, 0x33, 0xea, 0x5e, 0xd1, 0x19, 0xa5, 0x57, 0x37, 0xec, 0x88, 0x47, 0x8a,
0x4d, 0xad, 0xf0, 0x4c, 0x03, 0xb7, 0x86, 0x5d, 0xdc, 0x72, 0x80, 0x53, 0x47, 0xdc, 0x91, 0x5f,
0x27, 0x90, 0x2b, 0x14, 0x4f, 0xf6, 0x1b, 0xab, 0xee, 0x9c, 0x39, 0xa3, 0x95, 0x0e, 0x00, 0x18,
0xa5, 0xb4, 0x4a, 0x19, 0x88, 0x16, 0x91, 0xca, 0x99, 0x16, 0xa9, 0x9c, 0xed, 0x6e, 0x10, 0x35,
0x9c, 0x29, 0xb2, 0x5a, 0xdf, 0xe1, 0xb5, 0x95, 0x07, 0x0b, 0xe1, 0x34, 0x6d, 0x81, 0xc6, 0xb8,
0xdf, 0x20, 0xe0, 0x27, 0xd0, 0x27, 0x71, 0x01, 0x26, 0x13, 0xf4, 0x07, 0x08, 0x67, 0x1b, 0x04,
0x08, 0x5d, 0xfb, 0x8e, 0xdc, 0x65, 0x0d, 0x7a, 0xe8, 0x10, 0xf5, 0xa4, 0x2e, 0xe6, 0xa1, 0x8d,
0x7f, 0x66, 0x44, 0x4c, 0x7c, 0x91, 0x9c, 0xe6, 0x88, 0xc9, 0x46, 0x24, 0x67, 0x8d, 0xf3, 0x71,
0xad, 0x08, 0xd0, 0xac, 0x26, 0x02, 0x54, 0xa3, 0xec, 0xd6, 0xea, 0x77, 0x54, 0xdc, 0xcc, 0x6c,
0x95, 0xf7, 0xb3, 0x91, 0xac, 0xa5, 0xf8, 0xd6, 0x9c, 0xa4, 0x2d, 0x69, 0x81, 0xe4, 0xf1, 0x3b,
0x37, 0x8d, 0x3b, 0xa3, 0x68, 0x8e, 0x61, 0xbd, 0x72, 0xe3, 0x94, 0xc9, 0x0d, 0x96, 0x97, 0x22,
0x23, 0x8a, 0x0d, 0xf6, 0xf9, 0xb1, 0x53, 0x66, 0x3c, 0x86, 0x75, 0x6d, 0x87, 0x07, 0x6c, 0x8e,
0xe0, 0x06, 0x4c, 0xf5, 0x93, 0x64, 0xd0, 0x3f, 0x6c, 0x8a, 0xe2, 0x1d, 0x5a, 0x68, 0xc1, 0xcf,
0x1e, 0x0c, 0xab, 0xd1, 0xf5, 0x99, 0x51, 0x44, 0xe7, 0xdd, 0x06, 0x65, 0x1c, 0x02, 0xbb, 0xe4,
0xc0, 0xbe, 0x62, 0x12, 0xd2, 0xcf, 0x94, 0x9c, 0x69, 0xad, 0xc4, 0x27, 0x3f, 0xd8, 0x37, 0xb0,
0xce, 0x4c, 0x18, 0xf1, 0x88, 0x7d, 0xa0, 0x42, 0x8c, 0xdf, 0x1e, 0xf9, 0x02, 0xc6, 0x0d, 0x1c,
0xac, 0x0c, 0x48, 0xe4, 0x7d, 0x5e, 0x90, 0x3c, 0x55, 0x76, 0x8c, 0x8e, 0x2f, 0xcd, 0x37, 0x6b,
0x14, 0xce, 0xac, 0x6f, 0x9c, 0x32, 0x03, 0xff, 0x0e, 0xb6, 0x55, 0x58, 0x8d, 0xa9, 0x24, 0x3d,
0x20, 0x68, 0x31, 0xd7, 0xa5, 0x6f, 0xae, 0x8f, 0xa3, 0x18, 0x65, 0x01, 0xba, 0xf8, 0x51, 0x9a,
0x8a, 0x39, 0xb4, 0x09, 0x12, 0xf7, 0xbb, 0xa7, 0xd2, 0x71, 0x46, 0x33, 0xf4, 0x88, 0xb4, 0x61,
0x46, 0x59, 0xc3, 0x69, 0x3c, 0xa8, 0x21, 0x3b, 0x59, 0x56, 0x8c, 0xee, 0x04, 0xbb, 0x0c, 0x5d,
0xa9, 0x82, 0x34, 0xa1, 0x9e, 0x76, 0x78, 0xc5, 0x30, 0xfb, 0x6d, 0x39, 0xe6, 0x6c, 0x92, 0xa6,
0x0a, 0xee, 0x0c, 0x58, 0xcd, 0x77, 0xa9, 0xa8, 0x3a, 0xba, 0xec, 0x30, 0x33, 0xee, 0xbf, 0x12,
0x95, 0x0b, 0x7c, 0x7d, 0x1e, 0xba, 0x16, 0xfb, 0x13, 0x05, 0x6c, 0x23, 0xe8, 0x1f, 0x0c, 0xef,
0xa7, 0xc4, 0x23, 0x24, 0xf7, 0x94, 0x88, 0xc5, 0xb5, 0xb6, 0x78, 0xa7, 0x66, 0x93, 0x77, 0xea,
0xb6, 0xb9, 0xa3, 0x1d, 0x30, 0x31, 0xe6, 0xef, 0xee, 0x48, 0x75, 0x37, 0xb7, 0x89, 0x7a, 0x0d,
0x36, 0x51, 0x57, 0xb1, 0x2b, 0x75, 0x4d, 0xa2, 0xca, 0xaa, 0xb9, 0xed, 0xd4, 0xe8, 0xaa, 0x3f,
0x92, 0x1a, 0xeb, 0x6a, 0x03, 0x1f, 0xb6, 0xa5, 0x7b, 0xf2, 0x74, 0x74, 0xa7, 0x0d, 0x66, 0xa4,
0xff, 0x12, 0x82, 0x70, 0x58, 0x4c, 0x5e, 0x13, 0xe9, 0xe0, 0xac, 0xce, 0xa4, 0x63, 0x6c, 0xd6,
0xdb, 0xfb, 0x70, 0x63, 0x03, 0x8b, 0x2e, 0x6a, 0x9b, 0x26, 0x96, 0xdc, 0xfe, 0x79, 0x06, 0xf5,
0xdc, 0xfd, 0x1f, 0xc7, 0x31, 0x1c, 0xe7, 0x52, 0xe2, 0x8d, 0x2d, 0x05, 0x7d, 0xa4, 0x4a, 0x3b,
0x1e, 0x06, 0xa0, 0xde, 0x53, 0x15, 0x0b, 0xe4, 0x8d, 0x0e, 0x02, 0x62, 0x8d, 0x18, 0x40, 0x8d,
0x4d, 0x57, 0x75, 0x85, 0xb7, 0xaa, 0x6b, 0x2a, 0x96, 0x55, 0xf2, 0x98, 0xd4, 0xd1, 0xa7, 0x34,
0x02, 0x39, 0x29, 0x04, 0xaf, 0x82, 0xdd, 0xac, 0xe4, 0xf2, 0x77, 0x37, 0x18, 0x00, 0x60, 0x2b,
0x5a, 0xc2, 0xf4, 0xef, 0x4f, 0x69, 0x2c, 0xf2, 0x1c, 0x53, 0xa8, 0xaa, 0xba, 0xee, 0xe2, 0x64,
0x3d, 0xd3, 0x72, 0xed, 0x08, 0x04, 0xc3, 0x3f, 0x10, 0xd5, 0x6e, 0xa4, 0x13, 0xe1, 0x93, 0x06,
0x1e, 0x1a, 0x4c, 0x31, 0x12, 0xfe, 0x25, 0x76, 0x57, 0x57, 0xb3, 0xb8, 0xda, 0xb0, 0x3c, 0xcd,
0xcd, 0xd7, 0x8d, 0x02, 0x85, 0x60, 0xb7, 0x67, 0x5a, 0x33, 0x4e, 0xf0, 0x87, 0x71, 0xfd, 0xaf,
0x62, 0x5c, 0x6f, 0x9d, 0x15, 0xfc, 0x8b, 0x19, 0xe1, 0xdb, 0x8b, 0xdf, 0xf4, 0x93, 0xa3, 0xcd,
0xec, 0xf5, 0xfe, 0x7f, 0x37, 0x7b, 0xbd, 0x77, 0x7a, 0x32, 0x38, 0x00, 0x7b, 0x9d, 0xfd, 0x63,
0x7c, 0xe6, 0x84, 0x25, 0xe8, 0x31, 0xe4, 0x24, 0x1b, 0x5d, 0xb1, 0xe9, 0x3d, 0xd1, 0x15, 0x9b,
0xde, 0x63, 0xd2, 0x62, 0x7b, 0xa1, 0xef, 0x3a, 0x9d, 0x3a, 0xc2, 0xd6, 0xaf, 0xd8, 0xf4, 0xff,
0x8b, 0x5e, 0xb1, 0xf9, 0xe3, 0xde, 0xcc, 0x66, 0xf7, 0x66, 0xa8, 0x1a, 0xf3, 0x06, 0x55, 0x9a,
0x37, 0xf9, 0x3c, 0x0a, 0xea, 0x6c, 0xd9, 0x88, 0xf9, 0x3b, 0x68, 0x89, 0xea, 0xc9, 0xe9, 0x76,
0x8f, 0x8e, 0xfa, 0x87, 0xfd, 0x53, 0x4f, 0x72, 0x64, 0x6f, 0x7b, 0x77, 0x67, 0x7a, 0x8f, 0xcc,
0x80, 0xf4, 0x9c, 0xb1, 0xdf, 0x59, 0x06, 0x64, 0xef, 0xbf, 0xc7, 0xdd, 0x99, 0xde, 0x67, 0xbe,
0x3b, 0xd3, 0xff, 0xe3, 0xee, 0xcc, 0xb6, 0xee, 0xce, 0xf4, 0x0f, 0x4f, 0x06, 0x09, 0x66, 0x5b,
0x0e, 0x10, 0x0d, 0x1e, 0xaf, 0x0d, 0xd4, 0x50, 0x90, 0x7b, 0xc9, 0x26, 0x7e, 0x50, 0x5d, 0xfb,
0xa4, 0x29, 0xfc, 0x3f, 0x8b, 0xd7, 0x90, 0x88, 0x8f, 0xcc, 0xdb, 0x24, 0x34, 0x2e, 0xbc, 0x77,
0xa4, 0x8b, 0x54, 0xef, 0x73, 0xeb, 0x6c, 0xfd, 0x87, 0xd7, 0x74, 0xeb, 0x5e, 0x53, 0x79, 0x75,
0x93, 0xbf, 0x64, 0x40, 0x93, 0xc4, 0xea, 0x1d, 0xa5, 0x0d, 0x34, 0xb0, 0xb3, 0x11, 0x15, 0xec,
0xac, 0x49, 0x07, 0xad, 0xdd, 0xaa, 0x99, 0xfa, 0x7c, 0xf1, 0xce, 0x4e, 0xae, 0xff, 0xfc, 0xbc,
0x4e, 0xd7, 0xc3, 0x84, 0x1e, 0x58, 0x9e, 0x00, 0x4c, 0xd1, 0x24, 0x5e, 0x42, 0x6c, 0x30, 0x53,
0x6c, 0xb7, 0x6b, 0x79, 0x97, 0x55, 0xc0, 0x5e, 0xf8, 0x3b, 0xb9, 0x67, 0xde, 0x1a, 0x9d, 0x6a,
0x15, 0xbf, 0x22, 0x3f, 0x47, 0xec, 0x75, 0x22, 0xa3, 0x17, 0xfb, 0xde, 0x03, 0xfd, 0x70, 0x07,
0xaa, 0xe9, 0x22, 0xf5, 0xd7, 0xb5, 0xdd, 0x62, 0x1d, 0xda, 0xe3, 0xbc, 0xac, 0x8b, 0xfb, 0x0d,
0x8c, 0x40, 0xa9, 0x07, 0x90, 0x16, 0x49, 0xb0, 0xc7, 0x78, 0x76, 0x84, 0x79, 0x70, 0x3b, 0x2a,
0xf8, 0x2c, 0x7d, 0x0e, 0x17, 0x73, 0x32, 0xf2, 0xa5, 0x66, 0x98, 0x50, 0x43, 0x63, 0xdb, 0x7d,
0x4c, 0xc7, 0x22, 0x0b, 0xd2, 0xd0, 0xef, 0xc4, 0x32, 0xfb, 0x9a, 0x06, 0xf9, 0x30, 0x06, 0x7f,
0xb2, 0xc7, 0xf5, 0x1c, 0x57, 0x1d, 0x9a, 0xfd, 0x4a, 0x80, 0x6f, 0x34, 0xb0, 0xe6, 0xb3, 0xeb,
0x45, 0xe8, 0xac, 0x8e, 0xea, 0x07, 0x43, 0x45, 0x4b, 0x92, 0xad, 0xee, 0xd2, 0xfd, 0x48, 0x5f,
0x08, 0x1f, 0x78, 0x56, 0xf9, 0x60, 0x98, 0x48, 0xe4, 0xe9, 0x26, 0x65, 0x67, 0xe4, 0xc4, 0x8d,
0xfe, 0x8c, 0x1d, 0xab, 0x6d, 0x43, 0x0d, 0xcd, 0x9d, 0xb5, 0xd2, 0xc3, 0xe5, 0xb0, 0x7c, 0x80,
0x8e, 0xfd, 0x05, 0x12, 0xa3, 0x85, 0xe3, 0x75, 0x56, 0x07, 0x7e, 0x7d, 0x42, 0xa1, 0x95, 0xdd,
0xe3, 0x9a, 0xd6, 0x47, 0xdd, 0x6f, 0xe9, 0x9f, 0x9f, 0x5f, 0x3a, 0x28, 0xda, 0x9a, 0x71, 0xf9,
0xcd, 0x39, 0x79, 0x1b, 0x00, 0x3b, 0xf7, 0x86, 0xc7, 0xb4, 0x49, 0x92, 0xb8, 0xd9, 0x83, 0x7c,
0xff, 0xa5, 0x59, 0xcc, 0x74, 0xa4, 0xb0, 0xb0, 0x3f, 0x4d, 0x55, 0x4b, 0xa3, 0x91, 0x60, 0x3b,
0xc4, 0x1b, 0x54, 0xe3, 0x93, 0xb5, 0xbf, 0x85, 0xb3, 0x06, 0xa3, 0xea, 0x44, 0xbe, 0x51, 0xe4,
0xab, 0x3f, 0x30, 0x46, 0x13, 0x1f, 0x6b, 0x9a, 0x63, 0x3d, 0x9f, 0x83, 0x7f, 0x54, 0x01, 0xa9,
0xf0, 0x11, 0xeb, 0x7c, 0xb1, 0xab, 0x46, 0x4f, 0xc7, 0x0b, 0x3b, 0xa6, 0xc6, 0x5f, 0x43, 0xcf,
0x3b, 0xfa, 0xf7, 0x02, 0xcf, 0x4c, 0xfb, 0x30, 0x9f, 0xeb, 0x1f, 0xc8, 0xb5, 0x04, 0x97, 0xec,
0x60, 0x7c, 0xd0, 0x4e, 0xeb, 0xa9, 0x9e, 0xdb, 0x28, 0x48, 0xa2, 0xa0, 0x1b, 0x05, 0xfa, 0x0b,
0x69, 0x3b, 0x8a, 0xfe, 0x2d, 0x8f, 0x97, 0x06, 0x44, 0x3e, 0x61, 0x4b, 0xed, 0x33, 0xcd, 0x10,
0xd5, 0x3f, 0x35, 0xe8, 0xb4, 0xb0, 0xfc, 0x8c, 0x6e, 0xe7, 0x11, 0xbc, 0x8e, 0x0c, 0xbe, 0x11,
0xdb, 0xd2, 0x50, 0x96, 0x2d, 0xea, 0x3a, 0x19, 0x4b, 0x6f, 0xe4, 0x42, 0x6e, 0xa6, 0x12, 0xd3,
0x17, 0xa3, 0x7f, 0xcc, 0x27, 0xde, 0x26, 0x2a, 0xe6, 0x2c, 0xeb, 0xd0, 0x81, 0x23, 0xd5, 0x0e,
0x73, 0xda, 0x77, 0x3e, 0x84, 0x5b, 0x8b, 0xc5, 0x57, 0xeb, 0x3c, 0x7c, 0xaa, 0xc6, 0xd9, 0xcd,
0x3f, 0xb6, 0xe8, 0x4c, 0x72, 0xec, 0x68, 0x9f, 0x37, 0xf4, 0x1d, 0x86, 0x35, 0x36, 0x41, 0xfd,
0x00, 0x60, 0x33, 0x4b, 0xce, 0x9d, 0x73, 0xab, 0x1b, 0x1f, 0xcf, 0xcd, 0x66, 0x13, 0xd0, 0x5c,
0xef, 0x9b, 0xdd, 0xb1, 0x6b, 0xa0, 0x07, 0xe7, 0xdc, 0xed, 0x13, 0x6b, 0x91, 0xa2, 0x6d, 0x3a,
0xfb, 0xd5, 0xec, 0x3e, 0xd8, 0xc5, 0x5d, 0x4f, 0x72, 0x03, 0xf1, 0xc3, 0x7d, 0x8f, 0x4f, 0x59,
0x37, 0xa6, 0x39, 0x38, 0x3c, 0xdf, 0x93, 0xb3, 0xba, 0xc8, 0xfc, 0x90, 0x3c, 0x91, 0xed, 0x08,
0xc2, 0xab, 0xfe, 0xf2, 0x89, 0x27, 0xa5, 0x41, 0x28, 0xe4, 0xad, 0x1f, 0xa9, 0x60, 0x0f, 0x47,
0x72, 0xf3, 0x80, 0x2c, 0x20, 0x27, 0xef, 0xfd, 0x5e, 0x58, 0xa6, 0x43, 0xe4, 0x72, 0x08, 0x5c,
0x3a, 0x01, 0x19, 0xfe, 0x78, 0x7f, 0x22, 0x45, 0xaf, 0x75, 0x32, 0xbb, 0x29, 0x59, 0x78, 0x02,
0x04, 0x4f, 0xfc, 0xe0, 0x1a, 0x5e, 0x62, 0x28, 0x7e, 0x3e, 0x14, 0x3b, 0x03, 0x9f, 0x3d, 0x35,
0x05, 0x42, 0x71, 0xf2, 0x88, 0x75, 0x5d, 0xf8, 0xc0, 0x5d, 0x2a, 0xad, 0x04, 0x1a, 0xfd, 0xad,
0x5b, 0xe4, 0x49, 0x00, 0xed, 0xb4, 0xcc, 0x94, 0x18, 0x26, 0xdc, 0x39, 0x7b, 0x74, 0x19, 0x5a,
0x2f, 0x04, 0x6e, 0x25, 0x79, 0x62, 0xa2, 0xc5, 0x15, 0x26, 0x5a, 0x42, 0xbc, 0xea, 0x7e, 0xd3,
0xd3, 0x1f, 0x26, 0x6a, 0xd0, 0x70, 0xf2, 0xb8, 0x98, 0xa7, 0x60, 0xd7, 0xec, 0xe3, 0x83, 0x26,
0x7d, 0xd0, 0xef, 0x02, 0x60, 0x94, 0x7b, 0xb7, 0x24, 0x10, 0x76, 0x45, 0x8f, 0x57, 0xee, 0xc6,
0xa2, 0x5e, 0xfd, 0xdc, 0x51, 0xbb, 0x11, 0xf8, 0x8e, 0x35, 0x8e, 0xe1, 0xda, 0x0e, 0xe5, 0xb5,
0x46, 0xb6, 0x3b, 0x84, 0x97, 0xf0, 0xd2, 0x63, 0xa9, 0xbd, 0x59, 0x33, 0x53, 0xae, 0x11, 0xbe,
0x49, 0xe7, 0x7c, 0xb4, 0xe4, 0x58, 0x24, 0x95, 0x3d, 0x45, 0x6e, 0xc7, 0xc4, 0x75, 0x11, 0xa0,
0xf1, 0x3c, 0xa0, 0xdf, 0x75, 0x62, 0xfa, 0x5d, 0x4d, 0x31, 0xb5, 0x7e, 0x46, 0xc7, 0xc4, 0x97,
0xd1, 0x31, 0x4c, 0x3e, 0x45, 0x4e, 0x07, 0x72, 0x50, 0xb0, 0x0e, 0x6e, 0xb3, 0x7c, 0x55, 0xb2,
0x35, 0x8b, 0xef, 0x27, 0xd4, 0xf3, 0xf2, 0x9d, 0xcd, 0x38, 0x51, 0x7d, 0x56, 0x07, 0x07, 0x00,
0x34, 0xe9, 0x9a, 0x95, 0xcb, 0x93, 0x5d, 0xb7, 0x65, 0x2d, 0xf3, 0x39, 0x4c, 0x45, 0x5d, 0x1e,
0x1c, 0x5d, 0x7f, 0x90, 0x43, 0xba, 0x26, 0x77, 0x49, 0xb4, 0xef, 0xc4, 0xa1, 0x7d, 0x37, 0xf4,
0xb3, 0x95, 0x3d, 0x75, 0x0e, 0x3e, 0xed, 0x7b, 0x3d, 0x6e, 0x6e, 0x64, 0x95, 0x3c, 0xab, 0x4d,
0x2b, 0x79, 0x42, 0x01, 0xd1, 0x10, 0xe5, 0x78, 0xf0, 0x86, 0x4d, 0x3c, 0x7b, 0xa9, 0x1a, 0x21,
0xba, 0xb6, 0xc9, 0x3b, 0xea, 0xfa, 0xbd, 0x1a, 0x45, 0x99, 0xf8, 0xe3, 0xa2, 0xec, 0x13, 0xa5,
0xf4, 0x70, 0x83, 0x59, 0x58, 0x67, 0xca, 0x2b, 0x4f, 0xfa, 0x21, 0x0f, 0xb3, 0x73, 0x67, 0xfa,
0xbd, 0xc3, 0x83, 0x2e, 0xcd, 0x9d, 0x99, 0x38, 0x72, 0x67, 0xfe, 0x90, 0x23, 0x9f, 0x51, 0x8e,
0xd8, 0x89, 0x41, 0x7e, 0x19, 0xbf, 0x35, 0x5b, 0xc9, 0x4d, 0xa8, 0x8f, 0x30, 0x7e, 0x3c, 0x7c,
0xea, 0x69, 0xac, 0x99, 0x6a, 0xb2, 0x9e, 0xdc, 0x54, 0x53, 0x9b, 0xb6, 0x90, 0xd0, 0x74, 0xd4,
0x67, 0x86, 0xcc, 0xba, 0x19, 0x4d, 0x6e, 0xd3, 0xc5, 0x1b, 0xe5, 0xd3, 0xc8, 0x33, 0xde, 0xe3,
0x8f, 0x83, 0xeb, 0x97, 0x1d, 0xe8, 0xe0, 0xac, 0xdd, 0x89, 0x71, 0xdf, 0xe1, 0x2d, 0xeb, 0xc2,
0xaa, 0x4f, 0x1d, 0x77, 0x1e, 0xbc, 0x96, 0x4f, 0xfb, 0x64, 0x6e, 0x5d, 0x69, 0xe8, 0xb5, 0xd6,
0xb1, 0x7b, 0x5c, 0xc7, 0x3e, 0x76, 0xe8, 0xd8, 0xdb, 0x55, 0xa9, 0xb7, 0xaf, 0x3c, 0xef, 0x66,
0x25, 0xc9, 0x15, 0x21, 0x69, 0x81, 0x51, 0x60, 0x1c, 0x7f, 0x6d, 0x57, 0x7a, 0xc9, 0xe5, 0x27,
0x52, 0x22, 0xab, 0x49, 0x9c, 0x2d, 0x16, 0x69, 0xf1, 0x97, 0x9f, 0x7e, 0xf8, 0x2b, 0x7e, 0xeb,
0x60, 0x74, 0xa7, 0xdf, 0x80, 0xde, 0x8e, 0x5a, 0xd8, 0xfb, 0x4c, 0x6f, 0x8c, 0x30, 0x59, 0x27,
0x09, 0x5b, 0xfd, 0x9b, 0x10, 0xf9, 0xf1, 0xf1, 0x51, 0x73, 0xe0, 0xb4, 0xf6, 0x58, 0xed, 0xd4,
0x1f, 0xac, 0x9d, 0xa6, 0xa3, 0x05, 0xfb, 0xec, 0xdf, 0x84, 0xc6, 0xd7, 0x53, 0x34, 0xd2, 0xe9,
0x75, 0x4f, 0x8f, 0x93, 0xc3, 0xde, 0x53, 0x49, 0xed, 0xed, 0x10, 0xf0, 0x96, 0xa4, 0xd7, 0xa6,
0xdc, 0x7f, 0x0b, 0xdc, 0xfc, 0xb8, 0x27, 0xd2, 0x53, 0x81, 0x32, 0x24, 0x3d, 0xd4, 0xf3, 0xf2,
0xbd, 0xa6, 0x04, 0x4c, 0x95, 0x71, 0x56, 0x45, 0x2b, 0xef, 0x12, 0x75, 0xf8, 0xe8, 0xdf, 0x80,
0xa8, 0x60, 0x1f, 0xe7, 0xf4, 0xf3, 0x35, 0xfb, 0x2f, 0xfe, 0x0d, 0x8b, 0x44, 0xda, 0x18, 0x10,
0x2f, 0x6f, 0xeb, 0x07, 0x20, 0x73, 0x7d, 0xf0, 0x57, 0xe8, 0x06, 0x1e, 0x05, 0xe4, 0x60, 0xee,
0xbf, 0xd8, 0xdb, 0x2b, 0xc7, 0xf9, 0x92, 0xdf, 0x38, 0x3c, 0x48, 0x80, 0x0f, 0x7b, 0x3f, 0x4b,
0xb1, 0x71, 0xf6, 0x64, 0x1b, 0x07, 0x48, 0xa0, 0xcf, 0xb4, 0xa3, 0x2f, 0xca, 0x71, 0x2d, 0x84,
0x50, 0x5d, 0x3e, 0x2f, 0xa1, 0x15, 0xcf, 0xcf, 0xc6, 0xbf, 0x39, 0x01, 0xf7, 0x2f, 0xeb, 0x9e,
0x20, 0xd7, 0xf7, 0xe7, 0x31, 0x2f, 0x11, 0x71, 0xae, 0xf0, 0x06, 0x71, 0xb4, 0xe0, 0x6f, 0x12,
0xf5, 0xba, 0x4f, 0xc1, 0xff, 0x0b, 0xff, 0x05, 0x11, 0xcc, 0x76, 0x9b, 0x18, 0xa6, 0xae, 0x81,
0x50, 0x25, 0x3d, 0x51, 0x43, 0x6d, 0xbd, 0x55, 0xb2, 0x59, 0x9c, 0xb2, 0x76, 0x78, 0xab, 0x32,
0x5e, 0x22, 0xcb, 0xab, 0x31, 0x7e, 0x64, 0xe4, 0x8f, 0xd7, 0x24, 0xb4, 0x46, 0x92, 0x6f, 0xd2,
0xed, 0x1d, 0x68, 0xbc, 0x69, 0x87, 0xc6, 0x34, 0x29, 0x05, 0x5f, 0x8d, 0x80, 0x35, 0xa8, 0xe9,
0x82, 0xea, 0xf0, 0x91, 0xaf, 0x42, 0x1e, 0x17, 0xa5, 0x05, 0xae, 0x57, 0xf9, 0xe9, 0x3a, 0x42,
0x4a, 0x35, 0x5f, 0x93, 0x52, 0x44, 0x03, 0xaf, 0x23, 0xa0, 0x34, 0xfa, 0xdd, 0xf7, 0x69, 0x91,
0xdf, 0x0c, 0x09, 0x88, 0xd0, 0x01, 0xac, 0xa3, 0xf4, 0x1c, 0xd0, 0xc8, 0xaa, 0xf2, 0xc9, 0x0f,
0xef, 0xf1, 0x76, 0x9e, 0x6c, 0xfa, 0xa5, 0x6a, 0xff, 0xa7, 0x6c, 0xd4, 0xd0, 0xeb, 0x8e, 0x97,
0x0d, 0xc8, 0x36, 0xcd, 0x17, 0x3d, 0xea, 0xec, 0x59, 0x76, 0x5a, 0x4f, 0xfa, 0x27, 0x27, 0x47,
0xfa, 0xd3, 0xf3, 0x6b, 0x1f, 0xf0, 0xb6, 0x83, 0xfa, 0x0f, 0x6d, 0xd2, 0x3d, 0x38, 0x39, 0xa4,
0xba, 0x84, 0xc1, 0x1b, 0xa8, 0xe8, 0xfd, 0x6c, 0xfc, 0xc2, 0xc6, 0x8b, 0x9f, 0x8f, 0x3d, 0x91,
0xb1, 0xa8, 0x1f, 0x96, 0x47, 0x47, 0xcd, 0x0c, 0xc3, 0xb1, 0x2d, 0xf4, 0x2d, 0x18, 0x91, 0xc5,
0x1a, 0x02, 0x47, 0x05, 0xdc, 0xac, 0x52, 0xf4, 0x0e, 0x07, 0xfd, 0x7e, 0x47, 0x7e, 0xc6, 0xac,
0xee, 0x26, 0x47, 0x83, 0x1a, 0xd1, 0x6d, 0xa3, 0x46, 0xe8, 0xb7, 0x73, 0x7b, 0x8f, 0x0a, 0x5f,
0x19, 0x37, 0x46, 0x92, 0x27, 0xba, 0x31, 0x92, 0x3c, 0xe6, 0xc6, 0x48, 0x12, 0xfa, 0xbe, 0x66,
0xa5, 0x8e, 0xe0, 0xba, 0x31, 0xc2, 0xf2, 0x1e, 0xc8, 0xd3, 0x95, 0x19, 0xfa, 0x48, 0x4d, 0xf2,
0xd3, 0x06, 0x77, 0xbb, 0x53, 0xad, 0x09, 0x2a, 0xae, 0x53, 0xe9, 0x37, 0x55, 0x03, 0x8d, 0xdd,
0xb5, 0x2f, 0xa7, 0x24, 0x6d, 0xa2, 0x59, 0xfd, 0xd6, 0x96, 0x76, 0x9f, 0xef, 0xdc, 0x49, 0x7b,
0x4b, 0x5b, 0x5d, 0x00, 0xa5, 0x02, 0x8f, 0xe1, 0xe4, 0x98, 0xff, 0x5e, 0xd2, 0xfe, 0x61, 0xa8,
0xcf, 0x78, 0xbf, 0xa6, 0xdb, 0x70, 0xc1, 0xa6, 0x2b, 0x53, 0xbf, 0xbb, 0x1a, 0x8c, 0xc6, 0x2b,
0xcc, 0x89, 0xec, 0x99, 0xe8, 0x3d, 0x7b, 0x6a, 0xcf, 0x27, 0x53, 0x49, 0x5d, 0x3e, 0x59, 0x2e,
0x73, 0xfe, 0x2e, 0xb6, 0x31, 0x39, 0xba, 0xac, 0x71, 0xcb, 0x3a, 0xdb, 0xb7, 0xf0, 0xcc, 0xd6,
0x8c, 0xe3, 0x71, 0xce, 0x3a, 0x7b, 0x34, 0xf8, 0x67, 0xfd, 0x9e, 0xd8, 0xa8, 0x96, 0x52, 0xf5,
0xe1, 0x0c, 0x2b, 0x3e, 0x39, 0xbd, 0x54, 0x3d, 0xba, 0x06, 0x18, 0x1a, 0x52, 0x72, 0x81, 0x79,
0xcf, 0x6a, 0x38, 0x98, 0x93, 0x27, 0x8d, 0x1e, 0xfe, 0x4e, 0x6e, 0x6b, 0x75, 0x5b, 0x1c, 0x1a,
0x17, 0x34, 0x73, 0x39, 0x49, 0xfd, 0xab, 0x68, 0xda, 0x51, 0xb2, 0xb0, 0xe4, 0x85, 0xda, 0x6b,
0x4e, 0xb2, 0x5c, 0xdf, 0x27, 0x56, 0x78, 0x7d, 0x62, 0xfd, 0xcf, 0xe3, 0x13, 0xf3, 0x7e, 0x04,
0xca, 0x1d, 0x17, 0x52, 0xef, 0xb8, 0xd1, 0x20, 0xc5, 0xe1, 0x71, 0xf7, 0xf0, 0xf0, 0xe8, 0xe0,
0xc0, 0xf7, 0x9a, 0x7f, 0xb2, 0xbd, 0x0b, 0x6b, 0xc9, 0x23, 0x2f, 0xac, 0x79, 0x44, 0xfc, 0x93,
0x5d, 0x58, 0x33, 0xf5, 0x5e, 0x53, 0x35, 0x78, 0xfc, 0xe5, 0xb6, 0x64, 0xa3, 0xcb, 0x6d, 0x6b,
0x4c, 0xcb, 0x73, 0x11, 0xae, 0xdb, 0x78, 0x13, 0xce, 0x1b, 0x8f, 0x16, 0xfb, 0xeb, 0xd9, 0xd8,
0xd6, 0x37, 0xe7, 0x48, 0x94, 0xc8, 0x1d, 0x45, 0xf5, 0xc4, 0x9b, 0x1f, 0x7b, 0x25, 0xae, 0xeb,
0x8c, 0x34, 0x77, 0xbd, 0x61, 0x5d, 0x6f, 0x20, 0xb8, 0xeb, 0xb8, 0x40, 0x97, 0xf8, 0xa2, 0xcb,
0x5d, 0xcf, 0x25, 0xba, 0xee, 0xfa, 0xb7, 0xe8, 0xba, 0xae, 0xe4, 0x83, 0xae, 0xe7, 0x1e, 0x5d,
0xd7, 0xbe, 0x48, 0xb7, 0x9e, 0x55, 0x0c, 0x62, 0xcd, 0xc1, 0x47, 0x14, 0x99, 0xa9, 0x97, 0x2a,
0x22, 0xf0, 0xe4, 0x30, 0x39, 0x7d, 0x32, 0xe3, 0xf9, 0x0f, 0xcd, 0xe6, 0x77, 0xae, 0xd9, 0x6c,
0xea, 0xa2, 0xd0, 0x0f, 0xb7, 0x67, 0x9d, 0xbe, 0xb3, 0x9d, 0x38, 0xcf, 0x76, 0x62, 0x9e, 0x6d,
0x5d, 0x52, 0x78, 0xbc, 0x8a, 0xba, 0xc8, 0x70, 0x47, 0xca, 0x13, 0x93, 0xff, 0xb7, 0x60, 0x1b,
0x89, 0xcd, 0x36, 0xf6, 0xbc, 0x6c, 0x23, 0x31, 0xd8, 0x46, 0xbb, 0x69, 0x68, 0x8a, 0x52, 0x4f,
0xcb, 0x08, 0xaf, 0x7a, 0x2d, 0xb9, 0x8c, 0x86, 0xca, 0x75, 0xf3, 0x92, 0x92, 0xc6, 0x0c, 0xa4,
0x64, 0xa3, 0x5c, 0xa3, 0x4d, 0x3d, 0x58, 0x8d, 0xea, 0x71, 0xb3, 0x6a, 0x52, 0x27, 0x6e, 0x9d,
0x56, 0xa5, 0x7b, 0xa7, 0x1e, 0xe1, 0x22, 0xd3, 0x5d, 0x2c, 0xaa, 0x7c, 0xa5, 0x79, 0x3e, 0xe1,
0xeb, 0x3c, 0x9f, 0xa7, 0xa3, 0xed, 0x7c, 0x3c, 0xab, 0xd6, 0x21, 0xd2, 0xb0, 0x5e, 0x8d, 0x12,
0x9e, 0xde, 0x6b, 0xb7, 0xf1, 0x8d, 0x6e, 0xcd, 0x44, 0x99, 0x84, 0xde, 0x6b, 0xa4, 0x7c, 0xcc,
0xa4, 0x85, 0x65, 0xe2, 0xf2, 0x10, 0xfa, 0xe0, 0xf5, 0xb6, 0x1a, 0xc0, 0xec, 0x1d, 0xd0, 0xef,
0x34, 0xd3, 0xb4, 0x7a, 0xc2, 0xc6, 0x30, 0xab, 0xbe, 0x40, 0xf9, 0xdd, 0xf8, 0x3d, 0x04, 0xcb,
0xfd, 0xe8, 0x0a, 0x49, 0x8a, 0x8f, 0xa8, 0xd7, 0x47, 0x23, 0xa1, 0x99, 0xb3, 0x9b, 0x11, 0x83,
0xb4, 0xa0, 0x35, 0x85, 0x1f, 0xcd, 0x6f, 0xb8, 0x77, 0xdc, 0x93, 0xcb, 0x8b, 0x21, 0x77, 0xad,
0x62, 0xd8, 0x9d, 0x0f, 0x0e, 0x0a, 0x8e, 0xc3, 0xe3, 0x7a, 0xd6, 0xf2, 0x12, 0xa3, 0x0b, 0x7a,
0xc7, 0x39, 0xe6, 0xda, 0x6f, 0xb0, 0x78, 0xa1, 0xcb, 0xc3, 0xe8, 0x1c, 0xc7, 0x6f, 0x03, 0x6f,
0x23, 0x4e, 0xc7, 0x87, 0x34, 0x25, 0x2d, 0x2f, 0xff, 0xf4, 0xd1, 0x39, 0x3e, 0x72, 0xe4, 0x28,
0xfb, 0x17, 0x88, 0xc9, 0x39, 0xc8, 0xbd, 0x29, 0x1c, 0x27, 0x09, 0xde, 0x13, 0x89, 0x33, 0x4f,
0x44, 0x43, 0x10, 0xce, 0xf5, 0x7a, 0x9c, 0xf3, 0xd8, 0x60, 0xee, 0x8c, 0x8b, 0xe4, 0x9a, 0xf6,
0xdc, 0x13, 0xce, 0x22, 0x0e, 0x09, 0x8c, 0xd2, 0xb9, 0x0d, 0x89, 0x75, 0xcc, 0x0a, 0xc3, 0x95,
0x61, 0xe7, 0xff, 0xe8, 0xb9, 0x40, 0x91, 0x91, 0x98, 0xe7, 0xfa, 0x3e, 0x36, 0xf3, 0x80, 0x24,
0x3d, 0x30, 0x57, 0x92, 0xd3, 0xde, 0x3a, 0xe4, 0xea, 0x46, 0x12, 0x3d, 0x54, 0x02, 0x4b, 0xaf,
0x82, 0x8b, 0x97, 0xa0, 0x09, 0xd1, 0x7f, 0x2f, 0x83, 0x81, 0x23, 0x71, 0xf8, 0x29, 0xe2, 0x73,
0xae, 0xb9, 0x6d, 0x3d, 0x4c, 0xb7, 0xe6, 0x20, 0xeb, 0xca, 0xfd, 0x35, 0xb8, 0x6e, 0xeb, 0xc8,
0x9c, 0x29, 0x03, 0xf9, 0xbd, 0x3b, 0x57, 0x26, 0x0f, 0xe6, 0x44, 0x69, 0x0f, 0xde, 0xa6, 0xa3,
0x89, 0x37, 0x2a, 0x87, 0x95, 0xad, 0x02, 0x73, 0x57, 0xf9, 0xe4, 0xde, 0xfc, 0xed, 0xeb, 0x88,
0x33, 0x68, 0x7d, 0x25, 0xcd, 0x7a, 0x03, 0x8d, 0x7e, 0x14, 0xe0, 0x2f, 0xe4, 0x55, 0x42, 0x6e,
0x3b, 0x1f, 0x38, 0x03, 0x4d, 0x47, 0xaa, 0x01, 0x42, 0x05, 0x2a, 0x7d, 0xcc, 0xb0, 0x8d, 0xc0,
0xa7, 0x2d, 0x7d, 0x9d, 0x0d, 0xb1, 0xef, 0x02, 0xdb, 0x24, 0xf9, 0xd5, 0x3e, 0x4e, 0xe1, 0xaf,
0x36, 0xd0, 0xe5, 0xbf, 0x3a, 0x11, 0x4b, 0x05, 0xb0, 0x1f, 0xe6, 0x95, 0xc6, 0x00, 0x75, 0x78,
0x72, 0x29, 0x86, 0xd3, 0xe9, 0x3f, 0x3e, 0xde, 0xf9, 0x88, 0x68, 0xa7, 0x15, 0xeb, 0x34, 0xdd,
0xa0, 0x9f, 0x37, 0xce, 0x59, 0x1b, 0xdb, 0x23, 0x2f, 0x68, 0xaa, 0xe1, 0x3d, 0x92, 0x6c, 0xa8,
0x44, 0xc3, 0x70, 0x97, 0xf4, 0xd7, 0x1a, 0xa1, 0x60, 0xbd, 0x6f, 0xc3, 0x78, 0xa3, 0x78, 0x1e,
0xda, 0xe8, 0xf8, 0x88, 0xa6, 0x39, 0xc2, 0x47, 0x4e, 0xac, 0x36, 0x5d, 0x2c, 0xf8, 0x84, 0x11,
0x4b, 0xf6, 0x70, 0x28, 0xcc, 0x5f, 0x7b, 0x3b, 0xd4, 0x60, 0x40, 0x8f, 0x49, 0x48, 0xf9, 0x09,
0x81, 0x71, 0x67, 0x4f, 0xaf, 0xf1, 0x13, 0xd4, 0x74, 0x42, 0x88, 0x05, 0x75, 0x42, 0x26, 0x63,
0x7b, 0xd4, 0x84, 0x10, 0x18, 0x9f, 0x50, 0xbf, 0xe5, 0x84, 0x90, 0xcc, 0xd4, 0x09, 0x99, 0xdc,
0xf4, 0x51, 0x13, 0x52, 0xbe, 0xc9, 0x90, 0x24, 0x4f, 0x11, 0xdf, 0xa3, 0xb3, 0xf7, 0xe5, 0xf6,
0xd1, 0x5a, 0xb2, 0xe9, 0xad, 0xde, 0x7a, 0x26, 0xc4, 0xa2, 0x7b, 0x99, 0xc5, 0x83, 0xd1, 0xa4,
0x8e, 0x84, 0x03, 0x5a, 0x1d, 0x1c, 0x49, 0xad, 0xbe, 0x23, 0xe4, 0x19, 0xd0, 0x0e, 0x20, 0xb2,
0x55, 0x24, 0xde, 0xf5, 0xe1, 0xb6, 0x3f, 0x51, 0x7c, 0x93, 0x92, 0xeb, 0xf6, 0x53, 0x1c, 0xeb,
0x64, 0xaf, 0xb2, 0x29, 0x1e, 0x9f, 0xa4, 0x81, 0x79, 0xd3, 0xfe, 0x52, 0xaa, 0x9a, 0xd4, 0x71,
0xe5, 0xe5, 0x4a, 0xf1, 0x72, 0x7e, 0x7f, 0x5b, 0xd6, 0x98, 0x32, 0x8f, 0xc8, 0x5d, 0xfc, 0x2f,
0x60, 0x93, 0xb9, 0x75, 0x91, 0x26, 0xb3, 0x4c, 0xd3, 0x46, 0x3c, 0x96, 0x99, 0x43, 0x63, 0xd9,
0xc0, 0x38, 0xf3, 0xa9, 0x35, 0xb0, 0xed, 0xbe, 0x93, 0xd7, 0x44, 0x13, 0x3e, 0x73, 0x68, 0xb3,
0x67, 0x4e, 0x7b, 0x47, 0xc7, 0x3a, 0xc9, 0x78, 0xa7, 0xf5, 0x08, 0xa3, 0x68, 0xbd, 0x78, 0x15,
0x97, 0x5c, 0x07, 0xdd, 0x53, 0x1a, 0x7b, 0xb2, 0xc4, 0x22, 0x7b, 0x28, 0xfc, 0x93, 0x4b, 0x4b,
0xc7, 0xd3, 0xdf, 0x0d, 0x12, 0xbc, 0xd5, 0x87, 0x67, 0xcd, 0xd8, 0xff, 0xa7, 0x30, 0xc2, 0x95,
0x04, 0x02, 0xbd, 0xaf, 0x6a, 0x94, 0x2b, 0x8d, 0xb6, 0x65, 0xa7, 0xbb, 0x52, 0x17, 0x4e, 0x4f,
0x0e, 0x0f, 0x4f, 0x8f, 0x8f, 0x7b, 0xdd, 0x06, 0xd6, 0xe6, 0x4c, 0x6c, 0xa8, 0xd1, 0xf2, 0xd7,
0xca, 0x6a, 0x78, 0x5c, 0x4e, 0x83, 0x4b, 0x95, 0xff, 0xd7, 0xcd, 0x67, 0xf8, 0x0c, 0xd9, 0x0c,
0x2e, 0x51, 0xbe, 0x85, 0x94, 0x86, 0xcf, 0x91, 0xd0, 0xd0, 0x82, 0xc3, 0x31, 0x55, 0xf8, 0x04,
0xbd, 0x55, 0xc8, 0xe1, 0x2c, 0x3d, 0x9b, 0x72, 0xb8, 0x4f, 0xaf, 0x7e, 0xdb, 0x1c, 0xae, 0xc9,
0x24, 0x78, 0x04, 0x16, 0x98, 0x0c, 0xea, 0x75, 0x0f, 0xc8, 0xd3, 0x6f, 0xb6, 0x72, 0x4f, 0xb1,
0xf0, 0xe9, 0x75, 0x7e, 0x1b, 0x0b, 0x4d, 0x76, 0xc8, 0x13, 0xa5, 0xe8, 0x7b, 0x84, 0xb1, 0x74,
0xd0, 0xb5, 0x0b, 0x8b, 0x6e, 0x31, 0x28, 0xfa, 0x58, 0x7f, 0x63, 0xe3, 0x8a, 0xfe, 0x25, 0x42,
0xa5, 0x5b, 0x0d, 0x84, 0x92, 0x6f, 0x56, 0xad, 0xf1, 0x60, 0xf5, 0x66, 0x3e, 0x11, 0x67, 0x58,
0x73, 0x9d, 0xc0, 0x6b, 0xbd, 0x2f, 0x96, 0xbf, 0x24, 0xb6, 0x97, 0x84, 0x7b, 0x98, 0x85, 0x32,
0x8d, 0x82, 0xbd, 0x3d, 0xf6, 0x44, 0xea, 0xde, 0x5e, 0xb6, 0x00, 0x3a, 0xcc, 0xd0, 0x16, 0xd1,
0x43, 0x94, 0x54, 0x9f, 0x51, 0x9c, 0x72, 0x1f, 0xa1, 0x31, 0x71, 0x4e, 0x0e, 0x02, 0xf2, 0x3f,
0xf2, 0xd8, 0x2b, 0x42, 0x20, 0x8a, 0x40, 0xf0, 0x00, 0xbf, 0x19, 0x58, 0xad, 0x13, 0x7f, 0x83,
0xcc, 0x57, 0x4f, 0x42, 0xa9, 0xde, 0xce, 0x34, 0xd2, 0xaa, 0x7c, 0xa2, 0xd9, 0xdb, 0x54, 0xe8,
0xd8, 0xc4, 0x65, 0xc8, 0x54, 0xdf, 0xba, 0xc6, 0xf8, 0x25, 0x45, 0xe4, 0x56, 0x8d, 0x00, 0xd1,
0x49, 0x25, 0x80, 0xbf, 0x8a, 0x91, 0x59, 0x02, 0xe3, 0x4c, 0xbc, 0x1d, 0xe9, 0x29, 0xa0, 0xfa,
0x1c, 0xe0, 0x9f, 0x22, 0xca, 0xdb, 0x5a, 0x64, 0x17, 0xa1, 0xa3, 0xd3, 0x3f, 0x19, 0x9e, 0x3c,
0x54, 0xdb, 0x8a, 0xc2, 0x02, 0xa5, 0xf1, 0x7f, 0xa4, 0xf7, 0xcc, 0x97, 0x58, 0x87, 0x77, 0xda,
0x4a, 0xeb, 0x54, 0x0f, 0xf9, 0x3d, 0x10, 0x1d, 0x71, 0x36, 0x92, 0xa3, 0xd5, 0x30, 0xd9, 0xb5,
0x1a, 0xbf, 0x5b, 0x10, 0xad, 0xb3, 0xb1, 0x35, 0x33, 0x9f, 0x70, 0xe7, 0xfe, 0xdf, 0xff, 0xfe,
0x3f, 0xbb, 0xb5, 0xed, 0xd0, 0xba, 0xa2, 0x0d, 0xff, 0x6f, 0x7d, 0x43, 0x6e, 0x74, 0xd5, 0xd3,
0x83, 0x54, 0xa9, 0x5b, 0x01, 0x7d, 0x2b, 0xf7, 0xb5, 0x7e, 0xaa, 0xba, 0x72, 0xde, 0x88, 0x01,
0x5d, 0x5e, 0xd6, 0x4f, 0x59, 0xb7, 0xa1, 0xda, 0xb6, 0x65, 0x0e, 0xd8, 0x36, 0x6d, 0x29, 0x91,
0xb7, 0x6c, 0xfc, 0xfd, 0x62, 0xb9, 0x6a, 0xdb, 0x16, 0xc8, 0xb1, 0x89, 0x80, 0x35, 0xdb, 0xa5,
0x3d, 0xd8, 0xf7, 0xf2, 0x24, 0xb5, 0x03, 0xaf, 0x58, 0x6c, 0xad, 0xfb, 0x18, 0xe6, 0x61, 0xcb,
0xd9, 0x49, 0xfb, 0xce, 0xd7, 0x81, 0x5a, 0x3b, 0x98, 0xb7, 0x32, 0xaa, 0xc6, 0x33, 0x61, 0x1f,
0xbc, 0xbd, 0x85, 0x41, 0xbe, 0x63, 0xa5, 0x20, 0x80, 0x85, 0xe4, 0xdd, 0x7f, 0xf1, 0x22, 0xf8,
0x13, 0xf9, 0x12, 0xd9, 0x47, 0x2e, 0x0e, 0x1e, 0x5e, 0xec, 0x2b, 0x6f, 0xa5, 0x03, 0xe5, 0xff,
0x99, 0xcb, 0x89, 0x73, 0x16, 0x9b, 0x90, 0x6f, 0x97, 0xec, 0xef, 0x07, 0x3f, 0x53, 0xe1, 0x00,
0xf5, 0xf2, 0xad, 0xeb, 0x67, 0x44, 0x8b, 0x8b, 0xb3, 0x92, 0xfc, 0x5f, 0x5c, 0xea, 0xc3, 0x67,
0x19, 0x66, 0xc0, 0x56, 0x82, 0xdd, 0xe7, 0xbc, 0xe8, 0x79, 0xb0, 0x48, 0xd3, 0x49, 0x19, 0x54,
0x79, 0x70, 0x95, 0x06, 0xa3, 0x45, 0x30, 0xc2, 0x1e, 0x02, 0xbe, 0x03, 0x18, 0x67, 0x74, 0x0a,
0xb0, 0x92, 0x73, 0xd2, 0x16, 0xd0, 0x34, 0x66, 0x86, 0x3a, 0x2a, 0x31, 0x5b, 0x64, 0xe4, 0x04,
0xf0, 0x07, 0xba, 0x49, 0x7c, 0x37, 0x2a, 0x16, 0x21, 0x9f, 0x26, 0x6d, 0xfd, 0x3c, 0xc8, 0x4a,
0x10, 0xad, 0xcb, 0x22, 0x1b, 0x8f, 0x90, 0x3c, 0x32, 0xbc, 0x44, 0x78, 0x9b, 0xaf, 0x8a, 0x20,
0x9f, 0x06, 0xcf, 0x29, 0xb7, 0x7c, 0xbe, 0xdb, 0x71, 0x3c, 0xfd, 0xed, 0xa4, 0x2e, 0x50, 0x9a,
0x9f, 0xd1, 0x4e, 0x9d, 0xc0, 0x18, 0xb5, 0x90, 0xe3, 0xe1, 0x7a, 0xa0, 0x31, 0x2c, 0x68, 0x05,
0x47, 0xfe, 0xb9, 0x0b, 0xd2, 0xf3, 0x5d, 0xed, 0xba, 0x9b, 0xe9, 0xfd, 0x0c, 0xce, 0xb9, 0x84,
0x8d, 0xcb, 0xfc, 0x26, 0x0d, 0xc7, 0x6a, 0x74, 0x09, 0xf6, 0x8f, 0x98, 0x45, 0x98, 0x7b, 0x58,
0x01, 0x61, 0x00, 0xd2, 0xf0, 0xdf, 0xc5, 0x3d, 0x93, 0x51, 0x01, 0xa8, 0x65, 0x65, 0x3a, 0x2a,
0x80, 0x94, 0xa8, 0x6e, 0x52, 0xea, 0x57, 0xdc, 0xc6, 0x4c, 0xa3, 0x7b, 0xb7, 0xa4, 0x82, 0x0c,
0x11, 0x2a, 0x25, 0x31, 0x08, 0xc1, 0x71, 0x4c, 0xbb, 0xff, 0x2c, 0x6c, 0x02, 0x51, 0xed, 0xbc,
0xac, 0xa7, 0xbe, 0x99, 0xa5, 0x3d, 0x16, 0xaf, 0x10, 0xea, 0xdf, 0xd3, 0x71, 0x5e, 0x4c, 0xbe,
0xa6, 0x49, 0xc5, 0xc1, 0x6f, 0xb0, 0x83, 0x37, 0x57, 0x30, 0xd5, 0xdf, 0x82, 0xf2, 0xfe, 0xe6,
0x0a, 0x5f, 0x31, 0x25, 0x8c, 0xef, 0x0d, 0x59, 0xf4, 0xd7, 0xb0, 0x96, 0x6f, 0xbe, 0xd1, 0x48,
0x9a, 0x62, 0xe3, 0xf5, 0x3d, 0xa0, 0x58, 0x7f, 0xe1, 0x5f, 0x33, 0x41, 0x60, 0xf0, 0x5b, 0xc4,
0xd4, 0x05, 0xd8, 0xca, 0xf9, 0x02, 0x76, 0x3c, 0xbc, 0xed, 0x70, 0xf5, 0x95, 0x54, 0xdc, 0x0a,
0xea, 0x21, 0xf6, 0x0f, 0x4d, 0x4f, 0xbe, 0xd5, 0xf2, 0x9d, 0xb1, 0x82, 0x36, 0xdb, 0xdd, 0xed,
0xc4, 0xff, 0xc8, 0x41, 0x49, 0xdf, 0x0d, 0xe4, 0x6e, 0x31, 0xcf, 0xc4, 0x68, 0x3e, 0x5e, 0xa1,
0xeb, 0xf3, 0xcf, 0xfa, 0xd2, 0xf5, 0x30, 0xa0, 0xaa, 0x86, 0x85, 0xbd, 0x5e, 0x64, 0x23, 0x4a,
0x2a, 0xd3, 0x7c, 0xbb, 0x41, 0xa7, 0x7e, 0x8b, 0xba, 0xa1, 0xb6, 0xe3, 0x84, 0x20, 0xd9, 0x6c,
0xcd, 0xdd, 0xd3, 0x73, 0xa8, 0x55, 0x25, 0xbb, 0x76, 0xf8, 0x8b, 0x31, 0x7e, 0xf7, 0x95, 0x38,
0x23, 0x74, 0x80, 0x98, 0x41, 0x50, 0x76, 0xf4, 0xc6, 0xd6, 0xf3, 0x7b, 0x38, 0x1f, 0xfd, 0x84,
0x1b, 0x50, 0x34, 0x8b, 0x0e, 0x08, 0x16, 0x3a, 0x90, 0x63, 0x8d, 0xc7, 0x8e, 0x22, 0xba, 0xc4,
0x93, 0x02, 0x5c, 0xf0, 0x36, 0x23, 0xce, 0x2c, 0x3c, 0x29, 0x19, 0x90, 0x12, 0xd0, 0xee, 0x02,
0x8e, 0x4a, 0x80, 0xec, 0xf2, 0x56, 0xfd, 0x26, 0xc7, 0x86, 0xcb, 0x89, 0x6f, 0x46, 0xcb, 0x10,
0xba, 0x21, 0x3a, 0xc3, 0x8f, 0x04, 0xf6, 0x00, 0x01, 0x47, 0x14, 0x3a, 0xf9, 0x3b, 0x78, 0xe8,
0xf8, 0x17, 0xcc, 0x95, 0x71, 0xc1, 0x23, 0x74, 0x4a, 0xa0, 0x0e, 0xff, 0xf7, 0x8a, 0x56, 0x09,
0x3b, 0x49, 0x54, 0xb0, 0x6f, 0xcc, 0xab, 0xa5, 0xbc, 0xe2, 0xfc, 0x9c, 0x69, 0xaa, 0xac, 0xfa,
0x95, 0xa2, 0x88, 0x5e, 0x84, 0xf2, 0x6f, 0x58, 0x08, 0x68, 0x0f, 0xf8, 0x0e, 0x57, 0x98, 0x23,
0xb8, 0x5c, 0x74, 0x25, 0xf5, 0x68, 0x49, 0x83, 0x51, 0xf5, 0xef, 0x4a, 0x6f, 0x66, 0x71, 0xf1,
0x44, 0xf3, 0x81, 0x0a, 0xb8, 0x7b, 0xe9, 0x5e, 0x80, 0xfe, 0xf1, 0x2e, 0xa4, 0xe1, 0xf4, 0x96,
0xfb, 0x3e, 0x35, 0x6a, 0x26, 0x4c, 0x31, 0x9f, 0x2b, 0x5f, 0xfd, 0x15, 0x3b, 0xac, 0x6d, 0x4d,
0x12, 0x69, 0x4a, 0xb6, 0x81, 0xa0, 0x90, 0x7d, 0xe3, 0x5c, 0x09, 0x3c, 0x6a, 0xbd, 0xbb, 0x91,
0x54, 0xe3, 0x25, 0x98, 0x57, 0xfc, 0xd3, 0xe8, 0xc1, 0x40, 0xf2, 0x22, 0xfb, 0x43, 0x0f, 0x5c,
0x84, 0x86, 0xf4, 0xaa, 0x19, 0xac, 0x67, 0x37, 0x42, 0x35, 0x57, 0x2c, 0x28, 0x0a, 0x00, 0xc6,
0x40, 0x00, 0xf3, 0x6d, 0xaa, 0xee, 0xab, 0x55, 0x70, 0x02, 0x67, 0xc3, 0xc2, 0x89, 0xa6, 0xea,
0x9a, 0x8f, 0x5a, 0x2b, 0x3a, 0xb3, 0x71, 0x22, 0x8a, 0x74, 0x39, 0x1f, 0x8d, 0xd3, 0x40, 0xc8,
0x41, 0x2a, 0xa9, 0xa6, 0xa3, 0xd5, 0xbc, 0x02, 0x41, 0x38, 0x1b, 0xe1, 0x5b, 0x93, 0x85, 0xfe,
0x48, 0x3b, 0x13, 0x1e, 0x71, 0xb6, 0x18, 0xcf, 0x57, 0x13, 0x9a, 0x21, 0x77, 0x41, 0x05, 0xcf,
0xa5, 0x1e, 0x54, 0xd0, 0x70, 0xda, 0xc7, 0x2d, 0x51, 0x4d, 0x8d, 0xda, 0xbb, 0x3a, 0xb5, 0x5d,
0x95, 0x01, 0x2f, 0x5b, 0xc7, 0x64, 0xb6, 0x34, 0x6f, 0x01, 0x86, 0x71, 0xf4, 0x02, 0x77, 0xa2,
0x00, 0x56, 0x1d, 0x68, 0xe0, 0x36, 0x5e, 0x5b, 0x1c, 0xc7, 0xa5, 0x70, 0xd7, 0xab, 0x0b, 0x25,
0x24, 0xaf, 0xbd, 0x6c, 0x6f, 0xe7, 0x9f, 0x79, 0x48, 0x10, 0xc8, 0x47, 0x25, 0x41, 0x54, 0x7d,
0x5a, 0x10, 0x9d, 0x50, 0x17, 0x7d, 0x74, 0xa7, 0x3d, 0xb7, 0x04, 0xed, 0x9e, 0x69, 0x05, 0x67,
0x8a, 0x5e, 0x54, 0x21, 0xc5, 0xff, 0x8c, 0xfc, 0x4f, 0x5d, 0x92, 0x10, 0x3b, 0x52, 0xbb, 0x62,
0x86, 0x1d, 0xcd, 0x63, 0x74, 0x5e, 0x1b, 0xd1, 0x91, 0x07, 0x07, 0x55, 0x35, 0x72, 0xe9, 0x28,
0xca, 0xc7, 0x57, 0xa4, 0xa0, 0x50, 0xe1, 0xb7, 0x05, 0xe7, 0x04, 0xf4, 0x6c, 0x93, 0x99, 0xf1,
0x3f, 0x6d, 0xaa, 0xa1, 0x53, 0xee, 0x98, 0x23, 0xb5, 0x9b, 0x20, 0x10, 0x4b, 0x2a, 0x22, 0x31,
0xd6, 0xe2, 0x3d, 0xd4, 0x40, 0xf7, 0x75, 0x03, 0x82, 0x60, 0xc6, 0x90, 0x42, 0x0e, 0x64, 0x50,
0x8d, 0x26, 0x4c, 0xe6, 0x07, 0x5d, 0x8c, 0x91, 0x48, 0x1f, 0xc7, 0x70, 0x8a, 0x4f, 0x09, 0x6c,
0xb9, 0x21, 0xfd, 0x2f, 0xff, 0x40, 0x3a, 0x11, 0x03, 0x7c, 0x0c, 0xd3, 0x09, 0x72, 0xc1, 0x38,
0x29, 0x0a, 0xde, 0x6a, 0x96, 0x95, 0xb1, 0xf6, 0x5c, 0x9b, 0x2e, 0xb1, 0x23, 0xcb, 0x85, 0xd2,
0x39, 0x6b, 0xa3, 0x28, 0xb9, 0x5b, 0x1d, 0x88, 0x78, 0x97, 0xa9, 0xbc, 0x9b, 0x0f, 0xbc, 0xd3,
0x78, 0xf3, 0xfa, 0xeb, 0x61, 0xdd, 0xe9, 0x37, 0x2e, 0x70, 0x71, 0x9d, 0xcf, 0xbb, 0x2e, 0xa6,
0x79, 0xaa, 0x77, 0xa7, 0x91, 0x24, 0x88, 0x54, 0x4b, 0x09, 0x25, 0xe8, 0xa2, 0x3c, 0x4c, 0xa9,
0x0c, 0x3f, 0xf3, 0xf7, 0x27, 0x77, 0x94, 0x43, 0x42, 0x19, 0x0a, 0x18, 0x8e, 0x1c, 0x83, 0xfe,
0x10, 0x1e, 0x6f, 0x4a, 0x24, 0xb8, 0x9b, 0x6a, 0x8d, 0x07, 0x0f, 0xc5, 0x00, 0xd6, 0x14, 0xe9,
0x61, 0x60, 0x50, 0x6b, 0x67, 0xd9, 0x37, 0x80, 0x38, 0x26, 0x08, 0x7c, 0x56, 0x42, 0xd2, 0xa7,
0x45, 0xbd, 0xa3, 0x31, 0xfe, 0xaf, 0x92, 0xa6, 0xb7, 0x29, 0xc5, 0x9f, 0x33, 0xac, 0x3f, 0x47,
0x13, 0x91, 0xb5, 0xe9, 0x04, 0x9e, 0xad, 0x91, 0x60, 0x62, 0x63, 0xb3, 0x28, 0x2c, 0x54, 0xa1,
0x6b, 0x00, 0xf5, 0x7b, 0x51, 0xc0, 0x3c, 0xa0, 0x1c, 0x0c, 0x51, 0xba, 0x35, 0x18, 0xd4, 0x49,
0x5a, 0x07, 0x25, 0x92, 0x8e, 0x54, 0x31, 0x9b, 0xa1, 0x0d, 0x48, 0xea, 0x80, 0x75, 0xc0, 0xfa,
0x91, 0xee, 0x6b, 0xe5, 0x10, 0x65, 0xa1, 0x0d, 0xf5, 0xf5, 0x7d, 0x0d, 0x44, 0x55, 0x91, 0x53,
0x81, 0xbd, 0xbe, 0xf7, 0x4c, 0xaf, 0x06, 0x96, 0xa1, 0x52, 0x5a, 0x73, 0xd3, 0x21, 0x9a, 0xc7,
0xb1, 0x06, 0xb0, 0xe3, 0xf0, 0x2a, 0xf0, 0xbd, 0xe7, 0x9a, 0x0c, 0x23, 0xbd, 0x21, 0x7e, 0xac,
0xea, 0x42, 0x83, 0xc3, 0x15, 0x12, 0x4c, 0x47, 0x04, 0x77, 0x0d, 0xd4, 0xc0, 0xd3, 0x35, 0x16,
0x81, 0x07, 0xee, 0x5d, 0x71, 0xcc, 0x4f, 0xb8, 0x41, 0xbc, 0x30, 0x0f, 0x22, 0xd3, 0xc3, 0xac,
0xcf, 0x93, 0x16, 0x5b, 0x04, 0xde, 0x00, 0xf5, 0x30, 0x92, 0xbe, 0x68, 0x85, 0xc8, 0x2d, 0x48,
0xaa, 0x72, 0x50, 0x07, 0xef, 0x28, 0x32, 0xbd, 0xd5, 0xfa, 0x2c, 0x99, 0x7a, 0xe1, 0xc0, 0x68,
0x33, 0xec, 0xe3, 0xc8, 0x74, 0x6e, 0xeb, 0x98, 0xf5, 0xc3, 0x66, 0x5a, 0x7f, 0x1d, 0xf0, 0x93,
0xc8, 0x72, 0x86, 0xeb, 0xd0, 0xb9, 0xe5, 0xa0, 0x81, 0x67, 0x1e, 0xf1, 0x1a, 0xc0, 0x87, 0x91,
0xe2, 0x36, 0xe7, 0x10, 0x59, 0x89, 0x0d, 0x0b, 0xbd, 0xe6, 0x35, 0xc0, 0x8e, 0x22, 0xd5, 0xb7,
0xae, 0x42, 0xc3, 0x22, 0x1b, 0x1c, 0xf7, 0xad, 0xd7, 0x80, 0x3c, 0x8e, 0x4c, 0x2f, 0xbc, 0x0a,
0x96, 0x17, 0xdb, 0xa0, 0xa9, 0x58, 0xa8, 0x01, 0x7c, 0x12, 0xe9, 0x4e, 0x7b, 0x15, 0x2c, 0x2d,
0xf4, 0x01, 0xad, 0x3d, 0x5b, 0xa7, 0x91, 0xe9, 0xe0, 0xb7, 0x01, 0x5b, 0x47, 0x56, 0x73, 0xf2,
0xd7, 0x31, 0xb0, 0x6e, 0x64, 0x47, 0x04, 0x04, 0x19, 0x68, 0x15, 0x86, 0x14, 0xd0, 0xe2, 0x02,
0x75, 0x23, 0x24, 0x91, 0x1d, 0x44, 0x10, 0x62, 0x41, 0xab, 0xf0, 0x8d, 0x80, 0xce, 0xc2, 0xba,
0x11, 0x7a, 0x91, 0x1d, 0x7a, 0xb0, 0x47, 0xd0, 0xb2, 0x6b, 0x8d, 0x11, 0x30, 0x06, 0x51, 0x37,
0x42, 0x3f, 0xb2, 0x03, 0x16, 0xf6, 0x08, 0x2c, 0xbf, 0xd5, 0x35, 0x02, 0xe5, 0xd5, 0x75, 0x43,
0x1c, 0x44, 0x8e, 0x38, 0x87, 0x35, 0x06, 0xad, 0xf1, 0x0c, 0x42, 0x22, 0x1e, 0x75, 0x63, 0x1c,
0x46, 0x76, 0x78, 0xc4, 0x1a, 0x82, 0x54, 0x78, 0x46, 0x00, 0x96, 0x5b, 0x07, 0xff, 0x28, 0x32,
0x43, 0x2a, 0x16, 0xf4, 0xbf, 0x4b, 0x45, 0xc8, 0x80, 0x8d, 0xaa, 0x5c, 0x1d, 0xf0, 0xe3, 0xc8,
0x8a, 0xc1, 0x58, 0xd0, 0xb1, 0xdc, 0x3f, 0xf5, 0xf7, 0xcd, 0x82, 0x2c, 0x39, 0x89, 0x7c, 0xe1,
0x1b, 0xd7, 0x52, 0xde, 0x3b, 0x05, 0x9c, 0x2b, 0x96, 0x53, 0x37, 0xe6, 0x69, 0xe4, 0x0b, 0xff,
0xb8, 0xc6, 0x74, 0x9f, 0x78, 0x5f, 0x2c, 0xa8, 0x4e, 0xc7, 0xe8, 0x46, 0x75, 0x21, 0x24, 0x6b,
0x6c, 0xa3, 0x49, 0xcd, 0x36, 0x36, 0xb2, 0xca, 0x5e, 0x12, 0x79, 0xe2, 0x50, 0xce, 0x2d, 0x75,
0x71, 0x4f, 0x96, 0x08, 0x50, 0xa7, 0x16, 0x27, 0x32, 0x5d, 0x40, 0x02, 0x66, 0x25, 0x7e, 0x6d,
0x3c, 0xa6, 0x8e, 0x41, 0xcb, 0x69, 0x8e, 0xa3, 0xca, 0x46, 0xde, 0x4f, 0x4f, 0x2a, 0xd6, 0xbf,
0xc7, 0xe3, 0x7d, 0xd0, 0x8d, 0xd4, 0xb0, 0x81, 0xe1, 0x6f, 0x77, 0x78, 0xdc, 0xf3, 0xb9, 0xf1,
0xf0, 0x42, 0x1d, 0x38, 0xd5, 0x52, 0xe4, 0x5f, 0x61, 0xe3, 0x75, 0x1d, 0xfd, 0x85, 0x06, 0x9f,
0xab, 0xa8, 0x66, 0xa5, 0x9e, 0xd4, 0x4e, 0xfa, 0xbe, 0x6a, 0xd7, 0xe7, 0xf9, 0xe8, 0xf5, 0x45,
0xc6, 0x2a, 0xa2, 0xd5, 0x10, 0x38, 0xaf, 0x82, 0x24, 0x18, 0x04, 0x5d, 0x74, 0x1b, 0xf3, 0xa5,
0x53, 0x77, 0xb1, 0xed, 0xb6, 0xa8, 0x9b, 0x19, 0x4f, 0x8b, 0x4f, 0x82, 0xdf, 0x02, 0xb3, 0x4d,
0xa2, 0xee, 0x13, 0x41, 0x05, 0xbe, 0x93, 0x95, 0xf4, 0x9c, 0x9b, 0xc5, 0xc2, 0x3a, 0x22, 0xd4,
0x45, 0xd1, 0x4a, 0xe1, 0x9b, 0x9f, 0xbc, 0xc1, 0x76, 0x7a, 0x98, 0x0a, 0x2f, 0xe4, 0x29, 0xce,
0x68, 0xe2, 0x1a, 0xc7, 0x04, 0x29, 0x25, 0xae, 0x83, 0xf5, 0x2c, 0x7f, 0xcd, 0x1b, 0x23, 0x31,
0x9c, 0x3c, 0xa7, 0x91, 0x19, 0x3c, 0x25, 0xee, 0x22, 0x01, 0x29, 0x2c, 0xda, 0x79, 0x01, 0x6b,
0x10, 0x68, 0x1a, 0x15, 0xd2, 0x42, 0x90, 0x39, 0xe3, 0xc2, 0xb0, 0x21, 0x1b, 0x7e, 0xdc, 0x3f,
0x3e, 0x48, 0x4e, 0xfa, 0x35, 0x08, 0x67, 0xb9, 0xc9, 0x12, 0x8d, 0xfa, 0x32, 0xb8, 0x2a, 0x2e,
0x8d, 0x07, 0x7c, 0xf0, 0xff, 0xe4, 0xd8, 0xeb, 0x41, 0x53, 0x2c, 0x4b, 0xfc, 0x9f, 0xe6, 0x3a,
0xd3, 0x9c, 0xd8, 0xd7, 0x18, 0xbb, 0xa4, 0xa1, 0x46, 0xe4, 0x2b, 0x2c, 0xfe, 0x58, 0xa4, 0xe5,
0x6a, 0x5e, 0x95, 0xfb, 0x37, 0x24, 0x70, 0x2d, 0x3f, 0x49, 0xc3, 0xe2, 0x20, 0xef, 0xc8, 0xa7,
0x6c, 0xf1, 0xf0, 0x94, 0xa1, 0x65, 0x62, 0xc5, 0xe9, 0x6d, 0x5a, 0xdc, 0x87, 0x53, 0xe3, 0x28,
0x8a, 0x98, 0x27, 0x1b, 0x2d, 0xc4, 0x1c, 0x60, 0xea, 0xaf, 0xea, 0x04, 0xe6, 0x38, 0xf4, 0x8b,
0x20, 0x69, 0xf9, 0x9e, 0xb6, 0x3d, 0xb7, 0x6c, 0xbc, 0x8b, 0x29, 0x7b, 0x7b, 0x68, 0x97, 0x84,
0x3b, 0x15, 0xf2, 0x9b, 0x5e, 0x6a, 0xb1, 0x4f, 0xbc, 0x18, 0xe0, 0xaf, 0x0e, 0x0b, 0xf6, 0xe5,
0x82, 0xb8, 0xca, 0xff, 0x8a, 0xd9, 0x74, 0xe9, 0x5f, 0xf3, 0xbb, 0xb4, 0x78, 0x83, 0xf7, 0x3e,
0x3a, 0x31, 0xf9, 0x82, 0xca, 0xbb, 0x69, 0x18, 0xba, 0x46, 0xf7, 0x76, 0xeb, 0x04, 0xdf, 0x60,
0x2e, 0xdd, 0x17, 0x8e, 0xa5, 0x33, 0xec, 0x86, 0x13, 0x60, 0xb0, 0x93, 0xfc, 0x6e, 0xe1, 0x5f,
0x38, 0x8d, 0x4a, 0xe2, 0xee, 0x09, 0x24, 0xe0, 0x45, 0x4e, 0x0f, 0x16, 0xb4, 0xd8, 0x2f, 0x8c,
0xc6, 0x83, 0x10, 0x55, 0x4e, 0x63, 0x64, 0x21, 0x66, 0xc5, 0xa9, 0xae, 0x2b, 0x28, 0x58, 0xe4,
0x95, 0x08, 0xde, 0xa1, 0x68, 0x00, 0x24, 0xc9, 0x59, 0xf8, 0x06, 0x0a, 0xe5, 0xc1, 0x54, 0x31,
0xaa, 0x40, 0xf6, 0xbd, 0x08, 0xb5, 0xf3, 0xaa, 0xa6, 0x13, 0x6c, 0x83, 0x6c, 0x38, 0x30, 0x1b,
0x2a, 0xe7, 0x56, 0xb9, 0x85, 0x4e, 0x29, 0x51, 0xa0, 0xca, 0xcd, 0xb0, 0x3b, 0x24, 0x78, 0x48,
0xa8, 0x9e, 0xd1, 0x2c, 0xfb, 0x32, 0x39, 0x66, 0xc8, 0x15, 0x91, 0x11, 0xe1, 0x04, 0x69, 0x5d,
0x2c, 0x46, 0x73, 0xe2, 0xd2, 0x45, 0x19, 0x98, 0xc2, 0x01, 0x25, 0xf1, 0x4c, 0x3c, 0x8a, 0x41,
0x8e, 0xc7, 0x59, 0x0a, 0x2a, 0x72, 0xc2, 0x17, 0x03, 0xed, 0x98, 0xc2, 0x24, 0xa3, 0x76, 0x10,
0x85, 0x4f, 0x01, 0x4f, 0xa7, 0x04, 0xca, 0x8b, 0x07, 0xdc, 0xf4, 0x56, 0x83, 0xdd, 0xc2, 0x0f,
0xce, 0xe9, 0xb2, 0x10, 0x21, 0x13, 0x42, 0x72, 0x91, 0x32, 0x39, 0xc6, 0x25, 0x9c, 0x70, 0x94,
0x60, 0x8e, 0x13, 0x8e, 0xc4, 0x5e, 0x87, 0xc6, 0x4d, 0xc2, 0x51, 0x14, 0x5c, 0x19, 0x6f, 0x1a,
0x11, 0x6f, 0x3e, 0xf3, 0x06, 0xc9, 0x6f, 0x67, 0x4a, 0x4f, 0xff, 0x28, 0x66, 0x18, 0x0a, 0xbe,
0x09, 0xae, 0xf8, 0xdf, 0xa2, 0xa5, 0x60, 0x8f, 0xce, 0x1e, 0x5f, 0x3b, 0x7a, 0xbc, 0x94, 0x5d,
0x4c, 0x6e, 0xd4, 0x55, 0xf6, 0x7b, 0x2d, 0x49, 0xa8, 0x7d, 0x08, 0xbb, 0x96, 0x35, 0x63, 0xca,
0xb5, 0x53, 0x04, 0xd2, 0xc0, 0x38, 0x25, 0xe5, 0x92, 0x64, 0x71, 0xa4, 0x0b, 0x94, 0x66, 0x20,
0x0a, 0xee, 0x48, 0x2a, 0x10, 0x7d, 0x91, 0x06, 0x38, 0x2b, 0x1b, 0x4c, 0x0f, 0xab, 0x99, 0x49,
0x23, 0x54, 0x26, 0x12, 0x07, 0x25, 0x0d, 0xe3, 0x94, 0xfa, 0xa5, 0x0a, 0x57, 0xd2, 0x42, 0x58,
0x2f, 0xcf, 0x74, 0xe5, 0x8d, 0xa1, 0x8c, 0x3f, 0x24, 0xc7, 0xc4, 0x95, 0xf2, 0x8b, 0x5e, 0x87,
0xf2, 0x38, 0xd7, 0x79, 0x39, 0xbb, 0x4b, 0xa3, 0x27, 0x3e, 0x88, 0xe4, 0x6d, 0x76, 0x93, 0x4a,
0xf9, 0x49, 0xee, 0x53, 0x29, 0xbf, 0xb9, 0xef, 0x40, 0x2d, 0x63, 0x37, 0x64, 0xac, 0x92, 0x54,
0x94, 0x19, 0x2a, 0x15, 0x1f, 0x5d, 0xb3, 0x8c, 0xed, 0x52, 0x72, 0xdd, 0xc8, 0x2a, 0x25, 0x29,
0xfa, 0x66, 0x29, 0x5d, 0xa8, 0x55, 0x4c, 0xec, 0x3c, 0xab, 0x14, 0xaf, 0x00, 0x99, 0x65, 0xe4,
0xb6, 0x8e, 0xa3, 0xa1, 0xb8, 0x43, 0xe4, 0xa8, 0x33, 0x57, 0xe9, 0xbd, 0xca, 0xe4, 0x1a, 0x4c,
0x47, 0x9a, 0x1a, 0x9b, 0x50, 0x36, 0x87, 0xdc, 0x7f, 0x52, 0x70, 0xa8, 0x52, 0x1c, 0x2f, 0xd7,
0xef, 0x53, 0x39, 0xc2, 0x07, 0xf9, 0x3c, 0x72, 0xfa, 0xec, 0x1d, 0xa5, 0xfa, 0xa4, 0x8c, 0x18,
0x04, 0x2f, 0x4e, 0xcd, 0xcd, 0x35, 0x50, 0xa4, 0x12, 0x98, 0xf4, 0x60, 0xeb, 0xbd, 0xa9, 0x5f,
0x53, 0xe9, 0xa1, 0xfc, 0x52, 0x7d, 0x8a, 0xfa, 0x18, 0xae, 0x32, 0xe6, 0xc1, 0x53, 0x07, 0x14,
0xaa, 0x97, 0x46, 0xe5, 0x54, 0x37, 0x13, 0x61, 0x1f, 0x62, 0x21, 0x89, 0x5e, 0x98, 0x7d, 0x2d,
0x08, 0xd8, 0x0e, 0xc4, 0xe9, 0x43, 0x1a, 0x51, 0x2d, 0xb9, 0xbd, 0x4a, 0xdc, 0xc4, 0x59, 0x38,
0x4c, 0xdc, 0xc5, 0x3d, 0x77, 0x71, 0x9f, 0x96, 0x5e, 0x6a, 0x39, 0xe8, 0xf4, 0x9b, 0x81, 0xef,
0xc9, 0x1d, 0x0e, 0xea, 0x6a, 0x02, 0x65, 0x2c, 0x5d, 0x4c, 0x78, 0x99, 0xf8, 0x2e, 0x32, 0xe7,
0x3e, 0x24, 0xa8, 0x53, 0xac, 0xc6, 0x55, 0x5e, 0x84, 0x39, 0x4b, 0x10, 0x12, 0x9c, 0xa9, 0x5c,
0x2d, 0xd5, 0xe4, 0x46, 0x58, 0x7b, 0x56, 0x85, 0xf2, 0x99, 0x83, 0x4c, 0x20, 0x65, 0x87, 0x75,
0x8d, 0x94, 0xdb, 0xdf, 0x2c, 0x05, 0x5e, 0x14, 0x59, 0x2f, 0x94, 0x88, 0x9a, 0x72, 0x34, 0x4d,
0x87, 0xa0, 0xb6, 0x0c, 0xd3, 0x7f, 0xae, 0x46, 0xf2, 0x65, 0xc8, 0x8f, 0xa6, 0x3d, 0x38, 0x08,
0x0e, 0x22, 0xf5, 0x15, 0x29, 0x28, 0xe8, 0xf7, 0x64, 0x09, 0x65, 0x5e, 0x50, 0x26, 0x8b, 0x24,
0x81, 0x41, 0xb1, 0x51, 0xfe, 0xfa, 0x7e, 0xa0, 0x8a, 0x56, 0xd1, 0x74, 0x10, 0xc8, 0x99, 0x59,
0x8c, 0x72, 0x10, 0x28, 0x03, 0x4a, 0xa1, 0xde, 0x57, 0x01, 0x09, 0x11, 0xdd, 0x4f, 0xcc, 0xb6,
0x94, 0xb0, 0xa1, 0x46, 0x5f, 0x08, 0x2d, 0x3b, 0x34, 0x5b, 0x53, 0x82, 0x86, 0x9a, 0x23, 0x13,
0xba, 0xa8, 0x39, 0x36, 0x6b, 0x18, 0xc1, 0x43, 0xd5, 0x89, 0xac, 0x62, 0x9c, 0x7b, 0x10, 0x1c,
0xea, 0x65, 0xc8, 0xbe, 0x07, 0xc1, 0x91, 0x5e, 0xc8, 0x79, 0xf8, 0x20, 0x38, 0xd6, 0x2b, 0xe8,
0xf1, 0x1f, 0x04, 0x27, 0xae, 0x62, 0x5c, 0xef, 0xa9, 0x32, 0x19, 0x8d, 0xa5, 0x03, 0x4a, 0x15,
0x04, 0xe9, 0x8c, 0x1d, 0xea, 0x12, 0x57, 0x1d, 0xb2, 0x77, 0xa8, 0xeb, 0xb9, 0xea, 0x90, 0xc9,
0x43, 0x5d, 0xdf, 0x51, 0x47, 0xb7, 0x0a, 0x2a, 0x0f, 0x1c, 0x95, 0x84, 0xe1, 0x43, 0xdd, 0xa1,
0xa3, 0x0e, 0xb6, 0x06, 0x6a, 0x8e, 0x1c, 0x35, 0xc8, 0xdd, 0xa0, 0xea, 0xd8, 0xdd, 0xe9, 0xbd,
0xd8, 0xee, 0xe4, 0xc4, 0xdd, 0x42, 0x22, 0x28, 0x39, 0x75, 0xb4, 0x30, 0xc4, 0x01, 0x50, 0x58,
0xd7, 0x33, 0x09, 0xbe, 0x01, 0xbd, 0x44, 0x68, 0x03, 0xa2, 0xa5, 0xf6, 0xa6, 0xaa, 0x7a, 0x1b,
0x99, 0x95, 0xc9, 0x90, 0xb5, 0xfa, 0xd2, 0xde, 0x8b, 0xa0, 0x2c, 0xc6, 0xfb, 0xdf, 0x2e, 0x97,
0x31, 0xbd, 0xf6, 0x05, 0x56, 0xe3, 0x22, 0x2d, 0x48, 0x3a, 0xee, 0xd5, 0x3d, 0x63, 0x19, 0xc1,
0x6d, 0x3f, 0x3e, 0x38, 0x8d, 0xbb, 0xc1, 0x8b, 0x7d, 0xf7, 0x9b, 0x43, 0xf2, 0x33, 0xef, 0xd6,
0x9b, 0x43, 0xb3, 0xa4, 0xcd, 0x8b, 0x2a, 0xb3, 0x44, 0x7d, 0x7e, 0x64, 0x96, 0x28, 0x4f, 0xa5,
0xcc, 0x92, 0x18, 0xcd, 0x49, 0x25, 0xad, 0xfb, 0x6d, 0x51, 0x80, 0x9a, 0x7d, 0x37, 0xcb, 0x80,
0xb7, 0xcd, 0xf3, 0xd1, 0x04, 0x73, 0x56, 0x27, 0xe9, 0x6d, 0x36, 0x4e, 0xcb, 0x5d, 0xfd, 0xc1,
0x8c, 0x59, 0xa2, 0xdc, 0x52, 0xdb, 0x65, 0xf7, 0xda, 0x66, 0xd7, 0xdd, 0x7c, 0x7a, 0xbc, 0xfb,
0x98, 0xa7, 0x2c, 0x66, 0xf6, 0xdb, 0xee, 0xf2, 0x21, 0x85, 0x01, 0xd8, 0x5f, 0xf9, 0x52, 0x08,
0x0b, 0xfd, 0x67, 0xae, 0xff, 0x5c, 0xe7, 0x66, 0xd4, 0x2c, 0x69, 0x7e, 0x34, 0x31, 0xe9, 0x9e,
0x0e, 0xf8, 0x27, 0x3c, 0xf7, 0x18, 0x4e, 0x30, 0x9b, 0x06, 0x69, 0xa3, 0xfe, 0xc3, 0x6f, 0xd6,
0xc6, 0x51, 0x6c, 0x99, 0x4f, 0x46, 0x89, 0x47, 0x9a, 0x68, 0x91, 0xd2, 0x88, 0xbe, 0xeb, 0xae,
0x0a, 0x9e, 0x50, 0x2c, 0x88, 0x78, 0x1d, 0x07, 0x81, 0x83, 0x9d, 0x9b, 0x6f, 0xb0, 0xab, 0xef,
0x25, 0x50, 0x5e, 0xbe, 0xff, 0x82, 0x2f, 0x84, 0x35, 0xe9, 0x5e, 0xba, 0xd2, 0x3f, 0x9b, 0x69,
0x8c, 0x2d, 0x78, 0xcc, 0xe5, 0x5f, 0xa8, 0x4c, 0x1e, 0x2d, 0x03, 0x2e, 0x96, 0xd6, 0x22, 0x0c,
0xf2, 0xce, 0xa5, 0x1b, 0x26, 0xde, 0x8b, 0x74, 0xbf, 0x67, 0xb8, 0xd9, 0x53, 0x1c, 0x34, 0xf9,
0x42, 0x19, 0x80, 0x3f, 0xd6, 0xc0, 0xb2, 0xba, 0xcd, 0xfb, 0xf4, 0xf4, 0xce, 0xb8, 0xc4, 0x5d,
0xd2, 0x71, 0x75, 0x8e, 0x99, 0x2b, 0xc9, 0x81, 0x66, 0x01, 0x52, 0x43, 0x54, 0x99, 0x6a, 0xab,
0x14, 0x2f, 0x46, 0x9c, 0x6d, 0xf3, 0xa6, 0xa7, 0x67, 0x6b, 0xb6, 0xfe, 0xde, 0xdb, 0xfa, 0xe3,
0xac, 0x73, 0xc3, 0x91, 0xdf, 0x27, 0xf4, 0x90, 0xc7, 0x23, 0x1f, 0x78, 0xb3, 0x4e, 0xec, 0xcd,
0x28, 0x5b, 0xd8, 0x47, 0xd5, 0xf7, 0x95, 0x79, 0xf5, 0x81, 0xb5, 0x86, 0x4f, 0x37, 0x5a, 0x1f,
0x23, 0xc7, 0x1c, 0x3b, 0x83, 0x7f, 0x44, 0xb6, 0x2c, 0xb8, 0x74, 0x02, 0x31, 0x9e, 0x17, 0x33,
0xf2, 0xc1, 0xe4, 0x64, 0x9d, 0x87, 0x80, 0x3e, 0x47, 0x63, 0x51, 0x2a, 0x67, 0x71, 0x8a, 0xbb,
0x42, 0xcf, 0xee, 0x4e, 0xcc, 0x74, 0x2d, 0x0f, 0x6e, 0x64, 0x66, 0x99, 0x3e, 0x11, 0xbe, 0x43,
0x9f, 0xe0, 0x3b, 0xee, 0xcd, 0x8c, 0x0c, 0xf7, 0x59, 0x15, 0x97, 0xf8, 0x7b, 0xd7, 0xfe, 0x72,
0xb4, 0xfd, 0x35, 0x49, 0x6c, 0xf8, 0x34, 0x02, 0x91, 0x42, 0xb6, 0x3f, 0x77, 0xd2, 0xfc, 0x0d,
0xeb, 0x1b, 0x36, 0x2b, 0xfd, 0xad, 0x83, 0x76, 0x1c, 0xf2, 0x82, 0x50, 0x87, 0xfa, 0x76, 0x04,
0x52, 0xf0, 0xb2, 0x48, 0x31, 0x3b, 0xbb, 0x64, 0x83, 0xf1, 0x7d, 0x6d, 0x38, 0x0e, 0x3b, 0x9b,
0xd0, 0x84, 0x83, 0xb1, 0x39, 0xba, 0x9f, 0x9f, 0x3b, 0xe7, 0xe4, 0xfa, 0xea, 0x41, 0x1d, 0xa6,
0xdc, 0xdf, 0x73, 0xb0, 0xd2, 0xa8, 0xd7, 0x7d, 0xda, 0xbc, 0xbc, 0x70, 0x4d, 0xee, 0xb2, 0xf1,
0xc1, 0x73, 0x4f, 0xbf, 0x8d, 0x9e, 0x41, 0x5f, 0xf3, 0x5c, 0x19, 0xf1, 0xa7, 0x67, 0xf2, 0x82,
0xb8, 0x63, 0x9e, 0x4f, 0x78, 0x54, 0xad, 0xb1, 0xf4, 0x47, 0x40, 0xfc, 0x4f, 0xe6, 0x7b, 0xbf,
0xcd, 0xf1, 0x85, 0xe7, 0x25, 0x02, 0xc9, 0x65, 0x5d, 0xdf, 0xc4, 0xf0, 0x1c, 0xa2, 0xad, 0xbe,
0xbd, 0x20, 0x70, 0xbc, 0x35, 0xd9, 0x5b, 0x07, 0xf1, 0xf1, 0xef, 0x08, 0x20, 0x42, 0xd6, 0xe3,
0x44, 0x93, 0x70, 0xcd, 0xcb, 0xfd, 0x6b, 0x5c, 0xed, 0xe7, 0x12, 0x4b, 0x48, 0x44, 0xa6, 0x10,
0x0c, 0xcb, 0xd5, 0x55, 0x39, 0x2e, 0xb2, 0x2b, 0x09, 0x8c, 0xb5, 0x44, 0x60, 0x2c, 0x3e, 0xfa,
0x8d, 0x95, 0xbb, 0x29, 0x54, 0xfb, 0x73, 0xde, 0xaa, 0x63, 0xe6, 0xe8, 0x8a, 0x5c, 0x58, 0xee,
0x0f, 0x16, 0xf8, 0x22, 0x97, 0x6c, 0x76, 0x27, 0x19, 0x5d, 0xc4, 0xae, 0xd0, 0xb7, 0xab, 0xac,
0x42, 0x5b, 0x7c, 0xf7, 0x3b, 0xab, 0x86, 0x5f, 0xc6, 0x22, 0x97, 0xf4, 0x62, 0xde, 0x53, 0x54,
0x03, 0x3e, 0x27, 0xcc, 0x37, 0xc9, 0x1a, 0xfd, 0xb2, 0xf7, 0x51, 0xb6, 0x13, 0x81, 0x34, 0xea,
0x86, 0x0c, 0x45, 0x44, 0x0b, 0xf3, 0xdf, 0x6f, 0xb2, 0x45, 0x76, 0xb3, 0xba, 0xf9, 0x73, 0x31,
0x22, 0xb8, 0xfd, 0x2e, 0xbb, 0xce, 0xf0, 0xb5, 0x83, 0x5e, 0xf0, 0xd0, 0x79, 0xb8, 0xf9, 0x45,
0xfa, 0x87, 0x84, 0x47, 0x02, 0x69, 0xcd, 0xa4, 0x0b, 0x63, 0x69, 0xd9, 0xc4, 0x5e, 0xd4, 0xf7,
0xdf, 0xf9, 0x96, 0x93, 0x4d, 0x3c, 0xa3, 0x88, 0x62, 0xed, 0xca, 0xda, 0x80, 0x25, 0x07, 0x5b,
0xb1, 0x56, 0x6a, 0x35, 0x07, 0x84, 0xfd, 0x92, 0x1b, 0x74, 0xf9, 0x34, 0xe8, 0xbe, 0xc4, 0xdc,
0xb2, 0xa4, 0xfb, 0xb2, 0xd7, 0x0d, 0xd2, 0x6a, 0x1c, 0xc7, 0xb1, 0x16, 0x60, 0x5f, 0xac, 0x6e,
0xf4, 0x2b, 0x99, 0xcc, 0xe8, 0x11, 0x59, 0x0f, 0x18, 0x5b, 0xd2, 0xb9, 0x2f, 0xeb, 0x06, 0xbd,
0x7e, 0x18, 0x55, 0xb3, 0x78, 0x3a, 0xcf, 0xf3, 0x02, 0x9b, 0xc1, 0x32, 0x02, 0x0c, 0x47, 0x5b,
0xcf, 0x2c, 0xe1, 0x18, 0x17, 0xf0, 0x1f, 0x23, 0x9a, 0xd8, 0x09, 0x94, 0x0a, 0xed, 0x3d, 0x24,
0x7a, 0x09, 0x0f, 0x76, 0x10, 0x87, 0x79, 0x01, 0x20, 0x1f, 0x30, 0xd6, 0xb8, 0xf7, 0x11, 0x21,
0xd1, 0x4b, 0x6d, 0xa4, 0xf0, 0x17, 0xf5, 0x85, 0x38, 0x86, 0x51, 0x68, 0xa1, 0x3c, 0x56, 0xe4,
0x11, 0x01, 0x80, 0xac, 0x69, 0xf6, 0xab, 0x11, 0x72, 0x63, 0x98, 0x60, 0x81, 0x3c, 0x38, 0x18,
0x45, 0x96, 0x96, 0x64, 0xee, 0x2c, 0x4e, 0xd5, 0x89, 0x8b, 0x74, 0xb2, 0x82, 0x33, 0x17, 0xe6,
0x20, 0xf7, 0x81, 0x0f, 0xde, 0x5e, 0x12, 0xc1, 0x14, 0xe6, 0x17, 0x1f, 0x70, 0x05, 0xb7, 0x51,
0x90, 0x77, 0x22, 0x23, 0x89, 0x44, 0x0f, 0x69, 0xdf, 0xd2, 0x90, 0x0a, 0x01, 0x7a, 0x66, 0xbb,
0x4f, 0x14, 0x0f, 0x3b, 0xa3, 0x0d, 0x05, 0xc3, 0xb7, 0x02, 0xbf, 0xa2, 0x3d, 0xbd, 0xbd, 0xfb,
0x06, 0x75, 0x29, 0xa0, 0x2f, 0x74, 0x51, 0xbc, 0x9c, 0xa7, 0xd3, 0x6a, 0xb7, 0x81, 0x38, 0x11,
0xbd, 0x36, 0x79, 0xfe, 0xa8, 0x95, 0xea, 0x04, 0x4a, 0x6e, 0x5c, 0xbe, 0x7a, 0x15, 0xec, 0xee,
0x6e, 0x83, 0x50, 0xf1, 0x2a, 0xe7, 0x34, 0x2b, 0x80, 0x45, 0x00, 0x29, 0x91, 0xfb, 0xc8, 0x53,
0xfa, 0x7b, 0x48, 0xc6, 0x81, 0xad, 0x16, 0xa4, 0x4c, 0xc1, 0x69, 0x14, 0x0b, 0xff, 0x16, 0x9b,
0x90, 0x2c, 0xf6, 0xa3, 0xf9, 0x0a, 0x64, 0x39, 0xaf, 0x62, 0xb0, 0x1a, 0x8b, 0x6f, 0xab, 0xd0,
0xa6, 0x57, 0xd2, 0xf2, 0xcb, 0x2f, 0xe9, 0x48, 0x17, 0xf8, 0x5f, 0x8b, 0x72, 0xb5, 0x2a, 0x37,
0xed, 0x62, 0x25, 0xf0, 0x9d, 0xff, 0x58, 0x2e, 0x79, 0xe8, 0xde, 0x49, 0xb0, 0xac, 0x99, 0x12,
0xe1, 0xdf, 0x90, 0x7e, 0x39, 0x5e, 0x0c, 0x02, 0x26, 0xc5, 0x5b, 0xa7, 0x60, 0x0a, 0xb5, 0x15,
0x09, 0xdf, 0xc6, 0x72, 0x6f, 0x25, 0xce, 0x9d, 0x4b, 0xf6, 0x11, 0xec, 0xcd, 0x68, 0x6c, 0xd3,
0xeb, 0x0f, 0xdf, 0xbe, 0xf1, 0x91, 0x2b, 0xb4, 0x7f, 0x2a, 0x3a, 0x85, 0xb3, 0xf6, 0xc9, 0xc8,
0x14, 0x96, 0x51, 0x4f, 0xa4, 0x7f, 0x10, 0xe7, 0xe3, 0x89, 0x53, 0x6c, 0xe8, 0x86, 0xb4, 0x59,
0x94, 0x65, 0x66, 0x13, 0xe7, 0xdf, 0xb5, 0x52, 0x9d, 0x3a, 0xb1, 0x47, 0x8d, 0xe2, 0x42, 0x1b,
0x60, 0x02, 0xd0, 0xe4, 0xf5, 0xcd, 0xee, 0x66, 0xea, 0x07, 0x42, 0xf8, 0x53, 0x72, 0xe3, 0x9e,
0x97, 0x56, 0xa1, 0x4d, 0xed, 0x42, 0x74, 0xbc, 0xac, 0x9b, 0xa0, 0xd2, 0xec, 0x71, 0xd3, 0x24,
0x09, 0x2c, 0x30, 0x03, 0x87, 0xae, 0x64, 0xd5, 0x18, 0x1a, 0x13, 0xab, 0xaf, 0xc5, 0x23, 0x6f,
0x84, 0x93, 0xbc, 0x29, 0x9b, 0xe6, 0x28, 0x02, 0x99, 0x7a, 0x2a, 0xc3, 0x9e, 0x50, 0x86, 0x99,
0x3e, 0xeb, 0x0a, 0x75, 0x7e, 0xbb, 0x5c, 0x6e, 0x27, 0xc4, 0xa9, 0x44, 0x38, 0x49, 0x64, 0x33,
0xe0, 0x21, 0x4d, 0xa1, 0xf1, 0x47, 0xa6, 0x0f, 0x2e, 0x0a, 0x8c, 0xc8, 0x25, 0x3d, 0x22, 0x76,
0x9c, 0x85, 0xbd, 0x87, 0x01, 0x53, 0xa5, 0x6e, 0x72, 0x98, 0x34, 0x73, 0x8f, 0x07, 0xcc, 0x4d,
0x3c, 0x08, 0x26, 0xf9, 0x78, 0x85, 0x40, 0x63, 0xf8, 0xf5, 0x96, 0x3a, 0x77, 0x5e, 0xdf, 0x7f,
0x3f, 0x09, 0x9f, 0x43, 0xb7, 0xe7, 0xf4, 0x28, 0x88, 0xf3, 0xc7, 0x30, 0x04, 0x35, 0x50, 0xf0,
0xd0, 0xc1, 0xe9, 0xff, 0x7f, 0xe6, 0xd3, 0x38, 0xbc, 0xa8, 0x37, 0x01, 0x00
};
void serveIndexJs(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "application/javascript", INDEX_JS, INDEX_JS_L);
response->addHeader(F("Content-Encoding"), "gzip");
request->send(response);
}

24
ui/.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

11
ui/index.html Normal file
View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>ESPresense: Devices</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

34
ui/jsconfig.json Normal file
View File

@ -0,0 +1,34 @@
{
"compilerOptions": {
"moduleResolution": "Node",
"target": "ESNext",
"module": "ESNext",
/**
* svelte-preprocess cannot figure out whether you have
* a value or a type, so tell TypeScript to enforce using
* `import type` instead of `import` for Types.
*/
"importsNotUsedAsValues": "error",
"isolatedModules": true,
"resolveJsonModule": true,
/**
* To have warnings / errors of the Svelte compiler at the
* correct position, enable source maps by default.
*/
"sourceMap": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"baseUrl": ".",
/**
* Typecheck JS in `.svelte` and `.js` files by default.
* Disable this if you'd like to use dynamic types.
*/
"checkJs": true
},
/**
* Use global.d.ts instead of compilerOptions.types
* to avoid limiting type declarations.
*/
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
}

1609
ui/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

27
ui/package.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "espresense-ui",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"@rollup/plugin-image": "^2.1.1",
"@rollup/plugin-node-resolve": "^13.3.0",
"@sveltejs/vite-plugin-svelte": "^1.0.1",
"mime": "^3.0.0",
"pascal-case": "^3.1.2",
"rollup": "^2.77.2",
"rollup-plugin-css-only": "^3.1.0",
"rollup-plugin-generate-html-template": "^1.7.0",
"rollup-plugin-svelte": "^7.1.0",
"svelte": "^3.49.0",
"vite": "^3.0.0"
},
"dependencies": {
"svelte-table": "^0.5.0"
}
}

190
ui/rollup.config.js Normal file
View File

@ -0,0 +1,190 @@
import svelte from 'rollup-plugin-svelte';
import css from 'rollup-plugin-css-only';
import image from '@rollup/plugin-image';
import resolve from '@rollup/plugin-node-resolve';
import htmlTemplate from 'rollup-plugin-generate-html-template';
import { readFile, writeFile } from 'fs';
import { basename } from 'path';
import { promisify } from 'util';
import zlib from 'zlib';
import { VERSION, } from 'rollup';
import { pascalCase } from "pascal-case";
import mime from 'mime';
function hexdump(buffer) {
let lines = [];
for (let i = 0; i < buffer.length; i += 16) {
let block = buffer.slice(i, i + 16); // cut buffer into blocks of 16
let hexArray = [];
for (let value of block) {
hexArray.push("0x" + value.toString(16).padStart(2, "0"));
}
let hexString = hexArray.join(", ");
let line = ` ${hexString}`;
lines.push(line);
}
return lines.join(",\n");
}
function cppGzipped(html, fileName, contentType) {
return new Promise((resolve, reject) => zlib.gzip(html, { level: zlib.constants.Z_BEST_COMPRESSION }, function (error, result) {
if (error) {
reject(err);
}
console.info(fileName + " compressed " + result.length + " bytes");
const array = hexdump(result);
const src = `/*
* Binary array for the Web UI.
* gzip is used for smaller size and improved speeds.
*
* Please see https://kno.wled.ge/advanced/custom-features/#changing-web-ui
* to find out how to easily modify the web UI source!
*/
// Autogenerated do not edit!!
const uint16_t ${fileName.replace(".","_").toUpperCase()}_L = ${result.length};
const uint8_t ${fileName.replace(".","_").toUpperCase()}[] PROGMEM = {
${array}
};
void serve${pascalCase(fileName)}(AsyncWebServerRequest* request) {
AsyncWebServerResponse *response = request->beginResponse_P(200, "${contentType || mime.getType(fileName)}", ${fileName.replace(".","_").toUpperCase()}, ${fileName.replace(".","_").toUpperCase()}_L);
response->addHeader(F("Content-Encoding"), "gzip");
request->send(response);
}
`;
resolve(src);
}));
}
const isFunction = (arg) => typeof arg === 'function';
const isRegExp = (arg) => Object.prototype.toString.call(arg) === '[object RegExp]';
const readFilePromise = promisify(readFile);
const writeFilePromise = promisify(writeFile);
function isOutputChunk(file) {
return typeof file.code === 'string';
}
function getOutputFileContent(outputFileName, outputFile, outputOptions) {
if (isOutputChunk(outputFile)) {
let source;
source = outputFile.code;
if (outputOptions.sourcemap && outputFile.map) {
const url = outputOptions.sourcemap === 'inline'
? outputFile.map.toUrl()
: `${basename(outputFileName)}.map`;
source += `//# source` + `MappingURL=${url}\n`;
}
return source;
}
else {
return typeof outputFile.source === 'string'
? outputFile.source
: // just to be sure, as it is typed string | Uint8Array in rollup 2.0.0
Buffer.from(outputFile.source);
}
}
function cpp(options = {}) {
const mapFileName = isFunction(options.fileName)
? options.fileName
: (fileName) => fileName + (options.fileName || '.cpp');
const plugin = {
name: 'gzip',
generateBundle(outputOptions, bundle, isWrite) {
if (!isWrite)
return;
return Promise.all(Object.keys(bundle)
.map(fileName => {
const fileEntry = bundle[fileName];
// file name filter option check
const fileNameFilter = options.filter || /\.(js|mjs|json|css|html)$/;
if (isRegExp(fileNameFilter) &&
!fileName.match(fileNameFilter)) {
return Promise.resolve();
}
if (isFunction(fileNameFilter) &&
!fileNameFilter(fileName)) {
return Promise.resolve();
}
const fileContent = getOutputFileContent(fileName, fileEntry, outputOptions);
// minSize option check
if (options.minSize &&
options.minSize > fileContent.length) {
return Promise.resolve();
}
return Promise.resolve(cppGzipped(fileContent, fileName))
.then(compressedContent => {
writeFilePromise(mapFileName(fileName), compressedContent);
return null;
})
.catch((err) => {
console.error(err);
return Promise.reject('[rollup-plugin-gzip] Error compressing file ' +
fileName);
});
})
.concat([
(() => {
if (!options.additionalFiles ||
!options.additionalFiles.length)
return Promise.resolve();
const compressAdditionalFiles = () => Promise.all(options.additionalFiles.map(filePath => readFilePromise(filePath)
.then(fileContent => cppGzipped(fileContent, basename(filePath)))
.then(compressedContent => {
return writeFilePromise(mapFileName(filePath), compressedContent);
})
.catch((err) => {
return Promise.reject('[rollup-plugin-gzip] Error compressing additional file ' +
filePath + '\n' + err);
})));
// additional files can be processed outside of rollup after a delay
// for older plugins or plugins that write to disk (curcumventing rollup) without awaiting
const additionalFilesDelay = options.additionalFilesDelay ||
(VERSION >= '2.0.0' ? 0 : 2000);
if (additionalFilesDelay) {
setTimeout(compressAdditionalFiles, additionalFilesDelay);
return Promise.resolve();
}
else {
return compressAdditionalFiles();
}
})(),
]));
},
};
return plugin;
}
export default {
input: 'src/main.js',
output: {
format: 'iife',
file: './dist/index.js',
name: 'app'
},
plugins: [
svelte({}),
resolve(),
image(),
css({ output: 'bundle.css' }),
htmlTemplate({
template: 'src/template.html',
target: 'index.html',
}),
cpp({
additionalFiles: ['dist/index.html'],
fileName: function(a) { return "../src/ui_" + basename(a).replace(".", "_") + ".h"; }
})
]
};

123
ui/src/App.svelte Normal file
View File

@ -0,0 +1,123 @@
<script>
import { devices } from './stores';
import SvelteTable from "svelte-table";
const columns = [
{
key: "distance",
title: "Distance",
value: v => v.distance,
renderValue: v => `${v.distance.toLocaleString(undefined, { minimumFractionDigits: 2 })}m`,
sortable: true,
},
{
key: "id",
title: "ID",
value: v => v.id,
sortable: true,
filterOptions: rows => {
// generate groupings of 0-10, 10-20 etc...
let nums = {};
rows.forEach(row => {
let num = Math.floor(row.id / 10);
if (nums[num] === undefined)
nums[num] = { name: `${num * 10} to ${(num + 1) * 10}`, value: num };
});
// fix order
nums = Object.entries(nums)
.sort()
.reduce((o, [k, v]) => ((o[k] = v), o), {});
return Object.values(nums);
},
filterValue: v => Math.floor(v.id / 10),
headerClass: "text-left",
},
{
key: "name",
title: "Name",
value: v => v.name ?? "",
sortable: true,
filterOptions: rows => {
// use first letter of first_name to generate filter
let letrs = {};
rows.forEach(row => {
let letr = row.name?.charAt(0);
if (letr && letrs[letr] === undefined)
letrs[letr] = {
name: `${letr.toUpperCase()}`,
value: letr.toLowerCase(),
};
});
// fix order
letrs = Object.entries(letrs)
.sort()
.reduce((o, [k, v]) => ((o[k] = v), o), {});
return Object.values(letrs);
},
filterValue: v => v.first_name.charAt(0).toLowerCase(),
},
{
key: "mac",
title: "MAC",
value: v => v.mac,
sortable: true,
filterOptions: rows => {
// use first letter of last_name to generate filter
let letrs = {};
rows.forEach(row => {
let letr = row.mac.charAt(0);
if (letrs[letr] === undefined)
letrs[letr] = {
name: `${letr.toUpperCase()}`,
value: letr.toLowerCase(),
};
});
// fix order
letrs = Object.entries(letrs)
.sort()
.reduce((o, [k, v]) => ((o[k] = v), o), {});
return Object.values(letrs);
},
filterValue: v => v.last_name.charAt(0).toLowerCase(),
},
{
key: "rssi",
title: "Rssi",
value: v => v.rssi,
renderValue: v => v.rssi+"dBm",
sortable: true,
},
{
key: "rssi@1m",
title: "Rssi@1m",
value: v => v["rssi@1m"],
renderValue: v => v["rssi@1m"]+"dBm",
sortable: true,
},
{
key: "interval",
title: "Interval",
value: v => v.interval,
renderValue: v => v.interval + "ms",
sortable: true,
},
];
</script>
<main>
{#if $devices != null}
<SvelteTable columns="{columns}" rows="{$devices}"></SvelteTable>
{:else}
<h1>Error while loading devices</h1>
{/if}
</main>
<style>
main {
padding: 1rem;
}
h1 {
text-align: center;
}
</style>

15
ui/src/app.css Normal file
View File

@ -0,0 +1,15 @@
:root {
color-scheme: light dark;
font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 24px;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-text-size-adjust: 100%;
}

8
ui/src/main.js Normal file
View File

@ -0,0 +1,8 @@
import './app.css'
import App from './App.svelte'
const app = new App({
target: document.getElementById('app')
})
export default app

14
ui/src/stores.js Normal file
View File

@ -0,0 +1,14 @@
import { readable } from 'svelte/store';
export const devices = readable([], function start(set) {
const interval = setInterval(() => {
fetch(`/json/devices`)
.then(d => d.json())
.then(r => set(r.devices))
.catch((ex) => { set(null); console.log(ex); });
}, 1000)
return function stop() {
clearInterval(interval);
};
});

11
ui/src/template.html Normal file
View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ESPresense: Devices</title>
</head>
<body>
<div id="app"></div>
</body>
</html>

16
ui/vite.config.js Normal file
View File

@ -0,0 +1,16 @@
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [svelte()],
server: {
proxy: {
'^/json': {
target: 'http://192.168.128.134/',
changeOrigin: true,
rewrite: (path) => path
},
}
}
})