From 0b4d61827a1ac6815d0e79375fd5d59bc35465ce Mon Sep 17 00:00:00 2001 From: elims <46279009+theelims@users.noreply.github.com> Date: Sat, 3 Feb 2024 23:09:06 +0100 Subject: [PATCH] ported MQTT Client to PsychicMqttClient --- .gitignore | 1 + CHANGELOG.md | 42 +- factory_settings.ini | 6 +- features.ini | 2 +- .../src/routes/connections/mqtt/MQTT.svelte | 112 +- .../routes/system/status/SystemStatus.svelte | 11 +- lib/PsychicMqttClient/PsychicMqttClient.cpp | 453 ------ lib/PsychicMqttClient/PsychicMqttClient.h | 338 ---- lib/framework/MqttPubSub.h | 32 +- lib/framework/MqttSettingsService.cpp | 57 +- lib/framework/MqttSettingsService.h | 30 +- lib/framework/MqttStatus.cpp | 2 +- lib/framework/WWWData.h | 1448 ++++++++--------- ...{WebSocketClient.h => WebSocketClient.bak} | 1 - lib/framework/WiFiSettingsService.cpp | 2 +- platformio.ini | 19 +- scripts/generate_cert_bundle.py | 14 +- src/LightStateService.cpp | 2 +- src/LightStateService.h | 4 +- src/main.cpp | 10 +- 20 files changed, 838 insertions(+), 1748 deletions(-) delete mode 100644 lib/PsychicMqttClient/PsychicMqttClient.cpp delete mode 100644 lib/PsychicMqttClient/PsychicMqttClient.h rename lib/framework/{WebSocketClient.h => WebSocketClient.bak} (99%) diff --git a/.gitignore b/.gitignore index e7c0dc7a..817f7418 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ node_modules /lib/framework/WWWData.h *WWWData.h lib/framework/WWWData.h +ssl_certs/cacert.pem diff --git a/CHANGELOG.md b/CHANGELOG.md index 9932bae7..ba434972 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,14 +6,6 @@ All notable changes to this project will be documented in this file. > **Warning**: This update has breaking changes! -### ToDo's for this release - -- [ ] Provide CORS preflight confirmation -- [ ] Switch AsyncMqttClient to ESP-IDF MQTT Client -- [ ] Fix glitch in UI that System Status page is not reactive to 2sec polling of status -- [ ] LightState NimBLE Demo --> Switch LED on and off with BLE HID device. Binding procedure with BLE HID device and BLE HID status page. -- [ ] Update docs and check for consistency - ### Added - Added postscript to platform.io build process to copy, rename and calculate MD5 checksum of \*.bin file. These files are ready for uploading to the Github Release page. @@ -21,6 +13,7 @@ All notable changes to this project will be documented in this file. - Added generateToken API for security settings - Added Multi-WiFi capability. Add up to five WiFi configurations and connect to either strongest network (default), or by priority. - Added InfoDialog as a simpler version of the ConfirmDialog for a simple notification modal. +- Added Adafruit certificate repository as the default choice for the X509 certificate bundle. ### Changed @@ -28,13 +21,19 @@ All notable changes to this project will be documented in this file. - Changed build_interface.py script to check for modified files in the interface sources before re-building the interface. Saves some time on the compilation process. - Upload firmware binary allows uploading of MD5 checksum file in advance to verify downloaded firmware package. - GithubFirmwareManager checks against PIO build_target in filename to support Github OTA for binaries build for various targets. You should rename your old release \*.bin files on the Github release pages for backward compatibility. +- Changed MQTT Client to an ESP-IDF backed one which supports SSL/TLS X509 root CA bundles and transport over WS. +- Changed the PROGMEM_WWW flag to EMBED_WWW as there is technically speaking no PROGMEM on ESP32's. + +### Fixed + +- Fixed reactivity of System Status page. ### Removed - Removed support for Arduino ESP OTA. - HttpEndpoints and Websocket Server without a securityManager are no longer possible. -### Migrate from ESPAsyncWebServer +### Migrate from ESPAsyncWebServer to PsychicHttp #### Migrate `main.cpp` @@ -42,7 +41,7 @@ Change the server and ESPSvelteKit instances to PsychicHttpServer and give the E ``` PsychicHttpServer server; -ESP32SvelteKit esp32sveltekit(&server, 115); +ESP32SvelteKit esp32sveltekit(&server, 125); ``` Remove `server.begin();` in `void setup()`. This is handled by ESP32SvelteKit now. @@ -57,6 +56,7 @@ Remove the following `build_flags`: -D WS_MAX_QUEUED_MESSAGES=64 -D CONFIG_ASYNC_TCP_RUNNING_CORE=0 -D NO_GLOBAL_ARDUINOOTA + -D PROGMEM_WWW ``` Add the following `build_flags` and adjust to your app, if needed: @@ -65,9 +65,29 @@ Add the following `build_flags` and adjust to your app, if needed: -D BUILD_TARGET=\"$PIOENV\" -D APP_NAME=\"ESP32-Sveltekit\" ; Must only contain characters from [a-zA-Z0-9-_] as this is converted into a filename -D APP_VERSION=\"0.3.0\" ; semver compatible version string + -D EMBED_WWW +``` + +Remove the lib dependency `esphome/AsyncTCP-esphome @ ^2.0.0` and add `https://github.com/theelims/PsychicMqttClient.git` + +Consider adjusting `board_ssl_cert_source = adafruit`, so that the new MQTT client has universal SSL/TLS support with a wide range of CA root certificates. + +#### Migrate `factory_settings.ini` + +The new MQTT client has slightly renamed factory settings: + +```ini + ; MQTT settings + -D FACTORY_MQTT_ENABLED=false + -D FACTORY_MQTT_URI=\"mqtts://mqtt.eclipseprojects.io:8883\" + -D FACTORY_MQTT_USERNAME=\"\" ; supports placeholders + -D FACTORY_MQTT_PASSWORD=\"\" + -D FACTORY_MQTT_CLIENT_ID=\"#{platform}-#{unique_id}\" ; supports placeholders + -D FACTORY_MQTT_KEEP_ALIVE=120 + -D FACTORY_MQTT_CLEAN_SESSION=true ``` -Remove the lib dependency `esphome/AsyncTCP-esphome @ ^2.0.0`. +Max Topic Length is no longer needed. #### Custom Stateful Services diff --git a/factory_settings.ini b/factory_settings.ini index 489065fe..af679744 100644 --- a/factory_settings.ini +++ b/factory_settings.ini @@ -37,14 +37,12 @@ build_flags = ; MQTT settings -D FACTORY_MQTT_ENABLED=false - -D FACTORY_MQTT_HOST=\"test.mosquitto.org\" - -D FACTORY_MQTT_PORT=1883 + -D FACTORY_MQTT_URI=\"mqtts://mqtt.eclipseprojects.io:8883\" -D FACTORY_MQTT_USERNAME=\"\" ; supports placeholders -D FACTORY_MQTT_PASSWORD=\"\" -D FACTORY_MQTT_CLIENT_ID=\"#{platform}-#{unique_id}\" ; supports placeholders - -D FACTORY_MQTT_KEEP_ALIVE=60 + -D FACTORY_MQTT_KEEP_ALIVE=120 -D FACTORY_MQTT_CLEAN_SESSION=true - -D FACTORY_MQTT_MAX_TOPIC_LENGTH=128 ; JWT Secret -D FACTORY_JWT_SECRET=\"#{random}-#{random}\" ; supports placeholders diff --git a/features.ini b/features.ini index 3660ab62..782d9b8b 100644 --- a/features.ini +++ b/features.ini @@ -1,6 +1,6 @@ [features] build_flags = - -D FT_SECURITY=0 + -D FT_SECURITY=1 -D FT_MQTT=1 -D FT_NTP=1 -D FT_UPLOAD_FIRMWARE=1 diff --git a/interface/src/routes/connections/mqtt/MQTT.svelte b/interface/src/routes/connections/mqtt/MQTT.svelte index aa7c9455..81e6d9e9 100644 --- a/interface/src/routes/connections/mqtt/MQTT.svelte +++ b/interface/src/routes/connections/mqtt/MQTT.svelte @@ -16,19 +16,17 @@ enabled: boolean; connected: boolean; client_id: string; - disconnect_reason: number; + last_error: string; }; type MQTTSettings = { enabled: boolean; - host: string; - port: number; + uri: string; username: string; password: string; client_id: string; keep_alive: number; clean_session: boolean; - max_topic_length: number; }; let mqttSettings: MQTTSettings; @@ -36,17 +34,6 @@ let formField: any; - const disconnectReason = [ - 'TCP Disconnected', - 'Unacceptable Protocol Version', - 'Identifier Rejected', - 'Server unavailable', - 'Malformed Credentials', - 'Not Authorized', - 'Not Enough Memory', - 'TLS Rejected' - ]; - async function getMQTTStatus() { try { const response = await fetch('/rest/mqttStatus', { @@ -123,29 +110,17 @@ function handleSubmitMQTT() { let valid = true; - // Validate Server - // RegEx for IPv4 - const regexExpIPv4 = - /\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\b/; + // Validate Server URI const regexExpURL = - /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/i; + /(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4})|(\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b))(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/i; - if (!regexExpURL.test(mqttSettings.host) && !regexExpIPv4.test(mqttSettings.host)) { + if (!regexExpURL.test(mqttSettings.uri)) { valid = false; formErrors.host = true; } else { formErrors.host = false; } - // Validate if port is a number and within the right range - let port = Number(mqttSettings.port); - if (0 <= port && port <= 65536) { - formErrors.port = false; - } else { - formErrors.port = true; - valid = false; - } - // Validate if port is a number and within the right range let keepalive = Number(mqttSettings.keep_alive); if (1 <= keepalive && keepalive <= 600) { @@ -194,7 +169,7 @@ {:else if !mqttStatus.enabled} MQTT Disabled {:else} - {disconnectReason[mqttStatus.disconnect_reason]} + {mqttStatus.last_error} {/if} </div> </div> @@ -231,17 +206,17 @@ <span>Enable MQTT</span> </label> <div class="hidden sm:block" /> - <!-- Host --> - <div> + <!-- URI --> + <div class="sm:col-span-2"> <label class="label" for="host"> - <span class="label-text text-md">Host</span> + <span class="label-text text-md">URI</span> </label> <input type="text" class="input input-bordered invalid:border-error w-full invalid:border-2 {formErrors.host ? 'border-error border-2' : ''}" - bind:value={mqttSettings.host} + bind:value={mqttSettings.uri} id="host" min="3" max="64" @@ -249,32 +224,10 @@ /> <label class="label" for="host"> <span class="label-text-alt text-error {formErrors.host ? '' : 'hidden'}" - >Must be a valid IPv4 address or URL</span + >Must be a valid URI</span > </label> </div> - <!-- Port --> - <div> - <label class="label" for="port"> - <span class="label-text text-md">Port</span> - </label> - <input - type="number" - min="0" - max="65536" - class="input input-bordered invalid:border-error w-full invalid:border-2 {formErrors.port - ? 'border-error border-2' - : ''}" - bind:value={mqttSettings.port} - id="port" - required - /> - <label for="port" class="label" - ><span class="label-text-alt text-error {formErrors.port ? '' : 'hidden'}" - >Port number must be between 0 and 65536</span - ></label - > - </div> <!-- Username --> <div> <label class="label" for="user"> @@ -306,15 +259,6 @@ id="clientid" /> </div> - <!-- Clean Session --> - <label class="label inline-flex cursor-pointer content-end justify-start gap-4"> - <input - type="checkbox" - bind:checked={mqttSettings.clean_session} - class="checkbox checkbox-primary mt-2 sm:-mb-8 sm:mt-0" - /> - <span class="mt-2 sm:-mb-8 sm:mt-0">Clean Session?</span> - </label> <!-- Keep Alive --> <div> <label class="label" for="keepalive"> @@ -340,31 +284,15 @@ ></label > </div> - <!-- Max Topic Length --> - <div> - <label class="label" for="maxtopic"> - <span class="label-text text-md">Max Topic Length</span> - </label> - <label for="maxtopic" class="input-group"> - <input - type="number" - min="64" - max="4096" - class="input input-bordered invalid:border-error w-full invalid:border-2 {formErrors.topic_length - ? 'border-error border-2' - : ''}" - bind:value={mqttSettings.max_topic_length} - id="maxtopic" - required - /> - <span>Chars</span> - </label> - <label for="maxtopic" class="label" - ><span class="label-text-alt text-error {formErrors.topic_length ? '' : 'hidden'}" - >Must be between 64 and 4096 characters</span - ></label - > - </div> + <!-- Clean Session --> + <label class="label inline-flex cursor-pointer content-end justify-start gap-4"> + <input + type="checkbox" + bind:checked={mqttSettings.clean_session} + class="checkbox checkbox-primary" + /> + <span class="">Clean Session?</span> + </label> </div> <div class="divider mb-2 mt-0" /> <div class="mx-4 flex flex-wrap justify-end gap-2"> diff --git a/interface/src/routes/system/status/SystemStatus.svelte b/interface/src/routes/system/status/SystemStatus.svelte index 6865cb58..4a40cc16 100644 --- a/interface/src/routes/system/status/SystemStatus.svelte +++ b/interface/src/routes/system/status/SystemStatus.svelte @@ -50,6 +50,8 @@ uptime: number; }; + let systemStatus: SystemStatus; + async function getSystemStatus() { try { const response = await fetch('/rest/systemStatus', { @@ -59,10 +61,11 @@ 'Content-Type': 'application/json' } }); - return await response.json(); + systemStatus = await response.json(); } catch (error) { console.log('Error:', error); } + return systemStatus; } const interval = setInterval(async () => { @@ -180,7 +183,7 @@ <div class="w-full overflow-x-auto"> {#await getSystemStatus()} <Spinner /> - {:then systemStatus} + {:then nothing} <div class="flex w-full flex-col space-y-1" transition:slide|local={{ duration: 300, easing: cubicOut }} @@ -329,9 +332,7 @@ <div> <div class="font-bold">Core Temperature</div> <div class="text-sm opacity-75"> - {systemStatus.core_temp.toFixed(2) == 53.33 - ? 'NaN' - : systemStatus.core_temp.toFixed(2) + ' °C'} + {systemStatus.core_temp == 53.33 ? 'NaN' : systemStatus.core_temp.toFixed(2) + ' °C'} </div> </div> </div> diff --git a/lib/PsychicMqttClient/PsychicMqttClient.cpp b/lib/PsychicMqttClient/PsychicMqttClient.cpp deleted file mode 100644 index 529685b2..00000000 --- a/lib/PsychicMqttClient/PsychicMqttClient.cpp +++ /dev/null @@ -1,453 +0,0 @@ -#include "PsychicMqttClient.h" - -static const char *TAG = "PsychicMqttClient"; - -static void log_error_if_nonzero(const char *message, int error_code) -{ - if (error_code != 0) - { - ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code); - } -} - -PsychicMqttClient::PsychicMqttClient() : _mqtt_cfg() -{ - memset(&_mqtt_cfg, 0, sizeof(_mqtt_cfg)); -} - -PsychicMqttClient::~PsychicMqttClient() -{ - esp_mqtt_client_destroy(_client); - free(&_mqtt_cfg); -} - -PsychicMqttClient &PsychicMqttClient::setKeepAlive(int keepAlive) -{ - _mqtt_cfg.keepalive = keepAlive; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setAutoReconnect(bool reconnect) -{ - _mqtt_cfg.disable_auto_reconnect = !reconnect; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setClientId(const char *clientId) -{ - _mqtt_cfg.client_id = clientId; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setCleanSession(bool cleanSession) -{ - _mqtt_cfg.disable_clean_session = !cleanSession; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setBufferSize(int bufferSize) -{ - _mqtt_cfg.buffer_size = bufferSize; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setTaskStackAndPriority(int stackSize, int priority) -{ - _mqtt_cfg.task_stack = stackSize; - _mqtt_cfg.task_prio = priority; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setCACert(const char *rootCA, size_t rootCALen) -{ - _mqtt_cfg.cert_pem = rootCA; - _mqtt_cfg.cert_len = rootCALen; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setCACertBundle(const uint8_t *bundle) -{ - if (bundle != nullptr) - { - arduino_esp_crt_bundle_set(bundle); - _mqtt_cfg.crt_bundle_attach = arduino_esp_crt_bundle_attach; - } - else - { - arduino_esp_crt_bundle_detach(NULL); - _mqtt_cfg.crt_bundle_attach = NULL; - } - return *this; -} - -PsychicMqttClient &PsychicMqttClient::attachArduinoCACertBundle(bool attach) -{ - if (attach) - _mqtt_cfg.crt_bundle_attach = arduino_esp_crt_bundle_attach; - else - _mqtt_cfg.crt_bundle_attach = NULL; - - return *this; -} - -PsychicMqttClient &PsychicMqttClient::useGlobalCAStore(bool useGlobalCAStore) -{ - _mqtt_cfg.use_global_ca_store = useGlobalCAStore; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setCredentials(const char *username, const char *password) -{ - _mqtt_cfg.username = username; - if (password != nullptr) - _mqtt_cfg.password = password; - - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setWill(const char *topic, uint8_t qos, bool retain, const char *payload, int length) -{ - _mqtt_cfg.lwt_topic = topic; - _mqtt_cfg.lwt_qos = qos; - _mqtt_cfg.lwt_retain = retain; - _mqtt_cfg.lwt_msg_len = length; - _mqtt_cfg.lwt_msg = payload; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::setServer(const char *uri) -{ - _mqtt_cfg.uri = uri; - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onConnect(OnConnectUserCallback callback) -{ - _onConnectUserCallbacks.push_back(callback); - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onDisconnect(OnDisconnectUserCallback callback) -{ - _onDisconnectUserCallbacks.push_back(callback); - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onSubscribe(OnSubscribeUserCallback callback) -{ - _onSubscribeUserCallbacks.push_back(callback); - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onUnsubscribe(OnUnsubscribeUserCallback callback) -{ - _onUnsubscribeUserCallbacks.push_back(callback); - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onMessage(OnMessageUserCallback callback) -{ - OnMessageUserCallback_t subscription = {nullptr, callback}; - _onMessageUserCallbacks.push_back(subscription); - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onTopic(const char *topic, int qos, OnMessageUserCallback callback) -{ - OnMessageUserCallback_t subscription = {strcpy((char *)malloc(strlen(topic) + 1), topic), callback}; - _onMessageUserCallbacks.push_back(subscription); - subscribe(topic, qos); - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onPublish(OnPublishUserCallback callback) -{ - _onPublishUserCallbacks.push_back(callback); - return *this; -} - -PsychicMqttClient &PsychicMqttClient::onError(OnErrorUserCallback callback) -{ - _onErrorUserCallbacks.push_back(callback); - return *this; -} - -bool PsychicMqttClient::connected() -{ - return _connected; -} - -void PsychicMqttClient::connect() -{ - if (_mqtt_cfg.uri == nullptr) - { - ESP_LOGE(TAG, "MQTT URI not set."); - return; - } - _client = esp_mqtt_client_init(&_mqtt_cfg); - esp_mqtt_client_register_event(_client, MQTT_EVENT_ANY, _onMqttEventStatic, this); - ESP_ERROR_CHECK(esp_mqtt_client_start(_client)); - ESP_LOGI(TAG, "MQTT client started."); -} - -void PsychicMqttClient::disconnect() -{ - ESP_LOGI(TAG, "Disconnecting MQTT client."); - esp_mqtt_client_stop(_client); -} - -int PsychicMqttClient::subscribe(const char *topic, int qos) -{ - ESP_LOGI(TAG, "Subscribing to topic %s with QoS %d", topic, qos); - return esp_mqtt_client_subscribe(_client, topic, qos); -} - -int PsychicMqttClient::unsubscribe(const char *topic) -{ - ESP_LOGI(TAG, "Unsubscribing from topic %s", topic); - return esp_mqtt_client_unsubscribe(_client, topic); -} - -int PsychicMqttClient::publish(const char *topic, int qos, bool retain, const char *payload, int length, bool enqueue) -{ - if (enqueue) - { - ESP_LOGV(TAG, "Enqueuing message to topic %s with QoS %d", topic, qos); - return esp_mqtt_client_enqueue(_client, topic, payload, length, qos, retain, true); - } - else - { - ESP_LOGV(TAG, "Publishing message to topic %s with QoS %d", topic, qos); - return esp_mqtt_client_publish(_client, topic, payload, length, qos, retain); - } -} - -const char *PsychicMqttClient::getClientId() -{ - return _mqtt_cfg.client_id; -} - -esp_mqtt_client_config_t *PsychicMqttClient::getMqttConfig() -{ - return &_mqtt_cfg; -} - -void PsychicMqttClient::_onMqttEventStatic(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) -{ - // Since this is a static function, we need to cast the first argument (void*) back to the class instance type - PsychicMqttClient *instance = (PsychicMqttClient *)handler_args; - instance->_onMqttEvent(base, event_id, event_data); -} - -void PsychicMqttClient::_onMqttEvent(esp_event_base_t base, int32_t event_id, void *event_data) -{ - ESP_LOGV(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id); - esp_mqtt_event_handle_t event = (esp_mqtt_event_handle_t)event_data; - esp_mqtt_client_handle_t client = event->client; - switch ((esp_mqtt_event_id_t)event_id) - { - case MQTT_EVENT_CONNECTED: - _connected = true; - _onConnect(event); - break; - case MQTT_EVENT_DISCONNECTED: - _connected = false; - _onDisconnect(event); - break; - case MQTT_EVENT_SUBSCRIBED: - _onSubscribe(event); - break; - case MQTT_EVENT_UNSUBSCRIBED: - _onUnsubscribe(event); - break; - case MQTT_EVENT_PUBLISHED: - _onPublish(event); - break; - case MQTT_EVENT_DATA: - _onMessage(event); - break; - case MQTT_EVENT_ERROR: - _connected = false; - _onError(event); - break; - default: - ESP_LOGI(TAG, "Other event id:%d", event->event_id); - break; - } -} - -void PsychicMqttClient::_onConnect(esp_mqtt_event_handle_t &event) -{ - ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); - for (auto callback : _onConnectUserCallbacks) - { - callback(event->session_present); - } -} - -void PsychicMqttClient::_onDisconnect(esp_mqtt_event_handle_t &event) -{ - ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED"); - for (auto callback : _onDisconnectUserCallbacks) - { - callback(event->session_present); - } -} - -void PsychicMqttClient::_onSubscribe(esp_mqtt_event_handle_t &event) -{ - ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id); - for (auto callback : _onSubscribeUserCallbacks) - { - callback(event->msg_id); - } -} - -void PsychicMqttClient::_onUnsubscribe(esp_mqtt_event_handle_t &event) -{ - ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id); - for (auto callback : _onUnsubscribeUserCallbacks) - { - callback(event->msg_id); - } -} - -void PsychicMqttClient::_onMessage(esp_mqtt_event_handle_t &event) -{ - // ESP_LOGI(TAG, "MQTT_EVENT_DATA"); - // printf("MSG_ID=%d\r\n", event->msg_id); - // printf("TOPIC=%.*s\r\n", event->topic_len, event->topic); - // printf("DATA=%.*s\r\n", event->data_len, event->data); - // printf("DATA_LEN=%d\r\n", event->data_len); - // printf("TOTAL_DATA_LEN=%d\r\n", event->total_data_len); - // printf("CURRENT_DATA_OFFSET=%d\r\n", event->current_data_offset); - - // Check if we are dealing with a simple message - if (event->total_data_len == event->data_len) - { - ESP_LOGI(TAG, "MQTT_EVENT_DATA_SINGLE"); - // Copy the characters from data->data_ptr to c-string - char payload[event->data_len + 1]; - strncpy(payload, (char *)event->data, event->data_len); - payload[event->data_len] = '\0'; - ESP_LOGV(TAG, "Payload=%s", payload); - - char topic[event->topic_len + 1]; - strncpy(topic, (char *)event->topic, event->topic_len); - topic[event->topic_len] = '\0'; - ESP_LOGV(TAG, "Topic=%s", topic); - - for (auto callback : _onMessageUserCallbacks) - { - if (callback.topic == nullptr || _isTopicMatch(topic, callback.topic)) - { - callback.callback(topic, payload, event->retain, event->qos, event->dup); - } - } - } - - // Check if we are dealing with a first multipart message - else if (event->current_data_offset == 0) - { - ESP_LOGI(TAG, "MQTT_EVENT_DATA_MULTIPART_FIRST"); - // Allocate memory for the buffer - _buffer = (char *)malloc(event->total_data_len + 1); - // Copy the characters from even->data to _buffer - strncpy(_buffer, (char *)event->data, event->data_len); - - // Store the topic for later use, as it is only sent with the first message - _topic = (char *)malloc(event->topic_len + 1); - strncpy(_topic, (char *)event->topic, event->topic_len); - _topic[event->topic_len] = '\0'; - } - - // Check if we are on the last message - else if (event->current_data_offset + event->data_len == event->total_data_len) - { - ESP_LOGI(TAG, "MQTT_EVENT_DATA_MULTIPART_LAST"); - // Copy the characters from even->data to _buffer - strncpy(_buffer + event->current_data_offset, (char *)event->data, event->data_len); - _buffer[event->total_data_len] = '\0'; - ESP_LOGV(TAG, "Topic=%s", _topic); - ESP_LOGV(TAG, "Payload=%s", _buffer); - - for (auto callback : _onMessageUserCallbacks) - { - if (callback.topic == nullptr || _isTopicMatch(_topic, callback.topic)) - { - callback.callback(_topic, _buffer, event->retain, event->qos, event->dup); - } - } - - // Free the memory - free(_buffer); - free(_topic); - } - - // Otherwise, we are in the middle of the message - else - { - // copy the characters from even->data to _buffer - strncpy(_buffer + event->current_data_offset, (char *)event->data, event->data_len); - ESP_LOGI(TAG, "MQTT_EVENT_DATA_MULTIPART"); - } -} - -void PsychicMqttClient::_onPublish(esp_mqtt_event_handle_t &event) -{ - ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id); - for (auto callback : _onPublishUserCallbacks) - { - callback(event->msg_id); - } -} - -void PsychicMqttClient::_onError(esp_mqtt_event_handle_t &event) -{ - ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); - if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) - { - log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err); - log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err); - log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno); - ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno)); - - for (auto callback : _onErrorUserCallbacks) - { - callback(*event->error_handle); - } - } -} - -bool PsychicMqttClient::_isTopicMatch(const char *topic, const char *subscription) -{ - // Check if the topic is a wildcard - if (strcmp(subscription, "#") == 0 || strcmp(subscription, "+") == 0) - { - return true; - } - - // Check if the topic is a simple match - if (strcmp(topic, subscription) == 0) - { - return true; - } - - // Check if the topic is a wildcard match - char *topicToken = strtok((char *)topic, "/"); - char *subscriptionToken = strtok((char *)subscription, "/"); - while (topicToken != NULL && subscriptionToken != NULL) - { - if (strcmp(subscriptionToken, "#") == 0) - { - return true; - } - if (strcmp(subscriptionToken, "+") != 0 && strcmp(topicToken, subscriptionToken) != 0) - { - return false; - } - topicToken = strtok(NULL, "/"); - subscriptionToken = strtok(NULL, "/"); - } - return topicToken == NULL && subscriptionToken == NULL; -} diff --git a/lib/PsychicMqttClient/PsychicMqttClient.h b/lib/PsychicMqttClient/PsychicMqttClient.h deleted file mode 100644 index b336a81b..00000000 --- a/lib/PsychicMqttClient/PsychicMqttClient.h +++ /dev/null @@ -1,338 +0,0 @@ -#pragma once - -#include <functional> -#include <vector> - -#include "Arduino.h" -#include "mqtt_client.h" -#include "esp_crt_bundle.h" - -// user callbacks -typedef std::function<void(bool sessionPresent)> OnConnectUserCallback; -typedef std::function<void(bool sessionPresent)> OnDisconnectUserCallback; -typedef std::function<void(int msgId)> OnSubscribeUserCallback; -typedef std::function<void(int msgId)> OnUnsubscribeUserCallback; -typedef std::function<void(char *topic, char *payload, int retain, int qos, bool dup)> OnMessageUserCallback; -typedef std::function<void(int msgId)> OnPublishUserCallback; -typedef std::function<void(esp_mqtt_error_codes_t error)> OnErrorUserCallback; - -typedef struct -{ - char *topic; - OnMessageUserCallback callback; -} OnMessageUserCallback_t; - -/** - * @class PsychicMqttClient - * @brief A class that wraps the ESP-IDF MQTT client and provides a more user friendly interface. - * The API is very similar to AsyncMqttClient for the ESP32 by Marvin Roger, so that this library can - * be used as a almost drop-in replacement. - */ -class PsychicMqttClient -{ -public: - /** - * @brief Constructs a new instance of the PsychicMqttClient class. - */ - PsychicMqttClient(); - - /** - * @brief Destroys the instance of the PsychicMqttClient class. - */ - ~PsychicMqttClient(); - - /** - * @brief Sets the keep alive interval in seconds for the MQTT connection. - * - * @param keepAlive The keep alive interval in seconds. Defaults to 120. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setKeepAlive(int keepAlive = 120); - - /** - * @brief Sets the auto reconnect flag for the MQTT connection. - * - * @param reconnect The auto reconnect flag. Defaults to true. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setAutoReconnect(bool reconnect = true); - - /** - * @brief Sets the client ID for the MQTT connection. - * - * @param clientId The client ID. Defaults to ESP32_%CHIPID% where - * %CHIPID% are the last 3 bytes of MAC address in hex format. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setClientId(const char *clientId); - - /** - * @brief Sets the clean session flag for the MQTT connection. - * - * @param cleanSession The clean session flag. Defaults to true. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setCleanSession(bool cleanSession = true); - - /** - * @brief Sets the size for the MQTT send/receive buffer. If messages exceed - * the buffer size, the message will be split into multiple chunks. Received m - * essages will be assembled into the original message. - * - * @param bufferSize The buffer size in bytes. Defaults to 1024. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setBufferSize(int bufferSize = 1024); - - /** - * @brief Sets the task stack size and priority for the MQTT client task. - * - * @param stackSize The task stack size in bytes. Defaults to 6144. - * @param prio The task priority. Defaults to 5. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setTaskStackAndPriority(int stackSize, int prio); - - /** - * @brief Sets the CA root certificate for the MQTT server. - * - * @param cert The certificate in PEM or DER format. - * @param certLen optional length of the certificate shouldn't cert be null-terminated. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setCACert(const char *rootCA, size_t rootCALen = 0); - - /** - * @brief Sets a CA root certificate bundle for the MQTT server. Use this - * method if you have multiple CA root certificates and this is the only place - * using SSL/TLS. Otherwise use attachArduinoCACertBundle() to attach an existing - * certificate bundle. - * - * @param bundle The certificate bundle in PEM or DER format. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setCACertBundle(const uint8_t *bundle); - - /** - * @brief Attaches an existing CA root certificate bundle for the MQTT server. Like if you - * already use WiFiClientSecure and want to use the same CA root certificate bundle for MQTT. - * - * @param attach Whether to attach or detach the CA root certificate bundle. Defaults to true. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &attachArduinoCACertBundle(bool attach = true); - - /** - * @brief The MQTT server can use the ESP-IDF global CA root certificate store. Check ESP-TLS - * documentation for more information. - * - * @param useGlobalCAStore Whether to use the global CA root certificate store. Defaults to true. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &useGlobalCAStore(bool useGlobalCAStore = true); - - /** - * @brief Sets the credentials for the MQTT connection. - * - * @param username The username for the MQTT connection. Defaults to nullptr. - * @param password The password for the MQTT connection. Defaults to nullptr. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setCredentials(const char *username, const char *password = nullptr); - - /** - * @brief Sets the last will and testament for the MQTT connection. - * - * @param topic The topic for the last will and testament. - * @param qos The QoS level for the last will and testament. - * @param retain The retain flag for the last will and testament. - * @param payload The payload for the last will and testament. Defaults to nullptr. - * @param length The length of the payload for the last will and testament. Defaults to 0. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setWill(const char *topic, uint8_t qos, bool retain, const char *payload = nullptr, int length = 0); - - /** - * @brief Sets the MQTT server URI. Supports mqtt://, mqtts:// and ws://, wss:// as - * transport protocols. Fully supports SSL/TLS. - * - * Example: mqtt://162.168.10.1 - * mqtt://mqtt.eclipseprojects.io - * mqtt://mqtt.eclipseprojects.io:1884 - * mqtt://username:password@mqtt.eclipseprojects.io:1884 - * mqtts://mqtt.eclipseprojects.io - * mqtts://mqtt.eclipseprojects.io:8884 - * ws://mqtt.eclipseprojects.io:80/mqtt - * wss://mqtt.eclipseprojects.io:443/mqtt - * - * @param uri The MQTT server URI. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &setServer(const char *uri); - - /** - * @brief Registers a callback function to be called when the MQTT client is connected. - * - * @param callback The callback function with the signature void(bool sessionPresent) to be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onConnect(OnConnectUserCallback callback); - - /** - * @brief Registers a callback function to be called when the MQTT client is disconnected. - * - * @param callback The callback function with the signature void(bool sessionPresent) to - * be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onDisconnect(OnDisconnectUserCallback callback); - - /** - * @brief Registers a callback function to be called when a topic is subscribed. - * - * @param callback The callback function with the signature void(int msgId) to be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onSubscribe(OnSubscribeUserCallback callback); - - /** - * @brief Registers a callback function to be called when a topic is unsubscribed. - * - * @param callback The callback function with the signature void(int msgId) to be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onUnsubscribe(OnUnsubscribeUserCallback callback); - - /** - * @brief Registers a callback function to be called when a message is received. - * Multipart messages will be reassembled into the original message. - * - * @param callback The callback function with the signature void(char *topic, - * char *payload, int msgId, int retain, int qos, bool dup) to be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onMessage(OnMessageUserCallback callback); - - /** - * @brief Registers a callback function to be called when a message is - * received on a specific topic. Multipart messages will be - * reassembled into the original message. Fully supports MQTT Wildcards. - * - * @param topic The topic to listen for. MQTT Wildcards are fully supported. - * @param qos The QoS level to listen for. - * @param callback The callback function with the signature void(char *topic, - * char *payload, int msgId, int retain, int qos, bool dup) to be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onTopic(const char *topic, int qos, OnMessageUserCallback callback); - - /** - * @brief Registers a callback function to be called when a message is published. - * - * @param callback The callback function with the signature void(int msgId) to be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onPublish(OnPublishUserCallback callback); - - /** - * @brief Registers a callback function to be called when an error occurs. - * - * @param callback The callback function with the signature void(esp_mqtt_error_codes_t error) to be registered. - * @return A reference to the PsychicMqttClient instance. - */ - PsychicMqttClient &onError(OnErrorUserCallback callback); - - /** - * @brief Checks if the MQTT client is connected. - * - * @return True if the client is connected, false otherwise. - */ - bool connected(); - - /** - * @brief Connects the MQTT client to the server. - * - * @note All parameters must be set before calling this method. - */ - void connect(); - - /** - * @brief Disconnects the MQTT client from the server. - */ - void disconnect(); - - /** - * @brief Subscribes to a topic. - * - * @param topic The topic to subscribe to. - * @param qos The QoS level for the subscription. - * @return Message ID on success, -1 on failure. - */ - int subscribe(const char *topic, int qos); - - /** - * @brief Unsubscribes from a topic. - * - * @param topic The topic to unsubscribe from. - * @return Message ID on success, -1 on failure. - */ - int unsubscribe(const char *topic); - - /** - * @brief Publishes a message to a topic. - * - * @param topic The topic to publish to. - * @param qos The QoS level (0-2) for the message. - * @param retain The retain flag for the message. - * @param payload The payload for the message. Defaults to nullptr. - * @param length The length of the payload. Defaults to 0. - * @param enqueue Whether to enqueue the message for asynchronous publishing. Defaults to true. - * @return Message ID on success, -1 on failure. - */ - int publish(const char *topic, int qos, bool retain, const char *payload = nullptr, int length = 0, bool enqueue = true); - - /** - * @brief Gets the client ID of the MQTT client. - * - * @return The client ID. - */ - const char *getClientId(); - - /** - * @brief Returns the ESP-IDF MQTT client config object of the MQTT client in case - * lower level access is needed. - * - * @return The config object. - */ - esp_mqtt_client_config_t *getMqttConfig(); - -private: - esp_mqtt_client_handle_t _client = nullptr; - esp_mqtt_client_config_t _mqtt_cfg; - esp_mqtt_error_codes_t _lastError; - bool _connected = false; - - char *_buffer = nullptr; - char *_topic = nullptr; - - static void _onMqttEventStatic(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data); - void _onMqttEvent(esp_event_base_t base, int32_t event_id, void *event_data); - bool _isTopicMatch(const char *topic, const char *subscription); - - std::vector<OnConnectUserCallback> _onConnectUserCallbacks; - std::vector<OnDisconnectUserCallback> _onDisconnectUserCallbacks; - std::vector<OnSubscribeUserCallback> _onSubscribeUserCallbacks; - std::vector<OnUnsubscribeUserCallback> _onUnsubscribeUserCallbacks; - std::vector<OnMessageUserCallback_t> _onMessageUserCallbacks; - std::vector<OnPublishUserCallback> _onPublishUserCallbacks; - std::vector<OnErrorUserCallback> _onErrorUserCallbacks; - - void _onBeforeConnect(esp_mqtt_event_handle_t &event_data, esp_mqtt_client_handle_t &client); - void _onConnect(esp_mqtt_event_handle_t &event_data); - void _onDisconnect(esp_mqtt_event_handle_t &event_data); - void _onSubscribe(esp_mqtt_event_handle_t &event_data); - void _onUnsubscribe(esp_mqtt_event_handle_t &event_data); - void _onMessage(esp_mqtt_event_handle_t &event_data); - void _onPublish(esp_mqtt_event_handle_t &event_data); - void _onError(esp_mqtt_event_handle_t &event_data); -}; diff --git a/lib/framework/MqttPubSub.h b/lib/framework/MqttPubSub.h index 6a36be22..c02cbef0 100644 --- a/lib/framework/MqttPubSub.h +++ b/lib/framework/MqttPubSub.h @@ -16,7 +16,7 @@ **/ #include <StatefulService.h> -#include <AsyncMqttClient.h> +#include <PsychicMqttClient.h> #define MQTT_ORIGIN_ID "mqtt" @@ -25,10 +25,12 @@ class MqttConnector { protected: StatefulService<T> *_statefulService; - AsyncMqttClient *_mqttClient; + PsychicMqttClient *_mqttClient; size_t _bufferSize; - MqttConnector(StatefulService<T> *statefulService, AsyncMqttClient *mqttClient, size_t bufferSize) : _statefulService(statefulService), _mqttClient(mqttClient), _bufferSize(bufferSize) + MqttConnector(StatefulService<T> *statefulService, PsychicMqttClient *mqttClient, size_t bufferSize) : _statefulService(statefulService), + _mqttClient(mqttClient), + _bufferSize(bufferSize) { _mqttClient->onConnect(std::bind(&MqttConnector::onConnect, this)); } @@ -36,7 +38,7 @@ class MqttConnector virtual void onConnect() = 0; public: - inline AsyncMqttClient *getMqttClient() const + inline PsychicMqttClient *getMqttClient() const { return _mqttClient; } @@ -48,7 +50,7 @@ class MqttPub : virtual public MqttConnector<T> public: MqttPub(JsonStateReader<T> stateReader, StatefulService<T> *statefulService, - AsyncMqttClient *mqttClient, + PsychicMqttClient *mqttClient, const String &pubTopic = "", bool retain = false, size_t bufferSize = DEFAULT_BUFFER_SIZE) : MqttConnector<T>(statefulService, mqttClient, bufferSize), @@ -109,9 +111,11 @@ class MqttSub : virtual public MqttConnector<T> public: MqttSub(JsonStateUpdater<T> stateUpdater, StatefulService<T> *statefulService, - AsyncMqttClient *mqttClient, + PsychicMqttClient *mqttClient, const String &subTopic = "", - size_t bufferSize = DEFAULT_BUFFER_SIZE) : MqttConnector<T>(statefulService, mqttClient, bufferSize), _stateUpdater(stateUpdater), _subTopic(subTopic) + size_t bufferSize = DEFAULT_BUFFER_SIZE) : MqttConnector<T>(statefulService, mqttClient, bufferSize), + _stateUpdater(stateUpdater), + _subTopic(subTopic) { MqttConnector<T>::_mqttClient->onMessage(std::bind(&MqttSub::onMqttMessage, this, @@ -119,8 +123,7 @@ class MqttSub : virtual public MqttConnector<T> std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, - std::placeholders::_5, - std::placeholders::_6)); + std::placeholders::_5)); } void setSubTopic(const String &subTopic) @@ -158,10 +161,9 @@ class MqttSub : virtual public MqttConnector<T> void onMqttMessage(char *topic, char *payload, - AsyncMqttClientMessageProperties properties, - size_t len, - size_t index, - size_t total) + int retain, + int qos, + bool dup) { // we only care about the topic we are watching in this class if (strcmp(_subTopic.c_str(), topic)) @@ -171,7 +173,7 @@ class MqttSub : virtual public MqttConnector<T> // deserialize from string DynamicJsonDocument json(MqttConnector<T>::_bufferSize); - DeserializationError error = deserializeJson(json, payload, len); + DeserializationError error = deserializeJson(json, payload); if (!error && json.is<JsonObject>()) { JsonObject jsonObject = json.as<JsonObject>(); @@ -187,7 +189,7 @@ class MqttPubSub : public MqttPub<T>, public MqttSub<T> MqttPubSub(JsonStateReader<T> stateReader, JsonStateUpdater<T> stateUpdater, StatefulService<T> *statefulService, - AsyncMqttClient *mqttClient, + PsychicMqttClient *mqttClient, const String &pubTopic = "", const String &subTopic = "", bool retain = false, diff --git a/lib/framework/MqttSettingsService.cpp b/lib/framework/MqttSettingsService.cpp index 66b2c69f..a6438e3f 100644 --- a/lib/framework/MqttSettingsService.cpp +++ b/lib/framework/MqttSettingsService.cpp @@ -14,6 +14,8 @@ #include <MqttSettingsService.h> +extern const uint8_t rootca_crt_bundle_start[] asm("_binary_src_certs_x509_crt_bundle_bin_start"); + /** * Retains a copy of the cstr provided in the pointer provided using dynamic allocation. * @@ -45,13 +47,14 @@ MqttSettingsService::MqttSettingsService(PsychicHttpServer *server, FS *fs, Secu _retainedUsername(nullptr), _retainedPassword(nullptr), _reconfigureMqtt(false), - _disconnectedAt(0), - _disconnectReason(AsyncMqttClientDisconnectReason::TCP_DISCONNECTED), - _mqttClient() + _mqttClient(), + _lastError("None") { addUpdateHandler([&](const String &originId) { onConfigUpdated(); }, false); + + _mqttClient.setCACertBundle(rootca_crt_bundle_start); } MqttSettingsService::~MqttSettingsService() @@ -67,6 +70,7 @@ void MqttSettingsService::begin() WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP); _mqttClient.onConnect(std::bind(&MqttSettingsService::onMqttConnect, this, std::placeholders::_1)); _mqttClient.onDisconnect(std::bind(&MqttSettingsService::onMqttDisconnect, this, std::placeholders::_1)); + _mqttClient.onError(std::bind(&MqttSettingsService::onMqttError, this, std::placeholders::_1)); _httpEndpoint.begin(); _fsPersistence.readFromFS(); @@ -74,14 +78,13 @@ void MqttSettingsService::begin() void MqttSettingsService::loop() { - if (_reconfigureMqtt || (_disconnectedAt && (unsigned long)(millis() - _disconnectedAt) >= MQTT_RECONNECTION_DELAY)) + if (_reconfigureMqtt) { // reconfigure MQTT client configureMqtt(); // clear the reconnection flags _reconfigureMqtt = false; - _disconnectedAt = 0; } } @@ -97,51 +100,50 @@ bool MqttSettingsService::isConnected() const char *MqttSettingsService::getClientId() { - return _mqttClient.getClientId(); + // return _mqttClient.getClientId(); + return _state.clientId.c_str(); } -AsyncMqttClientDisconnectReason MqttSettingsService::getDisconnectReason() +PsychicMqttClient *MqttSettingsService::getMqttClient() { - return _disconnectReason; + return &_mqttClient; } -AsyncMqttClient *MqttSettingsService::getMqttClient() +String MqttSettingsService::getLastError() { - return &_mqttClient; + return _lastError; } void MqttSettingsService::onMqttConnect(bool sessionPresent) { - Serial.print(F("Connected to MQTT, ")); - if (sessionPresent) - { - Serial.println(F("with persistent session")); - } - else - { - Serial.println(F("without persistent session")); - } + Serial.printf("Connected to MQTT: %s\n", _mqttClient.getMqttConfig()->uri); + _lastError = "None"; +} + +void MqttSettingsService::onMqttDisconnect(bool sessionPresent) +{ + Serial.println("Disconnected from MQTT."); } -void MqttSettingsService::onMqttDisconnect(AsyncMqttClientDisconnectReason reason) +void MqttSettingsService::onMqttError(esp_mqtt_error_codes_t error) { - Serial.print(F("Disconnected from MQTT reason: ")); - Serial.println((uint8_t)reason); - _disconnectReason = reason; - _disconnectedAt = millis(); + if (error.error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) + { + _lastError = strerror(error.esp_transport_sock_errno); + Serial.printf("MQTT error: %s\n", _lastError.c_str()); + } } void MqttSettingsService::onConfigUpdated() { _reconfigureMqtt = true; - _disconnectedAt = 0; } void MqttSettingsService::onStationModeGotIP(WiFiEvent_t event, WiFiEventInfo_t info) { if (_state.enabled) { - Serial.println(F("WiFi connection dropped, starting MQTT client.")); + Serial.println(F("WiFi connection established, starting MQTT client.")); onConfigUpdated(); } } @@ -164,7 +166,7 @@ void MqttSettingsService::configureMqtt() if (_state.enabled && WiFi.isConnected()) { Serial.println(F("Connecting to MQTT...")); - _mqttClient.setServer(retainCstr(_state.host.c_str(), &_retainedHost), _state.port); + _mqttClient.setServer(retainCstr(_state.uri.c_str(), &_retainedHost)); if (_state.username.length() > 0) { _mqttClient.setCredentials( @@ -178,7 +180,6 @@ void MqttSettingsService::configureMqtt() _mqttClient.setClientId(retainCstr(_state.clientId.c_str(), &_retainedClientId)); _mqttClient.setKeepAlive(_state.keepAlive); _mqttClient.setCleanSession(_state.cleanSession); - _mqttClient.setMaxTopicLength(_state.maxTopicLength); _mqttClient.connect(); } } diff --git a/lib/framework/MqttSettingsService.h b/lib/framework/MqttSettingsService.h index 83dd67c2..8624b874 100644 --- a/lib/framework/MqttSettingsService.h +++ b/lib/framework/MqttSettingsService.h @@ -18,7 +18,7 @@ #include <StatefulService.h> #include <HttpEndpoint.h> #include <FSPersistence.h> -#include <AsyncMqttClient.h> +#include <PsychicMqttClient.h> #include <SettingValue.h> #include <WiFi.h> @@ -68,8 +68,7 @@ class MqttSettings public: // host and port - if enabled bool enabled; - String host; - uint16_t port; + String uri; // username and password String username; @@ -81,32 +80,27 @@ class MqttSettings // connection settings uint16_t keepAlive; bool cleanSession; - uint16_t maxTopicLength; static void read(MqttSettings &settings, JsonObject &root) { root["enabled"] = settings.enabled; - root["host"] = settings.host; - root["port"] = settings.port; + root["uri"] = settings.uri; root["username"] = settings.username; root["password"] = settings.password; root["client_id"] = settings.clientId; root["keep_alive"] = settings.keepAlive; root["clean_session"] = settings.cleanSession; - root["max_topic_length"] = settings.maxTopicLength; } static StateUpdateResult update(JsonObject &root, MqttSettings &settings) { settings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED; - settings.host = root["host"] | FACTORY_MQTT_HOST; - settings.port = root["port"] | FACTORY_MQTT_PORT; + settings.uri = root["uri"] | FACTORY_MQTT_URI; settings.username = root["username"] | SettingValue::format(FACTORY_MQTT_USERNAME); settings.password = root["password"] | FACTORY_MQTT_PASSWORD; settings.clientId = root["client_id"] | SettingValue::format(FACTORY_MQTT_CLIENT_ID); settings.keepAlive = root["keep_alive"] | FACTORY_MQTT_KEEP_ALIVE; settings.cleanSession = root["clean_session"] | FACTORY_MQTT_CLEAN_SESSION; - settings.maxTopicLength = root["max_topic_length"] | FACTORY_MQTT_MAX_TOPIC_LENGTH; return StateUpdateResult::CHANGED; } }; @@ -122,8 +116,8 @@ class MqttSettingsService : public StatefulService<MqttSettings> bool isEnabled(); bool isConnected(); const char *getClientId(); - AsyncMqttClientDisconnectReason getDisconnectReason(); - AsyncMqttClient *getMqttClient(); + String getLastError(); + PsychicMqttClient *getMqttClient(); protected: void onConfigUpdated(); @@ -135,7 +129,7 @@ class MqttSettingsService : public StatefulService<MqttSettings> FSPersistence<MqttSettings> _fsPersistence; // Pointers to hold retained copies of the mqtt client connection strings. - // This is required as AsyncMqttClient holds refrences to the supplied connection strings. + // This is required as AsyncMqttClient holds references to the supplied connection strings. char *_retainedHost; char *_retainedClientId; char *_retainedUsername; @@ -143,19 +137,17 @@ class MqttSettingsService : public StatefulService<MqttSettings> // variable to help manage connection bool _reconfigureMqtt; - unsigned long _disconnectedAt; - - // connection status - AsyncMqttClientDisconnectReason _disconnectReason; + String _lastError; // the MQTT client instance - AsyncMqttClient _mqttClient; + PsychicMqttClient _mqttClient; void onStationModeGotIP(WiFiEvent_t event, WiFiEventInfo_t info); void onStationModeDisconnected(WiFiEvent_t event, WiFiEventInfo_t info); void onMqttConnect(bool sessionPresent); - void onMqttDisconnect(AsyncMqttClientDisconnectReason reason); + void onMqttDisconnect(bool sessionPresent); + void onMqttError(esp_mqtt_error_codes_t error); void configureMqtt(); }; diff --git a/lib/framework/MqttStatus.cpp b/lib/framework/MqttStatus.cpp index a1884fa4..3efe4b4b 100644 --- a/lib/framework/MqttStatus.cpp +++ b/lib/framework/MqttStatus.cpp @@ -38,7 +38,7 @@ esp_err_t MqttStatus::mqttStatus(PsychicRequest *request) root["enabled"] = _mqttSettingsService->isEnabled(); root["connected"] = _mqttSettingsService->isConnected(); root["client_id"] = _mqttSettingsService->getClientId(); - root["disconnect_reason"] = (uint8_t)_mqttSettingsService->getDisconnectReason(); + root["last_error"] = _mqttSettingsService->getLastError(); return response.send(); } diff --git a/lib/framework/WWWData.h b/lib/framework/WWWData.h index 5bbd4f4d..acd06b59 100644 --- a/lib/framework/WWWData.h +++ b/lib/framework/WWWData.h @@ -3,7 +3,7 @@ // favicon.png const uint8_t ESP_SVELTEKIT_DATA_0[] = { - 0x1F,0x8B,0x08,0x00,0x18,0x32,0xB0,0x65,0x02,0xFF,0x01,0x23,0x06,0xDC,0xF9,0x89, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x01,0x23,0x06,0xDC,0xF9,0x89, 0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x08,0x04,0x00,0x00,0x00,0x69,0x37,0xA9,0x40, 0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x00,0xAE,0xCE,0x1C,0xE9,0x00,0x00,0x05, @@ -108,41 +108,40 @@ const uint8_t ESP_SVELTEKIT_DATA_0[] = { // index.html const uint8_t ESP_SVELTEKIT_DATA_1[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xAD,0x54,0x3D,0x6F,0xDB,0x30, - 0x10,0x9D,0x15,0xA0,0xFF,0x81,0xE1,0x24,0x01,0x96,0x88,0xA2,0x4B,0xE1,0x88,0x5E, - 0x9A,0xCC,0x09,0x90,0x2E,0x45,0x10,0x18,0xB4,0x78,0xB6,0x58,0x53,0xA4,0x40,0x9E, - 0x94,0x1A,0x41,0xFE,0x7B,0x49,0x51,0x72,0xD0,0xA9,0x45,0xDC,0x45,0xBC,0xCF,0xF7, - 0xEE,0x8E,0x27,0xD6,0xD7,0xB7,0xF7,0xDF,0xBE,0xFF,0x78,0xB8,0x23,0x2D,0x76,0x7A, - 0xF3,0xE9,0xAA,0x8E,0x27,0xD1,0xC2,0x1C,0x38,0x05,0x43,0x83,0x25,0xAB,0x5B,0x10, - 0x32,0x0A,0x59,0xDD,0x01,0x0A,0xD2,0xB4,0xC2,0x79,0x40,0x4E,0x07,0xDC,0x97,0x5F, - 0x29,0x61,0xC9,0xA7,0x95,0x39,0x12,0x07,0x9A,0x53,0xD5,0x58,0x43,0x49,0xEB,0x60, - 0xCF,0x29,0xDB,0x8B,0x31,0xEA,0x55,0x6F,0x0E,0xE7,0xD0,0x09,0xC6,0x88,0x0E,0x38, - 0x1D,0x15,0xBC,0xF4,0xD6,0x21,0x25,0x21,0x08,0xC1,0x04,0xD8,0x17,0x25,0xB1,0xE5, - 0x12,0x42,0x1E,0x94,0x93,0xB2,0x24,0xFE,0x49,0xD3,0x59,0x39,0x68,0xE8,0x83,0x6C, - 0x85,0x3C,0xF3,0x6D,0x45,0xDF,0x33,0xD5,0x75,0x03,0x8A,0x9D,0x06,0x16,0x10,0xDD, - 0x89,0x79,0x14,0x0E,0xAB,0x9F,0x9E,0x6E,0x3E,0x00,0xD1,0xB4,0x83,0x39,0x7A,0xE6, - 0x9B,0x16,0x62,0xB4,0xBB,0x10,0x67,0x40,0xA5,0xFD,0xA5,0xB5,0x28,0x73,0xD0,0x80, - 0xD6,0x5C,0x0A,0xA4,0x8C,0x84,0x5F,0x5F,0x3E,0x0A,0x92,0x86,0x1B,0x6C,0xFF,0xA3, - 0x8A,0x09,0x23,0xAE,0x1B,0x5B,0xF6,0xAD,0xDE,0x59,0x79,0x22,0x52,0xA0,0x28,0xFD, - 0x08,0x1A,0xE1,0xA8,0xB0,0x9C,0x11,0xCB,0x68,0xE6,0xB4,0xB5,0x23,0x38,0x9A,0xB6, - 0x4A,0xAA,0x91,0x78,0x3C,0xE9,0xB0,0x55,0x52,0xF9,0x5E,0x8B,0xD3,0x7A,0x59,0xAA, - 0x54,0x5D,0x56,0xFB,0xC6,0xA9,0x1E,0x27,0x39,0x7B,0x9D,0xBE,0xD9,0x76,0x7B,0xC6, - 0xDE,0x02,0x36,0xFB,0xCF,0x84,0x93,0xD9,0x95,0xED,0x84,0x87,0x35,0xA1,0x74,0x35, - 0xEB,0x60,0xC6,0x35,0x79,0x7D,0x4B,0xDA,0xDB,0xCD,0x55,0x12,0x02,0x87,0x47,0x02, - 0x1A,0xBA,0xC0,0x14,0xB2,0xA5,0x6D,0x86,0x28,0x56,0xCD,0xE0,0x5C,0x38,0x1F,0x27, - 0xD2,0xAA,0x17,0x51,0xB9,0x4B,0x61,0x4B,0xEE,0x83,0xB3,0x9D,0xF2,0x50,0x09,0xAD, - 0xF3,0xA7,0x99,0x45,0x75,0xF1,0x87,0xC8,0xFF,0xB6,0xCA,0xC5,0xEA,0x9F,0xE2,0xE7, - 0xDB,0x29,0x52,0xF0,0x73,0x51,0x61,0x0B,0x26,0xCF,0x9F,0x42,0xBF,0x2B,0x12,0x9C, - 0xCF,0x05,0xE1,0x9B,0x73,0xC7,0xC1,0x5A,0x4D,0x0C,0x79,0x70,0xAD,0x96,0xA6,0x8A, - 0x9B,0xB9,0xE5,0x59,0x98,0x26,0x50,0xB3,0xF7,0x69,0xD6,0x2C,0x0C,0x3F,0x5D,0x5E, - 0xBC,0xB3,0xF8,0x8E,0xB0,0xF9,0x41,0xF9,0x0D,0xA7,0xB2,0x5D,0x62,0x62,0x04,0x00, - 0x00, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xAD,0x54,0x3B,0x6F,0xDB,0x30, + 0x10,0x9E,0x15,0xA0,0xFF,0x81,0xE1,0x24,0x01,0x96,0x38,0x74,0x29,0x1C,0xD1,0x4B, + 0x92,0x39,0x01,0xD2,0xA5,0x08,0x02,0x83,0x16,0xCF,0x26,0x6B,0x8A,0x14,0xC8,0x93, + 0x12,0x23,0xC8,0x7F,0x2F,0xA9,0x87,0x8B,0x4E,0x2D,0xE2,0x2E,0xE2,0x3D,0xBF,0xEF, + 0xEE,0x78,0x62,0x7D,0x7D,0xF7,0x70,0xFB,0xFD,0xC7,0xE3,0x3D,0x51,0xD8,0x9A,0xCD, + 0x97,0xAB,0x3A,0x9D,0xC4,0x08,0x7B,0xE0,0x14,0x2C,0x8D,0x96,0xAC,0x56,0x20,0x64, + 0x12,0xB2,0xBA,0x05,0x14,0xA4,0x51,0xC2,0x07,0x40,0x4E,0x7B,0xDC,0x97,0xDF,0x28, + 0x61,0x93,0xCF,0x68,0x7B,0x24,0x1E,0x0C,0xA7,0xBA,0x71,0x96,0x12,0xE5,0x61,0xCF, + 0x29,0xDB,0x8B,0x21,0xE9,0x55,0x67,0x0F,0xE7,0xD0,0x11,0xC6,0x8A,0x16,0x38,0x1D, + 0x34,0xBC,0x76,0xCE,0x23,0x25,0x31,0x08,0xC1,0x46,0xD8,0x57,0x2D,0x51,0x71,0x09, + 0x31,0x0F,0xCA,0x51,0x59,0x12,0xFF,0xA4,0x69,0x9D,0xEC,0x0D,0x74,0x51,0x76,0x42, + 0x9E,0xF9,0xB6,0xA2,0xEB,0x98,0x6E,0xDB,0x1E,0xC5,0xCE,0x00,0x8B,0x88,0xFE,0xC4, + 0x02,0x0A,0x8F,0xD5,0xCF,0x40,0x37,0x9F,0x80,0x68,0x54,0x6F,0x8F,0x81,0x85,0x46, + 0x41,0x8A,0xF6,0x17,0xE2,0xF4,0xA8,0x4D,0xB8,0xB4,0x16,0x6D,0x0F,0x06,0xD0,0xD9, + 0x4B,0x81,0xB4,0x95,0xF0,0xF6,0xF5,0xB3,0x20,0xD3,0x70,0xA3,0xED,0x7F,0x54,0x31, + 0x62,0xA4,0x75,0x63,0xCB,0xBE,0xD5,0x3B,0x27,0x4F,0x44,0x0A,0x14,0x65,0x18,0xC0, + 0x20,0x1C,0x35,0x96,0x33,0x62,0x99,0xCC,0x9C,0x2A,0x37,0x80,0xA7,0xD3,0x56,0x49, + 0x3D,0x90,0x80,0x27,0x13,0xB7,0x4A,0xEA,0xD0,0x19,0x71,0x5A,0x2F,0x4B,0x35,0x55, + 0x97,0xD5,0xA1,0xF1,0xBA,0xC3,0x51,0xCE,0xDE,0xC7,0x6F,0xB6,0xDD,0x9E,0xB1,0xB7, + 0x8D,0x16,0x3B,0x41,0x38,0x99,0x5D,0xD9,0x4E,0x04,0x58,0x13,0x4A,0x57,0xB3,0x0E, + 0x76,0x58,0x93,0xF7,0x8F,0x49,0xFB,0xB8,0xB9,0x9A,0x84,0xC8,0x11,0x90,0x80,0x81, + 0x36,0x32,0xC5,0x6C,0xE9,0x9A,0x3E,0x89,0x55,0xD3,0x7B,0x1F,0xCF,0xA7,0x91,0xB4, + 0xEA,0x44,0x52,0xEE,0xA7,0xB0,0x25,0xF7,0xD1,0xBB,0x56,0x07,0xA8,0x84,0x31,0xF9, + 0xF3,0xCC,0xA2,0xDB,0xF4,0x43,0xE4,0x7F,0x5B,0xE5,0x62,0xF5,0x4F,0xF1,0xF3,0xED, + 0x14,0x53,0xF0,0x4B,0x51,0xA1,0x02,0x9B,0xE7,0xCF,0xB1,0xDF,0x15,0x89,0xCE,0x97, + 0x82,0xF0,0xCD,0xB9,0xE3,0x68,0xAD,0x46,0x86,0x3C,0xBA,0x56,0x4B,0x53,0xC5,0xCD, + 0xDC,0xF2,0x2C,0x8C,0x13,0xA8,0xD9,0xEF,0x69,0xD6,0x2C,0x0E,0x7F,0xBA,0xBC,0x74, + 0x67,0xE9,0x1D,0x61,0xF3,0x83,0xF2,0x0B,0x59,0x87,0x37,0x3D,0x62,0x04,0x00,0x00, }; // manifest.json const uint8_t ESP_SVELTEKIT_DATA_2[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x25,0x8D,0xCD,0x0A,0xC2,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x25,0x8D,0xCD,0x0A,0xC2,0x30, 0x10,0x84,0xCF,0x15,0x7C,0x87,0xB0,0x67,0x51,0x8C,0xB5,0x3F,0xDE,0x3D,0x79,0x11, 0x7A,0x14,0x91,0x50,0xB7,0x12,0x48,0xB7,0x25,0x49,0x4B,0x6A,0xF1,0xDD,0xCD,0xB6, 0x87,0x19,0xD8,0xFD,0x66,0x67,0xE7,0xED,0x26,0x01,0x52,0x2D,0xC2,0x45,0xC0,0xB5, @@ -159,15 +158,15 @@ const uint8_t ESP_SVELTEKIT_DATA_2[] = { // _app/version.json const uint8_t ESP_SVELTEKIT_DATA_3[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xAB,0x56,0x2A,0x4B,0x2D,0x2A, - 0xCE,0xCC,0xCF,0x53,0xB2,0x52,0x32,0x34,0x37,0x30,0x33,0x30,0x31,0xB5,0x34,0x33, - 0x32,0x36,0x31,0x56,0xAA,0x05,0x00,0xAD,0xA1,0x98,0x72,0x1B,0x00,0x00,0x00, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xAB,0x56,0x2A,0x4B,0x2D,0x2A, + 0xCE,0xCC,0xCF,0x53,0xB2,0x52,0x32,0x34,0x37,0x30,0xB3,0xB4,0x34,0x31,0x37,0x36, + 0x34,0x33,0x34,0x55,0xAA,0x05,0x00,0x10,0x4C,0xC5,0xD1,0x1B,0x00,0x00,0x00, }; // _app/immutable/assets/0.css const uint8_t ESP_SVELTEKIT_DATA_4[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x7D,0x6B,0x8F,0xDB,0x3A, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x7D,0x6B,0x8F,0xDB,0x3A, 0x92,0xE8,0xF7,0xFB,0x2B,0x84,0x0C,0x82,0xB4,0x32,0x92,0x22,0xF9,0xFD,0x40,0x82, 0xD9,0x3B,0xD8,0xC1,0x2E,0xB0,0xB3,0x1F,0xF6,0x60,0x2F,0xEE,0xEC,0x49,0x3E,0xC8, 0xB6,0x6C,0x6B,0x5A,0x96,0x3C,0x92,0xDC,0x8F,0x08,0x9E,0xDF,0xBE,0x55,0x7C,0x89, @@ -885,28 +884,29 @@ const uint8_t ESP_SVELTEKIT_DATA_4[] = { 0x17,0x7A,0xE1,0x42,0xF3,0xAD,0x0A,0x20,0x49,0x7F,0xA8,0x11,0x41,0xAF,0xDC,0x2B, 0x89,0xC4,0x8B,0xAD,0x39,0xE0,0x7F,0xF6,0xA6,0x13,0xE0,0x80,0xFC,0x66,0x76,0xED, 0x5E,0x36,0x9D,0xE8,0xEE,0x65,0x00,0x79,0xDD,0x8F,0x55,0x36,0xE7,0xC8,0x11,0xBE, - 0x8C,0x0C,0x53,0x64,0xB1,0xFB,0x3C,0xDB,0x3D,0xD4,0x8E,0xE3,0xE2,0x05,0x60,0xD5, - 0x3D,0x80,0x9A,0x8A,0x49,0xE6,0xC7,0xA6,0x97,0xB9,0x76,0x44,0x5D,0x67,0x76,0x77, - 0x0B,0x77,0xA8,0x79,0xCD,0xBB,0xC2,0x3A,0xCB,0x73,0x4C,0xF4,0x1C,0x52,0x6D,0x6D, - 0x5E,0xF7,0x24,0xB1,0xE9,0x48,0x8F,0x60,0xA3,0xC7,0x3B,0x26,0xD4,0xAE,0x52,0xBD, - 0xD3,0xAE,0x52,0x3D,0xDD,0x55,0xEA,0xDC,0x2A,0xF5,0x1E,0x84,0x8A,0xF8,0xCD,0x7E, - 0xFE,0x52,0xC9,0x5E,0xB4,0x67,0x57,0x27,0xE4,0x6E,0x49,0x25,0x1F,0x0D,0x20,0xD4, - 0xE8,0x27,0x4F,0x12,0xF0,0x86,0x89,0x12,0x1B,0x1A,0xA1,0x4D,0x57,0x67,0x82,0xBA, - 0xFB,0x19,0xC0,0xD1,0x5B,0x87,0x31,0x6C,0xA9,0x22,0xAF,0xB8,0x8B,0x12,0xF4,0x27, - 0x9D,0x4E,0x96,0x9B,0x75,0x26,0xBB,0xA7,0x29,0x09,0xB8,0xCD,0xBD,0x8D,0x2C,0x6F, - 0xD2,0x70,0x8F,0xEB,0x8F,0x1C,0xCF,0x1F,0x3B,0x5E,0x30,0x75,0xBC,0xE9,0xD8,0xC6, - 0xC3,0xC3,0xAD,0x69,0xF0,0xFC,0x0F,0x28,0x7E,0xA2,0x50,0xD7,0xE8,0x97,0xD0,0xBC, - 0xEF,0x05,0x1B,0x1B,0xF2,0x36,0x34,0x3E,0xF0,0x01,0x93,0x39,0x08,0xAB,0xE2,0x66, - 0x67,0xA0,0xA6,0xC2,0x87,0x0C,0xA7,0xE6,0xB7,0x91,0x6E,0xF0,0xD2,0xBD,0x7D,0xEC, - 0x41,0x8E,0x49,0x4B,0x0E,0x7C,0x85,0xE5,0xD8,0x87,0x0C,0x43,0xF8,0x6F,0xDC,0x86, - 0x06,0x7B,0x0E,0x1F,0x60,0x72,0x46,0x2D,0x39,0x48,0x86,0xE3,0xFF,0xF9,0x5F,0x4E, - 0xBA,0x3F,0xC1,0x19,0x27,0x01,0x00, + 0x8C,0x0C,0x53,0x64,0xB1,0xFB,0x8C,0x2E,0x3D,0x78,0x82,0x9C,0xA2,0xC3,0x08,0xF3, + 0x26,0x3A,0xEC,0xD0,0x23,0x29,0x4C,0xAD,0x1E,0x88,0x16,0xFD,0x71,0x24,0x79,0x77, + 0x0F,0xB5,0x93,0xB9,0x78,0x2D,0x58,0x75,0x25,0xA0,0x66,0x65,0x92,0xF9,0xB1,0xE9, + 0x91,0xAE,0x1D,0x67,0xD7,0x99,0xDD,0xDD,0xC2,0x1D,0x6A,0x1E,0xF6,0xAE,0xB0,0xE4, + 0x12,0x74,0x6D,0x2E,0xF8,0x98,0x68,0xF4,0x73,0xC7,0x84,0xDA,0x41,0xAA,0x77,0xDA, + 0x41,0xAA,0xA7,0x3B,0x48,0x9D,0x5B,0x9B,0xDE,0x83,0x28,0x11,0x6F,0xD9,0xCF,0x5F, + 0x2A,0xD9,0x77,0xF6,0xEC,0x9A,0x84,0xDC,0x28,0xA9,0xE4,0x03,0x01,0x84,0x1A,0xBD, + 0xE3,0x49,0x02,0xDE,0x2B,0x51,0x22,0x42,0x23,0xB4,0xE9,0xE0,0x4C,0x50,0x77,0xB7, + 0xFC,0x1F,0xBD,0x75,0x18,0xC3,0x46,0x2A,0xF2,0x8A,0xBB,0x28,0x41,0x2F,0xD2,0xE9, + 0x64,0xB9,0x59,0x67,0xB2,0x53,0x9A,0x92,0x80,0x9B,0xDB,0xDB,0xC8,0xF2,0x26,0x0D, + 0xA7,0xB8,0xFE,0xC8,0xF1,0xFC,0xB1,0xE3,0x05,0x53,0xC7,0x9B,0x8E,0x6D,0x3C,0x32, + 0xDC,0x9A,0x86,0xCC,0xFF,0x80,0xBA,0x27,0x6A,0x74,0x8D,0xDE,0x08,0xCD,0x5B,0x5E, + 0xB0,0x9D,0x21,0x2F,0x42,0xE3,0xB3,0x1E,0x30,0x85,0x83,0x88,0x2A,0xCE,0x75,0x06, + 0x6A,0x2A,0x7C,0xBE,0x70,0x6A,0x7E,0x11,0xE9,0x06,0xAF,0xDA,0xDB,0xC7,0x1E,0xE4, + 0x98,0xB4,0xE4,0xC0,0xB7,0x57,0x8E,0x7D,0xC8,0x30,0x84,0xFF,0xC6,0x6D,0x68,0xB0, + 0xE7,0xF0,0xD9,0x25,0x67,0xD4,0x92,0x83,0x64,0x38,0xFE,0x9F,0xFF,0x05,0x70,0x94, + 0x36,0x53,0x0F,0x27,0x01,0x00, }; // _app/immutable/assets/14.css const uint8_t ESP_SVELTEKIT_DATA_5[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xB5,0x94,0xC1,0x4E,0xC3,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xB5,0x94,0xC1,0x4E,0xC3,0x30, 0x0C,0x86,0xEF,0x3C,0x05,0x1C,0xB8,0x00,0x41,0xE5,0xC0,0x81,0xF4,0x51,0xA6,0x1E, 0xB2,0xC4,0x6D,0xAC,0xA5,0x49,0xE5,0xB8,0x2D,0x6C,0xDA,0xBB,0x13,0x5A,0x8D,0x51, 0x75,0x45,0x1B,0x1A,0xB7,0xD8,0x6D,0xFC,0x7F,0x7F,0x62,0xC7,0x60,0xB7,0x32,0x8A, @@ -932,7 +932,7 @@ const uint8_t ESP_SVELTEKIT_DATA_5[] = { // _app/immutable/assets/logo.png const uint8_t ESP_SVELTEKIT_DATA_6[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9C,0x7B,0x53,0x74,0x65,0x4D, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9C,0x7B,0x53,0x74,0x65,0x4D, 0xF0,0xEF,0x20,0x9A,0x60,0xE2,0x9C,0xD8,0x99,0x4C,0x6C,0x9D,0xD8,0xB6,0x4E,0x6C, 0x3B,0x39,0xB1,0x26,0x9E,0xD8,0xD6,0xC4,0xB6,0x6D,0xDB,0xB6,0x6D,0xEB,0xE6,0xBB, 0x6B,0xFD,0x9F,0xEE,0x7D,0xB8,0xEB,0x3E,0xEC,0xB5,0x6A,0xEF,0xAA,0xEE,0xAE,0xAE, @@ -2135,7 +2135,7 @@ const uint8_t ESP_SVELTEKIT_DATA_6[] = { // _app/immutable/assets/_layout.css const uint8_t ESP_SVELTEKIT_DATA_7[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x7D,0x6B,0x8F,0xDB,0x3A, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x7D,0x6B,0x8F,0xDB,0x3A, 0x92,0xE8,0xF7,0xFB,0x2B,0x84,0x0C,0x82,0xB4,0x32,0x92,0x22,0xF9,0xFD,0x40,0x82, 0xD9,0x3B,0xD8,0xC1,0x2E,0xB0,0xB3,0x1F,0xF6,0x60,0x2F,0xEE,0xEC,0x49,0x3E,0xC8, 0xB6,0x6C,0x6B,0x5A,0x96,0x3C,0x92,0xDC,0x8F,0x08,0x9E,0xDF,0xBE,0x55,0x7C,0x89, @@ -2853,28 +2853,28 @@ const uint8_t ESP_SVELTEKIT_DATA_7[] = { 0x2A,0x80,0x24,0xFD,0x75,0x45,0x04,0xBD,0x72,0xAF,0x24,0x12,0xF9,0xB5,0xE6,0x80, 0xFF,0xD9,0x9B,0x4E,0x80,0x03,0xF2,0x43,0xD7,0xB5,0x7B,0xD9,0x74,0xA2,0xBB,0x97, 0x01,0xE4,0x75,0xBF,0x30,0xD9,0x9C,0x23,0x47,0xF8,0x9C,0x31,0x4C,0x91,0xC5,0xEE, - 0xF3,0x6C,0xF7,0x50,0x3B,0x8E,0x8B,0x67,0x7B,0x55,0xF7,0x00,0x6A,0x2A,0x26,0x99, - 0x1F,0x9B,0x5E,0xE6,0xDA,0x11,0x75,0x9D,0xD9,0xDD,0x2D,0xDC,0xA1,0xE6,0x35,0xEF, - 0x0A,0xEB,0x2C,0xCF,0x31,0xD1,0x73,0x48,0xB5,0xB5,0x79,0xDD,0x93,0xC4,0xA6,0x23, - 0x3D,0x82,0x8D,0x1E,0xEF,0x98,0x50,0xBB,0x4A,0xF5,0x4E,0xBB,0x4A,0xF5,0x74,0x57, - 0xA9,0x73,0xAB,0xD4,0x7B,0x10,0x2A,0xE2,0x37,0xFB,0xF9,0x4B,0x25,0x7B,0xD1,0x9E, - 0x5D,0x9D,0x90,0xBB,0x25,0x95,0x7C,0x34,0x80,0x50,0xA3,0x9F,0x3C,0x49,0xC0,0x1B, - 0x26,0x4A,0x94,0x67,0x84,0x36,0x5D,0x9D,0x09,0xEA,0xEE,0x67,0x00,0x47,0x6F,0x1D, - 0xC6,0xB0,0xA5,0x8A,0xBC,0xE2,0x2E,0x4A,0xD0,0x9F,0x74,0x3A,0x59,0x6E,0xD6,0x99, - 0xEC,0x9E,0xA6,0x24,0xE0,0x36,0xF7,0x36,0xB2,0xBC,0x49,0xC3,0x3D,0xAE,0x3F,0x72, - 0x3C,0x7F,0xEC,0x78,0xC1,0xD4,0xF1,0xA6,0x63,0x1B,0x0F,0x0F,0xB7,0xA6,0xC1,0xF3, - 0x3F,0xA0,0xF8,0x89,0x42,0x5D,0xA3,0x5F,0x42,0xF3,0x66,0x17,0x6C,0x6C,0xC8,0x83, - 0xCE,0xF8,0x54,0x07,0x4C,0xE6,0x20,0xAC,0x8A,0x9B,0x9D,0x81,0x9A,0x0A,0x5F,0x1F, - 0x9C,0x9A,0x5F,0x39,0xBA,0xC1,0xEB,0xF5,0xF6,0xB1,0x07,0x39,0x26,0x2D,0x39,0xF0, - 0x3D,0x95,0x63,0x1F,0x32,0x0C,0xE1,0xBF,0x71,0x1B,0x1A,0xEC,0x39,0x7C,0x4A,0xC9, - 0x19,0xB5,0xE4,0x20,0x19,0x8E,0xFF,0xE7,0x7F,0x01,0x2A,0x85,0xA3,0x68,0xB8,0x26, - 0x01,0x00, + 0x33,0xBA,0xF4,0xE0,0x09,0x72,0x8A,0x0E,0x23,0xCC,0x9B,0xE8,0xB0,0x43,0x8F,0xA4, + 0x30,0xB5,0x7A,0x20,0x5A,0xF4,0xC7,0x91,0xE4,0xDD,0x3D,0xD4,0x4E,0xE6,0xE2,0x89, + 0x5F,0xD5,0x95,0x80,0x9A,0x95,0x49,0xE6,0xC7,0xA6,0x47,0xBA,0x76,0x9C,0x5D,0x67, + 0x76,0x77,0x0B,0x77,0xA8,0x79,0xD8,0xBB,0xC2,0x92,0x4B,0xD0,0xB5,0xB9,0xE0,0x63, + 0xA2,0xD1,0xCF,0x1D,0x13,0x6A,0x07,0xA9,0xDE,0x69,0x07,0xA9,0x9E,0xEE,0x20,0x75, + 0x6E,0x6D,0x7A,0x0F,0xA2,0x44,0xBC,0x65,0x3F,0x7F,0xA9,0x64,0xDF,0xD9,0xB3,0x6B, + 0x12,0x72,0xA3,0xA4,0x92,0x0F,0x04,0x10,0x6A,0xF4,0x8E,0x27,0x09,0x78,0xAF,0x44, + 0x89,0xED,0x8C,0xD0,0xA6,0x83,0x33,0x41,0xDD,0xDD,0xF2,0x7F,0xF4,0xD6,0x61,0x0C, + 0x1B,0xA9,0xC8,0x2B,0xEE,0xA2,0x04,0xBD,0x48,0xA7,0x93,0xE5,0x66,0x9D,0xC9,0x4E, + 0x69,0x4A,0x02,0x6E,0x6E,0x6F,0x23,0xCB,0x9B,0x34,0x9C,0xE2,0xFA,0x23,0xC7,0xF3, + 0xC7,0x8E,0x17,0x4C,0x1D,0x6F,0x3A,0xB6,0xF1,0xC8,0x70,0x6B,0x1A,0x32,0xFF,0x03, + 0xEA,0x9E,0xA8,0xD1,0x35,0x7A,0x23,0x34,0xEF,0x73,0xC1,0x76,0x86,0x3C,0xE3,0x8C, + 0x0F,0x74,0xC0,0x14,0x0E,0x22,0xAA,0x38,0xD7,0x19,0xA8,0xA9,0xF0,0xCD,0xC1,0xA9, + 0xF9,0x6D,0xA3,0x1B,0xBC,0x54,0x6F,0x1F,0x7B,0x90,0x63,0xD2,0x92,0x03,0x5F,0x51, + 0x39,0xF6,0x21,0xC3,0x10,0xFE,0x1B,0xB7,0xA1,0xC1,0x9E,0xC3,0x07,0x94,0x9C,0x51, + 0x4B,0x0E,0x92,0xE1,0xF8,0x7F,0xFE,0x17,0xA9,0x18,0xA9,0xD7,0xAE,0x26,0x01,0x00, }; // _app/immutable/assets/_page.css const uint8_t ESP_SVELTEKIT_DATA_8[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xB5,0x94,0xC1,0x4E,0xC3,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xB5,0x94,0xC1,0x4E,0xC3,0x30, 0x0C,0x86,0xEF,0x3C,0x05,0x1C,0xB8,0x00,0x41,0xE5,0xC0,0x81,0xF4,0x51,0xA6,0x1E, 0xB2,0xC4,0x6D,0xAC,0xA5,0x49,0xE5,0xB8,0x2D,0x6C,0xDA,0xBB,0x13,0x5A,0x8D,0x51, 0x75,0x45,0x1B,0x1A,0xB7,0xD8,0x6D,0xFC,0x7F,0x7F,0x62,0xC7,0x60,0xB7,0x32,0x8A, @@ -2900,7 +2900,7 @@ const uint8_t ESP_SVELTEKIT_DATA_8[] = { // _app/immutable/chunks/24-hours.js const uint8_t ESP_SVELTEKIT_DATA_9[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0x5D,0x6F,0xDB,0x20, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0x5D,0x6F,0xDB,0x20, 0x14,0x7D,0xDF,0xAF,0xA0,0x56,0x95,0x82,0x76,0xED,0xDA,0x4E,0xD2,0x65,0x75,0xA9, 0xB4,0x4E,0x93,0xFA,0xB2,0xA7,0x3D,0x46,0x51,0xE5,0xDA,0xC4,0xD0,0xDA,0x90,0x02, 0x76,0x22,0x21,0xFF,0xF7,0x81,0xB3,0x7E,0xA4,0x8F,0x93,0x6D,0x0E,0x5C,0xCE,0x3D, @@ -2945,7 +2945,7 @@ const uint8_t ESP_SVELTEKIT_DATA_9[] = { // _app/immutable/chunks/access-point.js const uint8_t ESP_SVELTEKIT_DATA_10[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0xD1,0x6E,0xDB,0x20, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0xD1,0x6E,0xDB,0x20, 0x14,0x7D,0xDF,0x57,0x50,0x54,0xA5,0xA0,0xDD,0xB8,0xB6,0x9B,0x56,0x69,0x5D,0x2A, 0xAD,0xD3,0xA4,0xBE,0xEC,0x69,0x8F,0x51,0x54,0x51,0x9B,0xC4,0xB4,0x18,0x52,0xC0, 0x49,0x24,0xE4,0x7F,0x2F,0x38,0x6B,0x97,0x6E,0x6F,0x93,0x6D,0x0E,0xBE,0xF7,0xDC, @@ -2988,7 +2988,7 @@ const uint8_t ESP_SVELTEKIT_DATA_10[] = { // _app/immutable/chunks/alert-triangle.js const uint8_t ESP_SVELTEKIT_DATA_11[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0xD1,0x6E,0xDB,0x20, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0xD1,0x6E,0xDB,0x20, 0x14,0x7D,0xDF,0x57,0x50,0xAB,0xCA,0x40,0xBB,0xA1,0xC6,0x49,0x9B,0xA5,0x2E,0x95, 0xD6,0x69,0x52,0x1F,0xDA,0xA7,0x3D,0x46,0x51,0x65,0xD9,0x24,0xA6,0xC5,0x90,0x02, 0x4E,0xA2,0x21,0xFF,0xFB,0x20,0x59,0xBB,0x76,0xD3,0x5E,0x26,0xDB,0x1C,0x7C,0xEF, @@ -3032,7 +3032,7 @@ const uint8_t ESP_SVELTEKIT_DATA_11[] = { // _app/immutable/chunks/await_block.js const uint8_t ESP_SVELTEKIT_DATA_12[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x5D,0x53,0xCB,0x8E,0xDB,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x5D,0x53,0xCB,0x8E,0xDB,0x30, 0x0C,0xBC,0xF7,0x2B,0x9C,0x3D,0x18,0x12,0x40,0xA8,0x49,0x8F,0x6B,0xA8,0x3D,0x14, 0x3D,0x76,0xF7,0x03,0x82,0x20,0x70,0x64,0x26,0x76,0x23,0x4B,0x81,0x1E,0x49,0x00, 0x43,0xFF,0x5E,0xCA,0x8F,0x5D,0xB7,0xF0,0x81,0x32,0x39,0x33,0xA4,0xC7,0x54,0xD7, @@ -3069,7 +3069,7 @@ const uint8_t ESP_SVELTEKIT_DATA_12[] = { // _app/immutable/chunks/clock-check.js const uint8_t ESP_SVELTEKIT_DATA_13[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0xC1,0x4E,0xE3,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0xC1,0x4E,0xE3,0x30, 0x10,0xBD,0xEF,0x57,0x18,0x0B,0x15,0x5B,0x3B,0x84,0x34,0x74,0xB7,0x2A,0xC1,0x1C, 0x40,0x2B,0x71,0xD9,0xD3,0x1E,0xAB,0x0A,0x85,0x64,0x9A,0x18,0x1C,0xBB,0x6B,0x3B, 0x6D,0x25,0x2B,0xFF,0x8E,0xDD,0x2E,0x6C,0xD9,0xE3,0x4A,0x49,0x9E,0x33,0xF3,0xFC, @@ -3112,7 +3112,7 @@ const uint8_t ESP_SVELTEKIT_DATA_13[] = { // _app/immutable/chunks/Collapsible.js const uint8_t ESP_SVELTEKIT_DATA_14[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xAD,0x56,0x59,0x6F,0xDB,0x38, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xAD,0x56,0x59,0x6F,0xDB,0x38, 0x10,0x7E,0xDF,0x5F,0xA1,0x08,0x81,0x40,0xA1,0x23,0xAF,0x73,0x6C,0x51,0xD8,0x50, 0x83,0x26,0xBD,0xD2,0x23,0x4D,0x9B,0xA3,0xDD,0x06,0x41,0x20,0x4B,0x94,0xCD,0x84, 0x3A,0x4A,0x52,0xB1,0x53,0x45,0xFF,0x7D,0x67,0x48,0x39,0x71,0xB6,0xED,0x62,0x1F, @@ -3211,7 +3211,7 @@ const uint8_t ESP_SVELTEKIT_DATA_14[] = { // _app/immutable/chunks/compareVersions.js const uint8_t ESP_SVELTEKIT_DATA_15[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x5A,0x79,0x73,0xD3,0xC8, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x5A,0x79,0x73,0xD3,0xC8, 0x12,0xFF,0xFF,0x7D,0x0A,0xA1,0xA2,0x8C,0x04,0x23,0x61,0x3B,0x07,0xC4,0x46,0xB8, 0x72,0x11,0x02,0xE4,0x20,0x09,0xA7,0xF1,0xB2,0xB2,0x34,0xB6,0x45,0x64,0x49,0x48, 0xE3,0x0B,0xC7,0xEF,0xB3,0xBF,0x5F,0xCF,0x48,0x3E,0x42,0x92,0xDD,0x7D,0x45,0xD5, @@ -3423,7 +3423,7 @@ const uint8_t ESP_SVELTEKIT_DATA_15[] = { // _app/immutable/chunks/ConfirmDialog.js const uint8_t ESP_SVELTEKIT_DATA_16[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x5B,0x79,0x73,0xDB,0xB8, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x5B,0x79,0x73,0xDB,0xB8, 0x92,0xFF,0x7F,0x3F,0x85,0xCC,0xCD,0x2A,0xE4,0x33,0xC4,0x48,0xCE,0x31,0x13,0x2A, 0x88,0xD7,0x71,0x94,0x63,0xEC,0xD8,0xCE,0xC4,0x71,0x32,0xD1,0xD3,0xF3,0xA3,0x44, 0x48,0xA2,0x4D,0x91,0x0C,0x0F,0x1D,0x96,0xB4,0x9F,0x7D,0x7F,0x0D,0xF0,0x92,0xAC, @@ -3777,7 +3777,7 @@ const uint8_t ESP_SVELTEKIT_DATA_16[] = { // _app/immutable/chunks/device-floppy.js const uint8_t ESP_SVELTEKIT_DATA_17[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x6F,0xE3,0x20, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x6F,0xE3,0x20, 0x10,0xBD,0xEF,0xAF,0xA0,0x56,0x95,0x82,0x76,0xE2,0xDA,0x91,0x55,0xAD,0xEA,0xD2, 0x43,0x77,0x57,0xCA,0x65,0x4F,0x95,0x7A,0x89,0xA2,0xCA,0xB2,0x89,0x4D,0x8B,0x21, 0x0B,0xD8,0x49,0x85,0xFC,0xDF,0x77,0x48,0xFA,0x91,0xF6,0xB8,0xF2,0xC7,0x63,0xDE, @@ -3820,7 +3820,7 @@ const uint8_t ESP_SVELTEKIT_DATA_17[] = { // _app/immutable/chunks/each.js const uint8_t ESP_SVELTEKIT_DATA_18[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x55,0x53,0x4B,0x6F,0xA3,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x55,0x53,0x4B,0x6F,0xA3,0x30, 0x10,0xBE,0xEF,0xAF,0xA0,0x3D,0x20,0x8F,0x34,0x78,0x37,0x57,0x90,0x1B,0xF5,0x21, 0xB5,0x3D,0xE4,0x94,0x23,0x8A,0x22,0x16,0xEC,0xE0,0x84,0xD8,0x14,0x9B,0x3C,0x4A, 0xF9,0xEF,0x6B,0xE3,0xA4,0xE9,0x8A,0xC3,0x3C,0xBF,0x99,0x6F,0x66,0xB0,0xDC,0xB7, @@ -3859,7 +3859,7 @@ const uint8_t ESP_SVELTEKIT_DATA_18[] = { // _app/immutable/chunks/home.js const uint8_t ESP_SVELTEKIT_DATA_19[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x55,0xD1,0x6E,0xA3,0x38, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x55,0xD1,0x6E,0xA3,0x38, 0x14,0x7D,0x9F,0xAF,0x70,0x51,0x95,0x1A,0xED,0x35,0x05,0x27,0x4D,0x42,0x53,0xF7, 0xA1,0x9D,0x95,0xF2,0xD2,0xA7,0x91,0xF6,0x25,0x8A,0x46,0x0C,0x38,0xD8,0x2D,0x31, 0x19,0xDB,0x90,0x48,0x88,0x7F,0x1F,0x9B,0x6C,0x5B,0x3A,0x6F,0xBB,0x5A,0x69,0x34, @@ -3912,7 +3912,7 @@ const uint8_t ESP_SVELTEKIT_DATA_19[] = { // _app/immutable/chunks/index.js const uint8_t ESP_SVELTEKIT_DATA_20[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x7D,0x58,0x6B,0x73,0x9B,0xC8, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x7D,0x58,0x6B,0x73,0x9B,0xC8, 0x12,0xFD,0xBE,0xBF,0x42,0xA6,0xB4,0xAA,0x21,0x1A,0x11,0xA9,0xB2,0x9B,0xBA,0x05, 0x1E,0xEB,0x26,0x59,0xEF,0xDB,0x6B,0xAF,0x9D,0xCD,0x3E,0x5C,0xBE,0x32,0x82,0x41, 0x60,0x23,0xD0,0xC2,0x60,0x49,0x8B,0xF8,0xEF,0xF7,0xF4,0x00,0x02,0x27,0xB9,0xB7, @@ -4093,7 +4093,7 @@ const uint8_t ESP_SVELTEKIT_DATA_20[] = { // _app/immutable/chunks/index2.js const uint8_t ESP_SVELTEKIT_DATA_21[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x8D,0x57,0x6B,0x73,0xDB,0xB6, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x8D,0x57,0x6B,0x73,0xDB,0xB6, 0x12,0xFD,0x9C,0xFE,0x0A,0x1A,0xA3,0xB8,0x84,0x04,0xD1,0x92,0xE3,0xF8,0xB6,0x64, 0x11,0x4F,0xEA,0x36,0xAD,0xFB,0x48,0x7A,0x6B,0x27,0xE9,0xBD,0x1E,0x8D,0x0D,0x91, 0x10,0x05,0x9B,0x02,0x58,0x00,0xB2,0xAC,0xD2,0xEC,0x6F,0xEF,0x82,0x0F,0x89,0x72, @@ -4198,7 +4198,7 @@ const uint8_t ESP_SVELTEKIT_DATA_21[] = { // _app/immutable/chunks/index3.js const uint8_t ESP_SVELTEKIT_DATA_22[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x55,0x93,0x4D,0x6E,0xDB,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x55,0x93,0x4D,0x6E,0xDB,0x30, 0x10,0x85,0xF7,0x3D,0x05,0xE3,0x85,0xC0,0x41,0x06,0xAA,0xDD,0xA5,0x64,0xD6,0x48, 0x81,0x9C,0xA0,0x4B,0x41,0x08,0x64,0x69,0x64,0xAB,0xA0,0x49,0x85,0x3F,0xB1,0x1D, 0x85,0x3D,0x7B,0x49,0xDB,0x72,0xD2,0xD5,0x83,0x86,0xE4,0xE3,0x9B,0x6F,0xA8,0xE1, @@ -4239,7 +4239,7 @@ const uint8_t ESP_SVELTEKIT_DATA_22[] = { // _app/immutable/chunks/info-circle.js const uint8_t ESP_SVELTEKIT_DATA_23[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x4F,0xE3,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x4F,0xE3,0x30, 0x10,0xBD,0xEF,0xAF,0x30,0x16,0x2A,0xB6,0x76,0x08,0x49,0xE1,0xB0,0x10,0xCC,0x81, 0xD5,0x4A,0xEC,0x61,0x4F,0x1C,0xAB,0x0A,0x45,0xC9,0x34,0x36,0x38,0x76,0xB1,0x9D, 0xB6,0x92,0x95,0xFF,0xBE,0x76,0xCB,0x47,0xD9,0xE3,0x2A,0x71,0x9E,0x3D,0x1F,0x6F, @@ -4280,7 +4280,7 @@ const uint8_t ESP_SVELTEKIT_DATA_23[] = { // _app/immutable/chunks/InfoDialog.js const uint8_t ESP_SVELTEKIT_DATA_24[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x7D,0x56,0x59,0x6F,0xDB,0x38, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x7D,0x56,0x59,0x6F,0xDB,0x38, 0x10,0x7E,0xDF,0x5F,0xA1,0x0A,0x81,0x40,0x62,0x47,0xAA,0xED,0x26,0x7D,0xB0,0xA1, 0x2D,0xDA,0x38,0xDB,0xA6,0x47,0x92,0x36,0x6D,0x7A,0x04,0x41,0x21,0x4B,0x23,0x9B, 0x8D,0xAE,0x8A,0x54,0x6C,0x47,0xF5,0x7F,0xDF,0x21,0x29,0x1F,0x49,0xBA,0x45,0x8E, @@ -4388,7 +4388,7 @@ const uint8_t ESP_SVELTEKIT_DATA_24[] = { // _app/immutable/chunks/InputPassword.js const uint8_t ESP_SVELTEKIT_DATA_25[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xCD,0x57,0xDF,0x73,0x9B,0x38, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xCD,0x57,0xDF,0x73,0x9B,0x38, 0x10,0x7E,0xBF,0xBF,0x42,0xD5,0x74,0x3C,0x30,0xB7,0x10,0xC0,0x8E,0xED,0xC4,0x43, 0x3B,0xD7,0x26,0x6D,0xF3,0x90,0xB6,0x33,0xFD,0xF1,0x92,0xC9,0x74,0x30,0xC8,0x46, 0x31,0x06,0x2A,0x84,0xB1,0x43,0xFD,0xBF,0xDF,0x4A,0xE0,0x18,0x27,0x6E,0x2F,0x8F, @@ -4483,7 +4483,7 @@ const uint8_t ESP_SVELTEKIT_DATA_25[] = { // _app/immutable/chunks/logo.js const uint8_t ESP_SVELTEKIT_DATA_26[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x4B,0xCE,0xCF,0x2B,0x2E,0x51, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x4B,0xCE,0xCF,0x2B,0x2E,0x51, 0xC8,0xB7,0x55,0x52,0xD2,0xCE,0x4B,0x2D,0x57,0x08,0x0D,0xF2,0xD1,0x50,0xD2,0xD3, 0xD3,0x4F,0x2C,0x2E,0x4E,0x2D,0x29,0xD6,0xCF,0xC9,0x4F,0xCF,0xD7,0x2B,0xC8,0x4B, 0x57,0xD2,0xC9,0xCC,0x2D,0xC8,0x2F,0x2A,0xD1,0xCB,0x4D,0x2D,0x49,0xD4,0x2B,0x2D, @@ -4494,7 +4494,7 @@ const uint8_t ESP_SVELTEKIT_DATA_26[] = { // _app/immutable/chunks/navigation.js const uint8_t ESP_SVELTEKIT_DATA_27[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xCB,0xCC,0x2D,0xC8,0x2F,0x2A, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xCB,0xCC,0x2D,0xC8,0x2F,0x2A, 0xA9,0xCE,0x52,0x48,0x2C,0x56,0xC8,0xAF,0x4D,0x2B,0xCA,0xCF,0x55,0xD2,0xD3,0x2F, 0xCE,0xCC,0x4B,0xCF,0x49,0x2D,0xC9,0xCF,0x2B,0xD6,0xCB,0x2A,0x56,0xB2,0x4E,0x06, 0x32,0x4A,0x14,0x52,0x6D,0xF3,0x35,0x94,0xD2,0xF3,0x4B,0xF2,0x95,0x34,0xAD,0x53, @@ -4505,7 +4505,7 @@ const uint8_t ESP_SVELTEKIT_DATA_27[] = { // _app/immutable/chunks/notifications.js const uint8_t ESP_SVELTEKIT_DATA_28[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x55,0x52,0xCB,0x6A,0xC3,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x55,0x52,0xCB,0x6A,0xC3,0x30, 0x10,0xBC,0xF7,0x2B,0x8C,0x4E,0x12,0x15,0x6A,0x68,0xA0,0x50,0x1B,0xE5,0x0F,0x7A, 0x6A,0x6F,0x21,0x14,0xC5,0x5E,0x3B,0x0A,0xF1,0x2A,0x48,0x2B,0x92,0x62,0xF4,0xEF, 0x95,0x1F,0x69,0x93,0x93,0xD8,0x99,0xDD,0x9D,0x61,0x56,0xB6,0x3F,0x3B,0x4F,0x43, @@ -4531,7 +4531,7 @@ const uint8_t ESP_SVELTEKIT_DATA_28[] = { // _app/immutable/chunks/pencil.js const uint8_t ESP_SVELTEKIT_DATA_29[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x55,0xD1,0x6E,0x9B,0x30, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x55,0xD1,0x6E,0x9B,0x30, 0x14,0x7D,0xDF,0x57,0xB8,0xA8,0x4A,0x6D,0xED,0x42,0x81,0x92,0x34,0x2D,0x75,0x1F, 0x5A,0x4D,0xEA,0x43,0x22,0x55,0x5A,0xB5,0x97,0x28,0xAA,0x10,0x38,0xC1,0xAD,0x31, 0x99,0x6D,0x48,0x24,0xC4,0xBF,0xCF,0x26,0x4B,0x97,0xEE,0x6D,0xD3,0xA4,0xED,0x61, @@ -4579,7 +4579,7 @@ const uint8_t ESP_SVELTEKIT_DATA_29[] = { // _app/immutable/chunks/reload.js const uint8_t ESP_SVELTEKIT_DATA_30[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x6F,0xE3,0x20, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x6F,0xE3,0x20, 0x14,0xBC,0xEF,0xAF,0xA0,0xA8,0x4A,0x41,0xFB,0x42,0xED,0x7C,0x28,0x49,0x5D,0x7A, 0xE8,0x6A,0xA5,0x5E,0xF6,0xB2,0x3D,0x46,0x51,0x65,0xD9,0xC4,0xA6,0xC5,0x90,0x02, 0x4E,0x22,0x21,0xFF,0xF7,0x85,0x64,0xFB,0xB5,0xC7,0x95,0x6C,0x0F,0x9E,0x37,0x0C, @@ -4622,7 +4622,7 @@ const uint8_t ESP_SVELTEKIT_DATA_30[] = { // _app/immutable/chunks/report-analytics.js const uint8_t ESP_SVELTEKIT_DATA_31[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x54,0x5B,0x6F,0xEB,0x36, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x54,0x5B,0x6F,0xEB,0x36, 0x0C,0x7E,0xDF,0xAF,0x70,0x8D,0x83,0x1C,0x19,0x63,0xDC,0xC4,0x5D,0x31,0x2C,0xA9, 0xFA,0xD0,0x0B,0x50,0x0C,0xD8,0x39,0xC0,0x0A,0xEC,0x25,0x08,0x0C,0xD5,0x66,0x62, 0x9D,0x63,0x5B,0xAE,0x24,0x3B,0xC1,0x0C,0xFF,0xF7,0x51,0x76,0xE3,0xC4,0x7D,0x1C, @@ -4681,7 +4681,7 @@ const uint8_t ESP_SVELTEKIT_DATA_31[] = { // _app/immutable/chunks/RSSIIndicator.js const uint8_t ESP_SVELTEKIT_DATA_32[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x59,0xFB,0x6F,0xDB,0x36, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x59,0xFB,0x6F,0xDB,0x36, 0x10,0xFE,0x7D,0x7F,0x85,0x22,0x04,0x1A,0x85,0xD2,0xAA,0xA5,0xC4,0xA9,0x6B,0x97, 0x0D,0x9A,0x3E,0xD6,0x6E,0x4D,0xD7,0xB5,0x5B,0xF7,0x30,0x8C,0x40,0x91,0x69,0x4B, 0x0D,0x45,0xB9,0x22,0x65,0x7B,0x55,0xFD,0xBF,0xEF,0x8E,0xB4,0x1D,0x39,0xC9,0x1E, @@ -4796,7 +4796,7 @@ const uint8_t ESP_SVELTEKIT_DATA_32[] = { // _app/immutable/chunks/scheduler.js const uint8_t ESP_SVELTEKIT_DATA_33[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xAD,0x19,0xDB,0x6E,0xE3,0xB6, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xAD,0x19,0xDB,0x6E,0xE3,0xB6, 0xF2,0xFD,0x7C,0x85,0x23,0x2C,0x02,0xA9,0xA1,0x15,0xBB,0x7D,0x39,0xB0,0xA2,0x18, 0xD9,0x24,0xDB,0x6C,0x9B,0x64,0x2F,0x71,0xBB,0x6D,0x0D,0xC3,0x95,0x25,0xDA,0xE6, 0x46,0xA6,0xBC,0x22,0x65,0xC7,0xEB,0xF8,0xDF,0xCF,0x0C,0x29,0x4A,0x94,0x9D,0xA0, @@ -4988,7 +4988,7 @@ const uint8_t ESP_SVELTEKIT_DATA_33[] = { // _app/immutable/chunks/SettingsCard.js const uint8_t ESP_SVELTEKIT_DATA_34[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xC5,0x58,0xFF,0x93,0xD3,0xB6, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0xC5,0x58,0xFF,0x93,0xD3,0xB6, 0x12,0xFF,0xFD,0xFD,0x15,0xC6,0xC3,0xB8,0xF2,0x74,0x1D,0x92,0x83,0x77,0xF3,0x5E, 0x52,0x73,0x03,0x07,0x2D,0xB4,0xE5,0x4B,0x7B,0x70,0xD0,0x97,0xC9,0x64,0x1C,0x5B, 0x8E,0x45,0x6C,0xC9,0xD8,0x72,0x12,0xC8,0xE5,0x7F,0x7F,0xBB,0x92,0x93,0xF8,0x72, @@ -5132,93 +5132,93 @@ const uint8_t ESP_SVELTEKIT_DATA_34[] = { // _app/immutable/chunks/singletons.js const uint8_t ESP_SVELTEKIT_DATA_35[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x95,0x56,0x6D,0x6F,0xDB,0x36, - 0x10,0xFE,0xBE,0x5F,0x21,0x0B,0x85,0x41,0x62,0x8C,0x12,0x37,0x5D,0x87,0x49,0x60, - 0x83,0x6C,0x28,0x8A,0x00,0x45,0x5A,0xE4,0x6D,0x2B,0xBA,0xC2,0xA1,0x25,0x4A,0x62, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x95,0x56,0x6D,0x6F,0xDB,0x36, + 0x10,0xFE,0xBE,0x5F,0x21,0x0B,0x85,0x41,0x62,0x8C,0x12,0xAF,0x5D,0x8B,0x4A,0x60, + 0x83,0x6C,0x28,0x86,0x00,0x41,0x5A,0xE4,0x6D,0x2B,0xBA,0xC2,0xA1,0x25,0x4A,0x62, 0x43,0x93,0x02,0x49,0xD9,0x31,0x64,0xFD,0xF7,0x1D,0x45,0xF9,0x25,0x1D,0x30,0x60, 0x9F,0x8E,0xE4,0x9D,0xEE,0xE5,0xB9,0x87,0x47,0x89,0x65,0xA3,0x8D,0xEB,0xD6,0x11, - 0xB3,0x51,0xDB,0x97,0x46,0x2F,0xE3,0xE4,0x54,0xA8,0x82,0x3F,0x9F,0x27,0xDF,0x6D, - 0x9C,0xAD,0x98,0x89,0x9A,0x2C,0xD7,0xCA,0xBA,0x68,0x49,0x11,0x6A,0x68,0x25,0xF5, - 0x82,0xC9,0xBB,0x5A,0xD8,0x64,0x3E,0xB7,0x2B,0x2E,0x1D,0x7F,0x12,0x6E,0xCE,0x5D, - 0x5E,0xCE,0x30,0xA5,0xAA,0x95,0xF2,0x62,0xA5,0x45,0x11,0x9D,0xA5,0x4D,0xB2,0x60, - 0x96,0xE3,0x8B,0x8B,0x38,0x38,0xAA,0x47,0x47,0x6B,0x70,0x54,0xFF,0x1F,0x47,0x75, - 0xC2,0xAC,0xE5,0xCE,0x82,0xAB,0x25,0x79,0x4F,0xE3,0xD9,0xAF,0x67,0x6F,0xCF,0xDE, - 0xFC,0xF2,0xDB,0xDB,0xD7,0xE7,0x6F,0xCE,0x63,0xB2,0xA1,0xF1,0xFE,0xFB,0xD4,0x2A, - 0xD6,0xD8,0x5A,0xBB,0x98,0x5C,0xBD,0x38,0xCE,0x8D,0x96,0x32,0x26,0xB7,0xC7,0x87, - 0x43,0xA1,0x31,0x29,0x69,0xE7,0x58,0x93,0xCE,0x48,0xAD,0x57,0xDC,0xA4,0xAF,0xC9, - 0x4A,0xF0,0xB5,0xC7,0x25,0x3D,0x27,0x9C,0x55,0x70,0xF4,0x86,0xE8,0xB2,0x4C,0x4F, - 0x66,0xA4,0x64,0xD2,0x72,0x58,0xF4,0xA4,0xA2,0x52,0xE7,0xCC,0x09,0xAD,0x12,0x6D, - 0x44,0x25,0x54,0x56,0xB6,0x2A,0xF7,0xFB,0xE8,0x19,0x71,0xDC,0x49,0xEE,0x22,0x47, - 0xF9,0x00,0xC1,0xFD,0xCD,0x55,0x26,0x4A,0x34,0x71,0xB8,0x0B,0x08,0x28,0x50,0x54, - 0xDC,0xBD,0x97,0x7C,0xC9,0x95,0xB3,0xBF,0x6F,0xEE,0x58,0x75,0xCD,0x96,0x1C,0xC5, - 0xDE,0x3C,0xC6,0x99,0xA3,0x2A,0x91,0x5C,0x55,0xAE,0xBE,0x50,0x5F,0xCF,0xBE,0x25, - 0xB5,0xE1,0x65,0xCA,0x93,0xFB,0x9B,0x8F,0xBD,0xE1,0xAE,0x35,0x2A,0x72,0xFD,0x3E, - 0xDE,0x27,0x84,0xBB,0x70,0xDA,0x3D,0xA7,0x0D,0x24,0xFC,0xD7,0xA7,0xB2,0x04,0xBC, - 0xC8,0x66,0xD8,0x7D,0x09,0xBB,0xFE,0xF0,0x41,0x8E,0x38,0x71,0xBB,0x6F,0xA2,0x21, - 0x95,0x4B,0xE7,0x8C,0x58,0xB4,0x8E,0xA3,0xC7,0x82,0x39,0x76,0xB2,0x07,0xE9,0xE4, - 0x55,0xE7,0xFA,0x47,0xDC,0x87,0xC4,0x0B,0xDA,0x25,0x49,0x52,0x92,0x38,0x4E,0xCB, - 0x64,0x80,0xAB,0x3F,0xD4,0xBD,0x38,0xAE,0x1B,0x3A,0x26,0x2A,0xC5,0x8B,0x5B,0xA9, - 0xDD,0xC5,0x05,0x4F,0x1A,0x66,0xA0,0xD4,0x6B,0x5D,0xF0,0x2C,0xC4,0x45,0xEE,0x65, - 0x93,0x5D,0xA2,0x40,0x79,0xB7,0x69,0x38,0x74,0x9F,0xCE,0x66,0xD3,0x29,0x58,0x38, - 0x08,0x62,0x1D,0x26,0x47,0xD5,0xDE,0x87,0xE4,0x4B,0x6D,0x50,0xC6,0xA7,0x53,0x3E, - 0xA1,0xD4,0x65,0xB8,0x03,0x7C,0xF9,0xE0,0xC1,0xE3,0x98,0x38,0x7D,0xDF,0x34,0xDC, - 0xFC,0x01,0x68,0x22,0xEF,0x2E,0xBE,0x8C,0xC1,0x34,0xA9,0x99,0x3D,0x14,0x1A,0x7B, - 0x50,0x63,0x8C,0x77,0x30,0x64,0x9C,0xFA,0x0A,0x8E,0x70,0xFA,0x18,0x42,0xF9,0x92, - 0x54,0xE6,0xCC,0xA6,0x53,0x54,0xF1,0x75,0x04,0x5D,0x40,0x3C,0x12,0x80,0x07,0x53, - 0x39,0xD7,0x65,0x74,0xFB,0xF0,0xE1,0x72,0xEC,0x25,0x54,0xEA,0xDD,0x0E,0x6D,0x7F, - 0x60,0x32,0x0D,0x5B,0x52,0xE8,0xBC,0xF5,0xEA,0x1D,0x1D,0x00,0x4F,0xE6,0xF2,0xBA, - 0x1B,0x61,0xD5,0xF4,0x3F,0xFC,0x39,0x66,0xA0,0x41,0x47,0x1E,0xC3,0x01,0x31,0x74, - 0xA2,0xB6,0xDB,0xC9,0x44,0x6F,0xB7,0x37,0x48,0x41,0xA2,0xDB,0x2D,0xFA,0xA1,0x97, - 0xB1,0xE1,0x32,0x86,0xF3,0x38,0xC6,0x89,0x6D,0xA4,0x70,0xE8,0xF4,0x6F,0xFB,0xF3, - 0x29,0x4E,0x84,0xCA,0x65,0x5B,0x70,0x8B,0x62,0xFE,0xEC,0xB8,0x51,0x0C,0xCC,0x88, - 0xA4,0x48,0xBD,0xEC,0xC9,0x8E,0xDB,0x1E,0xC2,0xEA,0xDF,0x00,0x16,0x7A,0xAD,0xA4, - 0x66,0x05,0x10,0x76,0xE4,0x5F,0x6B,0x64,0xAA,0xC8,0xCE,0x67,0x6A,0x48,0xC8,0x35, - 0xD5,0x64,0x67,0x9B,0xCA,0x23,0x80,0xAF,0x0F,0x8C,0xF1,0x61,0x89,0x0A,0x42,0x07, - 0x61,0x82,0x90,0x41,0xB0,0x20,0x2C,0xE5,0xD9,0xD0,0x7B,0x3B,0x9D,0x5A,0xE8,0xFD, - 0x1E,0xD9,0xDD,0x62,0x04,0x2E,0xC3,0x9A,0x86,0x62,0x80,0x48,0x9A,0xE6,0xC8,0x92, - 0xB8,0x01,0x38,0x20,0x85,0x93,0x1C,0x68,0x02,0x8D,0x87,0x00,0x7B,0x0B,0xF3,0xD2, - 0xC2,0xDF,0x01,0x6F,0xE1,0x0E,0x16,0x2E,0x58,0x3C,0x71,0xDE,0x94,0x10,0xCA,0x7A, - 0xB5,0x3A,0xA8,0x55,0x50,0x2B,0x3D,0x4E,0x1A,0xEC,0xF1,0xDC,0x6B,0x65,0xD0,0x06, - 0xEF,0x5E,0xC7,0x0E,0x3A,0xB6,0xD3,0x35,0x92,0xE5,0x1C,0x48,0xE0,0x86,0xE4,0x2C, - 0xB0,0xD1,0xE2,0xC3,0xED,0x12,0xE8,0x09,0x77,0x76,0x2D,0x80,0x36,0x7E,0x95,0xFB, - 0x41,0x11,0xA7,0x83,0x70,0xA6,0xE5,0x71,0x1A,0x5A,0x30,0x39,0xCB,0x86,0x33,0x18, - 0x58,0xA3,0x76,0x98,0x59,0x7B,0xF5,0x2C,0x2B,0x78,0xC9,0x5A,0xE9,0xC6,0x83,0xC8, - 0x67,0xD1,0x8F,0x53,0xA5,0x1B,0xEB,0x9F,0x7B,0x84,0xD2,0xE2,0xAB,0x86,0xD9,0xED, - 0x1D,0x7D,0x23,0x3B,0x85,0x07,0x06,0x14,0x66,0xAF,0xF0,0x78,0xCC,0x07,0x40,0x52, - 0x81,0xE0,0xA6,0xEE,0x00,0x80,0x9D,0x02,0x84,0x87,0xAF,0x60,0x2D,0xFD,0x7A,0x28, - 0x70,0x3E,0x54,0x08,0x47,0xEC,0xF8,0xAA,0xCD,0x3D,0x13,0xC2,0x65,0x70,0xB4,0x85, - 0x4D,0x36,0xDC,0x3A,0x0A,0xE5,0xEC,0x6D,0x34,0xCC,0x39,0x7F,0x42,0x5C,0xD2,0x36, - 0x90,0x08,0x07,0xE8,0xDE,0x81,0x97,0xBD,0x81,0x01,0x9F,0xDE,0x62,0x06,0x16,0x30, - 0xF1,0xD0,0xB1,0x4E,0x7A,0x9D,0xF7,0x69,0xB3,0xDD,0x04,0x4D,0x6C,0xBB,0x80,0x64, - 0xC5,0x82,0x23,0x41,0xDF,0x75,0xC8,0x42,0x4F,0x02,0xF1,0xB7,0x5B,0x35,0x9D,0x0A, - 0x60,0x97,0xC5,0xD3,0x29,0x03,0x85,0xC0,0x3D,0xDE,0x61,0xA4,0xB4,0x13,0xE5,0x06, - 0x28,0x0D,0x21,0x80,0xE1,0x7B,0x27,0x2F,0x98,0x7D,0x89,0xC6,0x72,0x3A,0x6F,0xC5, - 0x8F,0xAC,0x5C,0x0F,0xF5,0x4D,0x66,0x63,0x81,0x19,0xB3,0x1B,0x95,0x47,0x2F,0x6A, - 0xCC,0x25,0x67,0xE6,0x4E,0x2C,0xB9,0x6E,0x1D,0x80,0x38,0x4C,0x9E,0x00,0x8D,0xA1, - 0x6C,0xCD,0x84,0x8B,0x4A,0xEE,0x59,0xF0,0xF8,0xAA,0x5B,0xF7,0xA7,0x73,0xD6,0x34, - 0xA7,0x30,0x88,0xAD,0x7F,0x8A,0xBE,0x5B,0xAD,0x1E,0x49,0x57,0x73,0x56,0xC0,0x49, - 0x0A,0xFD,0x64,0xD5,0x92,0xA5,0x40,0xCB,0x93,0x9C,0xE5,0x35,0x8F,0x49,0x3C,0x48, - 0xB8,0x02,0xCA,0x41,0x9B,0xE2,0x23,0x55,0xDF,0xE3,0xE1,0x95,0x32,0x89,0x7E,0xC2, - 0x7B,0xB6,0x84,0xC0,0x8C,0xA2,0x10,0xD9,0x0C,0x21,0x10,0xC6,0xC9,0x18,0x12,0x40, - 0x7A,0xBF,0x43,0x94,0x01,0x9B,0x39,0x9A,0x9C,0x61,0xF2,0x43,0x09,0xC0,0xF7,0x71, - 0xE0,0xED,0xFC,0xEE,0x19,0x77,0x04,0x0C,0x81,0x2C,0xF2,0xA7,0x54,0x1F,0xC1,0x78, - 0xF3,0xC3,0x4B,0x15,0xC6,0x11,0xC4,0xAC,0x60,0xF2,0xF9,0x47,0xC5,0xD5,0xCA,0xCF, - 0x7B,0xE0,0x94,0x71,0xF6,0x4F,0xE1,0x6A,0xE0,0x60,0xEF,0x91,0x5D,0x1D,0x78,0xF3, - 0xD9,0x73,0x6B,0x05,0x6F,0x52,0x2E,0x05,0x4C,0x86,0x83,0xF7,0x07,0xAF,0x18,0x5F, - 0x23,0x78,0xD6,0x1C,0xA6,0xEF,0x56,0x5F,0xF9,0xB7,0xB0,0x1E,0x47,0xF3,0x17,0x3A, - 0x0C,0xB5,0x39,0xEA,0x7A,0x4C,0xFC,0x73,0x3A,0x2E,0x15,0x5B,0x89,0x0A,0xDE,0x7F, - 0x55,0xA5,0x2D,0xF2,0x77,0x08,0x93,0x40,0xCA,0x22,0x85,0xDE,0xF7,0x19,0x7F,0x1E, - 0xFE,0xAC,0x6E,0xFD,0x9F,0xD5,0x15,0x29,0xBD,0xF8,0x4C,0xAE,0xBC,0xB8,0x25,0x1B, - 0x2F,0x18,0xF9,0xE8,0xC5,0x82,0x5C,0x7B,0x91,0x93,0x2F,0x5E,0x14,0x64,0xE9,0x05, - 0x27,0xF7,0x5E,0x94,0xE4,0xD9,0x8B,0x8A,0x7C,0xF6,0xA2,0x26,0x37,0x5E,0x08,0xF2, - 0xE0,0xC5,0x77,0x52,0x79,0xA1,0xC9,0x27,0x2F,0x6C,0x9F,0xFD,0xF4,0x0F,0xFE,0x5D, - 0xAC,0x3E,0xCC,0x09,0x00,0x00, + 0xB3,0x51,0xDB,0x97,0x46,0x2F,0xE3,0xE4,0x54,0xA8,0x82,0x3F,0xBF,0x4E,0xBE,0xDB, + 0x38,0x5B,0x31,0x13,0x35,0x59,0xAE,0x95,0x75,0xD1,0x92,0x22,0xD4,0xD0,0x4A,0xEA, + 0x05,0x93,0x77,0xB5,0xB0,0xC9,0x7C,0x6E,0x57,0x5C,0x3A,0xFE,0x24,0xDC,0x3C,0x17, + 0x6C,0xC1,0x30,0xA5,0xAA,0x95,0xF2,0x7C,0xA5,0x45,0x11,0x9D,0xA5,0x4D,0xB2,0x60, + 0x96,0xE3,0xF3,0xF3,0x38,0x38,0xAA,0x47,0x47,0x6B,0x70,0x54,0xFF,0x1F,0x47,0x75, + 0xC2,0xAC,0xE5,0xCE,0x82,0xAB,0x25,0xF9,0x48,0xE3,0xD9,0xBB,0xB3,0xB7,0xEF,0xDF, + 0xBF,0x79,0xF7,0x7A,0xF6,0x76,0xF6,0x6B,0x4C,0x36,0x34,0xDE,0x7F,0x9F,0x5A,0xC5, + 0x1A,0x5B,0x6B,0x17,0x93,0xCB,0x17,0xC7,0xB9,0xD1,0x52,0xC6,0xE4,0xF6,0xF8,0x70, + 0x28,0x34,0x26,0x25,0xED,0x1C,0x6B,0xD2,0x19,0xA9,0xF5,0x8A,0x9B,0xF4,0x17,0xB2, + 0x12,0x7C,0xED,0x71,0x49,0x5F,0x13,0xCE,0x2A,0x38,0x7A,0x43,0x74,0x59,0xA6,0x27, + 0x33,0x52,0x32,0x69,0x39,0x2C,0x7A,0x52,0x51,0xA9,0x73,0xE6,0x84,0x56,0x89,0x36, + 0xA2,0x12,0x2A,0x2B,0x5B,0x95,0xFB,0x7D,0xF4,0x8C,0x38,0xEE,0x24,0x77,0x91,0xA3, + 0x7C,0x80,0xE0,0xFE,0xE6,0x32,0x13,0x25,0x9A,0x38,0xDC,0x05,0x04,0x14,0x28,0x2A, + 0xEE,0x3E,0x4A,0xBE,0xE4,0xCA,0xD9,0xDF,0x36,0x77,0xAC,0xBA,0x66,0x4B,0x8E,0x62, + 0x6F,0x1E,0xE3,0xCC,0x51,0x95,0x48,0xAE,0x2A,0x57,0x9F,0xAB,0xAF,0x67,0xDF,0x92, + 0xDA,0xF0,0x32,0xE5,0xC9,0xFD,0xCD,0x55,0x6F,0xB8,0x6B,0x8D,0x8A,0x5C,0xBF,0x8F, + 0xF7,0x09,0xE1,0x2E,0x9C,0x76,0xCF,0x69,0x03,0x09,0xFF,0xF5,0xA9,0x2C,0x01,0x2F, + 0xB2,0x19,0x76,0x5F,0xC2,0xAE,0x3F,0x7C,0x90,0x23,0x4E,0xDC,0xEE,0x9B,0x68,0x48, + 0xE5,0xC2,0x39,0x23,0x16,0xAD,0xE3,0xE8,0xB1,0x60,0x8E,0x9D,0xEC,0x41,0x3A,0x79, + 0xD5,0xB9,0xFE,0x11,0xF7,0x21,0xF1,0x82,0x76,0x49,0x92,0x94,0x24,0x8E,0xD3,0x32, + 0x19,0xE0,0xEA,0x0F,0x75,0x2F,0x8E,0xEB,0x86,0x8E,0x89,0x4A,0xF1,0xE2,0x56,0x6A, + 0x77,0x7E,0xCE,0x93,0x86,0x19,0x28,0xF5,0x5A,0x17,0x3C,0x0B,0x71,0x91,0x7B,0xD9, + 0x64,0x97,0x28,0x50,0xDE,0x6D,0x1A,0x0E,0xDD,0xA7,0xB3,0xD9,0x74,0x0A,0x16,0x0E, + 0x82,0x58,0x87,0xC9,0x51,0xB5,0xF7,0x21,0xF9,0x52,0x1B,0x94,0xF1,0xE9,0x94,0x4F, + 0x28,0x75,0x19,0xEE,0x00,0x5F,0x3E,0x78,0xF0,0x38,0x26,0x4E,0xDF,0x37,0x0D,0x37, + 0xBF,0x03,0x9A,0xC8,0xBB,0x8B,0x2F,0x62,0x30,0x4D,0x6A,0x66,0x0F,0x85,0xC6,0x1E, + 0xD4,0x18,0xE3,0x1D,0x0C,0x19,0xA7,0xBE,0x82,0x23,0x9C,0xAE,0x42,0x28,0x5F,0x92, + 0xCA,0x9C,0xD9,0x74,0x8A,0x2A,0xBE,0x8E,0xA0,0x0B,0x88,0x47,0x02,0xF0,0x60,0x2A, + 0xE7,0xBA,0x8C,0x6E,0x1F,0xFE,0xB8,0x18,0x7B,0x09,0x95,0x7A,0xB7,0x43,0xDB,0x1F, + 0x98,0x4C,0xC3,0x96,0x14,0x3A,0x6F,0xBD,0x7A,0x47,0x07,0xC0,0x93,0xB9,0xBC,0xEE, + 0x46,0x58,0x35,0xFD,0x0F,0x7F,0x8E,0x19,0x68,0xD0,0x91,0xC7,0x70,0x40,0x0C,0x9D, + 0xA8,0xED,0x76,0x32,0xD1,0xDB,0xED,0x0D,0x52,0x90,0xE8,0x76,0x8B,0x7E,0xE8,0x65, + 0x6C,0xB8,0x8C,0xE1,0x3C,0x8E,0x71,0x62,0x1B,0x29,0x1C,0x3A,0xFD,0xDB,0xFE,0x7C, + 0x8A,0x13,0xA1,0x72,0xD9,0x16,0xDC,0xA2,0x98,0x3F,0x3B,0x6E,0x14,0x03,0x33,0x22, + 0x29,0x52,0x2F,0x7B,0xB2,0xE3,0xB6,0x87,0xB0,0xFA,0x37,0x80,0x85,0x5E,0x2B,0xA9, + 0x59,0x01,0x84,0x1D,0xF9,0xD7,0x1A,0x99,0x2A,0xB2,0xF3,0x99,0x1A,0x12,0x72,0x4D, + 0x35,0xD9,0xD9,0xA6,0xF2,0x08,0xE0,0xEB,0x03,0x63,0x7C,0x58,0xA2,0x82,0xD0,0x41, + 0x98,0x20,0x64,0x10,0x2C,0x08,0x4B,0x79,0x36,0xF4,0xDE,0x4E,0xA7,0x16,0x7A,0xBF, + 0x47,0x76,0xB7,0x18,0x81,0xCB,0xB0,0xA6,0xA1,0x18,0x20,0x92,0xA6,0x39,0xB2,0x24, + 0x6E,0x00,0x0E,0x48,0xE1,0x24,0x07,0x9A,0x40,0xE3,0x21,0xC0,0xDE,0xC2,0xBC,0xB4, + 0xF0,0x77,0xC0,0x5B,0xB8,0x83,0x85,0x0B,0x16,0x4F,0x9C,0x37,0x25,0x84,0xB2,0x5E, + 0xAD,0x0E,0x6A,0x15,0xD4,0x4A,0x8F,0x93,0x06,0x7B,0x3C,0xF7,0x5A,0x19,0xB4,0xC1, + 0xBB,0xD7,0xB1,0x83,0x8E,0xED,0x74,0x8D,0x64,0x39,0x07,0x12,0xB8,0x21,0x39,0x0B, + 0x6C,0xB4,0xF8,0x70,0xBB,0x04,0x7A,0xC2,0x9D,0x5D,0x0B,0xA0,0x8D,0x5F,0xE5,0x7E, + 0x50,0xC4,0xE9,0x20,0x9C,0x69,0x79,0x9C,0x86,0x16,0x4C,0xCE,0xB2,0xE1,0x0C,0x06, + 0xD6,0xA8,0x1D,0x66,0xD6,0x5E,0x3D,0xCB,0x0A,0x5E,0xB2,0x56,0xBA,0xF1,0x20,0xF2, + 0x59,0xF4,0xE3,0x54,0xE9,0xC6,0xFA,0xE7,0x1E,0xA1,0xB4,0xF8,0xAA,0x61,0x76,0x7B, + 0x47,0xDF,0xC8,0x4E,0xE1,0x81,0x01,0x85,0xD9,0x2B,0x3C,0x1E,0xF3,0x01,0x90,0x54, + 0x20,0xB8,0xA9,0x3B,0x00,0x60,0xA7,0x00,0xE1,0xE1,0x2B,0x58,0x4B,0xBF,0x1E,0x0A, + 0x9C,0x0F,0x15,0xC2,0x11,0x3B,0xBE,0x6A,0x73,0xCF,0x84,0x70,0x19,0x1C,0x6D,0x61, + 0x93,0x0D,0xB7,0x8E,0x42,0x39,0x7B,0x1B,0x0D,0x73,0xCE,0x9F,0x10,0x97,0xB4,0x0D, + 0x24,0xC2,0x01,0xBA,0x0F,0xE0,0x65,0x6F,0x60,0xC0,0xA7,0xB7,0x98,0x81,0x05,0x4C, + 0x3C,0x74,0xAC,0x93,0x5E,0xE7,0x7D,0xDA,0x6C,0x37,0x41,0x13,0xDB,0x2E,0x20,0x59, + 0xB1,0xE0,0x48,0xD0,0x0F,0x1D,0xB2,0xD0,0x93,0x40,0xFC,0xED,0x56,0x4D,0xA7,0x02, + 0xD8,0x65,0xF1,0x74,0xCA,0x40,0x21,0x70,0x8F,0x77,0x18,0x29,0xED,0x44,0xB9,0x01, + 0x4A,0x43,0x08,0x60,0xF8,0xDE,0xC9,0x0B,0x66,0x5F,0xA0,0xB1,0x9C,0xCE,0x5B,0xF1, + 0x23,0x2B,0xD7,0x43,0x7D,0x93,0xD9,0x58,0x60,0xC6,0xEC,0x46,0xE5,0xD1,0x8B,0x1A, + 0x73,0xC9,0x99,0xB9,0x13,0x4B,0xAE,0x5B,0x07,0x20,0x0E,0x93,0x27,0x40,0x63,0x28, + 0x5B,0x33,0xE1,0xA2,0x92,0x7B,0x16,0x3C,0xBE,0xEA,0xD6,0xFD,0xE9,0x9C,0x35,0xCD, + 0x29,0x0C,0x62,0xEB,0x9F,0xA2,0xEF,0x56,0xAB,0x47,0xD2,0xD5,0x9C,0x15,0x70,0x92, + 0x42,0x3F,0x59,0xB5,0x64,0x29,0xD0,0xF2,0x24,0x67,0x79,0xCD,0x63,0x12,0x0F,0x12, + 0xAE,0x80,0x72,0xD0,0xA6,0xF8,0x48,0xD5,0xF7,0x78,0x78,0xA5,0x4C,0xA2,0x9F,0xF0, + 0x9E,0x2D,0x21,0x30,0xA3,0x28,0x44,0x36,0x43,0x08,0x84,0x71,0x32,0x86,0x04,0x90, + 0x3E,0xEE,0x10,0x65,0xC0,0x66,0x8E,0x26,0x67,0x98,0xFC,0x50,0x02,0xF0,0x7D,0x1C, + 0x78,0x3B,0xBF,0x7B,0xC6,0x1D,0x01,0x43,0x20,0x8B,0xFC,0x29,0xD5,0x47,0x30,0xDE, + 0xFC,0xF0,0x52,0x85,0x71,0x04,0x31,0x2B,0x98,0x7C,0xFE,0x51,0x71,0xB5,0xF2,0xF3, + 0x1E,0x38,0x65,0x9C,0xFD,0x53,0xB8,0x1A,0x38,0xD8,0x7B,0x64,0x57,0x07,0xDE,0x7C, + 0xF6,0xDC,0x5A,0xC1,0x9B,0x94,0x4B,0x01,0x93,0xE1,0xE0,0xFD,0xC1,0x2B,0xC6,0xD7, + 0x08,0x9E,0x35,0x87,0xE9,0x87,0xD5,0x57,0xFE,0x2D,0xAC,0xC7,0xD1,0xFC,0x85,0x0E, + 0x43,0x6D,0x8E,0xBA,0x1E,0x13,0xFF,0x9C,0x8E,0x4B,0xC5,0x56,0xA2,0x82,0xF7,0x5F, + 0x55,0x69,0x8B,0xFC,0x1D,0xC2,0x24,0x90,0xB2,0x48,0xA1,0xF7,0x7D,0xC6,0x9F,0x87, + 0x3F,0xAB,0x5B,0xFF,0x67,0x75,0x49,0x4A,0x2F,0x3E,0x93,0x4B,0x2F,0x6E,0xC9,0xC6, + 0x0B,0x46,0xAE,0xBC,0x58,0x90,0x6B,0x2F,0x72,0xF2,0xC5,0x8B,0x82,0x2C,0xBD,0xE0, + 0xE4,0xDE,0x8B,0x92,0x3C,0x7B,0x51,0x91,0xCF,0x5E,0xD4,0xE4,0xC6,0x0B,0x41,0x1E, + 0xBC,0xF8,0x4E,0x2A,0x2F,0x34,0xF9,0xE4,0x85,0xED,0xB3,0x9F,0xFE,0x01,0xAA,0xA4, + 0xCB,0x2E,0xCC,0x09,0x00,0x00, }; // _app/immutable/chunks/Spinner.js const uint8_t ESP_SVELTEKIT_DATA_36[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x55,0x6D,0x4F,0xE3,0x38, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x55,0x6D,0x4F,0xE3,0x38, 0x10,0xFE,0x7E,0xBF,0xC2,0x58,0xA8,0x6B,0xEB,0xA6,0xD9,0xB6,0xB7,0x5A,0x89,0x76, 0xBD,0xD2,0xF2,0x22,0x81,0x04,0x2B,0x24,0x56,0x7C,0x41,0x68,0x65,0x12,0xA7,0x71, 0x49,0xEC,0x60,0x3B,0x6D,0x21,0x9B,0xFF,0x7E,0xE3,0x84,0xB2,0x80,0xEE,0x3E,0xDC, @@ -5280,7 +5280,7 @@ const uint8_t ESP_SVELTEKIT_DATA_36[] = { // _app/immutable/chunks/stethoscope.js const uint8_t ESP_SVELTEKIT_DATA_37[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0xD1,0x6E,0xDB,0x20, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0xD1,0x6E,0xDB,0x20, 0x14,0x7D,0xDF,0x57,0x50,0xAB,0x4A,0x41,0xBB,0x76,0x6D,0xB7,0xA9,0xD6,0xBA,0xF4, 0x61,0xD3,0xA4,0xBC,0xF4,0x29,0xD2,0x5E,0xA2,0xA8,0xA2,0x36,0xB1,0x69,0x31,0x64, 0x80,0x9D,0x48,0xC8,0xFF,0x3E,0x48,0xDA,0x2E,0xDD,0xE3,0x64,0xE3,0x03,0x97,0xC3, @@ -5325,7 +5325,7 @@ const uint8_t ESP_SVELTEKIT_DATA_37[] = { // _app/immutable/chunks/stores.js const uint8_t ESP_SVELTEKIT_DATA_38[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x5D,0x4F,0x4B,0x0E,0xC2,0x20, + 0x1F,0x8B,0x08,0x00,0x39,0xAC,0xBE,0x65,0x02,0xFF,0x5D,0x4F,0x4B,0x0E,0xC2,0x20, 0x10,0xDD,0x7B,0x0A,0xD2,0x55,0x49,0x1A,0xDC,0x97,0xE0,0x5D,0xA0,0x1D,0x1B,0x8C, 0x05,0x32,0x43,0x4D,0x13,0x32,0x77,0x97,0x5A,0x63,0xD5,0xDD,0xFB,0xCD,0xBC,0x3C, 0x3F,0xA7,0x88,0xB9,0x8C,0xC2,0x92,0x00,0xBE,0x62,0x9C,0x1B,0x75,0x26,0x1F,0xA6, @@ -5340,7 +5340,7 @@ const uint8_t ESP_SVELTEKIT_DATA_38[] = { // _app/immutable/chunks/topology-star-3.js const uint8_t ESP_SVELTEKIT_DATA_39[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0x5D,0x4F,0xDB,0x30, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0x5D,0x4F,0xDB,0x30, 0x14,0x7D,0xDF,0xAF,0x30,0x11,0x2A,0xB6,0x76,0x13,0x92,0xD0,0x8D,0x8F,0x60,0x1E, 0x40,0x93,0xF6,0xC2,0xD3,0xF6,0x56,0x55,0x28,0x4A,0x6E,0x1B,0x83,0x63,0x77,0xB6, 0xD3,0x16,0xAC,0xFC,0xF7,0xD9,0xE5,0x63,0x30,0x69,0x20,0x4D,0xF9,0x38,0xF6,0xF1, @@ -5384,7 +5384,7 @@ const uint8_t ESP_SVELTEKIT_DATA_39[] = { // _app/immutable/chunks/users.js const uint8_t ESP_SVELTEKIT_DATA_40[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x6F,0xE3,0x20, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x53,0x4D,0x6F,0xE3,0x20, 0x10,0xBD,0xEF,0xAF,0xA0,0xA8,0x4A,0x41,0x3B,0x71,0x6D,0x37,0x55,0xAA,0xBA,0xF4, 0xD0,0xD5,0x4A,0xBD,0xE4,0xB4,0xEA,0x29,0x8A,0x2A,0xCB,0x9E,0xC4,0xB4,0x36,0x64, 0x01,0x3B,0x91,0x90,0xFF,0xFB,0x42,0xD2,0x8F,0xB4,0xC7,0x95,0x8C,0x1F,0xF3,0x66, @@ -5427,7 +5427,7 @@ const uint8_t ESP_SVELTEKIT_DATA_40[] = { // _app/immutable/chunks/utils.js const uint8_t ESP_SVELTEKIT_DATA_41[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x85,0x54,0xDB,0x72,0xA3,0x38, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x85,0x54,0xDB,0x72,0xA3,0x38, 0x10,0x7D,0xDF,0xAF,0x20,0x54,0xCA,0x25,0x4D,0x3A,0x8A,0x9D,0x79,0x33,0xA3,0x50, 0x73,0x49,0xDE,0x52,0xF9,0x00,0x86,0x4D,0x61,0x2C,0x0C,0x09,0x16,0x44,0x88,0x89, 0x3D,0xB6,0xFF,0x7D,0xBB,0xCD,0x45,0x64,0x6A,0x6B,0xF7,0x85,0x23,0xFA,0xC6,0x39, @@ -5485,7 +5485,7 @@ const uint8_t ESP_SVELTEKIT_DATA_41[] = { // _app/immutable/entry/app.js const uint8_t ESP_SVELTEKIT_DATA_42[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x5A,0x7B,0x73,0xDB,0x36, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x5A,0x7B,0x73,0xDB,0x36, 0x12,0xFF,0xFF,0x3E,0x85,0xCC,0xF1,0xA9,0xE4,0x0C,0x44,0x8B,0xF2,0x23,0x8E,0x3C, 0xAC,0xA7,0x75,0xDC,0xD6,0x6D,0x9A,0xA4,0x71,0x93,0x3E,0x14,0x8D,0x0A,0x93,0xA0, 0x88,0x98,0x22,0x18,0x00,0x94,0xAC,0x2A,0xFC,0xEE,0xB7,0x0B,0x52,0xB2,0x6C,0x53, @@ -5674,7 +5674,7 @@ const uint8_t ESP_SVELTEKIT_DATA_42[] = { // _app/immutable/entry/start.js const uint8_t ESP_SVELTEKIT_DATA_43[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x9D,0x5D,0x7B,0x73,0xDB,0x46, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x9D,0x5D,0x7B,0x73,0xDB,0x46, 0x92,0xFF,0xFF,0x3E,0x05,0x89,0xD3,0xB2,0x80,0x68,0x04,0x4B,0x4E,0x76,0xEB,0x0A, 0xF4,0x88,0x25,0x5B,0xB2,0x2D,0x47,0x91,0xB4,0x92,0xEC,0x5C,0x96,0x66,0x68,0x10, 0x18,0x92,0x90,0x40,0x80,0x01,0x40,0x52,0x0C,0x89,0xFB,0xEC,0xD7,0x3D,0x2F,0x0C, @@ -6302,7 +6302,7 @@ const uint8_t ESP_SVELTEKIT_DATA_43[] = { // _app/immutable/nodes/0.js const uint8_t ESP_SVELTEKIT_DATA_44[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x7D,0xFB,0x77,0xD3,0x48, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x7D,0xFB,0x77,0xD3,0x48, 0xD2,0xE8,0xEF,0xF7,0xAF,0x10,0x3A,0x5C,0x7F,0xF2,0xD0,0x36,0x7E,0xE6,0xE1,0x8C, 0x26,0x27,0x10,0x06,0x18,0x12,0xC8,0x24,0x81,0x99,0x25,0x27,0xC7,0xAB,0xC8,0x6D, 0x4B,0x58,0x96,0x1C,0xA9,0xE5,0xC4,0x79,0xFC,0xEF,0xB7,0xAA,0xBA,0xF5,0xB6,0x81, @@ -7225,7 +7225,7 @@ const uint8_t ESP_SVELTEKIT_DATA_44[] = { // _app/immutable/nodes/1.js const uint8_t ESP_SVELTEKIT_DATA_45[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x75,0x55,0xDB,0x6E,0xDB,0x38, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x75,0x55,0xDB,0x6E,0xDB,0x38, 0x10,0x7D,0xDF,0xAF,0x50,0x84,0x40,0x20,0xB1,0x23,0xC7,0x29,0xBA,0xD8,0x45,0x04, 0xED,0xA2,0xB9,0xB4,0x75,0x2F,0x48,0x00,0x03,0xE9,0x43,0x10,0x18,0xB4,0x44,0x49, 0x4C,0x28,0x52,0x25,0x29,0xD9,0xA9,0xE0,0x7F,0xDF,0xA1,0x94,0xC6,0x5A,0x6F,0xF3, @@ -7287,7 +7287,7 @@ const uint8_t ESP_SVELTEKIT_DATA_45[] = { // _app/immutable/nodes/10.js const uint8_t ESP_SVELTEKIT_DATA_46[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x5B,0x7D,0x73,0xDB,0xB6, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x5B,0x7D,0x73,0xDB,0xB6, 0x93,0xFE,0xFF,0x3E,0x05,0xC3,0xC9,0xA8,0xE4,0x04,0xA2,0x25,0xC5,0x8E,0x13,0x29, 0x4C,0xC6,0xEF,0x49,0x9B,0xB7,0xC6,0x4E,0x9B,0xD6,0xE3,0xD1,0x40,0x24,0x28,0x31, 0xE6,0x5B,0x48,0xD0,0xB6,0xA2,0xE8,0xBB,0xDF,0xB3,0x00,0x29,0x51,0x96,0xDC,0x26, @@ -7599,7 +7599,7 @@ const uint8_t ESP_SVELTEKIT_DATA_46[] = { // _app/immutable/nodes/11.js const uint8_t ESP_SVELTEKIT_DATA_47[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x3C,0x6B,0x73,0xDB,0xB8, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x3C,0x6B,0x73,0xDB,0xB8, 0xAE,0x9F,0xEF,0xF9,0x15,0xAA,0x26,0xE3,0x4A,0xB3,0xB4,0x6A,0x3B,0x69,0x92,0xDA, 0x55,0x3B,0x49,0x9A,0xE6,0xD1,0x3C,0xDA,0xC4,0x4D,0x9B,0xFA,0x7A,0x72,0x65,0x8B, 0xB6,0x95,0xC8,0x92,0x2A,0xD1,0xAF,0x78,0xFD,0xDF,0x2F,0x00,0x52,0x96,0x64,0x27, @@ -8036,7 +8036,7 @@ const uint8_t ESP_SVELTEKIT_DATA_47[] = { // _app/immutable/nodes/12.js const uint8_t ESP_SVELTEKIT_DATA_48[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x2D,0xCE,0xB1,0x0A,0x83,0x30, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x2D,0xCE,0xB1,0x0A,0x83,0x30, 0x10,0x00,0xD0,0xBD,0x5F,0x21,0x99,0x14,0x24,0xEE,0x8A,0xFD,0x83,0xD2,0x82,0xDD, 0x25,0xC6,0xD3,0xC6,0xC6,0x3B,0xB9,0x24,0x52,0x1B,0xF2,0xEF,0xA5,0xA5,0xE3,0xDB, 0x9E,0x59,0x37,0x62,0x1F,0xE7,0x4C,0xB9,0x0C,0xD2,0xC4,0xB4,0x0A,0x29,0x2B,0xFD, @@ -8053,7 +8053,7 @@ const uint8_t ESP_SVELTEKIT_DATA_48[] = { // _app/immutable/nodes/13.js const uint8_t ESP_SVELTEKIT_DATA_49[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xDD,0x7C,0x79,0x73,0xDB,0xBE, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xDD,0x7C,0x79,0x73,0xDB,0xBE, 0xAE,0xE8,0xFF,0xEF,0x53,0xA8,0x9A,0x4C,0x8E,0x34,0x87,0x76,0xE3,0xA4,0xAB,0x5D, 0xB5,0xE3,0xEC,0x7B,0x9C,0x38,0x4B,0xDB,0x1C,0x4F,0x46,0x96,0x68,0x5B,0x89,0xB6, 0x48,0x94,0x97,0xB8,0xFE,0xEE,0x17,0x20,0x25,0x8B,0xF2,0xD2,0xB8,0xBF,0xDB,0x3B, @@ -8552,7 +8552,7 @@ const uint8_t ESP_SVELTEKIT_DATA_49[] = { // _app/immutable/nodes/14.js const uint8_t ESP_SVELTEKIT_DATA_50[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x7D,0xFB,0x7B,0xDA,0xBA, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x7D,0xFB,0x7B,0xDA,0xBA, 0xB2,0xE8,0xCF,0xF7,0xFC,0x15,0xD4,0x5F,0x6E,0x8E,0x39,0x15,0x14,0xC8,0x63,0xB5, 0xB0,0xDC,0x7C,0x09,0x4D,0x9B,0x34,0x8F,0xA6,0x79,0x3F,0x0E,0x5F,0x97,0xB1,0x95, 0x40,0x30,0x86,0xD8,0x26,0x40,0x12,0xFE,0xF7,0x3B,0x33,0x92,0x6D,0xD9,0x98,0x84, @@ -9785,7 +9785,7 @@ const uint8_t ESP_SVELTEKIT_DATA_50[] = { // _app/immutable/nodes/2.js const uint8_t ESP_SVELTEKIT_DATA_51[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xA5,0x56,0x6D,0x4F,0xE3,0x38, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xA5,0x56,0x6D,0x4F,0xE3,0x38, 0x10,0xFE,0x7C,0xFB,0x2B,0x8C,0xB5,0xAA,0x12,0x69,0x92,0x42,0xF7,0xB4,0xDA,0xA3, 0x04,0x89,0x03,0xEE,0xA8,0x00,0x09,0x5D,0x61,0x4F,0x68,0xB5,0x02,0xD7,0x71,0x1A, 0xD3,0x24,0x0E,0xB6,0xD3,0x17,0x65,0xFB,0xDF,0x6F,0x9C,0x00,0x4D,0x7B,0x7B,0xA7, @@ -9859,7 +9859,7 @@ const uint8_t ESP_SVELTEKIT_DATA_51[] = { // _app/immutable/nodes/3.js const uint8_t ESP_SVELTEKIT_DATA_52[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x2D,0xCE,0xB1,0x0A,0x83,0x30, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x2D,0xCE,0xB1,0x0A,0x83,0x30, 0x10,0x00,0xD0,0xBD,0x5F,0x21,0x99,0x14,0x24,0xEE,0x8A,0xFD,0x83,0xD2,0x82,0xDD, 0x25,0xC6,0xD3,0xC6,0xC6,0x3B,0xB9,0x24,0x52,0x1B,0xF2,0xEF,0xA5,0xA5,0xE3,0xDB, 0x9E,0x59,0x37,0x62,0x1F,0xE7,0x4C,0xB9,0x0C,0xD2,0xC4,0xB4,0x0A,0x29,0x2B,0xFD, @@ -9876,564 +9876,504 @@ const uint8_t ESP_SVELTEKIT_DATA_52[] = { // _app/immutable/nodes/4.js const uint8_t ESP_SVELTEKIT_DATA_53[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x7D,0x7D,0x5B,0xDB,0xBA, - 0xB2,0xEF,0xDF,0xF7,0x7C,0x0A,0xD7,0xB7,0x97,0x65,0xDF,0xAD,0xA4,0x04,0x28,0xAB, - 0x25,0xF5,0xEA,0xA5,0xBC,0x14,0x5A,0xDE,0x13,0xA0,0x85,0xC5,0xC3,0x31,0x8E,0x92, - 0x98,0xC4,0x71,0xB0,0x95,0x37,0x28,0xE7,0xB3,0x9F,0x99,0x91,0x1D,0x4B,0x4E,0x02, - 0x61,0x6D,0xEE,0xDE,0xEB,0xB9,0xCF,0xDD,0x7B,0x15,0xD9,0xF2,0x68,0x66,0x34,0x92, - 0x46,0x23,0xF9,0x27,0xC7,0x0F,0xBA,0x61,0x24,0x1E,0x62,0xC3,0x8D,0x8D,0x1B,0xC1, - 0x38,0xA6,0xFB,0x82,0x75,0x30,0xDD,0x60,0x4D,0x4C,0xBE,0x0A,0x76,0x83,0x69,0x4D, - 0xB0,0x08,0xD3,0x73,0xF1,0x58,0x8F,0xC2,0xC0,0x2C,0x16,0xDF,0x79,0xCD,0x5E,0xA7, - 0x15,0xBF,0xEB,0x09,0xBF,0x1D,0x17,0x6F,0x63,0xB3,0xEC,0x4B,0x76,0x77,0x48,0xE7, - 0x47,0x6C,0x07,0xD3,0x5E,0x24,0xCB,0x79,0x11,0x6B,0x90,0x18,0xD6,0x23,0x76,0x11, - 0xAB,0xB1,0x3E,0x5E,0x7D,0x13,0xCC,0xC7,0xB4,0xC3,0xD9,0x36,0xA6,0xF5,0x88,0x85, - 0x98,0x76,0x23,0x29,0xD8,0x67,0xA4,0xDE,0xB5,0xD4,0xEE,0x42,0xB0,0x3A,0xB1,0x65, - 0x1E,0x26,0x7D,0xA9,0x64,0x9B,0x7D,0x61,0x5F,0xF1,0xE2,0x3B,0x97,0xCA,0x57,0x04, - 0x6B,0x61,0xBA,0xC7,0x59,0x1B,0xD3,0xB7,0x9C,0x0D,0x30,0x75,0xD9,0x06,0x55,0x8A, - 0x8D,0x48,0x04,0x67,0xBB,0x98,0xFE,0x10,0x6C,0x13,0xD3,0x66,0xC4,0x02,0x4C,0x7F, - 0x0A,0x36,0xC4,0x94,0x47,0xF9,0xBA,0xC6,0x5E,0x93,0xD7,0x7A,0x6D,0x1E,0xA9,0xF5, - 0xAD,0x90,0x7E,0x49,0x35,0xFA,0x89,0xBD,0x9A,0x9C,0xD5,0x30,0x0D,0xB8,0xE4,0x79, - 0xC3,0x99,0x4B,0xD5,0x65,0x82,0x44,0xCA,0xEA,0x5C,0x73,0x69,0x95,0x20,0x92,0xF5, - 0xB9,0x49,0x2A,0x7F,0x1D,0xB1,0x2E,0x19,0x63,0xC2,0xDA,0x7E,0xA7,0xC6,0x87,0xAA, - 0x74,0x32,0x80,0x88,0xA4,0x59,0xA3,0x09,0x8D,0xDD,0x81,0xEB,0x8B,0xEB,0x9B,0x76, - 0xE8,0xB5,0xD4,0x52,0x24,0xB5,0x9F,0x94,0x6A,0x27,0xD2,0xBB,0x42,0xDA,0xBA,0x39, - 0x5D,0xEA,0x92,0xCA,0x80,0x0C,0xD7,0x98,0x10,0xB7,0xDB,0xE9,0xF6,0xC4,0x91,0x1B, - 0xC7,0x83,0x30,0xAA,0x4D,0x18,0xC9,0x9D,0xA0,0xAF,0x70,0x21,0xFC,0x4E,0x23,0xDE, - 0x70,0x75,0x72,0xAA,0x7D,0x67,0xD2,0xFE,0x22,0x8C,0xB8,0xD6,0xD9,0xA8,0xB9,0x83, - 0x09,0x85,0x3B,0xA1,0xF0,0xEB,0xBE,0xE7,0x0A,0x3F,0xEC,0xC4,0x13,0x7A,0xC4,0x93, - 0x7A,0x74,0xFD,0x4E,0x47,0x6F,0x56,0xEA,0x29,0x83,0x09,0xCA,0x8D,0xB0,0xDD,0x76, - 0xBB,0xB1,0x7F,0xD3,0xE6,0x2A,0x75,0x15,0xA9,0xD7,0x27,0xF4,0x10,0x61,0x37,0x6C, - 0x87,0x8D,0x51,0x21,0x16,0x6E,0x54,0x58,0x9E,0xB0,0x60,0x2B,0x9A,0x34,0x75,0x3D, - 0x2C,0x78,0x7E,0xE4,0x25,0xFC,0x3D,0xA8,0x80,0x30,0x86,0x91,0xE3,0xC6,0xA3,0x8E, - 0x67,0xD9,0xCE,0x1F,0xD6,0x83,0xF0,0x45,0x9B,0xAF,0x99,0xFB,0xC7,0xD5,0xAA,0xF9, - 0x68,0x33,0xAF,0xED,0x1C,0xDE,0xDC,0x72,0x4F,0x14,0xEB,0x11,0xE7,0xF7,0xDC,0x4A, - 0xEE,0x6A,0xBC,0xEE,0x77,0xF8,0x51,0x14,0x76,0x79,0x24,0x46,0xD6,0xC3,0xF5,0x75, - 0x37,0x0A,0x45,0x78,0x7D,0xBD,0xD6,0xE9,0xB5,0xDB,0xAC,0x1D,0xBA,0xB5,0xB5,0x61, - 0xF4,0xC8,0x2A,0xA3,0xE0,0x26,0x6C,0x17,0x45,0x58,0x11,0x11,0x34,0x46,0xD5,0x6D, - 0xB0,0x87,0xBE,0xDB,0xEE,0xA1,0x88,0x10,0xBB,0x3B,0x08,0xB1,0xCB,0xF5,0x5E,0xC7, - 0x43,0x73,0x1A,0xD5,0xC8,0xEA,0xD8,0x0F,0x6D,0x2E,0x0C,0xCE,0x22,0x26,0x9C,0xDF, - 0x3E,0x75,0x5D,0xD1,0x34,0xEA,0x7E,0xBB,0xED,0x98,0x9D,0xB0,0xC3,0x4D,0x23,0x16, - 0x51,0xD8,0xE2,0x8E,0xE9,0xF5,0xA2,0x88,0x77,0x04,0xD8,0x2C,0x8C,0xD2,0xDC,0x42, - 0x1B,0x94,0xF2,0xDC,0xAE,0x63,0x46,0x61,0xAF,0x53,0xD3,0xB2,0x6F,0x43,0xBF,0x93, - 0xCF,0x1F,0xF8,0x35,0xD1,0x74,0xCC,0x25,0xD3,0xA8,0x39,0xE6,0xFE,0xAA,0xB1,0xEA, - 0x2E,0x19,0x4B,0xC6,0x22,0xFC,0xBF,0x64,0x2C,0x15,0x96,0x9A,0x1F,0xD4,0x7B,0x63, - 0xA9,0xBF,0x92,0xDD,0x17,0xE0,0x6A,0xE7,0x83,0x7A,0x5F,0x58,0xBA,0x0F,0x56,0x0B, - 0x2B,0xFD,0xA5,0xA0,0xB0,0x6C,0x7C,0xE8,0x7F,0x84,0x9B,0x8F,0xFD,0x8F,0xFB,0xEF, - 0x8D,0xD2,0x6A,0x7B,0xA5,0xB0,0x14,0xAC,0x1A,0x8B,0xED,0x15,0x63,0x69,0xFF,0xA3, - 0x51,0xFA,0xD0,0x5C,0xDD,0x2F,0x2D,0x02,0x51,0x71,0xB1,0xB4,0x5F,0x5A,0x91,0x17, - 0xE6,0xBB,0x3F,0x7E,0x63,0xA1,0x73,0xF9,0xD0,0xF7,0xF9,0xE0,0x4B,0x38,0x5C,0x33, - 0x91,0xF1,0x12,0x14,0x59,0x31,0x1F,0xD9,0x03,0xE9,0xBA,0x66,0x96,0x8A,0x4B,0x3C, - 0xC0,0xFB,0x26,0xF7,0x1B,0x4D,0x91,0x65,0x74,0x2E,0x17,0xAF,0xAE,0x58,0xEC,0x3C, - 0x3C,0x96,0xEB,0x61,0x64,0xA1,0x0D,0x3D,0x67,0xB1,0xEC,0x7D,0x0A,0x8B,0x6D,0xDE, - 0x69,0x88,0x66,0xD9,0xFB,0x87,0x53,0xB2,0x63,0x67,0x5F,0x58,0x31,0x0B,0x2F,0xBD, - 0x2B,0xBB,0x1C,0x71,0xD1,0x8B,0x3A,0x0F,0xD0,0xF4,0x0F,0xDC,0xF1,0x23,0xCB,0x8C, - 0xFB,0x0D,0xD3,0x66,0x91,0xD3,0xE1,0x03,0x70,0xAF,0xD6,0x9B,0x45,0x9B,0x89,0xA6, - 0x1F,0x17,0x9B,0x96,0xFD,0xC8,0xDA,0x96,0x87,0x74,0x5E,0x64,0x79,0x8C,0x28,0xD9, - 0x58,0xD5,0x37,0x8B,0x4C,0xEA,0x07,0x17,0x89,0x62,0x6F,0x16,0x1F,0xED,0x72,0xDF, - 0x8D,0x8C,0xAE,0x73,0x63,0x71,0x90,0xE5,0xD4,0x22,0xAB,0xCB,0x90,0x65,0xB7,0x08, - 0x1A,0x6E,0xB9,0x5E,0xD3,0xAA,0xA9,0xFC,0xE1,0xCF,0x43,0x54,0x74,0x1D,0xEA,0x41, - 0xDF,0x84,0xC5,0x59,0x0C,0xB9,0x01,0x48,0xEB,0xDA,0x0F,0x1D,0x0E,0x29,0x87,0x2B, - 0x16,0x15,0x03,0x0B,0x26,0x14,0x78,0xD4,0x85,0xAC,0xCB,0xEE,0x95,0xFD,0x20,0x89, - 0x9D,0x7E,0x64,0x85,0xEC,0xAF,0xDA,0xAF,0xBB,0x50,0x5A,0x58,0xF0,0xD0,0x88,0x36, - 0xB0,0xF6,0xD7,0x36,0x58,0x08,0xFF,0x6A,0x58,0x67,0x6F,0x61,0xA1,0x06,0x55,0x78, - 0x7C,0x7C,0x1C,0x77,0xD4,0x2D,0xE8,0xA8,0xA0,0x4E,0x04,0x1A,0x93,0x0D,0x8D,0x4E, - 0xF1,0xED,0xDB,0x98,0x0B,0x47,0x38,0x7F,0x3C,0x44,0xD6,0x22,0xE3,0x68,0x67,0xF8, - 0xEF,0xE1,0x11,0x54,0x65,0x5F,0x85,0x25,0x6C,0xE4,0xCB,0x1D,0xB8,0x84,0x8C,0x4B, - 0x7E,0xF5,0xE8,0xB5,0xC1,0x99,0x19,0x7B,0x91,0xC1,0x87,0x82,0x77,0x6A,0xE8,0xE8, - 0x1F,0x68,0x48,0x46,0x3D,0x0F,0x9C,0x11,0x90,0x3D,0xC4,0x3D,0x18,0x5F,0x96,0xCD, - 0xFA,0x50,0x1E,0xEC,0x04,0x12,0xB7,0x22,0x56,0x85,0xE9,0x4B,0xB0,0x87,0x47,0x5B, - 0xD1,0xE7,0x2D,0x0D,0x9C,0xB4,0x3D,0x41,0xF1,0x36,0xFC,0x0B,0xE0,0x5F,0x17,0xFE, - 0x8D,0x2B,0xB3,0xB6,0xA1,0x14,0xD9,0xD0,0xC7,0x1A,0x0B,0x59,0xCC,0xC0,0xD4,0xAC, - 0xCE,0x46,0x8E,0x59,0x11,0xAE,0xE8,0xC5,0x26,0x3B,0x60,0xBB,0xAC,0xC5,0x86,0xEC, - 0x98,0x05,0xEC,0x90,0x9D,0xB1,0x1D,0x76,0xE1,0x98,0x1B,0x6D,0x1F,0x46,0x9E,0xB1, - 0xBB,0x69,0x32,0x8F,0xB3,0x75,0x76,0xEA,0x74,0x2E,0x4B,0x57,0x45,0x8F,0xB2,0xAF, - 0xFD,0xDA,0x3F,0x4C,0x93,0xDD,0xB3,0x4D,0xD6,0x2C,0x87,0xD4,0x93,0xD6,0xC1,0x0C, - 0xE0,0x1E,0xBA,0xF1,0xDA,0x03,0xD5,0x79,0xCD,0x6C,0x16,0xDC,0x9E,0x08,0x8D,0x41, - 0xA1,0x0E,0x6D,0x6D,0xC4,0x9E,0xDB,0xE6,0x85,0xDF,0xDF,0x1B,0xE6,0x3F,0x2C,0xC9, - 0x29,0x04,0x8F,0xE9,0x09,0x5E,0x73,0x1C,0xE7,0xCD,0xE2,0x67,0x53,0x80,0x85,0x0A, - 0x71,0xCF,0xF3,0x78,0x1C,0x17,0xE0,0x21,0x98,0x4B,0x98,0x6B,0x32,0x9B,0x47,0x51, - 0x18,0x8D,0x33,0xC1,0x26,0x8A,0x3B,0xD9,0xB6,0x1A,0xAC,0x32,0x6E,0xA2,0x86,0xC6, - 0xFA,0xF3,0x7E,0xB4,0x46,0x39,0xBC,0xE3,0x82,0xC3,0xAD,0x7D,0x1E,0x45,0x6B,0xBB, - 0xD1,0x23,0xDA,0x63,0xDF,0xD9,0x06,0xD3,0xB0,0x3D,0x67,0x1F,0x92,0x64,0x90,0x18, - 0x01,0x55,0x65,0x2F,0xCA,0x57,0x85,0x94,0xE8,0x46,0x7E,0xE0,0x46,0xA3,0x54,0x0D, - 0x63,0x7A,0xFD,0x4C,0x50,0x8E,0xA5,0xA3,0xCD,0x32,0x6B,0x7E,0x9F,0x06,0xDB,0xF8, - 0x52,0x64,0x97,0x4D,0x6E,0x85,0xD0,0xA3,0xC0,0xEB,0xBA,0x8D,0x00,0x38,0x82,0x27, - 0x76,0xAE,0xA1,0x23,0x74,0x33,0x92,0xBA,0x72,0x59,0x44,0x2D,0x36,0xA4,0x70,0x67, - 0xC4,0x0E,0x88,0x76,0x37,0x23,0xD8,0x2B,0x82,0x54,0xD6,0xA2,0xEC,0x61,0x96,0x7D, - 0xAC,0x09,0x0C,0x74,0x81,0x87,0x44,0x7D,0x96,0x91,0xEC,0x28,0x97,0x9A,0xC0,0x0B, - 0xE8,0x06,0x44,0xBC,0x9E,0x51,0xDC,0x3B,0x7B,0xDC,0x3A,0xD5,0xDD,0x47,0x03,0x2B, - 0xDE,0x83,0x36,0x31,0x37,0x77,0xCF,0xC0,0x7B,0x48,0x0B,0x8E,0x1D,0x45,0x25,0x75, - 0x14,0x3D,0xAB,0x32,0x83,0xE4,0x16,0x48,0x22,0xBB,0x2C,0x80,0xE4,0x76,0x06,0xC9, - 0x06,0x07,0x1A,0x61,0x97,0x83,0x9C,0x05,0xD9,0x06,0x0C,0xBB,0x0D,0xAE,0xBA,0x1E, - 0xCF,0xE9,0x5B,0xB7,0x68,0x53,0x85,0x5B,0xC2,0xE5,0x04,0x98,0x74,0xA1,0x27,0xC1, - 0xA3,0x93,0xBC,0x20,0x66,0xD6,0x5C,0xE1,0x16,0xE2,0x3E,0x6F,0x0B,0x5E,0x68,0x9A, - 0x24,0x9B,0x7D,0xB1,0xEA,0xF6,0x1B,0xC7,0x31,0x93,0xEC,0x91,0x7F,0x1F,0xB7,0x46, - 0xE6,0xC2,0x82,0x95,0x6B,0x1C,0x1B,0x5A,0xA7,0x6F,0x9D,0x60,0xF3,0x4C,0xE1,0x9D, - 0x88,0xE7,0x58,0x89,0x5D,0xBB,0xBC,0x57,0x6C,0x5B,0x1C,0xF4,0xE6,0x9A,0xDE,0x27, - 0xEA,0xCD,0xAD,0x7A,0xD3,0x02,0xD6,0x15,0x6C,0xE2,0xD9,0x26,0x14,0xC8,0x7A,0x68, - 0x97,0x8F,0x81,0x46,0xF0,0x19,0x44,0x11,0x12,0x1D,0x93,0x11,0xB5,0x5E,0xC1,0x22, - 0x50,0x26,0xD2,0x94,0x39,0x04,0x91,0x82,0x63,0x47,0x51,0xF9,0x25,0x7C,0x8E,0x80, - 0xCD,0x99,0x5D,0xDE,0x81,0x67,0x47,0xF3,0x9A,0x71,0x47,0x35,0xE3,0xAA,0x37,0xB8, - 0xF9,0x3D,0x40,0x33,0xE6,0xBA,0x9C,0x8D,0x7D,0xAE,0x6F,0x1D,0x61,0xA7,0x9B,0xC2, - 0x3C,0x91,0xDF,0xC2,0x7A,0xAC,0xDB,0xE5,0x7B,0xE7,0x2D,0xB7,0x5A,0x9C,0x41,0x87, - 0x6C,0x69,0xDA,0x1F,0x69,0x53,0x91,0xF6,0xA8,0x32,0x7B,0x96,0x6A,0xC3,0x04,0x64, - 0x92,0x28,0x13,0xA6,0x1D,0x33,0x70,0xE3,0x96,0x81,0x7F,0x0A,0x4D,0x3E,0x74,0x1B, - 0xE0,0x78,0xC6,0xE3,0x1F,0x66,0xF9,0x59,0x4E,0xED,0xA6,0x91,0xBA,0x34,0x70,0x65, - 0x70,0x43,0x8E,0xCC,0xB4,0x6D,0x18,0x28,0xF5,0x31,0x77,0xB3,0x0E,0x15,0x2E,0x40, - 0x08,0x55,0x33,0xF1,0xC1,0x6E,0xF6,0x40,0xFA,0xC4,0xC0,0x08,0xBB,0xAE,0xE7,0x8B, - 0x11,0xBA,0x17,0xA4,0x88,0x32,0x0A,0x8A,0x75,0x78,0x0D,0x4A,0x0F,0x0D,0xE0,0x7F, - 0xE3,0xC6,0x1C,0xF4,0x59,0x34,0xEA,0x6D,0x3E,0x34,0x7C,0xC1,0x03,0xF0,0xA5,0x60, - 0x4B,0x1E,0x19,0x31,0xF0,0xE0,0x85,0x21,0xC4,0x2D,0xDD,0x61,0x61,0xC5,0xE8,0x8E, - 0x0A,0x4B,0xC4,0xEC,0x38,0x63,0x36,0x59,0x47,0x60,0x99,0xB8,0x3D,0xB5,0xBA,0x54, - 0x6E,0x67,0x96,0xFE,0xEB,0xCF,0xEA,0x3F,0x7C,0x4D,0xFD,0xB9,0xA2,0x07,0x16,0x4A, - 0xFC,0x31,0x5E,0x83,0xAB,0x6E,0x27,0xE5,0x46,0x85,0x92,0x49,0x81,0x06,0x4D,0x16, - 0x10,0x68,0x34,0x60,0x9E,0x85,0x51,0xE4,0x5A,0x38,0xC1,0x43,0x02,0xB3,0xA3,0xCD, - 0x6E,0xC0,0x9F,0xC0,0x2C,0x89,0xC1,0x89,0xCC,0xF3,0x64,0xD2,0xC5,0x04,0x66,0x4D, - 0x99,0x1C,0xC8,0x64,0x17,0x5D,0x6E,0x00,0xCD,0x95,0x92,0x73,0xD6,0x92,0xC9,0x10, - 0x13,0x98,0x4F,0x89,0x61,0x00,0xF3,0x6A,0x4A,0x31,0x64,0x87,0x32,0x39,0xC3,0x04, - 0x66,0x5A,0x99,0x78,0x5C,0xA6,0xEB,0x98,0xAC,0xB3,0x7B,0xF0,0xD4,0xD0,0x7B,0x30, - 0xF6,0x21,0x6D,0x65,0x08,0x7F,0x8B,0x51,0x5F,0x65,0x61,0x09,0x86,0xC9,0x6D,0x91, - 0x6A,0xEC,0x3C,0x31,0xC5,0x36,0xFE,0xC9,0x29,0xD6,0x66,0xE0,0x58,0x21,0xD6,0x41, - 0xDF,0x69,0xBD,0x69,0xFE,0xFA,0x45,0x92,0x63,0x18,0xB5,0xD6,0x3C,0x83,0xA1,0xF1, - 0x92,0xC1,0x60,0x2F,0x2C,0x68,0x83,0xCD,0x66,0xFB,0x50,0xC2,0xC2,0x19,0xBA,0x81, - 0x0F,0xF7,0x3E,0xEF,0x15,0xA5,0x29,0xD6,0xAC,0xBD,0x62,0xCD,0x2A,0xC9,0x69,0xBB, - 0x01,0x09,0x18,0x43,0x4E,0x7B,0x4A,0x4B,0xD8,0x99,0xC6,0x50,0xF8,0x14,0x55,0x3E, - 0x75,0x1A,0xF9,0xE0,0x05,0x1E,0xFD,0x14,0xD6,0x3D,0x78,0x0B,0x08,0x04,0x71,0xD6, - 0x82,0x12,0xD6,0xB7,0xDC,0x74,0x02,0x22,0xBE,0xE5,0x9C,0x23,0x64,0x35,0x16,0x16, - 0x20,0x60,0xC3,0xA5,0xD4,0x43,0x13,0x14,0xD8,0x84,0x82,0x9B,0x4E,0x1D,0xC3,0xD3, - 0x26,0x84,0x6C,0xB5,0x5E,0x44,0xCB,0xC6,0xB5,0xE5,0x45,0x88,0x10,0xDD,0x18,0x56, - 0x44,0x6B,0x5D,0xF1,0x88,0x41,0xB1,0xCD,0x36,0x8B,0x51,0xAF,0x03,0x15,0xB0,0x1F, - 0x65,0x1B,0x83,0xF0,0x10,0x85,0xFF,0x98,0x14,0xFC,0x63,0xAA,0xE0,0xB9,0xA5,0x95, - 0xC6,0xD2,0x50,0x2E,0xC8,0x2A,0x3D,0x42,0xA0,0x0B,0xA2,0x1A,0x32,0xD0,0x65,0xD7, - 0xD0,0xD7,0xD1,0x6E,0x35,0x8B,0xAE,0x03,0x62,0xBF,0x09,0xFF,0x41,0xB0,0x04,0x79, - 0x6A,0x20,0x3C,0xCA,0xA2,0x48,0x88,0x02,0x57,0xAF,0x2E,0xC9,0xD7,0xD5,0xFC,0x38, - 0x69,0xE1,0xEB,0x08,0x24,0x87,0x9D,0x2B,0x8C,0x09,0x23,0x75,0xC1,0x11,0x61,0x80, - 0xC0,0x29,0x2E,0x10,0x78,0x07,0x0E,0x5A,0x46,0xF5,0x18,0xDD,0x87,0x34,0x0E,0x61, - 0xBA,0x81,0x2B,0xEC,0xEB,0x94,0x13,0x62,0x37,0xE3,0xD8,0x66,0xDC,0x11,0x28,0x4A, - 0xCC,0x14,0x25,0x5B,0x30,0x22,0x7E,0x35,0xE4,0x2F,0xB0,0x66,0x91,0xA6,0xF9,0x6E, - 0xA6,0xB9,0xBE,0x10,0x02,0xBD,0x68,0xFD,0x6B,0x6C,0xFA,0x31,0x85,0x86,0x26,0x69, - 0x19,0xE1,0x33,0xD0,0x12,0x3C,0xEC,0xC4,0xD3,0x80,0x7C,0x04,0xEA,0x0C,0x32,0xE1, - 0xEA,0x91,0xE2,0x6E,0x94,0xF8,0x10,0x4D,0x2E,0x1E,0xF6,0x9F,0x92,0xBC,0x91,0x8E, - 0x8C,0x09,0xA9,0xDA,0x93,0x97,0x49,0xAC,0xA8,0xB1,0x7E,0x1A,0xD1,0x72,0x8A,0x68, - 0x63,0x88,0x68,0xD3,0xB0,0x14,0x82,0x40,0xAE,0x05,0x81,0x49,0xEB,0x04,0xB9,0x7C, - 0x92,0x97,0xB4,0x13,0xB8,0x31,0x8E,0xAB,0x07,0x8C,0x64,0xC9,0x31,0xE1,0x82,0x83, - 0x9A,0x94,0x06,0x4D,0xBE,0x1C,0x51,0x51,0xD7,0x16,0xD8,0xB5,0xA7,0x3D,0x2E,0x25, - 0x6D,0x76,0x4D,0x9C,0xB5,0x7A,0x7C,0x17,0x33,0xEB,0x31,0xC8,0x22,0xF3,0xB0,0xCB, - 0x3B,0x6B,0x6F,0x4A,0x2C,0x89,0xD0,0xE3,0xA6,0x5B,0x0B,0x07,0x85,0x36,0x2C,0x58, - 0x61,0x8D,0xD6,0x0E,0x05,0x90,0xC8,0x6D,0x8E,0xCB,0xCD,0xE8,0x8A,0xD5,0x78,0xDD, - 0xED,0xB5,0xC5,0xDA,0xE5,0x7A,0x74,0xF5,0x88,0x14,0x1E,0x94,0x87,0xF0,0x5E,0x0C, - 0xD7,0x3A,0x8F,0x18,0xB1,0x83,0x8E,0x61,0xC7,0x02,0x17,0x14,0xC6,0x60,0x7B,0x58, - 0x68,0x7F,0xB8,0x7A,0x4D,0x7B,0xC9,0x6C,0xE9,0xC8,0x69,0xF9,0x1E,0x2E,0x7C,0x58, - 0xFE,0xF0,0x61,0x75,0x09,0xD6,0xA3,0x56,0x5C,0x4C,0x14,0x72,0x1E,0x6A,0x7E,0x24, - 0x46,0x6B,0x21,0x43,0xC5,0x84,0x54,0x0B,0x9D,0x70,0x4C,0x4E,0xEA,0xFF,0x92,0xBD, - 0xD7,0xA7,0xAF,0x11,0x1D,0x73,0x8B,0x16,0x4D,0x06,0x6D,0x13,0xE1,0x8A,0x31,0x5D, - 0x28,0x3A,0xBF,0x7D,0x82,0x49,0xB5,0x63,0x24,0x93,0x50,0xDB,0xBD,0xE1,0xED,0x02, - 0x4E,0x22,0x06,0xCD,0x24,0x41,0xCD,0xFC,0x63,0x27,0x8C,0xC5,0xA7,0x77,0x48,0xF5, - 0xC7,0x6F,0xEA,0xBA,0x32,0x59,0x4B,0xCA,0x95,0xE3,0x1C,0x7C,0x8E,0xC2,0x28,0xE3, - 0xB3,0xCD,0xF6,0xD9,0x1E,0x83,0x79,0x80,0xDD,0x42,0x90,0xCF,0x4E,0x20,0x62,0x86, - 0x70,0x0E,0x42,0x55,0x76,0x34,0x07,0xAB,0xD3,0x98,0x47,0x1D,0x37,0xE0,0x63,0x76, - 0x10,0x2A,0xC6,0x30,0x57,0x73,0xD6,0xE6,0xAC,0xCF,0xD9,0x1D,0x9F,0x47,0x9F,0x64, - 0x6B,0x72,0xCC,0xE4,0x88,0x33,0x97,0xB3,0x2F,0x9C,0x55,0x39,0x1B,0x71,0xF6,0x9D, - 0x85,0xF3,0xB0,0x19,0x2F,0xAE,0xC7,0x7C,0x0E,0x38,0xF4,0x51,0x56,0x65,0x5B,0xAC, - 0xCE,0xD9,0x2E,0x67,0x3E,0x67,0xE7,0x1C,0x57,0xE1,0x1C,0x38,0x55,0x60,0xCA,0x84, - 0x96,0xFA,0x0C,0x2B,0x6E,0xCE,0x7E,0xB2,0x2D,0xCE,0x7E,0xCC,0x23,0xE5,0x3B,0xE7, - 0x5D,0x63,0xBD,0xED,0xF7,0xB3,0x3A,0xEF,0x73,0xD6,0x00,0xCE,0x8C,0xC3,0x7C,0x22, - 0xD8,0x09,0x67,0x9B,0xC2,0x31,0x2B,0x1C,0x3A,0x66,0x0D,0x66,0xDE,0x81,0x60,0x67, - 0x9C,0xED,0x40,0x1C,0x03,0xDD,0x46,0xB0,0xA1,0x60,0x15,0xA0,0x00,0xD3,0x88,0x39, - 0xA4,0xED,0xBB,0x43,0xA3,0x1A,0x76,0x7D,0xCF,0xD8,0xA3,0xAD,0xA8,0xB1,0xCC,0xAA, - 0x60,0xEB,0x9C,0xF5,0xA0,0xA1,0x04,0xDB,0x12,0xEC,0x10,0x9A,0x0B,0x84,0x6E,0x34, - 0xDD,0x08,0x44,0xEE,0x09,0x76,0xCA,0xD9,0x2D,0x67,0x6F,0x05,0x6B,0xC3,0xFA,0x4D, - 0xB0,0x9F,0x60,0x48,0xC1,0x8E,0xC1,0xA8,0x28,0xF5,0xA6,0x27,0x44,0x38,0x96,0x7B, - 0x23,0x20,0x24,0x15,0x9D,0x34,0x26,0x35,0x0D,0x31,0x82,0x51,0x63,0xC6,0xBD,0x9B, - 0xC0,0x17,0xE6,0x1F,0xEB,0xDD,0x6E,0x7B,0x64,0xA4,0x7B,0xC2,0x9F,0xDE,0xC9,0xC2, - 0xA0,0xC2,0x00,0x6C,0x2A,0xD8,0x81,0xC8,0x76,0x0D,0xC2,0xC8,0x1A,0x80,0x67,0xBD, - 0x2C,0xAD,0x5C,0xC1,0x05,0xED,0x08,0x9C,0x09,0xE7,0xC1,0xAF,0xAD,0x99,0xDD,0x41, - 0xCD,0x7C,0x4C,0xFD,0x0E,0xEE,0xB8,0x15,0xBB,0x49,0xAB,0xC3,0xB4,0xD4,0x0F,0xFD, - 0x9A,0xB1,0x08,0x83,0xF6,0x4C,0x14,0x69,0x8F,0xD3,0xD1,0x28,0x20,0x80,0x93,0x9E, - 0xAA,0x31,0xF6,0x54,0x67,0x38,0x8E,0x2B,0xA2,0xD8,0xED,0xC5,0x4D,0x0A,0x1A,0xAE, - 0x23,0x0B,0xBA,0x8C,0x49,0xA5,0x4D,0x16,0x46,0xB6,0xBA,0x5F,0x00,0xCB,0x91,0x60, - 0xCA,0x86,0x01,0x19,0x1C,0x6E,0x42,0xBC,0xF1,0x71,0x93,0x1C,0x6E,0x62,0x5A,0x8F, - 0x7B,0x98,0x85,0xA6,0x86,0x1C,0x4F,0x5B,0x3F,0x41,0xC0,0x4A,0x14,0xA3,0x8C,0xD9, - 0xC4,0xA6,0x41,0x4B,0xE5,0xDE,0x2A,0xD2,0x2E,0xF6,0x4E,0x75,0x7F,0xCF,0x81,0xF0, - 0x95,0x68,0x03,0x55,0xE2,0x19,0x65,0xED,0xA8,0x65,0x2E,0x54,0xF1,0xC9,0xBC,0xDA, - 0x03,0x2F,0x77,0xC3,0x0D,0xD7,0x80,0x3A,0x82,0xB9,0x76,0x8F,0xFA,0x2B,0x86,0x5B, - 0xAB,0x45,0xD0,0x8D,0xC1,0xF0,0xC6,0xE9,0xC9,0x1E,0x10,0x9F,0x12,0xAF,0xFB,0x4C, - 0x95,0x4D,0x95,0xED,0xA6,0xA2,0x4A,0x93,0x6D,0x13,0xED,0xBE,0xAA,0x4A,0x83,0xB2, - 0x2A,0x6A,0x99,0x5B,0x45,0x95,0x0D,0xA9,0x0A,0xFA,0x0F,0xA3,0xD3,0x0B,0x6E,0x60, - 0x01,0x11,0x24,0x6A,0xDD,0x70,0x31,0xE0,0xBC,0x63,0x2C,0x1A,0x6E,0xA7,0x66,0xAC, - 0xBE,0x7F,0xBF,0xBC,0x6A,0xE2,0xEA,0x9B,0x18,0x0A,0x75,0xD7,0x86,0xAB,0xDC,0x61, - 0x45,0x9C,0xA9,0x74,0x04,0xDE,0x83,0xE8,0x63,0xAE,0x2A,0x35,0x94,0x99,0x6D,0x85, - 0x49,0x5F,0x63,0xD2,0x57,0x99,0xDC,0xC1,0x48,0x90,0x05,0x60,0x8E,0x71,0xF5,0x49, - 0x06,0xFC,0x89,0x6C,0x3B,0x85,0xD5,0x77,0x95,0xD3,0x77,0x85,0x51,0xC8,0xC1,0x7F, - 0x10,0x79,0x4D,0x53,0xA7,0x4A,0x79,0x5B,0x6A,0xB1,0xBA,0x46,0xB0,0x2B,0x4B,0xF9, - 0x5C,0xB1,0x9C,0xCF,0xB5,0x4E,0x74,0xCE,0xC1,0xE9,0x10,0xD5,0xCF,0x4C,0x93,0x2D, - 0xAD,0x52,0x5B,0x6A,0xA5,0x7E,0x70,0x70,0x32,0x44,0xDF,0xD0,0x88,0xCE,0xB5,0xC6, - 0x13,0x44,0x71,0xA2,0xCA,0x3D,0xD1,0xE5,0x6E,0x0A,0x70,0x47,0x72,0x77,0x4A,0xE3, - 0xB3,0xA3,0x96,0x69,0x09,0xAD,0xC3,0xA5,0x2D,0x5B,0x92,0x2D,0x0B,0xCB,0xC8,0x38, - 0x71,0x6D,0xD0,0x34,0x92,0x59,0x45,0xB1,0xE7,0xA6,0xC6,0x78,0x53,0x6B,0x1A,0x01, - 0x6E,0x4B,0x6E,0x77,0x69,0x44,0x3D,0xCD,0x7C,0x5B,0x92,0xE4,0x50,0x55,0xE9,0x50, - 0xAF,0xC6,0x91,0x00,0x17,0x47,0x54,0xA7,0x1A,0xA3,0x5B,0xB5,0xCC,0xDB,0xE9,0xD5, - 0x58,0x5D,0xA1,0x7A,0xAC,0x2C,0x7E,0x5C,0x35,0x3C,0x70,0x97,0x2E,0xC4,0x85,0x11, - 0xD6,0x65,0x43,0x72,0xFC,0xA9,0xD4,0x65,0x24,0xB3,0x8E,0x95,0xAC,0x63,0xB5,0x42, - 0x5F,0x84,0xB6,0x4B,0x37,0x90,0xBB,0x74,0x03,0x66,0x6E,0x1F,0x9E,0xEC,0x67,0x7B, - 0x39,0x6F,0xB3,0xED,0xB9,0xB7,0x33,0xB6,0x5B,0xEE,0xB2,0xED,0xB9,0x3B,0x66,0xEE, - 0xAD,0x7F,0xD9,0xDA,0x9B,0x24,0x72,0x85,0xDC,0xA0,0x0B,0x81,0xCA,0x85,0xA5,0xDD, - 0xEE,0xC1,0xD1,0x29,0x04,0x11,0x0F,0xE8,0xAF,0x71,0x5B,0x28,0x23,0xC7,0x2D,0x7D, - 0x20,0x41,0x3F,0x26,0x49,0x2B,0x47,0xEB,0x07,0x40,0x39,0x63,0xE3,0xC8,0x53,0x37, - 0x8E,0x4A,0xC3,0xE0,0xE3,0x9D,0x7F,0x8F,0x3B,0x47,0x39,0xCF,0x07,0x7E,0x58,0xA8, - 0x5B,0x3B,0x75,0x10,0x72,0x87,0x9E,0x90,0x94,0xCE,0xD7,0x8B,0xDD,0x58,0x23,0x5B, - 0x25,0x3F,0x90,0xE4,0xBB,0x2A,0x79,0x52,0xB3,0xED,0x64,0xD7,0xAE,0x05,0xCF,0xB6, - 0xF9,0xA4,0x01,0x18,0xB0,0x79,0x62,0xE3,0xAB,0xA5,0xEA,0xDF,0x7B,0x5F,0x8F,0x63, - 0x81,0xEA,0x6B,0x9E,0x17,0xF7,0x6C,0xFB,0xC0,0x1C,0x9D,0xAF,0x14,0x32,0xCB,0x7C, - 0x0C,0xE6,0x2B,0xF8,0x1B,0xF8,0x1D,0x4A,0xDC,0xA1,0x14,0x73,0x96,0x14,0xDF,0x79, - 0x5A,0xC7,0xA4,0x46,0x3B,0xD8,0x56,0x3B,0x76,0xF9,0x02,0xA8,0x77,0xB2,0x06,0xC8, - 0xB5,0xE8,0x29,0x52,0x5D,0xD8,0x65,0x8F,0x56,0x2A,0xA7,0x40,0x37,0xA7,0x9B,0xD7, - 0xDA,0x61,0x47,0xBB,0xDB,0xD6,0xF6,0xE2,0x4E,0xA5,0xD1,0xEF,0xA7,0x18,0xFD,0x2B, - 0x1A,0xFD,0xDE,0x2E,0x6F,0xC2,0xB3,0xAF,0x2F,0x37,0xFA,0xA6,0x6A,0x74,0xD7,0x7F, - 0xDF,0x8C,0x22,0x34,0xBA,0x36,0xC7,0x80,0x36,0x20,0xFF,0x2B,0xC7,0x69,0x46,0x0A, - 0xC9,0x1B,0x5D,0xB3,0x72,0xAE,0x09,0x1E,0x71,0x42,0x92,0xC5,0x2B,0x39,0x1D,0x13, - 0xD5,0xF2,0x9B,0xDC,0x68,0xCE,0x8A,0x5D,0xBE,0xC5,0x7D,0xE9,0x99,0x46,0x3F,0x46, - 0xAA,0x5B,0xBB,0xBC,0x41,0x46,0x3F,0x06,0xBA,0xF9,0x27,0xB4,0x63,0xCD,0xD4,0xB7, - 0xDA,0xDD,0x57,0xCD,0xF0,0x9C,0x4B,0xCB,0x0B,0x3E,0xC5,0xF4,0x1D,0x1A,0xC9,0xE8, - 0x13,0xF0,0x29,0xAC,0x27,0x5E,0x6A,0xFC,0x88,0xAB,0xD6,0x1F,0x2C,0x7B,0x4B,0x1F, - 0x5D,0xB4,0xBE,0x3E,0x9F,0xE2,0x9E,0x2D,0x68,0x81,0x33,0x5F,0x9C,0x0A,0x7A,0xBA, - 0xD7,0x03,0xF3,0x8E,0x56,0xA9,0x61,0x52,0x8D,0xF6,0xB4,0x6A,0xC4,0x58,0x8D,0x36, - 0x54,0xA3,0x8F,0x4F,0xE3,0x97,0x57,0xA3,0xAF,0x55,0xA3,0x74,0xF3,0xD1,0x6D,0x7D, - 0x18,0x62,0x3D,0x72,0x53,0xBA,0x8D,0x73,0x7A,0x1F,0x24,0xC0,0xE8,0xCD,0xCF,0xEA, - 0x0C,0x73,0x63,0x4D,0xE9,0x6A,0xA2,0xF4,0x68,0x9A,0xD2,0x21,0x2A,0x3D,0x02,0xA5, - 0xBF,0xC3,0xC3,0xF0,0xE5,0x3A,0x7F,0x57,0x55,0xBE,0xBB,0x5B,0x29,0x41,0x64,0x0B, - 0x1A,0xEB,0xA1,0x83,0x8D,0xB1,0x43,0x1F,0xD8,0x53,0xF4,0x20,0xE5,0x3C,0x6B,0xF9, - 0x50,0xAF,0x84,0xAC,0xC3,0xD6,0x93,0x53,0x82,0x8F,0x95,0xD9,0xB2,0xCB,0x75,0x14, - 0xE2,0x3F,0x3D,0x27,0xEC,0xA2,0x46,0xBE,0xA0,0xC8,0x44,0x12,0xE7,0xC6,0xC7,0xAC, - 0x1A,0xFB,0x5A,0x2B,0xDD,0x2D,0xFF,0xDE,0x1D,0x0C,0xB0,0xCA,0x13,0x41,0x0D,0xB0, - 0xD6,0xAA,0x70,0x9F,0xB4,0xC3,0xCF,0x29,0xCD,0xF0,0x0D,0xBD,0xCF,0x4F,0xBB,0xBC, - 0x85,0xCA,0x7C,0x7B,0xB9,0xFB,0xD9,0xD2,0xBB,0x4E,0xF7,0x5E,0xB4,0x56,0xC9,0x01, - 0xE5,0x02,0x27,0x1B,0x23,0xA7,0x3E,0x48,0xA0,0xD8,0x49,0x17,0x35,0xDD,0x8B,0xF4, - 0xD0,0xA6,0x0D,0xE8,0x20,0xE7,0x40,0xDE,0x13,0x2F,0xF7,0x59,0x02,0xE4,0xF5,0x04, - 0x45,0x62,0x92,0xC1,0xD3,0xB3,0xEF,0x89,0x5E,0x93,0x41,0x7F,0xF0,0x51,0xD0,0xFC, - 0x35,0x11,0xBC,0x41,0xA8,0xA4,0xD9,0x77,0x20,0x92,0x9A,0x9D,0xCD,0x57,0xB3,0x7B, - 0xAC,0xD9,0x19,0xD4,0x6C,0x07,0xE9,0xEF,0x67,0x7A,0xC8,0x13,0x9A,0xBC,0x80,0x0E, - 0x42,0x41,0x70,0x91,0x27,0xCA,0xBC,0xF4,0x54,0x34,0x78,0xA2,0x37,0xBE,0x76,0xF7, - 0x4D,0x73,0x8E,0x43,0x21,0x3B,0x46,0x65,0xDA,0x00,0xBD,0xC0,0x9E,0x51,0x01,0xE9, - 0x9B,0xF8,0xF4,0xE2,0x2F,0xCC,0x4C,0x9A,0x41,0xDD,0x66,0xA7,0xF9,0xB1,0x49,0x53, - 0x93,0x1E,0x8C,0xDA,0x18,0x8D,0xF6,0x41,0x00,0xC5,0xA3,0xBA,0xA4,0xE9,0xF6,0xF3, - 0xD0,0x2E,0xEB,0xA0,0x59,0x0F,0xE9,0xBD,0x97,0x77,0x8D,0x2D,0x14,0xE8,0x09,0x8A, - 0x6E,0x25,0x83,0xA7,0xBB,0xC6,0xA1,0x56,0x93,0xBA,0xF8,0xBD,0xFB,0xB1,0x8D,0x35, - 0x99,0x88,0x87,0x21,0xD2,0xD3,0xCC,0xBD,0x97,0xD6,0xEC,0x74,0xBE,0x9A,0x1D,0x62, - 0xCD,0x4E,0xA1,0x66,0xB7,0x48,0x7F,0x38,0xB3,0x67,0x6C,0xD3,0xDC,0x09,0x74,0x6F, - 0xA9,0x67,0x6C,0x4F,0xE9,0x19,0x33,0x03,0xEC,0x6D,0x4D,0xC3,0x43,0xED,0xEE,0x42, - 0xEB,0x1E,0x77,0xEA,0xCD,0x06,0x56,0xE5,0x2D,0x05,0xE6,0x53,0xE3,0x67,0x88,0x33, - 0x7F,0x72,0x2D,0xD0,0x1C,0x25,0x25,0x8E,0xA7,0x96,0x98,0xD5,0x6B,0x8E,0xF5,0x61, - 0xF8,0x71,0x10,0xF5,0x1A,0x5D,0x34,0x76,0x2E,0xE4,0x87,0x95,0xC5,0x53,0xEF,0x37, - 0x43,0x66,0x62,0x67,0x30,0x99,0xE9,0x35,0xB9,0xD7,0xBA,0x09,0x87,0xF4,0x42,0x2D, - 0xCC,0x5E,0xA8,0xA5,0xF9,0x46,0x7A,0x31,0xDE,0x79,0x41,0xC2,0xEC,0x95,0x8D,0x5C, - 0xD6,0x18,0x7E,0x07,0x41,0x58,0x05,0x7A,0x0D,0xE7,0xF5,0xA2,0x38,0x8C,0x0A,0xDD, - 0xD0,0xA7,0xB7,0x77,0xC9,0x8B,0xA5,0x02,0x07,0x7B,0xDF,0x42,0x33,0xF8,0x75,0x89, - 0x69,0x13,0x46,0xC3,0xED,0x16,0x56,0x88,0xDF,0x28,0xE3,0xD7,0xF4,0x6B,0x35,0x68, - 0xA0,0x38,0x58,0x23,0xE8,0x21,0x3D,0x6E,0xE5,0xC4,0xA5,0x99,0x50,0x43,0x2C,0x11, - 0xC6,0x82,0x72,0x82,0x71,0xAD,0xB0,0xDF,0xA5,0x59,0x49,0xC9,0x43,0x47,0x2E,0xDE, - 0x0C,0xFA,0x5B,0xB8,0x09,0xA3,0x1A,0x8F,0x78,0x0D,0x6E,0x29,0x86,0x5D,0x93,0x19, - 0xF2,0xCD,0x54,0xFA,0x5A,0x2D,0xF7,0x6C,0x49,0xBE,0xEC,0x5D,0xBE,0x2A,0xA2,0xC8, - 0xCF,0xA6,0x56,0x24,0xA5,0x31,0xD7,0x4C,0xF9,0x96,0x17,0x44,0xFB,0xB5,0x9C,0x7A, - 0x30,0xF2,0x20,0x67,0x79,0x7C,0xEB,0x0E,0xE1,0x76,0x15,0x6D,0x10,0x14,0x23,0x7E, - 0xD7,0xF3,0x41,0x23,0x07,0x5A,0xBF,0x6D,0x5D,0x8C,0x15,0x5F,0x57,0x37,0xDD,0x0A, - 0x6E,0x3B,0xD9,0x78,0x93,0x52,0x75,0x85,0x40,0xB6,0x34,0x9F,0xD4,0x60,0x67,0x9A, - 0xD9,0x76,0x26,0xCC,0xB6,0x39,0x8D,0x6C,0x33,0x25,0x43,0xC4,0x21,0xE5,0xEC,0x8F, - 0xAD,0x2B,0x83,0xD0,0x34,0x53,0xD6,0x69,0x71,0x7C,0x2B,0xEB,0x94,0x84,0xA2,0x94, - 0x95,0x70,0xDF,0x7B,0xCD,0x16,0x40,0xB5,0x9E,0x6B,0x81,0xFD,0xA4,0x05,0x92,0x2A, - 0xEC,0xE7,0x4C,0x7C,0x3B,0xD6,0xEC,0x64,0x1E,0x13,0x4B,0x89,0x39,0x13,0x57,0x26, - 0xCC,0x54,0x99,0x66,0xCD,0x88,0xCF,0xCA,0x95,0xA5,0x7B,0x71,0x62,0xCF,0x98,0x4F, - 0xF6,0xE1,0x58,0x29,0x3C,0xD5,0x80,0xD2,0x56,0x63,0x5A,0xAA,0xF3,0x98,0x63,0x7F, - 0xAA,0xE8,0xFE,0x58,0x34,0xEE,0x79,0x62,0xCE,0xF7,0x69,0x64,0xDF,0x53,0x2A,0xF9, - 0xFE,0xD4,0x97,0xA4,0xB5,0x29,0x4A,0xD6,0x5E,0xA0,0x64,0x2D,0x55,0x52,0xE3,0x5A, - 0xE7,0xD3,0x9D,0x52,0x9D,0xCF,0xE1,0x95,0x8C,0x40,0x40,0xE7,0x00,0xA7,0x51,0x08, - 0x6E,0x0A,0x1F,0xF0,0x02,0x32,0x64,0x9F,0xF4,0x95,0xF2,0xB3,0xA9,0xB6,0x5E,0xD9, - 0xA3,0x6D,0x4D,0x35,0xFB,0xD6,0xD8,0xEC,0x2D,0xCE,0xBB,0x2E,0x6E,0xD0,0x53,0xFE, - 0xF9,0xB4,0xB1,0x75,0x9E,0x8E,0xAD,0xD2,0xF8,0x56,0x8E,0xAD,0xC5,0xC5,0x34,0x23, - 0x91,0xC0,0xC5,0x6B,0x0E,0x2D,0x54,0xED,0x9A,0x74,0x7B,0x6E,0x80,0x9D,0x27,0xED, - 0xA8,0x56,0xE6,0x3C,0x37,0xCA,0x1A,0x33,0xAA,0xDC,0xC8,0x77,0x98,0x42,0x23,0x0A, - 0x7B,0x5D,0xE9,0xA3,0xB2,0x67,0x42,0xCC,0x33,0x36,0x55,0x95,0x73,0x23,0xF4,0x6C, - 0x86,0xFC,0xB3,0xA9,0x0D,0xB4,0x39,0x33,0x57,0xF2,0x80,0x16,0x10,0xF8,0xA6,0x83, - 0xB2,0x7B,0x7C,0x5A,0xB3,0x61,0xAE,0x6C,0xB7,0xD5,0x95,0x2C,0x83,0x5A,0x0E,0xC3, - 0x8D,0x71,0x56,0x22,0x26,0x7A,0xD5,0xB6,0x23,0xE5,0xAE,0x25,0x22,0xF8,0xB9,0xD6, - 0xEB,0xA5,0xC3,0x50,0xA9,0x54,0x8F,0xE7,0x9A,0x6F,0x7D,0x7A,0xD5,0xD7,0x9F,0x68, - 0xBD,0xDB,0xEC,0x59,0x7B,0xAE,0xD6,0xD3,0x95,0xCE,0xB5,0xDF,0xE9,0x74,0x05,0x4E, - 0xA7,0x7B,0xD4,0x2C,0xB3,0x11,0xF9,0xA9,0xD3,0x31,0xF0,0x1A,0x11,0x41,0x71,0xA1, - 0x34,0x1E,0xBC,0x09,0xB6,0x08,0x47,0x2C,0x81,0x8A,0xF0,0x0F,0x38,0x84,0x8C,0x54, - 0x62,0x8C,0x7E,0x2A,0x72,0x6A,0x7E,0xDF,0xAF,0xE1,0xEE,0xCB,0x0D,0x58,0x7C,0xEC, - 0x39,0x8E,0x55,0xFF,0x82,0x5C,0xC8,0x65,0x10,0x08,0x69,0x10,0xB9,0xDD,0xB1,0x87, - 0x40,0x6F,0x81,0xD2,0x90,0x2F,0x2F,0x76,0xC2,0x33,0x6C,0x41,0x57,0x70,0x7A,0x4D, - 0x1C,0x58,0x03,0xF6,0x96,0xDE,0xF7,0x0F,0x18,0x87,0xAB,0x1C,0x3A,0xC9,0xA5,0xB7, - 0xC8,0x2C,0x2C,0x92,0xDF,0x83,0xB6,0xA1,0x57,0x4F,0x09,0xB4,0x95,0x9E,0xC6,0x92, - 0x28,0x41,0x2D,0xD5,0x65,0x32,0x92,0xC9,0x81,0x4C,0x76,0x31,0xD9,0x95,0x48,0xA5, - 0x5D,0x84,0x28,0x61,0x12,0xD8,0xEC,0x2B,0x84,0x22,0xC4,0x0F,0x23,0x02,0x99,0x7B, - 0x26,0x13,0x02,0x29,0xED,0xB0,0x0B,0x4C,0x2E,0x12,0xAC,0x52,0x84,0x28,0x3B,0x4C, - 0xEE,0x31,0xB9,0x67,0x9B,0x32,0xD9,0x96,0xC9,0x3E,0xB2,0xDB,0x97,0xEC,0x70,0x4A, - 0x94,0xB9,0x0D,0x99,0x10,0xE8,0xAA,0xC2,0x6E,0x31,0xB9,0x25,0xC0,0x26,0xF2,0xE1, - 0x49,0x2A,0x28,0xA5,0xB7,0xBA,0xC9,0x45,0x2B,0xBD,0x88,0x11,0x63,0x8D,0x73,0x1B, - 0xF1,0xED,0x25,0xAF,0x73,0x65,0xB1,0x61,0x92,0xB6,0x29,0xA5,0x17,0xBA,0xC9,0xC5, - 0x11,0x27,0x14,0x96,0x4B,0xAF,0x79,0x33,0x60,0x57,0x35,0x29,0x30,0xA2,0x14,0xDF, - 0xDC,0x26,0xE9,0x41,0x9A,0x51,0x23,0x71,0xB5,0x44,0xDC,0x18,0x3A,0x94,0x14,0x97, - 0xC9,0x16,0x26,0xF8,0xCA,0x16,0x5F,0xAC,0xE8,0xCD,0xE2,0xE1,0x9B,0xDB,0xEB,0x58, - 0xBE,0xB9,0x25,0xAA,0x5D,0x2E,0xA9,0xFD,0x44,0xF4,0x7D,0x92,0xFE,0xC4,0x04,0xDF, - 0xEA,0xCA,0x74,0x3F,0x49,0x1B,0x94,0xE2,0xDB,0x5A,0xD4,0xE3,0x5C,0xAA,0x91,0xB9, - 0xB8,0xE4,0x61,0x43,0x24,0x17,0x27,0x49,0xB1,0x81,0x90,0xE9,0x99,0xC4,0x94,0xE1, - 0xEB,0x5C,0x6A,0x3F,0x7C,0xA9,0x9B,0xD8,0x2A,0x49,0x2B,0xF4,0x80,0xDE,0xF0,0x26, - 0x17,0x55,0x91,0x5C,0xAC,0x53,0x0E,0xBD,0xB5,0x45,0xE1,0xBD,0xC4,0x08,0x30,0xF6, - 0xAE,0xD5,0x61,0x9A,0x10,0x6D,0x89,0xE4,0xE2,0x30,0x65,0xB4,0x97,0x32,0x3A,0xA5, - 0x1C,0x7A,0xC3,0x4B,0xED,0x8D,0xEF,0x79,0x65,0xB7,0xDE,0x48,0xD2,0x9F,0x5C,0xA6, - 0xA3,0xE4,0x1E,0xD6,0x36,0x20,0xAC,0xF4,0xF1,0x0A,0x31,0x4A,0x03,0x1C,0x17,0x6C, - 0x57,0xFC,0xFA,0x65,0x1D,0x08,0xE7,0xB2,0xCB,0x69,0x71,0xD2,0x74,0x3B,0x0D,0x8E, - 0x18,0x8D,0xD2,0xE2,0x95,0xCD,0xBA,0x9C,0x82,0x6C,0x7A,0x25,0x83,0x79,0x25,0x99, - 0xB7,0xAF,0xE6,0x2D,0xC9,0x3C,0x8A,0x8B,0xC6,0x99,0xCB,0x32,0xB3,0xA6,0x65,0xBE, - 0x97,0x99,0x14,0x6E,0x64,0x72,0x56,0x65,0xEE,0xB9,0x4A,0xF9,0xBB,0xCC,0xEB,0x69, - 0xC5,0x3F,0xC8,0x4C,0xC8,0x4B,0xDE,0x49,0xB3,0x1F,0x02,0xDC,0xDB,0xC7,0x2B,0xDB, - 0xBE,0x82,0x7A,0x48,0x98,0x46,0x57,0x0E,0xF3,0xB7,0x78,0x18,0xC1,0xCA,0x46,0xF3, - 0x40,0x19,0xCD,0x08,0x61,0x1B,0xF0,0x5F,0xBF,0xDE,0x2E,0x7C,0x58,0x58,0x38,0x44, - 0x38,0xD4,0x6B,0xAD,0x5C,0x06,0x73,0xAD,0x5C,0x08,0x92,0xA7,0x2C,0x9B,0x60,0x25, - 0x89,0xDA,0x06,0xF2,0x9D,0x37,0xE8,0x33,0x48,0x5D,0xC5,0xC2,0x02,0x7A,0x8E,0x41, - 0xE6,0x39,0x14,0xC5,0xD7,0x51,0xF1,0xE7,0x56,0x2E,0x83,0xE9,0x2B,0x17,0xD2,0x40, - 0x59,0xFF,0x68,0x8C,0xF7,0x90,0xF1,0xDE,0x6B,0x5A,0xE4,0xD9,0x95,0x04,0xE9,0xA3, - 0x2C,0x63,0x12,0x8B,0x7C,0x87,0x9E,0x26,0x8D,0x62,0xA7,0x56,0x41,0x56,0x68,0x95, - 0x7D,0x36,0xC8,0x1C,0xA0,0xA2,0xFC,0x09,0x2A,0x7F,0x32,0x8F,0x55,0x26,0x17,0x1B, - 0xA4,0x85,0xB2,0x64,0x49,0xB4,0x88,0xB9,0xDE,0x30,0xA9,0x73,0x44,0x35,0xA0,0xD3, - 0x6B,0x79,0x76,0x72,0x24,0xEC,0x0E,0x61,0x48,0x6F,0xBE,0x00,0x8D,0xEC,0x88,0x5F, - 0x68,0xAC,0xDD,0x25,0xA8,0x86,0x81,0x8A,0x6A,0x60,0x4D,0x09,0x77,0x44,0x12,0xC4, - 0x15,0xBA,0x09,0x2C,0xE9,0x2E,0x11,0x5F,0xCB,0x89,0x1F,0x3B,0x4B,0x94,0x5F,0x4B, - 0xE4,0x2B,0x1E,0x54,0x0A,0x54,0x3C,0xE6,0x60,0xC2,0x63,0x6A,0x16,0xE3,0x82,0x00, - 0x81,0xE2,0x35,0x1B,0x7C,0xCE,0xF8,0x96,0x0C,0xAE,0xC6,0xD8,0x59,0xBB,0x9F,0xE7, - 0xDA,0x3D,0xE3,0x88,0xD5,0x3E,0x67,0x83,0xBC,0xC3,0x56,0x6A,0x24,0xA8,0x46,0xCF, - 0x86,0xB5,0x83,0xA7,0xC2,0x5A,0x52,0x4D,0x0B,0x92,0x35,0x11,0x11,0x89,0x88,0x5E, - 0xD5,0x68,0x73,0x07,0x96,0xA4,0x9B,0x16,0xDF,0x66,0x76,0xEB,0xF1,0x9C,0xE1,0xF2, - 0xD3,0x0A,0x9A,0xAF,0x97,0xF4,0x9A,0xC9,0x29,0x47,0xA9,0x62,0x9B,0xAA,0xD8,0x9E, - 0xCB,0x8A,0xB3,0xC3,0x4B,0x39,0xA6,0xD4,0x70,0x95,0xD0,0x76,0x03,0xFB,0x01,0x05, - 0x59,0xDF,0xF2,0x2F,0x71,0x06,0xC9,0xBC,0x44,0x80,0xBB,0x01,0x02,0xEE,0xA6,0x13, - 0x10,0xE4,0x0E,0xB9,0x64,0x80,0x5B,0x77,0x3C,0xB9,0xC9,0x48,0x04,0x67,0x84,0x12, - 0x3B,0x17,0x30,0xBB,0x69,0x90,0xBC,0x4D,0x15,0x92,0x47,0x58,0x29,0x98,0x89,0x08, - 0x88,0x37,0x46,0x37,0x99,0xB9,0x83,0x7D,0x63,0x30,0x81,0xBE,0xDF,0x1A,0x69,0xAF, - 0xFD,0x85,0x7C,0xED,0x9F,0xED,0x99,0x22,0x52,0xF2,0x89,0x8D,0xC6,0xDC,0x8B,0x8B, - 0x8E,0xE7,0xAD,0x34,0x70,0x9F,0x31,0x27,0x63,0x72,0x6B,0x11,0x27,0x40,0x60,0x8D, - 0x7B,0x03,0x08,0xC2,0x34,0x73,0x90,0x5F,0x2E,0x21,0xBF,0x04,0x66,0x4D,0x81,0xBB, - 0x3A,0x98,0xF5,0x6E,0x12,0x94,0xE8,0x48,0xB8,0x26,0x4B,0x0E,0x85,0xCA,0x43,0xA8, - 0x22,0x6C,0xF1,0x8E,0xBC,0x6C,0xBA,0xF1,0x86,0x2B,0xBC,0x26,0xA2,0x42,0xBB,0x10, - 0x67,0x23,0x14,0xBA,0x82,0xF5,0x07,0x82,0x8D,0x88,0x79,0xF4,0xEC,0x6D,0xC4,0xE4, - 0xD1,0xD4,0xA5,0x25,0x46,0x5B,0x8B,0xF1,0xDA,0x25,0x63,0xEC,0xEA,0xB1,0x2C,0x40, - 0xE2,0xE5,0xEF,0x57,0x88,0xE9,0xB1,0xCB,0xF2,0x64,0xA5,0xF5,0xA6,0x73,0xF9,0xFE, - 0xAA,0x88,0xB6,0x29,0xD6,0xB9,0x0B,0xE6,0xE6,0x71,0x31,0xE6,0xA0,0x80,0x2F,0x46, - 0xBF,0x7E,0x75,0x2E,0x57,0xAE,0x8A,0x6E,0x0D,0x96,0x79,0xD0,0x85,0x08,0xB5,0x3A, - 0xD1,0x26,0x12,0x89,0x11,0x17,0xE5,0x01,0x6A,0x04,0xAA,0x47,0x12,0xB4,0xB5,0xB0, - 0xE0,0xD1,0xAD,0x70,0x2E,0x84,0xA5,0x9F,0xA0,0xEA,0xCA,0x46,0xEA,0xCE,0xC0,0x5F, - 0xD4,0x25,0x44,0x23,0xE5,0xD9,0xB6,0xEA,0x78,0x36,0x4C,0xD9,0xE6,0x8D,0x9C,0x3E, - 0xF0,0x90,0x22,0x90,0xDB,0xA4,0x8C,0x71,0x1B,0xA5,0x2B,0x96,0x64,0xDC,0x87,0x7D, - 0x1E,0xD5,0xDB,0xE1,0x00,0xD6,0x42,0x88,0xE6,0x97,0xAD,0x86,0xC7,0x1E,0xB0,0xD5, - 0xBA,0xD0,0x6A,0xF5,0xAC,0x2E,0x01,0x9E,0xC6,0x2C,0xBA,0x1D,0xAF,0x19,0x46,0x8E, - 0xEC,0xCD,0x71,0x31,0x08,0x7B,0xD0,0x1F,0x70,0xAA,0xC8,0x3D,0x64,0xC4,0x80,0x96, - 0x24,0xA4,0x97,0x64,0x2B,0x73,0x05,0x5E,0x85,0x09,0x4E,0x56,0x4A,0x73,0x80,0x36, - 0xB2,0x62,0xD6,0xC1,0x47,0xF3,0x36,0xC2,0x67,0xEF,0xB3,0xE5,0x15,0xBB,0x16,0x15, - 0xAA,0x2F,0xAC,0x80,0x83,0xF8,0x66,0x79,0x0C,0x26,0xAC,0x35,0xCB,0x73,0xA8,0x7D, - 0x98,0x34,0xBA,0xCC,0x66,0xA8,0x86,0x80,0x49,0x0E,0x7B,0xD3,0x41,0x58,0x43,0x5C, - 0xAC,0xBD,0x06,0xEA,0x59,0x01,0x1E,0xC7,0xFC,0x81,0x44,0xF0,0x7F,0xC2,0xF9,0x7B, - 0x54,0x0B,0xDC,0xC1,0x87,0x47,0xE4,0x1E,0xA0,0x95,0x42,0xF2,0x0E,0x89,0x41,0x88, - 0xAB,0xAC,0x07,0x39,0x06,0x78,0x9E,0x1E,0xD1,0xAD,0x3B,0x8B,0xE5,0xFA,0xA7,0xE5, - 0x72,0x1D,0xCF,0xE6,0x26,0x20,0xE0,0x91,0x93,0x94,0x8B,0x2F,0xEB,0x57,0xE5,0x1F, - 0xD6,0xC8,0x7E,0xFC,0x91,0x94,0x27,0xBF,0x01,0xC5,0xBB,0xA0,0x09,0x39,0x0E,0x04, - 0x7C,0xD3,0x40,0xC9,0xAC,0x8F,0xA0,0xFD,0xB8,0x48,0x9D,0x5F,0xDA,0x37,0x96,0x09, - 0x19,0x17,0x4B,0xAB,0x63,0xE9,0x68,0x36,0x30,0x5C,0x39,0xB5,0x49,0xAE,0xC0,0xF4, - 0x41,0x3D,0x33,0x05,0x55,0xE3,0xEA,0x35,0x6E,0x46,0x7E,0xA7,0x55,0x58,0x34,0x02, - 0x9C,0x08,0x9A,0x85,0x55,0x98,0x24,0x56,0x8D,0x98,0xB7,0xEB,0xB8,0x96,0xCD,0x4E, - 0x3B,0xFE,0xED,0x61,0xE5,0x5F,0x74,0x9F,0x4A,0xA8,0xE6,0x7F,0xB9,0x0F,0x0D,0x3B, - 0x23,0xCF,0x8B,0xFE,0x35,0x2E,0xF4,0x60,0x76,0xB3,0xBB,0xCA,0x09,0xD7,0xEC,0x7B, - 0x04,0xE8,0x38,0xF3,0xE0,0xF9,0x2F,0xD1,0x15,0xC3,0x3E,0xB1,0x76,0x79,0xA4,0xC2, - 0xE8,0xEF,0x66,0xC0,0xE8,0x5F,0x15,0x31,0x7F,0x19,0x5E,0x4D,0xC3,0xCC,0xFF,0xFE, - 0x37,0xC0,0xCC,0x9F,0x8D,0x8F,0x86,0xA3,0x7D,0x41,0xEF,0x72,0x0D,0xFC,0x0B,0x6B, - 0x47,0xAC,0xE9,0xFC,0x11,0x59,0x2B,0xE0,0x73,0x9B,0x30,0x5C,0x29,0xB3,0x93,0x64, - 0xBE,0x87,0xC1,0x0D,0x99,0x34,0xB7,0x10,0xC2,0x3E,0x09,0xC4,0xEB,0xCE,0xA5,0x59, - 0xDD,0x38,0xC2,0xB3,0x26,0xE3,0x13,0x53,0xD0,0xEA,0xA7,0x1D,0xD7,0xF3,0x78,0x57, - 0x10,0x06,0xFF,0x08,0x3F,0xBC,0x80,0xA7,0xD9,0xCE,0x78,0x84,0xE1,0x31,0x3C,0xDF, - 0xAD,0xE1,0xAE,0x79,0xDD,0xE7,0x91,0x71,0xC2,0x6F,0xD3,0x52,0x15,0x1E,0x81,0x13, - 0x37,0x7A,0x1D,0xB7,0xEF,0xFA,0x6D,0x2C,0x0B,0x99,0xFB,0x6E,0x1B,0x71,0xC5,0x10, - 0xF5,0x6D,0x40,0xE8,0x87,0xC5,0xDC,0x36,0xBA,0xFD,0x83,0x50,0x18,0xEB,0x3D,0x01, - 0x4E,0xDA,0xBF,0xA7,0xD2,0x98,0xB1,0xD5,0x09,0x7B,0x8D,0xA6,0xB1,0xCF,0x83,0x30, - 0x1A,0x41,0x5E,0x75,0xAF,0x92,0x09,0xB8,0x2A,0xD3,0x67,0x24,0x8C,0xEC,0x68,0x10, - 0xB4,0xB7,0x88,0x46,0x49,0x33,0x35,0x1D,0xFA,0x5E,0x88,0x51,0xE7,0x30,0xD7,0x5A, - 0xE6,0x3B,0x70,0xD5,0xE2,0x5D,0x70,0x27,0x44,0x7A,0xD4,0x1C,0xFA,0x00,0x88,0xAB, - 0xAD,0x99,0x5F,0xB7,0xAA,0x26,0x6B,0x72,0x17,0x62,0x46,0xE8,0x6C,0xA9,0x12,0xF2, - 0x28,0x53,0x38,0xC3,0xD9,0x7F,0x36,0xBF,0x70,0x70,0xD6,0x18,0xD3,0x89,0xE2,0x0D, - 0x5D,0x5E,0xCB,0xF9,0xDF,0xFC,0xE2,0xC6,0xBE,0x67,0xD2,0xF1,0x19,0xDA,0xD7,0xAB, - 0xE2,0x86,0xEC,0x9A,0xE9,0x76,0xBB,0xED,0xE4,0x2B,0x1E,0xEF,0x6E,0x63,0x30,0x1B, - 0x9E,0x1C,0x8F,0xAC,0x12,0xF3,0x12,0x45,0x9B,0x45,0xCC,0x46,0x97,0x4E,0xE1,0x81, - 0xD5,0x94,0x1D,0x2E,0x6C,0xF3,0x22,0x85,0x8F,0x96,0xB9,0x85,0xC9,0x1A,0xE8,0x6A, - 0x3F,0x26,0x43,0xC8,0x7B,0xCC,0xD9,0xE0,0x60,0x4E,0x1B,0xA4,0x91,0xDB,0xDF,0xC4, - 0x0A,0x8B,0x30,0x69,0xFC,0x75,0x2B,0xC4,0x8F,0xB2,0xBA,0xBB,0x0E,0x0C,0xB6,0x5D, - 0xDC,0x45,0x85,0xB8,0xCA,0x1A,0x7F,0x64,0xE4,0x61,0x84,0x9E,0xEC,0x3D,0x5F,0xB6, - 0xCB,0x75,0xB9,0x78,0xC4,0xE5,0x5D,0x34,0x26,0xDC,0x85,0xD1,0xD1,0x4D,0x0E,0xD1, - 0x59,0x6F,0xC2,0x99,0xD3,0xBB,0x18,0x07,0x58,0x60,0xE5,0x47,0x39,0x78,0x5A,0xCE, - 0x03,0xEE,0x17,0x50,0x9C,0x07,0x2B,0x64,0x4C,0xB3,0x35,0x12,0xDE,0xA9,0xB1,0x3E, - 0xDC,0x3F,0xE6,0x3B,0xED,0x10,0x6B,0x98,0xB5,0xD8,0xF6,0x0B,0x5A,0xEC,0xE8,0xB0, - 0xF2,0xEF,0x69,0x32,0x76,0x13,0xD6,0x46,0x6B,0xDF,0x2A,0x87,0x07,0xC5,0x98,0x3E, - 0xB3,0xE2,0xD7,0x47,0x50,0x0D,0x30,0xC9,0x36,0x64,0xE0,0xE8,0x72,0x9C,0xA5,0xC5, - 0xC5,0xCF,0x56,0x20,0x8A,0xC9,0x29,0x4B,0x0B,0x4F,0x76,0x90,0x02,0x30,0x5F,0xCB, - 0x9A,0x18,0xBD,0x2E,0xEE,0x36,0xD7,0x8A,0x26,0x5B,0x86,0xB6,0x61,0x6A,0x2F,0xD8, - 0x4E,0x7B,0x81,0xBD,0x06,0x3C,0x92,0x86,0xC7,0x53,0x33,0x46,0x07,0xDC,0x82,0x3B, - 0xF6,0x13,0x49,0xD9,0xA4,0xAF,0x6C,0xCF,0xEC,0x2B,0xDB,0xEA,0xB7,0x2B,0x8E,0x2D, - 0xE9,0x2A,0xF1,0xD0,0x63,0x39,0x35,0xFB,0xBB,0x3F,0x6F,0xAC,0xCF,0x6B,0xF0,0xDF, - 0x12,0xFC,0xBB,0x5C,0x2C,0xAC,0x5C,0xC1,0x9F,0x8F,0x57,0xBF,0xDE,0x43,0xF2,0xFE, - 0xCA,0xFE,0x05,0x49,0xE9,0xEA,0x33,0xE5,0xC9,0xBF,0xF6,0x9F,0x45,0xFB,0x61,0xF9, - 0x31,0x2D,0x34,0x57,0x11,0xFB,0xCF,0x9B,0x77,0xE5,0x37,0xEF,0x2E,0x0B,0x6E,0xE1, - 0x7E,0xBD,0x70,0x01,0x79,0xFF,0x67,0xED,0x7F,0x5D,0xFF,0xF9,0x8F,0xE2,0x7F,0xFD, - 0xCF,0xCF,0x0B,0xEF,0xDE,0x39,0x57,0x0F,0x4B,0x6C,0xE9,0xFD,0xEA,0xE3,0x9F,0xC5, - 0x4B,0xA0,0xC0,0xBB,0x95,0x47,0xD0,0xEB,0xCF,0x27,0x4A,0xFC,0x6F,0xFB,0xF3,0x3B, - 0x1F,0xE6,0xEF,0x18,0x66,0x19,0xB9,0xEB,0xB5,0xB0,0xF0,0x66,0x5B,0xCB,0xF8,0x6C, - 0xE1,0x91,0x4B,0xB0,0xEF,0x32,0x6B,0x51,0x0E,0x6E,0xAE,0xB4,0xC0,0xB4,0x6A,0x0E, - 0xF4,0x5B,0xD9,0xA3,0xF7,0x9C,0x03,0x7A,0x75,0x04,0xA5,0x69,0xBB,0xA8,0xBC,0xF8, - 0xC9,0xD9,0x5B,0x58,0xD8,0xFB,0xE4,0xD0,0x2B,0xF4,0xCF,0xB2,0x10,0x3E,0x92,0x85, - 0xD6,0x2C,0x35,0x07,0x19,0xD3,0x09,0x4F,0xC9,0xAC,0x91,0x31,0x53,0x76,0x1F,0xCA, - 0xA5,0x4F,0x4E,0x63,0x61,0xA1,0x01,0x2C,0xA1,0x97,0xC8,0xE2,0xD9,0x63,0x9D,0xAD, - 0x9A,0x9F,0x31,0x67,0xB0,0x30,0x1F,0xE2,0xB4,0x3A,0x6E,0xD4,0x00,0x1A,0x35,0x4E, - 0xB7,0x2C,0x1D,0x0A,0x60,0x92,0x1D,0x1D,0xD9,0xB1,0x14,0xD2,0x43,0x22,0xA5,0x6A, - 0x13,0x1D,0x2D,0xC2,0x26,0xA8,0xCE,0x88,0x8A,0x6A,0xF5,0x9D,0x5B,0x19,0xA1,0x3D, - 0x41,0xB9,0x43,0x94,0xE9,0x9E,0xD6,0x53,0x3C,0x2F,0x70,0xB0,0xE3,0x97,0x5B,0x8A, - 0xD0,0x8D,0xAF,0xF9,0x5D,0x0F,0xBC,0x4F,0xAC,0x6C,0x6D,0xD9,0x14,0x4D,0xA4,0xF7, - 0x4E,0x33,0x61,0xA0,0x70,0xF0,0x38,0x09,0x1B,0x6F,0x60,0x3D,0x25,0x6D,0x3D,0x21, - 0x55,0xB6,0xB2,0x9E,0x36,0xCC,0x29,0x15,0x50,0x2C,0xFE,0x4C,0xC5,0xEF,0x89,0x3E, - 0xBF,0x2D,0xF2,0x5C,0xA9,0x4D,0x34,0x42,0x45,0x5C,0x36,0x3F,0x9B,0xBD,0x4E,0xDC, - 0xF4,0xEB,0x78,0xEE,0x1B,0x4F,0x24,0x99,0x57,0xD2,0x07,0x77,0xA9,0xE2,0x4B,0x0C, - 0x56,0x0E,0xA9,0x8B,0xBF,0x94,0x9F,0x8A,0x69,0xD1,0xEA,0x5B,0x1E,0xFF,0x9B,0x7E, - 0x92,0x2F,0xFD,0xCA,0xCD,0xCE,0xCB,0xBE,0x72,0x73,0x16,0xB1,0x83,0x29,0x5F,0xB9, - 0x39,0x7D,0xF9,0x57,0x6E,0x6E,0xA7,0x9D,0x60,0x74,0xFE,0xB3,0xDA,0xE4,0xC6,0xDE, - 0xD6,0xA6,0xE1,0xC7,0xF4,0xBE,0x2F,0xC2,0x48,0x17,0x83,0xA9,0xBE,0xEF,0xCA,0xBD, - 0x94,0x81,0x2F,0x9A,0x86,0x00,0xAA,0x1A,0x04,0x3B,0x06,0x04,0xC4,0x18,0xE5,0xC0, - 0x4D,0xEC,0x37,0x3A,0x10,0x2C,0xE1,0x79,0xF6,0x30,0x6A,0x49,0xB2,0x9D,0x30,0xE0, - 0x7F,0x46,0xFF,0xF1,0x3F,0xE8,0x7F,0xEB,0xD0,0xB0,0xE0,0x74,0x3B,0xE2,0xB7,0xD8, - 0xA0,0x73,0xEF,0x74,0x40,0x19,0x02,0xAF,0x91,0x91,0x38,0xFF,0xE2,0x7F,0xCA,0xAF, - 0xEC,0xE0,0x99,0xC9,0x79,0x0E,0x27,0x76,0xFC,0xBB,0x1E,0x57,0x0F,0x04,0xE6,0x3E, - 0xC8,0x33,0x36,0xF7,0x1C,0xCC,0x0E,0xD4,0x53,0x8E,0x9B,0xAC,0x39,0xE3,0xE0,0xE4, - 0x3C,0x67,0xFA,0xD0,0x4A,0x47,0xAE,0x72,0x98,0x0F,0x0F,0x5B,0x4E,0x9E,0x9C,0xCC, - 0x1D,0x83,0x7C,0xB5,0x73,0x7B,0x78,0x9C,0x52,0x1E,0x8D,0x4C,0xD7,0x2F,0x82,0xD6, - 0x2F,0xAD,0x68,0xF2,0x63,0x43,0x72,0x61,0x5A,0xD7,0xD6,0xAC,0xC9,0x27,0xC0,0x92, - 0x1D,0xA3,0xDC,0xA7,0x79,0x26,0x8F,0xDA,0xC1,0xC2,0x45,0xE8,0xA7,0xB0,0x42,0x79, - 0xC8,0x4B,0x59,0x1A,0xC6,0xDA,0xBA,0x0D,0xCF,0xC9,0x22,0x85,0xF2,0x9D,0x1E,0xED, - 0xB4,0x9D,0x72,0xE2,0xE7,0x40,0x81,0xE6,0xED,0xAA,0x9F,0xE9,0x49,0x4F,0x13,0x05, - 0xF2,0x30,0x91,0x5A,0xE6,0x4C,0x11,0xBC,0x43,0x67,0x84,0xC6,0x1D,0x65,0x02,0xFD, - 0xBF,0x4C,0x58,0xC6,0xE5,0x25,0x05,0xC9,0x68,0xB4,0xC3,0x4E,0x43,0x9E,0xCB,0xCB, - 0x7D,0xB9,0xE7,0x54,0x95,0x72,0xAA,0x68,0x06,0xC3,0x59,0x9E,0x48,0x53,0x35,0xDB, - 0xA7,0xAC,0x3D,0xB5,0x4C,0x43,0xD1,0xAC,0x42,0x9A,0x61,0xAF,0x7B,0x89,0x52,0x1B, - 0x52,0xA9,0x93,0x4C,0x29,0xAE,0x9D,0x90,0xE2,0x2A,0x96,0x91,0x5E,0x08,0x13,0xFD, - 0x91,0x76,0x02,0x52,0xE6,0x0D,0xB5,0x82,0x6D,0x75,0x25,0xDF,0x57,0x8E,0xFA,0xD3, - 0x67,0xE6,0xC0,0x19,0xB4,0x7D,0xE8,0x75,0x72,0x7C,0xAF,0xAE,0xE8,0xC0,0xCF,0xE4, - 0x3C,0x9E,0xAB,0x6C,0xDE,0x7D,0x91,0x59,0x55,0x25,0xAB,0xAA,0xAA,0x36,0xE2,0xDA, - 0xF6,0x40,0x55,0x6E,0x0F,0x54,0xF3,0x27,0xAB,0xB6,0xB2,0x93,0x55,0x5B,0xB3,0x76, - 0xF6,0xB8,0x3C,0x5A,0x15,0xE4,0xBA,0x21,0xBD,0x5F,0x0E,0x9D,0xBE,0x85,0x69,0x0C, - 0x0C,0xF0,0xED,0xE4,0xD3,0x68,0xDC,0x58,0xDB,0xB8,0x8D,0x96,0x5B,0x5E,0x40,0x1F, - 0xD8,0xC9,0xF5,0x5E,0x7A,0x6D,0xAD,0x6C,0x1D,0x76,0x41,0xC8,0x16,0xF6,0xE6,0xD9, - 0x4A,0xEE,0xA2,0x92,0x75,0xBB,0x8C,0x47,0xA9,0x76,0xF3,0x9F,0x02,0xF2,0xF1,0xE1, - 0xC8,0x2E,0x1F,0x20,0x6A,0xFF,0xE5,0x68,0xE8,0x03,0x0D,0xBC,0x5F,0x6F,0xF2,0x80, - 0x4E,0x58,0x68,0x23,0x47,0x7E,0xFF,0x08,0xDF,0xA1,0x0F,0x13,0x21,0x2F,0x3C,0x1C, - 0x15,0x24,0xC5,0x0F,0x9F,0xD6,0x31,0xA9,0xD1,0x39,0xD6,0xE8,0xD0,0x2E,0xE3,0x97, - 0x8F,0xCE,0xF9,0x2C,0xAC,0xF1,0x3D,0x4F,0xBF,0x81,0xF4,0x96,0x5B,0xF7,0x9C,0xFD, - 0xB5,0x61,0x7A,0xAF,0xB5,0xC5,0xB9,0x76,0xE7,0xEB,0x1F,0xB5,0xC2,0x73,0x02,0x88, - 0x27,0x58,0x9F,0xD6,0x0A,0x3F,0xE5,0xF7,0x90,0x4E,0xE1,0xD9,0xCF,0x17,0xB7,0xC1, - 0xA9,0xD6,0x73,0x6A,0xF1,0xEA,0x52,0xEB,0x06,0x1B,0x41,0x73,0x12,0x78,0x58,0xB7, - 0x6F,0xFD,0x44,0x37,0x41,0x32,0x5E,0xD8,0x04,0xFB,0xB2,0xF0,0xDE,0x93,0x0A,0xA6, - 0xE3,0x06,0x4D,0xBB,0x67,0x97,0x1B,0xD8,0x27,0x67,0x36,0xC0,0x0F,0xA4,0x6A,0xD8, - 0xE5,0x0A,0x36,0xC0,0x0F,0x20,0x7B,0xA9,0x37,0xFA,0xA1,0xD9,0x77,0x4B,0xBB,0xFB, - 0xA9,0x61,0xBC,0x53,0xD3,0x9F,0x4C,0x33,0xFD,0x3E,0xEA,0x71,0x62,0x97,0x39,0xFA, - 0x80,0xFD,0x97,0x8F,0x00,0xAE,0xBF,0x71,0x59,0xBC,0x0B,0x97,0xE4,0x01,0x8B,0x9C, - 0x37,0xA4,0xC3,0xC9,0x7D,0x0B,0xB1,0x22,0x47,0x89,0xA4,0x17,0xB6,0x41,0x9C,0x96, - 0x1F,0x3E,0xA3,0x6A,0x52,0xB3,0x06,0x7D,0x52,0x8C,0xE3,0x12,0x03,0x3F,0xEF,0x36, - 0xB3,0x25,0xCE,0xB3,0x73,0x56,0x6F,0x09,0x31,0x31,0xAF,0xEB,0x3D,0x57,0xAD,0xDC, - 0xD0,0x1A,0x60,0x5F,0xBB,0xDB,0xD5,0x3F,0xEE,0xC5,0xA5,0xCF,0x72,0xF9,0x74,0xA7, - 0xC5,0x6E,0xF0,0xAD,0x9B,0x5A,0xE2,0x4B,0x52,0xA2,0x3A,0xB5,0xC4,0xAC,0x96,0xA9, - 0xCE,0xC2,0xDC,0xE7,0x26,0x03,0xE8,0x3C,0x4F,0x61,0xEE,0x15,0x6C,0x9A,0xDB,0xE6, - 0x11,0xAC,0xAB,0xF1,0x6F,0x01,0xBF,0xDA,0x6A,0x04,0x23,0xC4,0xA5,0x8E,0x3F,0x64, - 0x82,0xB0,0xB2,0x83,0x69,0xF8,0xB6,0x83,0x31,0x60,0x38,0x01,0xCD,0x0E,0x27,0x91, - 0xB8,0xD9,0x27,0xB6,0x8E,0x5F,0x0D,0x59,0xB8,0x74,0x55,0x04,0x89,0xCF,0x01,0x0A, - 0x87,0x29,0xF6,0x38,0x53,0x4E,0x05,0xBC,0x0F,0x53,0x18,0xE4,0x32,0x42,0xE0,0x86, - 0x39,0xA0,0xE1,0xD9,0x58,0xED,0x8B,0x67,0x31,0x83,0xA9,0x3A,0x39,0xA8,0xE0,0xE1, - 0x34,0x93,0x1D,0xE6,0x4D,0x76,0x3A,0x8D,0xEA,0x34,0xA5,0xC2,0x35,0x25,0xE5,0x34, - 0x27,0x2D,0xDB,0x1C,0x97,0xDC,0x7E,0x4D,0xCB,0xA2,0xC8,0xE7,0x4C,0xDB,0x4C,0x4C, - 0xAB,0xAA,0xA7,0xDA,0xB6,0xA9,0xD9,0xB6,0x99,0xC7,0xE0,0x8E,0x15,0xBF,0x9D,0xC7, - 0xB6,0x52,0xA1,0x9C,0x71,0xF7,0xA6,0x99,0x6D,0x6F,0xC2,0x6C,0x7C,0x2A,0x2E,0x93, - 0x67,0x70,0x73,0x70,0x07,0x94,0x75,0x34,0x69,0xDF,0xA3,0x71,0x51,0xFC,0x02,0xF0, - 0xEB,0x19,0x18,0x65,0x3E,0x67,0xE0,0xA3,0xF4,0xAC,0x80,0xA2,0x9F,0x7A,0xB2,0xE1, - 0x48,0x3B,0xAD,0x71,0x94,0x33,0x70,0x3B,0xAB,0xF5,0x1D,0x9F,0xC7,0xC4,0x52,0xA5, - 0x9C,0x89,0x87,0x53,0x6D,0x37,0x9C,0xB4,0x5D,0xFD,0x9F,0x82,0xB9,0x12,0x0B,0xF7, - 0x59,0x5C,0x6B,0xF5,0x75,0x70,0xAD,0x55,0xB6,0x45,0xEF,0xAD,0xAA,0xF8,0x75,0xDB, - 0x31,0xAE,0xF5,0x46,0x7E,0xFE,0x2B,0x43,0x65,0x86,0x32,0x89,0x25,0x45,0x57,0x26, - 0x04,0x63,0xAD,0x4B,0x18,0xEB,0x48,0xC2,0x58,0x47,0x12,0xBF,0x3A,0xC2,0x2F,0xED, - 0x7D,0x05,0x97,0x22,0x11,0xA1,0x14,0x73,0x25,0x10,0xCD,0x11,0x62,0x5A,0x31,0xA1, - 0x0F,0xEE,0x1D,0x6A,0x1F,0xDC,0xAB,0x27,0x20,0xD6,0x7A,0xFA,0xC1,0xBD,0x53,0x99, - 0x6C,0xCA,0xA4,0x89,0x3C,0x9B,0x92,0x67,0x8A,0x30,0x5D,0x47,0x4C,0x2B,0x26,0x7B, - 0x98,0xEC,0x49,0x2C,0x6B,0x43,0x62,0x59,0xEB,0x09,0x88,0xB5,0x8E,0x70,0x2C,0xD7, - 0x3A,0x49,0xB0,0xAC,0x27,0x09,0x84,0xF5,0x84,0x1D,0x21,0xC3,0xA3,0x04,0x42,0x79, - 0x27,0xC4,0x35,0x36,0xA1,0x7C,0x14,0x27,0x24,0x12,0xBF,0x4A,0x2B,0x6A,0x0D,0xC0, - 0x2A,0xF1,0xAB,0x98,0xBA,0x49,0xFA,0x25,0x49,0xAB,0x04,0x25,0xF9,0x40,0x30,0xC9, - 0x90,0xF6,0xE9,0x0E,0x10,0xAD,0x52,0xE3,0x04,0x93,0x1C,0x2A,0xA0,0xC4,0x04,0xD2, - 0xD8,0x54,0xB2,0x12,0x3C,0xE3,0x91,0x92,0xF5,0xFB,0x74,0xE4,0xE2,0x0A,0x21,0x17, - 0x0F,0x78,0x8A,0x5C,0xA4,0x86,0xB4,0xDE,0x84,0x20,0x6B,0x6B,0x61,0x65,0x61,0xE1, - 0x18,0x11,0x38,0xAF,0x35,0xC5,0x54,0xE7,0x99,0x62,0x08,0xAE,0xA3,0x4C,0x6F,0x30, - 0xE1,0x22,0xB0,0x68,0x38,0x86,0xA0,0x55,0xB5,0xCE,0x80,0x60,0xA2,0x21,0xAB,0xE6, - 0x3A,0x88,0x52,0x83,0x0B,0xAC,0xC1,0x73,0xB3,0x4D,0x75,0xEA,0x6C,0x43,0xAA,0x28, - 0x53,0x96,0xC6,0x77,0x1B,0xF9,0x6E,0xBF,0xA6,0x65,0x9E,0x9D,0x22,0x48,0x1F,0x65, - 0x7E,0x4A,0x4C,0xD3,0xD4,0x4D,0x93,0x02,0x03,0x9B,0xAC,0x9A,0x75,0x71,0x45,0xF1, - 0x5B,0x54,0xFC,0x76,0x1E,0x83,0x4C,0x4E,0x11,0xA4,0x81,0x32,0xD1,0x68,0x8C,0x5B, - 0xF4,0x5D,0xBF,0x57,0xF3,0xEA,0xD5,0xB9,0xBC,0x3A,0x69,0xA4,0xCE,0x29,0x89,0x51, - 0x8E,0x74,0xA3,0x8C,0xC7,0x25,0x5A,0xE6,0x88,0x55,0x73,0x63,0x55,0xA9,0xC5,0x1D, - 0xD5,0xE2,0x59,0x07,0x5F,0x9D,0xEE,0xE0,0x49,0x1D,0x6D,0xA2,0xA0,0xD7,0xD4,0x55, - 0xFB,0x21,0x94,0x60,0x33,0x7D,0xE5,0x5F,0x85,0x30,0x35,0xFB,0xDA,0x64,0xC8,0xF1, - 0xF4,0x3E,0x90,0x7D,0x9F,0xF3,0x73,0x93,0xDF,0x95,0xCF,0x4D,0x86,0x63,0xCC,0x5A, - 0x15,0x5F,0x78,0x4F,0x93,0x33,0x37,0xEF,0xD2,0x98,0x37,0x4A,0x09,0x53,0xB0,0x1B, - 0x30,0xAE,0x66,0x60,0x37,0x91,0x38,0x28,0xE9,0xDE,0xE1,0xC1,0x77,0xF8,0x4F,0x7E, - 0x5C,0x92,0x1C,0x0A,0x01,0xDF,0x6A,0x3A,0x66,0xE1,0xF8,0xFF,0x91,0x6F,0x18,0xDE, - 0xE7,0x7E,0xE3,0xE0,0x2F,0x40,0xD7,0x8E,0x13,0xE8,0xDA,0x6D,0x0A,0x5D,0x3B,0x4D, - 0xA1,0x6B,0xA5,0x3C,0x74,0x2D,0xDD,0x1B,0x8D,0xE8,0x24,0x0D,0x42,0xBD,0x26,0x3F, - 0x41,0x2E,0x14,0x0C,0x9A,0xBA,0x5F,0x15,0xCA,0xFD,0xAA,0x70,0xC6,0x76,0x4F,0x2C, - 0xB7,0xAD,0xC4,0x18,0x6D,0x16,0xE3,0x16,0xE8,0x13,0x0B,0x9C,0x39,0x51,0x65,0x21, - 0x4C,0xF2,0x18,0x10,0x84,0x0C,0x7F,0x01,0x60,0xAC,0x1D,0xA2,0xCA,0x84,0x8E,0x2A, - 0x13,0x1A,0xAA,0x4C,0x7B,0x38,0xC6,0x8A,0x48,0x6E,0x4E,0x88,0xA8,0x31,0xC1,0x3A, - 0x4C,0x62,0x3F,0xC2,0xB4,0x6D,0x45,0x0A,0xD1,0x1A,0xB7,0x69,0x98,0xA1,0xB3,0x62, - 0x67,0xB1,0x1C,0x7F,0x5A,0x2E,0xC7,0x0A,0x3A,0xCB,0x73,0x44,0x8A,0xCE,0x8A,0x11, - 0x9D,0xE5,0xD9,0x8F,0x69,0x7B,0xD3,0x37,0x4A,0x65,0x1F,0x17,0x0A,0x18,0x4B,0xA8, - 0x60,0x2C,0x21,0xD1,0x62,0x4A,0x7F,0x38,0xF9,0xFF,0x10,0x2C,0x7C,0x09,0x38,0x09, - 0xC1,0x32,0xBE,0xE0,0x0E,0x7D,0xF4,0x6F,0x84,0xB5,0x0E,0xFB,0xB7,0x35,0x6F,0xF8, - 0xAF,0x81,0x64,0x6D,0xBF,0x1C,0x92,0xB5,0xC8,0xD2,0x2F,0x9D,0xE6,0xA1,0x59,0x87, - 0x63,0x68,0xD6,0x89,0x0A,0xCD,0xBA,0xFF,0x37,0x41,0xB3,0x4A,0x1F,0x3F,0xFE,0xFB, - 0x71,0x59,0x5F,0x67,0xE2,0xB2,0x02,0x84,0x60,0x7D,0x84,0xA1,0x19,0x28,0xB8,0x2C, - 0xCA,0x2C,0x81,0x89,0x31,0x37,0x05,0x66,0xE5,0xD1,0x22,0x5D,0x0D,0xDE,0x13,0x4C, - 0x03,0x8B,0xDC,0x50,0x27,0xFE,0xFB,0x02,0x7C,0x82,0x1C,0xC0,0x27,0x98,0x09,0xDA, - 0x08,0xC0,0x9C,0x12,0xB3,0xFA,0xD0,0xC3,0x8D,0x43,0x98,0x8F,0x5C,0x02,0xD1,0x30, - 0x0C,0xF6,0xA6,0x81,0x69,0x46,0xFF,0x84,0x79,0xFE,0x5E,0x68,0x9A,0x18,0xD1,0x34, - 0xC1,0x6C,0x34,0x4D,0xE2,0xAA,0xE6,0xC1,0xD2,0x04,0x7F,0x09,0x4B,0xF3,0x74,0xB3, - 0x68,0x78,0x33,0x6C,0xA3,0x00,0xB1,0x34,0x71,0xB6,0xAC,0x49,0x7E,0x03,0xE8,0xD3, - 0xF2,0xAF,0x5F,0x93,0xB9,0x7F,0x2C,0x2F,0x41,0x6D,0x24,0x26,0x65,0x89,0xD5,0x71, - 0x31,0x83,0x8B,0xC6,0x3A,0x41,0x52,0xC6,0x19,0x25,0x09,0xF1,0xC6,0xB6,0xD6,0xB8, - 0x29,0x19,0x79,0x46,0x84,0xBF,0xD0,0x38,0xC9,0x9C,0x84,0xD5,0x38,0x88,0x4E,0x8B, - 0xAF,0xAE,0x68,0xC5,0xF1,0x91,0x5E,0x5C,0xE6,0x50,0xF1,0x60,0x61,0x01,0x71,0x64, - 0xD9,0xE7,0xBC,0x25,0xEA,0x23,0xAD,0xDA,0x53,0x40,0x8C,0x16,0x91,0x3E,0x07,0x0E, - 0x19,0x4A,0x34,0x45,0xAA,0xE3,0x53,0xA4,0xC7,0xD8,0x3C,0x15,0x71,0x19,0xCC,0x82, - 0x50,0x78,0x4E,0xC0,0x08,0x5B,0x98,0x83,0x50,0xD4,0x59,0x37,0xFB,0x89,0x9D,0x14, - 0x2B,0xF1,0xED,0x65,0x58,0x89,0xAF,0x11,0xDB,0x9E,0x82,0x95,0xB8,0x98,0x04,0x3E, - 0xA4,0xB3,0x8A,0xFC,0x7D,0xA7,0x1D,0x19,0x34,0xCB,0x9F,0xE8,0xF9,0xA6,0x44,0xD0, - 0x5C,0x7B,0xEB,0x1D,0xE9,0x6F,0xBD,0x45,0xFA,0x51,0xD2,0xDC,0xCF,0xD3,0x4C,0xFC, - 0x4C,0x54,0x0F,0x7F,0x25,0x6A,0x6A,0xDC,0x98,0xFC,0x20,0x54,0x90,0xE3,0xCD,0xE8, - 0x38,0x02,0x9D,0x4F,0x98,0xF8,0xED,0x96,0xEE,0x93,0x3F,0x1A,0xA5,0x45,0x96,0xC1, - 0x10,0xA3,0xA1,0x51,0xA1,0xA4,0x6C,0x47,0xA9,0xBF,0xF5,0x40,0x87,0xB8,0x81,0x48, - 0x7E,0xDD,0x61,0x54,0xF8,0x60,0x4E,0xFB,0x91,0xA9,0x1B,0xF9,0x5D,0xF5,0xEC,0xE7, - 0x1B,0xD2,0x5F,0x80,0x48,0xF3,0x62,0x25,0x24,0x82,0xFA,0xC6,0x34,0x61,0xE9,0xF5, - 0xF1,0x10,0xF7,0x1F,0xE6,0xB3,0xE2,0x74,0x0E,0xF3,0x70,0x0E,0x9B,0x28,0xF1,0x63, - 0x6A,0x09,0x9A,0xD6,0xB2,0x5F,0xA2,0xC2,0x25,0x54,0x94,0x7C,0xA6,0x5F,0xFB,0x3C, - 0xBA,0x3A,0xC5,0x3D,0xA0,0x8B,0x84,0xD9,0xD5,0x19,0x03,0x24,0xD2,0xDF,0xA8,0x0A, - 0xA1,0x47,0x52,0xF8,0x03,0x8B,0x6D,0x03,0x22,0x56,0xEC,0xCE,0x90,0x4B,0x3E,0x15, - 0x54,0xBB,0x14,0x69,0x4F,0xAC,0xB5,0x5F,0xD4,0x13,0xBF,0x47,0xEC,0x42,0xF6,0x44, - 0x12,0xBD,0x88,0xFD,0x91,0x0F,0xE9,0x17,0xE9,0x6A,0xF4,0x5B,0x89,0x5E,0x18,0x74, - 0xC3,0x0E,0x55,0x8B,0xEE,0x61,0xB4,0xC2,0x02,0x20,0x76,0xDB,0x8F,0xE5,0xFF,0xF8, - 0x6F,0xE2,0x93,0xA7,0x27,0x31,0x72,0x00,0x00, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x5D,0xFD,0x5F,0xDB,0x38, + 0x93,0xFF,0xF9,0xEE,0xAF,0x70,0x7D,0x1C,0x6B,0xDF,0xA3,0xA4,0x04,0x28,0xDB,0x26, + 0xF5,0x72,0xBC,0x16,0x5A,0xA0,0x14,0x28,0xED,0x96,0xE5,0xC3,0x39,0x8E,0x12,0x9B, + 0xC4,0x2F,0xD8,0x0A,0x09,0xA4,0xDC,0xDF,0x7E,0x33,0x23,0x39,0x96,0xF3,0x42,0x61, + 0x9F,0xDE,0xF3,0xEC,0xE7,0x3E,0xB7,0x6D,0x23,0x5B,0x1E,0xCD,0x8C,0x46,0xD2,0x68, + 0x24,0x7D,0xED,0x0D,0xC2,0x24,0x4E,0xC5,0x28,0x33,0xDC,0xCC,0xF8,0xC2,0x19,0xC7, + 0x54,0x08,0x16,0x61,0x7A,0xC7,0x7C,0x4C,0x5A,0x82,0x35,0x31,0xDD,0xE5,0x2C,0xC5, + 0x34,0x14,0x0F,0xED,0x34,0x0E,0xCD,0x6A,0xF5,0xA5,0xE7,0xF7,0xA3,0x6E,0xF6,0xB2, + 0x2F,0x82,0x5E,0x56,0xBD,0xCE,0xCC,0x46,0x20,0xD9,0xDD,0x20,0xDD,0x96,0x60,0x7B, + 0x98,0x1E,0x08,0x59,0x6E,0x5F,0xB0,0x0E,0xA6,0x57,0xAC,0x8F,0xC9,0xA1,0x60,0x2D, + 0x76,0x8B,0x57,0x6D,0xC1,0x02,0x4C,0x7F,0x67,0xBB,0x98,0x9C,0x0A,0x16,0x63,0xBA, + 0xAD,0xE4,0xC6,0x8C,0xB4,0xBB,0x95,0xCA,0x25,0x82,0xB5,0x31,0xED,0x33,0x0F,0x93, + 0x8E,0xD4,0xB1,0xC7,0x36,0x31,0xF9,0xC8,0xDE,0x91,0x04,0x55,0x81,0x54,0xB0,0x2E, + 0xA6,0x3B,0x9C,0xF5,0xA8,0x42,0x9C,0x0D,0x30,0x75,0xD9,0x16,0xD5,0x93,0xB3,0x3B, + 0x4C,0x9B,0x9C,0xED,0x53,0x2A,0xD8,0x36,0xA6,0x1B,0x82,0x85,0x24,0x51,0xB0,0x21, + 0xC9,0x98,0xAA,0x70,0xE6,0xF9,0xBC,0xD5,0xEF,0xF1,0x54,0xAF,0xF4,0x29,0xD2,0x7E, + 0xE5,0xAA,0x2E,0x5C,0x2A,0x1F,0x71,0xD6,0xC2,0x34,0xE0,0x92,0x67,0xCC,0x99,0x8B, + 0xE9,0x7B,0x26,0x30,0xF9,0x20,0x2B,0xD5,0xE7,0xD2,0x34,0x37,0x42,0xD6,0x6A,0x53, + 0x99,0xE0,0x5C,0xB0,0x04,0xD3,0x77,0x7C,0x52,0x83,0x20,0x6A,0xF1,0xA1,0x2E,0x9D, + 0xCC,0xD0,0x15,0xD2,0xB6,0x83,0x29,0x8D,0xDD,0x81,0x1B,0x88,0xAB,0x66,0x2F,0xF6, + 0xBA,0x7A,0x29,0x92,0x7A,0xA4,0x4A,0x0D,0x95,0xF4,0xF7,0x5C,0x5A,0xFC,0xDB,0x6C, + 0xA9,0xCB,0x3A,0x03,0x32,0xDC,0xF1,0x94,0xB8,0xFD,0x28,0xE9,0x8B,0x63,0x37,0xCB, + 0x06,0x71,0xDA,0x9A,0x32,0xD2,0xD9,0x14,0xFD,0x29,0x17,0x22,0x88,0x3A,0xD9,0x96, + 0x5B,0x26,0xA7,0xDA,0x2F,0x4C,0xDB,0x5F,0xC4,0x29,0x2F,0xF5,0x38,0x6A,0xEF,0x0F, + 0x53,0x0A,0x47,0xB1,0x08,0xDA,0x81,0xE7,0x8A,0x20,0x8E,0xB2,0x29,0x3D,0x76,0xA6, + 0xF5,0x48,0x82,0x28,0x2A,0x37,0x2B,0x75,0x95,0xBD,0x29,0xCA,0xAD,0xB8,0xD7,0x73, + 0x93,0x2C,0x68,0xF6,0xB8,0x4E,0x7D,0x46,0xBD,0x71,0x8A,0x5A,0xC4,0x49,0xDC,0x8B, + 0x3B,0x77,0x95,0x4C,0xB8,0x69,0x65,0x65,0xCA,0x82,0xD7,0x62,0xDA,0xD4,0xED,0xB8, + 0xE2,0x05,0xA9,0xA7,0xF8,0x7B,0x50,0x01,0x61,0x7C,0x16,0x8E,0x9B,0xDD,0x45,0x9E, + 0x65,0x3B,0xBF,0x59,0x23,0x11,0x88,0x1E,0xAF,0x9B,0x87,0x9F,0xCE,0xCE,0xCC,0x07, + 0x9B,0xED,0xA7,0xCE,0xC7,0xE6,0x35,0xF7,0x44,0xB5,0x9D,0x72,0x7E,0xCF,0x2D,0x75, + 0xD7,0xE2,0xED,0x20,0xE2,0xC7,0x69,0x9C,0xF0,0x54,0xDC,0x59,0xA3,0xAB,0xAB,0x24, + 0x8D,0x45,0x7C,0x75,0x55,0x8F,0xFA,0xBD,0x1E,0xEB,0xC5,0x6E,0xAB,0xFE,0x59,0x3C, + 0xB0,0xD3,0xBB,0xB0,0x19,0xF7,0xAA,0x22,0x3E,0x15,0x29,0x34,0xC6,0x99,0xDB,0x61, + 0xA3,0x5B,0xB7,0xD7,0x47,0x11,0x31,0x76,0x77,0x10,0x62,0x37,0xDA,0xFD,0xC8,0x43, + 0x73,0x1A,0xF7,0xC2,0xCA,0xEC,0x51,0x8F,0x0B,0x03,0x1C,0x03,0x13,0xCE,0x2F,0x6F, + 0x13,0x57,0xF8,0x46,0x3B,0xE8,0xF5,0x1C,0x33,0x8A,0x23,0x6E,0x1A,0x99,0x48,0xE3, + 0x2E,0x77,0x4C,0xAF,0x9F,0xA6,0x3C,0x12,0x60,0xB3,0x38,0xCD,0x73,0x2B,0x3D,0x50, + 0xCA,0x73,0x13,0xC7,0x4C,0xE3,0x7E,0xD4,0x2A,0x65,0x5F,0xC7,0x41,0x34,0x99,0x3F, + 0x08,0x5A,0xC2,0x77,0xCC,0x65,0xD3,0x68,0x39,0xE6,0xE1,0x9A,0xB1,0xE6,0x2E,0x1B, + 0xCB,0xC6,0x12,0xFC,0xA9,0x19,0xCB,0x95,0x65,0xFF,0xB5,0x7E,0x6F,0x2C,0xDF,0xAE, + 0x16,0xF7,0x15,0xB8,0xDA,0x7B,0xAD,0xDF,0x57,0x96,0xEF,0xC3,0xB5,0xCA,0xEA,0xED, + 0x72,0x58,0x59,0x31,0x5E,0xDF,0xBE,0x81,0x9B,0x37,0xB7,0x6F,0x0E,0x5F,0x19,0xB5, + 0xB5,0xDE,0x6A,0x65,0x39,0x5C,0x33,0x96,0x7A,0xAB,0xC6,0xF2,0xE1,0x1B,0xA3,0xF6, + 0xDA,0x5F,0x3B,0xAC,0x2D,0x01,0x51,0x75,0xA9,0x76,0x58,0x5B,0x95,0x17,0xE6,0xCB, + 0xDF,0x7E,0x61,0x81,0x73,0x31,0xBA,0x0D,0xF8,0x60,0x33,0x1E,0xD6,0x4D,0x64,0xBC, + 0x0C,0x45,0x56,0xCD,0x07,0x36,0x22,0x5D,0xEB,0x66,0xAD,0xBA,0xCC,0x43,0xBC,0xF7, + 0x79,0xD0,0xF1,0x45,0x91,0x91,0x5D,0x2C,0x5D,0x5E,0xB2,0xC8,0x19,0x3D,0x34,0xDA, + 0x71,0x6A,0xA1,0x0D,0x3D,0x67,0xA9,0xE1,0xBD,0x0D,0xAA,0x3D,0x1E,0x75,0x84,0xDF, + 0xF0,0xFE,0xE6,0xD4,0xEC,0xC8,0x11,0xC2,0x8A,0x58,0x70,0xE1,0x5D,0xDA,0x8D,0x94, + 0x8B,0x7E,0x1A,0x8D,0xA0,0xE9,0x47,0xDC,0xD9,0x12,0x96,0x99,0xDD,0x76,0x4C,0x9B, + 0xA5,0x4E,0xC4,0x07,0xE0,0x63,0xAD,0x17,0x4B,0x36,0x13,0x7E,0x90,0x55,0x7D,0xCB, + 0x7E,0x60,0x3D,0xCB,0x43,0xBA,0x7D,0x61,0x79,0x8C,0x28,0xD9,0x58,0xD5,0x17,0x4B, + 0x4C,0xEA,0x07,0x17,0x4A,0xB1,0x17,0x4B,0x0F,0x76,0xE3,0xD6,0x4D,0x8D,0xC4,0xB9, + 0xB2,0x38,0xC8,0x72,0x0E,0x85,0x95,0x30,0x64,0x99,0x54,0x41,0xC3,0x1D,0xD7,0xF3, + 0xAD,0x96,0xCE,0x1F,0x7E,0x46,0x69,0xD5,0x75,0xA8,0x07,0xB5,0x85,0xC5,0x59,0x04, + 0xB9,0x21,0x48,0x4B,0xEC,0xD1,0xEF,0x90,0x70,0xB8,0x60,0x69,0x35,0xB4,0x04,0xE3, + 0xF0,0x24,0x81,0xAC,0x8B,0xE4,0xD2,0x1E,0x49,0x5A,0xE7,0x48,0x58,0x01,0xFB,0xB3, + 0xE6,0x4B,0x16,0x6B,0x8B,0x8B,0x1E,0xDA,0xD0,0x06,0xD6,0x41,0xFD,0x8E,0xC5,0xF0, + 0xAF,0x85,0x55,0xF6,0x16,0x17,0x5B,0x50,0x83,0x87,0x87,0x87,0x71,0x3F,0xFD,0x04, + 0xFD,0x14,0xD4,0x49,0x41,0x61,0x32,0xA1,0x91,0x55,0x17,0x16,0x32,0x2E,0x1C,0xE1, + 0xFC,0x36,0x4A,0xAD,0x25,0xC6,0xD1,0xCC,0xF0,0x77,0xF4,0x00,0xAA,0xB2,0x16,0x5C, + 0xDB,0xC8,0x97,0x3B,0x70,0x09,0x19,0x17,0xFC,0xF2,0xC1,0xEB,0x81,0x2F,0x33,0x3E, + 0x42,0x57,0x1F,0x0A,0x1E,0xB5,0xD0,0xCF,0x8F,0x68,0x44,0xA6,0x7D,0x0F,0x7C,0x11, + 0x90,0x8D,0xB2,0x3E,0x0C,0x2F,0xCB,0x66,0xBF,0x73,0x0B,0xCD,0x04,0x12,0x3F,0x09, + 0x76,0x2F,0x18,0xCC,0xAA,0xA3,0x07,0x5B,0xD3,0xE7,0x84,0xC6,0x4D,0xDE,0x9C,0xA0, + 0x78,0x0F,0xFE,0x85,0xF0,0x2F,0x81,0x7F,0xE3,0xCA,0xD4,0xEF,0xB4,0x22,0xBB,0xE5, + 0xA1,0xC6,0x02,0x16,0x31,0xB0,0x34,0x6B,0xB3,0x2D,0xC7,0x3C,0x15,0xAE,0xE8,0x67, + 0x26,0x3B,0x66,0x5D,0xB6,0xC7,0x86,0xEC,0x33,0xF3,0xD9,0x09,0xDB,0x64,0xE7,0xEC, + 0x9B,0x63,0x6E,0xF5,0x02,0x18,0x78,0xC6,0xFE,0xB6,0xC9,0x52,0xCE,0xB6,0x59,0xE8, + 0x64,0x17,0xB5,0xCB,0xAA,0x47,0xD9,0x57,0x41,0xEB,0x6F,0xA6,0xC9,0x8E,0xD8,0x21, + 0x3B,0x68,0x04,0xD4,0x91,0x7A,0x60,0x06,0xF0,0x0E,0x49,0x56,0x1F,0x51,0x9D,0xEB, + 0xA6,0x5F,0x71,0xFB,0x22,0x36,0x06,0x95,0x36,0x34,0xB5,0x91,0x79,0x6E,0x8F,0x57, + 0x7E,0x7D,0x65,0x98,0x7F,0xB3,0x24,0xA7,0x18,0x1C,0xA6,0x27,0x78,0xCB,0x71,0x9C, + 0x17,0x4B,0xEB,0xA6,0x00,0x0B,0x55,0xB2,0xBE,0xE7,0xF1,0x2C,0xAB,0xC0,0x43,0x30, + 0x97,0x30,0xEB,0x32,0x9B,0xA7,0x69,0x9C,0x8E,0x33,0xC1,0x26,0x9A,0x37,0x69,0x71, + 0xAB,0xC9,0xF6,0xC7,0x6D,0xD4,0x2C,0xF1,0x5E,0xFF,0x26,0xEA,0x94,0xC3,0x23,0x17, + 0x1C,0x6E,0x6B,0xFD,0x9D,0xA8,0xBF,0x17,0x0F,0x68,0x90,0x7B,0x07,0x4A,0x66,0x36, + 0xDB,0x70,0xEE,0x21,0x51,0xA3,0xC4,0xF0,0xA9,0x32,0x1F,0xA7,0x2A,0x43,0x6A,0x24, + 0x69,0x10,0xBA,0xE9,0x5D,0xAE,0x88,0x31,0xBB,0x86,0x26,0xA8,0xC7,0xD4,0x70,0x8B, + 0x2D,0xB3,0x15,0xDC,0xD2,0x68,0x1B,0x5F,0x8A,0xE2,0x32,0xE2,0x56,0x00,0x7D,0x0A, + 0xDC,0xAE,0xDB,0x09,0x81,0xA3,0xCD,0x3C,0xE7,0x16,0xBA,0x42,0x52,0x90,0xB4,0xB5, + 0xCB,0x2A,0x6A,0xB1,0x25,0x85,0x3B,0x5B,0xEC,0x98,0x68,0xBB,0x05,0xC1,0x46,0x15, + 0xA4,0xB2,0x3D,0xCA,0x1E,0x16,0xD9,0x9F,0x4B,0x02,0xFD,0xB2,0xC0,0x13,0xA2,0xDE, + 0x2C,0x48,0xCE,0xB5,0xCB,0x92,0xC0,0x6F,0xD0,0x11,0x88,0x78,0xBB,0xA0,0x38,0x72, + 0x76,0xB8,0x15,0x96,0xFD,0x47,0x13,0x2B,0xDE,0x87,0x46,0x31,0xB7,0xF7,0xCF,0xC1, + 0x7D,0x48,0x0B,0x8E,0x3D,0xC5,0x7E,0xEE,0x29,0xFA,0xD6,0xFE,0x1C,0x92,0x2F,0x40, + 0x92,0xDA,0x0D,0x01,0x24,0x5F,0xE6,0x90,0xDC,0x72,0xA0,0x11,0x76,0x23,0x98,0xB0, + 0x20,0xBB,0x85,0x81,0x77,0xCB,0x75,0xDF,0xE3,0x39,0x1D,0xEB,0x0B,0xDA,0x54,0xE3, + 0xA6,0xB8,0x9C,0x02,0x93,0x04,0xFA,0x12,0x3C,0x3A,0x9D,0x14,0xC4,0xCC,0x96,0x2B, + 0xDC,0x4A,0x76,0xCB,0x7B,0x82,0x57,0x7C,0x93,0x64,0xB3,0x8F,0x56,0xDB,0x7E,0xE1, + 0x38,0xA6,0xCA,0xBE,0x0B,0xEE,0xB3,0xEE,0x9D,0xB9,0xB8,0x68,0x4D,0x34,0x8E,0x0D, + 0xAD,0xD3,0xB1,0x4E,0xB1,0x79,0x66,0xF0,0x56,0xE2,0xBF,0x82,0xF8,0xAE,0xDD,0xD8, + 0xA8,0xF6,0xAC,0xAF,0x36,0xFB,0xAA,0x2B,0x7D,0xAA,0xDF,0x7C,0xD1,0x6F,0xF6,0x80, + 0xEF,0x3E,0xB6,0xEF,0x7C,0xFB,0xB5,0xD1,0x38,0x43,0xBB,0xF1,0x19,0x68,0xDA,0x7C, + 0x0E,0x11,0x47,0xA2,0xCF,0x64,0xC1,0x52,0x97,0x60,0x1C,0x2C,0xC8,0x4B,0x16,0x3C, + 0x01,0x91,0x6D,0x8E,0xBD,0x44,0xE7,0xA7,0xF8,0x9C,0x01,0x9B,0x4D,0xBB,0x71,0x0E, + 0xCF,0xCE,0x9E,0x6A,0xC3,0x73,0xDD,0x86,0x6B,0xDE,0xA0,0xF9,0x6B,0x88,0x36,0x9C, + 0xE8,0x6F,0x36,0x76,0xB8,0x8E,0x75,0x86,0x3D,0x6E,0x06,0x73,0x25,0xBF,0x83,0xF5, + 0xD8,0xB6,0x1B,0x47,0xCE,0x1D,0xB7,0x3A,0x10,0x2D,0xDB,0xAC,0x53,0xD2,0xFE,0x4C, + 0xBF,0x69,0x97,0x1E,0xED,0xCF,0x9F,0xA3,0x7A,0x30,0xFF,0x98,0x24,0xCA,0x84,0x59, + 0xC7,0x0C,0xDD,0xAC,0x6B,0xE0,0x4F,0xC5,0xE7,0x43,0xB7,0x03,0x7E,0x67,0x3C,0xF8, + 0x61,0x8E,0x9F,0xE7,0xD3,0x9A,0x9D,0xDC,0xA3,0x81,0x27,0x83,0x1B,0xF2,0x63,0xA6, + 0x6D,0xC3,0x28,0x69,0x8F,0xB9,0x9B,0x6D,0xA8,0x70,0x05,0x02,0xA8,0x96,0x89,0x0F, + 0xBA,0xC5,0x03,0xE9,0x12,0x43,0x23,0x4E,0x5C,0x2F,0x10,0x77,0xE8,0x5B,0x90,0x22, + 0x2D,0x28,0x28,0xD2,0xE1,0x2D,0x28,0x3D,0x34,0x80,0x7F,0xD3,0xCD,0x38,0xE8,0xB3, + 0x64,0xB4,0x7B,0x7C,0x68,0x04,0x82,0x87,0xE0,0x4A,0xC1,0x96,0x3C,0x35,0x32,0xE0, + 0xC1,0x2B,0x43,0x88,0x5A,0x92,0x61,0x65,0xD5,0x48,0xEE,0x2A,0xCB,0xC4,0xEC,0x73, + 0xC1,0x6C,0xBA,0x8E,0xC0,0x52,0xF9,0x3C,0xBD,0xBA,0x54,0xEE,0x7C,0x9E,0xFE,0xDB, + 0x3F,0xD4,0x7F,0xF8,0x33,0xF5,0xE7,0x9A,0x1E,0x58,0x48,0x39,0x63,0xBC,0x06,0x3F, + 0xDD,0x53,0xE5,0xEE,0x2A,0x35,0x93,0xC2,0x0C,0x9A,0x2A,0x7E,0x87,0x04,0x96,0x6E, + 0x36,0x73,0x2D,0x9C,0xDE,0x21,0x81,0xB9,0xD1,0x66,0x31,0xF8,0x12,0x98,0x23,0x31, + 0x32,0x91,0x79,0x9E,0x4C,0x12,0x4C,0x60,0xCE,0x94,0xC9,0xB1,0x4C,0xBA,0xE8,0x6E, + 0x43,0x68,0xAD,0x9C,0x9C,0xB3,0x3D,0x99,0x0C,0x31,0x81,0xD9,0x94,0x18,0xFA,0x30, + 0xAB,0xE6,0x14,0x43,0x76,0x22,0x93,0x4D,0x4C,0x60,0x9E,0x95,0x49,0xCA,0x65,0xBA, + 0x8D,0xC9,0x36,0x3B,0xB2,0xD9,0x01,0x74,0x1E,0x8C,0x7C,0x48,0x59,0x19,0xBF,0x7F, + 0xC1,0x90,0x6F,0x7F,0x71,0x19,0x46,0xC9,0x97,0x2A,0x55,0xD8,0x79,0x64,0x82,0x6D, + 0xFE,0x9D,0x13,0xAC,0xCD,0xC0,0xA9,0x42,0xA4,0x83,0x7E,0xD3,0x7A,0x71,0xF0,0xFD, + 0x3B,0x49,0x8E,0x60,0xD0,0x5A,0x4F,0x19,0x0B,0xCD,0xE7,0x8C,0x05,0x7B,0x71,0xB1, + 0x34,0xD6,0x6C,0x76,0x0F,0x25,0x2C,0x9A,0x9E,0x9B,0xF8,0x74,0x63,0x7D,0xA3,0x2A, + 0x6D,0x51,0xB7,0x36,0xAA,0x2D,0xAB,0x26,0xE7,0xEC,0x26,0x24,0x60,0x0D,0x39,0xE7, + 0x69,0x4D,0x61,0x17,0x2A,0x43,0xE1,0x10,0x75,0x0E,0x9D,0xE6,0x64,0xEC,0x02,0x8F, + 0x6E,0x85,0x75,0x04,0xDE,0x02,0xE2,0x40,0x9C,0xB2,0xA0,0x84,0xF5,0x7E,0x62,0x2E, + 0x01,0x11,0xEF,0x27,0x9C,0x23,0x64,0x35,0x17,0x17,0x3B,0xC2,0xC2,0x85,0xD4,0xE8, + 0x00,0x14,0x38,0x84,0x82,0x87,0xCE,0x3B,0x0E,0x2D,0xFF,0x0D,0x22,0xB6,0x56,0x3F, + 0xA5,0x45,0x63,0x7D,0x65,0x09,0x02,0x44,0x37,0x83,0xF5,0x50,0xFD,0x3D,0x7F,0xC0, + 0x90,0xD8,0x66,0x87,0xD5,0xB4,0x1F,0x41,0x05,0xEC,0x07,0xD9,0xC8,0x20,0x3C,0x46, + 0xE1,0x1F,0xA6,0x05,0x7F,0x98,0x29,0xF8,0xC9,0xD2,0x6A,0x63,0x69,0x28,0x17,0x64, + 0xD5,0x1E,0x20,0xCE,0x05,0x51,0x4D,0x19,0xE7,0xB2,0x3E,0x74,0x76,0xB4,0x5B,0xCB, + 0xA2,0x6B,0x9F,0xD8,0x1F,0xC2,0x5F,0x08,0x95,0x20,0x4F,0x8F,0x83,0xDF,0x15,0x41, + 0xA4,0x0C,0x02,0xA1,0xA5,0xC4,0x15,0xB5,0x1F,0x46,0x81,0xA9,0xBE,0xC2,0x48,0x31, + 0x20,0xE0,0x14,0x07,0x08,0xBC,0x03,0x9F,0x2C,0xE3,0x78,0x8C,0xE7,0x03,0x1C,0x7A, + 0x02,0x02,0xD1,0x80,0x02,0x7B,0xCA,0x08,0xB0,0x67,0x71,0x6C,0x25,0x88,0xA6,0xA7, + 0x98,0xCB,0x66,0x4A,0x89,0x43,0x0B,0x39,0x0A,0x54,0x3F,0x2D,0xA9,0xF7,0xBE,0x50, + 0xAF,0xBC,0xD6,0x01,0x4D,0x68,0x89,0x6B,0x6C,0x07,0x19,0x45,0x7F,0x26,0xE9,0x95, + 0xE2,0x33,0xD0,0x0B,0xDC,0xE8,0xD4,0xD3,0x90,0x3C,0x01,0x68,0x09,0x22,0xE1,0xE2, + 0x81,0x42,0x6B,0x14,0x38,0x4A,0xA7,0xD7,0x07,0xDF,0x1E,0x13,0xBC,0x95,0x77,0xFF, + 0x29,0xA1,0xA5,0x27,0xCF,0x12,0xF8,0x41,0x8F,0xE6,0xF3,0x88,0x95,0x53,0xC4,0xBA, + 0x83,0xAB,0x10,0x15,0x76,0x42,0x90,0xC7,0x4B,0x41,0x9E,0x6A,0x8D,0x60,0x22,0x9F, + 0xE4,0xA9,0x76,0x89,0xB1,0x47,0xE1,0x15,0x44,0xAA,0xE4,0x7C,0x70,0x49,0x41,0x4D, + 0x48,0xE3,0x62,0xB2,0x1C,0x51,0x51,0xEF,0x15,0xD8,0x7B,0x67,0x3D,0xAE,0xA9,0x16, + 0xEB,0x13,0xE7,0x52,0x3D,0xFC,0xF9,0xF5,0xD8,0x2B,0x22,0xEF,0x38,0xE1,0x51,0xFD, + 0x45,0x8D,0xA9,0x08,0x3C,0xF3,0xDD,0x56,0x3C,0xA8,0xF4,0x60,0x45,0x0A,0xAB,0xB0, + 0x5E,0x2C,0x80,0x44,0xEE,0x63,0x5C,0x7C,0x15,0x97,0xAC,0xC5,0xDB,0x6E,0xBF,0x27, + 0xEA,0x17,0x5F,0xC4,0xE5,0x03,0x52,0x78,0x50,0x1E,0xC2,0x77,0x31,0xAC,0x67,0x0F, + 0x18,0x91,0x83,0x8E,0x71,0x64,0x81,0x9B,0x89,0x33,0x30,0x3D,0xAC,0xA4,0x7F,0xBD, + 0xFC,0x99,0xF6,0x92,0xD9,0xD2,0x59,0xD3,0xFA,0x3C,0x58,0xAC,0x2D,0xAD,0xBE,0x7E, + 0xF5,0xFA,0x0D,0x8C,0xDA,0xA8,0xAA,0x14,0x72,0x46,0xAD,0x20,0x15,0x77,0xF5,0x80, + 0xA1,0x62,0x42,0xAA,0x85,0x8E,0x36,0x22,0x3F,0xF4,0xBF,0x64,0xEF,0x2F,0xB3,0x57, + 0x81,0x8E,0xB9,0x43,0xAB,0x22,0x83,0xF6,0x81,0x70,0x4D,0x98,0x2F,0x05,0x9D,0x5F, + 0xDE,0xC2,0xBC,0x19,0x19,0x6A,0xA2,0xE9,0xB9,0x4D,0xDE,0xAB,0xE0,0x44,0x61,0xD0, + 0x6C,0x11,0xB6,0xCC,0xDF,0x3E,0x9F,0xEC,0xBF,0x7D,0x89,0x44,0xBF,0xFD,0xA2,0x2F, + 0x1C,0xD5,0x62,0x51,0x2E,0x0D,0x9F,0xC2,0x26,0xE3,0x69,0xE4,0x86,0x7C,0xCC,0xAB, + 0xC5,0xD9,0x3D,0xDB,0x60,0xE0,0xEE,0xD9,0x97,0x27,0x94,0xCF,0xB7,0x0A,0xC7,0xE5, + 0x6F,0x39,0x3B,0x65,0x5F,0x21,0xCE,0x83,0x18,0x96,0x9D,0x41,0x28,0xF8,0x04,0x26, + 0xE3,0xB5,0xEE,0x98,0xCB,0x21,0x67,0xBB,0x2C,0xE1,0xAC,0xC7,0x99,0xCB,0xD9,0xC6, + 0x53,0x98,0x7C,0xE0,0x3C,0x31,0x36,0x7A,0xC1,0x6D,0x51,0x97,0x05,0xCE,0x32,0xCE, + 0x6E,0xD8,0x29,0x67,0x1E,0x67,0xEF,0xD8,0x0D,0x87,0x45,0x37,0x87,0x3E,0xD2,0x82, + 0x89,0x6E,0x93,0xB3,0x01,0x5B,0x60,0x5B,0x9C,0xF9,0x9C,0x75,0x21,0x6E,0xE5,0xEC, + 0x0A,0xB2,0x20,0x7E,0x80,0x48,0x82,0xE3,0x02,0x9C,0x83,0xC0,0x53,0x98,0x2F,0xA1, + 0x09,0xD7,0x4D,0x76,0xC6,0xD9,0x01,0x67,0xE7,0x60,0x5E,0xD0,0x09,0x37,0xCD,0x9A, + 0x7D,0x21,0xE2,0xB1,0x4A,0x4D,0x01,0xE1,0x9A,0x88,0xF2,0x78,0xCD,0x34,0xC4,0x1D, + 0x74,0x37,0x33,0xEB,0x37,0xC3,0x40,0x98,0xBF,0x6D,0x24,0x49,0xEF,0xCE,0xC8,0x77, + 0x4B,0xDF,0xBE,0x94,0x85,0x41,0xC7,0x7D,0x30,0x94,0x60,0x99,0x28,0x16,0xD4,0x77, + 0xC2,0xDA,0xB1,0x47,0xE0,0xE8,0x97,0x2F,0xE1,0x82,0xD6,0xCA,0x10,0x8D,0x8F,0x82, + 0x56,0xDD,0x4C,0x06,0x2D,0xF3,0x21,0x1F,0xB0,0xB8,0x17,0x55,0x4D,0x94,0xFD,0xC1, + 0x81,0xDF,0xC6,0x41,0xCB,0x58,0xC2,0xDE,0x2E,0xAA,0xB4,0xFB,0xE7,0x94,0x28,0x60, + 0x4D,0x43,0x23,0xFC,0x78,0x3C,0xC2,0x23,0xEC,0xFF,0xA9,0xA8,0x26,0xFD,0xCC,0xA7, + 0xF9,0xF4,0x5C,0xE0,0x52,0x89,0xCA,0x9A,0xEC,0x4E,0xD8,0xFA,0x32,0x1A,0x02,0xF5, + 0x70,0xC6,0x3A,0x9A,0x5A,0x02,0x6E,0x02,0xBC,0x09,0x70,0xF3,0x18,0x57,0xB9,0xB4, + 0x4C,0xF5,0x30,0x0B,0x5B,0x02,0x72,0xBC,0xD2,0xCA,0x02,0x62,0x39,0xA2,0xD8,0x2A, + 0x98,0x4D,0xAD,0xA5,0xF7,0x74,0xEE,0x7B,0x55,0xDA,0xDD,0xDD,0x3B,0x3B,0x3C,0x70, + 0x20,0xB2,0x23,0x5A,0x5F,0x97,0xB8,0x49,0x59,0xE7,0x7A,0x99,0x6F,0x9A,0xF8,0x54, + 0x4D,0x46,0x7D,0x70,0x0E,0x4D,0x6E,0xB8,0x06,0xD4,0x11,0x8C,0x05,0x63,0x08,0x1E, + 0x86,0x54,0xF6,0xA8,0x10,0x7D,0xA8,0xB3,0x39,0xD4,0x44,0x1F,0xC0,0xE8,0x20,0xE2, + 0x7B,0x5D,0xF6,0x06,0x65,0x35,0x8B,0xF2,0xFB,0x7A,0xF9,0x7D,0xAD,0xFC,0x17,0x18, + 0x1D,0x44,0x0C,0x1E,0xEF,0xB4,0xBC,0x0D,0xD0,0x96,0x0F,0xB8,0xB6,0x65,0x71,0xA6, + 0xB3,0x39,0xD3,0xD8,0xC0,0x22,0xEB,0x50,0x92,0xEF,0xEA,0x7A,0x24,0x32,0xAF,0xA7, + 0xB1,0x70,0xB9,0xCE,0xC3,0xE5,0x1A,0x93,0x0D,0x0E,0xC3,0x83,0x0A,0x64,0x25,0xA2, + 0x1B,0x9D,0xA5,0x27,0x29,0xDE,0x69,0xA6,0x7C,0x57,0x6A,0xC9,0x1B,0x0E,0xE3,0x88, + 0x68,0x06,0x3A,0x93,0x05,0xAD,0xC0,0x56,0xD9,0xF6,0x4D,0x2E,0x06,0x9C,0x47,0x46, + 0xCD,0x70,0xA3,0x96,0xB1,0x06,0x6B,0x8D,0x4C,0x8D,0x48,0x68,0x7E,0xC9,0x2A,0x2C, + 0x29,0x74,0xC5,0x75,0x8D,0x06,0x92,0x64,0xC8,0x35,0x09,0x43,0x5E,0xD2,0x69,0x0F, + 0xFC,0x8E,0xA4,0x3A,0xD0,0x4C,0x71,0xAE,0xF6,0x4E,0xB4,0xAC,0x6D,0xDD,0x1E,0xAE, + 0x28,0x6D,0xA2,0xEC,0xC8,0x4D,0x94,0x1D,0x66,0xEE,0x7E,0x3C,0x39,0x2C,0x56,0xDB, + 0xD7,0xC5,0xEE,0xC9,0xF5,0x9C,0x05,0xF1,0xA7,0x62,0xF7,0xE4,0x13,0x33,0x0F,0x36, + 0x36,0x77,0x0E,0xA6,0x89,0xAE,0xF3,0xFD,0x13,0x64,0x04,0x6B,0xA8,0xFD,0xA3,0xE3, + 0xCF,0x30,0x07,0x8C,0xD0,0x6B,0xE0,0xC2,0xBD,0x20,0x87,0xD1,0xD4,0x01,0x12,0x1C, + 0x4F,0x92,0xF4,0xF4,0x78,0xE3,0x08,0x28,0xE7,0x2C,0xED,0x3D,0x7D,0x69,0x5F,0x1B, + 0x86,0x6F,0x6E,0x82,0x7B,0x5C,0xDB,0x4F,0x8C,0x40,0x9B,0x5D,0x97,0x56,0xE2,0x6D, + 0x10,0xF2,0x09,0x47,0x24,0x29,0x3D,0x59,0x2F,0x76,0x65,0x6D,0xD9,0x3A,0xF9,0xB1, + 0x24,0xEF,0xCE,0x26,0xA7,0x1A,0x1E,0x71,0xB9,0xBB,0xB2,0x07,0x34,0x47,0x7C,0xDA, + 0x10,0x0C,0xD8,0x3D,0xB2,0x45,0xB1,0xA7,0xD7,0x63,0xE5,0x3A,0xCE,0xEE,0x53,0xAC, + 0x46,0xC9,0x13,0xE0,0xD6,0x5A,0x07,0x98,0xA3,0x33,0x90,0x42,0xE6,0x99,0x91,0x81, + 0xF7,0x84,0xDF,0x30,0x88,0x28,0x71,0x87,0x52,0xCC,0xA6,0x2A,0x7E,0xFE,0xB8,0x8E, + 0xAA,0x46,0x81,0x80,0x1A,0x9D,0xDB,0x8D,0x6F,0x40,0x1D,0x88,0x71,0x43,0x4C,0xD4, + 0x3B,0x46,0xAA,0x6F,0xB8,0xA1,0x89,0xF1,0x66,0x0C,0x74,0xB3,0xDD,0x4E,0x2C,0x74, + 0x83,0x06,0xA5,0xBB,0xA3,0x52,0xDB,0x84,0xD2,0xD8,0x47,0xBA,0xB1,0x95,0xB0,0xCF, + 0x68,0xE4,0x23,0xBB,0x71,0x08,0xCF,0x3E,0x3F,0xDF,0xC8,0x87,0xBA,0x91,0x07,0x2B, + 0xDE,0xF2,0x1B,0x17,0x8D,0x5C,0xF2,0x79,0x36,0x3A,0xBD,0x0E,0x70,0x47,0xB7,0x27, + 0xA5,0x3C,0x6E,0x65,0xE0,0xFC,0xB9,0xA4,0xFF,0x86,0xD4,0xBF,0x39,0x43,0xFF,0x7B, + 0xD4,0xBF,0x69,0x37,0xF6,0xE1,0xD9,0xFD,0xF3,0xF5,0xDF,0x2F,0x75,0xF6,0xE6,0x1B, + 0xB7,0xFB,0x7A,0x88,0x15,0x28,0x39,0x5D,0xDC,0x8F,0x04,0x0D,0xEE,0xA1,0x02,0xC1, + 0x84,0xDF,0x65,0x98,0x79,0x5F,0x1E,0x08,0x5C,0x6A,0xCB,0xF9,0x0C,0x75,0x3F,0xA1, + 0xBA,0x1C,0xC6,0xFF,0x19,0x3E,0x7C,0xBE,0xBE,0x67,0xBA,0xBE,0x37,0x37,0xAB,0x35, + 0x98,0xCF,0x41,0xDD,0xB2,0x73,0xB7,0xD1,0xBB,0x83,0x0E,0x1C,0xFD,0xBB,0x14,0xF3, + 0x43,0x83,0x7F,0x2A,0xD5,0x21,0x51,0x75,0xE8,0xCD,0xAA,0xC3,0x31,0xD6,0xA1,0x07, + 0x75,0x70,0xF1,0xE9,0xF1,0xF3,0x2B,0xE1,0xF2,0x92,0xD5,0x93,0x7B,0xD1,0x5D,0xA3, + 0xB1,0x39,0x31,0xBF,0xD8,0x38,0xC1,0x74,0x40,0x02,0x4D,0x31,0x65,0x51,0x4A,0xC2, + 0xC4,0xD0,0xF9,0x88,0xAA,0x65,0xA0,0xDA,0x0D,0x90,0x7F,0x9C,0x51,0xEF,0xD2,0xF8, + 0x9D,0xB6,0x82,0x87,0xF2,0x3E,0x72,0x9C,0xB0,0x64,0xF9,0xC7,0x5D,0xE5,0xBB,0x52, + 0x3D,0x06,0xB7,0x83,0x37,0x42,0x60,0x3D,0x26,0xA7,0x38,0xA0,0x2D,0x99,0x77,0x33, + 0xAF,0xD6,0xE0,0x49,0xB5,0xEA,0xA3,0x43,0x18,0xD8,0x8D,0x05,0xA0,0xEE,0xCF,0x75, + 0x1B,0x1E,0x52,0x2D,0xD8,0x8D,0x2D,0x72,0x1B,0x9E,0xE6,0x36,0x1E,0x9B,0x31,0xBD, + 0x92,0xDB,0xE8,0x97,0xEE,0x8E,0x4B,0x4A,0x77,0x55,0x9F,0x08,0xF9,0xA3,0xF3,0xD2, + 0x09,0x36,0x41,0x08,0x4D,0x70,0x85,0x74,0x27,0x8F,0xCF,0x4C,0x03,0xE4,0x79,0xC2, + 0x69,0x3A,0x96,0xC4,0x13,0x75,0x9B,0xD7,0x85,0x86,0xA5,0x2E,0xD4,0x5B,0xFD,0xF5, + 0xBE,0xBD,0x82,0x96,0x9F,0x9A,0xC9,0x6D,0x76,0x52,0xAA,0xC5,0xA7,0xD2,0xC6,0x32, + 0x8A,0xBF,0xA6,0x69,0x7E,0xE6,0x6C,0x0C,0xB3,0xD6,0x01,0x2F,0x4D,0x5B,0xE7,0xAA, + 0xC4,0xF6,0xCC,0x12,0xF3,0xB4,0xDD,0x2E,0x77,0xF8,0x37,0x83,0xB4,0xDF,0x49,0x50, + 0xDD,0x89,0x00,0x02,0xE6,0xD4,0xC7,0xF6,0xB3,0x03,0x66,0xA2,0x0D,0x4D,0x66,0x7A, + 0x3E,0xF7,0xBA,0xCD,0x78,0x48,0x1B,0xA8,0x41,0xB1,0x81,0x9A,0xE7,0x1B,0xF9,0xC5, + 0x78,0x35,0x81,0x84,0xC5,0x1E,0x9D,0x8C,0x8D,0x8C,0x20,0xC2,0x23,0xF7,0x0A,0x6D, + 0xBB,0x7A,0xFD,0x34,0x8B,0xD3,0x4A,0x12,0x07,0xB4,0x5B,0xAB,0x76,0x12,0x2B,0x1C, + 0x7A,0xCC,0x35,0xF4,0xA3,0xA0,0x2D,0x11,0x0C,0xC2,0xE8,0xB8,0x49,0x65,0x95,0xF8, + 0x6D,0x15,0xFC,0xFC,0xA0,0xD5,0x82,0x1E,0x96,0x85,0x75,0x02,0x9A,0xD0,0xE3,0xBD, + 0x09,0x71,0x79,0x26,0xD4,0x10,0x4B,0xC4,0x99,0xA0,0x1C,0x7F,0x5C,0x2B,0x6C,0xB9, + 0x3C,0x4B,0x95,0x3C,0x71,0x64,0xE0,0x66,0xD0,0x6F,0xA5,0x09,0xCB,0x10,0x9E,0xF2, + 0x16,0xDC,0xD2,0x4C,0x58,0x97,0x19,0x72,0x2B,0x32,0xDF,0x47,0x9D,0x78,0xB6,0x2C, + 0x37,0xF7,0x57,0x2E,0xAB,0x28,0x72,0xDD,0x2C,0x15,0xC9,0x69,0xCC,0xBA,0x29,0x77, + 0xF5,0x41,0x74,0xD0,0x9A,0x50,0x0F,0x9C,0x06,0xE4,0xAC,0x8C,0x6F,0xDD,0x21,0xDC, + 0xAE,0xA1,0x0D,0xFC,0x6A,0xCA,0x6F,0xFA,0x01,0x68,0x04,0xAB,0x7B,0x78,0xFA,0x6D, + 0xAC,0xF8,0xB6,0xBE,0xC6,0xAC,0xB8,0x3D,0xB5,0xCE,0x94,0x52,0xCB,0x0A,0x81,0x6C, + 0x69,0x3E,0xA9,0xC1,0xF9,0x2C,0xB3,0x9D,0x4F,0x99,0x4D,0x3B,0x65,0x00,0xAB,0x7B, + 0x71,0xAF,0x82,0xC1,0xAC,0xDA,0x53,0x3F,0x9C,0xC5,0xE3,0x30,0xE7,0xD1,0x87,0x25, + 0x3B,0xE5,0xDC,0x4F,0x9B,0xFE,0xBE,0x28,0x39,0xD3,0xF0,0xD2,0xC6,0x39,0x29,0x99, + 0x6A,0xCC,0x6E,0x7F,0x96,0xD4,0xFD,0x5C,0x2A,0x2E,0x3D,0x31,0xE3,0x6C,0x16,0xD5, + 0x59,0x4E,0x25,0xB7,0x78,0x03,0x49,0xBA,0x3B,0xAD,0xDF,0xEE,0xD3,0xF5,0xDB,0x55, + 0xFA,0x95,0x58,0xBA,0x7C,0x96,0x78,0xCC,0x95,0xF2,0xBB,0x9C,0x27,0x2E,0xEE,0x01, + 0x50,0xFE,0xCD,0x58,0x81,0xA8,0x1F,0x36,0x55,0x35,0x6F,0xF2,0x1E,0x51,0x1B,0xDF, + 0xCA,0x1E,0xB1,0xB4,0x94,0x67,0x28,0x09,0xA7,0xFC,0x67,0x76,0x5F,0x54,0xED,0x8A, + 0x74,0xFB,0x51,0x27,0xBE,0x51,0x35,0xD7,0x2B,0x73,0x33,0xD1,0x55,0xB3,0x39,0x55, + 0xCE,0xF8,0x84,0x85,0x2B,0x9D,0x34,0xEE,0x27,0xF4,0x6C,0x61,0xFC,0xC8,0xE7,0x4F, + 0xE9,0xDF,0xBA,0xC6,0x13,0xBD,0x7C,0x30,0x5B,0xFA,0x60,0x56,0xEB,0x5C,0xF1,0xD9, + 0x8E,0xEF,0x8A,0x3F,0xD5,0xF3,0x0D,0x35,0x4A,0xCA,0x08,0xF9,0x4F,0xF6,0x85,0xDA, + 0x91,0x5E,0x27,0x0D,0xF2,0x7E,0x68,0xE0,0x35,0x9E,0x62,0x65,0x95,0xDA,0x98,0x8D, + 0x3A,0x0F,0xC3,0xB2,0x74,0x10,0x86,0x3F,0x30,0x84,0x0B,0x52,0x39,0x86,0x0F,0x34, + 0x15,0x61,0xB9,0x19,0x40,0x13,0x1B,0x61,0x13,0xFA,0x43,0x28,0x2A,0xB2,0xA3,0x6D, + 0x6B,0x14,0x21,0x72,0x21,0xE5,0xE9,0xE0,0x6C,0x90,0xBA,0xC9,0x58,0x57,0xD4,0x1B, + 0xA5,0x21,0x5F,0x5E,0x8D,0xE2,0x73,0xEC,0x5F,0xAE,0xE0,0xB4,0xEF,0x19,0xC2,0x12, + 0xF5,0x1A,0xF7,0xAF,0x77,0x18,0x87,0x8B,0x89,0x13,0x35,0x97,0x76,0x45,0x59,0x50, + 0x25,0xB3,0x42,0xDF,0xA1,0x1D,0x21,0x85,0xC5,0xA0,0xA7,0x91,0x24,0x52,0x27,0x6D, + 0x6D,0x99,0x6C,0xC9,0xE4,0x58,0x26,0x5D,0x4C,0xBA,0xF2,0x74,0xAD,0x8B,0xC7,0x6A, + 0x98,0xF8,0x30,0xBF,0xE1,0xE9,0x1A,0x31,0xEC,0xA7,0x81,0xCC,0xDD,0x94,0x09,0x1D, + 0xAC,0x9D,0xB3,0x6F,0x98,0x7C,0x53,0xE7,0x6B,0x29,0x1E,0x0C,0x63,0x72,0x84,0xC9, + 0x11,0x3B,0x94,0x49,0x8B,0xCB,0xF4,0x9E,0xF8,0xDD,0x2B,0x7E,0x6A,0x53,0x52,0x16, + 0xD8,0x90,0x49,0x13,0x93,0xA6,0x3C,0x35,0x6C,0x12,0xCC,0x20,0x86,0x68,0x9E,0x35, + 0xB5,0xF3,0xC2,0xB6,0x2A,0xC1,0x29,0xC5,0xFD,0x47,0x95,0x1E,0xE6,0x19,0xBB,0x24, + 0x66,0x57,0x8A,0x19,0x9F,0x47,0xA9,0x63,0x46,0x55,0xBA,0x47,0x29,0xED,0x3C,0xAA, + 0x8B,0x85,0xFC,0x22,0xA3,0x0B,0xDC,0x53,0x24,0x3E,0x37,0x92,0x4F,0x31,0x4E,0xD4, + 0x53,0x2F,0xBF,0x78,0xA7,0xCA,0x6D,0xE6,0x0C,0x06,0x98,0x0E,0xD8,0x02,0x26,0xB8, + 0xF7,0xA8,0x2C,0x9C,0x5B,0x88,0x52,0xDA,0x88,0xC4,0x7D,0x8F,0x72,0xAB,0x79,0xB8, + 0x1F,0x79,0x95,0xC9,0xFD,0x48,0x49,0x36,0xC8,0xE9,0x87,0xB2,0x7E,0x10,0x11,0xC9, + 0xF4,0x40,0xA5,0xE7,0x2A,0xDD,0xC6,0x18,0xFC,0xA2,0xB6,0x76,0x89,0x27,0x4F,0xFB, + 0xD8,0x73,0x18,0x17,0xDF,0xBF,0x5B,0x99,0x70,0x2E,0x9A,0x9C,0x42,0x10,0xDF,0x8D, + 0x3A,0x1C,0xB7,0xE5,0xDF,0x5C,0xC2,0x52,0x8D,0xD3,0x4C,0x4A,0x7B,0x2E,0x58,0x70, + 0x49,0xE6,0xDD,0xEB,0x79,0x35,0x99,0xB7,0xAB,0xE7,0xAD,0xC8,0xBC,0x1B,0x3D,0x6F, + 0x55,0xE6,0xD1,0x68,0x1F,0x0B,0xA9,0xBD,0x92,0xB9,0x90,0xA9,0x76,0x48,0x59,0x53, + 0x80,0xD7,0x79,0x7D,0x69,0xDB,0x97,0xA0,0x9B,0xDC,0x6D,0x4F,0x64,0xE7,0xBE,0x46, + 0xD4,0x98,0x55,0x74,0xE2,0x1D,0xAD,0x13,0xE3,0x61,0xE3,0x3E,0xFF,0xFE,0xFD,0x7A, + 0xF1,0xF5,0xE2,0xE2,0x09,0x1E,0x63,0xFD,0xAC,0x98,0x63,0xE7,0x49,0x31,0x07,0x9D, + 0x9E,0x6A,0x01,0x0F,0xC4,0x80,0xA8,0xAD,0x2F,0x77,0x60,0x41,0x9F,0x1D,0x35,0x40, + 0x16,0x17,0x69,0xBC,0xEC,0x8C,0xC7,0x8B,0xA6,0xF7,0x36,0xEA,0xFD,0xA3,0x90,0x63, + 0x67,0x76,0xC8,0x41,0x0A,0x68,0x81,0x8B,0x52,0xE0,0x7E,0x42,0x01,0x35,0xA2,0x48, + 0x8B,0x7B,0x56,0xCA,0xB3,0x15,0x44,0xF5,0x13,0x9E,0x9A,0xBC,0xF8,0xBA,0xB8,0x28, + 0xED,0xFD,0x15,0x7B,0xC9,0x27,0xB5,0x93,0xBC,0xA3,0xEF,0x24,0xB3,0x0D,0x79,0xFC, + 0x0A,0x14,0x78,0xCC,0x79,0x2A,0x4F,0x50,0x3E,0x29,0xC9,0xBB,0x65,0xC9,0xE3,0x41, + 0x46,0xA2,0x77,0xD9,0xCE,0xC4,0xC8,0xD3,0xCC,0x70,0x4A,0xC7,0x90,0x3F,0x6D,0xD6, + 0xDD,0x79,0xC6,0xAC,0x4B,0x56,0xD4,0x67,0x7E,0x55,0x99,0x2B,0x61,0xDD,0xC8,0xFA, + 0xD8,0x79,0x85,0x0A,0x8E,0x54,0xA3,0x1B,0xB6,0x33,0xE9,0x03,0xB4,0x2A,0xF9,0x54, + 0xA5,0x1F,0x4E,0xB7,0x3B,0x8F,0x4D,0xB7,0xA4,0x9B,0x3E,0x77,0x2B,0xDD,0x2C,0xCD, + 0x43,0xEC,0x4C,0x79,0x08,0x3A,0xCF,0xDA,0xB1,0x47,0xA8,0x8A,0xF5,0x7E,0x62,0xDB, + 0x63,0x47,0x79,0x01,0x3A,0xD1,0xDA,0xC1,0x13,0xAD,0x99,0xCF,0xE9,0x48,0x0B,0x1E, + 0xEF,0x14,0x67,0xD6,0xA7,0xB9,0x23,0x91,0x5E,0x17,0x47,0x6A,0x8D,0x85,0x30,0x74, + 0xCB,0x27,0x5E,0x5F,0xF5,0x13,0x2F,0xC7,0xDC,0xA2,0x81,0x4F,0xE7,0x5C,0xE3,0x33, + 0x10,0xB3,0x7C,0x66,0x5B,0x6C,0xE7,0x96,0xD7,0x80,0x69,0x69,0x5B,0x56,0xC8,0x6D, + 0xD9,0x62,0x15,0x8D,0x07,0x91,0x8F,0x2C,0xDD,0x26,0xB6,0x2A,0x22,0xCF,0x5B,0xED, + 0xE0,0xCA,0x6D,0x42,0xC6,0xF4,0x62,0x0D,0x1D,0x13,0xB0,0xC6,0xD8,0x15,0xCF,0x38, + 0xCD,0xF2,0x09,0x3A,0x97,0x27,0xE8,0x74,0x54,0x9C,0x1F,0x8A,0x97,0x8F,0x8A,0x7F, + 0x9F,0x3E,0xF2,0x73,0xE4,0x61,0x28,0x53,0x98,0x6A,0x89,0xE1,0x16,0x71,0x97,0x47, + 0xF2,0xD2,0x77,0xB3,0x2D,0x57,0x78,0x3E,0x9E,0xB9,0x26,0x30,0xE9,0x23,0x96,0xE0, + 0x03,0xEE,0x4A,0x03,0xC1,0x2E,0x4C,0xD1,0xF4,0xEC,0x44,0x30,0x89,0xEC,0xAE,0xBD, + 0x61,0xB4,0x56,0xCB,0xEA,0x17,0x8C,0xB1,0xCB,0x87,0x46,0x17,0xFD,0x27,0x34,0x8C, + 0x0D,0x73,0x7A,0x43,0x02,0x93,0xAD,0x17,0xD9,0xC5,0xAB,0xCB,0x2A,0x9A,0xA6,0xDA, + 0xE6,0x2E,0x58,0x9B,0x67,0xD5,0x8C,0x83,0x02,0x81,0xB8,0xFB,0xFE,0x3D,0xBB,0x58, + 0xBD,0xAC,0xBA,0x2D,0x88,0x86,0xA1,0x8B,0xD1,0x99,0xF0,0x54,0x93,0x28,0xD4,0x62, + 0x55,0xBE,0x7F,0x80,0x48,0x8F,0x54,0x9E,0xED,0x2C,0x2E,0x7A,0x74,0x2B,0x9C,0x44, + 0x58,0x65,0xFC,0x61,0x22,0xDB,0x28,0x99,0x07,0x8E,0x93,0x3B,0xE8,0x39,0xCF,0x9E, + 0xD5,0x46,0x64,0xA5,0xB6,0x6E,0x4E,0x61,0x8D,0x9E,0x28,0x11,0xC8,0x6D,0x5A,0xC6, + 0xB8,0x89,0xF2,0xF0,0x49,0x79,0x81,0xF8,0x96,0xA7,0xED,0x5E,0x3C,0x80,0xC0,0x0C, + 0xF1,0x30,0xB2,0xD1,0x10,0x38,0x04,0x8D,0x96,0x40,0xA3,0xB5,0x8B,0xAA,0x84,0x08, + 0x66,0xAE,0xBA,0x91,0xE7,0xC7,0xA9,0x23,0xFB,0x72,0x54,0x0D,0xE3,0x3E,0xF4,0x06, + 0x74,0x6D,0x13,0x0F,0x19,0x96,0xA7,0xF0,0x88,0xB4,0x92,0x4C,0x29,0x53,0xE0,0x45, + 0xA0,0x8E,0xA0,0x49,0x54,0xE6,0x24,0x6C,0x80,0xE8,0xEF,0x0C,0x1F,0x3D,0xB5,0x05, + 0xD6,0xBD,0x75,0xCB,0xAB,0x26,0x16,0x15,0x6A,0x2F,0xAE,0x82,0xEF,0x78,0x6F,0x79, + 0x0C,0xFC,0x6B,0xDD,0xF2,0x1C,0x6A,0x1C,0x26,0x2D,0x2E,0xB3,0x19,0x6A,0x21,0xC0, + 0x25,0x63,0x57,0x3A,0x8A,0x5B,0x78,0xE4,0x6C,0xD7,0x41,0x3B,0xEB,0x06,0x6D,0xF5, + 0x01,0x89,0xE0,0x0F,0xA1,0x64,0x3C,0xAA,0x03,0x6E,0x77,0xC3,0x23,0xF2,0x0B,0xD0, + 0x44,0x01,0xB9,0x05,0x65,0x0E,0xE2,0x2A,0xEB,0x41,0x2E,0x01,0x9E,0xE7,0xF0,0xF6, + 0xB6,0xB3,0xD4,0x68,0xBF,0x5D,0x69,0xB4,0x11,0xD7,0xAE,0xCE,0xD7,0xB7,0x1C,0x55, + 0x2E,0xBB,0x68,0x5F,0x36,0x3E,0x58,0x5B,0xF6,0xC3,0x07,0x55,0x9E,0x5C,0x06,0x14, + 0x4F,0x40,0x13,0xF2,0x19,0x88,0xA5,0xA0,0x51,0x52,0xD8,0x1E,0x21,0x2F,0x51,0x95, + 0x7A,0xBE,0xB4,0xAE,0x4A,0xC8,0xB6,0x58,0x5A,0x1F,0x48,0x3C,0x9D,0x8B,0x55,0xD0, + 0x20,0xCF,0xE4,0x06,0xCC,0x00,0xD4,0x33,0x73,0xBC,0x02,0xC6,0xD1,0x99,0x9F,0x06, + 0x51,0xB7,0xB2,0x64,0x84,0x38,0x27,0xF8,0x95,0x35,0x98,0x2F,0xD6,0x8C,0x8C,0xF7, + 0xDA,0x18,0x55,0x17,0x40,0xE1,0xBF,0x3C,0x62,0x43,0xA4,0x25,0x7F,0x4A,0x80,0x81, + 0x7F,0xB8,0xFF,0x8C,0xA3,0x3B,0xCF,0x4B,0xFF,0x21,0xEE,0x33,0x9D,0xDF,0xEA,0x67, + 0x1A,0x36,0xBC,0x78,0x95,0x07,0x9D,0xE6,0x24,0x2C,0x45,0xA4,0x97,0x0C,0xBB,0x44, + 0xFD,0x82,0xA7,0x1A,0x40,0xE5,0xF7,0x39,0x00,0x95,0x9F,0x8A,0x45,0xB9,0x08,0x2E, + 0x67,0xA0,0x51,0xD6,0x56,0xFE,0x02,0x68,0x94,0x5E,0x9A,0xBF,0x56,0x81,0xF6,0x05, + 0xBD,0x1B,0xBB,0x1C,0x72,0x86,0x82,0x85,0xCE,0x6F,0xA9,0xB5,0x0A,0xFE,0x36,0x84, + 0xD1,0x4A,0x99,0x0B,0x2A,0xF3,0x15,0x8C,0x6D,0xC8,0xA4,0x79,0x85,0xB0,0x2B,0x0D, + 0x7A,0x9B,0xC9,0x18,0x33,0x6D,0x83,0xED,0x44,0x7A,0xA7,0xAA,0x1C,0x3A,0xF4,0xDA, + 0x9A,0xD1,0xE6,0x30,0x67,0x59,0xE6,0x4B,0xF0,0x7A,0xE2,0x65,0x78,0x23,0x44,0xFE, + 0xCA,0xC3,0x28,0xE4,0xC2,0x8F,0x5B,0x75,0xF3,0xDD,0xCE,0x19,0x86,0x34,0x2E,0xC4, + 0x62,0xD0,0x70,0x1B,0x7D,0xC8,0x4D,0x83,0x7B,0x89,0xA9,0x0B,0xE6,0xF8,0xCD,0x75, + 0x73,0x93,0x83,0xDF,0xC3,0xC8,0x49,0x54,0x9B,0x74,0x79,0x25,0xE7,0x51,0x73,0xD3, + 0xCD,0x02,0xCF,0x24,0x8C,0x17,0x2D,0xD6,0xCF,0x70,0xDF,0xA1,0x6E,0xBA,0x49,0xD2, + 0x53,0x2F,0x93,0xBD,0xBC,0xCE,0xC0,0x49,0xE0,0x1B,0x0C,0xA9,0x55,0x63,0x9E,0x52, + 0x34,0xAC,0x62,0x36,0x7A,0x47,0x9A,0x66,0xAD,0x50,0x36,0x5E,0xDC,0xE3,0x55,0x0A, + 0xD2,0x2C,0x73,0x07,0x93,0xBA,0x89,0x80,0x45,0xD5,0x1D,0xBD,0x87,0x09,0x1B,0x6C, + 0x3D,0xD1,0x06,0x79,0x00,0xF4,0x17,0xB1,0xC2,0x12,0xF8,0xDF,0x3F,0x6F,0x85,0xE8, + 0x41,0x56,0xF7,0xD8,0x81,0x8E,0xBB,0x8F,0x5B,0x23,0x10,0x9F,0x58,0xE3,0x77,0xDD, + 0x46,0x6D,0x74,0x0A,0xAF,0xF8,0x8A,0xDD,0x38,0x95,0xAB,0x06,0x8C,0x52,0xD3,0x31, + 0xE1,0x31,0xF4,0xB4,0x6D,0x85,0xE6,0xB4,0x5E,0x04,0x73,0x67,0x4A,0x31,0x0E,0x54, + 0xC0,0xCA,0x0F,0xB2,0x23,0x76,0x9D,0x11,0xAE,0x87,0x28,0x5E,0x8A,0x53,0x4A,0x8B, + 0x18,0x1A,0xEF,0x44,0x9C,0x04,0xDE,0x95,0x7C,0x31,0x0B,0xEE,0x1F,0x26,0x3B,0xED, + 0x1E,0xD6,0xB0,0x68,0xB1,0xA3,0x67,0xB4,0xD8,0xF1,0xC7,0xD3,0x7F,0x4E,0x93,0xB1, + 0x66,0xDC,0xBA,0xAB,0xBF,0x3F,0xFD,0x78,0x54,0xCD,0xE8,0x6D,0xBF,0xA0,0x7D,0x07, + 0xD5,0x00,0x93,0x60,0x06,0x8E,0x2E,0xC7,0x59,0x5E,0x5A,0x5A,0xB7,0x3E,0xF0,0xAA, + 0xC2,0xFB,0x5A,0x08,0x7A,0x22,0x05,0x60,0xEA,0x93,0x35,0x31,0xFA,0x09,0x6E,0x21, + 0xB5,0xAA,0x26,0x5B,0x81,0xB6,0x61,0x7A,0x2F,0x38,0xCA,0x7B,0x81,0x5D,0xFF,0x30, + 0x6E,0x78,0xC4,0x89,0x19,0x51,0x2C,0x0C,0x57,0xD5,0x74,0x5C,0x56,0xF5,0x95,0xA3, + 0xB9,0x7D,0xE5,0x48,0x7F,0x87,0x6A,0x68,0x49,0xB7,0x13,0x82,0x07,0x6B,0xBC,0xB4, + 0xAC,0x8B,0x8A,0x5B,0xB9,0xDF,0xA8,0x7C,0x5B,0xAA,0xBC,0xF9,0xCF,0xFA,0xBF,0x5F, + 0xFD,0xF1,0xB7,0xEA,0x7F,0xFF,0xDB,0xFA,0xE2,0xCB,0x97,0xCE,0xE5,0x68,0x99,0x2D, + 0xBF,0x5A,0x7B,0xF8,0xA3,0x7A,0x01,0x14,0x78,0xB7,0xFA,0x60,0x7F,0xB7,0xFE,0x68, + 0x5A,0xEB,0x75,0xF8,0xBB,0xFC,0xEA,0x62,0xA9,0xF2,0xEA,0xF2,0xFB,0x32,0x24,0xAB, + 0x97,0xF0,0xF3,0xE6,0xF2,0xFB,0xC5,0x52,0xED,0x72,0x9D,0x2E,0xE9,0x67,0xDD,0xFE, + 0xA3,0x6A,0x8F,0x56,0x1E,0x9E,0x4C,0xDD,0xB4,0x6D,0xEB,0x8F,0x97,0xF3,0x35,0xFA, + 0x0F,0x7B,0xFD,0x65,0x00,0x33,0x5F,0x06,0x0E,0x9A,0xD6,0xF0,0xEB,0xA9,0xB5,0xC2, + 0xBA,0xB4,0x28,0xC7,0x65,0x50,0x17,0x62,0xB5,0x10,0x2F,0xF4,0xEC,0x25,0xC8,0x96, + 0xDD,0xF5,0xD0,0x39,0xA2,0x5D,0x68,0x28,0xAC,0xAD,0x16,0x1B,0xB5,0xB7,0x0E,0xC2, + 0x7E,0xDF,0x3A,0x6B,0xD0,0x6A,0xB2,0x64,0xF1,0x38,0x67,0x3B,0x9D,0x8F,0x7C,0x19, + 0x4A,0x83,0xDF,0xC5,0xC5,0x3D,0x9C,0x32,0xC6,0x46,0xFE,0x8C,0x13,0x59,0xBE,0x43, + 0xE2,0xD0,0xDC,0xAC,0x16,0x8A,0xB2,0xA1,0x35,0x52,0x9F,0x48,0xA1,0x32,0x92,0x8C, + 0xD6,0x16,0x53,0x44,0x27,0x92,0x48,0xED,0x17,0x3C,0x46,0xB9,0x89,0x23,0x0A,0x5F, + 0xD3,0xAB,0x42,0x5F,0xB9,0xE2,0x37,0x7D,0x18,0xE2,0x51,0xB1,0x71,0x10,0xDA,0x34, + 0xFD,0xE5,0xF7,0x4E,0xA8,0x18,0x68,0x1C,0xCE,0x49,0xD6,0x78,0x83,0xE0,0x31,0x61, + 0xDF,0x88,0x54,0x33,0x0A,0xAC,0xD6,0x0B,0x72,0x7B,0x8A,0x3E,0xE5,0x8A,0xB7,0xB6, + 0x4C,0x7E,0xDC,0x3A,0xDB,0x58,0x9D,0x54,0x5C,0x84,0xEB,0x66,0x3F,0xCA,0xFC,0xA0, + 0x8D,0x80,0x7D,0x84,0xCB,0x99,0x97,0xD2,0x65,0x25,0x54,0x85,0x65,0x06,0x31,0x6B, + 0xEE,0x11,0x2F,0xE4,0x1B,0x7E,0x5D,0x5A,0xF4,0x21,0xA6,0x73,0x38,0x85,0xCF,0xCC, + 0x5F,0x4B,0xC4,0xB7,0x80,0x9E,0xF1,0x5A,0x62,0x2F,0x65,0x69,0x3A,0xFD,0x5A,0x62, + 0x96,0x3E,0xFB,0xB5,0xC4,0x28,0x9D,0x01,0x48,0x75,0xFE,0xEB,0xCC,0xE7,0xC6,0xC1, + 0xCE,0xB6,0x11,0x64,0xB4,0xDB,0x9D,0x62,0x78,0x85,0xF8,0xD4,0xDB,0xC0,0x95,0x6B, + 0xF7,0x41,0x20,0x7C,0x03,0x16,0xA4,0x46,0x8B,0x87,0xB1,0x01,0x51,0x18,0xBE,0xA6, + 0x0C,0x37,0x59,0xD0,0x89,0x78,0xCB,0xC0,0x57,0x10,0xE2,0xB4,0x2B,0xC9,0xF6,0xE2, + 0x90,0xFF,0x91,0xFE,0xEB,0xBF,0xD0,0x7F,0x1B,0x60,0x6C,0xF0,0x4E,0x91,0xF8,0x25, + 0x33,0xE8,0x55,0x85,0x56,0x00,0x11,0x10,0x2C,0xD7,0xEE,0x0C,0xE5,0x25,0xAB,0xFF, + 0x25,0x5F,0x8B,0x44,0x08,0xEC,0x53,0x70,0xAB,0x51,0x70,0xD3,0xE7,0x3A,0x64,0x74, + 0x6F,0x86,0xA1,0x11,0x08,0xFB,0x04,0x66,0x47,0x3A,0x00,0xF6,0x90,0x1D,0x94,0x40, + 0xB0,0x05,0xA2,0xF5,0x09,0x9C,0xC8,0x4A,0xC7,0xAE,0xF0,0xC7,0xEC,0x14,0x0A,0x76, + 0x0A,0xD1,0xAA,0x81,0x53,0x7F,0x1A,0x96,0x54,0x81,0x5C,0xD9,0x66,0x8E,0x87,0x37, + 0x04,0x85,0xCC,0xD7,0x33,0xDE,0x0D,0x95,0x4B,0xA1,0x76,0x69,0x95,0xA4,0x5E,0xD8, + 0x56,0x1B,0x14,0x13,0xEF,0x51,0x4E,0x03,0x40,0x21,0x56,0x16,0x65,0x14,0x63,0x20, + 0xD1,0x8D,0xDA,0x62,0x24,0x2A,0xAD,0x14,0x10,0xF4,0x8C,0x14,0xDA,0x4B,0x95,0x25, + 0x0C,0xA8,0x06,0xFB,0x3B,0xD6,0x8E,0xD6,0xBB,0xFA,0x3B,0x95,0x39,0x12,0xD0,0xA7, + 0xAC,0x13,0xBD,0xCC,0xA6,0x26,0xF8,0x9C,0x50,0x87,0xE3,0x6E,0x62,0x84,0x13,0x68, + 0x8A,0x15,0x42,0x53,0xAC,0x2C,0x1B,0x9E,0xEF,0xA6,0xAE,0x07,0xE1,0x48,0x66,0xF4, + 0xE2,0xA8,0x23,0xD1,0xA2,0x13,0xAF,0x59,0x86,0xBA,0x94,0x50,0xD3,0xEC,0x88,0x1D, + 0x4A,0xA4,0xA1,0xAE,0xD9,0x3D,0x65,0x6D,0xE8,0x65,0x9A,0x9A,0x66,0xFB,0xA4,0x19, + 0xF6,0xB9,0xE7,0x28,0xA5,0x90,0xA3,0xA7,0x85,0x52,0x5F,0x75,0x01,0x5F,0x35,0xA5, + 0x08,0x7B,0x4D,0xD4,0x67,0xBA,0x5A,0x3A,0x66,0x34,0x2F,0x96,0xE8,0x0B,0xC7,0x9E, + 0xF6,0xCA,0x06,0x7D,0x11,0x00,0xFC,0x40,0x2F,0x80,0x2E,0x27,0x87,0xF6,0xDA,0xAA, + 0xA6,0x16,0xE2,0x5E,0x25,0xBF,0x05,0x6D,0xA3,0x28,0x93,0x59,0x37,0x45,0xCE,0x8D, + 0xA6,0xD7,0x29,0x2F,0xAD,0x45,0x07,0x72,0x2D,0x3A,0x98,0x84,0x58,0x2E,0x14,0x10, + 0xCB,0x85,0x39,0x7B,0x48,0x5B,0x5C,0x62,0x2C,0x83,0x89,0x1E,0x48,0x27,0x2A,0x81, + 0xD3,0xB1,0x30,0x8D,0x80,0xC1,0xD6,0x0F,0x41,0x40,0x51,0x69,0x87,0x30,0x5D,0xE9, + 0x7A,0x21,0xBD,0x0B,0x39,0xD1,0x71,0x11,0xC7,0x5A,0x82,0x58,0x81,0x90,0x05,0xEC, + 0xC8,0xF3,0x95,0xF4,0x51,0xC9,0xB6,0xDD,0x40,0x4C,0xA5,0x3F,0xF9,0xD6,0x66,0x17, + 0x1F,0x6E,0xD9,0x8D,0x63,0x78,0xD8,0x7D,0x3E,0x06,0xEB,0xB8,0x04,0x24,0x6B,0xFB, + 0x3C,0x24,0xDC,0x5B,0x69,0xD0,0xC8,0x57,0x55,0xF1,0x6C,0x69,0xA8,0x84,0x3C,0x13, + 0x1D,0xE9,0xAB,0xE2,0x27,0x8F,0xEB,0xA8,0x6A,0x14,0x62,0x8D,0x4E,0xEC,0x06,0xBE, + 0xA4,0x1A,0xF2,0x79,0x30,0xA7,0x2B,0x9E,0xBF,0xAE,0x7A,0x27,0xCF,0x84,0xFE,0xD4, + 0x08,0xBD,0x2A,0xE3,0x23,0x27,0x80,0x4E,0xA5,0xCD,0x44,0x44,0xFC,0xE0,0x96,0xF9, + 0xF6,0xAC,0x56,0x18,0xA8,0x77,0x57,0x43,0xEC,0x87,0xCF,0x6F,0x85,0xB0,0xD4,0x77, + 0x5A,0xD9,0xDA,0x72,0xB7,0x89,0xCD,0x50,0xF2,0x10,0x88,0x27,0xEF,0x58,0x78,0x54, + 0x77,0xA0,0xA4,0x3C,0xB3,0x19,0xEE,0x55,0xF1,0x8D,0xC7,0x95,0x54,0x55,0x1A,0x62, + 0x95,0x36,0xEC,0x06,0xA2,0x2D,0x87,0x73,0x9B,0x61,0x6F,0x8C,0xBB,0x84,0x66,0xD8, + 0x03,0xB2,0xE7,0xBA,0xA3,0xBD,0x92,0x95,0x87,0xA5,0xBB,0x41,0xE9,0xEE,0x36,0x6F, + 0x81,0xD3,0x59,0x2D,0x70,0x86,0x8A,0x9C,0xDA,0x8D,0xAF,0xF8,0x86,0xF1,0xF3,0x5B, + 0xE0,0x6B,0xA9,0x05,0x96,0x6E,0xE2,0x65,0x09,0xE1,0x2B,0xBB,0x43,0x42,0x73,0x76, + 0x2C,0x3C,0x1D,0x3D,0x53,0x72,0x9E,0xD9,0x06,0x87,0x79,0xF9,0xDD,0xC7,0xF5,0x54, + 0xB5,0x3A,0xC0,0x5A,0xED,0xDA,0x8D,0x04,0x1D,0xDC,0xC1,0xDC,0x56,0x38,0x47,0xB2, + 0x84,0xE3,0xF2,0x00,0xDB,0xE1,0x9C,0xB3,0x27,0x3B,0xDF,0xF3,0x92,0x8D,0x0F,0xCA, + 0x2F,0x5C,0x97,0xEE,0xFC,0x32,0x16,0x97,0x4B,0xC7,0xB5,0xC0,0x67,0x7B,0x2E,0x76, + 0x65,0x2D,0x94,0x31,0x73,0x99,0x2A,0x71,0x33,0xAB,0xC0,0xBC,0x76,0xB9,0x99,0x83, + 0x98,0x2B,0x4F,0x07,0xA0,0xC6,0x63,0x80,0x39,0x0D,0x94,0xE1,0xF6,0x78,0x0A,0x6B, + 0x4F,0xFC,0xAD,0xE0,0x07,0x76,0x8C,0xF0,0xAE,0xB2,0x6C,0x14,0xAF,0xA4,0x21,0x9E, + 0xE2,0x78,0x16,0xF8,0xE4,0x78,0x8C,0x9A,0x52,0x08,0xA2,0xE1,0x34,0x28,0xA9,0x78, + 0x1F,0xFA,0xF3,0x4F,0x03,0xFC,0x2C,0x5F,0x56,0x41,0xE2,0x8F,0x90,0x3E,0xC3,0x1C, + 0x83,0x55,0x28,0xA7,0xA3,0xD5,0x86,0x39,0x36,0x69,0x05,0xB1,0x1F,0xC3,0x09,0x08, + 0xD0,0xE6,0x58,0xED,0x6F,0x3F,0x44,0xF3,0xE4,0xEA,0x4C,0xC0,0x78,0x4E,0x66,0x99, + 0xEC,0x64,0xD2,0x64,0xE1,0x2C,0xAA,0x30,0xA7,0xC2,0x25,0xA1,0x44,0xBC,0x4C,0x5B, + 0xF6,0x60,0x5C,0xB2,0xC5,0x7F,0xA6,0x69,0x51,0xE6,0x8F,0x6C,0x7B,0xA0,0x6C,0xAB, + 0xEB,0xA7,0x1B,0xF7,0xA0,0x64,0xDC,0x83,0x09,0xE3,0x36,0xC7,0x9A,0x7F,0x79,0x8A, + 0x71,0xA5,0x42,0x13,0xD6,0xDD,0x98,0x65,0xB7,0x8D,0x29,0xBB,0x7D,0x9D,0x45,0xF6, + 0x75,0x8C,0xBB,0x03,0x5F,0x90,0x63,0xEC,0x26,0xCD,0x5B,0x60,0xF1,0x3A,0x3F,0xD5, + 0xBC,0x28,0xF3,0x47,0xE6,0x3D,0x53,0xE6,0xD5,0xF5,0x93,0xE6,0x5D,0x1A,0xDF,0x16, + 0x48,0xCB,0xB3,0x09,0xF3,0x26,0xC5,0xE1,0x9D,0xCB,0x9F,0x62,0x60,0xA9,0xD2,0x84, + 0x81,0x77,0x67,0x59,0x6E,0x77,0xCA,0x72,0xED,0xBF,0x0B,0xDC,0x25,0xA1,0x73,0x3F, + 0x44,0x73,0xDD,0xFC,0x14,0x30,0x17,0x42,0x83,0x46,0xBF,0x43,0xC2,0x25,0x46,0x88, + 0xC0,0x5C,0x31,0xA7,0x97,0xB6,0x0B,0x9C,0x53,0x20,0x93,0x48,0x52,0x24,0x32,0x21, + 0xEC,0x56,0x5B,0x62,0xB7,0xB6,0x24,0x76,0x6B,0x4B,0x82,0xB6,0xB6,0xF0,0x93,0x08, + 0x82,0x83,0x3B,0x91,0xE8,0x2A,0x8A,0xB8,0x14,0xEC,0x69,0x0B,0x91,0x5C,0x98,0xD0, + 0xA7,0x11,0x4E,0x4A,0x9F,0x46,0x68,0x2B,0xE8,0x56,0x3B,0xFF,0x34,0x42,0x28,0x93, + 0x43,0x99,0x1C,0x10,0xD3,0x03,0xC9,0x34,0x87,0x6B,0x6D,0x23,0x92,0x0B,0x13,0x42, + 0x6D,0x6D,0x94,0x50,0x5B,0x6D,0x76,0xAB,0xF8,0x9D,0x62,0x02,0x8B,0x6A,0x99,0x48, + 0xB8,0xD6,0x29,0xA2,0xB5,0x80,0xE1,0x99,0x64,0x88,0xFB,0xAE,0x57,0xD8,0x84,0xF2, + 0xD9,0xA1,0xA2,0xD9,0xC5,0x64,0x57,0x61,0xB5,0x68,0x39,0x2D,0x6B,0xBF,0xA1,0xD2, + 0x05,0x95,0x66,0x2A,0xBD,0x41,0xBC,0xC2,0x6B,0xC2,0x3D,0xBD,0xC3,0xAE,0x77,0x83, + 0x70,0x88,0x4D,0x4E,0xB0,0xA7,0xA1,0x06,0x53,0x52,0x78,0xA4,0x03,0x2D,0x6B,0x4D, + 0x66,0x9D,0x69,0x59,0xBF,0xCE,0x46,0x2D,0xAD,0x12,0x6A,0xE9,0x86,0xE7,0xA8,0x25, + 0x6A,0x45,0xEB,0xC5,0xBB,0xEF,0xDF,0x17,0x16,0x57,0x17,0x17,0x3F,0x23,0x06,0xE4, + 0x67,0x4D,0x2D,0x83,0xA7,0x4C,0x2D,0x04,0x19,0xD1,0xA6,0x35,0x98,0x68,0x11,0x31, + 0x32,0x1C,0x43,0x73,0x06,0xA5,0x8E,0x40,0x40,0x96,0x21,0x1B,0x4C,0xF4,0x8E,0xA2, + 0x06,0xDF,0xB0,0x06,0x3F,0x9A,0x65,0x06,0x33,0x67,0x19,0x52,0x45,0x9B,0xAA,0x74, + 0xB6,0x2D,0x42,0xC7,0xFC,0xB4,0xA9,0x61,0xF0,0xA4,0xA9,0x81,0x14,0xD2,0x27,0x26, + 0x65,0x9C,0x83,0xB2,0x71,0xC6,0x68,0xA9,0x03,0x36,0x28,0x3A,0x78,0xA1,0xFB,0x17, + 0x54,0xFD,0xCB,0x53,0x4C,0x32,0x3D,0x37,0x90,0x0A,0xDA,0x0C,0xA3,0xF3,0xED,0x90, + 0x4D,0x3A,0x3F,0xD5,0x26,0x3F,0xF4,0xE7,0xA4,0x90,0x3E,0x9B,0x28,0x9B,0x9C,0x95, + 0x6D,0x32,0x1E,0x93,0x64,0x98,0x33,0x36,0x98,0x18,0xA8,0x45,0x2D,0x5C,0xAA,0xC5, + 0x0F,0x5D,0xFB,0x60,0xB6,0x6B,0x27,0x75,0x4A,0x53,0x04,0x9D,0x87,0x0E,0xEC,0xD1, + 0x3B,0x3A,0x0F,0x2D,0xAF,0xF9,0x07,0xB0,0xE2,0x28,0x3E,0x09,0xF2,0x0E,0xDF,0x75, + 0xC4,0x41,0xEE,0xF1,0x27,0x7E,0x14,0xC4,0xE3,0xDA,0x57,0x41,0xDE,0xE5,0x27,0xAB, + 0x03,0x3C,0x59,0x9D,0x25,0xE8,0x19,0xDC,0x6B,0x05,0x77,0x14,0xF4,0x4E,0x1D,0xCB, + 0x02,0xEB,0x41,0x81,0xA8,0x12,0xCA,0x43,0x49,0xF7,0x0E,0x0F,0x3C,0x8E,0xFF,0xE4, + 0x67,0x40,0xC8,0xA9,0x10,0xC0,0x6A,0xB3,0x7C,0x40,0x1E,0xA4,0xFF,0x37,0x3E,0x45, + 0x11,0x97,0x77,0xA2,0xFF,0x0C,0x46,0x2A,0x48,0x25,0x46,0x2A,0x4A,0x15,0x46,0x2A, + 0x4B,0x73,0x8C,0xD4,0xF2,0x04,0x46,0x4A,0xD9,0x89,0xA0,0x52,0x2B,0x08,0x95,0x12, + 0xD3,0x5F,0x8A,0x13,0x1A,0xD8,0x49,0xDF,0xAE,0x0A,0xE4,0x76,0x55,0x30,0x67,0xB7, + 0x27,0x92,0xBB,0x56,0x62,0x0C,0x6B,0x8A,0x70,0xF3,0xF3,0x91,0xD5,0xCD,0x13,0xE1, + 0x4B,0x01,0x4C,0xF3,0x10,0x11,0x04,0x0C,0x3F,0xD4,0x38,0x56,0x0E,0xE1,0x4B,0xA2, + 0x0C,0x5F,0x12,0x25,0xF8,0x52,0xE9,0xE1,0x18,0x97,0x40,0xCC,0x32,0x27,0x40,0x80, + 0x92,0x60,0x19,0x93,0x38,0x83,0x20,0x6F,0x5A,0x91,0xA3,0x81,0xC6,0x4D,0x1A,0x14, + 0x40,0xA0,0xC8,0x59,0x6A,0x44,0x6F,0x57,0x1A,0x91,0x06,0x04,0xF2,0x1C,0x91,0x03, + 0x81,0x22,0x04,0x02,0x79,0xF6,0x43,0xDE,0xDC,0xF4,0x69,0x19,0xD9,0xC9,0x85,0x86, + 0xFB,0x11,0x3A,0xEE,0x47,0x48,0x60,0x92,0xD6,0x1D,0xFA,0xFF,0x8F,0xF6,0xC1,0x63, + 0x80,0x69,0xB4,0x8F,0xB1,0x89,0x5B,0xF3,0xE9,0x3F,0x11,0x3D,0x39,0xBC,0xBD,0x6E, + 0x79,0xC3,0x7F,0x08,0xFA,0xA7,0xF5,0x7C,0xF4,0xCF,0x12,0xCB,0x3F,0x57,0x33,0x89, + 0x02,0xF2,0xC6,0x28,0xA0,0xBE,0x8E,0x02,0x8A,0xD3,0x7F,0x0A,0x0A,0xE8,0x75,0xED, + 0xCD,0x5F,0x00,0x02,0xD4,0x9E,0x0B,0x01,0xF2,0x11,0xED,0xF3,0x06,0x46,0xA6,0xAF, + 0x41,0x80,0x28,0xB3,0xB6,0xC4,0x02,0xCC,0xCD,0x31,0x40,0x93,0x60,0x8A,0xA4,0x84, + 0x7E,0xF1,0x67,0x61,0x29,0x9A,0xD4,0x87,0xFF,0xBA,0xF8,0x17,0x7F,0x02,0xFF,0xE2, + 0xCF,0xC5,0x34,0xF8,0x60,0x4E,0x89,0x8E,0x1C,0xF5,0x71,0xC7,0x10,0x66,0x23,0x97, + 0x30,0x26,0x0C,0xA3,0xBD,0x59,0x58,0x93,0xAD,0xBF,0xC3,0x3C,0x7F,0x2D,0xB0,0x49, + 0x84,0x60,0x13,0x7F,0x3E,0xD8,0x44,0x79,0xAA,0xA7,0x40,0x4D,0xFC,0x3F,0x05,0x35, + 0x79,0xBC,0x59,0xC6,0x16,0x3F,0x56,0x50,0x13,0x1F,0xA1,0x26,0x51,0xB1,0xB0,0x51, + 0x5F,0x6A,0x7E,0xBB,0xF2,0xFD,0xFB,0x74,0xEE,0x6F,0x2B,0xCB,0xEB,0x96,0x2F,0x41, + 0x1C,0xCB,0xAC,0x8D,0xEB,0x19,0x5C,0x36,0xB6,0x41,0x43,0x2D,0xA3,0x26,0xA1,0xC4, + 0xD8,0xD6,0x25,0x6E,0x5A,0xC6,0x24,0x23,0x42,0x4E,0x94,0x38,0xC9,0x1C,0xC5,0x6A, + 0x1C,0x45,0xE7,0xC5,0xD7,0x56,0x4B,0xC5,0xF1,0x51,0xB9,0xB8,0xCC,0xA1,0xE2,0xBE, + 0x44,0x45,0x8D,0x6B,0xDE,0x95,0x78,0x8D,0xBC,0x6A,0x8F,0x61,0x28,0xF6,0x88,0xF4, + 0x47,0xB0,0x8E,0x21,0x51,0x8D,0x75,0x7C,0x8C,0xF4,0x33,0x36,0x4F,0x2A,0x2E,0xFC, + 0x79,0x90,0x09,0xCF,0xF1,0x19,0x41,0xEF,0x26,0x20,0x13,0x6D,0x96,0x14,0x5F,0x42, + 0xCE,0x11,0x12,0xC9,0xF3,0x10,0x12,0xED,0x94,0xB5,0x66,0x20,0x24,0xFC,0x69,0xB8, + 0x43,0x3E,0xAB,0xC8,0xAF,0x70,0xBB,0x29,0x85,0xCC,0xF2,0x4B,0xCA,0x49,0x5A,0xC4, + 0xCF,0xBC,0x74,0xDA,0x9D,0x96,0x4F,0xBB,0x45,0xFE,0x2D,0x9F,0x89,0x6F,0x08,0x4F, + 0x7D,0xCC,0xBB,0x8F,0xDF,0xF2,0x9E,0x19,0x35,0xAA,0xCF,0x76,0x07,0x13,0xBC,0x19, + 0xA1,0xDE,0x09,0x06,0x3F,0xF5,0x81,0xDD,0xE4,0xD1,0x4F,0x7B,0x97,0xE2,0xCA,0x70, + 0x88,0xC1,0xD0,0x5D,0xA5,0xA6,0xED,0x46,0xE9,0xDF,0xE4,0xA4,0x17,0x17,0x81,0xE8, + 0x35,0xA5,0x77,0x95,0xD7,0xE6,0x8C,0x4F,0x81,0xC7,0x9C,0xBE,0x8D,0x57,0x7C,0x66, + 0x33,0xFF,0x52,0x67,0x9E,0x17,0x69,0x01,0x11,0x54,0x37,0xA2,0xF9,0xAA,0x5C,0x1D, + 0x0F,0x01,0xE6,0xC1,0x64,0x56,0x94,0x4F,0x61,0x1E,0x4E,0x61,0x53,0x25,0x3E,0xCC, + 0x2C,0x41,0xB3,0x5A,0xF1,0xBD,0x70,0x5C,0x41,0xA5,0xEA,0x6B,0x8A,0xFA,0x0C,0x17, + 0xEA,0x33,0xDC,0x08,0x3D,0x24,0x4C,0xAE,0xCE,0x18,0x17,0x91,0x7F,0x49,0x3C,0x80, + 0x0E,0x49,0xC1,0x0F,0xAC,0xB6,0x0D,0x88,0x57,0xB1,0x37,0x43,0x2E,0xB9,0x54,0x50, + 0xED,0x42,0xE4,0x1D,0xF1,0xF0,0x79,0x1D,0x31,0x4C,0x99,0x2F,0x3B,0x22,0x89,0x5E, + 0xC2,0xEE,0xC8,0x87,0xF4,0xBF,0x0D,0x38,0xA4,0xFF,0xA7,0x86,0x17,0x87,0x49,0x1C, + 0x61,0xB5,0xF6,0xE9,0x1E,0x06,0x2B,0x44,0xFF,0x99,0xDB,0x7B,0x68,0xFC,0xEB,0xFF, + 0x00,0xE4,0xBD,0xCD,0x1A,0xDB,0x63,0x00,0x00, }; // _app/immutable/nodes/5.js const uint8_t ESP_SVELTEKIT_DATA_54[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xED,0x7D,0xFB,0x77,0xE2,0x38, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x7D,0xFB,0x77,0xE2,0x38, 0xD2,0xE8,0xEF,0xF7,0xAF,0x60,0xB8,0xFD,0x65,0xE1,0x8E,0x20,0x90,0x57,0xE7,0x31, 0x4C,0x7F,0x79,0x75,0x9E,0xD0,0x4C,0xA0,0x93,0xE9,0xCE,0xE4,0x70,0x84,0xAD,0x60, 0x05,0x63,0xD1,0xB2,0x0D,0x21,0x99,0xDC,0xBF,0xFD,0x56,0x49,0x7E,0x62,0x27,0xED, @@ -11063,7 +11003,7 @@ const uint8_t ESP_SVELTEKIT_DATA_54[] = { // _app/immutable/nodes/6.js const uint8_t ESP_SVELTEKIT_DATA_55[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xC5,0x5A,0x79,0x77,0x9B,0x48, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xC5,0x5A,0x79,0x77,0x9B,0x48, 0x12,0xFF,0x7B,0xE7,0x53,0x10,0x9E,0x9F,0x07,0x5E,0x1A,0x2C,0x39,0x71,0x0E,0x69, 0xC8,0x3C,0x3B,0x76,0x12,0x3B,0xBE,0x12,0xC9,0xB9,0xBC,0x7E,0x5A,0x04,0x25,0x81, 0x8D,0x68,0x4C,0x37,0x3A,0xAC,0xD1,0x77,0xDF,0xAA,0x06,0x49,0x20,0xD9,0x39,0x66, @@ -11287,7 +11227,7 @@ const uint8_t ESP_SVELTEKIT_DATA_55[] = { // _app/immutable/nodes/7.js const uint8_t ESP_SVELTEKIT_DATA_56[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0x2D,0xCE,0xB1,0x0A,0x83,0x30, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0x2D,0xCE,0xB1,0x0A,0x83,0x30, 0x10,0x00,0xD0,0xBD,0x5F,0x21,0x99,0x14,0x24,0xEE,0x8A,0xFD,0x83,0xD2,0x82,0xDD, 0x25,0xC6,0xD3,0xC6,0xC6,0x3B,0xB9,0x24,0x52,0x1B,0xF2,0xEF,0xA5,0xA5,0xE3,0xDB, 0x9E,0x59,0x37,0x62,0x1F,0xE7,0x4C,0xB9,0x0C,0xD2,0xC4,0xB4,0x0A,0x29,0x2B,0xFD, @@ -11304,7 +11244,7 @@ const uint8_t ESP_SVELTEKIT_DATA_56[] = { // _app/immutable/nodes/8.js const uint8_t ESP_SVELTEKIT_DATA_57[] = { - 0x1F,0x8B,0x08,0x00,0x19,0x32,0xB0,0x65,0x02,0xFF,0xD4,0xBD,0x6B,0x7B,0xDB,0x36, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xD4,0xBD,0x6B,0x7B,0xDB,0x36, 0x12,0x28,0xFC,0xFD,0xFD,0x15,0x36,0x4F,0xE2,0x25,0x2D,0x48,0x96,0xE4,0x38,0x71, 0x28,0xD3,0x3A,0xB9,0x6E,0xD3,0xE6,0xD6,0x38,0x4D,0x9B,0x7A,0x7D,0x5C,0x8A,0x84, 0x24,0x36,0x34,0xA9,0x12,0x54,0x6C,0xC7,0xD6,0x7F,0x7F,0x67,0x06,0x57,0x52,0x72, @@ -15801,7 +15741,7 @@ const uint8_t ESP_SVELTEKIT_DATA_57[] = { // _app/immutable/nodes/9.js const uint8_t ESP_SVELTEKIT_DATA_58[] = { - 0x1F,0x8B,0x08,0x00,0x1A,0x32,0xB0,0x65,0x02,0xFF,0xED,0x3D,0x69,0x77,0xE2,0xBA, + 0x1F,0x8B,0x08,0x00,0x3A,0xAC,0xBE,0x65,0x02,0xFF,0xED,0x3D,0x69,0x77,0xE2,0xBA, 0x92,0x9F,0x67,0x7E,0x85,0xAF,0x0F,0x2F,0x63,0xE6,0x0A,0x1A,0x48,0x48,0x67,0x79, 0xDC,0x3E,0xD9,0xF7,0x95,0x84,0x6C,0xD3,0x27,0x23,0x8C,0x00,0x07,0x63,0x3B,0xB2, 0x20,0x90,0xBC,0xFC,0xA7,0xF9,0x0D,0xF3,0xCB,0xA6,0x4A,0x12,0x60,0xB1,0x74,0xBA, @@ -16304,13 +16244,13 @@ class WWWData { public: static void registerRoutes(RouteRegistrationHandler handler) { handler("/favicon.png", "image/png", ESP_SVELTEKIT_DATA_0, 1594); - handler("/index.html", "text/html", ESP_SVELTEKIT_DATA_1, 449); + handler("/index.html", "text/html", ESP_SVELTEKIT_DATA_1, 448); handler("/manifest.json", "application/json", ESP_SVELTEKIT_DATA_2, 177); handler("/_app/version.json", "application/json", ESP_SVELTEKIT_DATA_3, 47); - handler("/_app/immutable/assets/0.css", "text/css", ESP_SVELTEKIT_DATA_4, 11735); + handler("/_app/immutable/assets/0.css", "text/css", ESP_SVELTEKIT_DATA_4, 11750); handler("/_app/immutable/assets/14.css", "text/css", ESP_SVELTEKIT_DATA_5, 331); handler("/_app/immutable/assets/logo.png", "image/png", ESP_SVELTEKIT_DATA_6, 19156); - handler("/_app/immutable/assets/_layout.css", "text/css", ESP_SVELTEKIT_DATA_7, 11730); + handler("/_app/immutable/assets/_layout.css", "text/css", ESP_SVELTEKIT_DATA_7, 11744); handler("/_app/immutable/assets/_page.css", "text/css", ESP_SVELTEKIT_DATA_8, 331); handler("/_app/immutable/chunks/24-hours.js", "application/javascript", ESP_SVELTEKIT_DATA_9, 631); handler("/_app/immutable/chunks/access-point.js", "application/javascript", ESP_SVELTEKIT_DATA_10, 605); @@ -16356,7 +16296,7 @@ class WWWData { handler("/_app/immutable/nodes/14.js", "application/javascript", ESP_SVELTEKIT_DATA_50, 19647); handler("/_app/immutable/nodes/2.js", "application/javascript", ESP_SVELTEKIT_DATA_51, 1104); handler("/_app/immutable/nodes/3.js", "application/javascript", ESP_SVELTEKIT_DATA_52, 178); - handler("/_app/immutable/nodes/4.js", "application/javascript", ESP_SVELTEKIT_DATA_53, 8825); + handler("/_app/immutable/nodes/4.js", "application/javascript", ESP_SVELTEKIT_DATA_53, 7865); handler("/_app/immutable/nodes/5.js", "application/javascript", ESP_SVELTEKIT_DATA_54, 9996); handler("/_app/immutable/nodes/6.js", "application/javascript", ESP_SVELTEKIT_DATA_55, 3490); handler("/_app/immutable/nodes/7.js", "application/javascript", ESP_SVELTEKIT_DATA_56, 178); diff --git a/lib/framework/WebSocketClient.h b/lib/framework/WebSocketClient.bak similarity index 99% rename from lib/framework/WebSocketClient.h rename to lib/framework/WebSocketClient.bak index 25c8b900..1d5b9d30 100644 --- a/lib/framework/WebSocketClient.h +++ b/lib/framework/WebSocketClient.bak @@ -137,7 +137,6 @@ class WebSocketClient } protected: - // TimerHandle_t timerHandle; StatefulService<T> *_statefulService; esp_websocket_client_handle_t client = nullptr; esp_websocket_client_config_t websocket_cfg; diff --git a/lib/framework/WiFiSettingsService.cpp b/lib/framework/WiFiSettingsService.cpp index e40e612f..0e45b3e3 100644 --- a/lib/framework/WiFiSettingsService.cpp +++ b/lib/framework/WiFiSettingsService.cpp @@ -104,7 +104,7 @@ void WiFiSettingsService::manageSTA() // Connect or reconnect as required if ((WiFi.getMode() & WIFI_STA) == 0) { - Serial.println(F("Connecting to WiFi...")); + Serial.println("Connecting to WiFi..."); connectToWiFi(); } } diff --git a/platformio.ini b/platformio.ini index 70cc5deb..883ce9f3 100644 --- a/platformio.ini +++ b/platformio.ini @@ -29,11 +29,11 @@ build_flags = -D CORE_DEBUG_LEVEL=5 ; Move all networking stuff to the protocol core 0 and leave business logic on application core 1 -D ESP32SVELTEKIT_RUNNING_CORE=0 - ; Uncomment PROGMEM_WWW to enable the storage of the WWW data in PROGMEM - -D PROGMEM_WWW + ; Uncomment EMBED_WWW to embed the WWW data in the firmware binary + -D EMBED_WWW ; Uncomment to configure Cross-Origin Resource Sharing - ;-D ENABLE_CORS - ;-D CORS_ORIGIN=\"*\" + -D ENABLE_CORS + -D CORS_ORIGIN=\"*\" ; Serve config files from flash ;-D SERVE_CONFIG_FILES @@ -42,8 +42,10 @@ lib_compat_mode = strict ; Uncomment to include the a Root CA SSL Certificate Bundle for all SSL needs ; Needs -D FT_DOWNLOAD_FIRMWARE=1 and -D FT_NTP=1 board_build.embed_files = src/certs/x509_crt_bundle.bin -; Source for SSL Cert Store can bei either downloaded from Mozilla with 'mozilla' or complied from 'folder' full of *.pem / *.dem files -board_ssl_cert_source = folder +; Source for SSL Cert Store can bei either downloaded from Mozilla with 'mozilla' ('https://curl.se/ca/cacert.pem') +; or from a curated Adafruit repository with 'adafruit' (https://raw.githubusercontent.com/adafruit/certificates/main/data/roots.pem) +; or complied from a 'folder' full of *.pem / *.dem files stored in the ./ssl_certs folder +board_ssl_cert_source = adafruit monitor_speed = 115200 monitor_filters = @@ -57,8 +59,7 @@ extra_scripts = scripts/rename_fw.py lib_deps = ArduinoJson@>=6.0.0,<7.0.0 - ottowinter/AsyncMqttClient-esphome @ ^0.8.6 - ;https://github.com/hoeken/PsychicHttp.git + https://github.com/theelims/PsychicMqttClient.git [env:adafruit_feather_esp32_v2] board = adafruit_feather_esp32_v2 @@ -68,7 +69,7 @@ board_build.partitions = default_8MB.csv [env:lolin_c3_mini] board = lolin_c3_mini board_build.mcu = esp32c3 -; Uncomment min_spiffs.csv setting if using PROGMEM_WWW with ESP32 +; Uncomment min_spiffs.csv setting if using EMBED_WWW with ESP32 board_build.partitions = min_spiffs.csv ; Use USB CDC for firmware upload and serial terminal board_upload.before_reset = usb_reset diff --git a/scripts/generate_cert_bundle.py b/scripts/generate_cert_bundle.py index 4c80c8f8..2aca225e 100644 --- a/scripts/generate_cert_bundle.py +++ b/scripts/generate_cert_bundle.py @@ -32,13 +32,19 @@ ca_bundle_bin_file = 'x509_crt_bundle.bin' mozilla_cacert_url = 'https://curl.se/ca/cacert.pem' +adafruit_cacert_url = 'https://raw.githubusercontent.com/adafruit/certificates/main/data/roots.pem' certs_dir = Path("./ssl_certs") binary_dir = Path("./src/certs") quiet = False -def download_cacert_file(): - response = requests.get(mozilla_cacert_url) +def download_cacert_file(source): + if source == "mozilla": + response = requests.get(mozilla_cacert_url) + elif source == "adafruit": + response = requests.get(adafruit_cacert_url) + else: + raise InputError('Invalid certificate source') if response.status_code == 200: @@ -172,8 +178,8 @@ def main(): try: cert_source = env.GetProjectOption("board_ssl_cert_source") - if (cert_source == "mozilla"): - download_cacert_file() + if (cert_source == "mozilla" or cert_source == "adafruit"): + download_cacert_file(cert_source) bundle.add_from_file(os.path.join(certs_dir, "cacert.pem")) elif (cert_source == "folder"): bundle.add_from_path(certs_dir) diff --git a/src/LightStateService.cpp b/src/LightStateService.cpp index 54f5ac1e..a11b7c26 100644 --- a/src/LightStateService.cpp +++ b/src/LightStateService.cpp @@ -16,7 +16,7 @@ LightStateService::LightStateService(PsychicHttpServer *server, SecurityManager *securityManager, - AsyncMqttClient *mqttClient, + PsychicMqttClient *mqttClient, LightMqttSettingsService *lightMqttSettingsService) : _httpEndpoint(LightState::read, LightState::update, this, diff --git a/src/LightStateService.h b/src/LightStateService.h index b19d46fb..4c7e2979 100644 --- a/src/LightStateService.h +++ b/src/LightStateService.h @@ -83,7 +83,7 @@ class LightStateService : public StatefulService<LightState> public: LightStateService(PsychicHttpServer *server, SecurityManager *securityManager, - AsyncMqttClient *mqttClient, + PsychicMqttClient *mqttClient, LightMqttSettingsService *lightMqttSettingsService); void begin(); @@ -92,7 +92,7 @@ class LightStateService : public StatefulService<LightState> MqttPubSub<LightState> _mqttPubSub; WebSocketServer<LightState> _webSocketServer; // WebSocketClient<LightState> _webSocketClient; - AsyncMqttClient *_mqttClient; + PsychicMqttClient *_mqttClient; LightMqttSettingsService *_lightMqttSettingsService; void registerConfig(); diff --git a/src/main.cpp b/src/main.cpp index e2e3dfe7..ada9a9d1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,15 +16,12 @@ #include <LightMqttSettingsService.h> #include <LightStateService.h> #include <PsychicHttpServer.h> -#include <PsychicMqttClient.h> #define SERIAL_BAUD_RATE 115200 PsychicHttpServer server; -PsychicMqttClient mqttClient; - -ESP32SvelteKit esp32sveltekit(&server, 115); +ESP32SvelteKit esp32sveltekit(&server, 125); LightMqttSettingsService lightMqttSettingsService = LightMqttSettingsService(&server, esp32sveltekit.getFS(), esp32sveltekit.getSecurityManager()); @@ -49,11 +46,6 @@ void setup() lightStateService.begin(); // start the light service lightMqttSettingsService.begin(); - - // start the MQTT client - delay(20000); - ESP_LOGI("Main", "Connecting to MQTT..."); - mqttClient.connect(); } void loop()