From 36bca4e0d482db8e242e21f3d9b4104272b827a1 Mon Sep 17 00:00:00 2001 From: tobozo Date: Thu, 2 Mar 2023 14:50:31 +0100 Subject: [PATCH 01/34] putting back ESP32-C3 --- .github/workflows/PlatformioBuild.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/PlatformioBuild.yml b/.github/workflows/PlatformioBuild.yml index d9bdf6f9..18fdb7c7 100644 --- a/.github/workflows/PlatformioBuild.yml +++ b/.github/workflows/PlatformioBuild.yml @@ -28,6 +28,7 @@ jobs: - esp32 - esp32-s2 - esp32-s3 + - esp32-c3 - m5stick-c - m5stack-core-esp32 - m5stack-core2 @@ -41,6 +42,7 @@ jobs: - default exclude: + - { board: esp32-c3, platform-version: 1.0.6 } - { board: esp32-s3, platform-version: 1.0.6 } - { board: esp32-s3, platform-version: default } # 2.0.5 => esp32s3/include/newlib/platform_include/assert.h:20:10: fatal error: sdkconfig.h: No such file or directory - { board: esp32-s2, platform-version: 1.0.6 } @@ -49,6 +51,7 @@ jobs: - board: esp32 - board: esp32-s2 - board: esp32-s3 + - board: esp32-c3 - board: m5stick-c - board: m5stack-core-esp32 - board: m5stack-core2 From f1a5139134e9c129466b116b0c7a5d03638a01a3 Mon Sep 17 00:00:00 2001 From: tobozo Date: Thu, 2 Mar 2023 15:14:53 +0100 Subject: [PATCH 02/34] ESP32-C3 doesn't have dport_reg, fixes #368 --- src/lgfx/v1/platforms/esp32/Bus_SPI.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp b/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp index e410a52b..b8220878 100644 --- a/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp +++ b/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp @@ -29,7 +29,10 @@ Original Source: #include "../../misc/pixelcopy.hpp" -#include +#if __has_include () + #include +#endif + #include #include #include From d0980e19c210f913fda2a264534c60d7eec0f8e9 Mon Sep 17 00:00:00 2001 From: tobozo Date: Thu, 2 Mar 2023 15:15:30 +0100 Subject: [PATCH 03/34] fix board for C3 --- examples/Test/build_test/platformio_esp32.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/Test/build_test/platformio_esp32.ini b/examples/Test/build_test/platformio_esp32.ini index c946d128..489a4000 100644 --- a/examples/Test/build_test/platformio_esp32.ini +++ b/examples/Test/build_test/platformio_esp32.ini @@ -188,13 +188,13 @@ extends = esp32c3, esp32_2_0_2 [env:esp32-c3@2.0.3] extends = esp32c3, esp32_2_0_3 [env:esp32-c3@2.0.4] -extends = esp32, esp32_2_0_4 +extends = esp32c3, esp32_2_0_4 [env:esp32-c3@2.0.5] -extends = esp32, esp32_2_0_5 +extends = esp32c3, esp32_2_0_5 [env:esp32-c3@2.0.6] -extends = esp32, esp32_2_0_6 +extends = esp32c3, esp32_2_0_6 [env:esp32-c3@2.0.7] -extends = esp32, esp32_2_0_7 +extends = esp32c3, esp32_2_0_7 [env:esp32-c3@default] extends = esp32c3, esp32_default From 1c613b8a8dbb40498f7891b3e1adf1002a7533f8 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 16:29:52 +0900 Subject: [PATCH 04/34] Fixed Panel_CVBS not working with ESP-IDF v5. --- src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp b/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp index 58dc798c..d83a9465 100644 --- a/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp +++ b/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp @@ -2118,12 +2118,13 @@ namespace lgfx I2S0.clkm_conf.clkm_div_a = 1; if (use_apll) { #if defined ( LGFX_I2S_STD_ENABLED ) + rtc_clk_apll_enable( true ); + // 設定する前にapllをenableにしておく必要がある rtc_clk_apll_coeff_set( 1 , setup_info.sdm0 , setup_info.sdm1 , setup_info.sdm2 ); - rtc_clk_apll_enable( true ); #else rtc_clk_apll_enable( true , setup_info.sdm0 From 63f99e53ff6f78b65f71481e8bf8f3190c2fe9a7 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 16:31:50 +0900 Subject: [PATCH 05/34] added support M5UnitGLASS --- src/lgfx/boards.hpp | 1 + src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp | 235 ++++++++++++++++++++++++ src/lgfx/v1/panel/Panel_M5UnitGLASS.hpp | 91 +++++++++ src/lgfx/v1/panel/Panel_SSD1306.hpp | 2 +- src/lgfx_user/M5UnitGLASS.hpp | 99 ++++++++++ 5 files changed, 427 insertions(+), 1 deletion(-) create mode 100644 src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp create mode 100644 src/lgfx/v1/panel/Panel_M5UnitGLASS.hpp create mode 100644 src/lgfx_user/M5UnitGLASS.hpp diff --git a/src/lgfx/boards.hpp b/src/lgfx/boards.hpp index 7faa5d6d..7fb22bf8 100644 --- a/src/lgfx/boards.hpp +++ b/src/lgfx/boards.hpp @@ -39,6 +39,7 @@ namespace lgfx , board_ESPboy , board_M5UnitLCD , board_M5UnitOLED + , board_M5UnitGLASS , board_M5AtomDisplay , board_FeatherM4_HX8357 , board_ESP32_S3_BOX diff --git a/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp b/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp new file mode 100644 index 00000000..94dfa486 --- /dev/null +++ b/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp @@ -0,0 +1,235 @@ +/*----------------------------------------------------------------------------/ + Lovyan GFX - Graphics library for embedded devices. + +Original Source: + https://github.com/lovyan03/LovyanGFX/ + +Licence: + [FreeBSD](https://github.com/lovyan03/LovyanGFX/blob/master/license.txt) + +Author: + [lovyan03](https://twitter.com/lovyan03) + +Contributors: + [ciniml](https://github.com/ciniml) + [mongonta0716](https://github.com/mongonta0716) + [tobozo](https://github.com/tobozo) +/----------------------------------------------------------------------------*/ +#include "Panel_M5UnitGLASS.hpp" +#include "../Bus.hpp" +#include "../platforms/common.hpp" +#include "../misc/pixelcopy.hpp" +#include "../misc/colortype.hpp" + +namespace lgfx +{ + inline namespace v1 + { +//---------------------------------------------------------------------------- + + bool Panel_M5UnitGlass::init(bool use_reset) + { + if (!Panel_HasBuffer::init(use_reset)) + { + return false; + } + + bool connected = false; + uint8_t res = 0xFFu; + int retry = 4; + waitBusy(); + do { + _bus->beginTransaction(); + if (_bus->writeCommand(REG_INDEX_FIRMWARE_VERSION, 8)) + { + _bus->endTransaction(); + _bus->beginRead(); + connected = _bus->readBytes(&res, 1); + } + _bus->endTransaction(); + } while (!connected && --retry >= 0); + + if (!connected) { return false; } + + _range_mod.top = INT16_MAX; + _range_mod.left = INT16_MAX; + _range_mod.right = 0; + _range_mod.bottom = 0; + + setInvert(_invert); + setRotation(_rotation); + + return true; + } + + void Panel_M5UnitGlass::setSleep(bool flg) + { + waitBusy(); + _bus->beginTransaction(); + _bus->writeCommand(REG_INDEX_DISPLAY_ON_OFF | flg << 8, 16); + _bus->endTransaction(); + } + + void Panel_M5UnitGlass::setInvert(bool invert) + { + waitBusy(); + int retry = 4; + do { + _bus->beginTransaction(); + if (_bus->writeCommand(REG_INDEX_COLOR_INVERT | invert << 8, 16)) { + _invert = invert; + retry = 1; + } + _bus->endTransaction(); + } while (--retry); + } + + void Panel_M5UnitGlass::display(uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h) + { + if (0 < w && 0 < h) + { + _range_mod.left = std::min(_range_mod.left , x ); + _range_mod.right = std::max(_range_mod.right , x + w - 1); + _range_mod.top = std::min(_range_mod.top , y ); + _range_mod.bottom = std::max(_range_mod.bottom, y + h - 1); + } + if (_range_mod.empty()) { return; } + + uint_fast8_t xs = _range_mod.left; + uint_fast8_t xe = _range_mod.right; + uint_fast8_t ys = _range_mod.top >> 3; + uint_fast8_t ye = _range_mod.bottom >> 3; + + _range_mod.top = INT16_MAX; + _range_mod.left = INT16_MAX; + _range_mod.right = 0; + _range_mod.bottom = 0; + + y = ys; + waitBusy(); + do + { + x = xs; + uint_fast8_t x_start = x; + int index = 0; + auto buf = &_buf[y * _cfg.panel_width]; + do + { + if (index == 0) { + while (0 == (_modified_flags[y] & 0x8000 >> (x >> 3))) + { + x = 8 + (x & ~7u); + if (x > xe) { break; } + } + x_start = x; + } + if (x <= xe) { + _bus->beginTransaction(); + _bus->writeCommand(REG_INDEX_PICTURE_BUFFER | index << 8 | buf[x] << 24 , 32); + _bus->endTransaction(); + + ++index; + ++x; + + bool flg_draw_picture = (x > xe); + if (!flg_draw_picture && 0 == (x & 7)) { + flg_draw_picture = (0 == (_modified_flags[y] & 0x8000 >> (x >> 3))); + } + if (flg_draw_picture) { + _bus->beginTransaction(); + _bus->writeCommand(REG_INDEX_DRAW_PICTURE | x_start << 8 | y << (3 + 16), 24); + _bus->writeCommand(index | 1 << (3+8) | 1 << 16, 24); + _bus->endTransaction(); + lgfx::delayMicroseconds(index << 3); // 描画が終わるまで少し待つ + index = 0; + } + } + } while (x <= xe); + _modified_flags[y] = 0; + } while (++y <= ye); + + _bus->beginTransaction(); + _bus->writeCommand(REG_INDEX_SHOW | 0x100, 16); + _bus->endTransaction(); + _msec_busy = lgfx::millis() + 5; + } + + uint8_t Panel_M5UnitGlass::getKey(uint_fast8_t idx) + { + uint8_t res = 1; + int retry = 4; + waitBusy(); + do { + _bus->beginTransaction(); + if (_bus->writeCommand(REG_INDEX_READ_KEY + (idx & 1), 8)) + { + _bus->endTransaction(); + lgfx::delayMicroseconds(384); // データ取得可能になるまで少し待つ + _bus->beginRead(); + if (_bus->readBytes(&res, 1)) { retry = 0; } + } + _bus->endTransaction(); + } while (--retry >= 0); + return res; + } + + uint8_t Panel_M5UnitGlass::getFirmwareVersion(void) + { + uint8_t res = 1; + int retry = 4; + waitBusy(); + do { + _bus->beginTransaction(); + if (_bus->writeCommand(REG_INDEX_FIRMWARE_VERSION, 8)) + { + _bus->endTransaction(); + _bus->beginRead(); + if (_bus->readBytes(&res, 1)) { retry = 0; } + } + _bus->endTransaction(); + } while (--retry >= 0); + return res; + } + + void Panel_M5UnitGlass::setBuzzer(uint16_t freq, uint8_t duty) { + waitBusy(); + _bus->beginTransaction(); + _bus->writeCommand(REG_INDEX_BUZZER, 8); + _bus->writeCommand(freq | duty << 16 | _enable_buzzer_flg << 24, 32); + _bus->endTransaction(); + } + + void Panel_M5UnitGlass::setBuzzerEnable(bool enable) { + _enable_buzzer_flg = enable; + waitBusy(); + _bus->beginTransaction(); + _bus->writeCommand((REG_INDEX_BUZZER + 3) | enable << 8, 16); + _bus->endTransaction(); + } + + void Panel_M5UnitGlass::waitBusy(void) + { + uint32_t diff = _msec_busy - lgfx::millis(); + if (diff < 16) { + lgfx::delay(diff); + } + } + + void Panel_M5UnitGlass::_update_transferred_rect(uint_fast16_t &xs, uint_fast16_t &ys, uint_fast16_t &xe, uint_fast16_t &ye) + { + Panel_1bitOLED::_update_transferred_rect(xs, ys, xe, ye); + int y = ys >> 3; + int y_end = ye >> 3; + + uint_fast8_t msb = (xs >> 3); + uint_fast8_t lsb = (xe >> 3); + uint_fast16_t bitmask = (0xFFFF >> msb) ^ (0x7FFFu >> lsb); + do + { + _modified_flags[y] |= bitmask; + } while (++y <= y_end); + } + +//---------------------------------------------------------------------------- + } +} diff --git a/src/lgfx/v1/panel/Panel_M5UnitGLASS.hpp b/src/lgfx/v1/panel/Panel_M5UnitGLASS.hpp new file mode 100644 index 00000000..d3c36557 --- /dev/null +++ b/src/lgfx/v1/panel/Panel_M5UnitGLASS.hpp @@ -0,0 +1,91 @@ +/*----------------------------------------------------------------------------/ + Lovyan GFX - Graphics library for embedded devices. + +Original Source: + https://github.com/lovyan03/LovyanGFX/ + +Licence: + [FreeBSD](https://github.com/lovyan03/LovyanGFX/blob/master/license.txt) + +Author: + [lovyan03](https://twitter.com/lovyan03) + +Contributors: + [ciniml](https://github.com/ciniml) + [mongonta0716](https://github.com/mongonta0716) + [tobozo](https://github.com/tobozo) +/----------------------------------------------------------------------------*/ +#pragma once + +#include "Panel_Device.hpp" +#include "Panel_SSD1306.hpp" + +namespace lgfx +{ + inline namespace v1 + { +//---------------------------------------------------------------------------- + + struct Panel_M5UnitGlass : public Panel_1bitOLED + { + static constexpr const uint8_t REG_INDEX_CLEAR = 0x00; + static constexpr const uint8_t REG_INDEX_SHOW = 0x10; + static constexpr const uint8_t REG_INDEX_DRAW_STRING = 0x20; + static constexpr const uint8_t REG_INDEX_DRAW_POINT = 0x30; + static constexpr const uint8_t REG_INDEX_DRAW_LINE = 0x40; + static constexpr const uint8_t REG_INDEX_DRAW_CIRCLE = 0x50; + static constexpr const uint8_t REG_INDEX_INVERT = 0x60; + static constexpr const uint8_t REG_INDEX_DISPLAY_ON_OFF = 0x70; + static constexpr const uint8_t REG_INDEX_STRING_BUFFER = 0x80; + static constexpr const uint8_t REG_INDEX_PICTURE_BUFFER = 0x90; + static constexpr const uint8_t REG_INDEX_COLOR_INVERT = 0xA0; + static constexpr const uint8_t REG_INDEX_DRAW_PICTURE = 0xB0; + static constexpr const uint8_t REG_INDEX_BUZZER = 0xC0; + static constexpr const uint8_t REG_INDEX_READ_KEY = 0xD0; + static constexpr const uint8_t REG_INDEX_FIRMWARE_VERSION = 0xFE; + + static constexpr const uint8_t PANEL_HEIGHT_MAX = 64; + + Panel_M5UnitGlass() : Panel_1bitOLED() + { + _cfg.bus_shared = false; + _cfg.panel_width = 128; + _cfg.memory_width = 128; + _cfg.panel_height = 64; + _cfg.memory_height = 64; + } + + void beginTransaction(void) override {} + void endTransaction(void) override {} + + bool init(bool use_reset) override; + void setSleep(bool flg) override; + void setInvert(bool invert) override; + void display(uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h) override; + + uint8_t getKey(uint_fast8_t idx); + uint8_t getFirmwareVersion(void); + void setBuzzer(uint16_t freq, uint8_t duty); + void setBuzzerEnable(bool enable); + + protected: + + // UnitGLASS側が応答可能になるまでの待機終了予定時間(Showの後、数msec応答できなくなるため) + uint32_t _msec_busy = 0; + + // 変更のあった箇所を記録するビットフラグ配列。 + // 1ビットあたり 8x8 pixelを割当。 + // 配列1要素で 16x8 = 128pixel 。 + // 要素数が8あるので 縦 8x8 = 64pixel。これで 128x64全体をカバーできる。 + uint16_t _modified_flags[PANEL_HEIGHT_MAX >> 3]; + + bool _enable_buzzer_flg = false; + + void _update_transferred_rect(uint_fast16_t &xs, uint_fast16_t &ys, uint_fast16_t &xe, uint_fast16_t &ye) override; + + void waitBusy(void); + }; + +//---------------------------------------------------------------------------- + } +} diff --git a/src/lgfx/v1/panel/Panel_SSD1306.hpp b/src/lgfx/v1/panel/Panel_SSD1306.hpp index 1da39619..a58a8a11 100644 --- a/src/lgfx/v1/panel/Panel_SSD1306.hpp +++ b/src/lgfx/v1/panel/Panel_SSD1306.hpp @@ -63,7 +63,7 @@ namespace lgfx size_t _get_buffer_length(void) const override; bool _read_pixel(uint_fast16_t x, uint_fast16_t y); void _draw_pixel(uint_fast16_t x, uint_fast16_t y, uint32_t value); - void _update_transferred_rect(uint_fast16_t &xs, uint_fast16_t &ys, uint_fast16_t &xe, uint_fast16_t &ye); + virtual void _update_transferred_rect(uint_fast16_t &xs, uint_fast16_t &ys, uint_fast16_t &xe, uint_fast16_t &ye); }; diff --git a/src/lgfx_user/M5UnitGLASS.hpp b/src/lgfx_user/M5UnitGLASS.hpp new file mode 100644 index 00000000..8f33d7b9 --- /dev/null +++ b/src/lgfx_user/M5UnitGLASS.hpp @@ -0,0 +1,99 @@ +#pragma once + +#define LGFX_USE_V1 +#include +#include + +#if defined ( ARDUINO ) + #include +#endif +#if __has_include( ) + #include +#endif + +#ifndef M5UNITGLASS_SDA + #if defined ( ARDUINO ) + #define M5UNITGLASS_SDA SDA + #elif defined (CONFIG_IDF_TARGET_ESP32S3) + #define M5UNITGLASS_SDA 2 + #elif defined (CONFIG_IDF_TARGET_ESP32C3) + #define M5UNITGLASS_SDA 1 + #else + #define M5UNITGLASS_SDA 21 + #endif +#endif + +#ifndef M5UNITGLASS_SCL + #if defined ( ARDUINO ) + #define M5UNITGLASS_SCL SCL + #elif defined (CONFIG_IDF_TARGET_ESP32S3) + #define M5UNITGLASS_SCL 1 + #elif defined (CONFIG_IDF_TARGET_ESP32C3) + #define M5UNITGLASS_SCL 0 + #else + #define M5UNITGLASS_SCL 22 + #endif +#endif + +#ifndef M5UNITGLASS_ADDR +#define M5UNITGLASS_ADDR 0x3D +#endif + +#ifndef M5UNITGLASS_FREQ +#define M5UNITGLASS_FREQ 400000 +#endif + +class M5UnitGLASS : public lgfx::LGFX_Device +{ + lgfx::Bus_I2C _bus_instance; + lgfx::Panel_M5UnitGlass _panel_instance; + +public: + + M5UnitGLASS(uint8_t pin_sda = M5UNITGLASS_SDA, uint8_t pin_scl = M5UNITGLASS_SCL, uint32_t i2c_freq = M5UNITGLASS_FREQ, int8_t i2c_port = -1, uint8_t i2c_addr = M5UNITGLASS_ADDR) + { + setup(pin_sda, pin_scl, i2c_freq, i2c_port, i2c_addr); + } + + using lgfx::LGFX_Device::init; + bool init(uint8_t pin_sda, uint8_t pin_scl, uint32_t i2c_freq = M5UNITGLASS_FREQ, int8_t i2c_port = -1, uint8_t i2c_addr = M5UNITGLASS_ADDR) + { + setup(pin_sda, pin_scl, i2c_freq, i2c_port, i2c_addr); + return init(); + } + + void setup(uint8_t pin_sda = M5UNITGLASS_SDA, uint8_t pin_scl = M5UNITGLASS_SCL, uint32_t i2c_freq = M5UNITGLASS_FREQ, int8_t i2c_port = -1, uint8_t i2c_addr = M5UNITGLASS_ADDR) + { + if (i2c_port < 0) + { + i2c_port = 0; +#ifdef _M5EPD_H_ + if ((pin_sda == 25 && pin_scl == 32) /// M5Paper + { + i2c_port = 1 + } +#endif + } + + { + auto cfg = _bus_instance.config(); + cfg.freq_write = i2c_freq; + cfg.freq_read = i2c_freq; + cfg.pin_scl = pin_scl; + cfg.pin_sda = pin_sda; + cfg.i2c_port = i2c_port; + cfg.i2c_addr = i2c_addr; + cfg.prefix_len = 0; + _bus_instance.config(cfg); + _panel_instance.bus(&_bus_instance); + } + { + auto cfg = _panel_instance.config(); + cfg.offset_rotation = 3; + _panel_instance.config(cfg); + } + + setPanel(&_panel_instance); + _board = lgfx::board_t::board_M5UnitGLASS; + } +}; From 3d016ad25eefce1fae584ee19474057df88bc2b5 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 16:41:40 +0900 Subject: [PATCH 06/34] Added a process to automatically lower the communication speed of AtomDisplay and ModuleDisplay. ( as a countermeasure for the problem of low communication performance in CoreV2.6 ) --- src/lgfx/v1/panel/Panel_M5HDMI.cpp | 54 +++++++++++++++++++++--------- src/lgfx_user/M5AtomDisplay.hpp | 2 +- src/lgfx_user/M5ModuleDisplay.hpp | 2 +- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/lgfx/v1/panel/Panel_M5HDMI.cpp b/src/lgfx/v1/panel/Panel_M5HDMI.cpp index 318c3314..615b84cc 100644 --- a/src/lgfx/v1/panel/Panel_M5HDMI.cpp +++ b/src/lgfx/v1/panel/Panel_M5HDMI.cpp @@ -494,21 +494,46 @@ namespace lgfx startWrite(); _bus->beginRead(); while (_bus->readData(8) != 0xFF) {} - cs_control(true); - _bus->endRead(); - cs_control(false); - _bus->writeData(CMD_READ_ID, 8); // READ_ID - _bus->beginRead(); - while (_bus->readData(8) == 0xFF) {} - _bus->readData(8); // skip 0xFF - uint32_t data = _bus->readData(32); - (void)data; // suppress compiler warning. - ESP_LOGI(TAG, "FPGA ID:%02x %02x %02x %02x", (uint8_t)data, (uint8_t)(data >> 8), (uint8_t)(data >> 16), (uint8_t)(data >> 24)); - cs_control(true); - _bus->endRead(); - cs_control(false); + endWrite(); + uint32_t fpga_id = ~0u; + + uint32_t apbfreq = lgfx::getApbFrequency(); + uint_fast8_t div_write = apbfreq / (_bus->getClock() + 1) + 1; + uint_fast8_t div_read = apbfreq / (_bus->getReadClock() + 1) + 1; + + for (;;) + { + // ESP_LOGI(TAG, "FREQ:%lu , %lu DIV_W:%lu , %lu", _bus->getClock(), _bus->getReadClock(), div_write, div_read); + startWrite(); + _bus->writeData(CMD_READ_ID, 8); // READ_ID + _bus->beginRead(); + while (_bus->readData(8) == 0xFF) {} + _bus->readData(8); // skip 0xFF + fpga_id = _bus->readData(32); + endWrite(); + + ESP_LOGI(TAG, "FPGA ID:%02x %02x %02x %02x", (uint8_t)fpga_id, (uint8_t)(fpga_id >> 8), (uint8_t)(fpga_id >> 16), (uint8_t)(fpga_id >> 24)); + // 受信したIDの先頭が "HD" なら正常動作 + if (((fpga_id ) & 0xFF) == 'H' + && ((fpga_id >> 8) & 0xFF) == 'D') + { + break; + } + + if (fpga_id == 0 || fpga_id == ~0u) + { // MISOが変化しない場合、コマンドが正しく受理されていないと仮定し送信速度を下げる。 + _bus->setClock(apbfreq / ++div_write); + } + else + { // 受信データの先頭が HD でない場合は受信速度を下げる。 + _bus->setReadClock(apbfreq / ++div_read); + } + } + + startWrite(); bool res = _init_resolution(); + endWrite(); ESP_LOGI(TAG, "Initialize HDMI transmitter..."); if (!driver.init() ) @@ -517,8 +542,7 @@ namespace lgfx return false; } - endWrite(); - + ESP_LOGI(TAG, "done."); return res; } diff --git a/src/lgfx_user/M5AtomDisplay.hpp b/src/lgfx_user/M5AtomDisplay.hpp index 1921f060..65d8537f 100644 --- a/src/lgfx_user/M5AtomDisplay.hpp +++ b/src/lgfx_user/M5AtomDisplay.hpp @@ -106,7 +106,7 @@ class M5AtomDisplay : public lgfx::LGFX_Device { auto cfg = _bus_instance.config(); cfg.freq_write = 80000000; - cfg.freq_read = 20000000; + cfg.freq_read = 16000000; cfg.spi_host = spi_host; cfg.spi_mode = 3; cfg.use_lock = true; diff --git a/src/lgfx_user/M5ModuleDisplay.hpp b/src/lgfx_user/M5ModuleDisplay.hpp index ec00bcb1..330c7866 100644 --- a/src/lgfx_user/M5ModuleDisplay.hpp +++ b/src/lgfx_user/M5ModuleDisplay.hpp @@ -127,7 +127,7 @@ class M5ModuleDisplay : public lgfx::LGFX_Device { auto cfg = _bus_instance.config(); cfg.freq_write = 80000000; - cfg.freq_read = 20000000; + cfg.freq_read = 16000000; cfg.spi_host = spi_host; cfg.spi_mode = 3; cfg.use_lock = true; From ccf5a5365b2767b0b28f70244d75e6010a1fa076 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 16:43:50 +0900 Subject: [PATCH 07/34] fix compile error with ESP-IDF v5 --- src/lgfx/utility/miniz.c | 2 +- src/lgfx/v1/panel/Panel_IT8951.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lgfx/utility/miniz.c b/src/lgfx/utility/miniz.c index 6758e94b..26fbc935 100644 --- a/src/lgfx/utility/miniz.c +++ b/src/lgfx/utility/miniz.c @@ -959,7 +959,7 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64)==8 ? 1 : -1]; #ifdef BOARD_HAS_PSRAM #if __has_include() #include - #else + #elif __has_include() #include #endif #include "soc/efuse_reg.h" diff --git a/src/lgfx/v1/panel/Panel_IT8951.cpp b/src/lgfx/v1/panel/Panel_IT8951.cpp index c69aa66c..fd6927d6 100644 --- a/src/lgfx/v1/panel/Panel_IT8951.cpp +++ b/src/lgfx/v1/panel/Panel_IT8951.cpp @@ -156,12 +156,12 @@ IT8951 Registers defines if (addr != 0 && addr != ~0u) { _tar_memaddr = addr; -#if defined ( ESP_LOGD ) - for (int i = 0; i < 20; ++i) - { - ESP_LOGD("debug", "buf[%d] = %04x : %d", i, buf[i], buf[i]); - } -#endif +// #if defined ( ESP_LOGV ) +// for (int i = 0; i < 20; ++i) +// { +// ESP_LOGV("Panel_IT8951", "buf[%d] = %04x : %d", i, buf[i], buf[i]); +// } +// #endif if (_cfg.panel_width <= 0) { _cfg.panel_width = buf[0]; } if (_cfg.panel_height <= 0) { _cfg.panel_height = buf[1]; } } From 6b4701adc14d0b6e06493a2314e619f70006190b Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 22:25:38 +0900 Subject: [PATCH 08/34] Added argument to specify NACK response at the end of I2C read --- src/lgfx/v1/Bus.hpp | 1 + src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp | 6 +++--- src/lgfx/v1/panel/Panel_SSD1306.cpp | 2 +- src/lgfx/v1/platforms/common.hpp | 2 +- src/lgfx/v1/platforms/esp32/Bus_I2C.cpp | 4 ++-- src/lgfx/v1/platforms/esp32/Bus_I2C.hpp | 3 ++- src/lgfx/v1/platforms/esp32/common.cpp | 17 +++++++++++++---- src/lgfx/v1/platforms/esp8266/Bus_I2C.cpp | 4 ++-- src/lgfx/v1/platforms/esp8266/Bus_I2C.hpp | 3 ++- src/lgfx/v1/platforms/esp8266/common.cpp | 4 ++-- src/lgfx/v1/platforms/rp2040/Bus_I2C.cpp | 4 ++-- src/lgfx/v1/platforms/rp2040/Bus_I2C.hpp | 3 ++- src/lgfx/v1/platforms/rp2040/common.cpp | 2 +- src/lgfx/v1/platforms/samd21/Bus_I2C.cpp | 4 ++-- src/lgfx/v1/platforms/samd21/Bus_I2C.hpp | 3 ++- src/lgfx/v1/platforms/samd21/common.cpp | 4 ++-- src/lgfx/v1/platforms/samd51/Bus_I2C.cpp | 4 ++-- src/lgfx/v1/platforms/samd51/Bus_I2C.hpp | 3 ++- src/lgfx/v1/platforms/samd51/common.cpp | 10 +++++----- src/lgfx/v1/platforms/spresense/common.cpp | 2 +- 20 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/lgfx/v1/Bus.hpp b/src/lgfx/v1/Bus.hpp index 4ad38054..b6c116e1 100644 --- a/src/lgfx/v1/Bus.hpp +++ b/src/lgfx/v1/Bus.hpp @@ -112,6 +112,7 @@ namespace lgfx virtual void endRead(void) = 0; virtual uint32_t readData(uint_fast8_t bit_length) = 0; virtual bool readBytes(uint8_t* dst, uint32_t length, bool use_dma = false) = 0; + virtual bool readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) { return readBytes(dst, length, use_dma); } virtual void readPixels(void* dst, pixelcopy_t* pc, uint32_t length) = 0; }; diff --git a/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp b/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp index 94dfa486..8619aa2f 100644 --- a/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp +++ b/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp @@ -44,7 +44,7 @@ namespace lgfx { _bus->endTransaction(); _bus->beginRead(); - connected = _bus->readBytes(&res, 1); + connected = _bus->readBytes(&res, 1, false, true); } _bus->endTransaction(); } while (!connected && --retry >= 0); @@ -166,7 +166,7 @@ namespace lgfx _bus->endTransaction(); lgfx::delayMicroseconds(384); // データ取得可能になるまで少し待つ _bus->beginRead(); - if (_bus->readBytes(&res, 1)) { retry = 0; } + if (_bus->readBytes(&res, 1, false, true)) { retry = 0; } } _bus->endTransaction(); } while (--retry >= 0); @@ -184,7 +184,7 @@ namespace lgfx { _bus->endTransaction(); _bus->beginRead(); - if (_bus->readBytes(&res, 1)) { retry = 0; } + if (_bus->readBytes(&res, 1, false, true)) { retry = 0; } } _bus->endTransaction(); } while (--retry >= 0); diff --git a/src/lgfx/v1/panel/Panel_SSD1306.cpp b/src/lgfx/v1/panel/Panel_SSD1306.cpp index ce54e367..8a975457 100644 --- a/src/lgfx/v1/panel/Panel_SSD1306.cpp +++ b/src/lgfx/v1/panel/Panel_SSD1306.cpp @@ -76,7 +76,7 @@ namespace lgfx startWrite(true); _bus->beginRead(); uint8_t buf; - bool res = _bus->readBytes(&buf, 1, true); + bool res = _bus->readBytes(&buf, 1, true, true); _bus->endRead(); if (res) diff --git a/src/lgfx/v1/platforms/common.hpp b/src/lgfx/v1/platforms/common.hpp index f534a7e5..d0e8f331 100644 --- a/src/lgfx/v1/platforms/common.hpp +++ b/src/lgfx/v1/platforms/common.hpp @@ -177,7 +177,7 @@ namespace lgfx cpp::result beginTransaction(int i2c_port, int i2c_addr, uint32_t freq, bool read = false); cpp::result endTransaction(int i2c_port); cpp::result writeBytes(int i2c_port, const uint8_t *data, size_t length); - cpp::result readBytes(int i2c_port, uint8_t *data, size_t length); + cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nack = false); //-------- diff --git a/src/lgfx/v1/platforms/esp32/Bus_I2C.cpp b/src/lgfx/v1/platforms/esp32/Bus_I2C.cpp index f3747de5..ec7b50b7 100644 --- a/src/lgfx/v1/platforms/esp32/Bus_I2C.cpp +++ b/src/lgfx/v1/platforms/esp32/Bus_I2C.cpp @@ -237,10 +237,10 @@ namespace lgfx return res; } - bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma) + bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) { beginRead(); - return i2c::readBytes(_cfg.i2c_port, dst, length).has_value(); + return i2c::readBytes(_cfg.i2c_port, dst, length, last_nack).has_value(); } void Bus_I2C::readPixels(void* dst, pixelcopy_t* param, uint32_t length) diff --git a/src/lgfx/v1/platforms/esp32/Bus_I2C.hpp b/src/lgfx/v1/platforms/esp32/Bus_I2C.hpp index 6e3513d1..50b1fcd5 100644 --- a/src/lgfx/v1/platforms/esp32/Bus_I2C.hpp +++ b/src/lgfx/v1/platforms/esp32/Bus_I2C.hpp @@ -71,7 +71,8 @@ namespace lgfx void beginRead(void) override; void endRead(void) override; uint32_t readData(uint_fast8_t bit_length) override; - bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override; + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override { return readBytes(dst, length, use_dma, false); } + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) override; void readPixels(void* dst, pixelcopy_t* param, uint32_t length) override; protected: diff --git a/src/lgfx/v1/platforms/esp32/common.cpp b/src/lgfx/v1/platforms/esp32/common.cpp index b7397c41..bea0bdde 100644 --- a/src/lgfx/v1/platforms/esp32/common.cpp +++ b/src/lgfx/v1/platforms/esp32/common.cpp @@ -624,7 +624,7 @@ namespace lgfx #endif } - static void i2c_set_cmd(i2c_dev_t* dev, uint8_t index, uint8_t op_code, uint8_t byte_num) + static void i2c_set_cmd(i2c_dev_t* dev, uint8_t index, uint8_t op_code, uint8_t byte_num, bool flg_nack = false) { /* typeof(dev->command[0]) cmd; @@ -639,6 +639,9 @@ namespace lgfx || op_code == i2c_cmd_stop) ? 0x100 : 0) // writeおよびstop時はACK_ENを有効にする; | op_code << 11 ; + if (flg_nack && op_code == i2c_cmd_read) { + cmd_val |= (1 << 10); // ACK_VALUE (set NACK) + } #if defined (CONFIG_IDF_TARGET_ESP32S3) (&dev->comd0)[index].val = cmd_val; #else @@ -1142,7 +1145,7 @@ namespace lgfx return res; } - cpp::result readBytes(int i2c_port, uint8_t *readdata, size_t length) + cpp::result readBytes(int i2c_port, uint8_t *readdata, size_t length, bool last_nack) { if (i2c_port >= I2C_NUM_MAX) { return cpp::fail(error_t::invalid_arg); } if (i2c_context[i2c_port].state.has_error()) { return cpp::fail(i2c_context[i2c_port].state.error()); } @@ -1171,8 +1174,14 @@ namespace lgfx ESP_LOGD("LGFX", "i2c read error : ack wait"); break; } - i2c_set_cmd(dev, 0, i2c_cmd_read, len); - i2c_set_cmd(dev, 1, i2c_cmd_end, 0); + + int cmdidx = 0; + if (len > 1) { + i2c_set_cmd(dev, cmdidx++, i2c_cmd_read, len - 1); + } + i2c_set_cmd(dev, cmdidx++, i2c_cmd_read, 1, (last_nack && length == 0)); + i2c_set_cmd(dev, cmdidx, i2c_cmd_end, 0); + updateDev(dev); dev->ctr.trans_start = 1; dev->int_clr.val = intmask; diff --git a/src/lgfx/v1/platforms/esp8266/Bus_I2C.cpp b/src/lgfx/v1/platforms/esp8266/Bus_I2C.cpp index a0cdb273..843c8668 100644 --- a/src/lgfx/v1/platforms/esp8266/Bus_I2C.cpp +++ b/src/lgfx/v1/platforms/esp8266/Bus_I2C.cpp @@ -210,10 +210,10 @@ namespace lgfx return res; } - bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma) + bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) { beginRead(); - return i2c::readBytes(_cfg.i2c_port, dst, length).has_value(); + return i2c::readBytes(_cfg.i2c_port, dst, length, last_nack).has_value(); } void Bus_I2C::readPixels(void* dst, pixelcopy_t* param, uint32_t length) diff --git a/src/lgfx/v1/platforms/esp8266/Bus_I2C.hpp b/src/lgfx/v1/platforms/esp8266/Bus_I2C.hpp index 155ffcfa..19501bf7 100644 --- a/src/lgfx/v1/platforms/esp8266/Bus_I2C.hpp +++ b/src/lgfx/v1/platforms/esp8266/Bus_I2C.hpp @@ -71,7 +71,8 @@ namespace lgfx void beginRead(void) override; void endRead(void) override; uint32_t readData(uint_fast8_t bit_length) override; - bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override; + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override { return readBytes(dst, length, use_dma, false); } + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) override; void readPixels(void* dst, pixelcopy_t* param, uint32_t length) override; protected: diff --git a/src/lgfx/v1/platforms/esp8266/common.cpp b/src/lgfx/v1/platforms/esp8266/common.cpp index efa5dc9b..786196c5 100644 --- a/src/lgfx/v1/platforms/esp8266/common.cpp +++ b/src/lgfx/v1/platforms/esp8266/common.cpp @@ -413,13 +413,13 @@ namespace lgfx } return {}; } - cpp::result readBytes(int i2c_port, uint8_t *data, size_t length) + cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nack) { if (i2c_port >= I2C_NUM_MAX) { return cpp::fail(error_t::invalid_arg); } auto i2c = &i2c_context[i2c_port]; while (length--) { - *data++ = i2c->read_byte(false); + *data++ = i2c->read_byte(last_nack && length == 0); } return {}; } diff --git a/src/lgfx/v1/platforms/rp2040/Bus_I2C.cpp b/src/lgfx/v1/platforms/rp2040/Bus_I2C.cpp index 532f5d48..a60f5624 100644 --- a/src/lgfx/v1/platforms/rp2040/Bus_I2C.cpp +++ b/src/lgfx/v1/platforms/rp2040/Bus_I2C.cpp @@ -210,10 +210,10 @@ namespace lgfx return res; } - bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma) + bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) { beginRead(); - return i2c::readBytes(_cfg.i2c_port, dst, length).has_value(); + return i2c::readBytes(_cfg.i2c_port, dst, length, last_nack).has_value(); } void Bus_I2C::readPixels(void* dst, pixelcopy_t* param, uint32_t length) diff --git a/src/lgfx/v1/platforms/rp2040/Bus_I2C.hpp b/src/lgfx/v1/platforms/rp2040/Bus_I2C.hpp index 155ffcfa..19501bf7 100644 --- a/src/lgfx/v1/platforms/rp2040/Bus_I2C.hpp +++ b/src/lgfx/v1/platforms/rp2040/Bus_I2C.hpp @@ -71,7 +71,8 @@ namespace lgfx void beginRead(void) override; void endRead(void) override; uint32_t readData(uint_fast8_t bit_length) override; - bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override; + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override { return readBytes(dst, length, use_dma, false); } + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) override; void readPixels(void* dst, pixelcopy_t* param, uint32_t length) override; protected: diff --git a/src/lgfx/v1/platforms/rp2040/common.cpp b/src/lgfx/v1/platforms/rp2040/common.cpp index a7a04212..09206ea0 100644 --- a/src/lgfx/v1/platforms/rp2040/common.cpp +++ b/src/lgfx/v1/platforms/rp2040/common.cpp @@ -1056,7 +1056,7 @@ namespace lgfx return {}; } - cpp::result readBytes(int i2c_port, uint8_t *data, size_t length) + cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nack) { volatile i2c_hw_t *const i2c_regs = i2c_dev[i2c_port]; auto info = &i2c_info[i2c_port]; diff --git a/src/lgfx/v1/platforms/samd21/Bus_I2C.cpp b/src/lgfx/v1/platforms/samd21/Bus_I2C.cpp index 05ae2065..db36e69d 100644 --- a/src/lgfx/v1/platforms/samd21/Bus_I2C.cpp +++ b/src/lgfx/v1/platforms/samd21/Bus_I2C.cpp @@ -231,10 +231,10 @@ namespace lgfx return res; } - bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma) + bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) { beginRead(); - return i2c::readBytes(_cfg.sercom_index, dst, length).has_value(); + return i2c::readBytes(_cfg.sercom_index, dst, length, last_nack).has_value(); } void Bus_I2C::readPixels(void* dst, pixelcopy_t* param, uint32_t length) diff --git a/src/lgfx/v1/platforms/samd21/Bus_I2C.hpp b/src/lgfx/v1/platforms/samd21/Bus_I2C.hpp index 9f5de73a..e9155059 100644 --- a/src/lgfx/v1/platforms/samd21/Bus_I2C.hpp +++ b/src/lgfx/v1/platforms/samd21/Bus_I2C.hpp @@ -72,7 +72,8 @@ namespace lgfx void beginRead(void) override; void endRead(void) override; uint32_t readData(uint_fast8_t bit_length) override; - bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override; + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override { return readBytes(dst, length, use_dma, false); } + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) override; void readPixels(void* dst, pixelcopy_t* param, uint32_t length) override; protected: diff --git a/src/lgfx/v1/platforms/samd21/common.cpp b/src/lgfx/v1/platforms/samd21/common.cpp index dff4700a..ad382bf4 100644 --- a/src/lgfx/v1/platforms/samd21/common.cpp +++ b/src/lgfx/v1/platforms/samd21/common.cpp @@ -703,7 +703,7 @@ namespace lgfx return {}; } - cpp::result readBytes(int sercom_index, uint8_t *data, size_t length) + cpp::result readBytes(int sercom_index, uint8_t *data, size_t length, bool last_nack) { auto sercomData = samd21::getSercomData(sercom_index); auto sercom = reinterpret_cast(sercomData->sercomPtr); @@ -721,7 +721,7 @@ namespace lgfx data[i] = readDataMasterWIRE(i2cm); } // 最後はNACKを送信 - i2cm->CTRLB.bit.ACKACT = 0b1; + if (last_nack) { i2cm->CTRLB.bit.ACKACT = 0b1; } data[l] = readDataMasterWIRE(i2cm); return {}; } diff --git a/src/lgfx/v1/platforms/samd51/Bus_I2C.cpp b/src/lgfx/v1/platforms/samd51/Bus_I2C.cpp index fd7b1dc5..1fe6b4e3 100644 --- a/src/lgfx/v1/platforms/samd51/Bus_I2C.cpp +++ b/src/lgfx/v1/platforms/samd51/Bus_I2C.cpp @@ -213,10 +213,10 @@ namespace lgfx return res; } - bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma) + bool Bus_I2C::readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) { beginRead(); - return i2c::readBytes(_cfg.i2c_port, dst, length).has_value(); + return i2c::readBytes(_cfg.i2c_port, dst, length, last_nack).has_value(); } void Bus_I2C::readPixels(void* dst, pixelcopy_t* param, uint32_t length) diff --git a/src/lgfx/v1/platforms/samd51/Bus_I2C.hpp b/src/lgfx/v1/platforms/samd51/Bus_I2C.hpp index 04e4eef5..8f9dc07d 100644 --- a/src/lgfx/v1/platforms/samd51/Bus_I2C.hpp +++ b/src/lgfx/v1/platforms/samd51/Bus_I2C.hpp @@ -71,7 +71,8 @@ namespace lgfx void beginRead(void) override; void endRead(void) override; uint32_t readData(uint_fast8_t bit_length) override; - bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override; + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override { return readBytes(dst, length, use_dma, false); } + bool readBytes(uint8_t* dst, uint32_t length, bool use_dma, bool last_nack) override; void readPixels(void* dst, pixelcopy_t* param, uint32_t length) override; protected: diff --git a/src/lgfx/v1/platforms/samd51/common.cpp b/src/lgfx/v1/platforms/samd51/common.cpp index 97fe544e..16d26f30 100644 --- a/src/lgfx/v1/platforms/samd51/common.cpp +++ b/src/lgfx/v1/platforms/samd51/common.cpp @@ -863,7 +863,7 @@ Serial.println("restart:ok"); return res; } - cpp::result readBytes(int sercom_index, uint8_t *data, size_t length) + cpp::result readBytes(int sercom_index, uint8_t *data, size_t length, bool last_nack = false) { if ((size_t)sercom_index >= SERCOM_INST_NUM) { return cpp::fail(error_t::invalid_arg); } @@ -873,16 +873,16 @@ Serial.println("restart:ok"); auto sercomData = samd51::getSercomData(sercom_index); auto sercom = reinterpret_cast(sercomData->sercomPtr); auto i2cm = &(sercom->I2CM); - do + i2cm->CTRLB.bit.ACKACT = 0b0; + while (length --) { + i2cm->CTRLB.bit.ACKACT = (0 == length) && last_nack; // Prepare Acknowledge while( i2cm->INTFLAG.bit.SB == 0 ) {}; *data++ = i2cm->DATA.bit.DATA; - i2cm->CTRLB.bit.ACKACT = 0; // Prepare Acknowledge - i2cm->CTRLB.bit.CMD = WIRE_MASTER_ACT_READ; // Prepare the ACK command for the slave while (i2cm->SYNCBUSY.bit.SYSOP) {} - } while (--length); + } return {}; /* Serial.println("i2c::readBytes"); diff --git a/src/lgfx/v1/platforms/spresense/common.cpp b/src/lgfx/v1/platforms/spresense/common.cpp index dc12f2c4..32b7c0ca 100644 --- a/src/lgfx/v1/platforms/spresense/common.cpp +++ b/src/lgfx/v1/platforms/spresense/common.cpp @@ -79,7 +79,7 @@ namespace lgfx cpp::result beginTransaction(int , int , uint32_t , bool ) { return cpp::fail(error_t::unknown_err); } cpp::result endTransaction(int ) { return cpp::fail(error_t::unknown_err); } cpp::result writeBytes(int , const uint8_t *, size_t ) { return cpp::fail(error_t::unknown_err); } - cpp::result readBytes(int , uint8_t *, size_t ) { return cpp::fail(error_t::unknown_err); } + cpp::result readBytes(int , uint8_t *, size_t, bool ) { return cpp::fail(error_t::unknown_err); } //-------- From 156b42872a241688079024c7e1c3553ccbcdb8c2 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 22:26:26 +0900 Subject: [PATCH 09/34] Suppress compilation warnings --- src/lgfx/v1/LGFXBase.cpp | 4 ++-- src/lgfx/v1/misc/pixelcopy.cpp | 4 ++-- src/lgfx/v1/misc/pixelcopy.hpp | 18 ++++++++++++------ .../v1/panel/Panel_FlexibleFrameBuffer.cpp | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/lgfx/v1/LGFXBase.cpp b/src/lgfx/v1/LGFXBase.cpp index bfa248e2..d256796e 100644 --- a/src/lgfx/v1/LGFXBase.cpp +++ b/src/lgfx/v1/LGFXBase.cpp @@ -1361,10 +1361,10 @@ namespace lgfx if (left < right) { pc->src_x32 = iA[2] + left * iA[0]; - if (static_cast(pc->src_x) < pc->src_width) + if (static_cast(pc->src_x) < static_cast(pc->src_width)) { pc->src_y32 = iA[5] + left * iA[3]; - if (static_cast(pc->src_y) < pc->src_height) + if (static_cast(pc->src_y) < static_cast(pc->src_height)) { pc->src_x32_add = iA[0]; pc->src_y32_add = iA[3]; diff --git a/src/lgfx/v1/misc/pixelcopy.cpp b/src/lgfx/v1/misc/pixelcopy.cpp index c65fc5fb..708f43ac 100644 --- a/src/lgfx/v1/misc/pixelcopy.cpp +++ b/src/lgfx/v1/misc/pixelcopy.cpp @@ -135,10 +135,10 @@ namespace lgfx { uint32_t alp = 0; uint32_t x = src_x32 >> FP_SCALE; - if (x < param->src_width) + if (x < static_cast(param->src_width)) { uint32_t y = src_y32 >> FP_SCALE; - if (y < param->src_height) + if (y < static_cast(param->src_height)) { uint32_t i = (x + y * src_bitwidth) * src_bits; alp = k * ((pgm_read_byte(&s[i >> 3]) >> (-((int32_t)i + src_bits) & 7)) & param->src_mask); diff --git a/src/lgfx/v1/misc/pixelcopy.hpp b/src/lgfx/v1/misc/pixelcopy.hpp index a047fb2d..c7a2b6dd 100644 --- a/src/lgfx/v1/misc/pixelcopy.hpp +++ b/src/lgfx/v1/misc/pixelcopy.hpp @@ -284,7 +284,10 @@ namespace lgfx int32_t x = param->src_x; int32_t y = param->src_y; - if (param->src_x == param->src_xe && param->src_y == param->src_ye && static_cast(param->src_x) < src_width && static_cast(param->src_y) < src_height) + if (param->src_x == param->src_xe + && param->src_y == param->src_ye + && static_cast(param->src_x) < static_cast(src_width) + && static_cast(param->src_y) < static_cast(src_height)) { uint32_t i = (x + y * src_bitwidth) * src_bits; uint32_t raw = (s[i >> 3] >> (-(int32_t)(i + src_bits) & 7)) & src_mask; @@ -308,8 +311,8 @@ namespace lgfx { uint32_t rate = rate_x * rate_y; argb[4] += rate; - if (static_cast(y) < src_height - && static_cast(x) < src_width) + if (static_cast(y) < static_cast(src_height) + && static_cast(x) < static_cast(src_width)) { uint32_t k = (i + x) * src_bits; uint32_t raw = (s[k >> 3] >> (-(int32_t)(k + src_bits) & 7)) & src_mask; @@ -376,7 +379,10 @@ namespace lgfx int32_t x = param->src_x; int32_t y = param->src_y; auto color = &s[x + y * src_width]; - if (param->src_x == param->src_xe && param->src_y == param->src_ye && static_cast(param->src_x) < src_width && static_cast(param->src_y) < src_height) + if (param->src_x == param->src_xe + && param->src_y == param->src_ye + && static_cast(param->src_x) < static_cast(src_width) + && static_cast(param->src_y) < static_cast(src_height)) { if (!(*color == param->transp)) { @@ -397,8 +403,8 @@ namespace lgfx { uint32_t rate = rate_x * rate_y; argb[4] += rate; - if (static_cast(y) < src_height - && static_cast(x) < src_width + if (static_cast(y) < static_cast(src_height) + && static_cast(x) < static_cast(src_width) && !(*color == param->transp)) { if (std::is_same::value) { rate *= color->A8(); } diff --git a/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp b/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp index 7d7ccd19..7b8f230c 100644 --- a/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp +++ b/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp @@ -115,7 +115,7 @@ namespace lgfx void Panel_FlexibleFrameBuffer::_fill_rect_inner(uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h, uint32_t rawcolor) { h += y; - int ie = x + w; + uint_fast16_t ie = x + w; do { auto i = x; From fda328d3864de8ef5f206da586d5b199c4e98b96 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 22:55:48 +0900 Subject: [PATCH 10/34] Added argument to specify NACK response at the end of I2C read --- src/lgfx/v1/platforms/esp32/common.cpp | 2 +- src/lgfx/v1/platforms/rp2040/common.cpp | 2 +- src/lgfx/v1/platforms/samd21/common.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lgfx/v1/platforms/esp32/common.cpp b/src/lgfx/v1/platforms/esp32/common.cpp index bea0bdde..2c200bb5 100644 --- a/src/lgfx/v1/platforms/esp32/common.cpp +++ b/src/lgfx/v1/platforms/esp32/common.cpp @@ -1145,7 +1145,7 @@ namespace lgfx return res; } - cpp::result readBytes(int i2c_port, uint8_t *readdata, size_t length, bool last_nack) + cpp::result readBytes(int i2c_port, uint8_t *readdata, size_t length, bool last_nack = false) { if (i2c_port >= I2C_NUM_MAX) { return cpp::fail(error_t::invalid_arg); } if (i2c_context[i2c_port].state.has_error()) { return cpp::fail(i2c_context[i2c_port].state.error()); } diff --git a/src/lgfx/v1/platforms/rp2040/common.cpp b/src/lgfx/v1/platforms/rp2040/common.cpp index 09206ea0..96a25024 100644 --- a/src/lgfx/v1/platforms/rp2040/common.cpp +++ b/src/lgfx/v1/platforms/rp2040/common.cpp @@ -1056,7 +1056,7 @@ namespace lgfx return {}; } - cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nack) + cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nack = false) { volatile i2c_hw_t *const i2c_regs = i2c_dev[i2c_port]; auto info = &i2c_info[i2c_port]; diff --git a/src/lgfx/v1/platforms/samd21/common.cpp b/src/lgfx/v1/platforms/samd21/common.cpp index ad382bf4..54200da0 100644 --- a/src/lgfx/v1/platforms/samd21/common.cpp +++ b/src/lgfx/v1/platforms/samd21/common.cpp @@ -703,7 +703,7 @@ namespace lgfx return {}; } - cpp::result readBytes(int sercom_index, uint8_t *data, size_t length, bool last_nack) + cpp::result readBytes(int sercom_index, uint8_t *data, size_t length, bool last_nack = false) { auto sercomData = samd21::getSercomData(sercom_index); auto sercom = reinterpret_cast(sercomData->sercomPtr); From eeb5123b8aa5ab7eac3c61712f1e2630336c2b86 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Tue, 21 Mar 2023 23:18:58 +0900 Subject: [PATCH 11/34] Added argument to specify NACK response at the end of I2C read --- src/lgfx/v1/platforms/esp32/common.cpp | 60 +++++++++++++------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/lgfx/v1/platforms/esp32/common.cpp b/src/lgfx/v1/platforms/esp32/common.cpp index 2c200bb5..cde079ea 100644 --- a/src/lgfx/v1/platforms/esp32/common.cpp +++ b/src/lgfx/v1/platforms/esp32/common.cpp @@ -23,7 +23,7 @@ Original Source: #define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i)>1) ? (((i)* 0x1000) + 0x20000) : (((~(i)) & 1)* 0x1000 ))) #endif -#include "../common.hpp" +#include "common.hpp" #include #include @@ -786,6 +786,35 @@ namespace lgfx return res; } + cpp::result release(int i2c_port) + { + if (i2c_port >= I2C_NUM_MAX) { return cpp::fail(error_t::invalid_arg); } + if (i2c_context[i2c_port].initialized) + { + i2c_context[i2c_port].initialized = false; +#if defined ( ARDUINO ) && defined ( ESP_IDF_VERSION_VAL ) + #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0) + #if defined ARDUINO_ESP32_GIT_VER + #if ARDUINO_ESP32_GIT_VER != 0x44c11981 + auto twowire = ((i2c_port == 1) ? &Wire1 : &Wire); + twowire->end(); + #endif + #endif + #endif +#endif + if ((int)i2c_context[i2c_port].pin_scl >= 0) + { + pinMode(i2c_context[i2c_port].pin_scl, pin_mode_t::input_pullup); + } + if ((int)i2c_context[i2c_port].pin_sda >= 0) + { + pinMode(i2c_context[i2c_port].pin_sda, pin_mode_t::input_pullup); + } + } + + return {}; + } + cpp::result setPins(int i2c_port, int pin_sda, int pin_scl) { if ((i2c_port >= I2C_NUM_MAX) @@ -862,35 +891,6 @@ namespace lgfx return res; } - cpp::result release(int i2c_port) - { - if (i2c_port >= I2C_NUM_MAX) { return cpp::fail(error_t::invalid_arg); } - if (i2c_context[i2c_port].initialized) - { - i2c_context[i2c_port].initialized = false; -#if defined ( ARDUINO ) && defined ( ESP_IDF_VERSION_VAL ) - #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0) - #if defined ARDUINO_ESP32_GIT_VER - #if ARDUINO_ESP32_GIT_VER != 0x44c11981 - auto twowire = ((i2c_port == 1) ? &Wire1 : &Wire); - twowire->end(); - #endif - #endif - #endif -#endif - if ((int)i2c_context[i2c_port].pin_scl >= 0) - { - pinMode(i2c_context[i2c_port].pin_scl, pin_mode_t::input_pullup); - } - if ((int)i2c_context[i2c_port].pin_sda >= 0) - { - pinMode(i2c_context[i2c_port].pin_sda, pin_mode_t::input_pullup); - } - } - - return {}; - } - cpp::result restart(int i2c_port, int i2c_addr, uint32_t freq, bool read) { if (i2c_port >= I2C_NUM_MAX) { return cpp::fail(error_t::invalid_arg); } From f0e7cbd06ebe4c5b5f2e33c0b1b9b4d61913d1a5 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:03:32 +0900 Subject: [PATCH 12/34] Fixed deficiencies in PSRAM cache write-back process. (#374) --- src/lgfx/v1/panel/Panel_FrameBufferBase.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp index d9c7faf7..00e28f46 100644 --- a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp +++ b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp @@ -198,7 +198,7 @@ namespace lgfx uint_fast16_t ye = _ye; uint_fast16_t x = _xpos; uint_fast16_t y = _ypos; - // const size_t bits = _write_bits; + const size_t bytes = _write_bits >> 3; // auto k = _bitwidth * bits >> 3; uint_fast8_t r = _internal_rotation; @@ -207,7 +207,10 @@ namespace lgfx uint_fast16_t linelength; do { linelength = std::min(xe - x + 1, length); - param->fp_copy(_lines_buffer[y], x, x + linelength, param); + auto ptr = &_lines_buffer[y][x * bytes]; + param->fp_copy(ptr, 0, linelength, param); + cacheWriteBack(ptr, bytes * linelength); + if ((x += linelength) > xe) { x = xs; @@ -242,6 +245,7 @@ namespace lgfx } else { + int w = abs((int)(xe - xs)) + 1; do { param->fp_copy(_lines_buffer[y], x, x + 1, param); @@ -252,6 +256,7 @@ namespace lgfx else { x = xs; + cacheWriteBack(&_lines_buffer[y][x], bytes * w); y = (y != ye) ? (y + ay) : ys; } } while (--length); @@ -277,6 +282,7 @@ namespace lgfx do { memcpy(&_lines_buffer[y][x], src, w); + cacheWriteBack(&_lines_buffer[y][x], w); src += sw; } while (++y != h); return; @@ -290,6 +296,7 @@ namespace lgfx } uint32_t sx32 = param->src_x32; uint32_t sy32 = param->src_y32; + uint_fast8_t bytes = _write_bits >> 3; h += y; do { @@ -299,6 +306,8 @@ namespace lgfx && end != (pos = param->fp_skip( pos, end, param))); param->src_x32 = (sx32 += nextx); param->src_y32 = (sy32 += nexty); + auto ptr = &_lines_buffer[y][x * bytes]; + cacheWriteBack(ptr, bytes * end); } while (++y != h); } @@ -316,9 +325,11 @@ namespace lgfx uint32_t pos = x; uint32_t end = pos + w; h += y; + uint_fast16_t wbytes = (w * _write_bits) >> 3; do { param->fp_copy(_lines_buffer[y], pos, end, param); + cacheWriteBack(&_lines_buffer[y][pos], wbytes); param->src_x32 = (sx32 += nextx); param->src_y32 = (sy32 += nexty); } while (++y < h); From 799a33f284d494c338775a482651a7fcb6af91ca Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:06:26 +0900 Subject: [PATCH 13/34] tweak setting sample --- src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h b/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h index 937d319e..15b0bf01 100644 --- a/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h +++ b/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h @@ -5,6 +5,8 @@ #include #include +#include + class LGFX : public lgfx::LGFX_Device { public: From 7be357598d355a395c15ebc58737d40fcc27cef0 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:30:24 +0900 Subject: [PATCH 14/34] Adjust UnitGLASS processing wait time --- src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp b/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp index 8619aa2f..c3079c16 100644 --- a/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp +++ b/src/lgfx/v1/panel/Panel_M5UnitGLASS.cpp @@ -140,7 +140,7 @@ namespace lgfx _bus->writeCommand(REG_INDEX_DRAW_PICTURE | x_start << 8 | y << (3 + 16), 24); _bus->writeCommand(index | 1 << (3+8) | 1 << 16, 24); _bus->endTransaction(); - lgfx::delayMicroseconds(index << 3); // 描画が終わるまで少し待つ + lgfx::delayMicroseconds(index << 5); // 描画が終わるまで少し待つ index = 0; } } @@ -164,12 +164,13 @@ namespace lgfx if (_bus->writeCommand(REG_INDEX_READ_KEY + (idx & 1), 8)) { _bus->endTransaction(); - lgfx::delayMicroseconds(384); // データ取得可能になるまで少し待つ + lgfx::delayMicroseconds(512); // データ取得可能になるまで少し待つ _bus->beginRead(); if (_bus->readBytes(&res, 1, false, true)) { retry = 0; } } _bus->endTransaction(); } while (--retry >= 0); + _msec_busy = lgfx::millis() + 1; return res; } @@ -188,6 +189,7 @@ namespace lgfx } _bus->endTransaction(); } while (--retry >= 0); + _msec_busy = lgfx::millis() + 1; return res; } @@ -197,6 +199,7 @@ namespace lgfx _bus->writeCommand(REG_INDEX_BUZZER, 8); _bus->writeCommand(freq | duty << 16 | _enable_buzzer_flg << 24, 32); _bus->endTransaction(); + _msec_busy = lgfx::millis() + 1; } void Panel_M5UnitGlass::setBuzzerEnable(bool enable) { @@ -205,6 +208,7 @@ namespace lgfx _bus->beginTransaction(); _bus->writeCommand((REG_INDEX_BUZZER + 3) | enable << 8, 16); _bus->endTransaction(); + _msec_busy = lgfx::millis() + 1; } void Panel_M5UnitGlass::waitBusy(void) From 0d6c2fc4ab9089b909f3880c48a1159fb94e6ba0 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:31:17 +0900 Subject: [PATCH 15/34] Adjustment of I2C communication parameters for ESP32 --- src/lgfx/v1/platforms/esp32/common.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lgfx/v1/platforms/esp32/common.cpp b/src/lgfx/v1/platforms/esp32/common.cpp index cde079ea..7543c74e 100644 --- a/src/lgfx/v1/platforms/esp32/common.cpp +++ b/src/lgfx/v1/platforms/esp32/common.cpp @@ -979,7 +979,7 @@ namespace lgfx #endif uint32_t period_total = cycle - scl_high_offset - 1; - uint32_t scl_high_period = std::max(18, (period_total-10) >> 1); + uint32_t scl_high_period = std::max(18, (period_total + 1) >> 1); uint32_t scl_low_period = period_total - scl_high_period; if (freq > 400000) { @@ -996,7 +996,7 @@ namespace lgfx dev->scl_high_period.scl_high_period = scl_high_period - wait_high; dev->scl_high_period.scl_wait_high_period = wait_high; dev->scl_low_period .scl_low_period = scl_low_period ; - dev->sda_hold.sda_hold_time = std::min(1023u, (scl_high_period >> 1)); + dev->sda_hold.sda_hold_time = std::min(1023u, (scl_high_period >> 4)+1); dev->sda_sample.sda_sample_time = std::min(1023u, (scl_low_period >> 1)); dev->scl_stop_hold.scl_stop_hold_time = cycle << 1; //the clock num after the STOP bit's posedge dev->scl_stop_setup.scl_stop_setup_time = cycle; //the clock num between the posedge of SCL and the posedge of SDA @@ -1005,9 +1005,9 @@ namespace lgfx #else #if defined ( I2C_SCL_WAIT_HIGH_PERIOD ) - auto wait_high = scl_high_period >> 2; - dev->scl_high_period.period = scl_high_period - wait_high; - dev->scl_high_period.scl_wait_high_period = wait_high; + auto high_period = 1 + (scl_high_period >> 3); + dev->scl_high_period.period = high_period; + dev->scl_high_period.scl_wait_high_period = scl_high_period - high_period; #else dev->scl_high_period.period = scl_high_period; #endif @@ -1158,7 +1158,7 @@ namespace lgfx auto dev = getDev(i2c_port); size_t len = 0; #if defined ( CONFIG_IDF_TARGET_ESP32S3 ) - uint32_t us_limit = ((dev->scl_high_period.scl_high_period + dev->scl_low_period.scl_low_period) << 1) + 16; + uint32_t us_limit = ((dev->scl_high_period.scl_high_period + dev->scl_high_period.scl_wait_high_period + dev->scl_low_period.scl_low_period) << 1) + 16; #elif defined ( CONFIG_IDF_TARGET_ESP32C3 ) uint32_t us_limit = ((dev->scl_high_period.period + dev->scl_low_period.period) << 1) + 16; #else From 0629d7a7d697a1bdc8a2dd9b2ddc43cba710d027 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:32:45 +0900 Subject: [PATCH 16/34] Fixed omission in implementation of PSRAM write-back function in combination of ESP32S3 + RGB panel --- src/lgfx/v1/panel/Panel_FrameBufferBase.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp index 00e28f46..0d0f4225 100644 --- a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp +++ b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp @@ -420,6 +420,7 @@ namespace lgfx uint8_t* dst = &_lines_buffer[dst_y + pos][dst_x * bytes]; memcpy(buf, src, len); memcpy(dst, buf, len); + cacheWriteBack(dst, len); pos += add; } while (--h); } From ddf30955630d247cc766ee7d6cb3bcbc456c4dc0 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Wed, 29 Mar 2023 09:53:56 +0900 Subject: [PATCH 17/34] Avoid compiler warnings. ( #380 ) --- src/lgfx/v1/misc/pixelcopy.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lgfx/v1/misc/pixelcopy.cpp b/src/lgfx/v1/misc/pixelcopy.cpp index 708f43ac..a9a99996 100644 --- a/src/lgfx/v1/misc/pixelcopy.cpp +++ b/src/lgfx/v1/misc/pixelcopy.cpp @@ -36,8 +36,8 @@ namespace lgfx , dst_depth ( dst_depth_ ) , src_data ( src_data_ ) , palette ( src_palette_) - , src_mask ( (1 << src_bits) - 1 ) - , dst_mask ( (1 << dst_bits) - 1 ) + , src_mask ( (1 << (src_depth_ & color_depth_t::bit_mask)) - 1 ) + , dst_mask ( (1 << (dst_depth_ & color_depth_t::bit_mask)) - 1 ) , no_convert( src_depth_ == dst_depth_ ) { if (dst_palette_ || dst_bits < 8) { From b7d0ccb1a842409595bfb3a1c390cd8dcf55cea0 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Wed, 29 Mar 2023 10:37:10 +0900 Subject: [PATCH 18/34] The backlight lighting process at startup has been modified so that noise is not displayed. ( #377 ) --- src/lgfx/v1/panel/Panel_ST7796.hpp | 2 +- src/lgfx/v1/platforms/esp32/Light_PWM.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lgfx/v1/panel/Panel_ST7796.hpp b/src/lgfx/v1/panel/Panel_ST7796.hpp index d35e17cb..ec6af780 100644 --- a/src/lgfx/v1/panel/Panel_ST7796.hpp +++ b/src/lgfx/v1/panel/Panel_ST7796.hpp @@ -84,7 +84,7 @@ namespace lgfx CMD_SLPOUT, 0+CMD_INIT_DELAY, 130, // Exit sleep mode CMD_IDMOFF, 0, - CMD_DISPON, 0+CMD_INIT_DELAY, 100, + CMD_DISPON, 0, 0xFF,0xFF, // end }; switch (listno) { diff --git a/src/lgfx/v1/platforms/esp32/Light_PWM.cpp b/src/lgfx/v1/platforms/esp32/Light_PWM.cpp index 17c4158a..f2a7e406 100644 --- a/src/lgfx/v1/platforms/esp32/Light_PWM.cpp +++ b/src/lgfx/v1/platforms/esp32/Light_PWM.cpp @@ -38,8 +38,8 @@ namespace lgfx #if defined ( ARDUINO ) ledcSetup(_cfg.pwm_channel, _cfg.freq, 8); - setBrightness(brightness); ledcAttachPin(_cfg.pin_bl, _cfg.pwm_channel); + setBrightness(brightness); #else From 6d9085af05d60898ceb5d44a3ef1667ba58aa35b Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Sun, 2 Apr 2023 10:08:23 +0900 Subject: [PATCH 19/34] Fixed bug in ESP32 I2C communication. ( #382 ) --- src/lgfx/v1/platforms/esp32/common.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lgfx/v1/platforms/esp32/common.cpp b/src/lgfx/v1/platforms/esp32/common.cpp index 7543c74e..6877afb8 100644 --- a/src/lgfx/v1/platforms/esp32/common.cpp +++ b/src/lgfx/v1/platforms/esp32/common.cpp @@ -1176,10 +1176,16 @@ namespace lgfx } int cmdidx = 0; - if (len > 1) { - i2c_set_cmd(dev, cmdidx++, i2c_cmd_read, len - 1); + if (length == 0 && last_nack) { + if (len > 1) { + i2c_set_cmd(dev, cmdidx++, i2c_cmd_read, len - 1); + } + i2c_set_cmd(dev, cmdidx++, i2c_cmd_read, 1, true); + } + else + { + i2c_set_cmd(dev, cmdidx++, i2c_cmd_read, len); } - i2c_set_cmd(dev, cmdidx++, i2c_cmd_read, 1, (last_nack && length == 0)); i2c_set_cmd(dev, cmdidx, i2c_cmd_end, 0); updateDev(dev); From 3f649468cfeac8a82c94c00b6eb86e39cacb290d Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Sun, 2 Apr 2023 16:04:15 +0900 Subject: [PATCH 20/34] Implement ARGB transfer for HUB75 --- .../v1/panel/Panel_FlexibleFrameBuffer.cpp | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp b/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp index 7b8f230c..6288b321 100644 --- a/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp +++ b/src/lgfx/v1/panel/Panel_FlexibleFrameBuffer.cpp @@ -246,7 +246,61 @@ namespace lgfx void Panel_FlexibleFrameBuffer::writeImageARGB(uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h, pixelcopy_t* param) { - //ToDo:implement + auto src_x = param->src_x; + auto buffer = reinterpret_cast(const_cast(param->src_data)); + auto bytes = param->dst_bits >> 3; +// ESP_LOGI("LGFX","DEBUG: %d %d", param->dst_bits, bytes); + // uint8_t* dmabuf = _bus->getFlipBuffer(w * bytes); + // memset(dmabuf, 0, w * bytes); + // param->fp_copy(dmabuf, 0, w, param); + // setWindow(x, y, x + w - 1, y); + // writeBytes(dmabuf, w * bytes, true); + // return; + pixelcopy_t pc_read(nullptr, _write_depth, _read_depth); + pixelcopy_t pc_write(nullptr, _write_depth, _write_depth); + auto dmabuf = (uint8_t*)alloca((w+1) * bytes); + pc_write.src_data = dmabuf; + for (;;) + { + uint32_t xstart = 0, drawed_x = 0; + do + { + uint_fast8_t a = buffer[xstart].a; + if (!a) + { + if (drawed_x < xstart) + { + param->src_x = drawed_x; + param->fp_copy(dmabuf, drawed_x, xstart, param); + + pc_write.src_x = drawed_x; + writeImage(x + drawed_x, y, xstart - drawed_x, 1, &pc_write, true); + } + drawed_x = xstart + 1; + } + else + { + while (255 == buffer[xstart].a && ++xstart != w); + if (xstart == w) break; + uint32_t j = xstart; + while (++j != w && buffer[j].a && buffer[j].a != 255); + readRect(x + xstart, y, j - xstart + 1, 1, &dmabuf[xstart * bytes], &pc_read); + if (w == (xstart = j)) break; + } + } while (++xstart != w); + if (drawed_x < xstart) + { + param->src_x = drawed_x; + param->fp_copy(dmabuf, drawed_x, xstart, param); + + pc_write.src_x = drawed_x; + writeImage(x + drawed_x, y, xstart - drawed_x, 1, &pc_write, true); + } + if (!--h) return; + param->src_x = src_x; + param->src_y++; + ++y; + } } void Panel_FlexibleFrameBuffer::readRect(uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h, void* dst, pixelcopy_t* param) From 5b5a13cf2733b6c3ef860329b20ee48078f1899a Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Sun, 2 Apr 2023 18:41:23 +0900 Subject: [PATCH 21/34] add LVGL demo example --- .../Advanced/LVGL_PlatformIO/platformio.ini | 24 + .../Advanced/LVGL_PlatformIO/src/lv_conf.h | 677 ++++++++++++++++++ .../LVGL_PlatformIO/src/lv_demo_conf.h | 58 ++ .../Advanced/LVGL_PlatformIO/src/main.cpp | 92 +++ 4 files changed, 851 insertions(+) create mode 100644 examples/Advanced/LVGL_PlatformIO/platformio.ini create mode 100644 examples/Advanced/LVGL_PlatformIO/src/lv_conf.h create mode 100644 examples/Advanced/LVGL_PlatformIO/src/lv_demo_conf.h create mode 100644 examples/Advanced/LVGL_PlatformIO/src/main.cpp diff --git a/examples/Advanced/LVGL_PlatformIO/platformio.ini b/examples/Advanced/LVGL_PlatformIO/platformio.ini new file mode 100644 index 00000000..6d96bdec --- /dev/null +++ b/examples/Advanced/LVGL_PlatformIO/platformio.ini @@ -0,0 +1,24 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:m5stack-core2] +platform = espressif32 +board = m5stack-core2 +framework = arduino +monitor_speed = 115200 +build_flags = + -Isrc/ + -DLV_CONF_INCLUDE_SIMPLE + -DLV_DEMO_CONF_INCLUDE_SIMPLE + -DLV_USE_DEMO_BENCHMARK +lib_deps = + lovyan03/LovyanGFX + lvgl/lvgl@^8.3.4 + lvgl/lv_demos@^8.1.0 diff --git a/examples/Advanced/LVGL_PlatformIO/src/lv_conf.h b/examples/Advanced/LVGL_PlatformIO/src/lv_conf.h new file mode 100644 index 00000000..a3ff2c9f --- /dev/null +++ b/examples/Advanced/LVGL_PlatformIO/src/lv_conf.h @@ -0,0 +1,677 @@ +/** + * @file lv_conf.h + * Configuration file for v8.3.0-dev + */ + +/* + * Copy this file as `lv_conf.h` + * 1. simply next to the `lvgl` folder + * 2. or any other places and + * - define `LV_CONF_INCLUDE_SIMPLE` + * - add the path as include path + */ + +/* clang-format off */ +#if 1 /*Set it to "1" to enable content*/ + +#ifndef LV_CONF_H +#define LV_CONF_H + +#include + +/*==================== + COLOR SETTINGS + *====================*/ + +/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/ +#define LV_COLOR_DEPTH 16 + +/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/ +#define LV_COLOR_16_SWAP 1 + +/*Enable more complex drawing routines to manage screens transparency. + *Can be used if the UI is above another layer, e.g. an OSD menu or video player. + *Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to non LV_OPA_COVER value*/ +#define LV_COLOR_SCREEN_TRANSP 0 + +/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. + * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS (LV_COLOR_DEPTH == 32 ? 0: 128) + +/*Images pixels with this color will not be drawn if they are chroma keyed)*/ +#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) /*pure green*/ + +/*========================= + MEMORY SETTINGS + *=========================*/ + +/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/ +#define LV_MEM_CUSTOM 0 +#if LV_MEM_CUSTOM == 0 + /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ + #define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/ + + /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ + #define LV_MEM_ADR 0 /*0: unused*/ + /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ + #if LV_MEM_ADR == 0 + //#define LV_MEM_POOL_INCLUDE your_alloc_library /* Uncomment if using an external allocator*/ + //#define LV_MEM_POOL_ALLOC your_alloc /* Uncomment if using an external allocator*/ + #endif + +#else /*LV_MEM_CUSTOM*/ + #define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ + #define LV_MEM_CUSTOM_ALLOC malloc + #define LV_MEM_CUSTOM_FREE free + #define LV_MEM_CUSTOM_REALLOC realloc +#endif /*LV_MEM_CUSTOM*/ + +/*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms. + *You will see an error log message if there wasn't enough buffers. */ +#define LV_MEM_BUF_MAX_NUM 16 + +/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/ +#define LV_MEMCPY_MEMSET_STD 0 + +/*==================== + HAL SETTINGS + *====================*/ + +/*Default display refresh period. LVG will redraw changed areas with this period time*/ +#define LV_DISP_DEF_REFR_PERIOD 16 /*[ms]*/ + +/*Input device read period in milliseconds*/ +#define LV_INDEV_DEF_READ_PERIOD 30 /*[ms]*/ + +/*Use a custom tick source that tells the elapsed time in milliseconds. + *It removes the need to manually update the tick with `lv_tick_inc()`)*/ +#define LV_TICK_CUSTOM 1 +#if LV_TICK_CUSTOM + #define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/ + #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/ +#endif /*LV_TICK_CUSTOM*/ + +/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. + *(Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI_DEF 130 /*[px/inch]*/ + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + +/*------------- + * Drawing + *-----------*/ + +/*Enable complex draw engine. + *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/ +#define LV_DRAW_COMPLEX 1 +#if LV_DRAW_COMPLEX != 0 + + /*Allow buffering some shadow calculation. + *LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` + *Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/ + #define LV_SHADOW_CACHE_SIZE 0 + + /* Set number of maximally cached circle data. + * The circumference of 1/4 circle are saved for anti-aliasing + * radius * 4 bytes are used per circle (the most often used radiuses are saved) + * 0: to disable caching */ + #define LV_CIRCLE_CACHE_SIZE 4 +#endif /*LV_DRAW_COMPLEX*/ + +/*Default image cache size. Image caching keeps the images opened. + *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added) + *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. + *However the opened images might consume additional RAM. + *0: to disable caching*/ +#define LV_IMG_CACHE_DEF_SIZE 0 + +/*Number of stops allowed per gradient. Increase this to allow more stops. + *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ +#define LV_GRADIENT_MAX_STOPS 2 + +/*Default gradient buffer size. + *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. + *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. + *If the cache is too small the map will be allocated only while it's required for the drawing. + *0 mean no caching.*/ +#define LV_GRAD_CACHE_DEF_SIZE 0 + +/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) + *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface + *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ +#define LV_DITHER_GRADIENT 0 +#if LV_DITHER_GRADIENT + /*Add support for error diffusion dithering. + *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. + *The increase in memory consumption is (24 bits * object's width)*/ + #define LV_DITHER_ERROR_DIFFUSION 0 +#endif + +/*Maximum buffer size to allocate for rotation. + *Only used if software rotation is enabled in the display driver.*/ +#define LV_DISP_ROT_MAX_BUF (10*1024) + +/*------------- + * GPU + *-----------*/ + +/*Use Arm's 2D acceleration library Arm-2D */ +#define LV_USE_GPU_ARM2D 0 + +/*Use STM32's DMA2D (aka Chrom Art) GPU*/ +#define LV_USE_GPU_STM32_DMA2D 0 +#if LV_USE_GPU_STM32_DMA2D + /*Must be defined to include path of CMSIS header of target processor + e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ + #define LV_GPU_DMA2D_CMSIS_INCLUDE +#endif + +/*Use NXP's PXP GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_PXP 0 +#if LV_USE_GPU_NXP_PXP + /*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) + * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS + * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. + *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() + */ + #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +#endif + +/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_VG_LITE 0 + +/*Use SDL renderer API*/ +#define LV_USE_GPU_SDL 0 +#if LV_USE_GPU_SDL + #define LV_GPU_SDL_INCLUDE_PATH + /*Texture cache size, 8MB by default*/ + #define LV_GPU_SDL_LRU_SIZE (1024 * 1024 * 8) + /*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/ + #define LV_GPU_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6)) +#endif + +/*------------- + * Logging + *-----------*/ + +/*Enable the log module*/ +#define LV_USE_LOG 0 +#if LV_USE_LOG + + /*How important log should be added: + *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information + *LV_LOG_LEVEL_INFO Log important events + *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem + *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail + *LV_LOG_LEVEL_USER Only logs added by the user + *LV_LOG_LEVEL_NONE Do not log anything*/ + #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN + + /*1: Print the log with 'printf'; + *0: User need to register a callback with `lv_log_register_print_cb()`*/ + #define LV_LOG_PRINTF 0 + + /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ + #define LV_LOG_TRACE_MEM 1 + #define LV_LOG_TRACE_TIMER 1 + #define LV_LOG_TRACE_INDEV 1 + #define LV_LOG_TRACE_DISP_REFR 1 + #define LV_LOG_TRACE_EVENT 1 + #define LV_LOG_TRACE_OBJ_CREATE 1 + #define LV_LOG_TRACE_LAYOUT 1 + #define LV_LOG_TRACE_ANIM 1 + +#endif /*LV_USE_LOG*/ + +/*------------- + * Asserts + *-----------*/ + +/*Enable asserts if an operation is failed or an invalid data is found. + *If LV_USE_LOG is enabled an error message will be printed on failure*/ +#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ +#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ +#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ + +/*Add a custom handler when assert happens e.g. to restart the MCU*/ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /*Halt by default*/ + +/*------------- + * Others + *-----------*/ + +/*1: Show CPU usage and FPS count*/ +#define LV_USE_PERF_MONITOR 0 +#if LV_USE_PERF_MONITOR + #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT +#endif + +/*1: Show the used memory and the memory fragmentation + * Requires LV_MEM_CUSTOM = 0*/ +#define LV_USE_MEM_MONITOR 0 +#if LV_USE_MEM_MONITOR + #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT +#endif + +/*1: Draw random colored rectangles over the redrawn areas*/ +#define LV_USE_REFR_DEBUG 0 + +/*Change the built in (v)snprintf functions*/ +#define LV_SPRINTF_CUSTOM 0 +#if LV_SPRINTF_CUSTOM + #define LV_SPRINTF_INCLUDE + #define lv_snprintf snprintf + #define lv_vsnprintf vsnprintf +#else /*LV_SPRINTF_CUSTOM*/ + #define LV_SPRINTF_USE_FLOAT 0 +#endif /*LV_SPRINTF_CUSTOM*/ + +#define LV_USE_USER_DATA 1 + +/*Garbage Collector settings + *Used if lvgl is bound to higher level language and the memory is managed by that language*/ +#define LV_ENABLE_GC 0 +#if LV_ENABLE_GC != 0 + #define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ +#endif /*LV_ENABLE_GC*/ + +/*===================== + * COMPILER SETTINGS + *====================*/ + +/*For big endian systems set to 1*/ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/*Define a custom attribute to `lv_tick_inc` function*/ +#define LV_ATTRIBUTE_TICK_INC + +/*Define a custom attribute to `lv_timer_handler` function*/ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/*Define a custom attribute to `lv_disp_flush_ready` function*/ +#define LV_ATTRIBUTE_FLUSH_READY + +/*Required alignment size for buffers*/ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). + * E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/*Attribute to mark large constant arrays for example font's bitmaps*/ +#define LV_ATTRIBUTE_LARGE_CONST + +/*Compiler prefix for a big array declaration in RAM*/ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/*Place performance critical functions into a faster memory (e.g RAM)*/ +#define LV_ATTRIBUTE_FAST_MEM + +/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/ +#define LV_ATTRIBUTE_DMA + +/*Export integer constant to binding. This macro is used with constants in the form of LV_ that + *should also appear on LVGL binding API such as Micropython.*/ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ + +/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/ +#define LV_USE_LARGE_COORD 0 + +/*================== + * FONT USAGE + *===================*/ + +/*Montserrat fonts with ASCII range and some symbols using bpp = 4 + *https://fonts.google.com/specimen/Montserrat*/ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 0 +#define LV_FONT_MONTSERRAT_12 1 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 1 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 0 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/*Demonstrate special features*/ +#define LV_FONT_MONTSERRAT_12_SUBPX 0 +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/ +#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ + +/*Pixel perfect monospace fonts*/ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/*Optionally declare custom fonts here. + *You can use these fonts as default font too and they will be available globally. + *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ +#define LV_FONT_CUSTOM_DECLARE + +/*Always set a default font*/ +#define LV_FONT_DEFAULT &lv_font_montserrat_14 + +/*Enable handling large font and/or fonts with a lot of characters. + *The limit depends on the font size, font face and bpp. + *Compiler error will be triggered if a font needs it.*/ +#define LV_FONT_FMT_TXT_LARGE 0 + +/*Enables/disables support for compressed fonts.*/ +#define LV_USE_FONT_COMPRESSED 0 + +/*Enable subpixel rendering*/ +#define LV_USE_FONT_SUBPX 0 +#if LV_USE_FONT_SUBPX + /*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/ + #define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ +#endif + +/*================= + * TEXT SETTINGS + *=================*/ + +/** + * Select a character encoding for strings. + * Your IDE or editor should have the same character encoding + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_" + +/*If a word is at least this long, will break wherever "prettiest" + *To disable, set to a value <= 0*/ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/*Minimum number of characters in a long word to put on a line before a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/*Minimum number of characters in a long word to put on a line after a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/*The control character to use for signalling text recoloring.*/ +#define LV_TXT_COLOR_CMD "#" + +/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. + *The direction will be processed according to the Unicode Bidirectional Algorithm: + *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI + /*Set the default direction. Supported values: + *`LV_BASE_DIR_LTR` Left-to-Right + *`LV_BASE_DIR_RTL` Right-to-Left + *`LV_BASE_DIR_AUTO` detect texts base direction*/ + #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/*Enable Arabic/Persian processing + *In these languages characters should be replaced with an other form based on their position in the text*/ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*================== + * WIDGET USAGE + *================*/ + +/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ + +#define LV_USE_ARC 1 + +#define LV_USE_ANIMIMG 1 + +#define LV_USE_BAR 1 + +#define LV_USE_BTN 1 + +#define LV_USE_BTNMATRIX 1 + +#define LV_USE_CANVAS 1 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/ + +#define LV_USE_IMG 1 /*Requires: lv_label*/ + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL + #define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ + #define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ +#endif + +#define LV_USE_LINE 1 + +#define LV_USE_ROLLER 1 /*Requires: lv_label*/ +#if LV_USE_ROLLER + #define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/ +#endif + +#define LV_USE_SLIDER 1 /*Requires: lv_bar*/ + +#define LV_USE_SWITCH 1 + +#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +#define LV_USE_TABLE 1 + +/*================== + * EXTRA COMPONENTS + *==================*/ + +/*----------- + * Widgets + *----------*/ +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR + #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 + #if LV_CALENDAR_WEEK_STARTS_MONDAY + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} + #else + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} + #endif + + #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} + #define LV_USE_CALENDAR_HEADER_ARROW 1 + #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CHART 1 + +#define LV_USE_COLORWHEEL 1 + +#define LV_USE_IMGBTN 1 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LED 1 + +#define LV_USE_LIST 1 + +#define LV_USE_MENU 1 + +#define LV_USE_METER 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_SPINBOX 1 + +#define LV_USE_SPINNER 1 + +#define LV_USE_TABVIEW 1 + +#define LV_USE_TILEVIEW 1 + +#define LV_USE_WIN 1 + +#define LV_USE_SPAN 1 +#if LV_USE_SPAN + /*A line text can contain maximum num of span descriptor */ + #define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +/*----------- + * Themes + *----------*/ + +/*A simple, impressive and very complete theme*/ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + + /*0: Light mode; 1: Dark mode*/ + #define LV_THEME_DEFAULT_DARK 0 + + /*1: Enable grow on press*/ + #define LV_THEME_DEFAULT_GROW 1 + + /*Default transition time in [ms]*/ + #define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/*A very simple theme that is a good starting point for a custom theme*/ +#define LV_USE_THEME_BASIC 1 + +/*A theme designed for monochrome displays*/ +#define LV_USE_THEME_MONO 1 + +/*----------- + * Layouts + *----------*/ + +/*A layout similar to Flexbox in CSS.*/ +#define LV_USE_FLEX 1 + +/*A layout similar to Grid in CSS.*/ +#define LV_USE_GRID 1 + +/*--------------------- + * 3rd party libraries + *--------------------*/ + +/*File system interfaces for common APIs */ + +/*API for fopen, fread, etc*/ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO + #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for open, read, etc*/ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX + #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for CreateFile, ReadFile, etc*/ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 + #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS + #define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*PNG decoder library*/ +#define LV_USE_PNG 0 + +/*BMP decoder library*/ +#define LV_USE_BMP 0 + +/* JPG + split JPG decoder library. + * Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_SJPG 0 + +/*GIF decoder library*/ +#define LV_USE_GIF 0 + +/*QR code library*/ +#define LV_USE_QRCODE 0 + +/*FreeType library*/ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE + /*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/ + #define LV_FREETYPE_CACHE_SIZE (16 * 1024) + #if LV_FREETYPE_CACHE_SIZE >= 0 + /* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */ + /* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */ + /* if font size >= 256, must be configured as image cache */ + #define LV_FREETYPE_SBIT_CACHE 0 + /* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ + /* (0:use system defaults) */ + #define LV_FREETYPE_CACHE_FT_FACES 0 + #define LV_FREETYPE_CACHE_FT_SIZES 0 + #endif +#endif + +/*Rlottie library*/ +#define LV_USE_RLOTTIE 0 + +/*FFmpeg library for image decoding and playing videos + *Supports all major image formats so do not enable other image decoder with it*/ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG + /*Dump input information to stderr*/ + #define LV_FFMPEG_AV_DUMP_FORMAT 0 +#endif + +/*----------- + * Others + *----------*/ + +/*1: Enable API to take snapshot for object*/ +#define LV_USE_SNAPSHOT 0 + +/*1: Enable Monkey test*/ +#define LV_USE_MONKEY 0 + +/*1: Enable grid navigation*/ +#define LV_USE_GRIDNAV 0 + +/*1: Enable lv_obj fragment*/ +#define LV_USE_FRAGMENT 0 + +/*================== +* EXAMPLES +*==================*/ + +/*Enable the examples to be built with the library*/ +#define LV_BUILD_EXAMPLES 1 + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/examples/Advanced/LVGL_PlatformIO/src/lv_demo_conf.h b/examples/Advanced/LVGL_PlatformIO/src/lv_demo_conf.h new file mode 100644 index 00000000..283ce948 --- /dev/null +++ b/examples/Advanced/LVGL_PlatformIO/src/lv_demo_conf.h @@ -0,0 +1,58 @@ +/** + * @file lv_demo_conf.h + * Configuration file for v8.1.1-dev + * + */ +/* + * COPY THIS FILE AS lv_demo_conf.h + */ + +/* clang-format off */ +#if 0 /*Set it to "1" to enable the content*/ + +#ifndef LV_DEMO_CONF_H +#define LV_DEMO_CONF_H + + +/******************* + * GENERAL SETTING + *******************/ +#define LV_EX_PRINTF 0 /*Enable printf-ing data in demoes and examples*/ +#define LV_EX_KEYBOARD 0 /*Add PC keyboard support to some examples (`lv_drivers` repository is required)*/ +#define LV_EX_MOUSEWHEEL 0 /*Add 'encoder' (mouse wheel) support to some examples (`lv_drivers` repository is required)*/ + +/********************* + * DEMO USAGE + *********************/ + +/*Show some widget*/ +#define LV_USE_DEMO_WIDGETS 0 +#if LV_USE_DEMO_WIDGETS +#define LV_DEMO_WIDGETS_SLIDESHOW 0 +#endif + +/*Printer demo, optimized for 800x480*/ +#define LV_USE_DEMO_PRINTER 0 + +/*Demonstrate the usage of encoder and keyboard*/ +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + +/*Benchmark your system*/ +#define LV_USE_DEMO_BENCHMARK 0 + +/*Stress test for LVGL*/ +#define LV_USE_DEMO_STRESS 0 + +/*Music player demo*/ +#define LV_USE_DEMO_MUSIC 1 +#if LV_USE_DEMO_MUSIC +# define LV_DEMO_MUSIC_SQUARE 0 +# define LV_DEMO_MUSIC_LANDSCAPE 0 +# define LV_DEMO_MUSIC_ROUND 0 +# define LV_DEMO_MUSIC_LARGE 0 +# define LV_DEMO_MUSIC_AUTO_PLAY 0 +#endif + +#endif /*LV_DEMO_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/examples/Advanced/LVGL_PlatformIO/src/main.cpp b/examples/Advanced/LVGL_PlatformIO/src/main.cpp new file mode 100644 index 00000000..cc3f1890 --- /dev/null +++ b/examples/Advanced/LVGL_PlatformIO/src/main.cpp @@ -0,0 +1,92 @@ +#define LGFX_AUTODETECT +#include + +#include +#include + +/*Change to your screen resolution*/ +static const uint16_t screenWidth = 320; +static const uint16_t screenHeight = 240; + +static lv_disp_draw_buf_t draw_buf; +static lv_color_t buf[2][ screenWidth * 10 ]; + +LGFX gfx; + +/* Display flushing */ +void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p ) +{ + if (gfx.getStartCount() == 0) + { // Processing if not yet started + gfx.startWrite(); + } + gfx.pushImageDMA( area->x1 + , area->y1 + , area->x2 - area->x1 + 1 + , area->y2 - area->y1 + 1 + , ( lgfx::swap565_t* )&color_p->full); + lv_disp_flush_ready( disp ); +} + +void sd_access_sample( void ) +{ + if (gfx.getStartCount() > 0) + { // Free the bus before accessing the SD card + gfx.endWrite(); + } + + // Something to manipulate the SD card. + auto file = SD.open("/file"); + file.close(); +} + +/*Read the touchpad*/ +void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data ) +{ + uint16_t touchX, touchY; + + data->state = LV_INDEV_STATE_REL; + + if( gfx.getTouch( &touchX, &touchY ) ) + { + data->state = LV_INDEV_STATE_PR; + + /*Set the coordinates*/ + data->point.x = touchX; + data->point.y = touchY; + } +} + +void setup() +{ + gfx.begin(); + + lv_init(); + lv_disp_draw_buf_init( &draw_buf, buf[0], buf[1], screenWidth * 10 ); + + /*Initialize the display*/ + static lv_disp_drv_t disp_drv; + lv_disp_drv_init( &disp_drv ); + /*Change the following line to your display resolution*/ + disp_drv.hor_res = screenWidth; + disp_drv.ver_res = screenHeight; + disp_drv.flush_cb = my_disp_flush; + disp_drv.draw_buf = &draw_buf; + lv_disp_drv_register( &disp_drv ); + + /*Initialize the input device driver*/ + static lv_indev_drv_t indev_drv; + lv_indev_drv_init( &indev_drv ); + indev_drv.type = LV_INDEV_TYPE_POINTER; + indev_drv.read_cb = my_touchpad_read; + lv_indev_drv_register( &indev_drv ); + + + lv_demo_benchmark(); +} + +void loop() +{ + lv_timer_handler(); /* let the GUI do its work */ + delay(1); +} From 1b8db58891865bf0a8f2acd544c9e9bf82067f29 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Sun, 2 Apr 2023 18:42:36 +0900 Subject: [PATCH 22/34] fine tuning --- src/lgfx/v1/panel/Panel_FrameBufferBase.cpp | 7 +++++++ src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp index 0d0f4225..582aeaa3 100644 --- a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp +++ b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp @@ -278,6 +278,13 @@ namespace lgfx w = w * bits >> 3; auto sw = param->src_bitwidth * bits >> 3; auto src = &((uint8_t*)param->src_data)[param->src_y * sw + param->src_x]; + + if (sw == w && x == 0) { + memcpy(_lines_buffer[y], src, w * h); + cacheWriteBack(_lines_buffer[y], w * h); + return; + } + h += y; do { diff --git a/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h b/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h index 15b0bf01..cc92371e 100644 --- a/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h +++ b/src/lgfx_user/LGFX_ESP32S3_RGB_ESP32-8048S043.h @@ -64,7 +64,7 @@ class LGFX : public lgfx::LGFX_Device cfg.pin_vsync = GPIO_NUM_41; cfg.pin_hsync = GPIO_NUM_39; cfg.pin_pclk = GPIO_NUM_42; - cfg.freq_write = 16000000; + cfg.freq_write = 14000000; cfg.hsync_polarity = 0; cfg.hsync_front_porch = 8; From 7618ee4efb4262930018b471b549ad3b48c51bfb Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:55:02 +0900 Subject: [PATCH 23/34] add support ST7565. --- src/lgfx/v1/panel/Panel_SSD1306.cpp | 47 +++++++++++++++++++++++++ src/lgfx/v1/panel/Panel_SSD1306.hpp | 53 +++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/src/lgfx/v1/panel/Panel_SSD1306.cpp b/src/lgfx/v1/panel/Panel_SSD1306.cpp index 8a975457..c441d879 100644 --- a/src/lgfx/v1/panel/Panel_SSD1306.cpp +++ b/src/lgfx/v1/panel/Panel_SSD1306.cpp @@ -372,6 +372,53 @@ namespace lgfx _range_mod.bottom = 0; } +//---------------------------------------------------------------------------- + + // void Panel_ST7565::setBrightness(uint8_t brightness) {} + + void Panel_ST7565::display(uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h) + { + if (0 < w && 0 < h) + { + _range_mod.left = std::min(_range_mod.left , x ); + _range_mod.right = std::max(_range_mod.right , x + w - 1); + _range_mod.top = std::min(_range_mod.top , y ); + _range_mod.bottom = std::max(_range_mod.bottom, y + h - 1); + } + if (_range_mod.empty()) { return; } + + // xeの位置を2ライン単位の位置にしないと次の描画位置がずれる事があったため調整 + uint_fast8_t xs = _range_mod.left ; + uint_fast8_t xe = (_range_mod.right+2) & ~1; + uint_fast8_t ys = _range_mod.top >> 3; + uint_fast8_t ye = _range_mod.bottom >> 3; + + uint_fast8_t offset_y = _cfg.offset_y >> 3; + uint_fast8_t offset_x = _cfg.offset_x + xs; + + int retry = 3; + do + { + while (!_bus->writeCommand( CMD_SETPAGEADDR | (ys + offset_y) + | (CMD_SETHIGHCOLUMN + (offset_x >> 4)) << 8 + | (CMD_SETLOWCOLUMN + (offset_x & 0x0F)) << 16 + , 24) && --retry) + { + _bus->endTransaction(); + _bus->beginTransaction(); + } + if (!retry) { break; } + + auto buf = &_buf[xs + ys * _cfg.panel_width]; + _bus->writeBytes(buf, xe - xs, true, true); + } while (++ys <= ye); + + _range_mod.top = INT16_MAX; + _range_mod.left = INT16_MAX; + _range_mod.right = 0; + _range_mod.bottom = 0; + } + //---------------------------------------------------------------------------- } } diff --git a/src/lgfx/v1/panel/Panel_SSD1306.hpp b/src/lgfx/v1/panel/Panel_SSD1306.hpp index a58a8a11..114d87e1 100644 --- a/src/lgfx/v1/panel/Panel_SSD1306.hpp +++ b/src/lgfx/v1/panel/Panel_SSD1306.hpp @@ -195,6 +195,59 @@ namespace lgfx } }; + + struct Panel_ST7565 : public Panel_1bitOLED + { + Panel_ST7565(void) + { + _cfg.memory_width = _cfg.panel_width = 128; + _cfg.memory_height = _cfg.panel_height = 64; + _auto_display = true; + } + + // void setBrightness(uint8_t brightness) override; + void display(uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h) override; + + protected: + static constexpr uint8_t CMD_SETPAGEADDR = 0xB0; + static constexpr uint8_t CMD_SETLOWCOLUMN = 0x00; + static constexpr uint8_t CMD_SETHIGHCOLUMN = 0x10; + + const uint8_t* getInitCommands(uint8_t listno) const override + { + static constexpr uint8_t list0[] = { + 0xAE, //Display = OFF + 0xA0, //ADC = normal + 0xC8, //Common output = revers + 0xA3, //LCD bias = 1/7 + + //内部レギュレータON + 0x2C, + //delay(2); + 0x2E, + //delay(2); + 0x2F, + + //コントラスト設定 + 0x23, //Vo voltage regulator internal resistor ratio set + 0x81, //Electronic volume mode set + 0x1C, //Electronic volume register set + + //表示設定 + 0xA4, //Display all point ON/OFF = normal + 0x40, //Display start line = 0 + // 0xA7, //Display normal/revers = normal + 0xAF, //Dsiplay = ON + + 0xFF,0xFF, // end + }; + switch (listno) { + case 0: return list0; + default: return nullptr; + } + } + }; + //---------------------------------------------------------------------------- } } From a6d9d04d05f4294676c3dd02379e7d997d91fd0c Mon Sep 17 00:00:00 2001 From: tobozo Date: Thu, 13 Apr 2023 13:26:25 +0200 Subject: [PATCH 24/34] Added LGFX_Sprite::getParent() --- src/lgfx/v1/LGFX_Sprite.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lgfx/v1/LGFX_Sprite.hpp b/src/lgfx/v1/LGFX_Sprite.hpp index 4fe7dfbd..8173daf1 100644 --- a/src/lgfx/v1/LGFX_Sprite.hpp +++ b/src/lgfx/v1/LGFX_Sprite.hpp @@ -114,6 +114,7 @@ namespace lgfx setColorDepth(_write_conv.depth); } + LGFX_INLINE LovyanGFX* getParent(void) const { return _parent; } LGFX_INLINE void* getBuffer(void) const { return _panel_sprite.getBuffer(); } uint32_t bufferLength(void) const { return _panel_sprite.bufferLength(); } From 41c7181ed37b5715bbfa10bd5226c5b6a464b192 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Fri, 14 Apr 2023 09:15:18 +0900 Subject: [PATCH 25/34] fix #387 --- src/lgfx/v1/panel/Panel_FrameBufferBase.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp index 582aeaa3..0d0f4225 100644 --- a/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp +++ b/src/lgfx/v1/panel/Panel_FrameBufferBase.cpp @@ -278,13 +278,6 @@ namespace lgfx w = w * bits >> 3; auto sw = param->src_bitwidth * bits >> 3; auto src = &((uint8_t*)param->src_data)[param->src_y * sw + param->src_x]; - - if (sw == w && x == 0) { - memcpy(_lines_buffer[y], src, w * h); - cacheWriteBack(_lines_buffer[y], w * h); - return; - } - h += y; do { From 4150b35bfb709d31ebd8811bbc1bc27ac093fe9d Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Sun, 16 Apr 2023 16:27:07 +0900 Subject: [PATCH 26/34] Support for changing the name of ESP32 board definitions. --- .../v1_autodetect/LGFX_AutoDetect_ESP32_all.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lgfx/v1_autodetect/LGFX_AutoDetect_ESP32_all.hpp b/src/lgfx/v1_autodetect/LGFX_AutoDetect_ESP32_all.hpp index b8416765..cc50dc1f 100644 --- a/src/lgfx/v1_autodetect/LGFX_AutoDetect_ESP32_all.hpp +++ b/src/lgfx/v1_autodetect/LGFX_AutoDetect_ESP32_all.hpp @@ -199,25 +199,25 @@ namespace lgfx #elif defined (CONFIG_IDF_TARGET_ESP32C3) #elif defined (CONFIG_IDF_TARGET_ESP32) || !defined (CONFIG_IDF_TARGET) -#if defined( ARDUINO_M5Stack_Core_ESP32 ) || defined( ARDUINO_M5STACK_FIRE ) +#if defined( ARDUINO_M5STACK_CORE_ESP32 ) || defined( ARDUINO_M5Stack_Core_ESP32 ) || defined( ARDUINO_M5STACK_FIRE ) #define LGFX_M5STACK #define LGFX_DEFAULT_BOARD board_t::board_M5Stack -#elif defined( ARDUINO_M5STACK_Core2 ) // M5Stack Core2 +#elif defined( ARDUINO_M5STACK_CORE2 ) || defined( ARDUINO_M5STACK_Core2 ) // M5Stack Core2 #define LGFX_M5STACK_CORE2 #define LGFX_DEFAULT_BOARD board_t::board_M5StackCore2 #elif defined ( ARDUINO_M5STACK_TOUGH ) #define LGFX_M5TOUGH #define LGFX_DEFAULT_BOARD board_t::board_M5Tough -#elif defined( ARDUINO_M5Stick_C ) // M5Stick C / CPlus +#elif defined( ARDUINO_M5STICK_C ) || defined( ARDUINO_M5Stick_C ) // M5Stick C / CPlus #define LGFX_M5STICK_C #define LGFX_DEFAULT_BOARD board_t::board_M5StickC -#elif defined( ARDUINO_M5Stick_C_Plus ) +#elif defined( ARDUINO_M5STICK_C_PLUS ) || defined( ARDUINO_M5Stick_C_Plus ) #define LGFX_M5STICK_C #define LGFX_DEFAULT_BOARD board_t::board_M5StickCPlus -#elif defined( ARDUINO_M5Stack_CoreInk ) // M5Stack CoreInk +#elif defined( ARDUINO_M5STACK_COREINK ) || defined( ARDUINO_M5Stack_CoreInk ) // M5Stack CoreInk #define LGFX_M5STACK_COREINK #define LGFX_DEFAULT_BOARD board_t::board_M5StackCoreInk -#elif defined( ARDUINO_M5STACK_Paper ) // M5Paper +#elif defined( ARDUINO_M5STACK_PAPER ) || defined( ARDUINO_M5STACK_Paper ) // M5Paper #define LGFX_M5PAPER #define LGFX_DEFAULT_BOARD board_t::board_M5Paper #elif defined( ARDUINO_ODROID_ESP32 ) // ODROID-GO @@ -226,7 +226,7 @@ namespace lgfx #elif defined( ARDUINO_TTGO_T1 ) // TTGO TS #define LGFX_TTGO_TS #define LGFX_DEFAULT_BOARD board_t::board_TTGO_TS -#elif defined( ARDUINO_TWatch ) || defined( ARDUINO_T ) // TTGO T-Watch +#elif defined( ARDUINO_TWATCH ) || defined( ARDUINO_TWatch ) || defined( ARDUINO_T ) // TTGO T-Watch #define LGFX_TTGO_TWATCH #define LGFX_DEFAULT_BOARD board_t::board_TTGO_TWatch #elif defined( ARDUINO_D ) || defined( ARDUINO_DDUINO32_XS ) // DSTIKE D-duino-32 XS From e5b5f5eb78972872ead53c82f47f4f3b70673e17 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Sun, 16 Apr 2023 16:28:01 +0900 Subject: [PATCH 27/34] Adjustment of timeout time for ESP32 I2C communication --- src/lgfx/v1/platforms/esp32/common.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/lgfx/v1/platforms/esp32/common.cpp b/src/lgfx/v1/platforms/esp32/common.cpp index 6877afb8..ceddcb16 100644 --- a/src/lgfx/v1/platforms/esp32/common.cpp +++ b/src/lgfx/v1/platforms/esp32/common.cpp @@ -551,8 +551,8 @@ namespace lgfx gpio_num_t pin_scl = (gpio_num_t)-1; gpio_num_t pin_sda = (gpio_num_t)-1; + uint8_t wait_ack_stage = 0; // 0:Not waiting. / 1:Waiting after addressing. / 2:Waiting during data transmission. bool initialized = false; - bool wait_ack = false; uint32_t freq = 0; void save_reg(i2c_dev_t* dev) @@ -710,9 +710,8 @@ namespace lgfx auto dev = getDev(i2c_port); typeof(dev->int_raw) int_raw; static constexpr uint32_t intmask = I2C_ACK_ERR_INT_RAW_M | I2C_END_DETECT_INT_RAW_M | I2C_ARBITRATION_LOST_INT_RAW_M; - if (i2c_context[i2c_port].wait_ack) + if (i2c_context[i2c_port].wait_ack_stage) { - i2c_context[i2c_port].wait_ack = false; int_raw.val = dev->int_raw.val; if (!(int_raw.val & intmask)) { @@ -725,6 +724,9 @@ namespace lgfx #else uint32_t us_limit = (dev->scl_high_period.period + dev->scl_low_period.period + 16 ) * (1 + dev->status_reg.tx_fifo_cnt); #endif + if (i2c_context[i2c_port].wait_ack_stage == 2) { + us_limit += 1024; + } do { taskYIELD(); @@ -744,6 +746,7 @@ namespace lgfx res = cpp::fail(error_t::connection_lost); i2c_context[i2c_port].state = cpp::fail(error_t::connection_lost); } + i2c_context[i2c_port].wait_ack_stage = 0; } if (flg_stop || res.has_error()) @@ -1026,7 +1029,7 @@ namespace lgfx dev->int_clr.val = 0x1FFFF; dev->ctr.trans_start = 1; i2c_context[i2c_port].state = read ? i2c_context_t::state_t::state_read : i2c_context_t::state_t::state_write; - i2c_context[i2c_port].wait_ack = true; + i2c_context[i2c_port].wait_ack_stage = 1; return res; } @@ -1137,7 +1140,7 @@ namespace lgfx i2c_set_cmd(dev, 1, i2c_cmd_end, 0); updateDev(dev); dev->ctr.trans_start = 1; - i2c_context[i2c_port].wait_ack = true; + i2c_context[i2c_port].wait_ack_stage = 2; data += len; length -= len; len = txfifo_limit; @@ -1158,12 +1161,13 @@ namespace lgfx auto dev = getDev(i2c_port); size_t len = 0; #if defined ( CONFIG_IDF_TARGET_ESP32S3 ) - uint32_t us_limit = ((dev->scl_high_period.scl_high_period + dev->scl_high_period.scl_wait_high_period + dev->scl_low_period.scl_low_period) << 1) + 16; + uint32_t us_limit = ((dev->scl_high_period.scl_high_period + dev->scl_high_period.scl_wait_high_period + dev->scl_low_period.scl_low_period) << 1); #elif defined ( CONFIG_IDF_TARGET_ESP32C3 ) - uint32_t us_limit = ((dev->scl_high_period.period + dev->scl_low_period.period) << 1) + 16; + uint32_t us_limit = ((dev->scl_high_period.period + dev->scl_low_period.period) << 1); #else - uint32_t us_limit = (dev->scl_high_period.period + dev->scl_low_period.period) + 16; + uint32_t us_limit = (dev->scl_high_period.period + dev->scl_low_period.period); #endif + us_limit += 1024; do { len = ((length-1) & 63) + 1; From 00afa1e0f4a745775583e674ba27a4bbec1104a0 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Sun, 16 Apr 2023 17:20:29 +0900 Subject: [PATCH 28/34] Fixed SPI release bug in ArduinoESP32 v1.0.x. ( #389 ) --- src/lgfx/v1/platforms/esp32/Bus_SPI.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp b/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp index b8220878..eda96897 100644 --- a/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp +++ b/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp @@ -179,7 +179,8 @@ namespace lgfx if (pin >= GPIO_NUM_MAX) return; gpio_reset_pin( (gpio_num_t)pin); gpio_matrix_out((gpio_num_t)pin, 0x100, 0, 0); - gpio_matrix_in( (gpio_num_t)pin, 0x100, 0 ); + // gpio_matrix_in には、ArduinoESP32 v1.0.x系では重大なバグがある。(無関係なピンに対して設定変更が行われることがある) + // gpio_matrix_in( (gpio_num_t)pin, 0x100, 0 ); } void Bus_SPI::release(void) From 96d2fdb6babf44673355d02048560acc9f9f4ea4 Mon Sep 17 00:00:00 2001 From: tobozo Date: Sun, 16 Apr 2023 23:32:28 +0200 Subject: [PATCH 29/34] Added Sprite/TransitionFX demo --- .../Sprite/TransitionFX/LGFX_SpriteFX.hpp | 441 +++ examples/Sprite/TransitionFX/TransitionFX.ino | 195 ++ examples/Sprite/TransitionFX/assets.h | 3088 +++++++++++++++++ 3 files changed, 3724 insertions(+) create mode 100644 examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp create mode 100644 examples/Sprite/TransitionFX/TransitionFX.ino create mode 100644 examples/Sprite/TransitionFX/assets.h diff --git a/examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp b/examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp new file mode 100644 index 00000000..bdff17c7 --- /dev/null +++ b/examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp @@ -0,0 +1,441 @@ +#define LGFX_USE_V1 +#define LGFX_AUTODETECT +#include + +/*\ + * + * Push your LGFX sprites with style! + * + * LGFX_SpriteFX: A LGFX Layer brought to you by @tobozo, copyleft (c+) 2023 + * +\*/ + + +namespace lgfx +{ + + namespace easing + { + /*\ + * Easing Functions - inspired from : + * - http://gizma.com/easing + * - https://easings.net/ + * Only considering the t value for the range [0, 1] => [0, 1] + \*/ + typedef float (*easing_fn_t)(float in); + // for trigo + const float c1 = 1.70158f; + const float c2 = c1 * 1.525f; + const float c3 = c1 + 1.0f; + const float c4 = (2.0f * PI) / 3.0f; + const float c5 = (2.0f * PI) / 4.5f; + // for bounce + const float n1 = 7.5625f; + const float d1 = 2.75f; + + float linear(float t) { return t; } + float easeInQuad(float t) { return pow(t,2.0f); } + float easeOutQuad(float t) { return t*(2.0f-t); } + float easeInOutQuad(float t) { return t<.5f ? 2.0f*pow(t,2) : -1.0f+(4.0f-2.0f*t)*t; } + float easeInCubic(float t) { return pow(t,3.0f); } + float easeOutCubic(float t) { return 1.0f - pow(1.0f - t, 3.0f); } + float easeInOutCubic(float t) { return t<.5f ? 4.0f*pow(t,3) : (t-1.0f)*(2.0f*t-2.0f)*(2.0f*t-2.0f)+1.0f; } + float easeInQuart(float t) { return pow(t,4.0f); } + float easeOutQuart(float t) { return 1.0f - pow(1.0f - t, 4.0f); } + float easeInOutQuart(float t) { return t < 0.5 ? 8.0f * t * t * t * t : 1.0f - pow(-2.0f * t + 2.0f, 4.0f) / 2.0f; } + float easeInQuint(float t) { return pow(t,5.0f); } + float easeOutQuint(float t) { return 1.0f - pow(1.0f - t, 5.0f); } + float easeInOutQuint(float t) { return t < 0.5 ? 16.0f * t * t * t * t * t : 1.0f - pow(-2.0f * t + 2.0f, 5.0f) / 2.0f;/*t<.5f ? 16.0f*pow(t,5) : 1.0f+16.0f*(--t)*pow(t,4);*/ } + float easeInSine(float t) { return 1.0f - cos((t * PI) / 2.0f); } + float easeOutSine(float t) { return sin((t * PI) / 2.0f); } + float easeInOutSine(float t) { return -(cos(PI * t) - 1.0f) / 2.0f; } + float easeInExpo(float t) { return t==0 ? 0 : pow(2, 10.0f * t - 10.0f); } + float easeOutExpo(float t) { return t==1.0f ? 1.0f : 1.0f - pow(2, -10.0f * t); } + float easeInOutExpo(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : t < 0.5f ? pow(2, 20.0f * t - 10.0f) / 2.0f : (2.0f - pow(2, -20.0f * t + 10.0f)) / 2.0f; } + float easeInCirc(float t) { return 1.0f - sqrt(1.0f - pow(t, 2.0f)); } + float easeOutCirc(float t) { return sqrt(1.0f - pow(t - 1, 2.0f)); } + float easeInOutCirc(float t) { return t < 0.5f ? (1.0f - sqrt(1.0f - pow(2.0f * t, 2.0f))) / 2.0f : (sqrt(1 - pow(-2.0f * t + 2.0f, 2.0f)) + 1.0f) / 2.0f; } + float easeInBack(float t) { return c3 * t * t * t - c1 * t * t; } + float easeOutBack(float t) { return 1.0f + c3 * pow(t - 1.0f, 3.0f) + c1 * pow(t - 1.0f, 2.0f); } + float easeInOutBack(float t) { return t < 0.5f ? (pow(2.0*t, 2.0f) * ((c2 + 1.0f) * 2.0f * t - c2)) / 2.0f : (pow(2.0*t-2, 2.0f) * ((c2 + 1.0f) * (t * 2.0f - 2.0f) + c2) + 2.0f) / 2.0f; } + float easeInElastic(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : -pow(2, 10.0f * t - 10.0f) * sin((t * 10.0f - 10.75f) * c4); } + float easeOutElastic(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : pow(2, -10.0f * t) * sin((t * 10.0f - 0.75f) * c4) + 1; } + float easeInOutElastic(float t) { return t==0 ? 0 : t==1 ? 1 : t<0.5 ? -(pow(2, 20.0f*t-10.0f)*sin((20.0f*t-11.125f)*c5))/2.0f : (pow(2,-20.0f*t+10.0f)*sin((20.0f*t-11.125f)*c5))/2.0f+1.0f; } + float easeOutBounce(float t) { return t<1.0f/d1 ? n1*t*t : t<2.0f/d1 ? n1*(t-=1.5f/d1)*t+0.75f : t<2.5f/d1 ? n1*(t-=2.25f/d1)*t+0.9375f : n1*(t-=2.625f/d1)*t+0.984375f; } + + }; // end namespace easing + + + namespace transition_fx + { + + enum trans_type_t // all transitions effects supported by this addon are listed here + { + PIXEL_STRETCH, // pixel stretch animation, vertical/horizontal both directions + PIXEL_SLICE, // scrolled portions + PIXEL_SPIN, + }; + + struct anim_param_t // abstract item to hold transition pointer, used by pushAnimated() + { + const trans_type_t type; + const void *ptr; + }; + + + enum trans_spindir_t + { + SPIN_RIGHT, + SPIN_LEFT + }; + + struct spin_params_t + { + const int32_t x; + const int32_t y; + const trans_spindir_t dir; // spin direction + const uint32_t duration_ms; // easing duration + const easing::easing_fn_t easingFunc; + }; + + + enum trans_axis_t // transition orientation for PIXEL_SLICE + { + AXIS_H, + AXIS_V + }; + + struct slice_params_t // transition parameters for PIXEL_SLICE + { + const int32_t x; + const int32_t y; + const trans_axis_t dir; // slicing direction + const uint32_t slices; // slices amount + const uint32_t duration_ms; // easing duration + const easing::easing_fn_t easingFunc; + }; + + struct sliceRect_t // grouped properties for PIXEL_SLICE + { + sliceRect_t() {}; + sliceRect_t(int32_t x_, int32_t y_, int32_t clipx_, int32_t clipy_, int32_t clipw_, int32_t cliph_ ) : + x(x_), y(y_), clipx(clipx_), clipy(clipy_), clipw(clipw_), cliph(cliph_) { } + int32_t x{0}; + int32_t y{0}; + int32_t clipx{0}; + int32_t clipy{0}; + int32_t clipw{0}; + int32_t cliph{0}; + }; + + + + enum trans_datum_t // transition direction for PIXEL_STRETCH + { + LTR_DATUM, // left to righ + RTL_DATUM, // right to left + TTB_DATUM, // top to bottom + BTT_DATUM // bottom to top + }; + + struct stretch_params_t // transition parameters for PIXEL_STRETCH + { + const int32_t x; + const int32_t y; + const trans_datum_t dir; // stretch direction + const uint32_t delay_ms; // mininal delay per frame + }; + + struct coords_float_t // x/y coords as float for PIXEL_STRETCH + { + template coords_float_t(T x_, T y_ ) : x(x_+0.0f), y(y_+0.0f) { } + float x; + float y; + }; + + struct pixel_stretch_fx_t // direction and loop controls for PIXEL_STRETCH + { + public: + pixel_stretch_fx_t( coords_float_t pos_, uint32_t w_, uint32_t h_, trans_datum_t direction_=LTR_DATUM, uint32_t delay_ms_=1 ) + : pos(pos_), clipWidth(w_), clipHeight(h_), direction(direction_), delay_ms(delay_ms_) + { + swapx = (direction==RTL_DATUM||direction==BTT_DATUM); + swapy = (direction==TTB_DATUM||direction==BTT_DATUM); + + auto clip1 = !swapy ? clipHeight : clipWidth; + auto clip2 = !swapy ? clipWidth : clipHeight; + auto &_pos = !swapy ? pos.y : pos.x; + auto &_middle = !swapy ? middle.y : middle.x; + auto &_topleft = !swapy ? topleft.y : topleft.x; + auto &_scan = !swapy ? scanheight : scanwidth; + + _middle = _pos + clip1/2.0f; + _topleft = _pos; + _scan = clip1; + + loopstart = swapx ? clip2+1.0f : 0; + loopend = swapx ? -1.0f : clip2; + loopdir = swapx ?-1.0f : 1.0f; + tick(); + last_ms = anim_start = millis(); + }; + + void tick() + { + auto &_scan = !swapy ? scanpos.x : scanpos.y; + auto &_zoom = !swapy ? zoom.x : zoom.y; + auto &_middle = !swapy ? middle.x : middle.y; + auto &_topleft = !swapy ? topleft.x : topleft.y; + auto &_pos = !swapy ? pos.x : pos.y; + auto _clip = !swapx ? !swapy ? clipWidth : clipHeight : 0; + + _scan = -loopstart; + _zoom = (!swapx ? _clip-loopstart : loopstart) - 0.5f; + _middle = ((!swapx ? _pos+loopstart : _pos) + _zoom/2.0f) - 0.5f; + _topleft = _pos + loopstart; + } + + bool next() + { + loopstart += loopdir; + handleTimer(); + tick(); + return loopstart!=loopend; + } + + void handleTimer() + { + uint32_t render_ms_tmp = millis() - last_ms; + if( delay_ms > 1 ) { + if( render_ms_tmp < delay_ms ) { + vTaskDelay( delay_ms - render_ms_tmp ); + } + } + last_ms = millis(); + } + + // scanline + coords_float_t scanpos = { 0, 0 }; + float scanwidth = 1; + float scanheight = 1; + + // projection zone + coords_float_t middle = { 0, 0 }; + coords_float_t zoom = { 1, 1 }; + coords_float_t topleft = { 0, 0 }; + + // timer helpers + uint32_t anim_start = 0; + uint32_t last_ms = 0; + const float rotate = 0; + + private: + + const coords_float_t pos; + const float clipWidth; + const float clipHeight; + const trans_datum_t direction; + const uint32_t delay_ms;// 15=66fps + + float loopstart = 0; + float loopend = 0; + float loopdir = 1; + + bool swapx = false; + bool swapy = false; + }; + + }; // end namespace transition_fx + + + using namespace transition_fx; + using namespace easing; + + + class LGFX_SpriteFx : public LGFX_Sprite + { + public: + + LGFX_SpriteFx(LovyanGFX* parent) : LGFX_Sprite(parent) { }; + + void spin( int32_t x=0, int32_t y=0, trans_spindir_t dir=SPIN_RIGHT, uint32_t duration=255, easing_fn_t easing=linear ) { spin_impl({x,y,dir,duration,easing}); } + void spinC( int32_t x=0, int32_t y=0, uint32_t duration=255, easing_fn_t easing=linear ) { spin_impl({x,y,SPIN_RIGHT,duration,easing}); } + void spinA( int32_t x=0, int32_t y=0, uint32_t duration=255, easing_fn_t easing=linear ) { spin_impl({x,y,SPIN_LEFT,duration,easing}); } + + void slice( int32_t x=0, int32_t y=0, trans_axis_t axis=AXIS_V, uint32_t slices=8, + uint32_t duration=255, easing_fn_t easing=linear ) { slice_impl({x,y,axis,slices,duration,easing}); } + void sliceH( int32_t x=0, int32_t y=0, uint8_t slices=8, + uint32_t duration=255, easing_fn_t easing=linear ) { slice_impl({x,y,AXIS_H,slices,duration,easing}); } + void sliceV( int32_t x=0, int32_t y=0, uint8_t slices=8, + uint32_t duration=255, easing_fn_t easing=linear ) { slice_impl({x,y,AXIS_V,slices,duration,easing}); } + + void stretch( int32_t x=0, int32_t y=0, trans_datum_t dir=LTR_DATUM, uint32_t delay_ms=0 ) { stretch_impl({x,y,dir,delay_ms}); } + void stretchLTR( int32_t x=0, int32_t y=0, uint32_t delay_ms=0 ) { stretch_impl({x,y,LTR_DATUM,delay_ms}); } + void stretchRTL( int32_t x=0, int32_t y=0, uint32_t delay_ms=0 ) { stretch_impl({x,y,RTL_DATUM,delay_ms}); } + void stretchTTB( int32_t x=0, int32_t y=0, uint32_t delay_ms=0 ) { stretch_impl({x,y,TTB_DATUM,delay_ms}); } + void stretchBTT( int32_t x=0, int32_t y=0, uint32_t delay_ms=0 ) { stretch_impl({x,y,BTT_DATUM,delay_ms}); } + + void pushAnimated( anim_param_t* params ) + { + assert( params ); + assert( params->ptr ); + switch( params->type ) { + case PIXEL_STRETCH: { + auto pixel_stretch = (stretch_params_t*) params->ptr; + stretch_impl( {pixel_stretch->x, pixel_stretch->y, pixel_stretch->dir, pixel_stretch->delay_ms} ); + } + break; + case PIXEL_SLICE: { + auto pixel_slice = (slice_params_t*) params->ptr; + slice_impl( {pixel_slice->x, pixel_slice->y, pixel_slice->dir, pixel_slice->slices, pixel_slice->duration_ms, pixel_slice->easingFunc} ); + } + break; + case PIXEL_SPIN: { + auto pixel_spin = (spin_params_t*) params->ptr; + spin_impl( {pixel_spin->x, pixel_spin->y, pixel_spin->dir, pixel_spin->duration_ms, pixel_spin->easingFunc} ); + } + } + } + + private: + + void spin_impl( spin_params_t params ) + { + if( _parent == nullptr ) { + log_e("Sprite has no parent, can't guess display"); + return; + } + + auto x = params.x; + auto y = params.y; + auto dir = params.dir; + auto duration = params.duration_ms; + auto easingFunc = params.easingFunc; + + const uint32_t timer_start = millis(); + const uint32_t timer_end = timer_start + duration; + const uint32_t max_steps = 1000; + + const float middlex = float(x) + float(this->width()/2.0f);// - float(x/2.0f); + const float middley = float(y) + float(this->height()/2.0f);// - float(y/2.0f); + const int anglestart = dir==SPIN_RIGHT ? -360:360; + const int angleend = -anglestart; + + uint32_t timer_pos = 0; + uint32_t timer_now = 0; + + _parent->setClipRect( x, y, this->width(), this->height() ); + do { + timer_now = millis(); + if( timer_now>timer_end ) timer_now=timer_end; + timer_pos = map( timer_now, timer_start, timer_end, 0, max_steps ); + float ifloat = float(timer_pos)/float(max_steps); + float zoom = easingFunc( ifloat ); + int angle = map( int(zoom*max_steps), 0, max_steps, anglestart, angleend ); + this->pushRotateZoom( _parent, middlex, middley, angle, zoom, zoom ); + } while( timer_nowclearClipRect(); + } + + + void slice_impl( slice_params_t params ) + { + if( _parent == nullptr ) { + log_e("Sprite has no parent, can't guess display"); + return; + } + + auto x = params.x; + auto y = params.y; + auto slices = params.slices; + auto axis = params.dir; + auto duration = params.duration_ms; + auto easingFunc = params.easingFunc; + + const uint32_t timer_start = millis(); + const uint32_t timer_end = timer_start + duration; + const uint32_t max_steps = 1000; + + const bool is_vertical = axis==AXIS_V; + const int32_t scroll_pan_max = is_vertical ? this->width() : this->height(); + const int32_t scroll_pos_max = is_vertical ? this->height() : this->width(); + + if( slices < 2 ) slices = 2; + if( slices > scroll_pan_max/2 ) slices = scroll_pan_max/2; + + const int32_t slice_pad = scroll_pan_max/slices; // slice width or slice height depending axis + + int32_t scroll_pos = 0; + uint32_t steps = 1000; + + uint32_t timer_pos = 0; + uint32_t timer_now = 0; + + do { + timer_now = millis(); + if( timer_now>timer_end ) timer_now=timer_end; + timer_pos = map( timer_now, timer_start, timer_end, 0, max_steps ); + float ifloat = float(timer_pos)/float(steps); + float eased = easingFunc( ifloat ); + scroll_pos = map( int(eased*steps), 0, steps, 0, scroll_pos_max ); + const int32_t slice1 = is_vertical ? (y-this->height())+scroll_pos : (x-this->width())+scroll_pos; + const int32_t slice2 = is_vertical ? (y+this->height())-scroll_pos : (x+this->width())-scroll_pos; + int32_t slice_num = 0; + do { // secondary axis (opposite slicing) + const int32_t offset = slice_num*slice_pad; + const auto rect = (is_vertical) + ? sliceRect_t( x, slice_num%2==0 ? slice2 : slice1, x+offset, y, slice_pad, this->height() ) + : sliceRect_t( slice_num%2==0 ? slice2 : slice1, y, x, y+offset, this->width(), slice_pad ) + ; + _parent->setClipRect( rect.clipx, rect.clipy, rect.clipw, rect.cliph ); + this->pushSprite( _parent, rect.x, rect.y ); + slice_num++; + } while( slice_num <= slices ); + } while( timer_nowclearClipRect(); + } + + + void stretch_impl( stretch_params_t params ) + { + if( _parent == nullptr ) { + log_e("Sprite has no parent, can't guess display"); + return; + } + + auto x = params.x; + auto y = params.y; + auto direction = params.dir; + auto delay_ms = params.delay_ms; + + pixel_stretch_fx_t fx( {x, y}, this->width(), this->height(), direction, delay_ms ); + + LGFX_Sprite *scanline = new LGFX_Sprite(); + scanline->setColorDepth( this->getColorDepth() ); + scanline->setPsram( false ); // use heap for faster frame rate + + if( !scanline->createSprite( fx.scanwidth, fx.scanheight ) ) { + log_e("Not enough ram to create stretch effect"); + this->pushSprite( _parent, x, y ); + delete scanline; + return; + } + + _parent->setClipRect( x, y, this->width(), this->height() ); + do { + this->pushSprite( scanline, fx.scanpos.x, fx.scanpos.y ); + scanline->pushRotateZoom( _parent, fx.middle.x, fx.middle.y, fx.rotate, fx.zoom.x, fx.zoom.y ); + } while( fx.next() ); + _parent->clearClipRect(); + + scanline->deleteSprite(); + delete scanline; + } + + }; + + +}; + +using lgfx::LGFX_SpriteFx; + diff --git a/examples/Sprite/TransitionFX/TransitionFX.ino b/examples/Sprite/TransitionFX/TransitionFX.ino new file mode 100644 index 00000000..74c3b070 --- /dev/null +++ b/examples/Sprite/TransitionFX/TransitionFX.ino @@ -0,0 +1,195 @@ +/*\ + * + * Push your LGFX sprites with style! + * + * LGFX_SpriteFX: A LGFX Layer brought to you by @tobozo, copyleft (c+) 2023 + * + * This demo demonstrates the different ways a sprite can + * be printed to the display using transitions. + * + * Transition effects: + * - Spin: appears in a zommed spin + * - Slice: sliced and merged + * - Stretch: spread from one edge + * + * Easing function: plenty! + * + * Note: "Strech" transition does not support easing, only min delay between frames. + * + * Simple usage: + * + * // create a sprite using "LGFX_SpriteFx" instead of "LGFX_Sprite" constructor. + * + * auto sprite = new LGFX_SpriteFx(&tft); + * + * // draw some stuff in the sprite... + * + * // when the sprite is ready to be pushed, instead of sprite->pushSprite( x, y ), use one of these these: + * + * sprite->spin( x, y ); + * sprite->slice( x, y ); + * sprite->stretch( x, y ); + * + * + * Advanced usage: + * + * See LGFX_SpriteFX.hpp and this sketch for more advanced examples. + * +\*/ + +#include "LGFX_SpriteFX.hpp" +#include "assets.h" // some example images for this demo + + +struct easingFuncDesc_t +{ + const char* name; + lgfx::easing::easing_fn_t func; +}; + + +struct img_t +{ + const unsigned char* data; + const unsigned int len; + const uint32_t w; + const uint32_t h; +}; + + +static LGFX tft; +static LGFX_SpriteFx *sptr; + +const img_t dog = img_t { dog_200_200_jpg, dog_200_200_jpg_len, 200, 200 }; +const img_t logo = img_t { lgfx_logo_201x197_jpg, lgfx_logo_201x197_jpg_len, 201, 197 }; +const img_t palette1 = img_t { palette_300x128_jpg, palette_300x128_jpg_len, 300, 128 }; +const img_t palette2 = img_t { palette_128x200_jpg, palette_128x200_jpg_len, 128, 200 }; + + +const img_t *images[] = { &palette1, &palette2, &dog, &logo }; + +const easingFuncDesc_t easingFunctions[] = +{ + { "easeOutBounce", lgfx::easing::easeOutBounce }, + { "easeOutElastic", lgfx::easing::easeOutElastic }, + // { "easeInElastic", lgfx::easing::easeInElastic }, + // { "easeInOutElastic", lgfx::easing::easeInOutElastic }, + // { "easeInQuad", lgfx::easing::easeInQuad }, + // { "easeOutQuad", lgfx::easing::easeOutQuad }, + // { "easeInOutQuad", lgfx::easing::easeInOutQuad }, + // { "easeInCubic", lgfx::easing::easeInCubic }, + // { "easeOutCubic", lgfx::easing::easeOutCubic }, + // { "easeInOutCubic", lgfx::easing::easeInOutCubic }, + // { "easeInQuart", lgfx::easing::easeInQuart }, + // { "easeOutQuart", lgfx::easing::easeOutQuart }, + // { "easeInOutQuart", lgfx::easing::easeInOutQuart }, + // { "easeInQuint", lgfx::easing::easeInQuint }, + // { "easeOutQuint", lgfx::easing::easeOutQuint }, + // { "easeInOutQuint", lgfx::easing::easeInOutQuint }, + // { "easeInSine", lgfx::easing::easeInSine }, + // { "easeOutSine", lgfx::easing::easeOutSine }, + // { "easeInOutSine", lgfx::easing::easeInOutSine }, + // { "easeInExpo", lgfx::easing::easeInExpo }, + // { "easeOutExpo", lgfx::easing::easeOutExpo }, + // { "easeInOutExpo", lgfx::easing::easeInOutExpo }, + // { "easeInCirc", lgfx::easing::easeInCirc }, + // { "easeOutCirc", lgfx::easing::easeOutCirc }, + // { "easeInOutCirc", lgfx::easing::easeInOutCirc }, + // { "easeInBack", lgfx::easing::easeInBack }, + // { "easeOutBack", lgfx::easing::easeOutBack }, + // { "easeInOutBack", lgfx::easing::easeInOutBack }, + // { "linear", lgfx::easing::linear }, +}; + + +void clearZone( int x, int y, int w, int h, uint32_t delay_ms ) +{ + delay( delay_ms ); + tft.fillRect( x, y, w, h, TFT_WHITE ); +} + + + +void setup() +{ + Serial.begin( 115200 ); + tft.init(); + + tft.setTextDatum( TL_DATUM ); + tft.setTextPadding( tft.width() ); + tft.setTextColor( TFT_WHITE, TFT_BLACK ); + tft.setTextSize(2); + tft.setTextWrap( false ); + + sptr = new LGFX_SpriteFx(&tft); + sptr->setPsram( false ); +} + + +void loop() +{ + static uint32_t imgidx = 0; + static uint32_t imgcount = sizeof(images)/sizeof(img_t*); + static uint32_t min_delay_ms = 8; + + auto imgmod = imgidx%imgcount; + min_delay_ms = (imgmod==0) ? 8-min_delay_ms : min_delay_ms; + + auto img = images[imgmod]; + auto posx = tft.width()/2 - img->w/2; + auto posy = tft.height()/2 - img->h/2; + + if( ! sptr->createSprite( img->w, img->h ) ) return; + + // highlight zone + tft.fillRect( posx, posy, sptr->width(), sptr->height(), TFT_WHITE ); + tft.drawRect( posx-1, posy-1, sptr->width()+2, sptr->height()+2, TFT_RED ); + + // fill sprite with image + sptr->drawJpg( img->data, img->len, 0, 0, img->w, img->h ); + + sptr->stretchRTL( posx, posy, min_delay_ms ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->stretchBTT( posx, posy, min_delay_ms ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->stretchLTR( posx, posy, min_delay_ms ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->stretchTTB( posx, posy, min_delay_ms ); // clearZone( posx, posy, img->w, img->h, 500 ); + + size_t easing_functions_count = sizeof(easingFunctions)/sizeof(easingFuncDesc_t); + + for( int i=0;ispinC( posx, posy, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->spinA( posx, posy, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + + sptr->sliceH( posx, posy, 0, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->sliceV( posx, posy, 0, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + + sptr->sliceH( posx, posy, 4, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->sliceV( posx, posy, 4, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + + sptr->sliceH( posx, posy, 8, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->sliceV( posx, posy, 8, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + + sptr->sliceH( posx, posy, 16, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->sliceV( posx, posy, 16, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + + sptr->sliceH( posx, posy, 255, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + sptr->sliceV( posx, posy, 255, 1000, easingFunc ); // clearZone( posx, posy, img->w, img->h, 500 ); + + } + + tft.setCursor( 0, 0 ); + tft.printf("%64s", "" ); + + // clear zone + tft.fillRect( posx-1, posy-1, img->w+2, img->h+2, TFT_BLACK ); + + imgidx++; +} diff --git a/examples/Sprite/TransitionFX/assets.h b/examples/Sprite/TransitionFX/assets.h new file mode 100644 index 00000000..1cf7b291 --- /dev/null +++ b/examples/Sprite/TransitionFX/assets.h @@ -0,0 +1,3088 @@ +/* LGFX logo by tobozo - NOT approved by Lovyan-san :-) odd/uneven square ratio */ +const unsigned char lgfx_logo_201x197_jpg[] = +{ + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x01, 0x01, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x1c, + 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x3a, 0x20, 0x41, 0x64, + 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, + 0x64, 0x79, 0xff, 0xe2, 0x01, 0xc7, 0x49, 0x43, 0x43, 0x5f, 0x50, 0x52, + 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0xb7, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x6d, 0x6e, 0x74, 0x72, + 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x63, 0x73, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0xd3, 0x2d, 0x51, 0x74, 0x05, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x72, 0x58, 0x59, 0x5a, + 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x14, 0x67, 0x58, 0x59, 0x5a, + 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x14, 0x62, 0x58, 0x59, 0x5a, + 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x14, 0x77, 0x74, 0x70, 0x74, + 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x00, 0x14, 0x63, 0x70, 0x72, 0x74, + 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x0c, 0x72, 0x54, 0x52, 0x43, + 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x00, 0x10, 0x67, 0x54, 0x52, 0x43, + 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x00, 0x10, 0x62, 0x54, 0x52, 0x43, + 0x00, 0x00, 0x01, 0x4c, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x63, + 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x00, 0x5b, 0x58, 0x59, 0x5a, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x9f, 0x00, 0x00, 0x38, 0xf4, + 0x00, 0x00, 0x03, 0x91, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x62, 0x96, 0x00, 0x00, 0xb7, 0x87, 0x00, 0x00, 0x18, 0xdc, + 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xa1, + 0x00, 0x00, 0x0f, 0x85, 0x00, 0x00, 0xb6, 0xd3, 0x58, 0x59, 0x5a, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x4f, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x16, 0xc2, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x4e, 0x2f, 0x41, 0x00, 0x70, 0x61, 0x72, 0x61, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x38, 0xe4, 0x64, 0x65, 0x73, 0x63, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x08, 0x06, 0x06, 0x07, + 0x06, 0x05, 0x08, 0x07, 0x07, 0x07, 0x09, 0x09, 0x08, 0x0a, 0x0c, 0x14, + 0x0d, 0x0c, 0x0b, 0x0b, 0x0c, 0x19, 0x12, 0x13, 0x0f, 0x14, 0x1d, 0x1a, + 0x1f, 0x1e, 0x1d, 0x1a, 0x1c, 0x1c, 0x20, 0x24, 0x2e, 0x27, 0x20, 0x22, + 0x2c, 0x23, 0x1c, 0x1c, 0x28, 0x37, 0x29, 0x2c, 0x30, 0x31, 0x34, 0x34, + 0x34, 0x1f, 0x27, 0x39, 0x3d, 0x38, 0x32, 0x3c, 0x2e, 0x33, 0x34, 0x32, + 0xff, 0xdb, 0x00, 0x43, 0x01, 0x09, 0x09, 0x09, 0x0c, 0x0b, 0x0c, 0x18, + 0x0d, 0x0d, 0x18, 0x32, 0x21, 0x1c, 0x21, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x00, 0xc5, 0x00, 0xc9, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, + 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, 0x02, + 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, + 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, + 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, + 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, + 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, + 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, + 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, + 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, + 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, 0x1f, 0x01, 0x00, 0x03, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, + 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, + 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, + 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, + 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, + 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, + 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, + 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, + 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, + 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, + 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xf9, 0xfe, 0x8a, 0x28, 0xa0, 0x02, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x2a, 0xed, 0x96, + 0x93, 0x7b, 0x7e, 0xc3, 0xc8, 0x85, 0x8a, 0x9f, 0xe3, 0x3c, 0x0a, 0x99, + 0x49, 0x45, 0x5e, 0x4c, 0xd6, 0x95, 0x1a, 0x95, 0xa5, 0xc9, 0x4e, 0x2d, + 0xbf, 0x22, 0x95, 0x15, 0xdb, 0x59, 0xfc, 0x3f, 0xb9, 0x64, 0x12, 0x4c, + 0x93, 0x49, 0xec, 0x8b, 0x81, 0x5b, 0x23, 0x45, 0xd2, 0x34, 0x84, 0x4f, + 0xb4, 0x28, 0x8e, 0xed, 0xbe, 0xec, 0x11, 0xa6, 0xe9, 0x31, 0xeb, 0x5c, + 0xdf, 0x5b, 0x8b, 0x7c, 0xb4, 0xd5, 0xd9, 0xec, 0x2c, 0x8a, 0xa5, 0x38, + 0x7b, 0x4c, 0x55, 0x48, 0xd3, 0x5f, 0x7b, 0xfb, 0x97, 0xf9, 0x9e, 0x6d, + 0x15, 0xad, 0xc4, 0xff, 0x00, 0xea, 0xa0, 0x91, 0xff, 0x00, 0xdd, 0x52, + 0x6a, 0xc8, 0xd1, 0x35, 0x23, 0xff, 0x00, 0x2e, 0x92, 0x7e, 0x95, 0xea, + 0x96, 0xd7, 0x7a, 0x25, 0x84, 0x48, 0xf2, 0xac, 0xb3, 0x5d, 0x48, 0x76, + 0xad, 0xbc, 0xa9, 0xb7, 0x67, 0x7c, 0x9a, 0xd2, 0xb7, 0x96, 0xd7, 0x5c, + 0xb6, 0x9e, 0xdd, 0x6c, 0xa1, 0x86, 0x75, 0x5c, 0xc4, 0x54, 0xe0, 0x93, + 0xe9, 0x58, 0xd4, 0xc5, 0xd5, 0x83, 0xb3, 0x8d, 0x8e, 0xfc, 0x36, 0x49, + 0x82, 0xab, 0x4d, 0xd4, 0x8d, 0x49, 0x4a, 0x2b, 0x47, 0x25, 0x64, 0xbe, + 0xe7, 0x76, 0x78, 0xdf, 0xf6, 0x16, 0xa7, 0xff, 0x00, 0x3e, 0x8d, 0xff, + 0x00, 0x7d, 0x0f, 0xf1, 0xa4, 0x3a, 0x1e, 0xa4, 0x3f, 0xe5, 0xd1, 0xbf, + 0x31, 0xfe, 0x35, 0xea, 0x9f, 0xf0, 0x8c, 0x6a, 0xd9, 0xf9, 0xad, 0x59, + 0x47, 0x72, 0x78, 0x02, 0xb5, 0x6d, 0x3c, 0x1e, 0x89, 0x11, 0x97, 0x50, + 0xba, 0x55, 0x18, 0xca, 0xac, 0x5f, 0x31, 0x35, 0x34, 0xf1, 0x75, 0xea, + 0x3b, 0x42, 0x37, 0x37, 0xc4, 0xe4, 0xd9, 0x36, 0x1a, 0x1c, 0xf5, 0x31, + 0x0d, 0x7c, 0xd3, 0xfc, 0x91, 0xe1, 0xf2, 0xe9, 0xf7, 0x90, 0xff, 0x00, + 0xac, 0xb6, 0x95, 0x7f, 0xe0, 0x26, 0xab, 0x57, 0xb1, 0x5e, 0xe9, 0x20, + 0x5b, 0x41, 0x79, 0x61, 0xe6, 0x4d, 0x6d, 0x30, 0xca, 0x92, 0xbc, 0x83, + 0xe8, 0x6b, 0x22, 0xe3, 0x46, 0x17, 0x0a, 0x4c, 0xf6, 0x3b, 0xbd, 0xca, + 0x73, 0xf9, 0xd3, 0x59, 0x83, 0x4e, 0xd3, 0x89, 0x2f, 0x85, 0xa1, 0x56, + 0x9a, 0xa9, 0x86, 0xad, 0x74, 0xfb, 0xab, 0x7f, 0x5f, 0x71, 0xe6, 0x94, + 0x57, 0x5b, 0x75, 0xe1, 0x6b, 0x77, 0xc9, 0xb7, 0x91, 0xa2, 0x6f, 0x46, + 0xe4, 0x56, 0x0d, 0xee, 0x8f, 0x79, 0x63, 0x93, 0x24, 0x7b, 0xa3, 0x1f, + 0xc6, 0x9c, 0x8a, 0xea, 0xa7, 0x89, 0xa7, 0x53, 0x44, 0xf5, 0x3c, 0x3c, + 0x6e, 0x4b, 0x8d, 0xc1, 0xae, 0x6a, 0x90, 0xd3, 0xba, 0xd5, 0x7f, 0x5e, + 0xa5, 0x0a, 0x28, 0xa2, 0xba, 0x0f, 0x28, 0x28, 0xa2, 0x8a, 0x00, 0x28, + 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, 0xa2, 0x8a, 0x00, 0x28, + 0xa2, 0x8a, 0x00, 0x2a, 0x6b, 0x6b, 0x59, 0xaf, 0x26, 0x11, 0x40, 0x85, + 0xd8, 0xfe, 0x95, 0x6f, 0x4a, 0xd2, 0x27, 0xd4, 0xe5, 0xc2, 0x82, 0xb1, + 0x2f, 0xde, 0x7c, 0x7e, 0x83, 0xde, 0xbd, 0x27, 0x49, 0xf0, 0xed, 0x85, + 0x8e, 0x8e, 0xd7, 0x57, 0x13, 0xfd, 0x96, 0x05, 0x6c, 0x64, 0xa9, 0x2c, + 0xe6, 0xb9, 0x2b, 0xe2, 0x95, 0x3f, 0x76, 0x3a, 0xb3, 0xdb, 0xcb, 0xf2, + 0x8f, 0x6d, 0x0f, 0xac, 0x62, 0x65, 0xc9, 0x4b, 0xbf, 0x57, 0xe9, 0xfe, + 0x66, 0x5f, 0x86, 0x7e, 0x1e, 0x49, 0x7a, 0x9e, 0x7c, 0xa1, 0x5c, 0x29, + 0xf9, 0x9d, 0xce, 0x11, 0x7f, 0xc6, 0xba, 0x58, 0xef, 0xf4, 0x8d, 0x1a, + 0xd5, 0xda, 0xc9, 0x56, 0xea, 0x68, 0xb2, 0xad, 0x2b, 0x2f, 0xc8, 0x84, + 0x7a, 0x0a, 0xb6, 0xbe, 0x23, 0xd1, 0x74, 0xfd, 0x1a, 0xde, 0xce, 0x0b, + 0x99, 0xa6, 0xf3, 0x18, 0xb6, 0x56, 0x33, 0xcd, 0x71, 0x9e, 0x1b, 0x70, + 0x25, 0x25, 0xe2, 0xf3, 0xd6, 0x39, 0x41, 0x48, 0x4f, 0x49, 0x25, 0x63, + 0x85, 0x07, 0xd8, 0x60, 0x9a, 0xca, 0x58, 0x69, 0x54, 0x8c, 0x65, 0x37, + 0xab, 0xdf, 0xc8, 0xee, 0x86, 0x6b, 0x4f, 0x0f, 0x52, 0xad, 0x2a, 0x30, + 0x4a, 0x94, 0x76, 0xfe, 0xf3, 0xf3, 0x7b, 0xb3, 0xaf, 0xd2, 0xad, 0x3c, + 0x47, 0xab, 0x47, 0x35, 0xe6, 0xa1, 0xaa, 0xbe, 0x97, 0x63, 0x29, 0xca, + 0x64, 0xfc, 0xf8, 0xed, 0x81, 0xd8, 0x56, 0x54, 0xbe, 0x06, 0xba, 0x5f, + 0x17, 0x5b, 0x5f, 0xe9, 0x5a, 0xac, 0x57, 0x91, 0x06, 0x56, 0x67, 0x9e, + 0x4f, 0x9f, 0x23, 0xae, 0x47, 0x7a, 0xee, 0x53, 0xfb, 0x3e, 0x12, 0x5f, + 0x53, 0xb8, 0x8e, 0x6b, 0xa2, 0x32, 0xcd, 0x21, 0xe1, 0x7d, 0x80, 0xec, + 0x2a, 0xd8, 0xb7, 0xd3, 0xae, 0xe1, 0x0c, 0xb1, 0xc0, 0xe8, 0xdd, 0x19, + 0x30, 0x3f, 0x22, 0x2b, 0xaa, 0x14, 0xe3, 0x0f, 0x85, 0x1f, 0x39, 0x36, + 0xaa, 0xce, 0x53, 0x96, 0xec, 0xc6, 0xf1, 0x27, 0x83, 0x64, 0xd7, 0x25, + 0xb6, 0xba, 0x17, 0xa8, 0x97, 0x70, 0x29, 0x50, 0xc1, 0x00, 0x0d, 0xe8, + 0x08, 0xae, 0x43, 0x50, 0xf0, 0xe6, 0xb1, 0x62, 0xf1, 0xb4, 0xcb, 0xba, + 0x28, 0xe4, 0x0e, 0xd2, 0x42, 0x70, 0x70, 0x3a, 0xf0, 0x6b, 0xd5, 0x21, + 0x8c, 0x45, 0x12, 0xc6, 0x1c, 0xb0, 0x1c, 0x02, 0xc7, 0x26, 0xa1, 0xbc, + 0x51, 0x3f, 0xfa, 0x33, 0xe0, 0xc4, 0xca, 0x4c, 0xbf, 0xee, 0xfa, 0x7e, + 0x34, 0xa7, 0x4e, 0x33, 0x77, 0x92, 0xd4, 0xea, 0xa1, 0x8a, 0xad, 0x46, + 0x9b, 0xa5, 0x4e, 0x76, 0x8b, 0xdd, 0x1c, 0x7e, 0xb3, 0x70, 0x97, 0xde, + 0x0f, 0xbe, 0xbb, 0xb0, 0xd4, 0x44, 0xca, 0xb1, 0x65, 0x82, 0x92, 0x0a, + 0xf3, 0x5a, 0x9a, 0x4c, 0xb7, 0x73, 0x78, 0x56, 0xc0, 0xd8, 0xcd, 0x0c, + 0x73, 0xf9, 0x4b, 0xe6, 0x19, 0x3b, 0x8c, 0x0f, 0x5a, 0xe5, 0xfc, 0x63, + 0x77, 0xa6, 0x69, 0xb0, 0xb9, 0xb7, 0xb3, 0x0b, 0x73, 0x70, 0x9b, 0x12, + 0x38, 0x4e, 0xdf, 0x94, 0x77, 0x61, 0xdf, 0xb5, 0x59, 0xd3, 0xbc, 0x58, + 0xd6, 0xfa, 0x6d, 0xbc, 0x32, 0x69, 0xd0, 0x6f, 0x48, 0xc2, 0xb7, 0x07, + 0xd3, 0xeb, 0x5c, 0x74, 0xe9, 0x52, 0xc2, 0x42, 0x50, 0x93, 0x76, 0x97, + 0x6d, 0xcd, 0xb2, 0xdc, 0xb6, 0xb5, 0x5a, 0x89, 0xe0, 0xa0, 0x9f, 0x2e, + 0xad, 0x4b, 0x55, 0xaa, 0xb1, 0xa7, 0x7d, 0xac, 0x4d, 0x0e, 0x97, 0x6b, + 0x0d, 0xad, 0xdc, 0x2d, 0x70, 0xce, 0x73, 0xe4, 0x0f, 0x97, 0x15, 0x6b, + 0xc3, 0xeb, 0xac, 0x5b, 0x99, 0xa3, 0xd5, 0x2f, 0x20, 0x92, 0x49, 0x24, + 0xca, 0x42, 0xec, 0x09, 0xda, 0x7b, 0x57, 0x3d, 0x06, 0xb9, 0x67, 0x6c, + 0xaa, 0x21, 0xd2, 0x60, 0x5d, 0xa7, 0x2b, 0xc9, 0x38, 0xfd, 0x69, 0xba, + 0x7c, 0xd2, 0xea, 0x9e, 0x23, 0x8e, 0xe1, 0xce, 0x09, 0x7d, 0xed, 0x8e, + 0xc0, 0x57, 0x9d, 0x27, 0xcc, 0x9c, 0x57, 0x53, 0xec, 0x71, 0x79, 0x47, + 0xd6, 0x30, 0xea, 0x35, 0x7d, 0xce, 0x5b, 0xb6, 0xd5, 0xb7, 0xff, 0x00, + 0x23, 0x57, 0x53, 0xd0, 0x22, 0xd4, 0x2e, 0x66, 0x5d, 0x31, 0x15, 0x27, + 0x89, 0xf1, 0x34, 0x45, 0xc6, 0x46, 0x40, 0x39, 0xfa, 0x73, 0x59, 0x72, + 0x78, 0x57, 0x51, 0x8d, 0xc2, 0x48, 0x22, 0x56, 0x61, 0x90, 0xa5, 0xc6, + 0x4d, 0x57, 0x1e, 0x21, 0xb4, 0x4f, 0x19, 0x6b, 0x77, 0x7b, 0xe4, 0xfb, + 0x3b, 0xaa, 0x60, 0x85, 0x39, 0xf9, 0x40, 0x1d, 0x2b, 0x33, 0x5a, 0xd7, + 0xa1, 0xbd, 0xd6, 0xac, 0xa7, 0xb6, 0x79, 0x7c, 0xb4, 0x84, 0xe7, 0x70, + 0x20, 0xf2, 0x7d, 0x2b, 0xbd, 0x60, 0xa1, 0xf5, 0x75, 0x55, 0xcb, 0xde, + 0xb6, 0xc7, 0x8b, 0x96, 0x71, 0x0e, 0x3b, 0xdb, 0x53, 0xc2, 0x4e, 0x37, + 0x8e, 0x97, 0x93, 0xbf, 0x63, 0x3b, 0x5e, 0xf0, 0x82, 0xc7, 0x3b, 0x21, + 0x4f, 0xb3, 0xdc, 0xf5, 0xc0, 0xfb, 0xa7, 0xf0, 0xae, 0x32, 0xee, 0xca, + 0x7b, 0x19, 0x7c, 0xb9, 0xe3, 0x2a, 0x7b, 0x1e, 0xc7, 0xe9, 0x5e, 0xc5, + 0x06, 0xa7, 0x67, 0xe2, 0x5d, 0x32, 0x66, 0x30, 0x3a, 0xdc, 0xda, 0x44, + 0x3f, 0x78, 0x78, 0xdc, 0x07, 0xad, 0x73, 0x77, 0x36, 0xb0, 0xde, 0x42, + 0x62, 0x9d, 0x03, 0x29, 0xfd, 0x3d, 0xc5, 0x45, 0x2c, 0x54, 0xe9, 0x3e, + 0x59, 0xea, 0x8f, 0x4f, 0x13, 0x92, 0x61, 0xf3, 0x18, 0x4a, 0xa6, 0x1e, + 0xd1, 0xa8, 0xb7, 0xb7, 0xc2, 0xd9, 0xe7, 0x34, 0x56, 0x9e, 0xad, 0xa3, + 0xcb, 0xa6, 0xbe, 0xe1, 0x97, 0x81, 0x8f, 0xca, 0xfe, 0x9e, 0xc6, 0xb3, + 0x2b, 0xd6, 0x84, 0xe3, 0x38, 0xf3, 0x47, 0x63, 0xe1, 0x71, 0x18, 0x7a, + 0xb8, 0x7a, 0x8e, 0x95, 0x55, 0x69, 0x20, 0xa2, 0x8a, 0x2a, 0x8c, 0x42, + 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0xb5, 0x34, 0x6d, 0x16, + 0x5d, 0x52, 0x5c, 0xf2, 0xb0, 0x83, 0x82, 0x71, 0xc9, 0xf6, 0x15, 0x5b, + 0x4e, 0xb1, 0x7d, 0x42, 0xed, 0x61, 0x4e, 0x07, 0x56, 0x6f, 0x41, 0x5e, + 0xbd, 0xa2, 0xd9, 0x5b, 0xe8, 0x1a, 0x4c, 0x77, 0xd2, 0xa0, 0xcb, 0xb7, + 0x93, 0x6b, 0x11, 0x5c, 0xee, 0x6f, 0x5a, 0xe4, 0xc4, 0xd7, 0x71, 0xf7, + 0x21, 0xbb, 0xfc, 0x0f, 0x6f, 0x29, 0xcb, 0xe1, 0x56, 0xf8, 0x8c, 0x47, + 0xf0, 0xe2, 0xed, 0x6f, 0xe6, 0x7d, 0xbf, 0xcc, 0x6e, 0x97, 0xa6, 0xc9, + 0xe1, 0xbf, 0x22, 0xee, 0xe2, 0xc4, 0x7d, 0x94, 0x0c, 0x2a, 0x91, 0xc5, + 0x6d, 0xdf, 0x78, 0xab, 0x49, 0xbf, 0xb4, 0x6b, 0x69, 0x2d, 0x25, 0x11, + 0xb0, 0x23, 0x6a, 0xe0, 0x01, 0xef, 0xd2, 0x88, 0xe1, 0xbe, 0xba, 0xb0, + 0xb8, 0x8b, 0x54, 0xb6, 0xb8, 0x6f, 0x31, 0xc3, 0x02, 0x9d, 0x47, 0xe1, + 0x4b, 0x77, 0xe1, 0x2d, 0x3a, 0xce, 0xce, 0x5b, 0xa9, 0x65, 0xb8, 0xf2, + 0xe3, 0x42, 0xed, 0x85, 0x1d, 0x00, 0xaf, 0x16, 0x5e, 0x67, 0xd3, 0xe3, + 0xaa, 0x65, 0x92, 0x6a, 0x18, 0xfd, 0xd6, 0xdc, 0xb7, 0xb5, 0xba, 0x6d, + 0xa1, 0x5a, 0xc3, 0x5a, 0xd0, 0xed, 0x2d, 0xa2, 0xb6, 0x5b, 0x79, 0xf6, + 0xa0, 0xdb, 0xb8, 0x91, 0xf9, 0xd7, 0x25, 0xfb, 0x8d, 0x1b, 0x52, 0x90, + 0xda, 0xdd, 0x2b, 0x2a, 0xce, 0x25, 0x47, 0x65, 0xeb, 0x95, 0x20, 0x0e, + 0x7b, 0xf5, 0xad, 0xfb, 0x8d, 0x1e, 0xc2, 0x5f, 0x0e, 0xa6, 0xaf, 0x61, + 0x71, 0x23, 0x21, 0x23, 0x28, 0xeb, 0x82, 0x33, 0x9f, 0xf0, 0xae, 0x4b, + 0x50, 0xb4, 0x17, 0x30, 0xb8, 0x1c, 0x6e, 0x5d, 0xad, 0x8f, 0xcc, 0x1f, + 0xc0, 0xd7, 0xa5, 0x0c, 0x45, 0x58, 0xd4, 0x50, 0xae, 0xce, 0x2c, 0x46, + 0x4f, 0x81, 0xaf, 0x84, 0x96, 0x27, 0x2d, 0x5a, 0xa7, 0xae, 0xfa, 0xdb, + 0x7d, 0xfa, 0xa3, 0x4b, 0x5b, 0xd5, 0xef, 0x6d, 0x75, 0x7b, 0x68, 0xad, + 0xae, 0x82, 0xa4, 0xaf, 0x97, 0x39, 0x0a, 0x64, 0xc6, 0x33, 0x96, 0xfd, + 0x00, 0xad, 0x0b, 0xad, 0x42, 0x3f, 0xb3, 0xcf, 0x3a, 0x16, 0x69, 0xa0, + 0x06, 0x48, 0xd9, 0x93, 0x0f, 0x90, 0x32, 0x55, 0xbf, 0x3c, 0xe4, 0x7a, + 0x57, 0x17, 0x23, 0x7d, 0xb2, 0xda, 0x08, 0xd9, 0xc4, 0x57, 0xf6, 0xa4, + 0x15, 0x24, 0x64, 0x36, 0x3a, 0x1f, 0xa7, 0x4a, 0xb5, 0xfd, 0xa5, 0x74, + 0xf0, 0x4c, 0xf7, 0xb0, 0x28, 0x98, 0xaf, 0x96, 0x8e, 0xbd, 0x64, 0x25, + 0x4a, 0xe3, 0x1e, 0x9c, 0xe6, 0xbd, 0x0b, 0x9f, 0x24, 0xe0, 0x8e, 0x9b, + 0xc3, 0x3e, 0x30, 0xd7, 0x75, 0x59, 0xae, 0x3c, 0xc3, 0x04, 0x81, 0x19, + 0x76, 0xab, 0x29, 0x00, 0xee, 0x38, 0xc6, 0x45, 0x6d, 0xde, 0x78, 0xba, + 0xd2, 0xd2, 0xee, 0xe2, 0xca, 0xf3, 0x74, 0x17, 0x52, 0x22, 0xed, 0xc7, + 0xce, 0xb8, 0xf5, 0xc8, 0xe9, 0xde, 0xb9, 0x7f, 0x0d, 0xc0, 0x34, 0x9b, + 0x00, 0xf2, 0x0c, 0x49, 0x9d, 0xec, 0x7d, 0x4e, 0x3f, 0xa5, 0x57, 0xb2, + 0xbc, 0x44, 0xd6, 0xee, 0x35, 0x1d, 0x4e, 0xd0, 0x5c, 0xfd, 0xa6, 0x55, + 0x86, 0x20, 0x09, 0x01, 0x57, 0xd4, 0x54, 0x55, 0xa8, 0xa1, 0x1b, 0x9b, + 0x61, 0x30, 0xee, 0xa4, 0x9a, 0xd7, 0x95, 0x6a, 0xda, 0xe8, 0x82, 0xe6, + 0x51, 0xa8, 0xea, 0xd3, 0x5e, 0x6f, 0xf3, 0x10, 0xe1, 0x51, 0xbb, 0x05, + 0xeb, 0x81, 0xf5, 0x35, 0x25, 0x75, 0xfa, 0x9a, 0xe8, 0xba, 0x7e, 0x9b, + 0x3d, 0xd0, 0xd3, 0x5d, 0x8c, 0x4b, 0xbb, 0x1b, 0xfa, 0xd4, 0xf6, 0xf6, + 0xda, 0x24, 0xf6, 0x71, 0x4e, 0x74, 0xf9, 0x01, 0x78, 0xc3, 0xe3, 0x7f, + 0x4c, 0x8c, 0xd7, 0x97, 0x4e, 0x35, 0x31, 0xed, 0xce, 0x9e, 0xc8, 0xfa, + 0x6c, 0xb7, 0x88, 0xb2, 0x9c, 0x06, 0x1f, 0x96, 0x2e, 0x4e, 0xef, 0x57, + 0x6d, 0xd9, 0xc4, 0xd6, 0xdf, 0x84, 0xe4, 0x48, 0xf5, 0xf8, 0x0b, 0xb0, + 0x50, 0x7e, 0x5c, 0x9f, 0x7a, 0xd2, 0xd3, 0x2d, 0xad, 0x75, 0x1d, 0x3a, + 0x2b, 0xc1, 0xa3, 0x84, 0x49, 0x32, 0x46, 0xe9, 0x71, 0x9f, 0xce, 0xaf, + 0xd9, 0x78, 0x73, 0x4f, 0xb8, 0x71, 0x3c, 0x99, 0xb4, 0x78, 0xdf, 0xee, + 0x79, 0x8a, 0x43, 0x7d, 0x2b, 0x95, 0xc1, 0xab, 0xdc, 0xf7, 0xf1, 0x59, + 0xae, 0x1a, 0x78, 0x77, 0x19, 0xdd, 0x29, 0x26, 0xb6, 0xbe, 0xeb, 0xca, + 0xe6, 0x25, 0xba, 0xb4, 0x7e, 0x36, 0xd6, 0x92, 0x45, 0x19, 0x45, 0x8f, + 0x6f, 0x1d, 0x32, 0x39, 0xac, 0xfd, 0x7e, 0x25, 0x9b, 0xc5, 0x7a, 0x5c, + 0x6c, 0x06, 0x1e, 0x26, 0xc9, 0xfc, 0x6b, 0xaa, 0x83, 0x4b, 0x73, 0xe3, + 0x3d, 0x4b, 0x50, 0xb8, 0x78, 0x52, 0xce, 0x44, 0x8c, 0x2b, 0x19, 0x07, + 0x3b, 0x47, 0x35, 0x51, 0xae, 0x74, 0xfd, 0x77, 0x50, 0x96, 0x23, 0x6d, + 0x14, 0x33, 0xc2, 0x8c, 0x2d, 0xe6, 0xdd, 0x8f, 0xce, 0xbd, 0x7f, 0xac, + 0x53, 0x86, 0x06, 0x34, 0xba, 0xb4, 0x7c, 0x0e, 0x4f, 0x96, 0x62, 0x1e, + 0x3d, 0x62, 0x62, 0xbd, 0xc8, 0x28, 0xde, 0xfe, 0x8b, 0xfa, 0x64, 0x7a, + 0x88, 0x8f, 0x4e, 0xfb, 0x45, 0x85, 0x86, 0x9c, 0xe1, 0x9c, 0x05, 0x69, + 0x8f, 0x25, 0xaa, 0x8b, 0xf8, 0x56, 0xea, 0x0b, 0x65, 0x9e, 0xe6, 0x78, + 0x20, 0x52, 0x01, 0xfd, 0xe3, 0x80, 0x46, 0x7a, 0x55, 0xb7, 0x87, 0xc5, + 0x0b, 0x73, 0x66, 0x23, 0xbb, 0x4f, 0x29, 0x65, 0x1b, 0xff, 0x00, 0x78, + 0x3e, 0xed, 0x5f, 0xf1, 0x04, 0x3a, 0x7b, 0x69, 0xdb, 0x35, 0x49, 0x9a, + 0x59, 0x25, 0x70, 0x76, 0xc2, 0xe0, 0x91, 0x8f, 0x5a, 0xf1, 0xe4, 0xdf, + 0x34, 0x57, 0x47, 0xf8, 0x1f, 0x51, 0x88, 0xcc, 0xf1, 0x94, 0x31, 0x11, + 0xc2, 0xe0, 0xe9, 0xa9, 0x39, 0x6a, 0xe5, 0xab, 0x4f, 0x43, 0x9c, 0xd4, + 0xfc, 0x29, 0x7b, 0x05, 0xb7, 0xef, 0x61, 0x59, 0xe0, 0x91, 0x7a, 0xa1, + 0xdc, 0x31, 0x5e, 0x65, 0xad, 0x69, 0x0f, 0xa6, 0x4f, 0x90, 0x09, 0x81, + 0x8f, 0xca, 0x4f, 0x6f, 0x63, 0x5f, 0x44, 0xd9, 0x4b, 0x0f, 0x92, 0x97, + 0x16, 0x97, 0x88, 0xb6, 0xed, 0x19, 0xca, 0xbc, 0x80, 0x11, 0xec, 0x45, + 0x79, 0x8e, 0xb3, 0x04, 0x17, 0xb3, 0xdd, 0x44, 0xc0, 0x18, 0x9d, 0x8e, + 0x2b, 0xd1, 0x6e, 0x38, 0x59, 0xa7, 0x4e, 0x5c, 0xd1, 0x66, 0x34, 0xe3, + 0x5b, 0x3d, 0xa3, 0x52, 0x9e, 0x26, 0x97, 0x25, 0x5a, 0x7b, 0x3e, 0xfe, + 0x5e, 0x9f, 0x7f, 0x73, 0xcc, 0x28, 0xab, 0x57, 0xf6, 0x52, 0x58, 0x5d, + 0xbc, 0x0f, 0xdb, 0x95, 0x3e, 0xa3, 0xd6, 0xaa, 0xd7, 0xa7, 0x19, 0x29, + 0x2b, 0xa3, 0xe2, 0xea, 0x53, 0x95, 0x29, 0xb8, 0x4d, 0x59, 0xad, 0x18, + 0x51, 0x45, 0x14, 0xc8, 0x0a, 0x3a, 0x9c, 0x51, 0x5a, 0xba, 0x05, 0x8f, + 0xdb, 0x35, 0x10, 0xcc, 0x33, 0x1c, 0x5f, 0x31, 0xfa, 0xf6, 0xa8, 0xa9, + 0x35, 0x08, 0xb9, 0x3e, 0x86, 0xf8, 0x6c, 0x3c, 0xf1, 0x15, 0xa3, 0x46, + 0x1b, 0xc9, 0xd8, 0xe9, 0x74, 0x1d, 0x3c, 0x69, 0xf6, 0x88, 0xce, 0x3f, + 0x7a, 0xf8, 0x67, 0xff, 0x00, 0x0a, 0xef, 0x2e, 0x75, 0xed, 0x2a, 0xfe, + 0x2d, 0x3b, 0xed, 0x36, 0xb2, 0xef, 0xb1, 0xc1, 0x45, 0x56, 0xf9, 0x49, + 0x02, 0xb8, 0xdb, 0xbb, 0xc8, 0x2c, 0xa2, 0xf3, 0x26, 0x6d, 0xa3, 0xb5, + 0x66, 0xb7, 0x89, 0xac, 0x47, 0x4d, 0xe7, 0xf0, 0xaf, 0x1a, 0x2e, 0xbc, + 0xdb, 0x9c, 0x56, 0xe7, 0xe9, 0x38, 0x8c, 0x3e, 0x55, 0x42, 0x95, 0x3c, + 0x36, 0x22, 0x49, 0x72, 0x6a, 0xb5, 0xb3, 0xbf, 0x7f, 0x99, 0xd4, 0x5d, + 0xea, 0x97, 0x37, 0x37, 0x72, 0x4d, 0xe7, 0x38, 0xde, 0x73, 0x8c, 0xd6, + 0xb7, 0x87, 0xe5, 0xb8, 0xbb, 0xb7, 0xd4, 0xed, 0xcb, 0xbc, 0x8c, 0xf6, + 0x8e, 0x15, 0x09, 0xce, 0x4e, 0x0d, 0x79, 0xf7, 0xfc, 0x25, 0x36, 0x99, + 0x03, 0xcb, 0x93, 0x1e, 0xb5, 0xbd, 0x67, 0x7a, 0xc1, 0x56, 0xe2, 0xda, + 0x42, 0xbb, 0x86, 0x43, 0x0a, 0xca, 0x74, 0xa7, 0x4f, 0x59, 0x23, 0xa2, + 0x55, 0x30, 0x79, 0x8e, 0x1e, 0x78, 0x7c, 0x3c, 0xd5, 0xed, 0x6f, 0x43, + 0xb9, 0xf0, 0xbd, 0x9d, 0xd4, 0x1e, 0x19, 0xb6, 0xb6, 0xb8, 0xb0, 0x32, + 0x46, 0xc9, 0xf3, 0xa3, 0x0e, 0xf9, 0x34, 0xcb, 0x63, 0xa7, 0x47, 0x67, + 0xe7, 0x6a, 0x96, 0x56, 0xf6, 0xac, 0xee, 0xc1, 0x10, 0x82, 0x49, 0x50, + 0x78, 0x35, 0xc7, 0x5e, 0xf8, 0x9e, 0xf2, 0xc6, 0x03, 0x2c, 0xb7, 0xb2, + 0xfb, 0x0d, 0xdd, 0x6b, 0x90, 0xbb, 0xf1, 0x06, 0xb3, 0xad, 0x4c, 0x4a, + 0x3b, 0xed, 0xed, 0xff, 0x00, 0xeb, 0xae, 0xf9, 0xcd, 0xe2, 0xa2, 0x9a, + 0x8a, 0x56, 0xea, 0x7c, 0xac, 0x30, 0x7f, 0xd8, 0xf5, 0x5c, 0x2a, 0x57, + 0x73, 0xe6, 0xd7, 0x92, 0x2b, 0x55, 0x7f, 0x99, 0xe9, 0xb7, 0xda, 0x27, + 0x85, 0x75, 0xa9, 0x4a, 0x79, 0xcb, 0x6f, 0x2b, 0x1c, 0x46, 0x63, 0x53, + 0x8c, 0xfb, 0xe7, 0xfa, 0x56, 0x3d, 0xd7, 0x83, 0x75, 0x9b, 0x4d, 0x67, + 0xec, 0x36, 0x70, 0xac, 0xfb, 0x63, 0xde, 0x25, 0x93, 0x20, 0x7a, 0x7e, + 0x78, 0xae, 0x10, 0x5a, 0xeb, 0x29, 0xfb, 0xcf, 0x3d, 0x81, 0x1c, 0xfd, + 0xea, 0xbc, 0xbe, 0x28, 0xf1, 0x3e, 0x96, 0xc1, 0x66, 0xba, 0x98, 0xa2, + 0xf5, 0x52, 0x7a, 0x55, 0x52, 0x55, 0x21, 0x25, 0x69, 0x26, 0xbb, 0x1e, + 0x6e, 0x36, 0x8d, 0x29, 0xcf, 0x9d, 0x29, 0xd3, 0xbe, 0xed, 0xab, 0xfc, + 0xfa, 0x1d, 0xbf, 0xfc, 0x23, 0x7a, 0xb6, 0x99, 0x64, 0xd7, 0xba, 0xa1, + 0xb5, 0x6d, 0xa7, 0xe4, 0x46, 0x8d, 0x98, 0x67, 0x8f, 0x52, 0x07, 0xe8, + 0x6a, 0x43, 0xe2, 0x12, 0x42, 0x06, 0xb0, 0xb4, 0x3b, 0x08, 0x23, 0xf7, + 0x7d, 0xc5, 0x60, 0x5a, 0xf8, 0x8e, 0x5d, 0x6a, 0x01, 0xe6, 0x5c, 0x3b, + 0x30, 0xea, 0x8c, 0x7a, 0x57, 0x31, 0xab, 0x5d, 0xde, 0x4b, 0xab, 0x35, + 0xb4, 0x32, 0x95, 0x03, 0x80, 0x01, 0xc5, 0x61, 0x53, 0x9f, 0x11, 0x59, + 0xaf, 0x86, 0xc7, 0xd0, 0xe1, 0xa8, 0xe1, 0x32, 0xcc, 0xbd, 0x4e, 0x7f, + 0xbd, 0xe7, 0x76, 0xd3, 0xaf, 0xca, 0xe7, 0xa6, 0xcd, 0xe2, 0xe9, 0xe7, + 0x89, 0xa3, 0x96, 0xd6, 0xd5, 0x91, 0x86, 0x08, 0x28, 0x39, 0xa5, 0x5f, + 0x1a, 0xdc, 0x46, 0x8a, 0x82, 0x0b, 0x50, 0x8a, 0x30, 0x06, 0xc1, 0xc0, + 0xaf, 0x2e, 0x1a, 0x5e, 0xa4, 0xe3, 0x2d, 0x70, 0x40, 0x3e, 0xac, 0x68, + 0x3a, 0x15, 0xd6, 0xe6, 0x59, 0x2e, 0x70, 0xc0, 0xe3, 0x04, 0x9a, 0x70, + 0xa1, 0xec, 0xf4, 0x8d, 0x4b, 0x7a, 0x18, 0x3a, 0xf8, 0x77, 0xee, 0xc7, + 0x00, 0xbe, 0x76, 0xff, 0x00, 0x23, 0xbd, 0xd5, 0x75, 0xf8, 0x6f, 0x4c, + 0x21, 0x1d, 0x21, 0x58, 0xd0, 0x28, 0x45, 0x6c, 0x01, 0x59, 0x6d, 0xab, + 0x40, 0xbd, 0x6f, 0x00, 0xff, 0x00, 0x81, 0xd7, 0x34, 0x9e, 0x1c, 0x76, + 0xfb, 0xd3, 0x16, 0x1f, 0xec, 0xd4, 0xc9, 0xe1, 0x75, 0x73, 0x85, 0x99, + 0x98, 0xff, 0x00, 0x74, 0xf0, 0xdf, 0xfd, 0x7f, 0xc2, 0x93, 0xc3, 0x52, + 0xdd, 0xc9, 0xfd, 0xc7, 0x5c, 0x33, 0x6c, 0x6d, 0x38, 0x28, 0x53, 0xc3, + 0xa4, 0x97, 0x76, 0x6d, 0x3e, 0xbb, 0x68, 0xa3, 0x9b, 0xc0, 0x7f, 0x1a, + 0x80, 0xf8, 0x82, 0xc1, 0x0e, 0x44, 0xfc, 0xfb, 0x0a, 0xa1, 0x1f, 0x86, + 0xa0, 0x0d, 0x93, 0xbd, 0x80, 0x3c, 0xa9, 0x38, 0xad, 0x0b, 0x8f, 0x09, + 0xd8, 0x4d, 0xa7, 0x3c, 0xf6, 0x45, 0x84, 0x88, 0x32, 0x51, 0xcf, 0x4f, + 0x63, 0x4a, 0x54, 0x68, 0x42, 0xdc, 0xd7, 0xb3, 0x15, 0x5c, 0xdb, 0x34, + 0x82, 0xbf, 0xb3, 0x8a, 0x5f, 0x36, 0x5a, 0x8f, 0x56, 0x8a, 0x5b, 0x56, + 0xb8, 0x4b, 0x83, 0xe5, 0xaf, 0x53, 0x9e, 0x95, 0x97, 0x27, 0x8a, 0xad, + 0x49, 0x3f, 0x2c, 0xad, 0x8a, 0xe6, 0xa3, 0xb8, 0x30, 0xd8, 0xcf, 0x6f, + 0x9c, 0x16, 0x61, 0xc5, 0x6f, 0xe9, 0x1a, 0x44, 0x72, 0xd9, 0x47, 0x2b, + 0x44, 0xac, 0xc7, 0x9e, 0x47, 0x5a, 0xde, 0x38, 0x28, 0xab, 0xdd, 0x36, + 0x61, 0x0c, 0xf7, 0x19, 0x8b, 0x71, 0x86, 0x1e, 0xc9, 0xda, 0xef, 0x4e, + 0xb7, 0x1c, 0x7c, 0x5c, 0x80, 0x61, 0x62, 0x93, 0x1f, 0x5a, 0x2d, 0xbc, + 0x4e, 0x93, 0xdc, 0xac, 0x6f, 0x09, 0x50, 0xc7, 0x19, 0xcd, 0x68, 0x36, + 0x93, 0x6d, 0x18, 0xf9, 0x62, 0x5d, 0xac, 0x32, 0xb9, 0x1f, 0x98, 0xfc, + 0x2b, 0x9b, 0x8a, 0x15, 0xb9, 0xf1, 0x0a, 0xc6, 0x80, 0x05, 0x56, 0xed, + 0xed, 0x55, 0xf5, 0x5a, 0x7c, 0x8e, 0x4e, 0x36, 0x26, 0xa6, 0x3f, 0x33, + 0xa5, 0x3a, 0x77, 0xa8, 0x9f, 0x33, 0x4a, 0xd6, 0x46, 0xf6, 0xbb, 0xa7, + 0x0b, 0xeb, 0x12, 0xe8, 0xb9, 0x9a, 0x31, 0xb9, 0x7d, 0xc7, 0x71, 0x5c, + 0x45, 0x7a, 0x67, 0x6c, 0x57, 0x0d, 0xae, 0xd9, 0x0b, 0x2d, 0x45, 0xb6, + 0x8c, 0x47, 0x27, 0xce, 0xbf, 0xd4, 0x56, 0x78, 0x0a, 0xdb, 0xd3, 0x7f, + 0x21, 0x71, 0x66, 0x5c, 0xa2, 0xe3, 0x8c, 0x82, 0xdf, 0x49, 0x7e, 0x8f, + 0xf4, 0xfb, 0x8c, 0xca, 0x28, 0xa2, 0xbd, 0x33, 0xe2, 0x42, 0xbb, 0x4f, + 0x0e, 0x5a, 0xf9, 0x1a, 0x60, 0x90, 0x8f, 0x9e, 0x53, 0xb8, 0xfd, 0x3b, + 0x57, 0x1b, 0x1a, 0x19, 0x65, 0x48, 0xc7, 0x56, 0x60, 0x05, 0x7a, 0x34, + 0x11, 0x88, 0x60, 0x48, 0xd4, 0x60, 0x2a, 0x80, 0x2b, 0xcf, 0xcc, 0x27, + 0x68, 0x28, 0xf7, 0x3e, 0xb3, 0x84, 0x70, 0xaa, 0xa6, 0x2a, 0x55, 0x9f, + 0xd9, 0x5f, 0x8b, 0xff, 0x00, 0x81, 0x73, 0x0f, 0xc5, 0x48, 0x4d, 0xac, + 0x4f, 0xe8, 0xd4, 0xcd, 0x33, 0x4b, 0xb6, 0xb8, 0xb5, 0x8e, 0x43, 0x10, + 0x24, 0x8e, 0x6a, 0xef, 0x88, 0xa3, 0xdf, 0xa4, 0xb9, 0xfe, 0xe9, 0x06, + 0x9f, 0xe1, 0x62, 0x25, 0xd3, 0x57, 0xbe, 0xd2, 0x45, 0x69, 0x80, 0xa3, + 0x3c, 0x45, 0x35, 0x08, 0x3d, 0x51, 0xe9, 0x63, 0xe8, 0xd3, 0xfe, 0xd8, + 0x7e, 0xd1, 0x5d, 0x4a, 0x29, 0xfe, 0x86, 0x56, 0xb3, 0xa7, 0x45, 0x05, + 0xab, 0x34, 0x71, 0x85, 0x2b, 0xc9, 0x22, 0xb4, 0xf4, 0x09, 0x43, 0x69, + 0x08, 0x49, 0xfb, 0xb9, 0x06, 0xa7, 0xd7, 0x61, 0xdf, 0xa7, 0xc8, 0xa3, + 0xb8, 0x32, 0x1f, 0xa0, 0xe0, 0x7e, 0xb9, 0xac, 0xad, 0x02, 0x43, 0xfd, + 0x8f, 0x70, 0xbf, 0xdd, 0xcf, 0xf2, 0xa5, 0x8d, 0xa1, 0x2a, 0x74, 0xf9, + 0x65, 0xdf, 0xfe, 0x01, 0x9e, 0x5f, 0x38, 0x51, 0xcd, 0x5f, 0x22, 0xb2, + 0x71, 0x7f, 0x86, 0xa5, 0x1b, 0x87, 0x93, 0x59, 0xd5, 0xcc, 0x79, 0x3e, + 0x52, 0x1c, 0x71, 0xd8, 0x57, 0x4d, 0x6b, 0x62, 0x90, 0x46, 0x89, 0x85, + 0x42, 0x47, 0xca, 0xe3, 0xee, 0xbf, 0xd7, 0xd0, 0xd6, 0x37, 0x84, 0xe2, + 0x57, 0xb8, 0x9d, 0xcf, 0x5c, 0xd7, 0x5f, 0x22, 0xa4, 0x63, 0x18, 0x05, + 0x08, 0xcb, 0xa9, 0xee, 0x3f, 0xc6, 0xbd, 0x28, 0xe5, 0x72, 0xa9, 0x41, + 0x54, 0x8b, 0xd1, 0x1c, 0xb8, 0x14, 0xe7, 0x19, 0x63, 0x26, 0xfd, 0xe9, + 0x36, 0x55, 0xf2, 0x0a, 0x60, 0xb2, 0x95, 0x97, 0xf8, 0x41, 0xfe, 0x01, + 0xeb, 0xf5, 0xf4, 0xa8, 0x25, 0xb1, 0x59, 0x10, 0x06, 0x4d, 0xc1, 0x87, + 0x0a, 0x7b, 0xfb, 0x9a, 0xe5, 0xaf, 0x35, 0x9b, 0xb8, 0x75, 0x56, 0x55, + 0x90, 0xf9, 0x68, 0xc0, 0x6c, 0xec, 0x45, 0x77, 0x56, 0x72, 0x24, 0xb0, + 0xac, 0x8c, 0x72, 0xce, 0x01, 0x26, 0xab, 0x09, 0x94, 0xc6, 0xb4, 0xdc, + 0x53, 0xdb, 0x7f, 0xf8, 0x07, 0x56, 0x1f, 0x1d, 0x4f, 0x17, 0x29, 0x43, + 0xb6, 0xe7, 0x09, 0xa8, 0x5a, 0x4b, 0xa2, 0xdf, 0x25, 0xc4, 0x24, 0x84, + 0x27, 0xfc, 0x8a, 0x6c, 0x53, 0x2d, 0xd7, 0x88, 0x63, 0x95, 0x7a, 0x3e, + 0x0d, 0x74, 0xfe, 0x25, 0x86, 0x39, 0xb4, 0xd9, 0x70, 0x39, 0x5e, 0x45, + 0x71, 0x7a, 0x4b, 0x15, 0xd5, 0x2d, 0xcf, 0xa3, 0x77, 0x35, 0x78, 0x9c, + 0x0a, 0xa1, 0x5d, 0x46, 0x5d, 0x4f, 0x13, 0x17, 0x2f, 0xab, 0xd7, 0x54, + 0x60, 0xfd, 0xc6, 0xd4, 0xad, 0xd9, 0x9e, 0x8b, 0x0d, 0xa2, 0x94, 0xe4, + 0x54, 0xa2, 0xd3, 0x04, 0x10, 0xee, 0x30, 0x30, 0x39, 0xe8, 0x29, 0xb1, + 0x5c, 0xae, 0xdc, 0x6f, 0x27, 0xfd, 0xc1, 0xc7, 0xe6, 0x7f, 0xc2, 0xab, + 0xdf, 0xea, 0x46, 0xd6, 0xd9, 0xe5, 0xe4, 0x85, 0x19, 0xc0, 0x23, 0x3f, + 0xca, 0xbd, 0x38, 0xe5, 0x78, 0x7e, 0x47, 0x37, 0x17, 0x65, 0xe5, 0xfe, + 0x67, 0xd2, 0x4b, 0x1d, 0x45, 0x42, 0xf2, 0xe8, 0x5a, 0x36, 0xf8, 0xea, + 0x11, 0xff, 0x00, 0xde, 0x5c, 0x1f, 0xcc, 0x73, 0x59, 0xd7, 0xf7, 0x90, + 0x59, 0x49, 0x14, 0x6c, 0x8c, 0x4c, 0x87, 0x1b, 0x58, 0x8f, 0xd0, 0xd6, + 0x0f, 0xfc, 0x25, 0xd7, 0x4d, 0xf7, 0x60, 0xc8, 0xac, 0xcd, 0x4f, 0x55, + 0x9e, 0xfe, 0x48, 0x9e, 0x68, 0xb6, 0x04, 0x3c, 0x57, 0x0d, 0x58, 0xe0, + 0xa3, 0x1b, 0xd1, 0xdc, 0xf2, 0x71, 0x19, 0xc5, 0x25, 0x06, 0xe8, 0x5e, + 0xfe, 0x9a, 0x1e, 0x86, 0xa8, 0x1d, 0x43, 0x1f, 0xfb, 0xec, 0xf5, 0x5f, + 0xaf, 0xa8, 0xa6, 0xc8, 0x1e, 0x12, 0xce, 0x98, 0xde, 0x06, 0x19, 0x73, + 0xc3, 0x0a, 0xa1, 0x63, 0x7c, 0x66, 0x8a, 0x3f, 0x9b, 0xe7, 0x65, 0x01, + 0x73, 0xdf, 0xd8, 0xfb, 0xfa, 0x54, 0xbf, 0x6a, 0xf3, 0x47, 0x96, 0xa7, + 0xe6, 0xe7, 0x67, 0xf5, 0x5f, 0xf3, 0xde, 0xbd, 0x25, 0x97, 0xd1, 0xe4, + 0x77, 0x8e, 0x9d, 0x57, 0x93, 0xea, 0xbc, 0xbb, 0x9d, 0x2f, 0x1f, 0x4e, + 0x50, 0xb7, 0x46, 0x79, 0xf4, 0xd1, 0x79, 0x9a, 0x9b, 0xc4, 0xa3, 0x1b, + 0xa4, 0x20, 0x0f, 0xc6, 0xbd, 0x1b, 0x4f, 0x85, 0x21, 0x8d, 0x17, 0x80, + 0x31, 0xb4, 0xfd, 0x7f, 0xfa, 0xff, 0x00, 0xe3, 0x5c, 0x5c, 0x30, 0x19, + 0x3c, 0x42, 0xee, 0x17, 0x70, 0x04, 0xb8, 0x19, 0xc6, 0x70, 0x33, 0x8a, + 0xea, 0x3e, 0xda, 0xb1, 0xe4, 0x8c, 0x98, 0xa4, 0x50, 0xc0, 0x03, 0xce, + 0x3d, 0xbd, 0xc1, 0xc8, 0xae, 0x7c, 0x06, 0x15, 0x2a, 0x8d, 0x5a, 0xed, + 0x3f, 0xbd, 0x2d, 0xfe, 0x7d, 0x7e, 0x47, 0x8d, 0x96, 0xd6, 0x86, 0x1a, + 0x52, 0x9b, 0xef, 0xf8, 0x13, 0xea, 0xf3, 0x25, 0xb5, 0xb4, 0xad, 0xbb, + 0x00, 0x02, 0xcb, 0xf5, 0xff, 0x00, 0xeb, 0xd7, 0x31, 0xe1, 0x98, 0x4c, + 0xb7, 0x33, 0xdd, 0x30, 0xf6, 0x1f, 0x8d, 0x49, 0xe2, 0x0b, 0xdc, 0xc0, + 0xf1, 0x6f, 0x2c, 0x49, 0x1b, 0x49, 0xe3, 0x2a, 0x46, 0x73, 0x57, 0xf4, + 0x0b, 0x7f, 0x23, 0x4b, 0x42, 0x47, 0x2f, 0xf3, 0x1a, 0xf2, 0x73, 0xea, + 0xb0, 0x4d, 0xc6, 0x9e, 0xcf, 0xf5, 0x3d, 0x8c, 0xb2, 0x4b, 0x1d, 0x99, + 0xc6, 0x4b, 0xe1, 0x82, 0x6f, 0xe7, 0xb1, 0xa9, 0x58, 0xbe, 0x26, 0xb5, + 0x13, 0x69, 0xde, 0x70, 0x1f, 0x34, 0x27, 0x3f, 0x81, 0xeb, 0x5b, 0x55, + 0x1d, 0xc4, 0x42, 0x7b, 0x69, 0x22, 0x3d, 0x1d, 0x4a, 0xd7, 0xcd, 0x52, + 0x9f, 0x24, 0xd4, 0x8f, 0xb0, 0xcc, 0x30, 0xcb, 0x15, 0x85, 0x9d, 0x17, + 0xd5, 0x7e, 0x3d, 0x3f, 0x13, 0xcd, 0xe8, 0xa5, 0x75, 0x28, 0xec, 0x87, + 0xaa, 0x9c, 0x1a, 0x4a, 0xfa, 0x23, 0xf1, 0xa6, 0xad, 0xa1, 0x7b, 0x47, + 0x8f, 0xcd, 0xd5, 0xad, 0xd7, 0x8e, 0x1b, 0x3f, 0x95, 0x77, 0xd5, 0xc3, + 0xf8, 0x7b, 0xfe, 0x43, 0x30, 0xfd, 0x0f, 0xf2, 0xae, 0xe2, 0xbc, 0x8c, + 0xc1, 0xfe, 0xf1, 0x2f, 0x23, 0xf4, 0x3e, 0x0f, 0xa6, 0x96, 0x16, 0x73, + 0xef, 0x2f, 0xc9, 0x2f, 0xf3, 0x2a, 0x6a, 0x71, 0xf9, 0xba, 0x74, 0xeb, + 0xfe, 0xc9, 0xac, 0x7f, 0x0c, 0x5e, 0x79, 0x16, 0xf3, 0x26, 0x7a, 0x1c, + 0x8a, 0xe8, 0x25, 0x5d, 0xf1, 0x3a, 0xfa, 0x82, 0x2b, 0x8c, 0xd3, 0x1c, + 0xc3, 0xa8, 0xb4, 0x79, 0x00, 0x6f, 0xc1, 0xcf, 0xd6, 0xbd, 0x2e, 0x1e, + 0xa9, 0xcb, 0x5e, 0xdf, 0xd6, 0xc6, 0x1c, 0x51, 0x27, 0x87, 0xaf, 0x4a, + 0xba, 0xec, 0xd1, 0xd5, 0xea, 0x52, 0x06, 0xb7, 0xb9, 0x5c, 0xe7, 0xa4, + 0x43, 0xe8, 0x07, 0x3f, 0xae, 0x2b, 0x03, 0xc3, 0xcd, 0xfb, 0x9b, 0xd8, + 0xbf, 0xd9, 0xcd, 0x5a, 0x96, 0x69, 0x24, 0xb7, 0x53, 0xb5, 0xbe, 0x76, + 0x77, 0x27, 0xd7, 0x38, 0xff, 0x00, 0x0a, 0xa1, 0xa0, 0x1d, 0xba, 0x8c, + 0xf1, 0x9f, 0xe2, 0x53, 0x5e, 0x9e, 0x73, 0x86, 0xe4, 0xc3, 0x46, 0x7d, + 0xef, 0xf8, 0x5b, 0xfc, 0x8f, 0x0b, 0x2d, 0xc6, 0xaa, 0xb9, 0x8d, 0x3f, + 0x9a, 0xfb, 0xd1, 0x27, 0x87, 0x2e, 0x3c, 0x89, 0xe7, 0x19, 0xef, 0x5d, + 0x1c, 0xd7, 0xbf, 0xb8, 0x04, 0x9f, 0xbe, 0xc4, 0xfe, 0x03, 0xff, 0x00, + 0xaf, 0x9f, 0xca, 0xb8, 0xfb, 0x10, 0xcb, 0xa8, 0x4c, 0x8b, 0xd7, 0x26, + 0xb7, 0x26, 0x86, 0x77, 0x8e, 0x35, 0x00, 0xfc, 0xb1, 0xa8, 0xfc, 0xf9, + 0xfe, 0xb5, 0xee, 0x65, 0x8a, 0x35, 0x30, 0xb4, 0xd3, 0xee, 0xdb, 0xf9, + 0x7f, 0xc1, 0xb1, 0xe6, 0x7f, 0x68, 0x4b, 0x0e, 0x9d, 0x2e, 0xc7, 0x33, + 0x7e, 0x49, 0xbf, 0x95, 0x8f, 0x76, 0xcd, 0x75, 0x76, 0x1a, 0x8e, 0xdb, + 0x48, 0x86, 0x7a, 0x28, 0xae, 0x63, 0x53, 0x8d, 0x8e, 0xa9, 0x32, 0x05, + 0x39, 0xdd, 0x80, 0x29, 0xd1, 0xfd, 0xb9, 0x10, 0x2a, 0xc4, 0xd8, 0x1e, + 0xd5, 0xe6, 0x60, 0x31, 0xd4, 0xb0, 0x95, 0xe7, 0x2a, 0xbd, 0x49, 0xa3, + 0x52, 0xb2, 0x6e, 0x54, 0x93, 0x77, 0x3a, 0x3b, 0xeb, 0xcf, 0x3e, 0x07, + 0x8c, 0x72, 0x59, 0x4d, 0x72, 0x96, 0x67, 0x6d, 0xe4, 0x67, 0xd1, 0xaa, + 0xdf, 0xfc, 0x4c, 0x4a, 0xb8, 0x11, 0x36, 0x18, 0x6d, 0x3c, 0x76, 0xaa, + 0xf0, 0xdb, 0xc8, 0x97, 0xd1, 0x47, 0x22, 0x95, 0x66, 0x61, 0xc1, 0xa5, + 0x8d, 0xc7, 0xd2, 0xc5, 0x62, 0x61, 0x28, 0x6c, 0x85, 0x5d, 0xd7, 0x6b, + 0xda, 0x55, 0x8b, 0x56, 0xf2, 0x3a, 0xb8, 0xef, 0x88, 0x5c, 0x66, 0xa8, + 0xea, 0x77, 0x66, 0x4b, 0x49, 0x17, 0x3d, 0x45, 0x6e, 0x5b, 0x68, 0x2c, + 0xea, 0x0e, 0xda, 0x6d, 0xff, 0x00, 0x86, 0xe6, 0x7b, 0x39, 0x04, 0x51, + 0xe5, 0xf1, 0xc0, 0xaf, 0xaf, 0xc4, 0xd4, 0xa4, 0xf0, 0xd2, 0x8c, 0x77, + 0xb3, 0x3c, 0x97, 0x9c, 0xa6, 0xf9, 0x5c, 0x8c, 0xcf, 0x0c, 0xa2, 0xb6, + 0x9c, 0xc4, 0xa8, 0x27, 0x79, 0xea, 0x29, 0x3c, 0x4f, 0x08, 0x36, 0x08, + 0xea, 0xa0, 0x6d, 0x6e, 0xd5, 0x4e, 0x0d, 0x33, 0xc4, 0x16, 0x31, 0x94, + 0x8a, 0x17, 0x45, 0xce, 0x71, 0xc5, 0x52, 0xbc, 0xbe, 0xd4, 0x0f, 0x99, + 0x69, 0x77, 0xc9, 0xc7, 0x20, 0x8e, 0x95, 0xf9, 0x74, 0xf0, 0x55, 0xa1, + 0x5b, 0xda, 0xbd, 0x15, 0xcf, 0xb6, 0xa5, 0x9f, 0xe0, 0x6a, 0xe5, 0xbf, + 0x52, 0x5a, 0xcb, 0x96, 0xd7, 0xd3, 0x7f, 0xbc, 0xbb, 0xa7, 0xcd, 0x23, + 0xda, 0xa0, 0x19, 0xe3, 0x8a, 0xd3, 0x9d, 0xa6, 0x93, 0xcb, 0xb8, 0x40, + 0x43, 0x3f, 0xde, 0xff, 0x00, 0x7c, 0x75, 0x3f, 0x8f, 0x06, 0x9f, 0xe0, + 0xbb, 0x11, 0x7f, 0x6c, 0xe3, 0x19, 0x2a, 0xd5, 0xd7, 0x9d, 0x07, 0xcb, + 0x6d, 0x85, 0x78, 0x25, 0x58, 0x71, 0xf8, 0x7f, 0x5a, 0xfb, 0xea, 0x18, + 0xda, 0x7e, 0xc2, 0x94, 0xda, 0xd5, 0x68, 0xfd, 0x1e, 0x8f, 0xfc, 0xcf, + 0x81, 0xad, 0x9a, 0x7b, 0x2a, 0xb2, 0xa4, 0xde, 0xab, 0xf4, 0xd4, 0xe2, + 0xa4, 0x82, 0x44, 0xbc, 0x17, 0x50, 0xa0, 0x56, 0x70, 0x25, 0x1e, 0xc7, + 0xb8, 0xfc, 0xc1, 0xa9, 0x67, 0xb6, 0x71, 0x13, 0xa2, 0x67, 0x11, 0xc9, + 0x94, 0xff, 0x00, 0x71, 0xc6, 0x47, 0xf2, 0xfd, 0x6b, 0xb6, 0x8f, 0x42, + 0x1e, 0x78, 0x84, 0xaf, 0x42, 0xd8, 0xfa, 0x1c, 0x1f, 0xf1, 0xaa, 0x57, + 0x9a, 0x70, 0xb6, 0x76, 0xdc, 0xa7, 0x02, 0x3c, 0x13, 0x8f, 0x46, 0xe3, + 0xf4, 0xae, 0x69, 0xe3, 0x21, 0x4b, 0x92, 0x51, 0x56, 0x71, 0x6d, 0x7e, + 0x3f, 0xe5, 0x7f, 0xbc, 0x88, 0x66, 0xca, 0xa3, 0x94, 0x53, 0xe9, 0x7f, + 0xeb, 0xe6, 0x79, 0xa5, 0xf8, 0x79, 0xef, 0xe0, 0xb6, 0x3c, 0xb2, 0xfc, + 0x9f, 0xaf, 0xff, 0x00, 0x5e, 0xbb, 0x48, 0x63, 0x11, 0x42, 0x88, 0x3a, + 0x28, 0x02, 0xb9, 0x6d, 0x39, 0x05, 0xef, 0x88, 0xe5, 0x9b, 0x1f, 0x2a, + 0x31, 0x35, 0xd6, 0x57, 0xc3, 0x67, 0x15, 0xfd, 0xad, 0x77, 0x6f, 0x37, + 0xf7, 0x9f, 0xab, 0xf0, 0x6e, 0x1d, 0xc7, 0x0d, 0x2a, 0xf2, 0xde, 0x5a, + 0x7d, 0xc1, 0x45, 0x14, 0x57, 0x92, 0x7d, 0x91, 0xe7, 0xfa, 0xb4, 0x7e, + 0x56, 0xab, 0x72, 0xb8, 0xc7, 0xce, 0x4f, 0xe7, 0xcd, 0x53, 0xad, 0x5f, + 0x11, 0x28, 0x5d, 0x6a, 0x5c, 0x77, 0x0a, 0x4f, 0xe5, 0x59, 0x55, 0xf4, + 0x54, 0x5d, 0xe9, 0xc5, 0xf9, 0x1f, 0x8d, 0x66, 0x14, 0xfd, 0x9e, 0x2e, + 0xac, 0x3b, 0x49, 0xfe, 0x66, 0xa7, 0x87, 0xbf, 0xe4, 0x35, 0x0f, 0xe3, + 0xfc, 0xab, 0xb8, 0xae, 0x1b, 0x40, 0x6d, 0xba, 0xc4, 0x1f, 0x88, 0xfd, + 0x2b, 0xb9, 0xaf, 0x2f, 0x30, 0xfe, 0x22, 0xf4, 0x3e, 0xeb, 0x84, 0x1a, + 0x78, 0x39, 0xaf, 0xef, 0x7e, 0x88, 0x2b, 0x92, 0xb6, 0xb7, 0xcf, 0x8a, + 0x1a, 0x0c, 0x67, 0x73, 0x9e, 0x2b, 0xad, 0xae, 0x6a, 0x73, 0xf6, 0x5f, + 0x17, 0xdb, 0x4b, 0x8e, 0x0b, 0xa9, 0xad, 0x32, 0xaa, 0x9e, 0xce, 0xbd, + 0xcc, 0xb8, 0xd6, 0x93, 0x96, 0x01, 0x4d, 0x6e, 0x9f, 0xe8, 0xce, 0xc2, + 0x3f, 0x0e, 0x1f, 0x28, 0x1d, 0x84, 0x00, 0x3b, 0x9c, 0xd7, 0x14, 0x90, + 0xfd, 0x87, 0xc5, 0x8f, 0x09, 0x18, 0xf9, 0x88, 0xaf, 0x6b, 0x84, 0xa3, + 0x5b, 0x0f, 0x94, 0x74, 0xaf, 0x23, 0xf1, 0x52, 0x7d, 0x9b, 0xc6, 0xab, + 0x20, 0xe0, 0x31, 0x53, 0x5f, 0x49, 0x99, 0xe2, 0x15, 0x6a, 0x1c, 0x89, + 0xec, 0x7e, 0x45, 0xc3, 0x19, 0x95, 0x49, 0xe6, 0x51, 0x73, 0xe8, 0xd7, + 0xe6, 0x8a, 0x7a, 0x44, 0x21, 0xbc, 0x59, 0x24, 0x24, 0x70, 0xc5, 0xb8, + 0xae, 0xfe, 0x3d, 0x15, 0x5e, 0xc1, 0xd8, 0x20, 0xe3, 0x15, 0xc2, 0xd9, + 0xb1, 0xb7, 0xf1, 0xc4, 0x2d, 0xfd, 0xe7, 0xfe, 0x62, 0xbd, 0x56, 0xd1, + 0xf3, 0x0c, 0xb1, 0x1f, 0xe2, 0x53, 0xf9, 0x8f, 0xf2, 0x2b, 0x1c, 0x16, + 0x3f, 0xd8, 0xd1, 0x8c, 0x5b, 0xd1, 0xff, 0x00, 0x91, 0x7c, 0x4f, 0xcf, + 0x43, 0x1b, 0x51, 0x47, 0xa3, 0xff, 0x00, 0xdb, 0xac, 0x79, 0x1f, 0x89, + 0x34, 0xf3, 0x17, 0x88, 0x63, 0xb7, 0x53, 0xb4, 0xc9, 0x81, 0x9f, 0x43, + 0x9c, 0x56, 0xcc, 0x7f, 0x0e, 0xef, 0xe4, 0x00, 0x8b, 0xd1, 0xcf, 0xd6, + 0xaa, 0xf8, 0xd2, 0x41, 0x0f, 0x88, 0x2d, 0x2e, 0x3d, 0x30, 0xc7, 0xf3, + 0xcd, 0x7a, 0x3f, 0x87, 0xb5, 0xcb, 0x4d, 0x62, 0xd0, 0x4b, 0x6e, 0x49, + 0x0b, 0x85, 0x60, 0x46, 0x39, 0xac, 0x55, 0x6a, 0x52, 0xbc, 0xea, 0x75, + 0x39, 0xf1, 0xd8, 0xdc, 0x5e, 0x1a, 0x84, 0x27, 0x45, 0xe9, 0xd7, 0xf4, + 0x3c, 0xea, 0x7f, 0x03, 0x5e, 0xc1, 0x23, 0x23, 0x5e, 0x74, 0x1e, 0xf5, + 0xcc, 0xd8, 0x86, 0x1a, 0xcc, 0x08, 0xe4, 0x92, 0xb2, 0x81, 0xcf, 0xd6, + 0xbd, 0xbb, 0x59, 0x40, 0x3f, 0x78, 0xa3, 0xa8, 0xfd, 0x7f, 0xce, 0x6b, + 0xc5, 0x22, 0x21, 0x75, 0xf5, 0x3d, 0x84, 0xff, 0x00, 0xd6, 0xb2, 0x55, + 0x69, 0xc9, 0xfb, 0x9d, 0x0e, 0x9c, 0xbb, 0x1b, 0x5b, 0x17, 0x46, 0x52, + 0xa8, 0xef, 0xa7, 0xe3, 0xad, 0xff, 0x00, 0x43, 0xde, 0xf4, 0xfb, 0x18, + 0x7c, 0xa5, 0xc8, 0xed, 0x57, 0x4d, 0x9d, 0xb8, 0x1c, 0x81, 0x54, 0x6c, + 0x26, 0xfd, 0xd2, 0xf3, 0xda, 0xa9, 0xeb, 0xfa, 0xc3, 0xe9, 0xba, 0x5c, + 0xf7, 0x48, 0x03, 0x34, 0x6b, 0x90, 0x0d, 0x74, 0xff, 0x00, 0x6d, 0xc6, + 0xfc, 0xa9, 0x9f, 0x0f, 0xec, 0xea, 0xd4, 0xab, 0xc8, 0x9e, 0xac, 0xbd, + 0x77, 0x6d, 0x6c, 0x10, 0xfc, 0xa2, 0xbc, 0x47, 0xc5, 0x2c, 0xb1, 0xf8, + 0x9a, 0xeb, 0x67, 0x41, 0xc7, 0xe9, 0x5a, 0xed, 0xf1, 0x03, 0x56, 0xb9, + 0x52, 0x45, 0xaa, 0x11, 0xfe, 0xc8, 0x35, 0xca, 0xea, 0x53, 0xcf, 0x79, + 0x78, 0xf7, 0x53, 0xc6, 0x51, 0xa4, 0x3e, 0x95, 0x15, 0x71, 0x32, 0xad, + 0xee, 0xc8, 0xfb, 0x3c, 0x9b, 0x2b, 0xc5, 0x60, 0xe6, 0xea, 0x55, 0x5a, + 0x58, 0xf4, 0x4f, 0x86, 0x30, 0xec, 0xb6, 0x9a, 0x52, 0x38, 0x66, 0xe2, + 0xbb, 0xeb, 0xd6, 0x0d, 0x3c, 0x20, 0x63, 0xe5, 0xc1, 0xfd, 0x45, 0x72, + 0x7e, 0x07, 0xb7, 0xfb, 0x36, 0x89, 0x09, 0x23, 0x05, 0x86, 0x6b, 0xa0, + 0xf3, 0x7c, 0xdb, 0xcd, 0xdf, 0xc2, 0x0f, 0xe8, 0x3f, 0xfa, 0xe7, 0xf4, + 0xaf, 0x36, 0x79, 0xc2, 0xa4, 0xbd, 0x9a, 0xe8, 0x78, 0x38, 0xef, 0xde, + 0xe3, 0x6a, 0x54, 0xe8, 0x93, 0xfc, 0xac, 0xbf, 0x13, 0x41, 0x6e, 0x17, + 0xfb, 0x44, 0x8d, 0xa3, 0xa6, 0x33, 0x58, 0xda, 0xdd, 0xea, 0x49, 0x1c, + 0xd1, 0x84, 0x52, 0x59, 0x0f, 0x3d, 0xfd, 0x2a, 0xc4, 0x12, 0xe6, 0x57, + 0x94, 0xf4, 0xc1, 0x6f, 0xcf, 0xff, 0x00, 0xac, 0x05, 0x64, 0xdd, 0x02, + 0xef, 0x21, 0xc6, 0x70, 0xa0, 0x7e, 0x27, 0x9f, 0xf1, 0xac, 0x9e, 0x77, + 0x29, 0x69, 0x72, 0x70, 0xd8, 0x48, 0x2a, 0x8d, 0xb5, 0xb2, 0x5f, 0x7d, + 0xae, 0x79, 0xcf, 0x86, 0xce, 0xcb, 0xfb, 0xa8, 0xcf, 0x5f, 0xfe, 0xbd, + 0x74, 0xf5, 0xcb, 0x69, 0xe0, 0xdb, 0x78, 0x9e, 0x68, 0xc8, 0xc6, 0xe2, + 0x6b, 0xa9, 0xae, 0x6c, 0x66, 0xb5, 0x39, 0xbb, 0xa3, 0xfa, 0x27, 0x85, + 0x2a, 0xf3, 0xe5, 0xb1, 0x5d, 0x9b, 0xff, 0x00, 0x3f, 0xd4, 0x28, 0xa2, + 0x8a, 0xe4, 0x3e, 0x94, 0xe2, 0x7c, 0x49, 0xff, 0x00, 0x21, 0xa9, 0x3f, + 0xdd, 0x5f, 0xe5, 0x59, 0x35, 0xa3, 0xae, 0xc9, 0xe6, 0xeb, 0x13, 0x9c, + 0x83, 0xb4, 0x85, 0x18, 0xf6, 0x15, 0x9d, 0x5f, 0x43, 0x41, 0x5a, 0x94, + 0x57, 0x92, 0x3f, 0x1d, 0xcd, 0x24, 0xa5, 0x8d, 0xac, 0xd7, 0xf3, 0x3f, + 0xcc, 0xb3, 0xa7, 0xc8, 0x22, 0xd4, 0x20, 0x73, 0xd0, 0x38, 0xcf, 0xf2, + 0xaf, 0x42, 0x07, 0x20, 0x11, 0xde, 0xbc, 0xd0, 0x1c, 0x1c, 0x8e, 0xb5, + 0xe8, 0x5a, 0x75, 0xc0, 0xb9, 0xb0, 0x86, 0x51, 0xdd, 0x46, 0x7e, 0xb5, + 0xc3, 0x98, 0xc3, 0xe1, 0x91, 0xf4, 0xbc, 0x1d, 0x88, 0x4a, 0xa5, 0x4a, + 0x0f, 0xaa, 0x4f, 0xee, 0xff, 0x00, 0x87, 0x2d, 0x57, 0x31, 0xe2, 0x55, + 0xf2, 0xaf, 0xad, 0xa7, 0x1f, 0xe7, 0x9a, 0xe9, 0xeb, 0x03, 0xc5, 0x31, + 0xe6, 0xce, 0x29, 0x3f, 0xba, 0xd5, 0xcb, 0x84, 0x76, 0xac, 0x8f, 0xa1, + 0xe2, 0x3a, 0x5e, 0xd3, 0x2d, 0xa8, 0xbb, 0x59, 0xfe, 0x27, 0xa7, 0x69, + 0x77, 0x3e, 0x76, 0x9f, 0x13, 0x67, 0xef, 0x20, 0x35, 0xe7, 0x5e, 0x3f, + 0x4f, 0x2f, 0x5a, 0xb5, 0x9f, 0x1d, 0x47, 0x5f, 0xa1, 0xae, 0xa3, 0xc3, + 0x17, 0x12, 0x5c, 0x68, 0x96, 0xc5, 0x49, 0x3f, 0x26, 0x3a, 0x81, 0xfa, + 0xd3, 0xb5, 0xcf, 0x07, 0x4b, 0xaf, 0x08, 0xd8, 0xb1, 0x42, 0x9d, 0x36, + 0x02, 0x73, 0xf8, 0x9a, 0xca, 0x18, 0xd7, 0x4a, 0xbb, 0x55, 0x5e, 0x9a, + 0x9f, 0x84, 0x65, 0xf8, 0x1a, 0x98, 0x5c, 0x57, 0xb6, 0x6f, 0x4d, 0x4f, + 0x3f, 0xbd, 0x9d, 0x63, 0xd7, 0xad, 0x2e, 0x11, 0x81, 0x1f, 0x29, 0x24, + 0x1a, 0xf4, 0xeb, 0x2b, 0xad, 0xe4, 0x30, 0x39, 0xe7, 0x3f, 0x28, 0x38, + 0x03, 0x1c, 0xe4, 0xfe, 0x55, 0xc0, 0x78, 0x87, 0xc1, 0x57, 0x1e, 0x1d, + 0xb2, 0x4b, 0xd7, 0x9b, 0x7a, 0x87, 0x03, 0x18, 0xe9, 0x5e, 0x9d, 0xa0, + 0x59, 0xc5, 0xa9, 0x68, 0x36, 0xd7, 0x30, 0xb1, 0x66, 0x28, 0x08, 0xc9, + 0xe0, 0x1f, 0x4c, 0x53, 0xc7, 0x62, 0x60, 0xa8, 0xc2, 0x74, 0xe5, 0x75, + 0xb5, 0xcf, 0x5b, 0x39, 0x71, 0xc7, 0xd6, 0x75, 0xed, 0xf1, 0x5f, 0xf1, + 0x3c, 0xd7, 0xe2, 0x0c, 0x45, 0x2f, 0x60, 0x6c, 0x70, 0x41, 0xc7, 0xd2, + 0xb5, 0x3e, 0x1b, 0x48, 0xc6, 0xda, 0xe6, 0x31, 0xd9, 0xc1, 0xab, 0x1f, + 0x10, 0xb4, 0x99, 0xa4, 0xd3, 0xa1, 0x96, 0x38, 0x99, 0x9a, 0x17, 0x20, + 0xe0, 0x64, 0xe2, 0xa6, 0xf8, 0x53, 0xa7, 0xc9, 0xb2, 0xe9, 0xa6, 0x46, + 0x40, 0xec, 0x36, 0xee, 0x18, 0xce, 0x2a, 0xa7, 0x89, 0x4f, 0x2e, 0xe6, + 0xbe, 0xab, 0xfc, 0xce, 0x7a, 0x98, 0x49, 0xcf, 0x05, 0xec, 0x25, 0xba, + 0x3a, 0xdb, 0xe8, 0x5a, 0x4b, 0x76, 0x0c, 0x38, 0x22, 0xbc, 0x36, 0x7c, + 0xc7, 0xaf, 0x3e, 0x7a, 0x89, 0xff, 0x00, 0xad, 0x7d, 0x2b, 0x77, 0xa7, + 0x01, 0x07, 0x4e, 0xd5, 0xf3, 0x8e, 0xad, 0x1f, 0x95, 0xe2, 0x9b, 0x88, + 0xfd, 0x2e, 0x31, 0xfa, 0xd6, 0x39, 0x26, 0x23, 0xda, 0xb9, 0xaf, 0x23, + 0x3c, 0xaf, 0x03, 0x3c, 0x32, 0x92, 0x97, 0x53, 0xda, 0x34, 0xb7, 0x59, + 0x21, 0x41, 0xbb, 0x0d, 0xb4, 0x70, 0x6b, 0x2b, 0xc6, 0x91, 0x95, 0xf0, + 0xfd, 0xd9, 0xcf, 0x1b, 0x2b, 0xb0, 0xd2, 0xb4, 0x38, 0xa6, 0xb2, 0x88, + 0x8c, 0xae, 0x50, 0x74, 0xe9, 0xd2, 0xb0, 0x7c, 0x7f, 0xa4, 0xa5, 0xbf, + 0x86, 0x2e, 0xd8, 0x31, 0xf9, 0x13, 0x35, 0xe5, 0x50, 0xc4, 0xc5, 0xe2, + 0xa2, 0xaf, 0xd4, 0xce, 0x9e, 0x49, 0x18, 0x55, 0x55, 0x15, 0xf4, 0x67, + 0x99, 0xf8, 0x60, 0x03, 0xa6, 0xb6, 0x40, 0xfb, 0xe6, 0xaa, 0x78, 0x8b, + 0xf7, 0xda, 0x85, 0xb5, 0xb2, 0x8e, 0x49, 0x1c, 0x0f, 0x73, 0x57, 0x3c, + 0x31, 0xff, 0x00, 0x20, 0xd3, 0xfe, 0xf9, 0xaa, 0xd1, 0x2f, 0xdb, 0x7c, + 0x6b, 0x6e, 0x98, 0x0c, 0x16, 0x41, 0xc7, 0xd2, 0xbe, 0x91, 0x69, 0x88, + 0x9c, 0xfb, 0x5d, 0x9f, 0xaa, 0x66, 0x15, 0x39, 0x32, 0x1a, 0x50, 0x5b, + 0xca, 0xcb, 0xf5, 0x3d, 0x5b, 0x4f, 0xb2, 0x16, 0x9a, 0x6c, 0x30, 0x81, + 0x86, 0xd8, 0x07, 0xd3, 0xde, 0xa5, 0xd4, 0x02, 0xe9, 0x9a, 0x64, 0xb3, + 0xc8, 0x30, 0xdb, 0x33, 0x8f, 0x45, 0x15, 0xb5, 0xa7, 0xdb, 0x45, 0x04, + 0x3f, 0x69, 0xbb, 0x60, 0x5b, 0x1f, 0x2a, 0x77, 0x26, 0xb9, 0x3f, 0x1f, + 0x5e, 0x88, 0xfc, 0x37, 0x77, 0x3b, 0x36, 0x1a, 0x4c, 0x22, 0x01, 0xf5, + 0xaf, 0x98, 0xa3, 0x27, 0x5a, 0xba, 0x87, 0x76, 0x7e, 0x76, 0xb2, 0x68, + 0x45, 0x5e, 0x4b, 0x4d, 0xdf, 0x98, 0xbe, 0x1e, 0xd5, 0x63, 0xd6, 0x34, + 0x59, 0x2e, 0x36, 0x85, 0x26, 0x42, 0xad, 0x83, 0xd8, 0x7f, 0xf5, 0xaa, + 0xe9, 0xb1, 0x66, 0xb6, 0x79, 0x08, 0xfb, 0xc7, 0x24, 0xfd, 0x7f, 0xfa, + 0xd5, 0xc9, 0x7c, 0x2b, 0xb9, 0xb7, 0x92, 0xca, 0xee, 0xca, 0xe0, 0x91, + 0x99, 0x01, 0x53, 0x8e, 0x39, 0x15, 0xe9, 0x5a, 0x94, 0xb6, 0x96, 0xda, + 0x72, 0xc2, 0x98, 0x2d, 0xf7, 0x98, 0xfb, 0x74, 0xad, 0x71, 0xa9, 0xd0, + 0xc4, 0xca, 0x9c, 0x57, 0x53, 0xae, 0x9e, 0x59, 0x09, 0x5e, 0x49, 0x6e, + 0xee, 0xcf, 0x0e, 0xd6, 0xa0, 0x36, 0x1e, 0x34, 0x19, 0x1b, 0x77, 0x90, + 0xdf, 0x9d, 0x74, 0x35, 0x93, 0xe3, 0xd9, 0x77, 0xf8, 0x86, 0xd6, 0xe0, + 0x0d, 0xa7, 0x68, 0x07, 0xf0, 0xad, 0x48, 0xdb, 0x74, 0x6a, 0xde, 0xa0, + 0x1a, 0xf6, 0xaa, 0x37, 0x2a, 0x34, 0xe6, 0xfb, 0x1f, 0xa0, 0x70, 0x84, + 0x9c, 0x69, 0x55, 0xa2, 0xfa, 0x34, 0xff, 0x00, 0x01, 0xd4, 0x84, 0x80, + 0x09, 0x3d, 0x05, 0x2d, 0x51, 0xd5, 0xee, 0x7e, 0xcb, 0xa6, 0x4d, 0x20, + 0xea, 0x46, 0xd1, 0xcf, 0x73, 0x58, 0xc2, 0x2e, 0x52, 0x51, 0x5d, 0x4f, + 0xac, 0xaf, 0x5a, 0x34, 0x69, 0x4a, 0xac, 0xb6, 0x8a, 0x6f, 0xee, 0x38, + 0x7b, 0xc9, 0x44, 0xd7, 0xb3, 0x48, 0x3a, 0x33, 0x93, 0xfa, 0xd4, 0x34, + 0x51, 0x5f, 0x46, 0x95, 0x95, 0x8f, 0xc5, 0xa7, 0x37, 0x39, 0x39, 0x3d, + 0xd8, 0x57, 0x51, 0xe1, 0x6b, 0xbc, 0xc7, 0x25, 0xab, 0x1e, 0x57, 0xe6, + 0x51, 0xec, 0x7f, 0xcf, 0xeb, 0x5c, 0xbd, 0x59, 0xb0, 0xba, 0x6b, 0x3b, + 0xc8, 0xe6, 0x19, 0xc0, 0x3c, 0xe3, 0xd3, 0xbd, 0x65, 0x88, 0xa7, 0xed, + 0x29, 0xb8, 0x9d, 0xb9, 0x66, 0x31, 0xe0, 0xf1, 0x50, 0xad, 0xd1, 0x3d, + 0x7d, 0x3a, 0x9e, 0x87, 0x59, 0x7a, 0xfc, 0x7e, 0x66, 0x93, 0x27, 0xfb, + 0x38, 0x35, 0xa1, 0x0c, 0xab, 0x34, 0x2b, 0x22, 0x9c, 0x86, 0x19, 0xa7, + 0xb2, 0x09, 0x14, 0xab, 0x0c, 0x83, 0xd4, 0x57, 0x85, 0x09, 0x72, 0x4d, + 0x3e, 0xc7, 0xeb, 0x18, 0x8a, 0x71, 0xc5, 0xe1, 0xa5, 0x08, 0xbd, 0x24, + 0xb7, 0xf5, 0x33, 0x7c, 0x2d, 0xe2, 0x7b, 0x2d, 0x37, 0x4f, 0x8e, 0x1b, + 0x99, 0x08, 0x65, 0x24, 0x74, 0xcf, 0x15, 0xe8, 0xb6, 0xbf, 0x11, 0xbc, + 0x3e, 0xd6, 0xea, 0x24, 0xbb, 0x55, 0x6c, 0x60, 0x8c, 0x57, 0x9d, 0x9f, + 0x0e, 0x58, 0xca, 0xe0, 0x2c, 0x07, 0x73, 0x1c, 0x00, 0x0f, 0x7a, 0xb7, + 0x2f, 0xc3, 0xa9, 0xd3, 0x83, 0xa7, 0x5d, 0x03, 0xec, 0x33, 0x4e, 0xbe, + 0x17, 0x0b, 0x89, 0x93, 0x93, 0xe6, 0xbf, 0x91, 0xf9, 0xf5, 0x5e, 0x19, + 0xc4, 0xd3, 0xb2, 0x94, 0xa1, 0xf3, 0x76, 0xfc, 0xcd, 0x6f, 0x1d, 0xf8, + 0x97, 0x49, 0xd6, 0x7c, 0x3b, 0x2c, 0x36, 0x97, 0x48, 0xf2, 0x06, 0x0c, + 0x14, 0x1e, 0x4f, 0x35, 0x85, 0xe0, 0x1f, 0x1b, 0x8d, 0x08, 0xfd, 0x86, + 0xf4, 0x9f, 0xb2, 0xb1, 0xca, 0x37, 0xf7, 0x4d, 0x21, 0xf8, 0x7f, 0x3e, + 0x78, 0xb4, 0xbc, 0xfc, 0x23, 0x26, 0x9f, 0x71, 0xe0, 0xf7, 0x7b, 0x55, + 0x84, 0x58, 0xdc, 0x21, 0x4e, 0x8f, 0xe5, 0x9c, 0xff, 0x00, 0x2a, 0xd6, + 0x34, 0x30, 0xd0, 0xa1, 0xf5, 0x77, 0x77, 0x16, 0xfe, 0xe2, 0x61, 0xc3, + 0x98, 0xa9, 0x5d, 0xde, 0x3a, 0x6c, 0xaf, 0xb9, 0xe9, 0x93, 0xea, 0xb6, + 0x37, 0x91, 0x0b, 0x9b, 0x76, 0x8d, 0xf3, 0xc9, 0x19, 0xce, 0x6b, 0x1f, + 0x5a, 0xf1, 0x9e, 0x99, 0xa5, 0xda, 0xa4, 0xa2, 0x20, 0xb7, 0x19, 0xc0, + 0x48, 0xfb, 0xd7, 0x99, 0x9f, 0x0e, 0xeb, 0x96, 0x59, 0x10, 0x3c, 0xaa, + 0x9f, 0x88, 0xa6, 0x27, 0x86, 0xae, 0xe7, 0xdd, 0x25, 0xdc, 0xc7, 0x77, + 0x6e, 0xfc, 0xd7, 0x34, 0x32, 0xbc, 0x34, 0x1d, 0xe5, 0x3b, 0xa3, 0x28, + 0xe5, 0x58, 0xd9, 0x3e, 0x58, 0xd1, 0x77, 0xf9, 0x5b, 0xef, 0x3d, 0x7a, + 0xdb, 0xc7, 0x11, 0xdd, 0x58, 0xc6, 0xec, 0x41, 0x56, 0x50, 0x73, 0xdc, + 0x7d, 0x6b, 0xc5, 0x35, 0xdb, 0x85, 0x97, 0xc5, 0x17, 0x33, 0xae, 0x30, + 0x66, 0xdc, 0x3f, 0x3a, 0xb6, 0x34, 0x0d, 0x4a, 0x31, 0xb6, 0x3b, 0xa0, + 0x00, 0xe8, 0x37, 0x1a, 0x89, 0xfc, 0x35, 0x7a, 0xc1, 0x9d, 0xa4, 0x56, + 0x93, 0x3e, 0xbd, 0x6b, 0xb3, 0x05, 0x86, 0xc3, 0x61, 0x67, 0x29, 0x42, + 0x5b, 0x93, 0x57, 0x28, 0xc7, 0x49, 0x24, 0xa8, 0xb5, 0x63, 0xda, 0x34, + 0xff, 0x00, 0x14, 0xac, 0x3a, 0x7c, 0x58, 0x61, 0xbb, 0x60, 0x00, 0x57, + 0x31, 0xe3, 0x1f, 0x10, 0x4d, 0x7d, 0xa2, 0xdd, 0x21, 0x90, 0x14, 0x65, + 0xc7, 0xeb, 0x5c, 0x10, 0xb2, 0xd7, 0xe2, 0x50, 0x16, 0x46, 0x20, 0x76, + 0x0d, 0x51, 0x5c, 0x5b, 0x6b, 0x73, 0xab, 0x2c, 0xa8, 0xcc, 0x1b, 0xaf, + 0xbd, 0x73, 0xd1, 0xcb, 0x28, 0x53, 0xaa, 0xaa, 0x29, 0x2d, 0xcb, 0x9e, + 0x1a, 0xaa, 0x87, 0x2f, 0xb0, 0x95, 0xfd, 0x0d, 0x3f, 0x0d, 0x1d, 0xba, + 0x53, 0x13, 0xd9, 0x8d, 0x57, 0xf0, 0xc5, 0xc6, 0xdf, 0x12, 0xc9, 0x76, + 0x48, 0xf9, 0x72, 0x41, 0x35, 0x7b, 0x4b, 0xb0, 0x9a, 0xd7, 0x48, 0x78, + 0x5c, 0x62, 0x46, 0x04, 0xe3, 0xd2, 0xb9, 0xd8, 0x16, 0xff, 0x00, 0x4e, + 0x99, 0xca, 0xc0, 0xc4, 0x93, 0xc9, 0xc5, 0x77, 0x45, 0x46, 0xa3, 0xa8, + 0x93, 0xdc, 0xf4, 0xb3, 0x1a, 0x75, 0x21, 0x85, 0xc2, 0x53, 0xa9, 0x17, + 0x64, 0xb5, 0xd3, 0xa9, 0xeb, 0xab, 0xad, 0x29, 0x4d, 0xf2, 0xb9, 0xc7, + 0xbf, 0x53, 0x5c, 0x4f, 0x8f, 0x35, 0x89, 0x2f, 0xad, 0xe0, 0x88, 0x71, + 0x11, 0x62, 0x47, 0xbd, 0x62, 0x26, 0xb9, 0x7b, 0x1b, 0x86, 0x9a, 0xd4, + 0xba, 0x8f, 0xe1, 0x20, 0x81, 0x51, 0x5d, 0x5d, 0xdc, 0xeb, 0xda, 0x9c, + 0x05, 0xa0, 0x2a, 0x17, 0x03, 0x68, 0x1c, 0x01, 0x58, 0xe1, 0xf0, 0x0a, + 0x8d, 0x55, 0x51, 0xad, 0x11, 0xe7, 0x62, 0xaa, 0xd1, 0xab, 0x05, 0x46, + 0x84, 0x5f, 0x33, 0xb2, 0xd8, 0xb7, 0xe0, 0xed, 0x40, 0xd8, 0x5f, 0xc8, + 0x09, 0x20, 0x11, 0x9c, 0x7b, 0xd7, 0x73, 0x36, 0xae, 0xd3, 0x13, 0xe6, + 0x36, 0x42, 0x72, 0xfe, 0xed, 0xd9, 0x7f, 0xc7, 0xf1, 0xaf, 0x37, 0xb9, + 0xf3, 0x34, 0xad, 0x65, 0xa4, 0x0a, 0xc0, 0x03, 0x95, 0x20, 0x55, 0xd8, + 0xfc, 0x47, 0x1a, 0xa2, 0x29, 0x8d, 0xc0, 0x51, 0xd3, 0xdf, 0xd6, 0xb4, + 0xc4, 0x61, 0x55, 0x69, 0xaa, 0x91, 0x5b, 0x97, 0x84, 0x9d, 0x1c, 0x3d, + 0xe8, 0x62, 0x1d, 0x9c, 0x5b, 0x45, 0x8f, 0x17, 0xcc, 0x67, 0x16, 0xf2, + 0x13, 0x92, 0xa4, 0xe4, 0xd6, 0xbd, 0x83, 0xf9, 0x96, 0x10, 0x37, 0xaa, + 0x0a, 0xe4, 0xf5, 0x4d, 0x52, 0x2b, 0xe8, 0x42, 0xaa, 0xb0, 0x20, 0xe7, + 0x9a, 0xe9, 0x34, 0x26, 0x2d, 0xa4, 0xc3, 0x91, 0xd0, 0x62, 0x95, 0x7a, + 0x7c, 0x94, 0x22, 0x9f, 0x46, 0x7b, 0x59, 0x15, 0x6a, 0x4f, 0x31, 0xaa, + 0xa8, 0xbb, 0xc5, 0xc5, 0x7e, 0x06, 0x8d, 0x72, 0xfe, 0x29, 0xbc, 0xdd, + 0x24, 0x76, 0x8a, 0x78, 0x5f, 0x99, 0xbe, 0xbd, 0xab, 0xa3, 0xb9, 0xb8, + 0x4b, 0x5b, 0x69, 0x27, 0x7f, 0xba, 0x83, 0x35, 0xe7, 0xb7, 0x33, 0xb5, + 0xcd, 0xcc, 0x93, 0x3f, 0x57, 0x6c, 0xd2, 0xc0, 0xd2, 0xe6, 0x9f, 0x3b, + 0xd9, 0x1d, 0x1c, 0x57, 0x8f, 0x54, 0x70, 0xeb, 0x0d, 0x17, 0xef, 0x4f, + 0x7f, 0x45, 0xfe, 0x6c, 0x8a, 0x8a, 0x28, 0xaf, 0x60, 0xfc, 0xe4, 0x28, + 0xa2, 0x8a, 0x00, 0xe9, 0x7c, 0x37, 0xa9, 0xe3, 0xfd, 0x0e, 0x56, 0xf7, + 0x42, 0x6b, 0xbf, 0xf0, 0xfc, 0xf6, 0x30, 0x5d, 0x3b, 0x5e, 0xa8, 0x20, + 0xaf, 0xca, 0x58, 0x64, 0x03, 0x5e, 0x3a, 0x8e, 0xd1, 0xba, 0xba, 0x12, + 0xac, 0xa7, 0x20, 0x8e, 0xd5, 0xda, 0xe8, 0xfa, 0xaa, 0x5f, 0xc0, 0x15, + 0x88, 0x12, 0xaf, 0x04, 0x57, 0x95, 0x8c, 0xc3, 0xf2, 0xbf, 0x69, 0x13, + 0xed, 0xb8, 0x77, 0x33, 0x8d, 0x5a, 0x5f, 0x50, 0xaf, 0x2b, 0x7f, 0x2b, + 0xfd, 0x3f, 0xc8, 0xf4, 0xe3, 0x7d, 0xa7, 0x48, 0x42, 0xdb, 0xdc, 0x5a, + 0x2c, 0xa4, 0x8d, 0xa4, 0xc3, 0xc6, 0x6b, 0x96, 0xf1, 0xb4, 0x43, 0x4e, + 0xd4, 0xee, 0xdd, 0x0a, 0x97, 0x79, 0xc9, 0x55, 0x3e, 0x84, 0x6e, 0x24, + 0x7b, 0x73, 0x55, 0x6d, 0x3f, 0xe3, 0xf2, 0x1f, 0xf7, 0xc5, 0x74, 0xde, + 0x3e, 0xd1, 0x2e, 0x35, 0x29, 0x52, 0x5b, 0x68, 0x24, 0x66, 0x30, 0xa3, + 0x2b, 0x2a, 0x92, 0x09, 0x0b, 0xb4, 0x82, 0x7f, 0x01, 0x58, 0x61, 0xe7, + 0x1e, 0x6b, 0x4b, 0x63, 0xa7, 0x3a, 0xc3, 0x4a, 0x85, 0x95, 0x19, 0x3e, + 0x69, 0x27, 0xf8, 0x35, 0xb7, 0x9d, 0xae, 0x79, 0xa8, 0xd5, 0x26, 0xdc, + 0x03, 0x86, 0x8f, 0x07, 0xef, 0x06, 0xe9, 0xf8, 0x77, 0xab, 0x5f, 0xdb, + 0xd7, 0x36, 0xff, 0x00, 0x2c, 0x73, 0x4a, 0xc0, 0x77, 0x49, 0x58, 0x0f, + 0xc2, 0xae, 0xea, 0x7a, 0x3a, 0x3e, 0x8d, 0x66, 0x90, 0x69, 0xb3, 0xc7, + 0xa9, 0xa9, 0xc5, 0xcb, 0xb0, 0xc2, 0xb8, 0xc1, 0xe7, 0x96, 0x3e, 0xdd, + 0x85, 0x55, 0xb3, 0xd2, 0x0c, 0x7a, 0x8c, 0x10, 0xde, 0x65, 0xad, 0x1b, + 0x89, 0x5e, 0x32, 0x4e, 0xd1, 0xf8, 0x64, 0xf5, 0xc7, 0x6a, 0xf4, 0xaf, + 0x4b, 0xc8, 0xf9, 0x7b, 0xe3, 0x7a, 0x73, 0x5b, 0xbd, 0x98, 0xe8, 0x7c, + 0x49, 0x7e, 0xc1, 0xd9, 0x75, 0x0b, 0x84, 0xdb, 0xce, 0xd6, 0x9c, 0xe7, + 0xf0, 0xe7, 0x9a, 0x71, 0xf1, 0x8e, 0xa3, 0xf7, 0x3e, 0xdd, 0x78, 0x0e, + 0x3a, 0x99, 0x33, 0x8f, 0xd6, 0xa9, 0x4d, 0xa3, 0xc8, 0x75, 0x0b, 0x91, + 0x69, 0x13, 0x1b, 0x74, 0x27, 0x63, 0x3e, 0x72, 0xc3, 0xb6, 0x38, 0x19, + 0x35, 0x66, 0xd7, 0x4d, 0xb6, 0x9b, 0xc3, 0xf7, 0xb7, 0x17, 0x32, 0x49, + 0x15, 0xf4, 0x24, 0x2c, 0x10, 0x60, 0x8f, 0x30, 0x1e, 0xa7, 0x04, 0x73, + 0xd7, 0xb7, 0xa5, 0x52, 0x54, 0xdb, 0xd3, 0xf3, 0x21, 0xd6, 0xc6, 0x45, + 0x6b, 0xa2, 0xf4, 0xdf, 0xf0, 0x2d, 0x9f, 0x15, 0xea, 0x71, 0xa0, 0x92, + 0x5b, 0xe6, 0x70, 0x71, 0x8c, 0x85, 0x62, 0x7d, 0xf0, 0x7a, 0x52, 0x27, + 0x8b, 0xef, 0xa6, 0x99, 0x56, 0x39, 0x63, 0x66, 0x39, 0x1b, 0x5a, 0xde, + 0x32, 0x5b, 0xe9, 0xf2, 0xd6, 0x0b, 0x59, 0xcd, 0x6c, 0xb0, 0x4b, 0x3c, + 0x4c, 0x23, 0x63, 0x90, 0x0f, 0x71, 0x57, 0x75, 0x6d, 0x26, 0x1b, 0x73, + 0xa7, 0x1b, 0x3b, 0xa5, 0xba, 0x92, 0xee, 0x20, 0xed, 0x1a, 0x15, 0x3e, + 0x59, 0xfe, 0xef, 0x07, 0xeb, 0xd7, 0x14, 0x7b, 0x3a, 0x63, 0x58, 0xdc, + 0x52, 0xd1, 0xbb, 0x3d, 0x34, 0xb1, 0xb7, 0xff, 0x00, 0x09, 0xad, 0xe5, + 0xb7, 0xc9, 0x20, 0xb6, 0x2e, 0x3a, 0x83, 0x6a, 0x9c, 0x7d, 0x78, 0xa6, + 0x37, 0x8b, 0x26, 0xb9, 0xcb, 0xb5, 0x95, 0x84, 0x83, 0x3c, 0x1f, 0xb3, + 0xe3, 0x1f, 0x5c, 0x63, 0x1f, 0x5a, 0xc2, 0xd2, 0xec, 0x23, 0xbc, 0xd5, + 0x12, 0xc6, 0xe2, 0x58, 0xe0, 0xf3, 0x5b, 0x69, 0x92, 0x42, 0x00, 0x4f, + 0x5e, 0xbc, 0x54, 0x57, 0xd6, 0x26, 0xca, 0xfe, 0xea, 0xde, 0xde, 0x56, + 0x9a, 0x18, 0x4e, 0xc3, 0x2a, 0x8e, 0x0f, 0xd7, 0x1c, 0x51, 0xec, 0x61, + 0xd8, 0x71, 0xcc, 0xb1, 0x29, 0xdd, 0x48, 0xea, 0x22, 0xf1, 0x95, 0xb2, + 0x44, 0x61, 0xfe, 0xce, 0xd3, 0x8a, 0xb7, 0xfb, 0x2e, 0x3f, 0x5d, 0xd4, + 0x8d, 0xae, 0x69, 0xec, 0xa1, 0x8e, 0x95, 0x6b, 0x8c, 0x64, 0xe2, 0x57, + 0x1c, 0x7e, 0x2d, 0x58, 0x56, 0x7e, 0x1e, 0x9f, 0x51, 0xd1, 0x2f, 0x35, + 0x28, 0x4a, 0x2c, 0x36, 0x6b, 0x99, 0x5d, 0xf2, 0x32, 0x7d, 0x01, 0x1c, + 0x67, 0xa7, 0x5f, 0x5a, 0xcc, 0x52, 0xed, 0x12, 0x23, 0x48, 0xde, 0x5e, + 0x78, 0x04, 0xf0, 0x3d, 0xea, 0x3e, 0xad, 0x4d, 0xed, 0xf9, 0x2f, 0xf2, + 0x36, 0x59, 0xd6, 0x2e, 0x1a, 0xdf, 0x7f, 0x37, 0xfe, 0x67, 0x5c, 0x35, + 0x8d, 0x1e, 0x42, 0x01, 0xd3, 0x17, 0x9f, 0xee, 0x5c, 0x9f, 0xea, 0x0d, + 0x5c, 0xb1, 0xd6, 0xf4, 0x4b, 0x0b, 0x93, 0x29, 0xd2, 0x8b, 0xe3, 0x80, + 0x1a, 0xe3, 0x23, 0xff, 0x00, 0x41, 0xae, 0x46, 0xf7, 0x45, 0xb9, 0xb0, + 0xb2, 0x8b, 0x50, 0x21, 0x04, 0x13, 0x10, 0x13, 0x2f, 0xf3, 0x9c, 0xe4, + 0x83, 0xb7, 0xf0, 0xaa, 0xae, 0xcf, 0x75, 0x26, 0xe9, 0x8f, 0x21, 0x73, + 0x9c, 0x01, 0xc5, 0x25, 0x86, 0xa6, 0xf5, 0x45, 0xbc, 0xf3, 0x17, 0x6e, + 0x59, 0x7e, 0x6f, 0xfc, 0xce, 0xfe, 0xfb, 0x57, 0xf0, 0xee, 0xb4, 0x22, + 0x59, 0x74, 0xd9, 0x63, 0x7c, 0x91, 0xba, 0x27, 0x53, 0x9f, 0xc0, 0x8a, + 0xcc, 0xd5, 0x74, 0x4d, 0x2e, 0xde, 0xe2, 0x35, 0x82, 0x12, 0xca, 0xf1, + 0x2c, 0x84, 0x4a, 0xa0, 0x32, 0xe4, 0x67, 0x1c, 0x7b, 0x62, 0xb0, 0x34, + 0xfd, 0x2a, 0xf6, 0x0d, 0x6a, 0xce, 0x29, 0x6d, 0x64, 0x4f, 0x3b, 0xe7, + 0x8c, 0x48, 0xb8, 0xf3, 0x17, 0xdb, 0xda, 0xbd, 0x37, 0xc4, 0x97, 0xf6, + 0x5a, 0x6d, 0x94, 0x97, 0x23, 0x4c, 0x8a, 0x59, 0x23, 0x65, 0x8f, 0x24, + 0x9e, 0x40, 0xc2, 0xff, 0x00, 0x4a, 0xe2, 0xc4, 0xf2, 0xd3, 0x94, 0x61, + 0x07, 0xb9, 0xdb, 0x83, 0xce, 0xe9, 0x51, 0x92, 0x58, 0xc8, 0x5e, 0xee, + 0xc9, 0x5a, 0xfa, 0xe9, 0xdf, 0xd4, 0xe0, 0x0e, 0x8f, 0x60, 0x4e, 0x7e, + 0xce, 0x95, 0x71, 0x11, 0x63, 0x40, 0x88, 0x00, 0x51, 0xd0, 0x0a, 0xf4, + 0x0b, 0xed, 0x3f, 0x4d, 0x93, 0x41, 0xb8, 0xb9, 0x36, 0x4b, 0x6c, 0xc1, + 0x01, 0x8d, 0xb7, 0x11, 0x93, 0xe9, 0x83, 0x5e, 0x51, 0xae, 0x6a, 0xeb, + 0x65, 0x0b, 0x41, 0x13, 0x03, 0x3b, 0x0c, 0x7f, 0xba, 0x2a, 0x6a, 0xe1, + 0xeb, 0x2a, 0x8a, 0x94, 0x9d, 0xd9, 0xf4, 0x78, 0x2c, 0xdf, 0x01, 0x2c, + 0x24, 0xf1, 0xb4, 0xe1, 0xc9, 0x15, 0xa6, 0xc9, 0x37, 0xe9, 0xdc, 0xcc, + 0xf1, 0x26, 0xa7, 0xe7, 0x49, 0xf6, 0x38, 0x8f, 0xc8, 0x87, 0xe7, 0x3e, + 0xa7, 0xd2, 0xb9, 0xfa, 0x09, 0x24, 0xe4, 0x9c, 0x93, 0x45, 0x7a, 0xf4, + 0xa9, 0xaa, 0x70, 0x51, 0x47, 0xe7, 0x98, 0xfc, 0x6d, 0x4c, 0x6d, 0x79, + 0x57, 0xa9, 0xd7, 0xf0, 0x5d, 0x82, 0x8a, 0x28, 0xad, 0x0e, 0x30, 0xa2, + 0x8a, 0x28, 0x00, 0xa9, 0x6d, 0xee, 0x24, 0xb6, 0x99, 0x65, 0x8c, 0xe1, + 0x87, 0xeb, 0x51, 0x51, 0x49, 0xa4, 0xd5, 0x98, 0xd3, 0x69, 0xdd, 0x1e, + 0x81, 0xe1, 0xfd, 0x6e, 0x0b, 0x99, 0xa1, 0x79, 0x7e, 0xf2, 0x30, 0x2c, + 0xb5, 0xe9, 0x37, 0xda, 0xbe, 0x99, 0x7d, 0x04, 0xc6, 0x1d, 0x4a, 0x6b, + 0x76, 0x95, 0x0a, 0x80, 0x32, 0x36, 0x92, 0x31, 0xda, 0xbe, 0x79, 0x86, + 0x69, 0x20, 0x90, 0x49, 0x13, 0x15, 0x61, 0xde, 0xba, 0xcd, 0x2b, 0x5f, + 0x8e, 0xe0, 0x08, 0xa7, 0x3b, 0x24, 0xe9, 0xf5, 0xfa, 0x57, 0x91, 0x89, + 0xc1, 0x72, 0xbe, 0x68, 0x6c, 0x7d, 0x4d, 0x0c, 0x66, 0x13, 0x36, 0x50, + 0xa3, 0x99, 0x36, 0xa5, 0x1d, 0xa5, 0x7b, 0x27, 0xeb, 0xe6, 0x7a, 0xd5, + 0x9d, 0xd4, 0xb6, 0xba, 0x45, 0x94, 0x76, 0xf7, 0xd7, 0x77, 0xa3, 0x3e, + 0x51, 0x75, 0x62, 0x70, 0x7d, 0x4e, 0x6b, 0x3e, 0x36, 0x96, 0xc4, 0xbc, + 0x17, 0x7e, 0x26, 0x92, 0x59, 0x51, 0x8e, 0x72, 0x37, 0x81, 0xed, 0xc8, + 0xa7, 0x78, 0x4b, 0x5e, 0xd3, 0xac, 0x6c, 0x1e, 0x3b, 0xb9, 0x1d, 0x7e, + 0x70, 0xea, 0x50, 0x03, 0x9f, 0xd6, 0xb9, 0x9b, 0xf9, 0xc5, 0xcd, 0xf4, + 0xd3, 0x2f, 0x47, 0x62, 0x45, 0x3a, 0xf8, 0xa9, 0x54, 0xa5, 0x04, 0xde, + 0xba, 0xdc, 0xf5, 0x32, 0xbc, 0x8a, 0x34, 0x71, 0xd5, 0xf4, 0x6a, 0x1a, + 0x59, 0xbb, 0x34, 0xef, 0xbe, 0xe7, 0x6b, 0xf6, 0x9b, 0x4b, 0x8b, 0x07, + 0x98, 0x5c, 0xf9, 0x8b, 0x6e, 0x33, 0x23, 0x2d, 0xa2, 0x39, 0x6c, 0x9f, + 0x42, 0x2b, 0x36, 0xdf, 0xc4, 0x5a, 0x1f, 0xda, 0x9a, 0x29, 0x2d, 0x9e, + 0xe1, 0x95, 0x0b, 0xf9, 0x66, 0xc9, 0x14, 0x9f, 0xca, 0xab, 0x78, 0x63, + 0x52, 0xb3, 0xb3, 0x4b, 0xa8, 0x2f, 0x1d, 0x91, 0x66, 0x5c, 0x06, 0x51, + 0x9c, 0x1c, 0xd5, 0xc6, 0xb1, 0x89, 0xb5, 0x98, 0xf5, 0x4b, 0x4b, 0xa1, + 0x35, 0xbb, 0x40, 0xd1, 0x15, 0xc6, 0x08, 0x60, 0x41, 0xfe, 0xb5, 0x18, + 0x46, 0xea, 0xd7, 0x8c, 0x25, 0xb3, 0x3c, 0xac, 0xf3, 0xeb, 0x78, 0x09, + 0xcd, 0x53, 0x87, 0xee, 0x92, 0xf8, 0xac, 0xb7, 0xf5, 0xb1, 0x31, 0x78, + 0x35, 0x1d, 0x22, 0x2b, 0xbd, 0x3f, 0x44, 0x85, 0x65, 0x2e, 0x43, 0xc7, + 0x2a, 0x15, 0x38, 0xfa, 0x03, 0x59, 0x9a, 0xe4, 0xb6, 0xfa, 0x3e, 0x93, + 0x6d, 0x3c, 0xfa, 0x35, 0xb0, 0xba, 0x9a, 0x6d, 0x85, 0x04, 0x92, 0x0f, + 0x97, 0xd7, 0x86, 0xcd, 0x54, 0xf1, 0x3c, 0xb7, 0x42, 0xff, 0x00, 0x4b, + 0x5b, 0x7f, 0x34, 0x0d, 0xce, 0x58, 0xaf, 0x4c, 0x60, 0x56, 0x4d, 0xc0, + 0x7b, 0xdb, 0xbb, 0x18, 0x6e, 0x66, 0x21, 0x5a, 0xe5, 0x01, 0x2c, 0x7a, + 0x56, 0xf8, 0xb8, 0x2a, 0x58, 0x8e, 0x55, 0xb1, 0xb6, 0x54, 0xe7, 0x8a, + 0xca, 0x1d, 0x7d, 0x9c, 0x6f, 0xd5, 0xdf, 0xef, 0xb9, 0xd4, 0x4b, 0x06, + 0x85, 0x36, 0x8d, 0xf6, 0xd3, 0xa2, 0xca, 0x58, 0xc9, 0xb0, 0x82, 0xe7, + 0xd3, 0xa8, 0x27, 0x39, 0xa8, 0x92, 0xd7, 0x45, 0x3a, 0x1d, 0xc5, 0xc8, + 0xd3, 0x6f, 0x52, 0x38, 0xc8, 0x06, 0x18, 0xd9, 0x48, 0x6c, 0xf7, 0x39, + 0x5f, 0x6a, 0xec, 0xde, 0xcd, 0x2d, 0xec, 0xa5, 0x86, 0x39, 0x99, 0x53, + 0x1c, 0x3b, 0x05, 0x20, 0x7b, 0xf3, 0x56, 0x0e, 0x9e, 0x6e, 0xec, 0x3c, + 0x85, 0x25, 0x43, 0x20, 0xe7, 0x68, 0x0a, 0xe7, 0x1d, 0x78, 0xac, 0x70, + 0x77, 0xa8, 0xd7, 0x3b, 0xb2, 0xfb, 0xff, 0x00, 0x23, 0xcd, 0x58, 0xd9, + 0x43, 0x03, 0x67, 0x4d, 0xba, 0x9f, 0xcd, 0xcc, 0xbf, 0xcf, 0xb1, 0xe3, + 0xb1, 0xde, 0xf8, 0x6a, 0x58, 0xb2, 0x74, 0xfb, 0xf8, 0xc3, 0xff, 0x00, + 0x0a, 0x14, 0x60, 0x7e, 0xbd, 0x2a, 0xd4, 0x11, 0xe8, 0x3a, 0xbd, 0xb1, + 0x6f, 0xb3, 0x6a, 0x4f, 0xe5, 0x37, 0x96, 0xaa, 0x96, 0xea, 0x76, 0xfe, + 0x4e, 0x38, 0xad, 0x0b, 0x4f, 0x0b, 0x45, 0x63, 0x07, 0xd9, 0xe6, 0xd5, + 0xad, 0x84, 0xaa, 0xc7, 0x70, 0xc9, 0x38, 0xfd, 0x2b, 0x57, 0xc3, 0x5a, + 0x11, 0xd3, 0x61, 0xba, 0x95, 0x2f, 0x22, 0xb8, 0x53, 0x30, 0x72, 0x23, + 0xfe, 0x11, 0x59, 0xd6, 0xc4, 0x38, 0xa7, 0x28, 0xf4, 0xf3, 0x67, 0x6e, + 0x6b, 0x4d, 0xe1, 0x70, 0x51, 0xad, 0x49, 0x5d, 0xbb, 0x73, 0x2e, 0x5f, + 0x4d, 0xf4, 0x20, 0x3e, 0x12, 0x49, 0x84, 0x08, 0xf3, 0xdd, 0xf9, 0x76, + 0xe3, 0x30, 0xc5, 0x72, 0xa4, 0xaa, 0x7d, 0x14, 0xb9, 0xaa, 0x77, 0xfe, + 0x0c, 0xb1, 0xd3, 0xae, 0x22, 0xb9, 0xba, 0xbc, 0x48, 0xde, 0x43, 0xbd, + 0x51, 0x83, 0xa8, 0xfc, 0x82, 0x9a, 0xdd, 0xbe, 0xd2, 0x97, 0x58, 0xd7, + 0x6e, 0x1a, 0xdb, 0x52, 0x40, 0xe9, 0xb5, 0x9e, 0x33, 0x90, 0x57, 0x22, + 0xa2, 0xf1, 0xc4, 0x5e, 0x44, 0x7a, 0x74, 0x65, 0xf7, 0x15, 0x80, 0x0c, + 0xfa, 0xf2, 0x6b, 0x5f, 0x6b, 0x57, 0xd9, 0xfb, 0x4b, 0x3b, 0x77, 0xd4, + 0xe8, 0xc0, 0xe1, 0x70, 0x78, 0x8a, 0x94, 0xe9, 0x2a, 0x8a, 0x5c, 0xca, + 0xed, 0x24, 0x93, 0x5a, 0x7a, 0x14, 0x96, 0x5b, 0x73, 0xab, 0x43, 0xab, + 0xdc, 0xea, 0x16, 0x93, 0x4d, 0x6c, 0x0f, 0x96, 0x8a, 0x19, 0x4e, 0x39, + 0x38, 0x55, 0x08, 0x07, 0x27, 0xad, 0x2f, 0xfc, 0x25, 0x2b, 0x78, 0x7c, + 0xad, 0x42, 0xca, 0x09, 0x2d, 0xc9, 0x05, 0x80, 0x5c, 0x1a, 0xe6, 0x59, + 0x95, 0x14, 0xb3, 0x10, 0x00, 0xea, 0x4d, 0x73, 0xba, 0xaf, 0x88, 0xd5, + 0x41, 0x86, 0xc8, 0xee, 0x62, 0x30, 0x64, 0xf4, 0xfa, 0x56, 0x31, 0x55, + 0x2b, 0xcd, 0x35, 0xb9, 0xec, 0xe2, 0xf0, 0x59, 0x56, 0x5f, 0x47, 0x9b, + 0x10, 0x93, 0xed, 0x7b, 0x5f, 0xe5, 0xfe, 0x67, 0x41, 0xe3, 0x1f, 0x1a, + 0xcd, 0x33, 0xb4, 0x49, 0x27, 0xcd, 0xfc, 0x11, 0x8f, 0xbb, 0x18, 0xaf, + 0x38, 0x92, 0x47, 0x96, 0x46, 0x77, 0x62, 0xcc, 0xc7, 0x24, 0x9a, 0x1d, + 0xda, 0x47, 0x2e, 0xec, 0x59, 0x89, 0xc9, 0x27, 0xbd, 0x36, 0xbd, 0x8a, + 0x34, 0x55, 0x35, 0xdd, 0xf7, 0x3e, 0x17, 0x30, 0xcc, 0x25, 0x8b, 0x92, + 0x49, 0x72, 0xc2, 0x3b, 0x45, 0x6c, 0xbf, 0xe0, 0x85, 0x14, 0x51, 0x5b, + 0x1e, 0x70, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, + 0x14, 0x00, 0x51, 0x45, 0x14, 0x01, 0xab, 0x61, 0xae, 0xdc, 0xda, 0x10, + 0xae, 0x4c, 0x91, 0x8f, 0x5e, 0xbf, 0xfd, 0x7a, 0xe9, 0xac, 0xb5, 0x8b, + 0x5b, 0xc0, 0x02, 0xb8, 0x0e, 0x7f, 0x84, 0xf5, 0xfc, 0xab, 0x84, 0xa0, + 0x12, 0x0e, 0x41, 0xc1, 0xae, 0x5a, 0xd8, 0x4a, 0x75, 0x35, 0xd9, 0x9e, + 0xd6, 0x5f, 0x9f, 0x62, 0xf0, 0x56, 0x8c, 0x5f, 0x34, 0x7b, 0x3f, 0xd3, + 0xb1, 0xe9, 0x60, 0x82, 0x32, 0x08, 0x23, 0xda, 0xba, 0x5d, 0x0b, 0x56, + 0xb0, 0xb6, 0xb3, 0x6b, 0x7b, 0xdf, 0x30, 0x60, 0x92, 0xa5, 0x3d, 0xff, + 0x00, 0xfd, 0x55, 0xe3, 0xd6, 0xda, 0xc5, 0xe5, 0xb1, 0xe2, 0x4d, 0xe3, + 0xd1, 0xbf, 0xc7, 0xad, 0x6b, 0xdb, 0xf8, 0xab, 0xfe, 0x7b, 0xc4, 0xdf, + 0xf0, 0x1c, 0x1f, 0xf0, 0xae, 0x25, 0x85, 0xad, 0x46, 0x4a, 0x74, 0xf7, + 0x47, 0xd1, 0xd4, 0xcf, 0xf2, 0xec, 0xc6, 0x83, 0xc3, 0xe3, 0x22, 0xe2, + 0x9e, 0xfd, 0xbe, 0xf5, 0xaf, 0xe0, 0x7a, 0xc5, 0xe7, 0x8a, 0x2c, 0xe1, + 0xfb, 0x34, 0x76, 0x08, 0x4a, 0x23, 0x66, 0x46, 0x91, 0x41, 0x2c, 0x3d, + 0x2b, 0x2e, 0xf2, 0xd7, 0xc3, 0xda, 0x95, 0xd2, 0x38, 0xb9, 0xb8, 0x84, + 0xf9, 0xc2, 0x40, 0x02, 0x8e, 0x3f, 0x5a, 0xe2, 0xe3, 0xf1, 0x15, 0x83, + 0xe3, 0x32, 0x15, 0x27, 0xd4, 0x54, 0xeb, 0xad, 0x69, 0xe4, 0xff, 0x00, + 0xc7, 0xd2, 0x0f, 0x72, 0x6b, 0x1a, 0x9e, 0xde, 0x53, 0x73, 0x9a, 0x77, + 0xf4, 0x3b, 0x70, 0xd4, 0xf2, 0x85, 0x87, 0xfa, 0xbd, 0x0a, 0xa9, 0x46, + 0xd6, 0xde, 0xd7, 0xf5, 0xb9, 0xe8, 0xde, 0x20, 0xd2, 0x6f, 0x64, 0xd2, + 0x2e, 0x92, 0xd7, 0x74, 0xca, 0xc8, 0x0a, 0x14, 0x39, 0xc8, 0xc8, 0xa8, + 0xb5, 0x7f, 0x10, 0x6a, 0x3a, 0x3f, 0xd9, 0xac, 0xad, 0xa4, 0xf2, 0x95, + 0x2d, 0xa3, 0x04, 0x63, 0x90, 0x76, 0x8c, 0xd7, 0x0f, 0x1f, 0x8a, 0x61, + 0x84, 0x6e, 0x4d, 0x4f, 0x1b, 0x79, 0xc0, 0x63, 0x55, 0xae, 0x3c, 0x57, + 0x67, 0x75, 0x29, 0x96, 0x7b, 0xa7, 0x77, 0x3d, 0x58, 0xa9, 0x35, 0x9d, + 0x1a, 0x55, 0x29, 0xc1, 0xc2, 0x09, 0xea, 0xee, 0x79, 0x99, 0x66, 0x51, + 0x97, 0x65, 0xf5, 0x5b, 0xa9, 0x5e, 0x13, 0x8b, 0xbe, 0x8d, 0xaf, 0x2f, + 0x3f, 0x23, 0x46, 0x49, 0x1a, 0x59, 0x19, 0xd8, 0xe5, 0x98, 0xe4, 0x9a, + 0xbb, 0xa6, 0x6a, 0xf7, 0x5a, 0x54, 0x8c, 0xd6, 0xcf, 0xb7, 0x70, 0xc3, + 0x0c, 0x64, 0x11, 0x5c, 0xa4, 0xbe, 0x29, 0xb2, 0x4c, 0x84, 0x49, 0x5c, + 0x83, 0xe8, 0x00, 0xac, 0xfb, 0x8f, 0x15, 0x5c, 0x3a, 0xe2, 0x08, 0x52, + 0x3f, 0x72, 0x72, 0x6b, 0x48, 0xe1, 0x2b, 0x4b, 0xa1, 0xee, 0x62, 0xb3, + 0xdc, 0xae, 0x30, 0x70, 0x9c, 0xd4, 0x97, 0x64, 0xaf, 0xff, 0x00, 0x00, + 0xf5, 0x59, 0x3c, 0x43, 0x65, 0x6c, 0x6f, 0x2f, 0xed, 0x03, 0x45, 0x7f, + 0x74, 0x88, 0xb2, 0x12, 0x06, 0xd5, 0xda, 0x31, 0x91, 0x5c, 0x56, 0xb7, + 0xe3, 0x11, 0x2c, 0x99, 0x9e, 0x76, 0xba, 0x99, 0x46, 0x00, 0x07, 0x81, + 0xf8, 0xd7, 0x13, 0x73, 0xa8, 0xdd, 0xde, 0x1f, 0xdf, 0xcc, 0xcc, 0x3d, + 0x3a, 0x0a, 0xab, 0x5d, 0xd0, 0xc1, 0x5d, 0x2f, 0x68, 0xef, 0x6e, 0x87, + 0xc9, 0x4b, 0x3e, 0xa5, 0x87, 0x4e, 0x38, 0x0a, 0x5c, 0xb7, 0xea, 0xf5, + 0x7f, 0x2e, 0xdf, 0x89, 0x7e, 0xff, 0x00, 0x57, 0xba, 0xd4, 0x18, 0x87, + 0x7d, 0xb1, 0xff, 0x00, 0x71, 0x7a, 0x55, 0x0a, 0x28, 0xae, 0xd8, 0xc2, + 0x30, 0x56, 0x8a, 0x3e, 0x7e, 0xbe, 0x22, 0xad, 0x79, 0xba, 0x95, 0x64, + 0xdb, 0x7d, 0xc2, 0x8a, 0x28, 0xaa, 0x31, 0x0a, 0x28, 0xa2, 0x80, 0x0a, + 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, + 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, + 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, + 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x0a, + 0x28, 0xa2, 0x80, 0x0a, 0x28, 0xa2, 0x80, 0x3f, 0xff, 0xd9 +}; +unsigned int lgfx_logo_201x197_jpg_len = 10246; + +/* three-butts dog by @pixelpooper (https://twitter.com/pixelpooper), perfect square ratio */ +const unsigned char dog_200_200_jpg[] = +{ + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x01, 0x01, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, 0x07, 0x07, 0x09, + 0x09, 0x08, 0x0a, 0x0c, 0x14, 0x0d, 0x0c, 0x0b, 0x0b, 0x0c, 0x19, 0x12, + 0x13, 0x0f, 0x14, 0x1d, 0x1a, 0x1f, 0x1e, 0x1d, 0x1a, 0x1c, 0x1c, 0x20, + 0x24, 0x2e, 0x27, 0x20, 0x22, 0x2c, 0x23, 0x1c, 0x1c, 0x28, 0x37, 0x29, + 0x2c, 0x30, 0x31, 0x34, 0x34, 0x34, 0x1f, 0x27, 0x39, 0x3d, 0x38, 0x32, + 0x3c, 0x2e, 0x33, 0x34, 0x32, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x09, 0x09, + 0x09, 0x0c, 0x0b, 0x0c, 0x18, 0x0d, 0x0d, 0x18, 0x32, 0x21, 0x1c, 0x21, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xc8, 0x00, 0xc8, 0x03, + 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, + 0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, + 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, + 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, + 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, + 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, + 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, + 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, + 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, + 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, + 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, + 0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, + 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, + 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, + 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, + 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, + 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, + 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, + 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00, + 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xf2, + 0x3a, 0x28, 0xad, 0xbd, 0x0a, 0x6d, 0x02, 0x28, 0xe6, 0xfe, 0xd9, 0xb7, + 0x96, 0x57, 0x24, 0x79, 0x65, 0x0b, 0x0c, 0x0e, 0xfd, 0x08, 0xad, 0x27, + 0x3e, 0x48, 0xde, 0xd7, 0xf4, 0x22, 0x10, 0xe7, 0x95, 0xaf, 0x6f, 0x52, + 0x3d, 0x0b, 0x46, 0xfe, 0xd4, 0xbc, 0x45, 0xb8, 0x32, 0x45, 0x6a, 0xc1, + 0xb3, 0x32, 0x8e, 0x01, 0x1f, 0x5a, 0xf4, 0x19, 0x35, 0x3b, 0x1b, 0x0d, + 0x3e, 0x1b, 0x08, 0x2e, 0xa2, 0x93, 0xcb, 0x8c, 0x40, 0x72, 0xdc, 0xf0, + 0x31, 0xf9, 0xd7, 0x17, 0x73, 0xae, 0x5a, 0x5b, 0x4e, 0x63, 0xd2, 0x3c, + 0xc8, 0x6c, 0xc0, 0x1b, 0x51, 0x97, 0x24, 0x1e, 0xfd, 0x72, 0x7a, 0xd5, + 0x24, 0xb7, 0xd4, 0x92, 0x56, 0xbc, 0xbb, 0x95, 0x1a, 0x1b, 0x83, 0xe6, + 0x43, 0xb7, 0x19, 0x00, 0xf3, 0xcf, 0x1e, 0x84, 0x57, 0x97, 0x88, 0x84, + 0xeb, 0x49, 0x3a, 0x9a, 0x2e, 0x88, 0xf4, 0xa8, 0x54, 0x8d, 0x18, 0xb5, + 0x4d, 0x5d, 0xf5, 0x64, 0x3a, 0xce, 0x9f, 0x1e, 0x9b, 0x78, 0x90, 0xc6, + 0xec, 0xe1, 0xa3, 0x0f, 0x96, 0xfa, 0x91, 0xfd, 0x2b, 0x3a, 0xba, 0x71, + 0x6e, 0xba, 0xd8, 0xf2, 0x5d, 0x77, 0xea, 0x0f, 0xf2, 0x42, 0xec, 0x76, + 0xa8, 0x1d, 0x79, 0xc7, 0x1e, 0xbd, 0xaa, 0xf6, 0x97, 0xe0, 0xe3, 0x63, + 0x72, 0xd2, 0xeb, 0x90, 0xc7, 0x2d, 0xb1, 0x42, 0xaa, 0xb1, 0xc8, 0xd9, + 0xdf, 0x91, 0x83, 0xc6, 0x3b, 0x03, 0x5d, 0x30, 0xc5, 0xc6, 0x9d, 0x3f, + 0xde, 0xbd, 0x57, 0xe3, 0xe8, 0x73, 0xbc, 0x2c, 0xaa, 0x4f, 0xf7, 0x6b, + 0x47, 0xf8, 0x7a, 0x9a, 0x1e, 0x07, 0xb7, 0x9b, 0x4c, 0xb5, 0xbb, 0x17, + 0xd1, 0xb5, 0xbf, 0x9a, 0xca, 0xc9, 0xe6, 0x0c, 0x6e, 0x18, 0x3d, 0x2a, + 0xcf, 0x8a, 0xa5, 0x6b, 0xfd, 0x3a, 0x5b, 0x38, 0x40, 0x75, 0x2c, 0xa4, + 0x14, 0xe4, 0xf0, 0x73, 0x4d, 0xbe, 0xb9, 0x95, 0xad, 0x64, 0x6d, 0xdf, + 0xea, 0xa3, 0x6d, 0x9c, 0x0e, 0x30, 0x38, 0xac, 0x68, 0x75, 0xc8, 0xa1, + 0xb5, 0x0d, 0x74, 0xce, 0xce, 0x0f, 0x25, 0x54, 0x57, 0x95, 0x7a, 0x95, + 0x6a, 0xfb, 0x68, 0xad, 0x6e, 0x7a, 0x6d, 0xc2, 0x9d, 0x3f, 0x62, 0xde, + 0x96, 0x38, 0xf9, 0x63, 0x31, 0x4c, 0xf1, 0x90, 0x41, 0x46, 0x2a, 0x41, + 0xf6, 0xa6, 0x57, 0x61, 0x25, 0xf7, 0x83, 0xa6, 0x8d, 0xe4, 0x92, 0xca, + 0xe0, 0xdc, 0xb8, 0x25, 0x9b, 0x2f, 0xcb, 0x9e, 0xff, 0x00, 0x7b, 0xd6, + 0xb8, 0xfa, 0xf7, 0x68, 0xd4, 0x73, 0x5a, 0xc5, 0xaf, 0x53, 0xc5, 0xab, + 0x4d, 0x41, 0xe9, 0x24, 0xfd, 0x02, 0x8a, 0x28, 0xad, 0x8c, 0x82, 0x8a, + 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, + 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, + 0x28, 0xa0, 0x02, 0x8a, 0x2a, 0x5b, 0x5b, 0x69, 0xaf, 0x2e, 0xe1, 0xb5, + 0xb7, 0x4d, 0xf3, 0x4c, 0xeb, 0x1c, 0x6b, 0x90, 0x32, 0xc4, 0xe0, 0x0c, + 0x9e, 0x3a, 0x9a, 0x00, 0x58, 0xac, 0xee, 0xa6, 0x50, 0xd1, 0x5b, 0x4d, + 0x22, 0x9e, 0xe8, 0x84, 0x8a, 0xf5, 0x6f, 0x0d, 0xf8, 0x0a, 0x6f, 0x13, + 0xe9, 0xb0, 0x25, 0xdd, 0xdc, 0x9a, 0x62, 0xc3, 0x04, 0x6c, 0xad, 0x2d, + 0xb9, 0x60, 0xf9, 0x1d, 0xb2, 0xcb, 0xd3, 0x15, 0xb1, 0xa1, 0xe8, 0x7a, + 0x7f, 0x84, 0x3e, 0x1b, 0xa6, 0xa9, 0xe2, 0x66, 0x96, 0xca, 0x58, 0xe6, + 0x2a, 0xe4, 0x37, 0x98, 0x06, 0xe7, 0xc2, 0xf0, 0x81, 0xab, 0xbe, 0xb8, + 0xb8, 0x82, 0xef, 0xc2, 0xda, 0x5d, 0xcd, 0x9b, 0xf9, 0x96, 0xf2, 0xda, + 0xa4, 0x90, 0xb9, 0x04, 0x6e, 0x42, 0x80, 0xa9, 0xc1, 0xe7, 0xa6, 0x3a, + 0xd7, 0x36, 0x22, 0x0a, 0x73, 0x8b, 0x5b, 0x2f, 0xcc, 0xde, 0x84, 0x9c, + 0x61, 0x24, 0xf7, 0x7f, 0x91, 0xca, 0x68, 0x7f, 0x0d, 0xb4, 0xcd, 0x1a, + 0xf2, 0x29, 0x5f, 0xc4, 0x96, 0x97, 0x0e, 0x8e, 0x5c, 0x2b, 0x42, 0xaa, + 0x4f, 0x18, 0xc7, 0xdf, 0x35, 0xd9, 0x8f, 0x0c, 0xda, 0x4f, 0x18, 0x61, + 0x24, 0x32, 0x21, 0xe4, 0x11, 0x08, 0x20, 0xfe, 0xb5, 0xe4, 0xbb, 0x6e, + 0x85, 0xdc, 0x77, 0x57, 0x48, 0x15, 0x23, 0x18, 0x24, 0x11, 0xc0, 0xff, + 0x00, 0x26, 0xba, 0xff, 0x00, 0x0b, 0xf8, 0xb2, 0xfa, 0x5b, 0xb6, 0xd3, + 0x90, 0xc2, 0x6d, 0x61, 0x88, 0xb4, 0x67, 0x61, 0xdd, 0xd4, 0x75, 0xfc, + 0xcd, 0x79, 0xd8, 0x7c, 0x54, 0x27, 0x3e, 0x57, 0x1b, 0x5f, 0xe6, 0x7a, + 0x18, 0x8c, 0x34, 0xa1, 0x0e, 0x65, 0x2d, 0xbe, 0x47, 0x8c, 0xea, 0x71, + 0x5e, 0x5a, 0xde, 0x4c, 0x93, 0xac, 0xf1, 0xa9, 0x76, 0x0a, 0x1c, 0x15, + 0x0c, 0x33, 0xdb, 0x34, 0xcb, 0x9d, 0x1f, 0xcc, 0xf0, 0xe1, 0xd4, 0x12, + 0x7d, 0xd2, 0x6f, 0x0b, 0xe4, 0x2a, 0x64, 0xf5, 0xc6, 0x73, 0x9f, 0xe9, + 0x5e, 0xf9, 0xe3, 0x3f, 0x03, 0xe9, 0xba, 0xce, 0x8d, 0x71, 0x7c, 0xe2, + 0x76, 0xbc, 0xb6, 0xb4, 0x95, 0xe0, 0x0b, 0x20, 0x0a, 0x5f, 0x6e, 0x46, + 0x72, 0x3d, 0x40, 0xaf, 0x26, 0xb2, 0xd2, 0xef, 0x2c, 0x74, 0xf1, 0xf6, + 0x98, 0x76, 0x60, 0x9c, 0xfc, 0xc0, 0xf5, 0x3e, 0xc6, 0xb6, 0xae, 0xe5, + 0x45, 0x29, 0x41, 0x6c, 0xcc, 0x28, 0xa8, 0xd5, 0x6e, 0x33, 0xec, 0x79, + 0xb9, 0x05, 0x58, 0xab, 0x02, 0x08, 0x38, 0x20, 0xf6, 0xa4, 0xae, 0xab, + 0xc5, 0xda, 0x2d, 0xa6, 0x9f, 0x6f, 0x6b, 0x79, 0x07, 0x99, 0xe6, 0xdd, + 0x33, 0x34, 0x9b, 0x9b, 0x23, 0x24, 0x03, 0xc7, 0xe7, 0x5c, 0xad, 0x77, + 0xd1, 0xaa, 0xaa, 0xc1, 0x4d, 0x1c, 0x75, 0xa9, 0x3a, 0x53, 0x70, 0x61, + 0x45, 0x14, 0x56, 0xa6, 0x61, 0x45, 0x76, 0x96, 0x3e, 0x05, 0xba, 0xd4, + 0xbc, 0x06, 0xba, 0xe5, 0xa5, 0xac, 0x92, 0x4a, 0xd2, 0x94, 0x07, 0xcd, + 0x40, 0xbc, 0x36, 0x3a, 0x13, 0x5c, 0x7c, 0xf0, 0xc9, 0x6d, 0x71, 0x24, + 0x12, 0xae, 0xd9, 0x23, 0x62, 0x8e, 0xb9, 0xce, 0x08, 0x38, 0x22, 0xa2, + 0x35, 0x23, 0x26, 0xe2, 0xb7, 0x5f, 0xd7, 0xdc, 0x5c, 0xa9, 0xca, 0x29, + 0x3e, 0x8f, 0xfa, 0xfb, 0xc8, 0xe8, 0xa2, 0x8a, 0xb2, 0x02, 0x8a, 0x28, + 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, + 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0xbb, 0xbf, 0x0d, 0x78, 0x2e, 0xed, + 0x7c, 0x47, 0xa3, 0xcf, 0xf6, 0xa8, 0x36, 0x8b, 0xb8, 0x5f, 0x1c, 0xff, + 0x00, 0x7c, 0x1f, 0x4a, 0xe8, 0xa3, 0xd6, 0x2e, 0xbe, 0x1f, 0xf8, 0x56, + 0xc7, 0xc4, 0x3a, 0x45, 0xba, 0x5f, 0xdc, 0x5d, 0x37, 0xd9, 0x5a, 0x29, + 0xb3, 0xb4, 0x29, 0xdc, 0xc5, 0x86, 0xdc, 0x1c, 0xe6, 0x30, 0x3f, 0x1a, + 0xc8, 0xf1, 0x1f, 0xc4, 0xcd, 0x77, 0xc4, 0xd3, 0x5a, 0x59, 0x2e, 0x8f, + 0x6e, 0x7c, 0xf5, 0x30, 0x1f, 0x2b, 0x71, 0x23, 0x79, 0x03, 0x8e, 0x7a, + 0xf3, 0x59, 0xc7, 0x10, 0xa3, 0x17, 0xcf, 0x0b, 0xbe, 0x9a, 0xfe, 0x3b, + 0x07, 0xb2, 0x75, 0x39, 0x65, 0x19, 0xd9, 0x6e, 0xf4, 0xbf, 0xcb, 0x73, + 0xb5, 0xf1, 0xc7, 0xc2, 0xef, 0x17, 0xf8, 0xa6, 0xee, 0x78, 0x6d, 0xbc, + 0x4b, 0x04, 0x3a, 0x3c, 0x81, 0x08, 0xb2, 0x91, 0x9f, 0x68, 0x65, 0xef, + 0x80, 0x31, 0xd7, 0x9a, 0xf4, 0x4d, 0x2f, 0x47, 0xfe, 0xcb, 0xf0, 0x66, + 0x9d, 0xa5, 0xdc, 0xf9, 0x73, 0x4b, 0x61, 0xa7, 0xc7, 0x6e, 0x5d, 0x47, + 0x05, 0x92, 0x30, 0xa4, 0x8c, 0xf6, 0xe2, 0xb9, 0x2f, 0x00, 0xde, 0xdd, + 0x68, 0x3e, 0x0e, 0x82, 0xd6, 0xf2, 0xdc, 0x40, 0xe9, 0x23, 0x92, 0x25, + 0x04, 0x11, 0x96, 0xe2, 0xb6, 0x35, 0x5d, 0x5e, 0xe6, 0xea, 0x38, 0x0c, + 0x50, 0x23, 0xae, 0x73, 0x95, 0xc9, 0xe0, 0xd6, 0x7b, 0xa3, 0x6d, 0x99, + 0xe3, 0x1e, 0x22, 0xf1, 0xe5, 0x8e, 0x95, 0xe1, 0x6b, 0xfd, 0x0a, 0x5b, + 0x3b, 0x87, 0xd5, 0xee, 0x94, 0x49, 0x6f, 0x7a, 0xa5, 0x71, 0x12, 0x92, + 0x06, 0x33, 0x9c, 0xff, 0x00, 0x0b, 0x7e, 0x75, 0xd4, 0x7c, 0x31, 0xb0, + 0xba, 0x3a, 0x0d, 0x96, 0xaf, 0x71, 0x70, 0x25, 0x37, 0x16, 0xec, 0x39, + 0xc9, 0x6c, 0xef, 0xef, 0xff, 0x00, 0x7c, 0xd6, 0xef, 0x88, 0x34, 0xcd, + 0x36, 0xe6, 0x71, 0x75, 0x7d, 0x7d, 0xf6, 0x61, 0x1c, 0x61, 0x4f, 0x20, + 0x0c, 0x64, 0xf3, 0xcf, 0xd6, 0xb3, 0x6c, 0xfc, 0x4d, 0x6e, 0x87, 0xfb, + 0x27, 0x43, 0x9a, 0x0d, 0x46, 0x6b, 0x71, 0x92, 0x88, 0xdb, 0x98, 0x27, + 0x76, 0x20, 0x7b, 0x90, 0x3f, 0x1a, 0xe3, 0x85, 0x25, 0x4d, 0x25, 0x28, + 0xfc, 0x3d, 0x7b, 0xfc, 0x8e, 0xa9, 0xd4, 0x73, 0x77, 0x8c, 0xb7, 0xe9, + 0xff, 0x00, 0x04, 0xee, 0x1e, 0xee, 0xe2, 0x48, 0x9a, 0x27, 0x99, 0xda, + 0x36, 0x52, 0xa5, 0x49, 0xe0, 0x8f, 0x4a, 0xe4, 0xf5, 0x6b, 0x78, 0x7e, + 0xd6, 0xf1, 0x79, 0x6b, 0xe5, 0xe0, 0x1d, 0xb8, 0xe2, 0xb2, 0x7c, 0x53, + 0xa9, 0x46, 0xf7, 0x56, 0x3a, 0x8d, 0xb3, 0x24, 0xcb, 0x62, 0x0c, 0xb3, + 0x10, 0x72, 0xa9, 0xb4, 0x86, 0xf9, 0xbd, 0x3a, 0x1a, 0x4d, 0x33, 0xc6, + 0x13, 0xf8, 0x95, 0xd6, 0xda, 0x18, 0x60, 0x78, 0xdf, 0x24, 0x3c, 0x44, + 0x9e, 0x95, 0xe8, 0x3a, 0x77, 0x8d, 0xcf, 0x2d, 0x62, 0xe2, 0xaa, 0x72, + 0x3e, 0xfa, 0x3e, 0xe6, 0x74, 0x96, 0x96, 0xf7, 0xcd, 0x77, 0x1d, 0xdc, + 0x29, 0x34, 0x70, 0x6e, 0xf2, 0x95, 0xc6, 0x42, 0x75, 0xe9, 0xf9, 0x57, + 0x98, 0xfd, 0x9c, 0x5d, 0xfe, 0xf2, 0x10, 0x23, 0x51, 0xc1, 0x07, 0xd6, + 0xbd, 0x16, 0x5d, 0x7f, 0x53, 0x7d, 0x4e, 0xee, 0xca, 0x0b, 0x05, 0x90, + 0x41, 0x2b, 0x46, 0xe4, 0x03, 0x90, 0x03, 0x11, 0x93, 0xf9, 0x53, 0x35, + 0x4d, 0x02, 0x1b, 0xab, 0x69, 0x2e, 0xad, 0x65, 0x92, 0x59, 0x51, 0x76, + 0xaa, 0x2e, 0x08, 0x27, 0x3f, 0xfd, 0x7a, 0xf2, 0xa9, 0xd4, 0x78, 0x69, + 0xb8, 0xbd, 0x9e, 0xdf, 0xf0, 0xc7, 0xa7, 0x8a, 0xa7, 0x3c, 0x45, 0x25, + 0x52, 0x97, 0xc5, 0x1d, 0xff, 0x00, 0xaf, 0x91, 0xe7, 0xbf, 0xd9, 0xd2, + 0x7f, 0x7d, 0x68, 0xfe, 0xce, 0x93, 0xfb, 0xeb, 0x5d, 0x0f, 0xf6, 0x2e, + 0xa7, 0xff, 0x00, 0x3e, 0x33, 0xff, 0x00, 0xdf, 0x35, 0x44, 0x82, 0x09, + 0x04, 0x60, 0x8e, 0xb5, 0xda, 0xab, 0xb7, 0xb3, 0x3c, 0x19, 0xd5, 0xaf, + 0x0f, 0x89, 0x5b, 0xe4, 0x7a, 0x2f, 0xc2, 0x6d, 0x49, 0xa4, 0xbb, 0xb5, + 0xf0, 0xe5, 0xc9, 0x79, 0x6d, 0xb1, 0x2c, 0x86, 0x32, 0x73, 0x1e, 0x79, + 0x6e, 0x95, 0xd6, 0xf8, 0xeb, 0xe1, 0x7d, 0x86, 0xaf, 0x6a, 0x93, 0xe9, + 0x16, 0xd6, 0x16, 0x33, 0x46, 0x64, 0x96, 0x77, 0x31, 0x90, 0x64, 0xc8, + 0xcf, 0x61, 0xeb, 0x9f, 0xce, 0xbc, 0x32, 0xbe, 0x80, 0xf0, 0x17, 0x8b, + 0xec, 0xee, 0xf4, 0x7b, 0x4d, 0x3e, 0x6b, 0x8b, 0x68, 0xcd, 0xa5, 0xa4, + 0x31, 0x80, 0x1b, 0x92, 0x42, 0x81, 0xcf, 0xe5, 0x5a, 0x7b, 0x47, 0x37, + 0x77, 0xbe, 0xc6, 0xb8, 0x6a, 0x9c, 0xf1, 0x74, 0xe4, 0xfc, 0xf7, 0x3e, + 0x66, 0x9e, 0x13, 0x03, 0x85, 0x62, 0x09, 0x23, 0x3c, 0x51, 0x04, 0x26, + 0x77, 0x2a, 0xa4, 0x02, 0x06, 0x79, 0xaf, 0xa5, 0x3e, 0x24, 0xf8, 0x19, + 0x75, 0xf8, 0x65, 0xd6, 0x60, 0x6b, 0x99, 0x2f, 0xed, 0xed, 0x96, 0x28, + 0xad, 0xa2, 0x50, 0x43, 0xe1, 0xc9, 0xfa, 0xff, 0x00, 0x11, 0xfc, 0xab, + 0xc0, 0x75, 0x0d, 0x1a, 0x5b, 0x4b, 0xf9, 0x60, 0xbc, 0x8e, 0x58, 0x2e, + 0x10, 0xe1, 0xe3, 0x71, 0x82, 0xa7, 0x15, 0x5e, 0xd2, 0xda, 0x32, 0xa7, + 0x51, 0xd3, 0xf7, 0x65, 0xf7, 0x99, 0x53, 0xdb, 0xb5, 0xb9, 0x50, 0xc4, + 0x1c, 0xfa, 0x57, 0x5d, 0xe1, 0x0d, 0x02, 0x0b, 0xc4, 0x8a, 0xee, 0xe6, + 0x38, 0x65, 0x84, 0xef, 0x05, 0x1c, 0x64, 0xfa, 0x57, 0x39, 0xfd, 0x9d, + 0x1f, 0xf7, 0xda, 0xbd, 0x1f, 0xe1, 0x4e, 0xad, 0x16, 0x9b, 0xe2, 0x1b, + 0x5b, 0x4b, 0x87, 0x8e, 0x3b, 0x65, 0x49, 0x49, 0x95, 0xce, 0x39, 0x20, + 0x9a, 0xb8, 0x4a, 0x13, 0x4e, 0x2d, 0xeb, 0x6d, 0x3d, 0x7a, 0x19, 0xba, + 0xea, 0xf0, 0xd6, 0xfa, 0xab, 0xf4, 0xd0, 0xf3, 0x3d, 0x5e, 0x34, 0x87, + 0x5a, 0xbf, 0x8a, 0x25, 0x09, 0x1a, 0x5c, 0x48, 0xaa, 0xa3, 0xa0, 0x01, + 0x8e, 0x05, 0x56, 0x8e, 0x33, 0x2c, 0x8a, 0x80, 0xe0, 0x9f, 0x5a, 0xf6, + 0x0f, 0x89, 0xbf, 0x0e, 0xe7, 0x69, 0x13, 0x59, 0xd0, 0xa3, 0xbc, 0xd4, + 0x4d, 0xf4, 0xf2, 0xdc, 0x4c, 0x11, 0x03, 0x2c, 0x6a, 0xdf, 0x30, 0x23, + 0x1d, 0xb9, 0x35, 0xe4, 0x3f, 0x66, 0x9b, 0xfe, 0x79, 0x37, 0xe5, 0x42, + 0x7a, 0x6b, 0xb9, 0xd5, 0x29, 0x77, 0xd0, 0x9f, 0xfb, 0x3a, 0x4f, 0xef, + 0xad, 0x4f, 0x05, 0x92, 0xc6, 0x1b, 0xcd, 0x0a, 0xf9, 0xe9, 0x59, 0xef, + 0x14, 0x91, 0x8c, 0xba, 0x15, 0x1d, 0x39, 0x14, 0xd4, 0x6d, 0x8e, 0xac, + 0x3a, 0x83, 0x9a, 0x4e, 0x32, 0x6b, 0x73, 0x17, 0x09, 0xca, 0x3f, 0x11, + 0x7e, 0x6b, 0x02, 0xf2, 0x16, 0x8c, 0xaa, 0xaf, 0xa5, 0x47, 0xfd, 0x9d, + 0x27, 0xf7, 0xd6, 0x8f, 0xed, 0x19, 0x3f, 0xb8, 0xb5, 0x34, 0x17, 0xa2, + 0x42, 0xde, 0x6e, 0xd4, 0xc7, 0x4a, 0x8f, 0xde, 0x24, 0x65, 0xfb, 0xf8, + 0xc4, 0xa5, 0x3c, 0x26, 0x07, 0x0a, 0xc4, 0x12, 0x46, 0x78, 0xa2, 0xb5, + 0xd1, 0xd2, 0x41, 0x94, 0x60, 0xc3, 0xa7, 0x14, 0x52, 0xf6, 0xcd, 0x6e, + 0x84, 0xb1, 0x6d, 0x68, 0xd6, 0xa6, 0xf5, 0x8e, 0xb6, 0x26, 0xb4, 0x8f, + 0x4d, 0xd6, 0x1d, 0xe6, 0xd3, 0x61, 0x1b, 0xa2, 0x89, 0x54, 0x02, 0xaf, + 0x9e, 0x0e, 0x46, 0x09, 0xe0, 0xb7, 0x53, 0xde, 0xb6, 0x34, 0x4f, 0x0f, + 0xa5, 0x83, 0xb5, 0xf5, 0xdc, 0x4a, 0x5e, 0x27, 0x59, 0xad, 0xd9, 0x5c, + 0x9d, 0xb8, 0xe4, 0x71, 0xdf, 0xb7, 0x5a, 0xe5, 0x2d, 0xac, 0xde, 0x79, + 0x0a, 0xb6, 0xe8, 0xc0, 0x19, 0xc9, 0x5a, 0xd8, 0x85, 0x6e, 0x63, 0xb6, + 0x9a, 0x1f, 0xb4, 0xcb, 0x29, 0x91, 0x76, 0xaf, 0x27, 0x8e, 0x31, 0xc0, + 0xcd, 0x71, 0x4f, 0x13, 0x08, 0x69, 0xbb, 0x36, 0xc1, 0x56, 0x6e, 0x4a, + 0x9c, 0xde, 0x8c, 0xf4, 0xcb, 0x4d, 0x62, 0xd6, 0xfa, 0xc0, 0x7d, 0xa7, + 0xcc, 0x7c, 0x93, 0x9f, 0x97, 0x1d, 0x0f, 0xb5, 0x57, 0xf1, 0x37, 0x8c, + 0x34, 0xbf, 0x09, 0x69, 0xb6, 0xb2, 0xdd, 0xf9, 0xe1, 0x6e, 0x54, 0xac, + 0x1e, 0x5a, 0x6e, 0xc1, 0x00, 0x75, 0xc9, 0xf7, 0x15, 0xe7, 0x7a, 0x36, + 0x97, 0x7b, 0x73, 0xaa, 0xa5, 0x93, 0xde, 0xdc, 0x40, 0x4a, 0x93, 0x86, + 0x07, 0x8e, 0x33, 0xd3, 0x22, 0xa5, 0xf1, 0x56, 0x98, 0xb6, 0x70, 0xc1, + 0x14, 0xda, 0x80, 0xbf, 0x2c, 0xcc, 0x81, 0x5c, 0x67, 0xca, 0x3c, 0x76, + 0x24, 0xff, 0x00, 0x4e, 0x95, 0xd3, 0x19, 0x4b, 0x93, 0x99, 0xa3, 0xe8, + 0x9e, 0x58, 0xe3, 0x17, 0x2a, 0x92, 0xe5, 0xf2, 0xdf, 0xf2, 0x38, 0xfd, + 0x43, 0xc7, 0x1e, 0x23, 0xf1, 0x2d, 0xf4, 0x76, 0x30, 0x6a, 0x3b, 0x92, + 0x64, 0x08, 0x55, 0xe0, 0x8d, 0x72, 0x41, 0x27, 0xa8, 0x5a, 0xed, 0xbc, + 0x3b, 0x05, 0x9f, 0xc3, 0xdb, 0x08, 0x7c, 0x51, 0xae, 0x46, 0x7c, 0xcb, + 0xc4, 0x36, 0xad, 0x25, 0xb9, 0x2e, 0xcc, 0xc4, 0xee, 0x1f, 0x2e, 0x40, + 0x03, 0x11, 0xf6, 0xac, 0x6d, 0x32, 0x48, 0xbc, 0x11, 0xa0, 0xdc, 0xab, + 0xe9, 0x49, 0xaa, 0x30, 0x90, 0xcc, 0x2e, 0xca, 0x04, 0x29, 0x90, 0xab, + 0xb7, 0x38, 0x6c, 0x74, 0xcf, 0x5f, 0xe2, 0xae, 0x7b, 0x50, 0xd4, 0xef, + 0xbc, 0x69, 0x23, 0x42, 0x2d, 0xee, 0x2d, 0xad, 0xb7, 0x79, 0xc8, 0xbb, + 0x9a, 0x44, 0x18, 0x1b, 0x70, 0x06, 0x00, 0xee, 0x79, 0xa2, 0x29, 0x54, + 0xb4, 0xa3, 0x2b, 0xa3, 0xcd, 0xab, 0x52, 0x14, 0xa2, 0xef, 0xbf, 0x5f, + 0x2f, 0xeb, 0xc8, 0xdd, 0xb9, 0xd7, 0x7f, 0xe1, 0x23, 0xd4, 0xed, 0xec, + 0x3c, 0x36, 0xef, 0x15, 0x95, 0xdc, 0x82, 0x0b, 0xd8, 0xe7, 0x40, 0x3c, + 0xc0, 0xe7, 0x18, 0xc9, 0xc9, 0x1c, 0x13, 0xd0, 0x8a, 0xf5, 0x3f, 0x08, + 0xf8, 0x3e, 0xcf, 0xc3, 0xb6, 0x31, 0x01, 0x6c, 0xa9, 0x74, 0x85, 0xbe, + 0x65, 0x95, 0x98, 0x60, 0x9f, 0x73, 0x59, 0x9f, 0x0e, 0xfe, 0x1d, 0xc5, + 0x2d, 0xcc, 0x57, 0xe2, 0xf1, 0x13, 0xec, 0x73, 0xc3, 0x21, 0x8f, 0xec, + 0xc3, 0xe7, 0xc1, 0xce, 0x33, 0xbb, 0x8e, 0x9e, 0xf5, 0xec, 0x77, 0x56, + 0x11, 0x5c, 0x40, 0x63, 0x55, 0x48, 0xc9, 0x23, 0xe6, 0x08, 0x2b, 0xa6, + 0x71, 0x9d, 0x36, 0xe3, 0x3d, 0xce, 0x0c, 0x3d, 0xaa, 0xfb, 0xf6, 0xb4, + 0x7a, 0x76, 0xf5, 0xb7, 0x7b, 0x9c, 0x14, 0x5e, 0x1c, 0xd2, 0x61, 0xba, + 0xb9, 0xba, 0x8e, 0xd7, 0x6c, 0xd7, 0x2c, 0x5a, 0x56, 0xf3, 0x1b, 0xe6, + 0x24, 0x92, 0x78, 0xce, 0x07, 0x24, 0xf4, 0xa0, 0xe8, 0x56, 0x70, 0x5a, + 0xba, 0x5a, 0x40, 0x11, 0xcf, 0x23, 0x2e, 0xc7, 0x9f, 0xc4, 0xd6, 0xd4, + 0xf0, 0x3c, 0x12, 0xba, 0x30, 0x6c, 0x06, 0x20, 0x31, 0x18, 0xce, 0x2b, + 0x95, 0xf1, 0x46, 0xb4, 0xd6, 0x61, 0xac, 0x12, 0x23, 0xba, 0x58, 0x83, + 0x09, 0x56, 0x4c, 0x15, 0xe4, 0xf6, 0xc7, 0xb7, 0xaf, 0x7a, 0xe3, 0xc4, + 0x2a, 0x4a, 0x0d, 0xd4, 0x47, 0xa7, 0x41, 0xd4, 0xe7, 0x4a, 0x0c, 0xa0, + 0xf2, 0x2c, 0x77, 0xd2, 0xd9, 0xb6, 0x7c, 0xd8, 0xfe, 0xf7, 0xa7, 0x6f, + 0xf1, 0xae, 0x77, 0x56, 0xf0, 0xdd, 0xbf, 0x94, 0xf2, 0xda, 0x40, 0xaa, + 0x42, 0x33, 0x31, 0x32, 0x37, 0x5e, 0xbd, 0xcd, 0x49, 0x6d, 0x7a, 0xd0, + 0x5c, 0x34, 0xce, 0x0c, 0xac, 0xcb, 0x82, 0x59, 0xb9, 0xed, 0xdf, 0xf0, + 0xad, 0xd1, 0x34, 0x52, 0x28, 0x05, 0xd0, 0xee, 0x1f, 0x77, 0x20, 0xfe, + 0x15, 0xe0, 0xa9, 0xb8, 0x4a, 0xf0, 0xd0, 0xf5, 0xeb, 0xe1, 0xe1, 0x8a, + 0xa5, 0xc9, 0x53, 0x7e, 0xe7, 0x9b, 0x7f, 0x66, 0x5c, 0x7f, 0xb1, 0xf9, + 0xd5, 0xed, 0x30, 0x6a, 0x7a, 0x6d, 0xc8, 0x7b, 0x59, 0x52, 0x32, 0xcc, + 0xbb, 0xb8, 0x07, 0x38, 0x3e, 0xe2, 0xba, 0x5d, 0x53, 0x4e, 0xfb, 0xd7, + 0x11, 0x9f, 0x41, 0xe5, 0xaa, 0x56, 0x43, 0xc5, 0x22, 0x0f, 0x99, 0x59, + 0x33, 0xd0, 0x91, 0x8a, 0xe9, 0x58, 0xda, 0x87, 0xc9, 0x57, 0xc1, 0xcf, + 0x0d, 0x52, 0xcf, 0xa7, 0x53, 0xdb, 0x3c, 0x39, 0xe2, 0x53, 0x75, 0xb6, + 0xd6, 0xfa, 0x57, 0x92, 0xea, 0x49, 0x0e, 0xc2, 0x10, 0x01, 0xb7, 0x03, + 0xd3, 0x1e, 0xf5, 0xc6, 0xfc, 0x60, 0xf0, 0xee, 0x95, 0x67, 0xa5, 0x26, + 0xb5, 0x05, 0xae, 0xcd, 0x42, 0xe6, 0xf5, 0x12, 0x59, 0xbc, 0xc6, 0x3b, + 0x87, 0x96, 0xfc, 0x6d, 0x27, 0x03, 0xee, 0x8e, 0x83, 0xb5, 0x72, 0xde, + 0x12, 0xd5, 0xe4, 0xb0, 0xd7, 0x6d, 0x34, 0xc9, 0x19, 0xa6, 0x92, 0x69, + 0x0b, 0x89, 0x9a, 0x4c, 0x15, 0x1b, 0x7a, 0x63, 0x9f, 0xee, 0xfa, 0xf7, + 0xaf, 0x5f, 0x73, 0x6b, 0xab, 0x59, 0xc7, 0x63, 0x7c, 0x21, 0x09, 0x19, + 0xde, 0x1e, 0x7c, 0x30, 0x27, 0x91, 0xd0, 0xf7, 0xe4, 0xd7, 0xb5, 0x19, + 0x2a, 0x91, 0xba, 0x37, 0x76, 0xaf, 0x4e, 0xc7, 0xcc, 0xf5, 0xab, 0xe1, + 0xef, 0xf9, 0x0c, 0x47, 0xfe, 0xeb, 0x7f, 0x2a, 0x8f, 0x55, 0xd3, 0xcd, + 0xad, 0xe3, 0x88, 0xc9, 0x91, 0x4b, 0xb6, 0x36, 0xae, 0x00, 0xe6, 0xa8, + 0x86, 0x92, 0x17, 0xca, 0x96, 0x46, 0x1d, 0xc7, 0x06, 0xa7, 0x0d, 0x5e, + 0x31, 0xa9, 0x1a, 0x8b, 0x5b, 0x3b, 0x9e, 0x55, 0x7a, 0x33, 0x83, 0x74, + 0xe7, 0xa3, 0x3e, 0xa6, 0xd3, 0x63, 0x69, 0xbc, 0x2b, 0x69, 0x12, 0xe3, + 0x73, 0xd9, 0x22, 0x8c, 0xfa, 0x94, 0x15, 0xf3, 0x77, 0x88, 0xfc, 0x37, + 0x7f, 0xe1, 0x6d, 0x42, 0x3b, 0x1d, 0x47, 0xca, 0xf3, 0xa4, 0x88, 0x4c, + 0x3c, 0xa6, 0xdc, 0x36, 0x92, 0x47, 0xa7, 0xaa, 0x9a, 0xf7, 0xcf, 0x03, + 0x34, 0xc7, 0xc3, 0xd6, 0x0d, 0x29, 0x90, 0x83, 0x65, 0x09, 0x05, 0xc9, + 0xfe, 0xe0, 0xae, 0x6f, 0xe2, 0x9d, 0x9d, 0xad, 0xcd, 0x9d, 0xc5, 0xef, + 0x99, 0x09, 0x96, 0x3b, 0x55, 0x55, 0xe0, 0x16, 0xfb, 0xe7, 0xa1, 0xfc, + 0x6a, 0xab, 0xca, 0xfe, 0xf2, 0x5b, 0xb3, 0xd3, 0x9e, 0x1d, 0x54, 0xa6, + 0xae, 0xed, 0x65, 0xfa, 0x1e, 0x19, 0x24, 0x49, 0x2a, 0xed, 0x71, 0x91, + 0x9c, 0xf5, 0xaa, 0x93, 0xd8, 0xe4, 0xaf, 0x92, 0xa0, 0x0e, 0xf9, 0x35, + 0xb5, 0x0d, 0x94, 0x72, 0xc4, 0xae, 0x6e, 0x55, 0x49, 0xec, 0x47, 0x4f, + 0xd6, 0x9b, 0x73, 0x64, 0xd0, 0x15, 0x0a, 0x4c, 0x99, 0x1d, 0x42, 0xf4, + 0xac, 0x23, 0x89, 0x8a, 0x97, 0x2a, 0x67, 0x9f, 0x09, 0xce, 0x1a, 0xa3, + 0x07, 0xec, 0x13, 0x7f, 0xb3, 0xf9, 0xd0, 0x6c, 0x26, 0x00, 0x9f, 0x97, + 0xf3, 0xad, 0x63, 0x1b, 0xa8, 0xcb, 0x23, 0x01, 0xea, 0x45, 0x36, 0xb7, + 0x55, 0xe4, 0xcd, 0x3e, 0xb5, 0x50, 0xc6, 0x8e, 0xe2, 0x58, 0x97, 0x6a, + 0x36, 0x01, 0x39, 0xe8, 0x28, 0xad, 0x6f, 0x2a, 0x3f, 0xf9, 0xe6, 0xbf, + 0x95, 0x15, 0x5e, 0xd6, 0x2f, 0xa1, 0x4f, 0x11, 0x4d, 0xea, 0xe2, 0x75, + 0x35, 0xa5, 0x16, 0x97, 0xa8, 0xda, 0xb2, 0x5d, 0xfd, 0x9c, 0x01, 0x11, + 0x12, 0x64, 0xba, 0x9e, 0x9c, 0xfa, 0xd6, 0x27, 0x87, 0x6f, 0xa3, 0x4d, + 0x42, 0x43, 0x7a, 0x8d, 0x71, 0x17, 0x94, 0x70, 0x87, 0x9c, 0x1c, 0x8e, + 0x7f, 0x9d, 0x7a, 0x60, 0x09, 0x24, 0x21, 0x4a, 0x8d, 0x8c, 0xb8, 0xda, + 0x7d, 0x08, 0xe9, 0x5f, 0x29, 0x8b, 0x9c, 0xf0, 0xd5, 0x14, 0x51, 0xa6, + 0x1d, 0x29, 0x35, 0x2e, 0xc7, 0x0d, 0xfd, 0xab, 0x73, 0xff, 0x00, 0x09, + 0x17, 0xdb, 0x7e, 0x4f, 0x37, 0x66, 0x3a, 0x71, 0xd3, 0x15, 0x16, 0x8d, + 0xa7, 0xc1, 0xe2, 0x2d, 0x63, 0x51, 0x37, 0xdb, 0xbf, 0x77, 0x21, 0x71, + 0xe5, 0x9d, 0xbc, 0x96, 0x39, 0xad, 0x4d, 0x5b, 0xc2, 0x77, 0x77, 0x7a, + 0x9b, 0xdc, 0x59, 0x5c, 0xc5, 0x6f, 0x11, 0x50, 0x02, 0x72, 0x31, 0xc7, + 0x3d, 0x2b, 0x7b, 0x4b, 0xd2, 0xe0, 0xd3, 0x6d, 0xd0, 0x2c, 0x51, 0x8b, + 0x83, 0x1a, 0xac, 0xd2, 0x28, 0xff, 0x00, 0x58, 0xc0, 0x72, 0x4f, 0xe3, + 0x93, 0x5b, 0x62, 0x33, 0x1b, 0xd1, 0xf7, 0x65, 0xab, 0xfc, 0x1f, 0x53, + 0xe8, 0x31, 0x99, 0x8a, 0xad, 0x4d, 0x46, 0x17, 0x5a, 0x59, 0x99, 0x9a, + 0xfe, 0x91, 0x02, 0x78, 0x43, 0x51, 0xb2, 0x8c, 0x39, 0x49, 0x40, 0x27, + 0x2d, 0xce, 0x72, 0x3f, 0xc2, 0xb9, 0x8f, 0x0c, 0x69, 0x97, 0xab, 0x1a, + 0x59, 0xe9, 0xd0, 0xf9, 0x92, 0x47, 0x11, 0x25, 0x59, 0x87, 0x0b, 0x91, + 0xdc, 0x91, 0xdc, 0x8a, 0xee, 0x75, 0xdf, 0xf9, 0x02, 0xdd, 0x7f, 0xba, + 0x3f, 0x98, 0xae, 0xa3, 0xc0, 0x1a, 0x05, 0xa2, 0x68, 0x96, 0x7a, 0x93, + 0x5b, 0xc2, 0x64, 0x9a, 0x12, 0x0b, 0x6d, 0xf9, 0x8f, 0xcd, 0xdf, 0xf2, + 0xaf, 0x4b, 0x87, 0xea, 0x38, 0x51, 0x95, 0x4b, 0xeb, 0x7f, 0xd1, 0x1f, + 0x37, 0x5a, 0x8f, 0xb7, 0xaa, 0xa9, 0x5f, 0xdd, 0x4a, 0xe6, 0xdf, 0x85, + 0xf4, 0x73, 0xa4, 0x5a, 0xca, 0x19, 0x19, 0x1a, 0x5d, 0xac, 0x72, 0xc0, + 0xf3, 0x8f, 0x6a, 0xde, 0xa0, 0x0c, 0x0c, 0x0e, 0x94, 0x57, 0xad, 0x39, + 0xca, 0x72, 0xe6, 0x93, 0xbb, 0x3d, 0x28, 0x42, 0x30, 0x8a, 0x8c, 0x55, + 0x91, 0x5e, 0xee, 0xd2, 0x1b, 0xa4, 0x5f, 0x3b, 0x76, 0x13, 0x27, 0x83, + 0x5e, 0x79, 0xe2, 0x5f, 0x0b, 0x5d, 0x6b, 0x3a, 0xd4, 0x13, 0xe9, 0x76, + 0xed, 0x3d, 0x92, 0xc2, 0x12, 0x47, 0x32, 0x2a, 0x90, 0xd9, 0x62, 0x46, + 0x18, 0x83, 0xd0, 0x8e, 0xdd, 0xeb, 0xa8, 0xf1, 0x5d, 0xe5, 0xc5, 0xa8, + 0xb1, 0x16, 0xf3, 0x3c, 0x62, 0x49, 0x08, 0x6d, 0xa7, 0x19, 0x1c, 0x56, + 0xbd, 0xd4, 0xd0, 0x69, 0x3a, 0x7c, 0xd7, 0x02, 0x2f, 0xdd, 0xc7, 0xf3, + 0x15, 0x4e, 0xfd, 0x05, 0x72, 0xd4, 0x51, 0xaf, 0xcd, 0x49, 0xf4, 0xb1, + 0xd5, 0x07, 0x2a, 0x2a, 0x35, 0x57, 0x5b, 0x9c, 0x9d, 0x87, 0xc3, 0x7d, + 0x2d, 0xac, 0x62, 0x6b, 0xd5, 0xb9, 0x4b, 0x92, 0x3e, 0x75, 0x59, 0x46, + 0x01, 0xcf, 0xb0, 0xa9, 0x66, 0xf8, 0x73, 0xa4, 0x45, 0x04, 0x92, 0x5a, + 0x8b, 0x96, 0xb8, 0x45, 0x2d, 0x10, 0x69, 0x46, 0x0b, 0x01, 0xc6, 0x78, + 0xf5, 0xa8, 0x2e, 0x3c, 0x5a, 0x64, 0x9d, 0xde, 0x2f, 0x3d, 0x10, 0x9e, + 0x17, 0x23, 0x8a, 0xc8, 0x3a, 0xee, 0xa8, 0x58, 0x91, 0x7f, 0x38, 0x19, + 0xfe, 0xfd, 0x1f, 0x55, 0xa5, 0x6b, 0x58, 0x5f, 0x59, 0xab, 0xcd, 0x7b, + 0x89, 0x79, 0xa0, 0xea, 0x76, 0x16, 0xe6, 0xe2, 0xe6, 0xdb, 0xcb, 0x88, + 0x10, 0x0b, 0x6f, 0x53, 0xd7, 0xe8, 0x6b, 0x16, 0xee, 0xc9, 0x2f, 0x55, + 0x55, 0xf7, 0x12, 0xb9, 0xdb, 0x83, 0x8e, 0x6b, 0xbe, 0xd0, 0x35, 0x78, + 0xb5, 0x58, 0x63, 0xd2, 0xef, 0xe3, 0x7b, 0x89, 0x18, 0xb3, 0x17, 0x93, + 0x04, 0x1c, 0x72, 0x2b, 0x17, 0xc4, 0x5a, 0x23, 0xe9, 0x57, 0x1e, 0x78, + 0x78, 0xfc, 0xa9, 0xa5, 0x63, 0x1a, 0x26, 0x7e, 0x41, 0x9c, 0x81, 0xfa, + 0xd7, 0x99, 0x89, 0xc1, 0xfb, 0x25, 0xcd, 0x1d, 0x51, 0xe9, 0x51, 0xc4, + 0xc7, 0x12, 0x9d, 0x2a, 0xab, 0x73, 0xcd, 0xa5, 0xd0, 0x75, 0x8d, 0x0f, + 0xc4, 0x76, 0x9a, 0xf5, 0xd5, 0xa0, 0x8a, 0xc2, 0xcd, 0x73, 0x2c, 0xc6, + 0x45, 0x6d, 0xbf, 0x78, 0x7d, 0xd0, 0x72, 0x7a, 0x8e, 0x82, 0xb6, 0xd7, + 0xc6, 0x23, 0x52, 0x99, 0x84, 0x93, 0x46, 0x6c, 0x7e, 0xf4, 0x4e, 0xb1, + 0xb0, 0x24, 0xf4, 0xfa, 0xfa, 0xf6, 0xab, 0xbe, 0x21, 0xba, 0x7b, 0xbf, + 0x08, 0xea, 0x36, 0x4e, 0xcc, 0xd2, 0xca, 0xa3, 0x6b, 0xb1, 0xe0, 0x0c, + 0x8f, 0xf0, 0xae, 0x2e, 0xdf, 0x49, 0x96, 0xc7, 0x44, 0xb6, 0x95, 0xe4, + 0x46, 0x04, 0xed, 0xc2, 0xe7, 0xdf, 0xfc, 0x2b, 0xd9, 0xc1, 0x3a, 0x75, + 0x29, 0x2e, 0x5d, 0xb6, 0x3e, 0x6f, 0x30, 0x8d, 0x4c, 0x23, 0x50, 0x86, + 0xeb, 0x5f, 0x91, 0xa1, 0x79, 0x6f, 0x2c, 0x4e, 0x19, 0xd3, 0x01, 0xb2, + 0x47, 0x23, 0x91, 0x59, 0xb2, 0x58, 0x43, 0x71, 0x36, 0xf7, 0xdd, 0x93, + 0xe8, 0x6b, 0xa1, 0xd6, 0x3f, 0xd5, 0xc1, 0xff, 0x00, 0x5c, 0xcd, 0x63, + 0x6f, 0x09, 0xf3, 0x11, 0x9a, 0xf1, 0x2a, 0x42, 0x54, 0xeb, 0xb8, 0x53, + 0xdc, 0xdf, 0x12, 0xa9, 0xfb, 0x58, 0x55, 0xa9, 0xb4, 0xb5, 0x7d, 0xb4, + 0xd0, 0xf7, 0x6d, 0x07, 0x50, 0xb2, 0xb7, 0xf0, 0xa6, 0x99, 0x09, 0x9b, + 0x06, 0x3b, 0x28, 0x93, 0x05, 0x4f, 0x64, 0x03, 0xd2, 0xbc, 0xbf, 0xc6, + 0xba, 0x84, 0x53, 0x33, 0x44, 0xae, 0x0d, 0xbb, 0x40, 0x37, 0x9d, 0xa7, + 0x39, 0xdc, 0x7f, 0xfa, 0xd5, 0xd3, 0xdb, 0x5e, 0x25, 0xb6, 0x83, 0xa7, + 0x96, 0x56, 0x3e, 0x65, 0xba, 0x63, 0x1d, 0xbe, 0x51, 0x5e, 0x6f, 0xe2, + 0x69, 0x18, 0xeb, 0xf6, 0xf0, 0x16, 0x3e, 0x53, 0xc2, 0x37, 0x2f, 0x63, + 0xcb, 0x57, 0xa7, 0x88, 0x83, 0x74, 0xb5, 0xe9, 0xfa, 0x1a, 0xba, 0x8a, + 0x11, 0x93, 0x8a, 0xba, 0x69, 0xaf, 0xbc, 0xc4, 0xd9, 0xa6, 0xff, 0x00, + 0xcf, 0x57, 0xfc, 0x8f, 0xf8, 0x56, 0x8c, 0x13, 0xc5, 0x32, 0x9f, 0x29, + 0xb7, 0x05, 0xe3, 0xa1, 0x15, 0x46, 0x6d, 0x2d, 0x9e, 0x56, 0x68, 0xd9, + 0x15, 0x4f, 0x41, 0xe9, 0x4d, 0xfb, 0x15, 0xcd, 0xb4, 0x4e, 0xe9, 0x38, + 0x50, 0x06, 0x48, 0x19, 0xe7, 0x15, 0xc1, 0x35, 0x4e, 0xa2, 0x5e, 0xfe, + 0xbe, 0x7f, 0xf0, 0xc7, 0x88, 0xae, 0xba, 0x1a, 0x33, 0x42, 0xb3, 0xc6, + 0x63, 0x7c, 0xe0, 0xfa, 0x56, 0x7d, 0xce, 0x9b, 0xb4, 0x2f, 0xd9, 0xd5, + 0x98, 0xf7, 0xcb, 0x0a, 0xa7, 0xf6, 0xbb, 0x8f, 0xf9, 0xec, 0xff, 0x00, + 0x9d, 0x5e, 0x8f, 0x54, 0x45, 0x8d, 0x55, 0x91, 0xcb, 0x00, 0x01, 0x3e, + 0xa6, 0x9a, 0xa5, 0x5a, 0x8f, 0xc3, 0xa8, 0xb9, 0xa3, 0x2d, 0xcc, 0xf9, + 0x61, 0x92, 0x06, 0x0b, 0x22, 0xed, 0x24, 0x67, 0x19, 0xcd, 0x15, 0x6e, + 0xe6, 0xf2, 0x0b, 0x88, 0xdb, 0xf7, 0x27, 0xcc, 0xc6, 0x03, 0x1e, 0xd4, + 0x57, 0x65, 0x39, 0x4a, 0x51, 0xf7, 0x95, 0x99, 0x0d, 0x2e, 0x86, 0xdc, + 0x36, 0xf2, 0xdc, 0x39, 0x48, 0x63, 0x69, 0x18, 0x0c, 0x90, 0xa3, 0x3c, + 0x55, 0xb8, 0x2c, 0x35, 0x08, 0x2e, 0x23, 0x99, 0x6c, 0xe5, 0x26, 0x36, + 0x0c, 0x01, 0x5e, 0xb8, 0x39, 0xaa, 0xf6, 0xb7, 0x73, 0xd9, 0x4a, 0x64, + 0xb7, 0x7d, 0x8e, 0x46, 0xd2, 0x70, 0x0f, 0x1f, 0x8f, 0xd2, 0xad, 0x7f, + 0x6f, 0x6a, 0x5f, 0xf3, 0xf3, 0xff, 0x00, 0x90, 0xd7, 0xfc, 0x2b, 0xe7, + 0xe7, 0xed, 0x2f, 0xee, 0xda, 0xc7, 0x52, 0xe5, 0xea, 0x75, 0x96, 0x33, + 0x4f, 0x3d, 0xaa, 0xc9, 0x71, 0x17, 0x95, 0x21, 0x27, 0x2b, 0x56, 0x6b, + 0x9f, 0xb1, 0xf1, 0x14, 0x4b, 0x6a, 0xa2, 0xf1, 0xa4, 0x79, 0xb2, 0x72, + 0x55, 0x06, 0x31, 0xdb, 0xa5, 0x4e, 0xde, 0x24, 0xb2, 0xd8, 0x76, 0xf9, + 0xbb, 0xb1, 0xc7, 0xcb, 0xde, 0xbc, 0xe9, 0x50, 0xa9, 0xcc, 0xf4, 0x3a, + 0x55, 0x48, 0xdb, 0x73, 0x7a, 0xd9, 0x82, 0xdc, 0x23, 0x31, 0xc0, 0x07, + 0xa9, 0xaf, 0x40, 0xd2, 0xd8, 0x36, 0x99, 0x03, 0x29, 0xc8, 0x2b, 0xd4, + 0x7d, 0x6b, 0xc3, 0x2d, 0x75, 0xfb, 0xc5, 0xba, 0x8c, 0xdc, 0xce, 0x5a, + 0x1c, 0xfc, 0xc0, 0x22, 0xe4, 0x8f, 0xca, 0xbb, 0xaf, 0x01, 0xf8, 0x8a, + 0xfb, 0x53, 0xf1, 0x0d, 0xc5, 0x8b, 0x5c, 0x16, 0xd3, 0xe3, 0xb6, 0x67, + 0x8a, 0x23, 0x1a, 0x82, 0xa7, 0x72, 0x8e, 0xa0, 0x67, 0xb9, 0xef, 0xde, + 0xbd, 0xcc, 0xa6, 0x72, 0xa1, 0x27, 0x46, 0x4b, 0x47, 0xad, 0xfc, 0xcb, + 0xa7, 0x5a, 0x2f, 0x43, 0xb7, 0xbd, 0xbe, 0x36, 0x97, 0x10, 0x26, 0x17, + 0x63, 0x9f, 0x99, 0x8f, 0x61, 0x9a, 0xb9, 0x1c, 0x89, 0x2a, 0x6f, 0x8d, + 0x83, 0x2f, 0xa8, 0xae, 0x23, 0xc4, 0x7a, 0x8d, 0xd2, 0xe9, 0x1a, 0x85, + 0xc0, 0x97, 0xf7, 0xb6, 0xf6, 0xf2, 0xbc, 0x4d, 0xb4, 0x7c, 0xa4, 0x29, + 0x23, 0xb7, 0x3d, 0x3b, 0xd5, 0x6f, 0x87, 0xde, 0x22, 0xbd, 0xbc, 0xf0, + 0xfd, 0xbd, 0xc6, 0xa3, 0x70, 0x65, 0xcb, 0xc8, 0x18, 0x88, 0xd4, 0x77, + 0x38, 0xe8, 0x05, 0x7d, 0x15, 0x8d, 0xef, 0xad, 0x8d, 0x7f, 0x0d, 0x32, + 0xb7, 0x89, 0x35, 0xc0, 0x08, 0x24, 0x4c, 0xd9, 0xff, 0x00, 0xbe, 0xda, + 0xa8, 0xf8, 0xeb, 0x53, 0x4b, 0x19, 0xf6, 0xcc, 0xc8, 0x90, 0x7d, 0x9d, + 0x59, 0xe4, 0x63, 0x8d, 0xbf, 0x31, 0xaa, 0xfe, 0x05, 0xd6, 0x6d, 0x75, + 0x2f, 0x18, 0xf8, 0x9e, 0x1b, 0x7f, 0x33, 0x7c, 0x33, 0xb6, 0xed, 0xcb, + 0x8f, 0xf9, 0x68, 0xc3, 0xfa, 0x55, 0x7f, 0x8b, 0x9a, 0x55, 0xcc, 0xfe, + 0x1d, 0xbf, 0xd4, 0x13, 0x67, 0x91, 0x0d, 0xaa, 0xab, 0x64, 0xf3, 0x9d, + 0xfe, 0x9f, 0x88, 0xa6, 0xe8, 0x42, 0x8b, 0xe4, 0x83, 0xba, 0xff, 0x00, + 0x3d, 0x44, 0xab, 0xce, 0xb2, 0xe7, 0x9a, 0xb3, 0xff, 0x00, 0x2d, 0x0f, + 0x33, 0xd5, 0x53, 0x52, 0xf1, 0x54, 0xaf, 0x63, 0x6f, 0x64, 0xf2, 0x69, + 0xe8, 0xde, 0x74, 0x37, 0x30, 0xa9, 0x3e, 0x66, 0x06, 0x3e, 0x98, 0xf9, + 0x8f, 0xe5, 0x4c, 0xb4, 0xb7, 0xbc, 0xf0, 0x6b, 0x08, 0x4d, 0xb3, 0x98, + 0xee, 0x48, 0x67, 0x69, 0xc6, 0x36, 0x81, 0xc1, 0xc6, 0x3e, 0xb5, 0xde, + 0xf8, 0x02, 0xda, 0x24, 0xf0, 0x76, 0x99, 0x32, 0xae, 0x24, 0x68, 0x88, + 0x27, 0x27, 0x9f, 0x98, 0xd6, 0x8f, 0x88, 0x34, 0x2b, 0x7d, 0x66, 0xc2, + 0x60, 0xd0, 0x87, 0xba, 0x10, 0xba, 0xc0, 0xc5, 0xca, 0x85, 0x62, 0x38, + 0xce, 0x3d, 0xf1, 0x53, 0x35, 0x7d, 0x2f, 0x61, 0x2e, 0x65, 0x79, 0x2d, + 0x6f, 0x6d, 0xfa, 0x77, 0x39, 0xad, 0x3f, 0x52, 0x86, 0xfa, 0x15, 0x65, + 0x91, 0x0b, 0x92, 0x78, 0x53, 0xe9, 0x5e, 0x93, 0xe1, 0x8d, 0x56, 0x4d, + 0x4a, 0xd6, 0x4b, 0x29, 0x63, 0x44, 0x4b, 0x78, 0x55, 0x03, 0x2e, 0x72, + 0x46, 0x31, 0xcf, 0xe5, 0x5e, 0x37, 0xa4, 0x5a, 0x49, 0xa2, 0xeb, 0x29, + 0xa4, 0xdd, 0xed, 0xfb, 0x4a, 0xa9, 0x63, 0xb0, 0xe5, 0x70, 0x46, 0x7a, + 0xd7, 0x5f, 0x6b, 0x36, 0xb7, 0x0b, 0x93, 0xa3, 0x5c, 0xa4, 0x39, 0xc7, + 0x9f, 0xb9, 0x54, 0xee, 0x5f, 0x6c, 0x83, 0xef, 0x59, 0x50, 0x72, 0x92, + 0xb4, 0xfa, 0x68, 0x6d, 0x5d, 0xc6, 0x1e, 0xf4, 0x75, 0xf4, 0x3b, 0x53, + 0xa2, 0xe9, 0x67, 0xc3, 0xd7, 0x7a, 0x3f, 0xf6, 0x81, 0xf2, 0xae, 0x5b, + 0x73, 0x3e, 0x46, 0xe1, 0xd3, 0xa7, 0xfd, 0xf3, 0x5c, 0x45, 0xc6, 0x9f, + 0x0e, 0x95, 0x70, 0xf6, 0x36, 0xf2, 0xb4, 0xb0, 0xc2, 0x70, 0xae, 0xd8, + 0xc9, 0xef, 0xdb, 0xeb, 0x5b, 0xb2, 0x5e, 0x89, 0x74, 0xf9, 0x67, 0xb7, + 0x24, 0x15, 0xe0, 0x12, 0x3b, 0xf1, 0xfe, 0x35, 0xcf, 0xc9, 0x23, 0xcb, + 0x21, 0x91, 0xce, 0x59, 0xba, 0x9a, 0xd2, 0x29, 0x46, 0x3c, 0xab, 0x62, + 0x24, 0xb9, 0xa7, 0xed, 0x25, 0xb9, 0xc5, 0xf8, 0x8a, 0xe6, 0x2b, 0xfd, + 0x5b, 0x4e, 0x8e, 0xcd, 0xd6, 0x77, 0xdf, 0xb3, 0x6a, 0x1c, 0x9d, 0xc5, + 0x86, 0x05, 0x5b, 0x83, 0x47, 0xbb, 0x7b, 0xa1, 0x05, 0xdd, 0xbc, 0xb0, + 0x2e, 0x32, 0x49, 0x5c, 0x62, 0xa2, 0xf0, 0x66, 0x9f, 0x6b, 0x75, 0xaa, + 0x49, 0x3c, 0xd1, 0x6e, 0x96, 0x1b, 0xa4, 0x68, 0xdb, 0x71, 0x18, 0x3b, + 0xb3, 0xd8, 0xfb, 0x57, 0x75, 0xab, 0x7f, 0xc8, 0x41, 0xfe, 0x83, 0xf9, + 0x54, 0x46, 0x11, 0x6f, 0x9d, 0xad, 0x7a, 0x1c, 0xd5, 0x70, 0xaa, 0x73, + 0xbb, 0xdb, 0xf3, 0xf5, 0x39, 0xbd, 0x52, 0xe9, 0xb4, 0xbb, 0x08, 0x62, + 0x8d, 0x43, 0x82, 0x85, 0x32, 0xde, 0x80, 0x57, 0x9d, 0x5a, 0xcc, 0x57, + 0x58, 0xb7, 0x8b, 0x03, 0x0d, 0xce, 0x7f, 0x3a, 0xea, 0xb5, 0x6b, 0xb9, + 0xe7, 0xb8, 0x9a, 0x29, 0x1f, 0x72, 0x46, 0xee, 0x10, 0x60, 0x0c, 0x73, + 0x58, 0xba, 0x6d, 0x9c, 0x12, 0x62, 0xe5, 0xe3, 0xcc, 0xc8, 0xd8, 0x56, + 0xc9, 0xe0, 0x63, 0xd3, 0xf1, 0xa5, 0x8c, 0x71, 0xa7, 0x4e, 0xf2, 0xeb, + 0x73, 0x86, 0x38, 0x8e, 0x6a, 0xd2, 0xb6, 0xcb, 0x44, 0x6b, 0x56, 0x64, + 0xba, 0x85, 0xc4, 0x4d, 0x87, 0x85, 0x57, 0x3d, 0x33, 0x9e, 0x6b, 0x4e, + 0xa2, 0x9a, 0xda, 0x29, 0xc8, 0x32, 0x26, 0xec, 0x74, 0xe4, 0x8a, 0xf0, + 0xa9, 0x4a, 0x11, 0x7e, 0xfa, 0xba, 0x13, 0x4f, 0xa1, 0x87, 0x3c, 0xc6, + 0xe2, 0x53, 0x23, 0x00, 0x09, 0xec, 0x2a, 0x13, 0xd0, 0xe2, 0xac, 0xde, + 0xc4, 0x90, 0xdd, 0x32, 0x46, 0x30, 0xa0, 0x0e, 0x33, 0x55, 0xeb, 0xd7, + 0xa6, 0xd3, 0x8a, 0x71, 0xd8, 0xc5, 0xef, 0xa9, 0x45, 0xae, 0xae, 0x55, + 0x4b, 0x34, 0x00, 0x01, 0xdc, 0x83, 0x45, 0x5c, 0x74, 0x59, 0x10, 0xab, + 0x0c, 0x83, 0xd6, 0x8a, 0xe8, 0x52, 0x87, 0x54, 0x6f, 0x1a, 0x94, 0xad, + 0xef, 0x44, 0xeb, 0x56, 0xde, 0x77, 0x50, 0xcb, 0x0c, 0x8c, 0xa7, 0xa1, + 0x0a, 0x48, 0xa8, 0xba, 0x1a, 0xd8, 0x6d, 0x6e, 0x5b, 0x36, 0x36, 0xf6, + 0x4c, 0x8d, 0x6c, 0x9c, 0x21, 0x65, 0x39, 0x22, 0xb2, 0x18, 0x96, 0x62, + 0xc7, 0xa9, 0x39, 0xaf, 0x98, 0x83, 0x93, 0xdd, 0x14, 0xd2, 0x5b, 0x09, + 0x45, 0x14, 0x55, 0x88, 0x2b, 0x7b, 0xc2, 0x57, 0xcd, 0x61, 0xaa, 0xcb, + 0x2a, 0x02, 0x49, 0x80, 0xaf, 0x0d, 0xb7, 0xf8, 0x97, 0xfc, 0x2b, 0x06, + 0x99, 0x26, 0xa5, 0x3e, 0x96, 0xa2, 0x7b, 0x7d, 0x9b, 0xd8, 0xec, 0x3b, + 0x86, 0x46, 0x3a, 0xff, 0x00, 0x4a, 0xdf, 0x0c, 0xed, 0x56, 0x25, 0x42, + 0x4a, 0x32, 0x52, 0x67, 0xb2, 0xfd, 0x9c, 0x5f, 0xa7, 0xd9, 0x98, 0x80, + 0x2e, 0x07, 0x96, 0x49, 0x19, 0xc6, 0xee, 0x3a, 0x77, 0xeb, 0x5c, 0x36, + 0xbd, 0xae, 0x8f, 0x03, 0xf8, 0x89, 0xf4, 0xa8, 0xed, 0x45, 0xcc, 0x71, + 0x22, 0xb6, 0x55, 0xfc, 0xa0, 0x77, 0x0c, 0xfd, 0xdc, 0x1f, 0x5a, 0xea, + 0x26, 0xd4, 0xae, 0x2c, 0xd6, 0xce, 0x58, 0xb6, 0x6e, 0x28, 0x1f, 0x91, + 0x9e, 0x78, 0xaf, 0x24, 0xf8, 0x91, 0xa8, 0x5f, 0xea, 0x1e, 0x20, 0xb8, + 0xba, 0x8d, 0x11, 0xae, 0x4a, 0x46, 0x30, 0x06, 0x06, 0x00, 0x1e, 0xa6, + 0xbe, 0x82, 0xf6, 0x3b, 0xea, 0xcd, 0xc5, 0x26, 0xba, 0xb3, 0x73, 0x4b, + 0xd5, 0x2e, 0x3c, 0x29, 0xaa, 0x4d, 0xae, 0x41, 0x6b, 0x2d, 0xe0, 0xd6, + 0xe4, 0xf3, 0x5e, 0x24, 0x62, 0x9f, 0x67, 0x05, 0xb7, 0xf2, 0xc0, 0x1d, + 0xdf, 0x7b, 0x1d, 0x07, 0x4a, 0xf5, 0xe1, 0xe2, 0xdd, 0x0e, 0xfc, 0xfd, + 0x96, 0xe6, 0xe3, 0x4e, 0x68, 0x64, 0xe1, 0x84, 0x97, 0x28, 0xca, 0x7e, + 0xa0, 0xf0, 0x6b, 0xc2, 0x3c, 0x31, 0xe2, 0xf8, 0x27, 0xb5, 0x7b, 0x1d, + 0x4a, 0xe1, 0x23, 0x68, 0x21, 0x58, 0x8a, 0xa4, 0x4d, 0x90, 0x40, 0xc1, + 0x19, 0x00, 0xfa, 0x55, 0xbb, 0x2f, 0x07, 0xf8, 0x73, 0x50, 0x84, 0xcb, + 0x6b, 0x2d, 0xcc, 0x88, 0x1b, 0x69, 0x3b, 0x88, 0xe7, 0xaf, 0x71, 0xef, + 0x55, 0xea, 0x52, 0x67, 0xb0, 0xdf, 0x43, 0xa0, 0x5c, 0x27, 0x97, 0x6b, + 0xe2, 0x0d, 0x36, 0xce, 0x30, 0xd9, 0x54, 0x8a, 0x48, 0xc0, 0x51, 0xe8, + 0x00, 0x61, 0x53, 0xdd, 0x5c, 0xc7, 0x70, 0x23, 0x11, 0xc6, 0xaa, 0x11, + 0x71, 0xb9, 0x4e, 0x77, 0x7b, 0xd7, 0x9c, 0x5a, 0x7c, 0x2e, 0xf0, 0xec, + 0xf6, 0x91, 0xc8, 0xe6, 0xf3, 0x73, 0x0e, 0x71, 0x30, 0xff, 0x00, 0x0a, + 0xee, 0xd4, 0x25, 0xb5, 0xb8, 0x19, 0x22, 0x38, 0xd3, 0x19, 0x3c, 0xf0, + 0x05, 0x27, 0x62, 0x91, 0x8f, 0x77, 0xe1, 0xc4, 0xba, 0xd6, 0x8e, 0xa5, + 0xe7, 0xaa, 0xb1, 0x50, 0xbb, 0x7c, 0xac, 0x9e, 0x98, 0xeb, 0x9a, 0xb2, + 0xf6, 0xf0, 0xcd, 0x10, 0x86, 0xde, 0xea, 0x31, 0x24, 0x03, 0x12, 0x79, + 0x78, 0x24, 0xe3, 0x8e, 0x40, 0x3c, 0x74, 0xa8, 0x35, 0x7d, 0x5e, 0x48, + 0xf4, 0xe7, 0x6d, 0x2c, 0xa4, 0x97, 0x59, 0x1b, 0x55, 0xd4, 0xe3, 0x19, + 0xe7, 0xae, 0x2b, 0x84, 0xd2, 0x75, 0x1d, 0x62, 0x1d, 0x56, 0xfe, 0x4b, + 0x68, 0xa2, 0x69, 0xa6, 0x90, 0x9b, 0x80, 0x71, 0x80, 0x77, 0x1c, 0xe3, + 0x9f, 0x52, 0x6b, 0x1b, 0xa8, 0x3b, 0x25, 0xb9, 0xe8, 0x50, 0xc2, 0xbc, + 0x45, 0x39, 0x4d, 0xc9, 0x2e, 0x5f, 0xeb, 0x53, 0xa7, 0x32, 0x14, 0x8c, + 0x82, 0xe5, 0x53, 0xb8, 0xce, 0x05, 0x66, 0xe9, 0xc2, 0x29, 0x35, 0xfb, + 0x93, 0x3d, 0xf2, 0x43, 0x0f, 0x96, 0x4a, 0x97, 0x61, 0xb7, 0x39, 0x5e, + 0x06, 0x4e, 0x3d, 0x6a, 0xf4, 0xb1, 0x2c, 0xd1, 0x34, 0x6f, 0x9d, 0xad, + 0xd7, 0x15, 0xce, 0x36, 0x85, 0x2d, 0xe6, 0xa7, 0x34, 0x37, 0x71, 0x30, + 0xd3, 0xd4, 0x6e, 0x89, 0xd5, 0xc6, 0x4b, 0x71, 0xf8, 0xf7, 0x6e, 0xd4, + 0x4d, 0xd5, 0x52, 0x5c, 0x9b, 0x75, 0x38, 0xd4, 0x29, 0x49, 0x5e, 0x7b, + 0xad, 0x8e, 0x9e, 0xfe, 0xe6, 0x18, 0x2d, 0xe4, 0x9e, 0xd2, 0xce, 0x34, + 0x68, 0x91, 0x9f, 0x6c, 0x40, 0x03, 0x21, 0x03, 0x23, 0xa0, 0xff, 0x00, + 0x1a, 0xe1, 0x1b, 0xc4, 0x37, 0xaf, 0xe2, 0x1f, 0xb5, 0xb5, 0xad, 0xc1, + 0x3b, 0x31, 0xf6, 0x53, 0x23, 0x7a, 0x63, 0x3d, 0x3f, 0x1e, 0x95, 0xd8, + 0x4f, 0x79, 0x6b, 0x60, 0x23, 0x8e, 0x69, 0x36, 0x64, 0x7c, 0xbf, 0x29, + 0x3c, 0x0f, 0xa0, 0xac, 0xcf, 0x3b, 0x46, 0xfe, 0xd5, 0xfe, 0xd2, 0xfb, + 0x43, 0xf9, 0xfb, 0x76, 0xfd, 0xd6, 0xc6, 0x31, 0x8e, 0x98, 0xad, 0x1c, + 0x24, 0xf6, 0x31, 0x75, 0xe9, 0x45, 0xb5, 0x29, 0x2b, 0xfa, 0x98, 0xda, + 0xd2, 0x1b, 0x5b, 0x78, 0x6f, 0x58, 0x1d, 0xd7, 0x99, 0x73, 0x19, 0x18, + 0x31, 0xe4, 0x67, 0x19, 0xef, 0x8c, 0xfb, 0x56, 0x7e, 0x8c, 0xc1, 0xad, + 0x1c, 0x82, 0x0f, 0xef, 0x0f, 0x4f, 0xa0, 0xa5, 0xd7, 0x75, 0x69, 0xf5, + 0x3b, 0x87, 0x84, 0xec, 0x31, 0x45, 0x23, 0x88, 0x88, 0x5c, 0x12, 0x33, + 0x81, 0x9f, 0xd2, 0xa4, 0xf0, 0xfe, 0x91, 0x7d, 0x6f, 0xa4, 0x4d, 0x2c, + 0xb0, 0x6d, 0x45, 0x94, 0x92, 0x77, 0xa9, 0xc7, 0x0b, 0xef, 0x5c, 0x59, + 0x85, 0x44, 0xe9, 0x7b, 0xcf, 0xd0, 0xf3, 0xa3, 0xec, 0xfd, 0xff, 0x00, + 0x66, 0xb7, 0xb1, 0x72, 0x8a, 0x29, 0xb2, 0x6e, 0x11, 0xb6, 0xc1, 0x97, + 0xc1, 0xda, 0x3d, 0xeb, 0xc6, 0x44, 0x83, 0x46, 0x8c, 0x72, 0xc8, 0xa4, + 0xfa, 0x91, 0x55, 0xae, 0x6c, 0x52, 0x70, 0xa1, 0x4a, 0xc7, 0x8f, 0x45, + 0xeb, 0x4c, 0x49, 0xee, 0xa2, 0x6d, 0xd7, 0x4a, 0xa9, 0x17, 0x72, 0x39, + 0xfe, 0x55, 0x27, 0xf6, 0x85, 0xaf, 0xfc, 0xf5, 0xff, 0x00, 0xc7, 0x4f, + 0xf8, 0x56, 0xea, 0x35, 0x60, 0xef, 0x0d, 0x7d, 0x35, 0x26, 0xe9, 0xee, + 0x66, 0x5c, 0xd9, 0xbc, 0x12, 0x05, 0x5d, 0xd2, 0x02, 0x33, 0x90, 0xb4, + 0x56, 0x9f, 0xf6, 0x85, 0xaf, 0xfc, 0xf5, 0xff, 0x00, 0xc7, 0x4f, 0xf8, + 0x51, 0x5d, 0x51, 0xc4, 0x56, 0x4a, 0xce, 0x0d, 0x91, 0xcb, 0x1e, 0xe6, + 0xae, 0x9f, 0x60, 0xfa, 0x8d, 0xc3, 0x43, 0x1b, 0xaa, 0x90, 0xbb, 0xb2, + 0xdf, 0x50, 0x3f, 0xad, 0x74, 0x5a, 0x76, 0x83, 0x1d, 0xba, 0xc8, 0x2e, + 0xd6, 0x29, 0x89, 0x23, 0x69, 0xc7, 0x4a, 0xd3, 0xb4, 0x92, 0x59, 0x6d, + 0x63, 0x92, 0x68, 0xfc, 0xb9, 0x08, 0xf9, 0x97, 0xd2, 0xa6, 0xaf, 0x9b, + 0xab, 0x88, 0x9c, 0x9b, 0x4b, 0x43, 0xbe, 0x14, 0xd2, 0xd4, 0xc2, 0xd7, + 0x2c, 0x2d, 0x20, 0xd3, 0x1e, 0x48, 0xad, 0xe3, 0x47, 0x0c, 0x39, 0x03, + 0x9e, 0xb5, 0xcb, 0xaa, 0xee, 0x60, 0xbe, 0xa7, 0x15, 0xe8, 0xb4, 0x51, + 0x4b, 0x12, 0xe1, 0x1b, 0x35, 0x70, 0x95, 0x2e, 0x67, 0x73, 0x90, 0xbb, + 0xf0, 0xfc, 0xf6, 0x96, 0xb2, 0x4e, 0xd3, 0x46, 0xca, 0x83, 0x24, 0x0c, + 0xe6, 0xb1, 0xa4, 0x8d, 0x25, 0x5d, 0xae, 0xa1, 0x86, 0x73, 0x83, 0x5e, + 0x97, 0x14, 0x52, 0x4f, 0x22, 0xc7, 0x12, 0x17, 0x76, 0xe8, 0xa3, 0xa9, + 0xa5, 0x9e, 0xc3, 0x52, 0xb7, 0xe5, 0xec, 0xa4, 0x54, 0xce, 0x01, 0x2a, + 0x6b, 0xb3, 0x06, 0xf1, 0x15, 0xdb, 0x50, 0x8d, 0xed, 0xf2, 0x13, 0xc3, + 0xa9, 0x6c, 0x5c, 0x96, 0x18, 0x9f, 0x4c, 0x0c, 0xc8, 0xa5, 0x92, 0x1f, + 0x94, 0x91, 0xd3, 0xe5, 0xaf, 0x1d, 0xf1, 0x5f, 0xfc, 0x87, 0xa5, 0xff, + 0x00, 0x75, 0x7f, 0x95, 0x7b, 0x0d, 0xfd, 0xed, 0xb5, 0xad, 0x9b, 0x47, + 0x71, 0x32, 0x46, 0xef, 0x11, 0xda, 0xac, 0x70, 0x4f, 0x15, 0xe5, 0x9a, + 0xed, 0x9c, 0x37, 0x9a, 0xab, 0xcc, 0xb2, 0x92, 0x0a, 0xa8, 0xf9, 0x7a, + 0x74, 0xaf, 0xa6, 0xab, 0x5a, 0x14, 0xe3, 0xef, 0x33, 0x4c, 0x5c, 0x25, + 0xec, 0x93, 0x5d, 0xce, 0x45, 0x2d, 0xa2, 0x8a, 0x47, 0x92, 0x38, 0xd5, + 0x5d, 0xce, 0x58, 0x81, 0xc9, 0xab, 0xf6, 0x3a, 0xfc, 0x9a, 0x1e, 0x27, + 0x76, 0x95, 0xad, 0x63, 0x6d, 0xef, 0x12, 0x1f, 0xbd, 0xc6, 0x3f, 0xc2, + 0xa8, 0x5d, 0xf8, 0x42, 0xc5, 0x65, 0x92, 0xe5, 0xef, 0x26, 0x0e, 0xcc, + 0x5c, 0x29, 0xc6, 0x09, 0xeb, 0x8a, 0xc4, 0xba, 0xba, 0xd5, 0x2e, 0xad, + 0x9e, 0x06, 0xd3, 0xca, 0x87, 0x18, 0x24, 0x29, 0xa2, 0x95, 0x55, 0x3d, + 0x62, 0xc8, 0xa5, 0x53, 0x95, 0x72, 0xde, 0xff, 0x00, 0x85, 0xbf, 0xcc, + 0xfa, 0x4f, 0xc2, 0xda, 0x9c, 0x7a, 0xc7, 0x86, 0x6c, 0x75, 0x08, 0xa3, + 0x68, 0xe3, 0x9d, 0x0b, 0x05, 0x7e, 0xa3, 0x92, 0x3f, 0xa5, 0x5a, 0xd4, + 0xa2, 0x9e, 0x48, 0x99, 0xa3, 0x97, 0x62, 0x2a, 0x31, 0x75, 0xfe, 0xf5, + 0x78, 0x6f, 0x82, 0xf5, 0xab, 0x9f, 0x0c, 0xa2, 0x5c, 0x25, 0xba, 0x3c, + 0xa6, 0x13, 0x13, 0x24, 0xb9, 0x18, 0x05, 0x81, 0xed, 0xf4, 0xaf, 0x79, + 0xb5, 0xb9, 0x8e, 0xea, 0x04, 0x91, 0x19, 0x58, 0x95, 0x05, 0x82, 0x9e, + 0x84, 0x8a, 0xdd, 0x3b, 0x9b, 0xd2, 0xac, 0xaa, 0x36, 0x97, 0x43, 0x97, + 0xa8, 0xa3, 0xb6, 0x86, 0x19, 0x1e, 0x48, 0xe2, 0x55, 0x77, 0x39, 0x66, + 0x03, 0x93, 0x5a, 0x7a, 0xb7, 0xfc, 0x84, 0x1f, 0xe8, 0x3f, 0x95, 0x71, + 0x7a, 0xcd, 0x92, 0x59, 0xcc, 0xb7, 0x0a, 0xcc, 0xcd, 0x2c, 0x8c, 0xc4, + 0x1e, 0x83, 0xbd, 0x5c, 0x62, 0xa4, 0xec, 0x2a, 0xf5, 0xe7, 0x42, 0x0e, + 0x49, 0x5d, 0x75, 0xd6, 0xc7, 0x4d, 0x59, 0x57, 0x3a, 0xe4, 0x36, 0xb7, + 0x2f, 0x0b, 0x45, 0x21, 0x28, 0x70, 0x48, 0xc5, 0x73, 0xba, 0x8e, 0xa6, + 0x2e, 0xee, 0x16, 0x49, 0xb6, 0x46, 0xc1, 0x02, 0x80, 0x0f, 0x6c, 0x9a, + 0xc9, 0xd5, 0x2d, 0x75, 0xb9, 0xac, 0xd2, 0x5d, 0x3b, 0x4b, 0x96, 0xe9, + 0x19, 0xc6, 0xd6, 0x44, 0x24, 0x11, 0x83, 0xcf, 0xe7, 0x44, 0xdd, 0x3a, + 0x4a, 0xf5, 0x19, 0xc1, 0x2c, 0x6d, 0x4a, 0xb2, 0xe4, 0xa2, 0xad, 0xe6, + 0x69, 0xdd, 0xdd, 0xcb, 0x36, 0xe9, 0x25, 0x76, 0x70, 0xa0, 0x90, 0x09, + 0xe8, 0x2b, 0x2e, 0x6b, 0xe0, 0xf1, 0x90, 0x81, 0x95, 0xbd, 0x6b, 0x95, + 0xd5, 0xee, 0xb5, 0x8d, 0x3e, 0x2f, 0xb3, 0xea, 0x5a, 0x63, 0x5a, 0x99, + 0xd1, 0x82, 0xf9, 0x8a, 0x41, 0x23, 0xa1, 0x23, 0xf3, 0xae, 0xfb, 0xe1, + 0xa7, 0x84, 0x62, 0xd5, 0xbc, 0x3f, 0x6d, 0x79, 0x2c, 0x93, 0xa2, 0xb3, + 0xc8, 0x32, 0xa0, 0x63, 0x82, 0x45, 0x1e, 0xd9, 0xcd, 0x7b, 0xba, 0x2f, + 0xbc, 0xcb, 0xfb, 0x3e, 0xa5, 0x9c, 0xa5, 0xab, 0x30, 0x63, 0x06, 0x49, + 0xd0, 0x13, 0xcb, 0x30, 0xe4, 0xfd, 0x6b, 0xd5, 0xf4, 0xcd, 0x33, 0xec, + 0x96, 0x32, 0x5b, 0x5c, 0x14, 0x94, 0x3b, 0x96, 0x20, 0x74, 0xc6, 0x07, + 0xf8, 0x56, 0xe7, 0x88, 0x74, 0x0d, 0x32, 0xdb, 0x46, 0xd1, 0xd2, 0xea, + 0xfd, 0xa1, 0x08, 0x81, 0x63, 0xdc, 0x40, 0xdc, 0x42, 0x8a, 0xab, 0x5f, + 0x33, 0x9d, 0xb9, 0xc5, 0xc6, 0x3d, 0x35, 0xfd, 0x0e, 0xba, 0x54, 0x7d, + 0x9b, 0x77, 0x32, 0x35, 0x0d, 0x0e, 0x1b, 0x8b, 0x75, 0x4b, 0x58, 0xe2, + 0x85, 0xc3, 0x64, 0xb6, 0x3a, 0x8c, 0x1e, 0x3f, 0x95, 0x72, 0x2c, 0xbb, + 0x58, 0xa9, 0xec, 0x71, 0x5e, 0x8b, 0x5c, 0xa5, 0xd6, 0x9f, 0xa5, 0xac, + 0x73, 0x48, 0x97, 0xfb, 0xa4, 0x01, 0x88, 0x4c, 0x8e, 0x4f, 0xa5, 0x79, + 0xb8, 0x6a, 0xcf, 0x55, 0x21, 0xd5, 0x87, 0x54, 0x61, 0x3a, 0x2c, 0x8b, + 0xb5, 0xd4, 0x30, 0xf4, 0x35, 0x4e, 0xe7, 0x4f, 0x59, 0x42, 0xf9, 0x21, + 0x10, 0x8e, 0xbc, 0x75, 0xab, 0xd5, 0x95, 0x7a, 0x2e, 0x6e, 0x1f, 0x6f, + 0x90, 0x76, 0xa3, 0x1c, 0x10, 0x3a, 0x8a, 0xf5, 0xb0, 0xfc, 0xdc, 0xda, + 0x3b, 0x1c, 0xb2, 0xb5, 0x8a, 0x97, 0x36, 0xed, 0x6d, 0x20, 0x46, 0x60, + 0x49, 0x19, 0xe2, 0x8a, 0x3e, 0xc9, 0x71, 0xff, 0x00, 0x3c, 0x5f, 0xf2, + 0xa2, 0xbd, 0x48, 0xce, 0x29, 0x6b, 0x24, 0x63, 0x63, 0xd9, 0xa8, 0xa8, + 0x05, 0xe5, 0xab, 0x0c, 0x8b, 0x98, 0x48, 0xf5, 0x0e, 0x2a, 0x7e, 0xa3, + 0x22, 0xbe, 0x21, 0xa6, 0xb7, 0x3d, 0x7b, 0x85, 0x52, 0xd4, 0x52, 0xfd, + 0xd2, 0x3f, 0xb0, 0x48, 0xa8, 0xd9, 0x3b, 0xb7, 0x63, 0x9f, 0xcc, 0x1a, + 0xbb, 0x45, 0x38, 0xbb, 0x3b, 0x89, 0xab, 0xa3, 0x37, 0x44, 0x6d, 0x7a, + 0xcf, 0xc4, 0xb6, 0x57, 0x57, 0x77, 0x31, 0x9b, 0x08, 0xce, 0x66, 0x55, + 0x55, 0xdc, 0x78, 0x3d, 0x38, 0xfa, 0x77, 0xad, 0x6d, 0x73, 0xe2, 0x56, + 0x95, 0x16, 0xa1, 0x35, 0x9c, 0xad, 0x72, 0x56, 0x27, 0x18, 0x51, 0x10, + 0xe0, 0xe3, 0xd7, 0x3e, 0xf5, 0x1d, 0x66, 0xea, 0x9a, 0x34, 0x1a, 0x94, + 0x40, 0x6d, 0x8e, 0x39, 0x37, 0x86, 0x32, 0x79, 0x60, 0x93, 0xc1, 0x18, + 0xaf, 0x5b, 0x05, 0x9a, 0x3a, 0x3e, 0xec, 0xa2, 0xad, 0xe4, 0xac, 0x4f, + 0xbf, 0x15, 0xee, 0x3f, 0xbc, 0xf3, 0xeb, 0xcf, 0x88, 0x96, 0xba, 0xcd, + 0xf4, 0x70, 0xc9, 0x2c, 0xef, 0x21, 0x7f, 0x2e, 0x2c, 0xc4, 0xaa, 0x06, + 0x4e, 0x07, 0x4f, 0xc2, 0xab, 0x5d, 0xdf, 0x5c, 0x25, 0xc1, 0x55, 0x93, + 0x03, 0x03, 0xf8, 0x45, 0x75, 0x37, 0x1f, 0x0f, 0xad, 0xe6, 0x91, 0x1e, + 0x3b, 0x98, 0xa2, 0x65, 0xe7, 0x2b, 0x6c, 0x33, 0x9f, 0x5e, 0xb5, 0x91, + 0x7f, 0xe1, 0x69, 0xed, 0x6e, 0xda, 0x25, 0x9a, 0x49, 0x80, 0x00, 0xef, + 0x10, 0x9e, 0x7f, 0x53, 0x5e, 0x9d, 0x2c, 0x66, 0x0e, 0x71, 0x6b, 0x79, + 0x3e, 0xfa, 0xfe, 0x36, 0x33, 0xc6, 0x55, 0xad, 0x59, 0xae, 0x91, 0x5d, + 0x16, 0xdf, 0x71, 0x85, 0x35, 0xcc, 0xb3, 0x80, 0x24, 0x7d, 0xd8, 0xe9, + 0xc0, 0x15, 0x15, 0x5b, 0x93, 0x4d, 0xbc, 0x8e, 0x47, 0x5f, 0xb2, 0xce, + 0x42, 0x92, 0x33, 0xe5, 0x1e, 0x6a, 0xbf, 0x93, 0x27, 0xfc, 0xf3, 0x7f, + 0xfb, 0xe4, 0xd7, 0x74, 0x65, 0x0b, 0x7b, 0xb6, 0xb1, 0xe7, 0xb4, 0xfa, + 0x8c, 0xaf, 0x41, 0xf0, 0x57, 0x8b, 0x96, 0x39, 0x0d, 0x96, 0xa3, 0x2c, + 0x92, 0x4b, 0x71, 0x2c, 0x71, 0xc1, 0xb6, 0x31, 0x81, 0x9e, 0x39, 0xc6, + 0x3b, 0x91, 0x5c, 0x0f, 0x93, 0x27, 0xfc, 0xf3, 0x7f, 0xfb, 0xe4, 0xd3, + 0xed, 0x2e, 0x0d, 0xa5, 0xec, 0x17, 0x01, 0x49, 0x30, 0xc8, 0xaf, 0x8c, + 0xe3, 0x38, 0x39, 0xeb, 0x57, 0x19, 0x6b, 0xa1, 0x74, 0xaa, 0x4a, 0x9c, + 0xae, 0x8f, 0x7c, 0xd4, 0xf4, 0x81, 0xaa, 0x69, 0x6d, 0x1e, 0x9a, 0x8a, + 0xba, 0xbb, 0x30, 0xdb, 0x23, 0xb1, 0x0b, 0xb4, 0x1e, 0x7d, 0x47, 0x4f, + 0x6a, 0xe0, 0x75, 0x7f, 0x0e, 0xeb, 0xc8, 0x44, 0x77, 0xb2, 0xc0, 0xe5, + 0x58, 0xaa, 0xed, 0x61, 0xc1, 0xef, 0xd0, 0x57, 0x5f, 0xe1, 0x1d, 0x4a, + 0x5d, 0x5b, 0x44, 0x8a, 0xed, 0x51, 0xd1, 0xd9, 0x98, 0x60, 0x31, 0x63, + 0xc1, 0xc7, 0x5a, 0xb9, 0xe2, 0x1f, 0x18, 0x5b, 0x68, 0xd6, 0xb0, 0xc6, + 0xfa, 0x54, 0x57, 0x52, 0x3e, 0x51, 0x8b, 0x4a, 0x01, 0x52, 0x07, 0x53, + 0xf2, 0x9e, 0x6b, 0xae, 0x12, 0x7b, 0x44, 0xef, 0xc4, 0x42, 0x94, 0xe1, + 0xed, 0x27, 0x27, 0xcb, 0xf8, 0x7d, 0xc7, 0x07, 0xa5, 0x78, 0x4a, 0x13, + 0x6a, 0xdf, 0xdb, 0x30, 0x24, 0xd7, 0x1b, 0xce, 0xd6, 0x49, 0x18, 0x0d, + 0x98, 0x18, 0x1c, 0x63, 0xbe, 0x6b, 0xa3, 0xb5, 0xb5, 0x86, 0xca, 0xd9, + 0x2d, 0xed, 0xd3, 0x64, 0x48, 0x30, 0xab, 0x92, 0x71, 0xf9, 0xd6, 0x76, + 0x95, 0xac, 0xdb, 0xdd, 0x5a, 0xb3, 0xcf, 0x24, 0x50, 0x30, 0x72, 0x02, + 0xbc, 0xa3, 0x24, 0x60, 0x73, 0xce, 0x2a, 0xf7, 0xf6, 0x8d, 0x97, 0xfc, + 0xfe, 0x5b, 0xff, 0x00, 0xdf, 0xd5, 0xff, 0x00, 0x1a, 0xf8, 0x8c, 0x7f, + 0xd6, 0x1d, 0x69, 0x42, 0xa3, 0x6e, 0xcf, 0xce, 0xc2, 0xa4, 0xa9, 0x28, + 0xa7, 0x0d, 0x8e, 0x43, 0xe2, 0x1f, 0x86, 0x24, 0xd7, 0x2d, 0x96, 0xee, + 0x34, 0x8d, 0x8d, 0xa5, 0xbc, 0xa7, 0x2c, 0xe5, 0x71, 0xc6, 0x7b, 0x75, + 0xe9, 0x5d, 0x0f, 0xc2, 0x9b, 0x59, 0x2c, 0xfc, 0x05, 0x6b, 0x0c, 0xb8, + 0xde, 0x25, 0x94, 0xf0, 0x73, 0xfc, 0x46, 0xaf, 0xdf, 0x42, 0x2e, 0xb4, + 0xeb, 0x98, 0x03, 0xed, 0x12, 0xc4, 0xc9, 0xbb, 0x19, 0xc6, 0x41, 0x19, + 0xa9, 0x3c, 0x3d, 0x6f, 0xfd, 0x85, 0xe1, 0x88, 0xe2, 0xdd, 0xe7, 0xec, + 0x76, 0xe7, 0x1b, 0x73, 0x93, 0xf8, 0xd7, 0xb5, 0x92, 0xd5, 0x94, 0xe8, + 0xb8, 0x3d, 0xa2, 0x6d, 0x0e, 0x6e, 0x6f, 0x23, 0x91, 0xf1, 0x37, 0x88, + 0xef, 0xef, 0x75, 0x5f, 0xb1, 0x5f, 0x5c, 0x99, 0x2d, 0xed, 0x6e, 0x9d, + 0x20, 0x41, 0x1a, 0x8d, 0x80, 0x36, 0x3a, 0x80, 0x09, 0xe0, 0x0e, 0xb5, + 0xd9, 0x57, 0x97, 0xf8, 0x82, 0xe5, 0x3f, 0xb7, 0x5a, 0x47, 0x65, 0x4f, + 0x32, 0xed, 0xc8, 0x05, 0xbf, 0xda, 0xaf, 0x50, 0xac, 0x38, 0x85, 0xfb, + 0xf4, 0xd7, 0x6b, 0xfe, 0x87, 0x26, 0x16, 0x32, 0xf7, 0xa7, 0x2e, 0xaf, + 0xf2, 0x32, 0x2e, 0xe2, 0xd6, 0x9a, 0xea, 0x43, 0x6d, 0x3c, 0x6b, 0x0e, + 0x7e, 0x50, 0x40, 0xc8, 0x1f, 0x95, 0x64, 0x1f, 0x0e, 0x6a, 0x0c, 0xc4, + 0x9f, 0x2b, 0x27, 0x93, 0xf3, 0x7f, 0xf5, 0xab, 0xae, 0xa2, 0xbc, 0x38, + 0xe2, 0x25, 0x05, 0xee, 0xa4, 0x6e, 0xe9, 0xa7, 0xb9, 0xc4, 0xdd, 0xe8, + 0xd7, 0x76, 0x56, 0xe6, 0x69, 0x7c, 0xbd, 0x80, 0x81, 0xc3, 0x64, 0xd6, + 0x7d, 0x7a, 0x23, 0xa2, 0x48, 0xbb, 0x5d, 0x55, 0x97, 0xd1, 0x86, 0x45, + 0x63, 0xea, 0xb6, 0x16, 0x77, 0x51, 0x80, 0x93, 0xc1, 0x03, 0x47, 0x92, + 0x40, 0x03, 0x27, 0xdb, 0xa8, 0xae, 0x9a, 0x58, 0xab, 0xe9, 0x24, 0x67, + 0x3a, 0x56, 0xd5, 0x1c, 0x4d, 0xca, 0xdd, 0x99, 0x07, 0xd9, 0xdd, 0x55, + 0x31, 0xc8, 0x38, 0xeb, 0x45, 0x5a, 0xa2, 0xbd, 0x28, 0xd5, 0xb2, 0xb5, + 0x97, 0xdc, 0x73, 0x72, 0x94, 0x04, 0xe3, 0xc9, 0x58, 0xac, 0x4e, 0xf7, + 0x5e, 0xcc, 0x3b, 0x7e, 0x38, 0xf6, 0xae, 0xff, 0x00, 0x41, 0x93, 0x56, + 0x92, 0xde, 0x4f, 0xed, 0x58, 0x52, 0x32, 0x36, 0xf9, 0x5b, 0x08, 0xe4, + 0x63, 0xd8, 0x9f, 0x6a, 0xa7, 0xa5, 0xf8, 0x5e, 0x2b, 0x2b, 0x96, 0x92, + 0x74, 0x82, 0x45, 0x28, 0x54, 0x00, 0x3b, 0xe4, 0x7f, 0x85, 0x74, 0x40, + 0x00, 0x00, 0x1c, 0x01, 0x5e, 0x76, 0x33, 0x15, 0x4e, 0x6b, 0x92, 0x0a, + 0xfe, 0x6f, 0x73, 0xa6, 0x8d, 0x39, 0x47, 0x56, 0x14, 0x51, 0x45, 0x79, + 0xc7, 0x40, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x8c, 0xa1, + 0x94, 0xa9, 0xe8, 0x46, 0x2b, 0x0a, 0xef, 0xc3, 0x96, 0xeb, 0x6b, 0x21, + 0xb6, 0x12, 0x34, 0xd8, 0xf9, 0x41, 0x71, 0x83, 0x5b, 0xd5, 0x5b, 0x50, + 0xbd, 0x4d, 0x3a, 0xc2, 0x6b, 0xb9, 0x15, 0x99, 0x62, 0x19, 0x2a, 0xbd, + 0x4f, 0x38, 0xad, 0x69, 0x4a, 0x6a, 0x49, 0x43, 0xa9, 0x32, 0x49, 0xad, + 0x4e, 0x02, 0xfe, 0x2b, 0xbb, 0x56, 0x31, 0x24, 0x63, 0xce, 0x56, 0xc3, + 0x29, 0x23, 0x81, 0x8f, 0xaf, 0xd2, 0xb1, 0x4d, 0x85, 0xd1, 0x24, 0xf9, + 0x5d, 0x7f, 0xda, 0x1f, 0xe3, 0x5a, 0xb7, 0xfa, 0xf4, 0x37, 0x77, 0xd2, + 0xce, 0xb0, 0xc8, 0xaa, 0xe7, 0x20, 0x1c, 0x67, 0xa5, 0x48, 0xd2, 0x05, + 0x84, 0xc8, 0x47, 0x01, 0x77, 0x62, 0xbe, 0x86, 0x9c, 0xea, 0xd1, 0x8a, + 0x4e, 0x3a, 0xb3, 0xcf, 0x92, 0x8c, 0x9e, 0x8c, 0xf4, 0x1f, 0x87, 0x57, + 0x66, 0xc3, 0x42, 0xb7, 0x8b, 0x20, 0x5c, 0x06, 0x90, 0xed, 0x23, 0x3c, + 0x12, 0x7f, 0x0a, 0xe6, 0xfc, 0x5d, 0x7d, 0x15, 0xe6, 0xa3, 0x30, 0x47, + 0xdd, 0x2a, 0xdc, 0x49, 0xe6, 0x00, 0xa4, 0x60, 0xe6, 0xa5, 0xf0, 0x4e, + 0xb9, 0x0d, 0xc6, 0xa5, 0x0d, 0x82, 0xc5, 0x20, 0x72, 0x1d, 0xb7, 0x1c, + 0x63, 0xa6, 0x6b, 0x0b, 0x5d, 0x6d, 0x9a, 0xc6, 0xa6, 0xde, 0x97, 0x12, + 0x9f, 0xfc, 0x78, 0xd7, 0xd0, 0x61, 0x6f, 0x24, 0x9c, 0xb7, 0x2f, 0x17, + 0x56, 0xd8, 0x78, 0xc6, 0x3d, 0x74, 0x30, 0xb5, 0x0f, 0xf8, 0xf8, 0x5f, + 0xf7, 0x7f, 0xa9, 0xaa, 0x95, 0xd8, 0x78, 0x01, 0x2c, 0x3c, 0x43, 0xa1, + 0x4f, 0x77, 0x73, 0x68, 0xb2, 0xba, 0x5c, 0xb4, 0x40, 0xca, 0x01, 0x38, + 0x0a, 0xa7, 0xfa, 0xd6, 0xce, 0xb3, 0xe1, 0x4b, 0x6b, 0xdb, 0x34, 0x8e, + 0xc2, 0x1b, 0x7b, 0x69, 0x44, 0x81, 0x8b, 0xed, 0xc6, 0x57, 0x07, 0x8e, + 0x3e, 0xa3, 0xf2, 0xaf, 0x1a, 0xbe, 0x69, 0x4a, 0x38, 0x87, 0x4e, 0x49, + 0xad, 0x77, 0x22, 0x38, 0x49, 0xc6, 0x1a, 0xee, 0x61, 0xe9, 0x1e, 0x2b, + 0xd4, 0xae, 0xf5, 0x3b, 0x1b, 0x19, 0x3c, 0x9f, 0x26, 0x59, 0xa3, 0x85, + 0xb0, 0x9c, 0xed, 0x2c, 0x01, 0xef, 0xe9, 0x5e, 0x8d, 0xab, 0x1b, 0x7d, + 0x37, 0x45, 0x7d, 0xcc, 0x56, 0x25, 0x61, 0xc9, 0xe7, 0xa9, 0xf6, 0xae, + 0x36, 0xc3, 0xc4, 0x3e, 0x18, 0x8e, 0xfe, 0xda, 0x18, 0xf4, 0x1d, 0xb7, + 0x2b, 0x2a, 0x22, 0xca, 0x15, 0x78, 0x7c, 0x81, 0xbb, 0xaf, 0xaf, 0x35, + 0xa5, 0xe3, 0xaf, 0x12, 0x5b, 0x5a, 0x78, 0x5a, 0x79, 0xa4, 0xb7, 0x91, + 0xd4, 0x3a, 0x0c, 0x0c, 0x7f, 0x7a, 0xbb, 0xe8, 0xd2, 0xa7, 0x46, 0x2d, + 0xd3, 0x5f, 0x71, 0xdf, 0x86, 0x52, 0x71, 0x69, 0x49, 0x36, 0x79, 0x57, + 0x8d, 0x9d, 0x65, 0xd4, 0xec, 0x64, 0x43, 0x95, 0x6b, 0xb6, 0x60, 0x7d, + 0x41, 0x61, 0x5e, 0xdd, 0x5e, 0x49, 0x1e, 0x8c, 0xfe, 0x36, 0xfb, 0x24, + 0x96, 0x2f, 0x1d, 0xb0, 0xb6, 0x2b, 0x33, 0x79, 0xd9, 0xe4, 0x36, 0x38, + 0x18, 0xfa, 0x57, 0xad, 0xd7, 0x81, 0x9e, 0x57, 0x8d, 0x59, 0xc1, 0x2d, + 0x1a, 0xbd, 0xd7, 0xdc, 0x14, 0xe9, 0xaa, 0x70, 0xe5, 0xba, 0x7b, 0xec, + 0x14, 0x51, 0x45, 0x78, 0x45, 0x85, 0x65, 0x4b, 0xe1, 0xfb, 0x29, 0xa6, + 0x79, 0x5f, 0xcd, 0xdc, 0xec, 0x58, 0xe1, 0xbb, 0x9f, 0xc2, 0xb5, 0x68, + 0xab, 0x8c, 0xe5, 0x1f, 0x85, 0x89, 0xc5, 0x3d, 0xce, 0x4b, 0x57, 0xd1, + 0x5a, 0xd1, 0xbc, 0xcb, 0x68, 0xd8, 0xdb, 0xaa, 0x02, 0xec, 0xcc, 0x38, + 0x39, 0xff, 0x00, 0xf5, 0x51, 0x5d, 0x25, 0xfc, 0x91, 0x45, 0x63, 0x2b, + 0xcd, 0x1f, 0x99, 0x18, 0x1f, 0x32, 0xfa, 0xf3, 0x45, 0x77, 0x51, 0xad, + 0x37, 0x1d, 0x55, 0xce, 0x79, 0xc2, 0x29, 0xee, 0x63, 0xc1, 0xe1, 0xeb, + 0x2b, 0x98, 0x56, 0x68, 0x6e, 0xde, 0x48, 0xd8, 0x65, 0x59, 0x70, 0x41, + 0xae, 0x81, 0x57, 0x6a, 0x05, 0x1d, 0x86, 0x2b, 0x92, 0xf0, 0x8e, 0xaa, + 0x6e, 0x2e, 0x0d, 0x82, 0x3b, 0x79, 0x11, 0x42, 0x59, 0x50, 0xa8, 0xe3, + 0xe6, 0x1d, 0xfa, 0xf7, 0xa4, 0x4d, 0x7a, 0xf9, 0x2f, 0x17, 0xcd, 0x9c, + 0x98, 0x44, 0x9f, 0x30, 0x08, 0xbf, 0x77, 0x3c, 0xf6, 0xf4, 0xa9, 0xad, + 0x42, 0xab, 0x9b, 0x83, 0x7b, 0x77, 0x2a, 0x13, 0x82, 0x49, 0xae, 0xa7, + 0x5f, 0x45, 0x41, 0x69, 0x77, 0x1d, 0xed, 0xb8, 0x9a, 0x2d, 0xdb, 0x09, + 0x23, 0xe6, 0x18, 0x35, 0x3d, 0x70, 0xb4, 0xd3, 0xb3, 0x37, 0xdc, 0x28, + 0xa8, 0xae, 0x2e, 0x12, 0xd6, 0xdd, 0xe6, 0x93, 0x3b, 0x10, 0x64, 0xe0, + 0x73, 0x55, 0x6c, 0xb5, 0x7b, 0x6b, 0xf9, 0x8c, 0x50, 0xef, 0xdc, 0x17, + 0x71, 0xdc, 0xb8, 0xe3, 0xfc, 0x9a, 0x6a, 0x12, 0x6a, 0xe9, 0x68, 0x2b, + 0xa4, 0xec, 0x5f, 0xa2, 0xb2, 0x45, 0xed, 0xc6, 0xa1, 0x75, 0x19, 0xb0, + 0x93, 0x6c, 0x31, 0x38, 0x13, 0x87, 0x03, 0x24, 0x67, 0xb7, 0xe1, 0x9a, + 0xd6, 0xa7, 0x28, 0xb8, 0xee, 0x09, 0xdf, 0x60, 0xa2, 0x8a, 0x2a, 0x06, + 0x71, 0x5e, 0x29, 0xf0, 0xcb, 0xc8, 0xef, 0x7f, 0x66, 0x26, 0x9e, 0xe2, + 0x69, 0x40, 0x68, 0xd4, 0x64, 0x01, 0x83, 0xcf, 0xe8, 0x3f, 0x3a, 0xc8, + 0xf0, 0xab, 0xe9, 0x16, 0x9a, 0xcd, 0xad, 0xd6, 0xa7, 0xa8, 0xa5, 0xa4, + 0xf6, 0xd7, 0x51, 0x49, 0x14, 0x6e, 0xc0, 0x6f, 0x2a, 0xc0, 0xe3, 0xf3, + 0x02, 0xbd, 0x32, 0xbc, 0xfb, 0xc6, 0x3e, 0x08, 0x86, 0x68, 0x8d, 0xfe, + 0x9b, 0x6f, 0x1c, 0x6f, 0x6f, 0x14, 0x92, 0x96, 0x69, 0x5b, 0xef, 0x0e, + 0x41, 0xc1, 0xc8, 0xed, 0x5e, 0xe6, 0x03, 0x1f, 0x74, 0xa8, 0xd4, 0x95, + 0xbb, 0x3f, 0xd3, 0xf4, 0x39, 0xe5, 0x45, 0x29, 0x73, 0x9e, 0x93, 0xae, + 0x78, 0xae, 0x19, 0x34, 0xf7, 0xd4, 0xac, 0x5e, 0xde, 0xe1, 0xf2, 0xaa, + 0x15, 0x5b, 0x20, 0xf3, 0x83, 0x5c, 0x06, 0xa1, 0x6f, 0x61, 0x74, 0x93, + 0x5d, 0x4f, 0x76, 0x23, 0xb8, 0xb9, 0x0d, 0x27, 0x96, 0x08, 0xfb, 0xed, + 0xce, 0xd1, 0xf8, 0x9a, 0xf3, 0x59, 0x75, 0xaf, 0x14, 0xe9, 0x9a, 0x61, + 0x8c, 0xdf, 0xa2, 0xdb, 0x2b, 0x7d, 0xd1, 0x1a, 0x1e, 0x49, 0xff, 0x00, + 0x77, 0x35, 0x9f, 0x17, 0x89, 0xb5, 0x7b, 0xab, 0xdb, 0x65, 0x9a, 0xef, + 0x70, 0x12, 0xaf, 0x1e, 0x5a, 0x0e, 0xe3, 0xd0, 0x57, 0xd2, 0xfb, 0x4a, + 0x89, 0xfb, 0xb6, 0xb7, 0xe2, 0x6e, 0xe9, 0x53, 0xad, 0x0e, 0x69, 0x6a, + 0xfb, 0x74, 0xff, 0x00, 0x33, 0xd6, 0xbe, 0x17, 0x69, 0x97, 0xda, 0x4f, + 0x86, 0x6e, 0x60, 0xbf, 0xb5, 0x96, 0xda, 0x56, 0xbc, 0x67, 0x09, 0x22, + 0xe0, 0x95, 0xd8, 0x83, 0x3f, 0xa1, 0xfc, 0xab, 0xb7, 0xa2, 0x8a, 0xf8, + 0x4a, 0xf5, 0x5d, 0x6a, 0x8e, 0xa3, 0xea, 0x36, 0xee, 0x63, 0xeb, 0x5e, + 0x1d, 0x83, 0x5b, 0x92, 0x17, 0x9a, 0x69, 0x23, 0x31, 0x02, 0x06, 0xcc, + 0x73, 0x9f, 0xad, 0x72, 0x92, 0xf8, 0x17, 0x40, 0x87, 0x5b, 0x32, 0xcb, + 0xac, 0xca, 0x97, 0x21, 0x71, 0xe5, 0x12, 0xbd, 0x31, 0xf4, 0xab, 0xba, + 0xc7, 0x89, 0xee, 0xee, 0x1b, 0x7e, 0x8d, 0x70, 0xd1, 0x24, 0x01, 0xbc, + 0xe0, 0xf1, 0xaf, 0x27, 0xdb, 0x20, 0xfa, 0x1a, 0xcb, 0xb5, 0x95, 0xf5, + 0x12, 0x35, 0x0b, 0xa6, 0xf3, 0x2e, 0x8e, 0x54, 0xc9, 0x8c, 0x70, 0x38, + 0xe8, 0x38, 0xaf, 0x5b, 0x0f, 0x0c, 0x4d, 0x3a, 0x7a, 0xce, 0xcb, 0xb2, + 0xdf, 0xe7, 0xa1, 0xd1, 0x47, 0x03, 0xed, 0x25, 0x77, 0xa5, 0xce, 0x9f, + 0x43, 0xd5, 0xca, 0xcd, 0x35, 0x84, 0xea, 0x91, 0xdb, 0x5a, 0x81, 0x15, + 0xbc, 0xa7, 0xac, 0xa0, 0x70, 0x0f, 0xe4, 0x01, 0xfc, 0x6b, 0xa3, 0xaf, + 0x20, 0xd5, 0xf5, 0x6b, 0xcd, 0x22, 0x78, 0xda, 0x49, 0xb0, 0x93, 0x48, + 0x44, 0x5b, 0x54, 0x1c, 0x73, 0xc6, 0x78, 0xf7, 0x15, 0xd8, 0xe9, 0xba, + 0xf5, 0xe2, 0xe9, 0x73, 0x25, 0xf4, 0xe5, 0xef, 0x4b, 0x9f, 0x2d, 0xd5, + 0x17, 0x01, 0x70, 0x3d, 0x06, 0x3d, 0x7b, 0x56, 0x18, 0xbc, 0x13, 0xd2, + 0xa4, 0x5a, 0xd7, 0xfa, 0xff, 0x00, 0x87, 0x1d, 0x7a, 0x50, 0x84, 0xd4, + 0x22, 0xec, 0xf6, 0xd4, 0xd9, 0xd4, 0x75, 0xb8, 0x2d, 0x58, 0xc3, 0x04, + 0xb1, 0x49, 0x72, 0xad, 0x87, 0x88, 0x9e, 0x54, 0x63, 0xaf, 0xf2, 0xfc, + 0xeb, 0x8d, 0xd4, 0xf5, 0x1d, 0x4a, 0xef, 0x55, 0xb0, 0xbc, 0xbb, 0xb1, + 0xf2, 0x16, 0xd6, 0x40, 0xe0, 0xe0, 0xe0, 0x80, 0xc0, 0xe4, 0xe7, 0xe9, + 0x51, 0xbd, 0x86, 0xa9, 0x7d, 0xab, 0xdc, 0x5c, 0xdb, 0xc9, 0x18, 0x92, + 0x41, 0x92, 0xcd, 0x81, 0x91, 0xc7, 0x6c, 0x7d, 0x2a, 0x53, 0x2d, 0xeb, + 0xdb, 0xcc, 0x35, 0x49, 0x04, 0xaa, 0x8a, 0x40, 0xda, 0x00, 0xf9, 0x71, + 0xcf, 0x40, 0x2b, 0xaa, 0x86, 0x1e, 0x9d, 0x14, 0xa4, 0xac, 0xdf, 0xe3, + 0xae, 0xe7, 0x6d, 0x2c, 0x24, 0x52, 0xb4, 0x93, 0xbf, 0x7e, 0x87, 0x69, + 0xa5, 0x6b, 0x10, 0x6a, 0x50, 0x2b, 0x09, 0x62, 0xf3, 0x58, 0x9f, 0x91, + 0x4f, 0xa5, 0x69, 0x57, 0x98, 0xd9, 0x6b, 0x36, 0xba, 0x73, 0x2b, 0xda, + 0xf9, 0x91, 0x95, 0xce, 0x3e, 0x5c, 0xf5, 0xfa, 0xd7, 0xa2, 0xd9, 0x5c, + 0x79, 0xfa, 0x65, 0xbd, 0xcb, 0x12, 0x7c, 0xc8, 0x56, 0x42, 0x71, 0xd7, + 0x23, 0x35, 0xe6, 0xe3, 0x30, 0xae, 0x8c, 0xae, 0x96, 0x8c, 0xf3, 0xea, + 0xc1, 0x45, 0xb6, 0x9a, 0x6a, 0xfd, 0x0a, 0xda, 0x85, 0xe5, 0xfd, 0xbd, + 0xc2, 0xa5, 0xad, 0x9f, 0x9c, 0x85, 0x72, 0x5b, 0x07, 0x83, 0x93, 0xc5, + 0x15, 0x8f, 0xa8, 0x78, 0x82, 0x67, 0xb8, 0x53, 0x63, 0x33, 0x24, 0x5b, + 0x79, 0x0c, 0x83, 0xae, 0x4f, 0xae, 0x7d, 0xa8, 0xaa, 0x85, 0x09, 0x72, + 0xab, 0xc5, 0x7e, 0x27, 0x0c, 0xaa, 0x2b, 0xee, 0xce, 0x42, 0xd2, 0xfa, + 0x6b, 0x34, 0x02, 0x3b, 0x77, 0x57, 0x03, 0x05, 0xd4, 0x90, 0x48, 0xfc, + 0xaa, 0x54, 0xd4, 0x24, 0x92, 0x55, 0x53, 0x6c, 0xe3, 0x71, 0x00, 0x92, + 0x7a, 0x7e, 0x95, 0x66, 0xda, 0x46, 0x96, 0xd9, 0x24, 0x6c, 0x64, 0x8e, + 0x71, 0x52, 0xd7, 0xad, 0x39, 0xc3, 0x99, 0xde, 0x3a, 0xfa, 0xb3, 0x95, + 0x27, 0x6d, 0xcb, 0xba, 0x7e, 0xa3, 0x25, 0x85, 0xc2, 0xc9, 0xf3, 0x3a, + 0x00, 0x7f, 0x77, 0xbf, 0x03, 0x9a, 0xd9, 0x4f, 0x12, 0xc9, 0x29, 0x22, + 0x3d, 0x3d, 0x9f, 0x1d, 0x76, 0xc9, 0x9f, 0xfd, 0x96, 0xb9, 0x9a, 0x75, + 0xa6, 0xbe, 0xba, 0x64, 0xb2, 0x08, 0xa4, 0x50, 0xc7, 0xe5, 0x60, 0xc8, + 0x4f, 0x4a, 0xe2, 0x9e, 0x1d, 0x54, 0xd5, 0x46, 0xec, 0xda, 0x35, 0x1c, + 0x74, 0xb9, 0xdc, 0x58, 0xdd, 0x1d, 0x42, 0xd5, 0xda, 0x6b, 0x63, 0x17, + 0xcd, 0xb7, 0x63, 0xf3, 0x91, 0x80, 0x73, 0xc8, 0xa6, 0x5e, 0xe9, 0x8b, + 0x73, 0x08, 0x48, 0x1c, 0x5b, 0x38, 0x6c, 0x97, 0x8d, 0x39, 0x23, 0x9e, + 0x38, 0xc7, 0xf9, 0x15, 0xce, 0x45, 0xe2, 0xab, 0xb9, 0xd4, 0xb4, 0x6d, + 0x13, 0x00, 0x71, 0xf7, 0x08, 0xa7, 0xff, 0x00, 0xc2, 0x49, 0x7f, 0xff, + 0x00, 0x4c, 0xbf, 0xef, 0x9f, 0xfe, 0xbd, 0x72, 0x3c, 0x35, 0x58, 0xcb, + 0x4d, 0x0d, 0x7d, 0xac, 0x1a, 0xd4, 0xdf, 0xd2, 0xf4, 0xcf, 0xec, 0xd5, + 0x94, 0x19, 0xbc, 0xdf, 0x30, 0x83, 0x9d, 0xb8, 0xc7, 0xeb, 0x5a, 0x15, + 0x5a, 0xca, 0xfa, 0x0b, 0xe8, 0xcb, 0x43, 0x26, 0xf2, 0xb8, 0xdd, 0xf2, + 0x91, 0x83, 0xf8, 0xd5, 0x9a, 0xe5, 0x9b, 0x93, 0x93, 0x72, 0xdc, 0xda, + 0x36, 0xb6, 0x81, 0x45, 0x14, 0x54, 0x0c, 0x29, 0x19, 0x55, 0xd4, 0xab, + 0x28, 0x65, 0x23, 0x04, 0x11, 0x90, 0x45, 0x2d, 0x14, 0xc0, 0xa8, 0xfa, + 0x5e, 0x9f, 0x22, 0xed, 0x7b, 0x1b, 0x66, 0x5f, 0x43, 0x0a, 0x9f, 0xe9, + 0x4c, 0x1a, 0x2e, 0x94, 0xa4, 0x11, 0xa6, 0x59, 0x82, 0x39, 0x04, 0x40, + 0xbf, 0xe1, 0x57, 0xab, 0x9d, 0xf1, 0x5e, 0xb5, 0x77, 0xa3, 0xc5, 0x6a, + 0xd6, 0x9e, 0x5e, 0xe9, 0x59, 0x81, 0xde, 0xb9, 0xe9, 0x8a, 0xda, 0x8a, + 0xa9, 0x56, 0x6a, 0x11, 0x7a, 0xbf, 0x31, 0xc6, 0x37, 0x76, 0x47, 0x42, + 0xcc, 0xa8, 0xa5, 0x98, 0x80, 0x07, 0x52, 0x4e, 0x2b, 0x90, 0xd6, 0xbc, + 0x44, 0xd2, 0x5d, 0xcb, 0x60, 0x91, 0x18, 0x52, 0x27, 0x04, 0x5c, 0x09, + 0x78, 0x7e, 0x3a, 0x74, 0xf7, 0xf5, 0xed, 0x55, 0xa1, 0xf1, 0x06, 0xa1, + 0x78, 0x3e, 0xc1, 0x78, 0x22, 0x59, 0xe6, 0x3f, 0x2a, 0x2a, 0xf5, 0x1f, + 0x5c, 0xe3, 0xb1, 0xaa, 0x3a, 0xa4, 0x50, 0x24, 0x7e, 0x5d, 0xe9, 0x28, + 0x15, 0xc7, 0x4e, 0x79, 0xc1, 0xf4, 0xae, 0xfc, 0x3e, 0x0f, 0x92, 0x7f, + 0xbc, 0x57, 0xed, 0x6f, 0xcf, 0xcc, 0xee, 0x8e, 0x01, 0xca, 0x9b, 0x72, + 0x76, 0x66, 0x15, 0xa8, 0x7f, 0xed, 0x28, 0x52, 0x46, 0x68, 0xd2, 0x49, + 0x94, 0x31, 0x6e, 0x84, 0x13, 0xc9, 0x35, 0xaf, 0xae, 0xea, 0x96, 0xf6, + 0x56, 0xcf, 0xa6, 0xc2, 0xb1, 0x6d, 0x05, 0x58, 0x5c, 0xa3, 0x80, 0x3d, + 0x71, 0x81, 0xfe, 0x35, 0x9e, 0x90, 0x4f, 0xab, 0x5b, 0xcc, 0x21, 0x4d, + 0xf7, 0x28, 0xa5, 0x6d, 0xd4, 0x10, 0x03, 0x31, 0x1f, 0x28, 0x39, 0xf7, + 0xc5, 0x64, 0xdd, 0x78, 0x37, 0xc7, 0x17, 0x90, 0x18, 0x65, 0xd2, 0x13, + 0x61, 0x20, 0xf1, 0x3c, 0x43, 0xff, 0x00, 0x67, 0xaf, 0x67, 0x9a, 0x8b, + 0x9a, 0xf6, 0xb2, 0x49, 0xae, 0x8d, 0xd8, 0x85, 0x89, 0xab, 0x4e, 0x3c, + 0x9c, 0xbb, 0xf5, 0xff, 0x00, 0x22, 0x99, 0x80, 0x23, 0x4d, 0x3d, 0xcd, + 0xe8, 0x99, 0x64, 0xcb, 0x46, 0xb2, 0x1e, 0x13, 0xbf, 0x19, 0x35, 0x6f, + 0xc3, 0xf7, 0x17, 0x9f, 0xf0, 0x87, 0xdf, 0x5d, 0x84, 0x9e, 0xe1, 0xa3, + 0x9c, 0x80, 0x72, 0x49, 0xe8, 0x9c, 0x67, 0x9f, 0x5a, 0x63, 0x78, 0x07, + 0xc6, 0x17, 0x22, 0xda, 0x0b, 0x8d, 0x24, 0x08, 0x62, 0x20, 0x65, 0x6e, + 0x22, 0xce, 0xde, 0x01, 0xfe, 0x2f, 0x4a, 0xf5, 0xcd, 0x1f, 0xc2, 0xda, + 0x76, 0x87, 0xa4, 0x4d, 0xa6, 0x5a, 0x79, 0xdf, 0x67, 0x9a, 0x43, 0x23, + 0x6f, 0x7c, 0xb6, 0x48, 0x03, 0xae, 0x3f, 0xd9, 0x15, 0x96, 0x37, 0x1d, + 0x46, 0x9c, 0x52, 0x8b, 0x52, 0x77, 0xe9, 0xe4, 0x72, 0x4b, 0x9b, 0x77, + 0x2b, 0x9e, 0x61, 0xa6, 0x78, 0xb6, 0xe2, 0x35, 0x11, 0x5c, 0x69, 0xf2, + 0xdb, 0x85, 0x53, 0xfb, 0xe9, 0x25, 0x2b, 0xb8, 0xe7, 0xa7, 0x2b, 0xfe, + 0x71, 0x4f, 0xbc, 0xb9, 0x8a, 0x12, 0xb8, 0xd4, 0x52, 0x51, 0x20, 0x24, + 0x81, 0x20, 0xe3, 0xdb, 0xad, 0x77, 0x1e, 0x24, 0xf0, 0x4d, 0xa6, 0xa9, + 0xa7, 0x47, 0x04, 0x49, 0x33, 0xb2, 0xca, 0x1f, 0x02, 0x40, 0x3b, 0x11, + 0xdf, 0xeb, 0x5c, 0xbf, 0xfc, 0x2a, 0xc8, 0xff, 0x00, 0xe7, 0xda, 0xe3, + 0xfe, 0xff, 0x00, 0xa5, 0x67, 0x47, 0x1b, 0x85, 0x7e, 0xff, 0x00, 0xc3, + 0xe5, 0xff, 0x00, 0x0e, 0x6b, 0x3c, 0x5b, 0x9c, 0x39, 0x2a, 0xab, 0xff, + 0x00, 0x5e, 0x47, 0x3d, 0x35, 0xd9, 0xd8, 0x7e, 0xc9, 0x19, 0xba, 0x97, + 0xb4, 0x51, 0x1c, 0xb1, 0xfc, 0x06, 0x6b, 0xd6, 0xfc, 0x31, 0x67, 0x34, + 0x1a, 0x3d, 0xac, 0xf3, 0xca, 0xf9, 0x9a, 0xda, 0x36, 0x30, 0xb8, 0x23, + 0xca, 0xf9, 0x41, 0x23, 0x9f, 0x4c, 0xe3, 0xa0, 0xe9, 0x5c, 0x86, 0x99, + 0xe0, 0xe6, 0xf0, 0xad, 0xf2, 0xea, 0xb0, 0x43, 0x22, 0xbc, 0x60, 0xa8, + 0x32, 0x48, 0xac, 0x3e, 0x61, 0x8e, 0x82, 0xb7, 0x1b, 0xc4, 0x57, 0xcc, + 0xa5, 0x4f, 0x95, 0x82, 0x31, 0xf7, 0x6b, 0x9f, 0x1f, 0x5b, 0xeb, 0x29, + 0x46, 0x96, 0xdd, 0xce, 0x69, 0xd5, 0x85, 0x92, 0x4a, 0xd6, 0x37, 0xae, + 0xe6, 0xd3, 0xed, 0xad, 0x64, 0x99, 0x63, 0xb6, 0x91, 0x94, 0x64, 0x20, + 0xdb, 0x93, 0x45, 0x71, 0x74, 0x57, 0x34, 0x30, 0xd1, 0x4b, 0x5d, 0x4e, + 0x77, 0x55, 0xbd, 0x8e, 0x79, 0x6e, 0x66, 0x45, 0x0a, 0xb2, 0xb0, 0x03, + 0xa0, 0x06, 0x97, 0xed, 0x77, 0x1f, 0xf3, 0xd9, 0xff, 0x00, 0x3a, 0x28, + 0xaf, 0xa5, 0xe4, 0x8f, 0x63, 0x8e, 0xec, 0x96, 0x0b, 0xe9, 0x23, 0x94, + 0x34, 0x8e, 0xee, 0xbe, 0x99, 0xa9, 0x5a, 0xf2, 0xcd, 0x98, 0xb1, 0xb6, + 0xc9, 0x27, 0x24, 0xe0, 0x51, 0x45, 0x66, 0xe8, 0x41, 0xbb, 0xec, 0x1c, + 0xcc, 0xbd, 0x65, 0x24, 0x52, 0x42, 0x4c, 0x51, 0xec, 0x5d, 0xd8, 0xc7, + 0xbd, 0x69, 0xe9, 0xf3, 0xdb, 0x5b, 0xdc, 0x33, 0xdd, 0x41, 0xe7, 0x21, + 0x5c, 0x05, 0xc7, 0x43, 0x91, 0xcd, 0x14, 0x57, 0x93, 0x88, 0x82, 0xe7, + 0x71, 0x37, 0x83, 0xd1, 0x33, 0xb4, 0xb6, 0xb7, 0x82, 0x08, 0xf3, 0x04, + 0x4b, 0x18, 0x70, 0x09, 0x0a, 0x31, 0x53, 0xd1, 0x45, 0x78, 0x0d, 0xdd, + 0xea, 0x77, 0xa0, 0xa2, 0x8a, 0x29, 0x0c, 0x28, 0xa2, 0x8a, 0x00, 0xad, + 0x7d, 0x78, 0x96, 0x36, 0xad, 0x3b, 0xab, 0x32, 0x82, 0x06, 0x07, 0x5e, + 0x6b, 0xc8, 0x2f, 0xbc, 0x43, 0x36, 0xb5, 0xad, 0xde, 0xdb, 0xb4, 0x93, + 0x18, 0xe0, 0xb8, 0x71, 0x1a, 0xc8, 0xd9, 0x0a, 0x37, 0x11, 0xc7, 0xe5, + 0x45, 0x15, 0xef, 0x64, 0xf4, 0xe2, 0xd4, 0xa6, 0xd6, 0xa5, 0xd1, 0x7f, + 0xbc, 0xb1, 0xb1, 0x06, 0x95, 0x7d, 0x2d, 0xec, 0x4e, 0xb7, 0x6a, 0xb3, + 0x0e, 0x15, 0xf2, 0x72, 0x29, 0x2f, 0xb4, 0x9d, 0x41, 0xe7, 0x78, 0xee, + 0x2f, 0x04, 0xa4, 0x1c, 0x92, 0x49, 0x3c, 0xd1, 0x45, 0x6d, 0xf5, 0x99, + 0xdf, 0xa7, 0xdc, 0x7b, 0x90, 0xc1, 0x52, 0x82, 0xba, 0xbf, 0xde, 0xc8, + 0xfc, 0x39, 0x76, 0xb6, 0xda, 0xac, 0x10, 0x32, 0x92, 0x64, 0xb8, 0x8d, + 0x41, 0x1d, 0xbe, 0x6c, 0x57, 0xaa, 0xd1, 0x45, 0x71, 0xe6, 0xf1, 0x4a, + 0xa4, 0x5f, 0x74, 0x79, 0x18, 0x89, 0x37, 0x65, 0xd8, 0xa5, 0xa8, 0xea, + 0x51, 0xe9, 0xa9, 0x1b, 0x48, 0x8c, 0xfb, 0xc9, 0x03, 0x6d, 0x3b, 0x4f, + 0xbf, 0x4d, 0x46, 0xdd, 0xa6, 0x8d, 0x19, 0x42, 0xb6, 0xdc, 0x37, 0xd0, + 0x1f, 0xeb, 0x45, 0x15, 0xc0, 0xe9, 0xc7, 0xd8, 0xf3, 0xf5, 0x38, 0xb9, + 0x9f, 0x3f, 0x29, 0x6e, 0x8a, 0x28, 0xae, 0x63, 0x53, 0x9e, 0xf1, 0x0d, + 0xbd, 0xd7, 0x97, 0x24, 0xff, 0x00, 0x68, 0xff, 0x00, 0x46, 0xf9, 0x47, + 0x95, 0x93, 0xd6, 0xb9, 0xaa, 0x28, 0xaf, 0x53, 0x0a, 0xef, 0x4c, 0xe4, + 0xaa, 0xad, 0x20, 0xa2, 0x8a, 0x2b, 0xa4, 0xcc, 0xff, 0xd9 +}; +unsigned int dog_200_200_jpg_len = 10366; + +/* sicknesses palette from idiocracy, landscape ratio */ +const unsigned char palette_300x128_jpg[] = +{ + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x01, 0x01, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, 0x07, 0x07, 0x09, + 0x09, 0x08, 0x0a, 0x0c, 0x14, 0x0d, 0x0c, 0x0b, 0x0b, 0x0c, 0x19, 0x12, + 0x13, 0x0f, 0x14, 0x1d, 0x1a, 0x1f, 0x1e, 0x1d, 0x1a, 0x1c, 0x1c, 0x20, + 0x24, 0x2e, 0x27, 0x20, 0x22, 0x2c, 0x23, 0x1c, 0x1c, 0x28, 0x37, 0x29, + 0x2c, 0x30, 0x31, 0x34, 0x34, 0x34, 0x1f, 0x27, 0x39, 0x3d, 0x38, 0x32, + 0x3c, 0x2e, 0x33, 0x34, 0x32, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x09, 0x09, + 0x09, 0x0c, 0x0b, 0x0c, 0x18, 0x0d, 0x0d, 0x18, 0x32, 0x21, 0x1c, 0x21, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0x80, 0x01, 0x2c, 0x03, + 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, + 0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, + 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, + 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, + 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, + 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, + 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, + 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, + 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, + 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, + 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, + 0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, + 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, + 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, + 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, + 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, + 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, + 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, + 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00, + 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xef, + 0x7c, 0x11, 0x6a, 0xcf, 0xaa, 0xbd, 0xce, 0x0e, 0xc8, 0xa3, 0xdb, 0x9c, + 0x71, 0x93, 0x5c, 0x0f, 0xc5, 0x1d, 0x35, 0xec, 0xbc, 0x6b, 0x3c, 0xd8, + 0x3e, 0x55, 0xe4, 0x69, 0x34, 0x64, 0x0e, 0xf8, 0xda, 0xc3, 0xf4, 0xcf, + 0xe3, 0x5e, 0xe1, 0xa5, 0x69, 0x90, 0xe9, 0x56, 0x29, 0x6d, 0x0f, 0x6e, + 0x59, 0xb1, 0xcb, 0x1f, 0x5a, 0xcb, 0xf1, 0x7f, 0x84, 0xed, 0x7c, 0x55, + 0xa4, 0xfd, 0x9a, 0x52, 0x22, 0xb8, 0x8b, 0x2d, 0x04, 0xd8, 0xce, 0xc6, + 0xf7, 0xf6, 0x35, 0xc3, 0x97, 0xe1, 0x9e, 0x1a, 0x82, 0x83, 0xdf, 0x76, + 0x76, 0x63, 0xb1, 0x2b, 0x11, 0x59, 0xcd, 0x6d, 0xb2, 0x3e, 0x70, 0xed, + 0x9e, 0xd4, 0x70, 0x78, 0x3d, 0x2b, 0x5b, 0x5b, 0xf0, 0xd6, 0xad, 0xa0, + 0x5d, 0x3c, 0x37, 0xf6, 0x92, 0x2a, 0xe7, 0xe5, 0x99, 0x41, 0x64, 0x71, + 0xec, 0x7a, 0x0f, 0xa5, 0x64, 0x17, 0x50, 0x70, 0x58, 0x67, 0xd3, 0x35, + 0xdc, 0x71, 0x9d, 0x87, 0x86, 0x3e, 0x22, 0x6a, 0xde, 0x1d, 0x8d, 0x6d, + 0xa4, 0x51, 0x7d, 0x64, 0x3a, 0x43, 0x2b, 0x60, 0xa7, 0xfb, 0xac, 0x7b, + 0x7b, 0x1a, 0xef, 0xa2, 0xf8, 0xa9, 0xe1, 0x6d, 0x42, 0x15, 0x1a, 0x85, + 0xb4, 0xf1, 0x36, 0x39, 0x49, 0x20, 0x12, 0xa8, 0xfc, 0x46, 0x7f, 0x95, + 0x78, 0x86, 0xf4, 0xfe, 0xf2, 0xfe, 0x74, 0x6f, 0x4f, 0xef, 0x2f, 0xe7, + 0x40, 0x1e, 0xe2, 0xff, 0x00, 0x14, 0x7c, 0x23, 0x63, 0x19, 0x36, 0x30, + 0x4e, 0xcc, 0x78, 0xdb, 0x0d, 0xa8, 0x8f, 0x3f, 0x89, 0xc5, 0x70, 0xfe, + 0x25, 0xf8, 0x9b, 0xab, 0xeb, 0xb1, 0x3d, 0xb5, 0xa2, 0x8d, 0x3e, 0xcd, + 0xf2, 0x08, 0x46, 0xcc, 0x8c, 0x3d, 0xcf, 0xf4, 0x15, 0xc3, 0x6f, 0x4f, + 0xef, 0x2f, 0xe7, 0x46, 0xf4, 0xfe, 0xf2, 0xfe, 0x74, 0x00, 0xee, 0x3b, + 0x63, 0xd7, 0xf1, 0xa2, 0x9b, 0xbd, 0x3f, 0xbc, 0xbf, 0x9d, 0x1b, 0xd3, + 0xfb, 0xcb, 0xf9, 0xd0, 0x03, 0xa9, 0x09, 0x00, 0x67, 0x8e, 0x29, 0x63, + 0x06, 0x57, 0x0b, 0x18, 0x2e, 0xc4, 0xe0, 0x2a, 0xf2, 0x49, 0xf4, 0xaf, + 0x42, 0xf0, 0x67, 0xc3, 0x6b, 0xed, 0x4e, 0xe6, 0x1b, 0xfd, 0x62, 0x17, + 0xb7, 0xb0, 0x42, 0x18, 0x44, 0xdc, 0x49, 0x36, 0x3d, 0xbb, 0x2f, 0xaf, + 0xad, 0x00, 0x75, 0xfe, 0x0a, 0xd0, 0xa4, 0x4f, 0x86, 0x92, 0x5b, 0xc8, + 0x18, 0x4b, 0x7a, 0xb2, 0x4e, 0x14, 0x8c, 0x11, 0x9e, 0x07, 0xf2, 0x15, + 0xc5, 0x15, 0x2a, 0xcc, 0xac, 0x08, 0x65, 0x62, 0x08, 0xf7, 0xaf, 0x72, + 0x44, 0x11, 0xa2, 0xc6, 0x8a, 0x15, 0x55, 0x76, 0x80, 0x3b, 0x7b, 0x57, + 0x11, 0xe2, 0xaf, 0x08, 0xc9, 0x34, 0xcf, 0x7f, 0xa6, 0xa6, 0xe2, 0x79, + 0x96, 0x10, 0x39, 0x27, 0xd5, 0x47, 0x7a, 0xf3, 0x33, 0x0c, 0x3c, 0xa6, + 0x94, 0xe3, 0xd0, 0xc6, 0xac, 0x1b, 0xd5, 0x1c, 0x22, 0xb3, 0x23, 0x87, + 0x43, 0x86, 0x53, 0x90, 0x7d, 0x0d, 0x7a, 0x92, 0xcb, 0x1f, 0x88, 0xfc, + 0x1c, 0xf9, 0xfb, 0xd2, 0x43, 0x83, 0xec, 0xe0, 0x71, 0xfa, 0xe2, 0xbc, + 0xc2, 0x58, 0x9e, 0x09, 0x0c, 0x73, 0x23, 0x46, 0xe3, 0xa8, 0x71, 0x83, + 0xfa, 0xd5, 0xad, 0x33, 0x5c, 0xbd, 0xd1, 0xe4, 0x2d, 0x69, 0x71, 0x85, + 0x3d, 0x63, 0x6e, 0x54, 0xd7, 0x9d, 0x86, 0xac, 0xa9, 0x36, 0xa5, 0xb3, + 0xd0, 0xc6, 0x12, 0xe5, 0xdc, 0xa2, 0x41, 0x52, 0x55, 0xb8, 0x61, 0xc1, + 0xfa, 0xe6, 0xb4, 0x34, 0x3b, 0xe5, 0xd3, 0x75, 0xab, 0x6b, 0xb9, 0x07, + 0xee, 0xd1, 0xbe, 0x6c, 0x0e, 0x40, 0x23, 0x04, 0xd5, 0x29, 0xae, 0x1a, + 0x79, 0xde, 0x67, 0x65, 0xde, 0xe4, 0x93, 0x8e, 0x07, 0x34, 0xc2, 0xcb, + 0x8e, 0x48, 0xfc, 0xeb, 0x9d, 0x4b, 0x96, 0x57, 0x5d, 0x08, 0xbd, 0x9d, + 0xd1, 0xec, 0x47, 0x5f, 0xd2, 0x4d, 0xaf, 0x9e, 0x6f, 0xe0, 0xdb, 0xb7, + 0x3b, 0x7c, 0xc1, 0xbb, 0xf2, 0xce, 0x6b, 0xca, 0xf5, 0x8b, 0xd5, 0xd4, + 0xf5, 0x7b, 0x9b, 0xb4, 0x52, 0x16, 0x47, 0xf9, 0x73, 0xc7, 0x15, 0x43, + 0x70, 0xe9, 0x9e, 0x3e, 0xb4, 0xbb, 0x97, 0xd4, 0x7e, 0x75, 0xd3, 0x88, + 0xc5, 0xca, 0xba, 0x49, 0xf4, 0x2e, 0x75, 0x1c, 0xb4, 0x2c, 0xd8, 0xda, + 0x35, 0xf5, 0xfc, 0x16, 0xab, 0xd6, 0x49, 0x02, 0x9f, 0xa6, 0x79, 0xaf, + 0x45, 0xf1, 0x8d, 0xf8, 0xd3, 0x7c, 0x3f, 0xf6, 0x58, 0x48, 0x0d, 0x36, + 0x22, 0x50, 0x3a, 0x85, 0xc7, 0x35, 0xe7, 0x5a, 0x7e, 0xa3, 0x2e, 0x97, + 0x78, 0xb7, 0x56, 0xe5, 0x3c, 0xd5, 0xce, 0x37, 0x72, 0x39, 0xa4, 0xbe, + 0xd4, 0x6e, 0xb5, 0x29, 0x84, 0xd7, 0x77, 0x3e, 0x6b, 0x83, 0xc0, 0xcf, + 0x02, 0x95, 0x2a, 0xea, 0x9d, 0x29, 0x45, 0x6e, 0xc2, 0x32, 0x51, 0x8b, + 0xee, 0x41, 0xc8, 0xf7, 0xcd, 0x5c, 0xd2, 0x6d, 0x1a, 0xff, 0x00, 0x56, + 0xb5, 0xb6, 0x50, 0x4e, 0xe7, 0x56, 0x6c, 0x0f, 0xe1, 0x07, 0x9a, 0x8a, + 0xd2, 0xca, 0xe6, 0xfe, 0x41, 0x1d, 0xb5, 0xbc, 0x93, 0x12, 0x71, 0xf2, + 0xa9, 0x23, 0xf1, 0xc7, 0x4a, 0xf4, 0x9f, 0x0b, 0x78, 0x60, 0x68, 0xd1, + 0x34, 0xf7, 0x24, 0x3d, 0xe4, 0x83, 0x04, 0x8e, 0x88, 0x3d, 0x05, 0x18, + 0x5c, 0x3c, 0xaa, 0xcd, 0x69, 0xa0, 0x53, 0x83, 0x93, 0x20, 0xf1, 0x9d, + 0xb1, 0x68, 0x6d, 0xae, 0x40, 0x38, 0x8f, 0x28, 0x78, 0xf5, 0xc5, 0x71, + 0xf5, 0xea, 0xb7, 0x76, 0xb1, 0xde, 0x5b, 0xc9, 0x04, 0xca, 0x19, 0x1c, + 0x11, 0xf4, 0xae, 0x03, 0x55, 0xd0, 0x2e, 0xb4, 0xe9, 0x19, 0x82, 0x99, + 0x2d, 0xfa, 0x87, 0x50, 0x4e, 0x07, 0xbd, 0x7d, 0x34, 0x6d, 0xb1, 0xf2, + 0x3c, 0x47, 0x96, 0x55, 0x55, 0x9e, 0x2a, 0x0a, 0xf1, 0x7b, 0xf9, 0x33, + 0x26, 0xb6, 0x2c, 0x2f, 0x8d, 0x9d, 0xb1, 0xb9, 0x95, 0xf2, 0x23, 0x05, + 0x6d, 0xe1, 0x1c, 0x02, 0xe7, 0xab, 0x11, 0xdc, 0x0a, 0xc7, 0xe9, 0x4e, + 0x2e, 0x4a, 0x85, 0x27, 0x81, 0xd0, 0x7a, 0x53, 0x3e, 0x73, 0x0d, 0x88, + 0x74, 0x25, 0xcf, 0x1d, 0xfa, 0x7f, 0x5e, 0x5b, 0xfa, 0x9b, 0x1a, 0x96, + 0xa1, 0xb5, 0x6c, 0xa7, 0xb6, 0x7f, 0x2a, 0xe6, 0x48, 0xf7, 0xcc, 0xd1, + 0x1c, 0x6e, 0x6f, 0x71, 0xf9, 0xfe, 0x75, 0x59, 0x75, 0xed, 0x51, 0x7a, + 0x5e, 0x49, 0xf8, 0xe2, 0xb3, 0x89, 0xce, 0x32, 0x49, 0x20, 0x62, 0x8a, + 0x0d, 0x6a, 0xe3, 0xeb, 0xca, 0x6e, 0x50, 0x93, 0x8d, 0xed, 0xb3, 0x6b, + 0xa7, 0xea, 0x69, 0xff, 0x00, 0xc2, 0x45, 0xab, 0x7f, 0xcf, 0xe3, 0x7f, + 0xdf, 0x23, 0xfc, 0x29, 0x8d, 0xae, 0xea, 0x8f, 0xd6, 0xf2, 0x4c, 0x7b, + 0x1c, 0x56, 0x7d, 0x14, 0x68, 0x43, 0xc7, 0xe2, 0x9e, 0xf5, 0x25, 0xf7, + 0xbf, 0xf3, 0x25, 0x9a, 0xea, 0xe2, 0xe1, 0xb3, 0x34, 0xf2, 0x39, 0xed, + 0xb8, 0xe6, 0xa2, 0xf7, 0x34, 0x51, 0x9f, 0x71, 0x4c, 0xe6, 0x94, 0xa5, + 0x27, 0x76, 0xee, 0x18, 0xcf, 0xe3, 0x5d, 0x3f, 0x83, 0x6d, 0x8b, 0xdd, + 0x4f, 0x70, 0xc0, 0xed, 0x54, 0xd8, 0x38, 0xee, 0x4d, 0x64, 0x69, 0xfa, + 0x35, 0xde, 0xa6, 0xe0, 0x47, 0x19, 0x58, 0xbb, 0xc8, 0xdc, 0x0f, 0xc2, + 0xbd, 0x0a, 0xc2, 0xc6, 0x2d, 0x3e, 0xcd, 0x20, 0x89, 0x78, 0x51, 0xc9, + 0xee, 0x4d, 0x4b, 0x67, 0xd2, 0xf0, 0xf6, 0x59, 0x56, 0xa5, 0x78, 0xe2, + 0x26, 0xad, 0x18, 0xfe, 0x2f, 0xc8, 0xf9, 0xc3, 0xe2, 0x9e, 0x96, 0xfa, + 0x6f, 0x8f, 0xaf, 0x9c, 0x83, 0xe5, 0xde, 0x11, 0x73, 0x1b, 0x63, 0x83, + 0x91, 0xce, 0x3d, 0x79, 0x06, 0xb8, 0xca, 0xfa, 0x7f, 0xc7, 0x7e, 0x0a, + 0xb7, 0xf1, 0x8e, 0x90, 0x61, 0x38, 0x8a, 0xfa, 0x1c, 0xb5, 0xb4, 0xf8, + 0xfb, 0xa7, 0xd0, 0xfb, 0x1a, 0xf9, 0xfb, 0x51, 0xf0, 0x57, 0x89, 0x34, + 0xdb, 0xe9, 0x2d, 0x66, 0xd2, 0x2f, 0x19, 0x90, 0xf0, 0xd0, 0xc2, 0x64, + 0x46, 0x1e, 0xa0, 0x81, 0x5c, 0x15, 0x69, 0xb5, 0x2b, 0xa3, 0xf6, 0x7c, + 0x06, 0x2e, 0x15, 0x69, 0x28, 0xb7, 0x66, 0x8f, 0xab, 0xf2, 0x3d, 0x69, + 0x09, 0x1c, 0xf3, 0x58, 0x5e, 0x1d, 0xd6, 0x0e, 0xa5, 0x68, 0x63, 0x94, + 0x8f, 0xb4, 0xc4, 0x30, 0x4f, 0xa8, 0xf5, 0xac, 0xdf, 0x1a, 0x6b, 0xed, + 0x61, 0x08, 0xd3, 0xed, 0x5b, 0xf7, 0xf3, 0x2e, 0x64, 0x60, 0x79, 0x55, + 0xfe, 0x86, 0xba, 0x2b, 0x55, 0x54, 0x60, 0xe5, 0x23, 0xe3, 0xb0, 0xf8, + 0xaa, 0x75, 0xe8, 0xaa, 0xd0, 0x7a, 0x33, 0x4f, 0x56, 0xf1, 0x36, 0x91, + 0x61, 0xba, 0x1b, 0x89, 0x84, 0xad, 0xd1, 0xa3, 0x8d, 0x43, 0xfe, 0x07, + 0xb7, 0xe7, 0x5c, 0xf3, 0x78, 0xaf, 0xc3, 0x65, 0xb2, 0x34, 0x5d, 0xc7, + 0xd4, 0xdb, 0xc6, 0x2b, 0x87, 0x24, 0x96, 0x2c, 0xc5, 0x89, 0x3c, 0x92, + 0x4e, 0x69, 0x32, 0x3d, 0x45, 0x78, 0xd3, 0xcc, 0x6b, 0x37, 0xa6, 0x82, + 0x75, 0xa5, 0xd0, 0xee, 0x7f, 0xe1, 0x2b, 0xf0, 0xef, 0xfd, 0x00, 0x97, + 0xfe, 0xfc, 0x47, 0x47, 0xfc, 0x25, 0x9e, 0x1c, 0xff, 0x00, 0xa0, 0x1a, + 0xff, 0x00, 0xdf, 0x88, 0xeb, 0x87, 0xa7, 0xc5, 0x04, 0xd3, 0xe7, 0xc9, + 0x89, 0xe4, 0xc7, 0x5d, 0x8a, 0x4e, 0x3f, 0x2a, 0x9f, 0xed, 0x0c, 0x47, + 0x47, 0xf8, 0x0b, 0xda, 0xcc, 0xed, 0x7f, 0xe1, 0x2b, 0xf0, 0xef, 0xfd, + 0x00, 0x97, 0xfe, 0xfc, 0x47, 0x47, 0xfc, 0x25, 0x7e, 0x1d, 0xff, 0x00, + 0xa0, 0x12, 0xff, 0x00, 0xdf, 0x88, 0xeb, 0x88, 0x92, 0x39, 0x21, 0x60, + 0x25, 0x46, 0x8c, 0xfa, 0x38, 0xc5, 0x26, 0x47, 0xad, 0x1f, 0xda, 0x18, + 0x8e, 0xff, 0x00, 0x80, 0x7b, 0x69, 0x9d, 0xc7, 0xfc, 0x25, 0x7e, 0x1d, + 0xff, 0x00, 0xa0, 0x12, 0xff, 0x00, 0xdf, 0x88, 0xe8, 0xff, 0x00, 0x84, + 0xaf, 0xc3, 0xbf, 0xf4, 0x03, 0x5f, 0xfb, 0xf1, 0x1d, 0x70, 0xf4, 0x51, + 0xfd, 0xa1, 0x5f, 0xb8, 0x7b, 0x69, 0x1e, 0x81, 0x69, 0xe3, 0x0f, 0x0f, + 0xc4, 0xe3, 0x66, 0x9e, 0xf6, 0xd9, 0x38, 0x2c, 0xb0, 0xa6, 0x3f, 0x4e, + 0x6b, 0xab, 0xb1, 0xd4, 0x6d, 0x75, 0x08, 0x3c, 0xeb, 0x5b, 0x84, 0x95, + 0x3d, 0x54, 0xf4, 0xfa, 0xfa, 0x57, 0x8a, 0x7e, 0x38, 0xab, 0x9a, 0x56, + 0xab, 0x73, 0xa4, 0x5e, 0x2d, 0xcd, 0xbb, 0xb0, 0xc1, 0x1b, 0xe3, 0xfe, + 0x16, 0x5e, 0xff, 0x00, 0x8d, 0x6b, 0x4b, 0x31, 0x9a, 0x76, 0xa9, 0xaa, + 0x2a, 0x35, 0x9d, 0xf5, 0x3d, 0xab, 0x23, 0xd6, 0xa1, 0xba, 0xba, 0xb7, + 0xb4, 0xb6, 0x79, 0xee, 0x66, 0x48, 0xa2, 0x41, 0xf3, 0x3b, 0xb6, 0x00, + 0xa8, 0x6d, 0x2f, 0xa2, 0xbb, 0xb0, 0x8e, 0xf1, 0x59, 0x44, 0x4e, 0x9b, + 0xf3, 0x9e, 0x9e, 0xb5, 0xe3, 0x7e, 0x2f, 0xf1, 0x44, 0xfa, 0xf6, 0xa4, + 0xe9, 0x1c, 0x8c, 0xb6, 0x31, 0x31, 0x11, 0x20, 0x38, 0x0d, 0xfe, 0xd1, + 0xaf, 0xa8, 0xcb, 0xf0, 0x72, 0xc6, 0x4f, 0xdd, 0x7e, 0xef, 0x56, 0x7b, + 0x79, 0x66, 0x5d, 0x3c, 0x7d, 0x4e, 0x54, 0xed, 0x15, 0xbb, 0xfe, 0xba, + 0x9d, 0xc5, 0xff, 0x00, 0xc4, 0x1f, 0x0e, 0xc6, 0xec, 0x9e, 0x54, 0x97, + 0x64, 0x71, 0x95, 0x88, 0x10, 0x7f, 0x13, 0x59, 0xff, 0x00, 0xf0, 0xb0, + 0xbc, 0x3c, 0x3f, 0xe6, 0x0d, 0x2f, 0xfd, 0xfa, 0x8e, 0xb9, 0x7d, 0x1f, + 0xc0, 0xda, 0xbe, 0xaf, 0x6e, 0x27, 0x11, 0x8b, 0x68, 0x5b, 0x95, 0x69, + 0xb2, 0x0b, 0x0f, 0x50, 0x07, 0x38, 0xaa, 0xba, 0xf7, 0x85, 0xb5, 0x1f, + 0x0f, 0x95, 0x7b, 0xa5, 0x57, 0x85, 0xce, 0x16, 0x68, 0xc9, 0x2b, 0x9f, + 0x4f, 0x6a, 0xf6, 0xa1, 0x96, 0xe5, 0x8e, 0xa7, 0xb2, 0xbd, 0xe5, 0xea, + 0x7d, 0x15, 0x3c, 0xaf, 0x28, 0x75, 0x3d, 0x87, 0x35, 0xe5, 0xea, 0x76, + 0x5f, 0xf0, 0xb0, 0xbc, 0x3d, 0xff, 0x00, 0x40, 0x69, 0x3f, 0xef, 0xd4, + 0x74, 0x7f, 0xc2, 0xc2, 0xf0, 0xf7, 0xfd, 0x01, 0xa4, 0xff, 0x00, 0xbf, + 0x51, 0xd7, 0x99, 0x51, 0x5d, 0x7f, 0xd8, 0x38, 0x1f, 0xe5, 0xfc, 0x4e, + 0xef, 0xf5, 0x77, 0x01, 0xfc, 0xaf, 0xef, 0x67, 0xa6, 0xff, 0x00, 0xc2, + 0xc2, 0xf0, 0xf7, 0xfd, 0x01, 0xa4, 0xff, 0x00, 0xbf, 0x51, 0xd1, 0xff, + 0x00, 0x0b, 0x0b, 0xc3, 0xdf, 0xf4, 0x06, 0x93, 0xfe, 0xfd, 0x47, 0x5e, + 0x65, 0x45, 0x1f, 0xd8, 0x38, 0x1f, 0xe5, 0xfc, 0x43, 0xfd, 0x5d, 0xc0, + 0x7f, 0x2b, 0xfb, 0xd9, 0xe9, 0xbf, 0xf0, 0xb0, 0xbc, 0x3d, 0xff, 0x00, + 0x40, 0x69, 0x3f, 0xef, 0xd4, 0x74, 0xa3, 0xe2, 0x17, 0x87, 0xbf, 0xe8, + 0x0d, 0x2f, 0xe1, 0x14, 0x7f, 0xe3, 0x5e, 0x63, 0x5d, 0x96, 0x99, 0xf0, + 0xe3, 0x55, 0xbf, 0xb4, 0x5b, 0x89, 0x65, 0x8a, 0xdb, 0x70, 0xca, 0xa3, + 0x82, 0x5b, 0x1e, 0xfe, 0x95, 0x85, 0x7c, 0xab, 0x2c, 0xa0, 0xaf, 0x57, + 0x4f, 0x99, 0xcd, 0x89, 0xca, 0x32, 0x9c, 0x34, 0x54, 0xab, 0x69, 0x7f, + 0x36, 0x76, 0xba, 0x57, 0x8e, 0x7c, 0x3d, 0x79, 0x2a, 0xc2, 0x92, 0x7d, + 0x91, 0x89, 0x18, 0x12, 0xa0, 0x41, 0xf9, 0xf4, 0xae, 0xb5, 0x5d, 0x59, + 0x43, 0x2b, 0x02, 0x08, 0xc8, 0x20, 0xf5, 0xaf, 0x03, 0xd7, 0x3c, 0x37, + 0xa9, 0x78, 0x7e, 0x50, 0x2e, 0xe3, 0x06, 0x26, 0x38, 0x49, 0x90, 0xe5, + 0x4f, 0xf8, 0x1a, 0xea, 0xfe, 0x1e, 0xf8, 0xa6, 0x65, 0xba, 0x5d, 0x1a, + 0xf6, 0x52, 0xd1, 0x3f, 0xfa, 0x87, 0x63, 0xca, 0xb7, 0xf7, 0x73, 0xef, + 0xda, 0xb8, 0x71, 0x79, 0x55, 0x25, 0x47, 0xdb, 0xe1, 0x5d, 0xe2, 0xba, + 0x7f, 0x91, 0xe6, 0x63, 0xb2, 0x4a, 0x4a, 0x87, 0xd6, 0x70, 0x72, 0xe6, + 0x8a, 0xe9, 0xfe, 0x47, 0xa9, 0x64, 0x7a, 0xd6, 0x3e, 0xb7, 0xe2, 0x2d, + 0x2b, 0x41, 0x84, 0x49, 0xa8, 0xdd, 0xa4, 0x5b, 0x81, 0xdb, 0x1f, 0x57, + 0x6f, 0xa2, 0xd4, 0x1e, 0x2d, 0xf1, 0x14, 0x7e, 0x1a, 0xd0, 0x66, 0xbf, + 0x3b, 0x5a, 0x53, 0xf2, 0x40, 0x87, 0xf8, 0x9c, 0xf4, 0xfc, 0x3d, 0x6b, + 0xe7, 0x7d, 0x47, 0x51, 0xba, 0xd5, 0x6f, 0x64, 0xbc, 0xbd, 0x95, 0xa5, + 0x9a, 0x42, 0x49, 0x66, 0x3f, 0xa7, 0xb5, 0x7c, 0xbe, 0x27, 0x15, 0xec, + 0xbd, 0xd5, 0xb9, 0x96, 0x49, 0x91, 0x3c, 0xc2, 0xf5, 0x2a, 0x3b, 0x41, + 0x7d, 0xef, 0xd0, 0xf5, 0xbb, 0x8f, 0x8a, 0x7e, 0x18, 0x12, 0x10, 0x9a, + 0x5d, 0xc4, 0xdc, 0xfd, 0xf3, 0x0a, 0x0c, 0xfe, 0x67, 0x35, 0x17, 0xfc, + 0x2d, 0x5f, 0x0d, 0xff, 0x00, 0xd0, 0x0e, 0xe3, 0xfe, 0xfd, 0xc7, 0xfe, + 0x35, 0xe3, 0xd5, 0xe8, 0x9f, 0x08, 0xec, 0x6d, 0x6f, 0x35, 0xab, 0xf3, + 0x73, 0x0c, 0x72, 0x88, 0xed, 0xc1, 0x0a, 0xeb, 0xb8, 0x72, 0xd5, 0xc7, + 0x4f, 0x15, 0x5a, 0xa4, 0xd4, 0x53, 0xb5, 0xcf, 0x77, 0x1d, 0xc3, 0x79, + 0x4e, 0x0f, 0x0f, 0x2a, 0xf2, 0xa6, 0xe5, 0xcb, 0xe7, 0xb9, 0xbb, 0xff, + 0x00, 0x0b, 0x57, 0xc3, 0x7f, 0xf4, 0x03, 0xb8, 0xff, 0x00, 0xbf, 0x71, + 0xff, 0x00, 0x8d, 0x1f, 0xf0, 0xb5, 0x7c, 0x37, 0xff, 0x00, 0x40, 0x3b, + 0x8f, 0xfb, 0xf7, 0x1f, 0xf8, 0xd7, 0xa0, 0xff, 0x00, 0x63, 0xe9, 0x47, + 0xa6, 0x9b, 0x67, 0xff, 0x00, 0x7e, 0x17, 0xfc, 0x29, 0x7f, 0xb1, 0xb4, + 0xbf, 0xfa, 0x06, 0x59, 0xff, 0x00, 0xdf, 0x85, 0xff, 0x00, 0x0a, 0xee, + 0xe4, 0xc4, 0x7f, 0x32, 0xfb, 0x8f, 0x97, 0xe7, 0xc9, 0x7f, 0xe8, 0x19, + 0xff, 0x00, 0xe0, 0x5f, 0xf0, 0x0f, 0x3d, 0xff, 0x00, 0x85, 0xab, 0xe1, + 0xbf, 0xfa, 0x01, 0xdc, 0x7f, 0xdf, 0xb8, 0xff, 0x00, 0xc6, 0x8f, 0xf8, + 0x5a, 0xbe, 0x1b, 0xff, 0x00, 0xa0, 0x1d, 0xc7, 0xfd, 0xfb, 0x8f, 0xfc, + 0x6b, 0xd0, 0xbf, 0xb1, 0xb4, 0xbf, 0xfa, 0x06, 0x59, 0xff, 0x00, 0xdf, + 0x85, 0xff, 0x00, 0x0a, 0x43, 0xa3, 0xe9, 0x58, 0x23, 0xfb, 0x36, 0xcf, + 0x3f, 0xf5, 0xc1, 0x7f, 0xc2, 0x8e, 0x4c, 0x47, 0xf3, 0x2f, 0xb8, 0x3d, + 0xa6, 0x4b, 0xff, 0x00, 0x40, 0xcf, 0xff, 0x00, 0x02, 0xff, 0x00, 0x80, + 0x79, 0xf7, 0xfc, 0x2d, 0x5f, 0x0d, 0xff, 0x00, 0xd0, 0x0e, 0x7f, 0xfb, + 0xf7, 0x1f, 0xf8, 0xd3, 0xe2, 0xf8, 0xa9, 0xe1, 0x96, 0x70, 0x1b, 0x48, + 0xb8, 0x8b, 0x9e, 0xa2, 0x28, 0xce, 0x3f, 0x5a, 0xe2, 0x7e, 0x25, 0x5a, + 0x41, 0x67, 0xe3, 0x5b, 0xb8, 0xed, 0xd1, 0x63, 0x43, 0x1c, 0x6d, 0xb1, + 0x46, 0x00, 0x3b, 0x47, 0x41, 0x5c, 0x8d, 0x70, 0x4f, 0x17, 0x5a, 0x12, + 0x71, 0xbe, 0xc7, 0xd6, 0x61, 0x78, 0x63, 0x29, 0xc4, 0xd0, 0x8d, 0x65, + 0x4e, 0xdc, 0xc9, 0x3d, 0xfb, 0x9f, 0x4a, 0xe8, 0x5e, 0x2a, 0xd1, 0x35, + 0xf4, 0x03, 0x4f, 0xbb, 0x46, 0x90, 0x7f, 0xcb, 0x17, 0xf9, 0x5c, 0x0f, + 0xf7, 0x4f, 0xf4, 0xad, 0xdc, 0x8f, 0x5a, 0xf9, 0x4a, 0xde, 0xe2, 0x6b, + 0x4b, 0x88, 0xe7, 0xb7, 0x95, 0xa3, 0x96, 0x33, 0x95, 0x75, 0x24, 0x10, + 0x6b, 0xe8, 0x1f, 0x02, 0xf8, 0xa3, 0xfe, 0x12, 0x7d, 0x10, 0x3c, 0xd8, + 0xfb, 0x6d, 0xbe, 0x12, 0x70, 0x3b, 0xfa, 0x37, 0xe3, 0x8a, 0xec, 0xc3, + 0x62, 0xbd, 0xab, 0xe5, 0x96, 0xe7, 0x85, 0x9d, 0xe4, 0x0f, 0x01, 0x1f, + 0x6d, 0x45, 0xde, 0x1e, 0x7b, 0xaf, 0xf8, 0x07, 0x56, 0x4e, 0x05, 0x66, + 0xdc, 0x6b, 0x5a, 0x65, 0xbc, 0xcd, 0x1c, 0xb7, 0x68, 0x1c, 0x75, 0x03, + 0x9c, 0x7e, 0x55, 0x95, 0xe2, 0x9d, 0x65, 0xad, 0x90, 0x59, 0xdb, 0xb1, + 0x12, 0xb8, 0xcb, 0xb0, 0x3d, 0x05, 0x71, 0x67, 0x2c, 0x49, 0x3c, 0x93, + 0xd4, 0x93, 0x5d, 0xd6, 0x3f, 0x32, 0xcd, 0xb8, 0x87, 0xea, 0xb5, 0x7d, + 0x8d, 0x18, 0xa6, 0xd6, 0xf7, 0xfc, 0x8d, 0xcf, 0x09, 0x48, 0xcb, 0xad, + 0x84, 0x1f, 0x75, 0x90, 0x82, 0x3e, 0x95, 0x87, 0xe2, 0xd9, 0x5e, 0x4f, + 0x13, 0xde, 0x16, 0x3f, 0x74, 0xaa, 0x8f, 0x60, 0x05, 0x6d, 0x78, 0x53, + 0xfe, 0x43, 0xe9, 0xfe, 0xe3, 0x7f, 0x2a, 0xc2, 0xf1, 0x57, 0xfc, 0x8c, + 0xd7, 0xff, 0x00, 0xf5, 0xd3, 0xfa, 0x57, 0x99, 0x9a, 0xbf, 0xdd, 0xa5, + 0xe6, 0x2e, 0x1e, 0x6d, 0xe0, 0x3f, 0xed, 0xe7, 0xf9, 0x22, 0x8d, 0xbe, + 0x9d, 0x7b, 0x77, 0xcd, 0xbd, 0xb4, 0xb2, 0xff, 0x00, 0xbb, 0x57, 0xe2, + 0xf0, 0xce, 0xbc, 0x48, 0x74, 0xb0, 0x91, 0x48, 0x39, 0x1b, 0xf1, 0x8a, + 0xc7, 0x52, 0xea, 0x46, 0xd3, 0x83, 0xec, 0xc4, 0x56, 0xd6, 0x91, 0x77, + 0x75, 0xbb, 0x74, 0xba, 0xe3, 0xda, 0x42, 0x0e, 0x08, 0x12, 0x97, 0x66, + 0xf6, 0x0b, 0x5e, 0x45, 0x25, 0x06, 0xed, 0x2f, 0xd0, 0xf7, 0x23, 0x67, + 0xb9, 0xb1, 0xab, 0x68, 0x56, 0xe3, 0x46, 0x8a, 0xe6, 0x7b, 0x0f, 0xb1, + 0xea, 0x72, 0xc8, 0xb0, 0x04, 0x8e, 0x4c, 0xab, 0x31, 0xe3, 0x71, 0x03, + 0x8f, 0x7a, 0xec, 0xb4, 0x8d, 0x32, 0x1d, 0x33, 0x4f, 0x8a, 0xda, 0x15, + 0x03, 0x68, 0x1b, 0x9b, 0x1c, 0xb3, 0x77, 0xac, 0xaf, 0x11, 0x46, 0xdf, + 0xf0, 0x8e, 0x43, 0x72, 0x0c, 0x92, 0x35, 0xac, 0xb1, 0xce, 0x4c, 0x83, + 0x0c, 0x40, 0x23, 0x39, 0x1f, 0x4a, 0xe8, 0x60, 0x95, 0x66, 0x86, 0x39, + 0x54, 0x82, 0x24, 0x50, 0xc3, 0x1e, 0xe2, 0xbd, 0xba, 0x14, 0xa1, 0x1a, + 0xaf, 0x4d, 0x6c, 0x8e, 0x98, 0xa5, 0xcc, 0x36, 0x7b, 0x3b, 0x6b, 0x94, + 0x2b, 0x35, 0xbc, 0x72, 0x02, 0x30, 0x77, 0x28, 0x35, 0xcf, 0xdf, 0xf8, + 0x1f, 0x4a, 0xba, 0x2c, 0xf0, 0x2b, 0xda, 0xb9, 0xff, 0x00, 0x9e, 0x67, + 0x23, 0xf2, 0x35, 0xd4, 0x52, 0x64, 0x7a, 0xd7, 0x44, 0xe8, 0xd3, 0xa9, + 0xa4, 0x95, 0xca, 0x71, 0x4f, 0x73, 0xcc, 0x35, 0x0f, 0x02, 0xea, 0x96, + 0x85, 0x9e, 0xdc, 0xad, 0xcc, 0x60, 0x67, 0xe5, 0x38, 0x6f, 0xcb, 0xfc, + 0x2b, 0x9d, 0x9e, 0xde, 0x6b, 0x59, 0x0c, 0x73, 0xc7, 0x24, 0x4e, 0x3a, + 0x87, 0x52, 0x3f, 0x9d, 0x7b, 0x91, 0xe9, 0x55, 0x6e, 0xec, 0x6d, 0xaf, + 0x23, 0x2b, 0x71, 0x04, 0x72, 0xae, 0x3f, 0x89, 0x79, 0xae, 0x0a, 0xb9, + 0x64, 0x1f, 0xf0, 0xdd, 0x8c, 0x9d, 0x15, 0xd0, 0xf1, 0x3a, 0x3e, 0xbd, + 0x2a, 0xf6, 0xb5, 0x68, 0xba, 0x7e, 0xb7, 0x79, 0x6a, 0xab, 0xb5, 0x12, + 0x4f, 0x94, 0x7a, 0x03, 0xd2, 0xa8, 0xd7, 0x8e, 0xd3, 0x8b, 0xb3, 0x39, + 0xda, 0xb3, 0x3b, 0x3d, 0x3a, 0xf2, 0x68, 0xfe, 0x19, 0xea, 0x24, 0x31, + 0xdd, 0x10, 0x92, 0x35, 0x6f, 0x40, 0x47, 0xff, 0x00, 0x5e, 0xb8, 0x4f, + 0x0b, 0xda, 0xc1, 0x79, 0xe2, 0x6b, 0x08, 0x2e, 0x4a, 0x98, 0x9a, 0x61, + 0xb8, 0x31, 0xe0, 0xe3, 0xb7, 0xe3, 0xd2, 0xbb, 0x4b, 0x1f, 0xf9, 0x26, + 0x3a, 0xbf, 0xfb, 0xed, 0xfc, 0x96, 0xbc, 0xe2, 0x19, 0xe5, 0xb6, 0xb8, + 0x8e, 0x78, 0x5c, 0xa4, 0xb1, 0x30, 0x64, 0x65, 0xea, 0x08, 0x39, 0xaf, + 0xd2, 0xf8, 0x6a, 0x0e, 0x79, 0x7c, 0x94, 0x5d, 0x9b, 0xd3, 0xf0, 0x3e, + 0xff, 0x00, 0x86, 0xa9, 0xb9, 0xe0, 0x6a, 0x28, 0xbb, 0x36, 0xed, 0x7f, + 0x91, 0xe9, 0x3f, 0x10, 0x75, 0xed, 0x53, 0x4a, 0xba, 0xb3, 0xb5, 0xb0, + 0x94, 0xdb, 0x40, 0x63, 0xdd, 0xb9, 0x31, 0xc9, 0x1d, 0xbd, 0x85, 0x5c, + 0xf1, 0x1d, 0xeb, 0x5d, 0xfc, 0x32, 0x4b, 0x9b, 0xe5, 0x02, 0xe2, 0x78, + 0xe2, 0x60, 0x31, 0xfc, 0x45, 0x86, 0x0f, 0xe5, 0x9a, 0xf2, 0xeb, 0xcb, + 0xdb, 0x9b, 0xfb, 0xa6, 0xb9, 0xba, 0x99, 0xa5, 0x99, 0xb1, 0x96, 0x63, + 0x5e, 0x81, 0x75, 0xa8, 0xaf, 0x8b, 0xfc, 0x33, 0x65, 0xa3, 0xe9, 0xf6, + 0x92, 0xc9, 0x76, 0xa1, 0x0c, 0x8d, 0x8d, 0xa9, 0x06, 0xde, 0x32, 0x4f, + 0x4e, 0x47, 0x6a, 0xea, 0xab, 0x82, 0xfa, 0xbc, 0x68, 0x5d, 0x2f, 0x75, + 0xde, 0x4d, 0x7e, 0xa6, 0x95, 0xb2, 0xf5, 0x85, 0x86, 0x1e, 0xe9, 0x7b, + 0xb2, 0xbc, 0xa4, 0xb4, 0xf3, 0xd5, 0x9e, 0x6f, 0x4e, 0x8e, 0x37, 0x95, + 0xc2, 0x46, 0x8c, 0xee, 0x7a, 0x2a, 0x8c, 0x93, 0x52, 0x5d, 0xda, 0xcd, + 0x61, 0x75, 0x25, 0xb5, 0xcc, 0x7e, 0x5c, 0xb1, 0x12, 0x18, 0x1a, 0xf6, + 0x0f, 0x0a, 0x78, 0x7e, 0x0d, 0x0f, 0x43, 0x4b, 0xaf, 0xb3, 0x89, 0xaf, + 0x9e, 0x3f, 0x35, 0x88, 0x03, 0x71, 0xe3, 0x21, 0x57, 0xd2, 0xbd, 0x2c, + 0x6e, 0x3e, 0x18, 0x6a, 0x6a, 0x7b, 0xb7, 0xb1, 0xeb, 0xe6, 0x19, 0x9d, + 0x3c, 0x1d, 0x25, 0x52, 0xdc, 0xce, 0x5b, 0x2e, 0xe7, 0x93, 0x4d, 0xa3, + 0xea, 0x56, 0xf1, 0x19, 0x66, 0xd3, 0xee, 0xe3, 0x8c, 0x75, 0x67, 0x85, + 0x80, 0x1f, 0x89, 0x15, 0x4a, 0xbd, 0xf6, 0x3d, 0x42, 0xe2, 0x66, 0xb1, + 0x47, 0xd2, 0xae, 0x10, 0x5d, 0xab, 0x79, 0xbb, 0xc0, 0x22, 0x0c, 0x0e, + 0x8d, 0xf5, 0xaf, 0x3d, 0xf8, 0x89, 0xe1, 0xcb, 0x7d, 0x3a, 0x78, 0xb5, + 0x2b, 0x44, 0x11, 0xc5, 0x3b, 0x6d, 0x91, 0x54, 0x70, 0x1b, 0xae, 0x47, + 0xd6, 0xb9, 0x30, 0x79, 0xb7, 0xb6, 0xaa, 0xa9, 0x55, 0x8d, 0x9b, 0xdb, + 0x5b, 0x9c, 0x38, 0x0c, 0xf1, 0xd7, 0xac, 0xa8, 0xd6, 0x8f, 0x2b, 0x7b, + 0x59, 0xdc, 0xe1, 0x39, 0xed, 0x5b, 0xe9, 0xe2, 0x5f, 0x11, 0x5c, 0xe9, + 0xe9, 0x63, 0x15, 0xcc, 0xf2, 0x47, 0x1b, 0x70, 0xd1, 0xaf, 0xcd, 0xec, + 0x32, 0x3b, 0x55, 0x2d, 0x1b, 0x44, 0xbc, 0xd6, 0xee, 0x9a, 0x1b, 0x48, + 0x7c, 0xc3, 0x1a, 0xee, 0x7c, 0xb6, 0xd1, 0x8f, 0x4c, 0xf4, 0x19, 0xae, + 0xf6, 0x7f, 0x1d, 0xda, 0x68, 0x3a, 0x7c, 0x16, 0x56, 0xba, 0x44, 0x90, + 0xdc, 0xc6, 0x36, 0xc9, 0x6d, 0x2f, 0xc8, 0x22, 0xfc, 0x71, 0xf3, 0x66, + 0xba, 0x71, 0x95, 0x97, 0x32, 0x84, 0x29, 0xa9, 0xc9, 0x74, 0xd3, 0x4f, + 0x33, 0xaf, 0x1f, 0x5f, 0xdf, 0x8d, 0x3a, 0x74, 0xd5, 0x49, 0xad, 0x6d, + 0x75, 0xa7, 0x99, 0xaa, 0xb1, 0x5d, 0x5f, 0xfc, 0x3b, 0x9f, 0xfb, 0x79, + 0x71, 0x38, 0xb7, 0x77, 0xcc, 0x83, 0x04, 0x60, 0x12, 0xa4, 0xfa, 0x1a, + 0xf2, 0x4b, 0x19, 0xda, 0xd7, 0x52, 0xb7, 0x9e, 0x36, 0x3b, 0xa2, 0x99, + 0x5d, 0x4f, 0xd0, 0xd6, 0xf6, 0xbd, 0xe3, 0x9d, 0x47, 0x5c, 0xb6, 0x36, + 0xbe, 0x5c, 0x76, 0xd0, 0x1e, 0x5d, 0x50, 0x92, 0x5b, 0xea, 0x4d, 0x73, + 0x70, 0xff, 0x00, 0xaf, 0x8f, 0xfd, 0xe1, 0xfc, 0xea, 0x32, 0xfc, 0x2d, + 0x4a, 0x54, 0xe7, 0xed, 0x74, 0xe6, 0x77, 0xb2, 0xd9, 0x11, 0x95, 0xe0, + 0xaa, 0xd0, 0xa7, 0x53, 0xdb, 0x24, 0xb9, 0x9b, 0x7c, 0xab, 0x64, 0x76, + 0xff, 0x00, 0x19, 0xee, 0x24, 0x0d, 0xa4, 0xdb, 0x03, 0xfb, 0xa2, 0x24, + 0x90, 0x8f, 0x7e, 0x00, 0xfe, 0x66, 0xbc, 0xa2, 0xbd, 0x4b, 0xe3, 0x47, + 0xfc, 0x7e, 0xe9, 0x3f, 0xf5, 0xce, 0x4f, 0xe6, 0x2b, 0xcb, 0x6b, 0xf2, + 0xcc, 0x5b, 0xbd, 0x66, 0x7a, 0x3c, 0x38, 0x92, 0xcb, 0x69, 0x5b, 0xcf, + 0xf3, 0x61, 0xda, 0xbd, 0x33, 0xe0, 0xd7, 0xfc, 0x86, 0x35, 0x3f, 0xfa, + 0xf7, 0x5f, 0xfd, 0x0a, 0xbc, 0xcc, 0xf4, 0xaf, 0x4d, 0xf8, 0x33, 0xff, + 0x00, 0x21, 0x9d, 0x4b, 0xfe, 0xbd, 0xd7, 0xff, 0x00, 0x42, 0xa5, 0x85, + 0xfe, 0x34, 0x4a, 0xe2, 0x0f, 0xf9, 0x16, 0xd5, 0xf4, 0x5f, 0x9a, 0x3a, + 0xb9, 0x6f, 0x2e, 0x47, 0xc6, 0x2b, 0x7b, 0x4f, 0x3e, 0x4f, 0xb3, 0xfd, + 0x80, 0x9f, 0x2b, 0x3f, 0x2e, 0x79, 0x39, 0xc5, 0x77, 0x55, 0xe7, 0xf3, + 0x7f, 0xc9, 0x6d, 0xb7, 0xff, 0x00, 0xb0, 0x7f, 0xf4, 0x6a, 0xf4, 0x0a, + 0xf5, 0xe8, 0xbf, 0x8b, 0xd5, 0x9f, 0x9d, 0x66, 0x51, 0x49, 0x51, 0xb7, + 0xf2, 0x47, 0xf5, 0x03, 0xd0, 0xd7, 0x09, 0xe0, 0xab, 0xcb, 0xab, 0xaf, + 0x16, 0x78, 0xb2, 0x29, 0xee, 0x25, 0x92, 0x38, 0x6e, 0x54, 0x46, 0xac, + 0x72, 0x10, 0x6e, 0x71, 0xc7, 0xe4, 0x2b, 0xbb, 0xaf, 0x3e, 0xf0, 0x19, + 0xff, 0x00, 0x8a, 0xc7, 0xc6, 0x5f, 0xf5, 0xf4, 0x9f, 0xfa, 0x14, 0x94, + 0xea, 0x7c, 0x70, 0xfe, 0xba, 0x06, 0x0e, 0x29, 0xe1, 0x31, 0x0d, 0xf6, + 0x8f, 0xfe, 0x94, 0x8e, 0x0b, 0xe2, 0xa7, 0xfc, 0x8f, 0x57, 0x1f, 0xf5, + 0xc6, 0x3f, 0xfd, 0x04, 0x57, 0x17, 0x5d, 0xa7, 0xc5, 0x4f, 0xf9, 0x1e, + 0xae, 0x3f, 0xeb, 0x8c, 0x7f, 0xfa, 0x0d, 0x71, 0x75, 0xe2, 0xe2, 0x3f, + 0x8b, 0x2f, 0x53, 0xf4, 0xdc, 0xa3, 0xfd, 0xc2, 0x8f, 0xf8, 0x57, 0xe4, + 0x15, 0xe8, 0xdf, 0x07, 0x6e, 0x5e, 0x3f, 0x11, 0xde, 0x5b, 0x64, 0xec, + 0x96, 0xd4, 0xb1, 0x1e, 0xea, 0xc3, 0x1f, 0xfa, 0x11, 0xaf, 0x39, 0xaf, + 0x41, 0xf8, 0x41, 0xff, 0x00, 0x23, 0x84, 0xff, 0x00, 0xf5, 0xe6, 0xff, + 0x00, 0xfa, 0x12, 0xd3, 0xc2, 0xbb, 0x56, 0x89, 0x96, 0x7b, 0x15, 0x2c, + 0xbe, 0xaa, 0x7d, 0x8e, 0x9b, 0x5f, 0x91, 0xa4, 0xd7, 0x2e, 0xb2, 0x7a, + 0x3e, 0xd1, 0xf4, 0x15, 0x9b, 0x57, 0xf5, 0xbf, 0xf9, 0x0d, 0xde, 0x7f, + 0xd7, 0x56, 0xaa, 0x15, 0xf4, 0x48, 0xfe, 0x48, 0xc6, 0xb6, 0xf1, 0x35, + 0x1b, 0xee, 0xff, 0x00, 0x33, 0x6f, 0xc2, 0x9f, 0xf2, 0x1f, 0x4f, 0xf7, + 0x1b, 0xf9, 0x56, 0x1f, 0x8a, 0x7f, 0xe4, 0x66, 0xbf, 0xff, 0x00, 0xae, + 0x83, 0xf9, 0x56, 0xe7, 0x85, 0x3f, 0xe4, 0x3e, 0x9f, 0xee, 0x37, 0xf2, + 0xac, 0x3f, 0x14, 0xff, 0x00, 0xc8, 0xcd, 0x7f, 0xff, 0x00, 0x5d, 0x07, + 0xf2, 0xaf, 0x2f, 0x35, 0xf8, 0x17, 0xa9, 0xf6, 0x5c, 0x3b, 0xfe, 0xe0, + 0xff, 0x00, 0xc4, 0xff, 0x00, 0x24, 0x63, 0x9e, 0x9e, 0xb5, 0xa9, 0xa7, + 0xdd, 0x5b, 0xe9, 0x43, 0xed, 0x4e, 0xab, 0x73, 0x7a, 0x7f, 0xd4, 0xa9, + 0xe5, 0x62, 0xff, 0x00, 0x68, 0xfa, 0x9f, 0x6a, 0xcb, 0xa2, 0xbc, 0x48, + 0xc9, 0xc5, 0xdd, 0x1e, 0xda, 0x76, 0x3a, 0xa4, 0xd7, 0xe7, 0x8b, 0xc2, + 0xb7, 0x6f, 0x71, 0x2f, 0x9b, 0x77, 0x7f, 0x3b, 0x26, 0x1b, 0xa0, 0x8f, + 0x68, 0x1c, 0x0f, 0xce, 0xba, 0x0f, 0x02, 0xea, 0xbf, 0x6c, 0xd2, 0x4d, + 0xa4, 0x8e, 0x0c, 0xd6, 0xc7, 0x6f, 0x27, 0xaa, 0x9e, 0x95, 0xe6, 0xa5, + 0x98, 0xaa, 0xae, 0xe2, 0x42, 0xfd, 0xd0, 0x7b, 0x56, 0x8e, 0x85, 0xaa, + 0x3e, 0x8f, 0xab, 0x45, 0x74, 0x09, 0xf2, 0xf3, 0x89, 0x57, 0xd5, 0x4d, + 0x75, 0xd0, 0xc5, 0x4a, 0x35, 0x22, 0xde, 0xdb, 0x1a, 0x46, 0xa5, 0xa4, + 0xae, 0x7b, 0x29, 0xe9, 0x58, 0x97, 0xde, 0x20, 0x83, 0x4b, 0xd5, 0x62, + 0xb5, 0xbc, 0x5f, 0x2e, 0x29, 0x97, 0x31, 0xcf, 0xdb, 0xaf, 0x43, 0xe9, + 0x5a, 0xb0, 0xcc, 0xb3, 0xc2, 0x92, 0xc6, 0xd9, 0x47, 0x50, 0xca, 0x47, + 0x7a, 0xe4, 0xfe, 0x20, 0x59, 0xf9, 0xda, 0x5c, 0x17, 0x4a, 0x09, 0x30, + 0x49, 0x83, 0x8f, 0x43, 0x5e, 0xce, 0x22, 0x72, 0x8d, 0x37, 0x38, 0x74, + 0xd4, 0xe8, 0x9b, 0x6a, 0x37, 0x47, 0x5f, 0x1c, 0xb1, 0xcd, 0x12, 0xc9, + 0x1b, 0xab, 0x23, 0x72, 0x0a, 0x9c, 0x83, 0x4e, 0x38, 0xe9, 0x5e, 0x3d, + 0xa4, 0x78, 0x86, 0xff, 0x00, 0x47, 0x60, 0x21, 0x90, 0xbc, 0x39, 0xc9, + 0x85, 0xcf, 0xca, 0x6b, 0xbc, 0xd2, 0xbc, 0x67, 0xa6, 0x6a, 0x1b, 0x52, + 0x67, 0xfb, 0x2c, 0xdd, 0xd6, 0x43, 0xf2, 0xfe, 0x0d, 0xd2, 0xb1, 0xa1, + 0x8e, 0xa7, 0x53, 0x47, 0xa3, 0x14, 0x6a, 0xa9, 0x1c, 0xb7, 0x8f, 0x2d, + 0x84, 0x1e, 0x20, 0x12, 0x81, 0xfe, 0xbe, 0x30, 0x7f, 0x2e, 0x3f, 0xa5, + 0x73, 0x15, 0xdd, 0xfc, 0x41, 0x8e, 0x39, 0xed, 0xac, 0xae, 0xe2, 0x60, + 0xe0, 0x31, 0x5d, 0xca, 0x72, 0x31, 0x5c, 0x25, 0x79, 0x38, 0xc8, 0xf2, + 0xd6, 0x97, 0x99, 0xcd, 0x51, 0x5a, 0x4c, 0xeb, 0x2c, 0x7f, 0xe4, 0x98, + 0xea, 0xff, 0x00, 0xef, 0xb7, 0xf2, 0x5a, 0xf3, 0x4a, 0xf4, 0xbb, 0x1f, + 0xf9, 0x26, 0x3a, 0xbf, 0xfb, 0xed, 0xfc, 0x96, 0xbc, 0xd2, 0xbf, 0x48, + 0xe1, 0x4f, 0xf7, 0x1f, 0x9f, 0xe8, 0x7e, 0x87, 0xc2, 0x9f, 0xee, 0x92, + 0xf5, 0xfd, 0x10, 0x7d, 0x6b, 0x5f, 0xc3, 0xfe, 0x21, 0xbb, 0xf0, 0xf5, + 0xdb, 0xcd, 0x6e, 0x15, 0xd5, 0xd0, 0xab, 0xc6, 0xdd, 0x0f, 0xa1, 0xac, + 0x8a, 0x9e, 0xce, 0xd6, 0x4b, 0xdb, 0xc8, 0x2d, 0x62, 0x19, 0x92, 0x69, + 0x16, 0x35, 0xfa, 0x93, 0x8a, 0xfa, 0x2a, 0xd0, 0x84, 0xe0, 0xe3, 0x51, + 0x68, 0x7d, 0x1d, 0x7a, 0x74, 0xea, 0x53, 0x71, 0xaa, 0xaf, 0x1e, 0xa3, + 0xf5, 0x1d, 0x46, 0xe7, 0x56, 0xbe, 0x92, 0xf2, 0xee, 0x40, 0xf3, 0x48, + 0x7a, 0xe3, 0x00, 0x0f, 0x4a, 0xf5, 0xb1, 0x3d, 0xe7, 0x89, 0x7c, 0x27, + 0x63, 0xfd, 0x91, 0x78, 0x20, 0x77, 0x28, 0x97, 0x0c, 0x1f, 0x0c, 0x8a, + 0x06, 0x18, 0x0c, 0x77, 0xcf, 0x4a, 0xd0, 0xb2, 0xf0, 0x86, 0x8d, 0x6b, + 0x61, 0x15, 0xb3, 0x69, 0xd6, 0xf2, 0xed, 0x50, 0x0b, 0x3c, 0x7b, 0x89, + 0x3d, 0xce, 0x4d, 0x11, 0x78, 0x52, 0xce, 0xca, 0xe0, 0xcf, 0xa5, 0x4b, + 0x3e, 0x9e, 0xe7, 0xef, 0x2c, 0x4d, 0xb9, 0x1b, 0xea, 0xad, 0x91, 0xf9, + 0x62, 0xbe, 0x5b, 0x17, 0x98, 0x50, 0xac, 0xa2, 0xa0, 0xb9, 0x5c, 0x36, + 0xea, 0x8f, 0x8b, 0xc6, 0xe6, 0xb8, 0x6c, 0x42, 0x8c, 0x69, 0xc7, 0x95, + 0xc1, 0xfb, 0xb7, 0x57, 0x5f, 0x77, 0xfc, 0x39, 0x99, 0x77, 0xe0, 0xfb, + 0xe8, 0x2d, 0xbc, 0xdd, 0x37, 0x5d, 0xd4, 0x8d, 0xda, 0x10, 0x54, 0x4f, + 0x70, 0x4a, 0x37, 0xae, 0x45, 0x62, 0xfc, 0x4b, 0xd4, 0x93, 0xec, 0x36, + 0x3a, 0x61, 0x90, 0x3d, 0xca, 0x91, 0x2c, 0xbb, 0x7b, 0x71, 0x8e, 0x7f, + 0x3a, 0xef, 0x1e, 0xca, 0xfa, 0x48, 0x8a, 0x36, 0xa4, 0xeb, 0x91, 0x82, + 0xd1, 0x42, 0xaa, 0xc4, 0x7d, 0x79, 0xc5, 0x67, 0x41, 0xe0, 0xdd, 0x12, + 0x29, 0x1e, 0x69, 0x6c, 0xcd, 0xcc, 0xec, 0x72, 0xd2, 0xdc, 0xb1, 0x90, + 0x93, 0xf8, 0xf1, 0x5c, 0xd8, 0x7c, 0x64, 0x61, 0x52, 0x35, 0x2b, 0x3e, + 0x6e, 0x5d, 0xac, 0xbf, 0x5d, 0x0e, 0x4c, 0x2e, 0x61, 0x08, 0x55, 0x8d, + 0x5c, 0x44, 0xb9, 0xb9, 0x6f, 0x6b, 0x2d, 0x7e, 0x6f, 0x4d, 0x0f, 0x25, + 0xf0, 0xf7, 0x89, 0x6f, 0x3c, 0x39, 0x74, 0xcf, 0x6f, 0xb5, 0xe2, 0x93, + 0x89, 0x23, 0x61, 0xc3, 0x63, 0xdf, 0xb1, 0xac, 0xfd, 0x42, 0xf6, 0x6d, + 0x4a, 0xf6, 0x6b, 0xbb, 0x96, 0xdf, 0x2c, 0xad, 0xb8, 0xfb, 0x7a, 0x0a, + 0xef, 0xfe, 0x20, 0xf8, 0x5a, 0xd6, 0xda, 0xc5, 0x35, 0x3b, 0x0b, 0x74, + 0x84, 0x46, 0x42, 0xca, 0x88, 0xb8, 0x04, 0x1e, 0x86, 0xbc, 0xde, 0xbe, + 0x9f, 0x05, 0x52, 0x86, 0x21, 0x7d, 0x66, 0x9a, 0xb3, 0x7a, 0x3e, 0xe7, + 0xd9, 0x65, 0xf5, 0x70, 0xf8, 0xa4, 0xf1, 0x74, 0xe3, 0x69, 0x3d, 0x1f, + 0x7d, 0x02, 0x9f, 0x0f, 0xfa, 0xf8, 0xff, 0x00, 0xde, 0x1f, 0xce, 0x99, + 0x4f, 0x87, 0xfd, 0x7c, 0x7f, 0xef, 0x0f, 0xe7, 0x5d, 0xef, 0x63, 0xd1, + 0x96, 0xcc, 0xec, 0xbe, 0x34, 0x7f, 0xc7, 0xee, 0x93, 0xff, 0x00, 0x5c, + 0xe4, 0xfe, 0x62, 0xbc, 0xb6, 0xbd, 0x4b, 0xe3, 0x47, 0xfc, 0x7e, 0xe9, + 0x3f, 0xf5, 0xce, 0x4f, 0xe6, 0x2b, 0xcb, 0x6b, 0xf1, 0x7c, 0x5f, 0xf1, + 0xa4, 0x63, 0xc3, 0xbf, 0xf2, 0x2c, 0xa5, 0xf3, 0xfc, 0xd8, 0x75, 0xaf, + 0x44, 0xf8, 0x47, 0x7f, 0x6b, 0x67, 0xae, 0x5e, 0xa5, 0xcc, 0xf1, 0xc3, + 0xe6, 0xc0, 0x02, 0x19, 0x1c, 0x28, 0x24, 0x37, 0x4e, 0x6b, 0xce, 0xe9, + 0x41, 0x20, 0xe4, 0x13, 0x91, 0xd0, 0x83, 0x8a, 0xce, 0x94, 0xfd, 0x9c, + 0xd4, 0xbb, 0x1d, 0xd8, 0xfc, 0x2a, 0xc5, 0xe1, 0xe5, 0x41, 0xbb, 0x73, + 0x1e, 0xcf, 0x0d, 0xf5, 0xb5, 0xf7, 0xc6, 0xb8, 0xde, 0xda, 0x64, 0x95, + 0x12, 0xc8, 0xa1, 0x64, 0x60, 0xc3, 0x21, 0x4e, 0x79, 0x1f, 0x5a, 0xf4, + 0x9d, 0xc3, 0xd4, 0x57, 0x81, 0xfc, 0x2b, 0xff, 0x00, 0x91, 0xe6, 0x0f, + 0x53, 0x14, 0x9f, 0xfa, 0x0d, 0x7a, 0xef, 0x8d, 0x26, 0x96, 0xdf, 0xc1, + 0xfa, 0x9c, 0xd0, 0xc8, 0xd1, 0xc8, 0x90, 0x92, 0xae, 0xbd, 0x47, 0x35, + 0xeb, 0x61, 0xaa, 0x5e, 0x9c, 0xa7, 0xe6, 0xd9, 0xf9, 0xee, 0x77, 0x82, + 0xf6, 0x78, 0xca, 0x38, 0x48, 0xbf, 0xb3, 0x18, 0xdf, 0xe6, 0xd1, 0xbe, + 0x70, 0x41, 0xe6, 0xbc, 0xd3, 0xc1, 0x9a, 0x8d, 0xa5, 0x9f, 0x8e, 0xbc, + 0x5b, 0x0d, 0xcd, 0xc4, 0x50, 0xbc, 0xb7, 0x39, 0x43, 0x23, 0x85, 0x07, + 0x6b, 0x3e, 0x7a, 0xfd, 0x6b, 0xd0, 0xac, 0x19, 0x9f, 0x4f, 0xb6, 0x76, + 0x39, 0x63, 0x12, 0x12, 0x7d, 0x4e, 0x05, 0x7c, 0xe3, 0xe2, 0xc2, 0x47, + 0x8b, 0xf5, 0x73, 0x9c, 0x37, 0xda, 0xe4, 0xe4, 0x64, 0x77, 0x34, 0x62, + 0xaa, 0xfb, 0x3e, 0x59, 0xaf, 0xeb, 0x41, 0xe4, 0x38, 0x25, 0x8b, 0xf6, + 0xf8, 0x69, 0x3b, 0x5d, 0x2d, 0x7d, 0x24, 0x9f, 0xe8, 0x69, 0x7c, 0x48, + 0xbc, 0xb7, 0xbf, 0xf1, 0xad, 0xd4, 0xb6, 0xb2, 0xac, 0xb1, 0xaa, 0x22, + 0x6f, 0x43, 0x90, 0x48, 0x51, 0xd0, 0x8a, 0xe4, 0xe8, 0xe3, 0x14, 0x57, + 0x8f, 0x39, 0x73, 0xc9, 0xc8, 0xfd, 0x17, 0x09, 0x41, 0x61, 0xe8, 0x42, + 0x8a, 0x77, 0xe5, 0x49, 0x7d, 0xc1, 0x5e, 0x83, 0xf0, 0x83, 0xfe, 0x47, + 0x09, 0xff, 0x00, 0xeb, 0xcd, 0xff, 0x00, 0xf4, 0x25, 0xaf, 0x3e, 0xaf, + 0x41, 0xf8, 0x41, 0xff, 0x00, 0x23, 0x84, 0xff, 0x00, 0xf5, 0xe6, 0xff, + 0x00, 0xfa, 0x12, 0xd6, 0xb8, 0x6f, 0xe2, 0xc7, 0xd4, 0xe2, 0xce, 0xff, + 0x00, 0xe4, 0x5f, 0x57, 0xd0, 0xe8, 0xf5, 0xbf, 0xf9, 0x0d, 0xde, 0x7f, + 0xd7, 0x56, 0xaa, 0x15, 0x7f, 0x5b, 0xff, 0x00, 0x90, 0xdd, 0xe7, 0xfd, + 0x75, 0x6a, 0xa1, 0x5f, 0x44, 0xb6, 0x3f, 0x91, 0xb1, 0x9f, 0xef, 0x13, + 0xf5, 0x7f, 0x99, 0xb7, 0xe1, 0x4f, 0xf9, 0x0f, 0xa7, 0xfb, 0x8d, 0xfc, + 0xab, 0x0f, 0xc5, 0x3f, 0xf2, 0x33, 0x5f, 0xff, 0x00, 0xd7, 0x41, 0xfc, + 0xab, 0x73, 0xc2, 0x9f, 0xf2, 0x1f, 0x4f, 0xf7, 0x1b, 0xf9, 0x56, 0x1f, + 0x8a, 0x7f, 0xe4, 0x66, 0xbf, 0xff, 0x00, 0xae, 0x83, 0xf9, 0x57, 0x97, + 0x9a, 0xfc, 0x0b, 0xd4, 0xfb, 0x3e, 0x1d, 0xff, 0x00, 0x70, 0x7f, 0xe2, + 0x7f, 0x92, 0x31, 0xe8, 0xa2, 0x8a, 0xf0, 0xcf, 0x68, 0x28, 0x3d, 0x28, + 0xa2, 0x80, 0x3d, 0x03, 0xc0, 0x9a, 0xdf, 0x9f, 0x03, 0x69, 0xb3, 0xbf, + 0xcf, 0x1e, 0x5a, 0x22, 0x4f, 0x55, 0xf4, 0xfc, 0x2b, 0xaa, 0xd4, 0x2c, + 0xd3, 0x50, 0xd3, 0xe7, 0xb5, 0x71, 0xc4, 0xa8, 0x54, 0x13, 0xd8, 0xf6, + 0xaf, 0x1f, 0xd3, 0x2f, 0x9f, 0x4c, 0xd4, 0xad, 0xee, 0xe3, 0xcf, 0xee, + 0x98, 0x16, 0x03, 0xba, 0xe7, 0x91, 0x5e, 0xcd, 0x04, 0xc9, 0x71, 0x02, + 0x4c, 0x8c, 0x0a, 0xc8, 0xa1, 0x97, 0x07, 0x3c, 0x11, 0x5e, 0xe6, 0x02, + 0xaa, 0xab, 0x4d, 0xd3, 0x97, 0x4f, 0xc8, 0xea, 0xa5, 0x2e, 0x68, 0xd9, + 0x9e, 0x27, 0x71, 0x03, 0xda, 0xdd, 0x4b, 0x6e, 0xf9, 0x0d, 0x1b, 0x15, + 0x20, 0xd4, 0x55, 0xd9, 0xf8, 0xf3, 0x48, 0xf2, 0x6e, 0x93, 0x53, 0x89, + 0x70, 0x92, 0xfc, 0xb2, 0xe0, 0x74, 0x6e, 0xc6, 0xb8, 0xda, 0xf1, 0xeb, + 0x52, 0x74, 0xa6, 0xe0, 0xce, 0x79, 0x47, 0x95, 0xd8, 0x32, 0x48, 0x0a, + 0x58, 0xb0, 0x1c, 0xe1, 0x89, 0xc0, 0xa2, 0x8a, 0x2b, 0x32, 0x4e, 0xb2, + 0xc7, 0xfe, 0x49, 0x8e, 0xaf, 0xfe, 0xfb, 0x7f, 0x25, 0xae, 0x4f, 0xc3, + 0x1a, 0x1c, 0x5a, 0xb5, 0xc3, 0xc9, 0x79, 0xe6, 0x25, 0x9c, 0x45, 0x55, + 0xb6, 0x7d, 0xf7, 0x91, 0x8e, 0x15, 0x57, 0xde, 0xba, 0xcb, 0x1f, 0xf9, + 0x26, 0x3a, 0xbf, 0xfb, 0xed, 0xfc, 0x96, 0xa8, 0x78, 0x0a, 0x0d, 0x3a, + 0x35, 0x7b, 0xc7, 0x9b, 0x37, 0xfb, 0xb6, 0xaa, 0x1e, 0x3c, 0xb0, 0x78, + 0xf9, 0x7d, 0x58, 0xfa, 0xff, 0x00, 0x0d, 0x7e, 0x89, 0x91, 0xd5, 0x95, + 0x3c, 0xa9, 0xca, 0x3b, 0xdc, 0xfb, 0x6c, 0x9e, 0xb4, 0xa8, 0xe5, 0x75, + 0x25, 0x0b, 0xde, 0xfd, 0x3d, 0x17, 0xdd, 0xea, 0x76, 0x76, 0xde, 0x07, + 0xf0, 0xf4, 0x10, 0x94, 0x1a, 0x7a, 0xc9, 0x91, 0xf7, 0xa5, 0x62, 0xcd, + 0x5c, 0xee, 0x9f, 0xe1, 0x05, 0xd2, 0x3e, 0x21, 0xda, 0xec, 0x0c, 0xd6, + 0x5b, 0x1e, 0x78, 0x89, 0xfe, 0x12, 0x06, 0x36, 0x9f, 0xc4, 0xe6, 0xb4, + 0x75, 0xef, 0x16, 0x0d, 0x2b, 0x4b, 0x02, 0x29, 0xa3, 0x79, 0xe5, 0x6d, + 0x89, 0xb4, 0xe7, 0x18, 0xfb, 0xcd, 0xfe, 0xe8, 0x1c, 0x0f, 0x5e, 0xb5, + 0xd8, 0xa8, 0x59, 0x04, 0x72, 0x9c, 0x13, 0xb7, 0xe5, 0x38, 0xf5, 0xc5, + 0x66, 0xf1, 0x18, 0xaa, 0x31, 0x72, 0x9c, 0x9b, 0x53, 0xba, 0xd4, 0xe1, + 0x78, 0xac, 0x6e, 0x1e, 0x0e, 0x55, 0x24, 0xdc, 0x66, 0x9a, 0xd5, 0xfe, + 0x3f, 0x89, 0x2e, 0x47, 0xad, 0x2d, 0x73, 0xfa, 0xe7, 0x8a, 0x6d, 0xf4, + 0x3b, 0xfb, 0x1b, 0x49, 0x61, 0x79, 0x1e, 0xe9, 0xc2, 0xe4, 0x1e, 0x10, + 0x67, 0x19, 0x35, 0xbc, 0x0e, 0x46, 0x45, 0x79, 0xf2, 0xa7, 0x38, 0xc5, + 0x4a, 0x4b, 0x47, 0xb1, 0xe5, 0xce, 0x8c, 0xe1, 0x18, 0xce, 0x4b, 0x49, + 0x6c, 0x3a, 0x8a, 0x2b, 0x23, 0xc4, 0x1a, 0xd4, 0x7a, 0x06, 0x92, 0xf7, + 0xb2, 0xc6, 0xd2, 0x05, 0x21, 0x76, 0xaf, 0x72, 0x69, 0x42, 0x12, 0x9c, + 0x94, 0x62, 0xb5, 0x62, 0xa7, 0x4e, 0x55, 0x26, 0xa1, 0x05, 0x76, 0xcb, + 0x1a, 0xbd, 0x9a, 0xdf, 0xe8, 0xf7, 0x76, 0xae, 0xa1, 0xbc, 0xd8, 0x59, + 0x47, 0xd7, 0x07, 0x15, 0x85, 0xe1, 0x6f, 0x09, 0xda, 0xe9, 0x3a, 0x52, + 0x7d, 0xae, 0xde, 0x39, 0x2f, 0x25, 0x5d, 0xd3, 0x17, 0x50, 0x71, 0x9f, + 0xe1, 0x19, 0xae, 0x8a, 0xca, 0xed, 0x2f, 0x6c, 0x60, 0xba, 0x8f, 0xfd, + 0x5c, 0xc8, 0x1d, 0x79, 0xec, 0x46, 0x6b, 0x9a, 0xf1, 0x9e, 0xbe, 0xda, + 0x0d, 0xc6, 0x95, 0x2a, 0x92, 0x41, 0x99, 0x8c, 0xa8, 0x3a, 0xb4, 0x78, + 0xc1, 0xfe, 0x75, 0xd5, 0x87, 0x75, 0xe7, 0x7c, 0x34, 0x34, 0xbb, 0xfc, + 0x8e, 0xcc, 0x2b, 0xc4, 0xce, 0xf8, 0x3a, 0x4e, 0xd7, 0x77, 0xf9, 0xa4, + 0x47, 0xe2, 0x6f, 0x0d, 0x68, 0x7f, 0x64, 0x79, 0x1a, 0xc6, 0x28, 0x1d, + 0xf2, 0x0d, 0xca, 0x1d, 0x82, 0x26, 0x3c, 0x06, 0x6e, 0xd8, 0xce, 0x33, + 0xda, 0xbc, 0x8f, 0xcb, 0xf2, 0xaf, 0x44, 0x7b, 0x95, 0xb6, 0xc9, 0x8d, + 0xca, 0x72, 0x0f, 0x3d, 0x45, 0x7a, 0xf3, 0xeb, 0xfa, 0x5c, 0xf0, 0xbf, + 0x99, 0x7d, 0x6d, 0x34, 0x78, 0x01, 0xc3, 0x30, 0xc3, 0x2b, 0x0c, 0x02, + 0x47, 0xa1, 0x1c, 0x30, 0xec, 0x79, 0xaf, 0x2a, 0xbd, 0xfb, 0x1f, 0xf6, + 0xc4, 0x9f, 0x60, 0x2f, 0xf6, 0x73, 0x2f, 0xc9, 0xbc, 0xe7, 0xbf, 0x4f, + 0xa7, 0xa5, 0x7d, 0x06, 0x50, 0xea, 0xc6, 0x32, 0x85, 0x4b, 0xfc, 0xcf, + 0xaa, 0xc8, 0xa5, 0x5e, 0x31, 0x9d, 0x3a, 0xb7, 0x7e, 0xb7, 0xb7, 0xe2, + 0x74, 0xdf, 0x1a, 0x3f, 0xe3, 0xf7, 0x49, 0xff, 0x00, 0xae, 0x72, 0x7f, + 0x31, 0x5e, 0x5b, 0x5e, 0xa5, 0xf1, 0xa3, 0xfe, 0x3f, 0x74, 0x9f, 0xfa, + 0xe7, 0x27, 0xf3, 0x15, 0xe5, 0xb5, 0xf9, 0xae, 0x2f, 0xf8, 0xd2, 0x3d, + 0xee, 0x1d, 0xff, 0x00, 0x91, 0x65, 0x2f, 0x9f, 0xe6, 0xc2, 0x8a, 0x28, + 0xae, 0x73, 0xda, 0x3b, 0x6f, 0x85, 0x5f, 0xf2, 0x3c, 0xdb, 0xff, 0x00, + 0xd7, 0x09, 0x3f, 0x95, 0x7a, 0xcf, 0x8e, 0xbf, 0xe4, 0x46, 0xd5, 0xff, + 0x00, 0xeb, 0xdf, 0xfa, 0x8a, 0xf2, 0x6f, 0x85, 0x5f, 0xf2, 0x3c, 0xdb, + 0xff, 0x00, 0xd7, 0x09, 0x3f, 0x95, 0x7a, 0xcf, 0x8e, 0xbf, 0xe4, 0x46, + 0xd5, 0xff, 0x00, 0xeb, 0xdf, 0xfa, 0x8a, 0xf5, 0x70, 0x9f, 0xee, 0xf2, + 0xf9, 0x9f, 0x9f, 0xe7, 0xdf, 0xf2, 0x39, 0xa3, 0xff, 0x00, 0x6e, 0xff, + 0x00, 0xe9, 0x4c, 0xd9, 0xd3, 0xbf, 0xe4, 0x1b, 0x6b, 0xff, 0x00, 0x5c, + 0x53, 0xff, 0x00, 0x41, 0xaf, 0x9c, 0x7c, 0x5b, 0xff, 0x00, 0x23, 0x7e, + 0xaf, 0xff, 0x00, 0x5f, 0x72, 0x7f, 0xe8, 0x46, 0xbe, 0x8e, 0xd3, 0xbf, + 0xe4, 0x1b, 0x6b, 0xff, 0x00, 0x5c, 0x53, 0xff, 0x00, 0x41, 0xaf, 0x9e, + 0x3c, 0x45, 0x65, 0x71, 0x7f, 0xe3, 0x6d, 0x5e, 0x1b, 0x58, 0x5e, 0x59, + 0x05, 0xcc, 0x84, 0x85, 0x52, 0x76, 0x80, 0xdc, 0x93, 0x8e, 0x80, 0x7a, + 0xd1, 0x8e, 0xd6, 0x9c, 0x43, 0x85, 0x24, 0xa3, 0x8a, 0xac, 0xe4, 0xec, + 0xad, 0xfa, 0x9c, 0xf5, 0x14, 0xed, 0xa4, 0x16, 0x18, 0xe8, 0x48, 0x3e, + 0xd4, 0xda, 0xf2, 0x8f, 0xbf, 0x4e, 0xe1, 0x5e, 0x83, 0xf0, 0x83, 0xfe, + 0x47, 0x09, 0xff, 0x00, 0xeb, 0xcd, 0xff, 0x00, 0xf4, 0x25, 0xaf, 0x3e, + 0xaf, 0x41, 0xf8, 0x41, 0xff, 0x00, 0x23, 0x84, 0xff, 0x00, 0xf5, 0xe6, + 0xff, 0x00, 0xfa, 0x12, 0xd6, 0xf8, 0x6f, 0xe2, 0xc7, 0xd4, 0xf2, 0xf3, + 0xbf, 0xf9, 0x17, 0xd5, 0xf4, 0x3a, 0x3d, 0x6f, 0xfe, 0x43, 0x77, 0x9f, + 0xf5, 0xd5, 0xaa, 0x85, 0x5f, 0xd6, 0xff, 0x00, 0xe4, 0x37, 0x79, 0xff, + 0x00, 0x5d, 0x5a, 0xa8, 0x57, 0xd1, 0x2d, 0x8f, 0xe4, 0x6c, 0x67, 0xfb, + 0xc4, 0xfd, 0x5f, 0xe6, 0x6d, 0xf8, 0x53, 0xfe, 0x43, 0xe9, 0xfe, 0xe3, + 0x7f, 0x2a, 0xc2, 0xf1, 0x4f, 0xfc, 0x8c, 0xd7, 0xff, 0x00, 0xf5, 0xd0, + 0x7f, 0x2a, 0xe8, 0xbc, 0x21, 0x0b, 0x3e, 0xb0, 0xd2, 0xe0, 0xed, 0x89, + 0x0e, 0x4f, 0xd6, 0xb0, 0xbc, 0x61, 0x6e, 0xd6, 0xfe, 0x26, 0xba, 0xdd, + 0x9c, 0x4b, 0xb5, 0xd4, 0x9e, 0xfc, 0x57, 0x97, 0x9a, 0xaf, 0xdd, 0xa7, + 0xe6, 0x7d, 0xaf, 0x0f, 0x45, 0xac, 0x05, 0xdf, 0x59, 0x3f, 0xd0, 0xc3, + 0xa2, 0x8e, 0x94, 0x57, 0x86, 0x7b, 0x01, 0x46, 0x28, 0xab, 0x3a, 0x7e, + 0x9b, 0x73, 0xa9, 0xdd, 0x8b, 0x6b, 0x58, 0xf7, 0xbb, 0x72, 0x49, 0xe8, + 0x07, 0xbd, 0x34, 0x9b, 0x76, 0x43, 0x48, 0x8a, 0xde, 0x09, 0x2e, 0xae, + 0x23, 0xb7, 0x84, 0x13, 0x24, 0x84, 0x2a, 0x81, 0xef, 0x5e, 0xcb, 0xa6, + 0x5a, 0xfd, 0x87, 0x4b, 0xb6, 0xb6, 0x27, 0x26, 0x28, 0xc2, 0x92, 0x7e, + 0x95, 0x8d, 0xe1, 0xcf, 0x0b, 0xc3, 0xa1, 0xab, 0x5c, 0x4d, 0x20, 0x96, + 0xe8, 0x8e, 0x64, 0xe8, 0x10, 0x77, 0x02, 0xb3, 0xf5, 0xbf, 0x1d, 0x25, + 0xac, 0xef, 0x6f, 0xa7, 0xc2, 0x26, 0x91, 0x78, 0x69, 0x5f, 0xee, 0xfe, + 0x1e, 0xb5, 0xeb, 0xe1, 0xe1, 0x1c, 0x24, 0x1c, 0xea, 0xbb, 0x37, 0xd0, + 0xe8, 0x82, 0x54, 0xd5, 0xe4, 0x75, 0x7a, 0x85, 0x94, 0x3a, 0x85, 0x94, + 0xb6, 0xd3, 0xa8, 0x68, 0xdc, 0x63, 0xe9, 0xef, 0x5e, 0x35, 0x77, 0x6d, + 0xf6, 0x3b, 0xe9, 0xed, 0x89, 0xdd, 0xe5, 0x39, 0x40, 0xc2, 0xb6, 0x6e, + 0x3c, 0x67, 0xad, 0x5c, 0x23, 0x28, 0x9d, 0x22, 0x56, 0x04, 0x10, 0x91, + 0x8e, 0x95, 0x82, 0xcc, 0x5d, 0xd9, 0x99, 0x8b, 0x16, 0x39, 0x24, 0xf7, + 0x35, 0xc9, 0x8c, 0xc4, 0x53, 0xac, 0xd3, 0x8a, 0xd4, 0xce, 0xa4, 0xd4, + 0xb6, 0x12, 0x8a, 0x29, 0x32, 0x2b, 0x88, 0xc8, 0xeb, 0x6c, 0x7f, 0xe4, + 0x98, 0xea, 0xe3, 0xbe, 0xf6, 0xfe, 0x4b, 0x5e, 0x6c, 0x8e, 0xd1, 0xb6, + 0xe4, 0x72, 0xa4, 0x1c, 0xe5, 0x49, 0x15, 0xea, 0xda, 0x5e, 0x9b, 0x24, + 0xbf, 0x0e, 0x6f, 0xe3, 0x0a, 0xde, 0x65, 0xc2, 0x49, 0x22, 0x8c, 0x75, + 0xc0, 0xe3, 0xf9, 0x57, 0x94, 0x10, 0x46, 0x72, 0x39, 0x07, 0x06, 0xbf, + 0x4f, 0xe1, 0x5b, 0x7d, 0x4b, 0x95, 0xef, 0x7f, 0xd0, 0xfd, 0x0f, 0x85, + 0x1a, 0x78, 0x59, 0x45, 0xf7, 0xfd, 0x04, 0xce, 0x54, 0x0c, 0x9c, 0x0e, + 0x99, 0xed, 0x5e, 0xdd, 0xe0, 0xad, 0x72, 0x3d, 0x5f, 0x41, 0x84, 0x34, + 0x83, 0xed, 0x16, 0xea, 0x23, 0x95, 0x49, 0xe7, 0x8e, 0x87, 0xf2, 0xaf, + 0x11, 0xab, 0x9a, 0x66, 0xa9, 0x79, 0xa4, 0x5e, 0x2d, 0xd5, 0x94, 0xc6, + 0x39, 0x01, 0xe4, 0x76, 0x6f, 0x62, 0x3b, 0x8a, 0xf5, 0xf3, 0x1c, 0x0a, + 0xc5, 0x52, 0xe5, 0x8e, 0x8d, 0x6c, 0x7a, 0xd9, 0xb6, 0x5d, 0xf5, 0xda, + 0x1c, 0x8b, 0x49, 0x2d, 0x51, 0xd8, 0xf8, 0xf2, 0xe7, 0xcd, 0xf1, 0xcd, + 0x8c, 0x20, 0xe5, 0x61, 0x11, 0x0f, 0xc4, 0xb6, 0x6b, 0xd5, 0x97, 0xa7, + 0xe3, 0x5e, 0x00, 0xfa, 0x94, 0xfa, 0xb7, 0x88, 0xe1, 0xbd, 0xb9, 0x20, + 0xcb, 0x24, 0xe9, 0x9c, 0x0c, 0x00, 0x32, 0x2b, 0xdf, 0xd4, 0xf1, 0xf8, + 0xd7, 0x81, 0x9b, 0x52, 0xf6, 0x34, 0xe8, 0xd3, 0x7b, 0xa4, 0xff, 0x00, + 0x43, 0xe5, 0xf3, 0xca, 0x0f, 0x0f, 0x46, 0x85, 0x27, 0xba, 0x4f, 0xf4, + 0x1d, 0x5c, 0x7f, 0xc4, 0x9f, 0xf9, 0x14, 0x5f, 0xfe, 0xbb, 0xa5, 0x76, + 0x19, 0x15, 0xc7, 0xfc, 0x49, 0x38, 0xf0, 0x93, 0xfa, 0xf9, 0xe9, 0x5c, + 0x19, 0x7f, 0xfb, 0xd5, 0x3f, 0x54, 0x79, 0xb9, 0x5f, 0xfb, 0xed, 0x2f, + 0x55, 0xf9, 0x97, 0x7c, 0x1f, 0x77, 0x1b, 0x78, 0x33, 0x4f, 0x91, 0xe4, + 0x40, 0xb1, 0x43, 0xb5, 0x98, 0x9e, 0x14, 0x2f, 0x1c, 0xfa, 0x71, 0x5e, + 0x63, 0xe3, 0x6d, 0x75, 0x35, 0xbd, 0x71, 0x8c, 0x27, 0x36, 0xf6, 0xe3, + 0xca, 0x8c, 0xe7, 0xaf, 0xa9, 0xfc, 0xeb, 0x21, 0x75, 0x7b, 0xf8, 0xf4, + 0xd6, 0xd3, 0x92, 0xea, 0x45, 0xb4, 0x66, 0xdc, 0x62, 0x07, 0x1c, 0xd5, + 0x2e, 0x00, 0xf6, 0xaf, 0xa9, 0xc2, 0x65, 0x8a, 0x8e, 0x22, 0x75, 0xe4, + 0xf7, 0x6e, 0xde, 0x57, 0x3e, 0xcf, 0x03, 0x93, 0xac, 0x3e, 0x26, 0x78, + 0x89, 0x3b, 0xb6, 0xdd, 0xbc, 0x93, 0x0f, 0x5f, 0x7a, 0x7c, 0x3f, 0xeb, + 0xe3, 0xff, 0x00, 0x78, 0x7f, 0x3a, 0x65, 0x5c, 0xd2, 0xad, 0x5a, 0xf7, + 0x58, 0xb4, 0xb5, 0x5c, 0xee, 0x92, 0x65, 0x5f, 0xc3, 0x23, 0x35, 0xea, + 0x4d, 0xa8, 0xc5, 0xb6, 0x7b, 0x33, 0x92, 0x8c, 0x1c, 0x99, 0xd4, 0xfc, + 0x68, 0xff, 0x00, 0x8f, 0xdd, 0x23, 0xfe, 0xb9, 0xc9, 0xfc, 0xd6, 0xbc, + 0xb6, 0xbd, 0x73, 0xe3, 0x2d, 0x94, 0x8d, 0x6f, 0xa6, 0x5f, 0x00, 0x4c, + 0x71, 0x97, 0x89, 0xb8, 0xe9, 0x9c, 0x11, 0xfc, 0x8d, 0x79, 0x1d, 0x7e, + 0x35, 0x8b, 0x56, 0xac, 0xcc, 0x78, 0x72, 0x6a, 0x59, 0x6d, 0x3b, 0x74, + 0xbf, 0xe6, 0xc2, 0x8a, 0x28, 0xae, 0x63, 0xdc, 0x3b, 0x6f, 0x85, 0x5f, + 0xf2, 0x3c, 0xdb, 0xff, 0x00, 0xd7, 0x09, 0x3f, 0x95, 0x7a, 0xcf, 0x8e, + 0x88, 0x1e, 0x06, 0xd5, 0xc6, 0x7f, 0xe5, 0x87, 0xf5, 0x15, 0xe3, 0xbf, + 0x0e, 0x2f, 0xad, 0xac, 0x3c, 0x6d, 0x69, 0x25, 0xcc, 0xab, 0x14, 0x6e, + 0xaf, 0x10, 0x62, 0x70, 0x32, 0x46, 0x06, 0x4f, 0xd6, 0xbd, 0x57, 0xe2, + 0x1e, 0xa7, 0x69, 0x6d, 0xe0, 0xcb, 0xf4, 0x7b, 0x98, 0xc3, 0xdc, 0x46, + 0x12, 0x25, 0x0c, 0x09, 0x62, 0x48, 0xe4, 0x0e, 0xf5, 0xea, 0x61, 0x64, + 0x96, 0x1e, 0x57, 0x7d, 0xcf, 0x82, 0xcf, 0x69, 0xce, 0x59, 0xcd, 0x16, + 0x97, 0xf2, 0xff, 0x00, 0xe9, 0x4c, 0xe9, 0x74, 0xe2, 0x3f, 0xb2, 0xed, + 0x7f, 0xeb, 0x8a, 0x7f, 0xe8, 0x35, 0xcb, 0xe9, 0xba, 0x75, 0xbd, 0xee, + 0x8f, 0xaf, 0x2b, 0xc6, 0x55, 0xa7, 0xbe, 0xb9, 0x49, 0x1a, 0x12, 0xaa, + 0xee, 0xbb, 0xbe, 0xee, 0xe3, 0xd3, 0x3d, 0x2b, 0x77, 0x46, 0xd5, 0x6c, + 0x6e, 0xb4, 0x2b, 0x6b, 0xa8, 0xae, 0xe1, 0x30, 0xac, 0x2a, 0x59, 0x8b, + 0x80, 0x17, 0x8e, 0x73, 0xe9, 0x5c, 0x0b, 0xf8, 0xb6, 0x3b, 0x6f, 0x0d, + 0x6a, 0x37, 0x1a, 0x6a, 0xd8, 0xdf, 0x0f, 0xed, 0x19, 0x9a, 0x6b, 0x69, + 0xce, 0x4b, 0x42, 0xcc, 0x70, 0xc0, 0x0e, 0xa3, 0xd7, 0xda, 0xba, 0x67, + 0x38, 0x24, 0x9b, 0xec, 0xff, 0x00, 0x23, 0xc3, 0xc2, 0x61, 0xeb, 0xce, + 0x53, 0x8d, 0x34, 0xd3, 0xe6, 0x8f, 0xe6, 0xce, 0x13, 0xc5, 0x3f, 0x6a, + 0xb6, 0x9c, 0x59, 0x9d, 0x3a, 0x1d, 0x36, 0xd1, 0x3f, 0xd5, 0xdb, 0xc5, + 0x22, 0xb9, 0x3e, 0xee, 0xc0, 0x92, 0xc7, 0xeb, 0x5c, 0xe5, 0x6b, 0x6a, + 0xda, 0xa6, 0x9f, 0xa9, 0x66, 0x48, 0x74, 0x78, 0x6c, 0xa6, 0x27, 0x24, + 0xc1, 0x2b, 0x6d, 0x3f, 0xf0, 0x13, 0x9c, 0x7e, 0x15, 0x93, 0x5e, 0x2d, + 0x46, 0x9c, 0xae, 0x8f, 0xd3, 0xf0, 0x70, 0x94, 0x28, 0xa8, 0xc9, 0x59, + 0xff, 0x00, 0x5e, 0x6f, 0xf3, 0x0a, 0xf4, 0x1f, 0x84, 0x1f, 0xf2, 0x38, + 0x4f, 0xff, 0x00, 0x5e, 0x6f, 0xff, 0x00, 0xa1, 0x2d, 0x79, 0xf5, 0x7a, + 0x57, 0xc1, 0xcb, 0x46, 0x6d, 0x72, 0xfe, 0xf4, 0x83, 0xb2, 0x28, 0x3c, + 0xbc, 0xe3, 0x8c, 0xb3, 0x03, 0xfc, 0x96, 0xb5, 0xc2, 0xab, 0xd6, 0x89, + 0xc5, 0x9e, 0xcd, 0x47, 0x2e, 0xaa, 0xdf, 0x63, 0x6b, 0x5b, 0xff, 0x00, + 0x90, 0xdd, 0xdf, 0xfd, 0x75, 0x6a, 0xa1, 0x5a, 0x9e, 0x22, 0x84, 0xc3, + 0xae, 0x5c, 0x64, 0x1c, 0x3b, 0x6e, 0x07, 0xeb, 0x59, 0x75, 0xf4, 0x28, + 0xfe, 0x49, 0xc7, 0x45, 0xc7, 0x13, 0x51, 0x3f, 0xe6, 0x7f, 0x99, 0xe9, + 0x3a, 0x26, 0x92, 0xba, 0x5d, 0x90, 0x43, 0x83, 0x33, 0x73, 0x23, 0x7a, + 0xd5, 0x0f, 0x15, 0xf8, 0x7b, 0xfb, 0x6a, 0xcc, 0x49, 0x00, 0x02, 0xea, + 0x2e, 0x50, 0x9f, 0xe2, 0x1e, 0x95, 0xd1, 0xe6, 0x90, 0x91, 0x8e, 0xb5, + 0x8d, 0x5a, 0x71, 0xab, 0x17, 0x19, 0x1f, 0xab, 0x52, 0xc3, 0xd3, 0xa3, + 0x49, 0x52, 0x82, 0xb4, 0x51, 0xe1, 0x93, 0xc1, 0x25, 0xad, 0xc3, 0x41, + 0x3c, 0x66, 0x39, 0x54, 0xe0, 0xab, 0x53, 0x6b, 0xd2, 0xfc, 0x51, 0xe2, + 0x5f, 0x09, 0xe9, 0x60, 0xc5, 0xad, 0xdd, 0x5b, 0xbc, 0xa0, 0x7f, 0xa9, + 0x03, 0x7c, 0x9f, 0x90, 0xe4, 0x7e, 0x35, 0xc4, 0xbf, 0x8e, 0x7e, 0x1b, + 0x6f, 0xff, 0x00, 0x8f, 0x1b, 0xc3, 0xfe, 0xec, 0x0c, 0x3f, 0xf6, 0x6a, + 0xf1, 0x67, 0x97, 0xb8, 0xbd, 0x24, 0x8d, 0x23, 0x97, 0xd7, 0x9e, 0xb0, + 0x8b, 0x68, 0xca, 0x3d, 0x0d, 0x5a, 0xd3, 0xf5, 0x1b, 0xad, 0x2e, 0xe4, + 0xcf, 0x67, 0x2f, 0x96, 0xe4, 0x6d, 0x27, 0x19, 0xc8, 0xab, 0x5f, 0xf0, + 0x9c, 0xfc, 0x36, 0xff, 0x00, 0xa0, 0x7d, 0xef, 0xfd, 0xfa, 0x3f, 0xfc, + 0x55, 0x1f, 0xf0, 0x9c, 0xfc, 0x36, 0xff, 0x00, 0xa0, 0x7d, 0xef, 0xfd, + 0xfa, 0x3f, 0xfc, 0x55, 0x4a, 0xc1, 0x4d, 0x3b, 0xa9, 0x22, 0x96, 0x59, + 0x8b, 0x5f, 0x61, 0x8c, 0xba, 0xf1, 0x06, 0xaf, 0x76, 0xac, 0xb3, 0x5f, + 0xcc, 0x55, 0xba, 0xaa, 0x9c, 0x0f, 0xd2, 0xb3, 0x40, 0xe4, 0xff, 0x00, + 0x3c, 0xe7, 0x35, 0xab, 0xff, 0x00, 0x09, 0xcf, 0xc3, 0x6f, 0xfa, 0x07, + 0xde, 0xff, 0x00, 0xdf, 0xa3, 0xff, 0x00, 0xc5, 0x51, 0xff, 0x00, 0x09, + 0xcf, 0xc3, 0x6f, 0xfa, 0x07, 0xde, 0xff, 0x00, 0xdf, 0xa3, 0xff, 0x00, + 0xc5, 0x53, 0x96, 0x0e, 0xa4, 0x9d, 0xe5, 0x34, 0xfe, 0x6c, 0x6f, 0x2d, + 0xc5, 0xbd, 0xe0, 0xcc, 0xba, 0x2b, 0x53, 0xfe, 0x13, 0x9f, 0x86, 0xdf, + 0xf4, 0x0f, 0xbd, 0xff, 0x00, 0xbf, 0x47, 0xff, 0x00, 0x8a, 0xa3, 0xfe, + 0x13, 0x9f, 0x86, 0xdd, 0xac, 0x2f, 0x73, 0xff, 0x00, 0x5c, 0x8f, 0xff, + 0x00, 0x15, 0x53, 0xf5, 0x19, 0xff, 0x00, 0x32, 0x17, 0xf6, 0x5e, 0x2b, + 0xf9, 0x19, 0x96, 0x78, 0x07, 0x3d, 0x2b, 0x67, 0x41, 0xf0, 0xf5, 0xce, + 0xb7, 0x72, 0xa7, 0x6b, 0x25, 0xa0, 0x23, 0x7c, 0x85, 0x48, 0x04, 0x77, + 0x03, 0xd6, 0xa6, 0xd3, 0xfc, 0x6f, 0xf0, 0xdd, 0xae, 0x06, 0x21, 0x78, + 0x5b, 0x23, 0x0d, 0x3c, 0x0c, 0x46, 0x7f, 0x5a, 0xf4, 0xad, 0x36, 0xf2, + 0xc6, 0xfa, 0xca, 0x39, 0xf4, 0xf9, 0xa0, 0x9a, 0xd8, 0xfd, 0xd6, 0x85, + 0x81, 0x5f, 0xd3, 0xbd, 0x6f, 0x47, 0x2f, 0xbb, 0xbc, 0xe4, 0x9f, 0xa1, + 0x12, 0xc1, 0x55, 0xa5, 0xad, 0x45, 0x62, 0x78, 0x20, 0x4b, 0x7b, 0x78, + 0xe0, 0x89, 0x40, 0x44, 0x5d, 0xa0, 0x63, 0xb5, 0x79, 0x3f, 0x8d, 0x7c, + 0x19, 0x3d, 0x85, 0xdc, 0x9a, 0x8e, 0x9f, 0x03, 0x49, 0x67, 0x21, 0x2e, + 0xe8, 0xa0, 0x93, 0x11, 0xef, 0xf8, 0x57, 0xae, 0xe4, 0x01, 0x9f, 0x4a, + 0x6c, 0xad, 0x1a, 0x44, 0xcd, 0x23, 0x2a, 0xa0, 0x19, 0x2c, 0xc7, 0x00, + 0x57, 0xd1, 0xe0, 0xf1, 0x93, 0xc1, 0xcf, 0x9e, 0x1b, 0x75, 0x47, 0xa3, + 0x97, 0xe3, 0xea, 0xe0, 0xaa, 0xf3, 0xd3, 0xd6, 0xfb, 0xae, 0xe7, 0xcd, + 0xb4, 0x57, 0xb0, 0x6a, 0x87, 0xc1, 0x93, 0x4e, 0xc6, 0xe2, 0xd6, 0x19, + 0xa5, 0x27, 0xe6, 0x68, 0x63, 0x23, 0xf5, 0x18, 0x15, 0x43, 0xc9, 0xf0, + 0x27, 0xfd, 0x03, 0x64, 0xfc, 0x9b, 0xff, 0x00, 0x8a, 0xaf, 0x5f, 0xfd, + 0x6e, 0xcb, 0xd6, 0x92, 0x7a, 0xfa, 0xaf, 0xf3, 0x3e, 0xd2, 0x9e, 0x76, + 0xa5, 0x14, 0xdd, 0x19, 0xfd, 0xcb, 0xfc, 0xcf, 0x31, 0x86, 0x56, 0x82, + 0x78, 0xe5, 0x4c, 0x6e, 0x46, 0x0c, 0x32, 0x38, 0xc8, 0x39, 0xae, 0xb8, + 0x7c, 0x4c, 0xd7, 0xb0, 0x00, 0x4b, 0x3c, 0x0f, 0xfa, 0x64, 0x7f, 0xc6, + 0xba, 0x0f, 0x27, 0xc0, 0x9f, 0xf4, 0x0d, 0x93, 0xf2, 0x6f, 0xfe, 0x2a, + 0x8f, 0x27, 0xc0, 0x9f, 0xf4, 0x0d, 0x93, 0xf2, 0x6f, 0xfe, 0x2a, 0xb0, + 0xad, 0xc4, 0xd9, 0x3d, 0x66, 0x9d, 0x4d, 0x6d, 0xe9, 0xfe, 0x66, 0x35, + 0xf1, 0xb8, 0x6c, 0x43, 0x4e, 0xb6, 0x1e, 0x4e, 0xdd, 0xd2, 0xff, 0x00, + 0x33, 0x07, 0xfe, 0x16, 0x76, 0xbd, 0xff, 0x00, 0x3c, 0xec, 0xff, 0x00, + 0xef, 0xd1, 0xff, 0x00, 0x1a, 0xcf, 0xd6, 0x7c, 0x6b, 0xa9, 0xeb, 0x96, + 0x0d, 0x65, 0x74, 0x90, 0x08, 0x8b, 0x06, 0xca, 0x29, 0x07, 0x8f, 0xc6, + 0xba, 0xdf, 0x2b, 0xc0, 0x9f, 0xf4, 0x0d, 0x93, 0xf2, 0x6f, 0xfe, 0x2a, + 0x97, 0xc9, 0xf0, 0x27, 0xfd, 0x03, 0x64, 0xfc, 0x9b, 0xff, 0x00, 0x8a, + 0xac, 0xe1, 0xc4, 0x39, 0x24, 0x24, 0xa5, 0x14, 0x93, 0x5e, 0x9f, 0xe6, + 0x65, 0x0a, 0xd8, 0x2a, 0x72, 0x53, 0x86, 0x16, 0x49, 0xaf, 0x25, 0xfe, + 0x67, 0x97, 0x51, 0x5e, 0xa3, 0xe4, 0xf8, 0x13, 0xfe, 0x81, 0xb2, 0x7e, + 0x4d, 0xff, 0x00, 0xc5, 0x52, 0x79, 0x3e, 0x05, 0xed, 0xa6, 0xc9, 0x9f, + 0xa3, 0x7f, 0xf1, 0x55, 0xd7, 0xfe, 0xb8, 0x65, 0xbf, 0xcd, 0xf9, 0x7f, + 0x99, 0xdd, 0xfd, 0xb2, 0xbf, 0xe7, 0xcc, 0xfe, 0xe5, 0xfe, 0x67, 0x98, + 0xc7, 0x1b, 0xcb, 0x22, 0xc6, 0x8a, 0xcc, 0xec, 0x70, 0x15, 0x46, 0x49, + 0xfc, 0x2b, 0xd4, 0xfc, 0x07, 0xe0, 0xf9, 0x34, 0xec, 0x6a, 0x9a, 0x82, + 0x6d, 0xb9, 0x75, 0xc4, 0x51, 0x11, 0xf7, 0x01, 0xee, 0x7d, 0xeb, 0x63, + 0x44, 0x7f, 0x0a, 0x47, 0x20, 0x1a, 0x7c, 0x56, 0xd0, 0x4a, 0x70, 0x3e, + 0x74, 0xc3, 0x1f, 0xc4, 0xff, 0x00, 0x8d, 0x74, 0xfc, 0x0c, 0x74, 0xae, + 0x6c, 0x5e, 0x7d, 0x1c, 0x65, 0x37, 0x0c, 0x3f, 0xc2, 0xf7, 0x77, 0x3c, + 0x0c, 0xdb, 0x3b, 0xab, 0x5a, 0x0e, 0x84, 0x20, 0xe0, 0x9e, 0xf7, 0xdd, + 0x99, 0x9a, 0xee, 0x8b, 0x6d, 0xaf, 0x68, 0xf7, 0x1a, 0x75, 0xce, 0x76, + 0x48, 0xbf, 0x2b, 0x63, 0x25, 0x1b, 0xb1, 0x1f, 0x4a, 0xf9, 0xe7, 0xc4, + 0x1e, 0x1b, 0xd4, 0x7c, 0x39, 0x7e, 0xf6, 0xf7, 0x90, 0x91, 0x1e, 0x7e, + 0x49, 0x80, 0x3b, 0x24, 0x1d, 0xb0, 0x7a, 0x66, 0xbe, 0x99, 0x3d, 0x2b, + 0x33, 0x59, 0xb9, 0xd2, 0x60, 0xb4, 0x6f, 0xed, 0x76, 0xb7, 0x16, 0xec, + 0x08, 0xc4, 0xf8, 0x21, 0xbd, 0x70, 0x3a, 0x9f, 0xc2, 0xbe, 0x7e, 0xb6, + 0x13, 0xdb, 0xb5, 0xcb, 0xf1, 0x1c, 0x79, 0x4e, 0x7b, 0x3c, 0xb6, 0xea, + 0x5a, 0xc1, 0xee, 0xb6, 0xb7, 0x9a, 0x3e, 0x61, 0xa2, 0xbd, 0x76, 0xea, + 0xe3, 0xe1, 0xa3, 0x4c, 0x73, 0xa6, 0x16, 0x39, 0xeb, 0x0c, 0x6e, 0xa3, + 0xf9, 0x8a, 0x87, 0xcf, 0xf8, 0x69, 0xff, 0x00, 0x40, 0xa9, 0xff, 0x00, + 0xef, 0x97, 0xff, 0x00, 0xe2, 0xaa, 0x3f, 0xd5, 0xfc, 0x73, 0xda, 0x0f, + 0xee, 0x67, 0xd0, 0xff, 0x00, 0xaf, 0xb9, 0x5f, 0x5b, 0xfe, 0x1f, 0xe6, + 0x79, 0x45, 0x38, 0xb1, 0x6c, 0x64, 0xf4, 0xe9, 0xd4, 0xd7, 0xaa, 0xf9, + 0xff, 0x00, 0x0d, 0x3f, 0xe8, 0x15, 0x3f, 0xfd, 0xf2, 0xff, 0x00, 0xfc, + 0x55, 0x1e, 0x7f, 0xc3, 0x4f, 0xfa, 0x05, 0x4f, 0xff, 0x00, 0x7c, 0xbf, + 0xff, 0x00, 0x15, 0x47, 0xfa, 0xbf, 0x8f, 0xfe, 0x47, 0xf8, 0x89, 0xf1, + 0xe6, 0x54, 0xfb, 0xfe, 0x1f, 0xe6, 0x79, 0x50, 0x66, 0x03, 0x68, 0x24, + 0x0e, 0xb8, 0xcf, 0x14, 0x80, 0x90, 0x0e, 0x38, 0xc8, 0xe4, 0x03, 0x5e, + 0xad, 0xe7, 0xfc, 0x34, 0xff, 0x00, 0xa0, 0x54, 0xff, 0x00, 0xf7, 0xcb, + 0xff, 0x00, 0xf1, 0x54, 0x79, 0xff, 0x00, 0x0d, 0x3f, 0xe8, 0x15, 0x3f, + 0xfd, 0xf2, 0xff, 0x00, 0xfc, 0x55, 0x1f, 0xd8, 0x18, 0xff, 0x00, 0xe4, + 0x7f, 0x88, 0xbf, 0xd7, 0xbc, 0xa7, 0xcf, 0xf0, 0xff, 0x00, 0x33, 0xca, + 0x29, 0x40, 0xc9, 0xc5, 0x7a, 0xb7, 0x9f, 0xf0, 0xd3, 0xfe, 0x81, 0x53, + 0xff, 0x00, 0xdf, 0x2f, 0xff, 0x00, 0xc5, 0x53, 0xe2, 0x9f, 0xe1, 0xa7, + 0x98, 0xbf, 0xf1, 0x2b, 0x94, 0x7b, 0xb2, 0x39, 0x1f, 0xfa, 0x15, 0x1f, + 0xea, 0xfe, 0x3b, 0xf9, 0x1f, 0xdc, 0xff, 0x00, 0xc8, 0x6f, 0x8f, 0x72, + 0xaf, 0x3f, 0xc3, 0xfc, 0xcf, 0x35, 0xd1, 0xf4, 0x6d, 0x43, 0x5c, 0xbd, + 0x4b, 0x5d, 0x3e, 0xdd, 0xe5, 0x76, 0x20, 0x13, 0xfc, 0x28, 0x3d, 0x58, + 0xf6, 0x15, 0xf4, 0x2f, 0x85, 0xbc, 0x39, 0x07, 0x86, 0x34, 0x54, 0xb1, + 0x8b, 0xe7, 0x94, 0x9d, 0xd3, 0x4b, 0x8f, 0xbe, 0xde, 0xbf, 0x4a, 0x77, + 0x87, 0xee, 0xb4, 0x19, 0x6d, 0x42, 0x68, 0x8f, 0x68, 0x22, 0x5e, 0xb1, + 0xc2, 0x02, 0x91, 0xf5, 0x1d, 0x6b, 0x6f, 0x23, 0xd6, 0xaa, 0x8e, 0x0d, + 0xe1, 0xdb, 0xe7, 0xf8, 0x8f, 0x0b, 0x36, 0xe2, 0x09, 0xe6, 0x69, 0x46, + 0x9e, 0x94, 0xfe, 0xfb, 0xfa, 0x98, 0x5e, 0x22, 0xd1, 0x7f, 0xb4, 0xad, + 0xbc, 0xd8, 0x97, 0xfd, 0x22, 0x20, 0x76, 0xff, 0x00, 0xb4, 0x3d, 0x2b, + 0x81, 0x96, 0x29, 0x20, 0x91, 0xa3, 0x95, 0x19, 0x1d, 0x4e, 0x08, 0x23, + 0x15, 0xeb, 0x47, 0x18, 0x35, 0x91, 0x7b, 0xad, 0x68, 0x36, 0xb7, 0x26, + 0x1b, 0xeb, 0xfb, 0x18, 0xa7, 0x03, 0x94, 0x96, 0x55, 0x0c, 0x3f, 0x33, + 0x5d, 0x2e, 0x6a, 0x2b, 0x53, 0xe0, 0xf3, 0x1e, 0x1d, 0x59, 0x85, 0x5f, + 0x69, 0x45, 0xda, 0x5d, 0x6c, 0xaf, 0x73, 0x1b, 0xc0, 0x5e, 0x2d, 0x1e, + 0x28, 0xd1, 0x9b, 0xed, 0x0c, 0xa2, 0xfe, 0xdb, 0xe4, 0xb8, 0x03, 0xf8, + 0xb8, 0xe1, 0xc7, 0xd6, 0xb2, 0x3e, 0x29, 0xf8, 0xee, 0x4f, 0x0d, 0xd8, + 0x47, 0xa7, 0x69, 0xaf, 0xb7, 0x52, 0xbb, 0x52, 0x77, 0xf7, 0x86, 0x3e, + 0x9b, 0xbe, 0xa7, 0xb5, 0x71, 0xff, 0x00, 0x09, 0xae, 0xe4, 0x8b, 0xc6, + 0x86, 0x05, 0x38, 0x8e, 0xe2, 0xd9, 0xc3, 0x28, 0xef, 0x8e, 0x45, 0x73, + 0x3f, 0x14, 0x6e, 0xe4, 0xbb, 0xf8, 0x87, 0xaa, 0x17, 0x6e, 0x22, 0x65, + 0x89, 0x41, 0xfe, 0x15, 0x0a, 0x3f, 0xae, 0x6b, 0x2a, 0xd2, 0x71, 0x8e, + 0x87, 0xd7, 0x65, 0xb4, 0x23, 0x5a, 0xb7, 0xbd, 0xb2, 0xd4, 0xe4, 0xa5, + 0x92, 0x49, 0xa6, 0x79, 0x66, 0x91, 0xe4, 0x91, 0xce, 0xe6, 0x76, 0x39, + 0x2c, 0x7d, 0xe9, 0xb4, 0x75, 0xa3, 0xad, 0x70, 0x9f, 0x54, 0x82, 0x8a, + 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xa0, 0x02, 0x8a, 0x28, 0xcd, 0x00, 0x15, + 0xbf, 0xe1, 0x3f, 0x16, 0xea, 0x1e, 0x12, 0xd5, 0x63, 0xba, 0xb5, 0x91, + 0x9a, 0xdc, 0x91, 0xe7, 0xdb, 0x92, 0x4a, 0xc8, 0xb9, 0xe7, 0x8f, 0x5f, + 0x4a, 0xc0, 0xa3, 0xdc, 0xf4, 0xa6, 0x9b, 0x5a, 0xa2, 0x67, 0x08, 0xce, + 0x2e, 0x32, 0x57, 0x4c, 0xfa, 0xfb, 0x4c, 0xd4, 0xad, 0xb5, 0x5d, 0x32, + 0x0d, 0x4a, 0xda, 0x40, 0xd0, 0x4f, 0x18, 0x91, 0x5b, 0x3d, 0xbb, 0x8f, + 0xc0, 0xd7, 0x09, 0xe2, 0x3d, 0x7e, 0x6d, 0x4a, 0xf1, 0xe1, 0x85, 0xca, + 0xda, 0xc6, 0x70, 0x14, 0x1c, 0x6e, 0x3e, 0xb5, 0x4b, 0xe1, 0x9e, 0xa3, + 0x70, 0x7e, 0x14, 0xde, 0x02, 0xc4, 0xfd, 0x9a, 0x59, 0x62, 0x8c, 0xfa, + 0x02, 0x01, 0xff, 0x00, 0xd9, 0xab, 0x3b, 0x9e, 0x3e, 0x9c, 0xe6, 0xbc, + 0xdc, 0xef, 0x17, 0x25, 0x18, 0xd2, 0x8b, 0xb5, 0xf5, 0x67, 0x97, 0x96, + 0x60, 0xa3, 0x0a, 0xb3, 0x93, 0xd7, 0x95, 0xd9, 0x0b, 0xc8, 0x38, 0x1f, + 0x89, 0xa2, 0x8a, 0x2b, 0xe6, 0x0f, 0x7c, 0x2a, 0x6b, 0x5b, 0x59, 0xaf, + 0x2e, 0x56, 0xda, 0xd9, 0x4b, 0x48, 0xdd, 0x07, 0xf5, 0xfa, 0x54, 0x35, + 0xbd, 0xe1, 0x1b, 0xc8, 0x2c, 0xf5, 0x92, 0x2e, 0x5c, 0x22, 0xc9, 0x1e, + 0xd4, 0x73, 0xd0, 0x1c, 0xfa, 0xfb, 0xd7, 0x46, 0x16, 0x9c, 0x6a, 0x56, + 0x8c, 0x26, 0xec, 0x9b, 0x30, 0xc4, 0xd4, 0x95, 0x3a, 0x52, 0x9c, 0x15, + 0xda, 0x44, 0x57, 0xde, 0x17, 0xd4, 0xb4, 0xfb, 0x63, 0x70, 0xe8, 0x8f, + 0x1a, 0x8f, 0x9b, 0x63, 0x12, 0x47, 0xb9, 0xac, 0x6e, 0xb5, 0xea, 0x9a, + 0xbe, 0xa1, 0x6b, 0x6b, 0xa6, 0xce, 0xf2, 0xca, 0x98, 0x74, 0x2a, 0xaa, + 0x08, 0x3b, 0xb2, 0x2b, 0xca, 0x87, 0xf0, 0xe7, 0x8c, 0x8a, 0xed, 0xcd, + 0x70, 0x74, 0x70, 0xd3, 0x4a, 0x93, 0xdc, 0xe3, 0xcb, 0x31, 0x55, 0x71, + 0x10, 0x6e, 0xa2, 0xd8, 0x5a, 0x28, 0xa2, 0xbc, 0x93, 0xd3, 0x0e, 0x9d, + 0x38, 0x3f, 0x5c, 0x57, 0x67, 0xe1, 0x2f, 0x10, 0xc9, 0x23, 0x8d, 0x3a, + 0xee, 0x4d, 0xd9, 0xff, 0x00, 0x52, 0xed, 0xd7, 0xe8, 0x6b, 0x8c, 0xa9, + 0xac, 0xe6, 0x6b, 0x7b, 0xeb, 0x69, 0x94, 0xfc, 0xd1, 0xba, 0xb7, 0x1f, + 0x5a, 0xed, 0xc1, 0x62, 0xa5, 0x87, 0xaa, 0xa5, 0x17, 0xa7, 0x5f, 0x43, + 0x93, 0x19, 0x86, 0x8d, 0x7a, 0x4e, 0x2d, 0x6b, 0xd0, 0xf4, 0xaf, 0x10, + 0xeb, 0x51, 0x68, 0x3a, 0x44, 0xb7, 0xb2, 0x00, 0xce, 0xa3, 0x6c, 0x68, + 0x4e, 0x37, 0xb9, 0xe8, 0x2b, 0xc3, 0x75, 0x4d, 0x52, 0xf3, 0x58, 0xbd, + 0x7b, 0xbb, 0xc9, 0x9a, 0x49, 0x18, 0x9c, 0x02, 0x70, 0x14, 0x7a, 0x01, + 0x5d, 0xf7, 0xc5, 0x7b, 0x97, 0xdb, 0xa6, 0xdb, 0x67, 0x08, 0x77, 0xc8, + 0x47, 0xa9, 0x18, 0x03, 0xf9, 0xd7, 0x9a, 0x57, 0xed, 0xd9, 0x1e, 0x16, + 0x10, 0xa1, 0xed, 0x9a, 0xf7, 0xa5, 0xf9, 0x1f, 0x8f, 0xe7, 0x18, 0x99, + 0xca, 0xb7, 0xb2, 0x4f, 0x44, 0x14, 0x51, 0x45, 0x7b, 0xa7, 0x8c, 0x15, + 0xd0, 0x78, 0x7f, 0xc2, 0x1a, 0x97, 0x88, 0x63, 0x69, 0xad, 0x76, 0x45, + 0x6e, 0x84, 0xaf, 0x9b, 0x21, 0xc0, 0x63, 0xe8, 0x31, 0xd6, 0xb9, 0xf1, + 0xcf, 0x4e, 0x6b, 0xd8, 0x3e, 0x1c, 0xea, 0xd6, 0x72, 0xf8, 0x72, 0x2b, + 0x01, 0x2a, 0x2d, 0xcc, 0x0c, 0xc1, 0xd0, 0x90, 0x0b, 0x65, 0x89, 0xc8, + 0xf5, 0xe0, 0xd7, 0x9b, 0x9a, 0x62, 0x6a, 0xe1, 0xe8, 0x73, 0xd2, 0x5a, + 0xdf, 0xee, 0x3b, 0xf2, 0xfa, 0x14, 0xeb, 0xd5, 0xe5, 0xa8, 0xf4, 0x3c, + 0xdb, 0x5e, 0xf0, 0xde, 0xa1, 0xe1, 0xe9, 0x91, 0x2f, 0x54, 0x14, 0x7c, + 0xec, 0x95, 0x18, 0x95, 0x6f, 0x6f, 0xad, 0x64, 0x57, 0xa6, 0xfc, 0x4e, + 0xd5, 0x6c, 0xe5, 0xb3, 0xb6, 0xd3, 0xe3, 0x95, 0x25, 0xb8, 0x12, 0xf9, + 0x8d, 0xb4, 0x83, 0xb0, 0x60, 0x8c, 0x7e, 0x39, 0xaf, 0x32, 0x20, 0x8e, + 0xa3, 0x15, 0x79, 0x75, 0x7a, 0x95, 0xf0, 0xea, 0xa5, 0x45, 0x66, 0xc8, + 0xc7, 0xd1, 0x85, 0x1a, 0xee, 0x14, 0xdd, 0xd0, 0x51, 0x45, 0x15, 0xde, + 0x71, 0x96, 0x2c, 0xef, 0x6e, 0x34, 0xfb, 0x95, 0xb9, 0xb4, 0x9d, 0xe2, + 0x95, 0x48, 0x21, 0x94, 0xff, 0x00, 0x31, 0xe9, 0x5e, 0xdd, 0xe1, 0x4f, + 0x10, 0xaf, 0x88, 0xb4, 0x81, 0x3b, 0x00, 0xb7, 0x51, 0x7c, 0x93, 0xa0, + 0xec, 0xde, 0xa3, 0xd8, 0xd7, 0x84, 0xd7, 0x79, 0xf0, 0xb6, 0xe5, 0xd3, + 0x5c, 0xbb, 0xb6, 0x0c, 0x4c, 0x72, 0x5b, 0xef, 0xc7, 0xba, 0xb0, 0xff, + 0x00, 0x1a, 0xf1, 0x73, 0x9c, 0x2c, 0x6a, 0x50, 0x75, 0x2d, 0xef, 0x44, + 0xf5, 0xb2, 0xac, 0x4c, 0xa1, 0x59, 0x53, 0xbe, 0x8c, 0xd9, 0xf8, 0x93, + 0xe3, 0x39, 0x34, 0x3b, 0x55, 0xd3, 0x74, 0xf9, 0x36, 0xdf, 0x5c, 0x2e, + 0x59, 0xc1, 0xe6, 0x24, 0xf5, 0xfa, 0x9e, 0xd5, 0xe2, 0x32, 0x48, 0xf2, + 0xc8, 0xd2, 0x49, 0x23, 0x33, 0xb1, 0xcb, 0x16, 0x24, 0x92, 0x7e, 0xb5, + 0xd1, 0xf8, 0xfe, 0xee, 0x4b, 0xbf, 0x1b, 0xea, 0x65, 0xc9, 0x3e, 0x5c, + 0x9e, 0x52, 0xe7, 0xb0, 0x5e, 0x3f, 0xc7, 0xf3, 0xae, 0x66, 0xbf, 0x2f, + 0xc5, 0x55, 0x75, 0x2a, 0x3e, 0xc8, 0xfe, 0x83, 0xc8, 0xb0, 0x14, 0xf0, + 0xb8, 0x48, 0x34, 0xbd, 0xe9, 0x24, 0xdb, 0xf5, 0x3f, 0xff, 0xd9 +}; +unsigned int palette_300x128_jpg_len = 9623; + +/* sicknesses palette from idiocracy, portrait ratio */ +const unsigned char palette_128x200_jpg[] = +{ + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x01, 0x01, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, + 0x00, 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, 0x07, 0x07, 0x09, + 0x09, 0x08, 0x0a, 0x0c, 0x14, 0x0d, 0x0c, 0x0b, 0x0b, 0x0c, 0x19, 0x12, + 0x13, 0x0f, 0x14, 0x1d, 0x1a, 0x1f, 0x1e, 0x1d, 0x1a, 0x1c, 0x1c, 0x20, + 0x24, 0x2e, 0x27, 0x20, 0x22, 0x2c, 0x23, 0x1c, 0x1c, 0x28, 0x37, 0x29, + 0x2c, 0x30, 0x31, 0x34, 0x34, 0x34, 0x1f, 0x27, 0x39, 0x3d, 0x38, 0x32, + 0x3c, 0x2e, 0x33, 0x34, 0x32, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x09, 0x09, + 0x09, 0x0c, 0x0b, 0x0c, 0x18, 0x0d, 0x0d, 0x18, 0x32, 0x21, 0x1c, 0x21, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x32, 0x32, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0xc8, 0x00, 0x80, 0x03, + 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, + 0x1f, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x10, 0x00, + 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, + 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, + 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, + 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, + 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, + 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, + 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, + 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, + 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 0x00, + 0x1f, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0xff, 0xc4, 0x00, 0xb5, 0x11, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, + 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, + 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, + 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, + 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, + 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, + 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, + 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xda, 0x00, + 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xe2, + 0xeb, 0xd4, 0xbe, 0x13, 0x7f, 0xc8, 0x23, 0xc4, 0x5f, 0xee, 0x47, 0xff, + 0x00, 0xa0, 0xbd, 0x79, 0x6d, 0x7a, 0x97, 0xc2, 0x6f, 0xf9, 0x04, 0x78, + 0x8b, 0xfd, 0xc8, 0xff, 0x00, 0xf4, 0x17, 0xa9, 0x9f, 0xc2, 0xc4, 0xf6, + 0x32, 0x05, 0x7a, 0x47, 0x82, 0xfc, 0x3f, 0xf6, 0x0b, 0x6f, 0xb7, 0xdc, + 0x2f, 0xfa, 0x44, 0xcb, 0xf2, 0x83, 0xd5, 0x56, 0xbc, 0xf2, 0xd1, 0x15, + 0xee, 0xa0, 0x46, 0xfb, 0x8f, 0x20, 0x0d, 0xf4, 0xcd, 0x7b, 0x86, 0xd0, + 0x31, 0x81, 0x8c, 0x57, 0x8d, 0x96, 0xd1, 0x8c, 0xa4, 0xe6, 0xfa, 0x1c, + 0xf4, 0x62, 0x9b, 0xbb, 0x2b, 0x5f, 0x5f, 0xdb, 0xe9, 0xd6, 0xaf, 0x71, + 0x75, 0x27, 0x97, 0x1a, 0xfe, 0x6d, 0xf4, 0xaf, 0x26, 0xd7, 0x35, 0xa9, + 0xf5, 0xbb, 0xe3, 0x34, 0x80, 0xac, 0x40, 0x62, 0x35, 0xfe, 0xed, 0x58, + 0xf1, 0x4c, 0xfa, 0x9b, 0x6b, 0x12, 0x41, 0xa9, 0x4b, 0xbb, 0xcb, 0x39, + 0x8d, 0x50, 0x61, 0x76, 0xd6, 0x2f, 0x52, 0x00, 0x3d, 0x7b, 0x56, 0x78, + 0xcc, 0x54, 0xaa, 0x3e, 0x44, 0xac, 0x90, 0xaa, 0x4d, 0xcb, 0x43, 0xad, + 0xf0, 0xaf, 0x86, 0x96, 0xe5, 0x06, 0xa9, 0x7e, 0xa7, 0xec, 0xc8, 0x0b, + 0x46, 0x9f, 0xdf, 0xf7, 0xfa, 0x55, 0x5b, 0xaf, 0x12, 0x40, 0xde, 0x26, + 0x8f, 0x52, 0x8a, 0xc9, 0x0d, 0xbc, 0x23, 0x66, 0xd2, 0x06, 0x59, 0x7d, + 0x7e, 0xb5, 0x6b, 0xc3, 0x5e, 0x2e, 0x4d, 0x3a, 0xd0, 0xd9, 0x5f, 0x82, + 0xd0, 0xc6, 0x84, 0xc4, 0xca, 0x32, 0x71, 0xfd, 0xdc, 0x57, 0x39, 0x75, + 0x7e, 0x97, 0x1a, 0x9b, 0x5e, 0xad, 0xbc, 0x4a, 0x0b, 0xef, 0xf2, 0x47, + 0x4f, 0xa5, 0x4c, 0xaa, 0x42, 0x34, 0xa3, 0xec, 0xde, 0xbd, 0x7b, 0x89, + 0xb4, 0xa2, 0xac, 0x75, 0x7e, 0x23, 0xf0, 0xf4, 0x17, 0xf6, 0x23, 0x5b, + 0xd2, 0x94, 0xaa, 0xb2, 0x6f, 0x78, 0xb1, 0x8c, 0x8f, 0x50, 0x2b, 0x98, + 0xd2, 0x75, 0x5b, 0x8d, 0x1e, 0xf9, 0x6e, 0xa0, 0x39, 0xc7, 0xcb, 0x22, + 0xff, 0x00, 0x79, 0x7d, 0x2b, 0xa6, 0xd5, 0xbc, 0x6d, 0x1d, 0xc6, 0x90, + 0x96, 0xfa, 0x7c, 0x7e, 0x5c, 0x92, 0x26, 0x24, 0xc8, 0xe2, 0x21, 0xec, + 0x2b, 0x8a, 0x1c, 0x0c, 0x10, 0x46, 0x46, 0x40, 0xf5, 0xa5, 0x89, 0x94, + 0x15, 0x45, 0x2a, 0x4f, 0x5f, 0xd4, 0x26, 0xd2, 0x95, 0xe2, 0x7b, 0x46, + 0x97, 0xaa, 0x5b, 0x6a, 0xd6, 0x6b, 0x73, 0x6b, 0x26, 0xe4, 0x3d, 0x41, + 0xea, 0xbe, 0xc6, 0xb1, 0xfc, 0x5d, 0xe1, 0xff, 0x00, 0xed, 0x6b, 0x11, + 0x3d, 0xb8, 0xff, 0x00, 0x4b, 0x84, 0x65, 0x7f, 0xda, 0x1e, 0x95, 0xc1, + 0xe8, 0x13, 0xea, 0x51, 0xea, 0xb1, 0x47, 0xa6, 0x48, 0x52, 0x69, 0x4f, + 0x20, 0xf2, 0xa4, 0x7b, 0x83, 0x5e, 0xc0, 0x8a, 0xc1, 0x17, 0x7f, 0x2d, + 0xdc, 0xd7, 0xa5, 0x42, 0xa2, 0xc5, 0xd2, 0x71, 0x9a, 0x36, 0x8b, 0xf6, + 0x91, 0xb3, 0x3c, 0x2c, 0x83, 0x83, 0xc7, 0x39, 0x23, 0x1e, 0x95, 0xe8, + 0x3a, 0xf7, 0xfc, 0x8b, 0x3a, 0x47, 0xfd, 0x73, 0x4f, 0xfd, 0x02, 0xb8, + 0xbd, 0x6a, 0x34, 0x8b, 0x5b, 0xbe, 0x8e, 0x3f, 0xf5, 0x62, 0x77, 0x0b, + 0x8e, 0xc3, 0x35, 0xda, 0x6b, 0xdf, 0xf2, 0x2c, 0xe9, 0x1f, 0xf5, 0xcd, + 0x3f, 0xf4, 0x0a, 0xe7, 0xcb, 0x17, 0x2d, 0x59, 0x23, 0xc6, 0xcd, 0xbf, + 0xdc, 0x2a, 0xfa, 0x2f, 0xcd, 0x1c, 0xc5, 0x14, 0x51, 0x5e, 0xe1, 0xf9, + 0xb9, 0xe5, 0x55, 0xea, 0x5f, 0x09, 0xbf, 0xe4, 0x11, 0xe2, 0x2f, 0xf7, + 0x23, 0xff, 0x00, 0xd0, 0x5e, 0xbc, 0xb6, 0xbd, 0x4b, 0xe1, 0x37, 0xfc, + 0x82, 0x3c, 0x45, 0xfe, 0xe4, 0x7f, 0xfa, 0x0b, 0xd6, 0x33, 0xf8, 0x59, + 0xfb, 0x2b, 0xd8, 0xc8, 0x5e, 0x00, 0x23, 0xa8, 0x39, 0x15, 0xec, 0x3a, + 0x0e, 0xac, 0xba, 0xc6, 0x93, 0x15, 0xc8, 0x6f, 0xde, 0x63, 0x6c, 0x83, + 0xd1, 0xab, 0xc7, 0x87, 0x4c, 0x57, 0x4d, 0xe0, 0x9d, 0x53, 0xec, 0x5a, + 0xb9, 0xb4, 0x77, 0xc4, 0x37, 0x5f, 0x90, 0x6e, 0xd5, 0xe0, 0x60, 0x6b, + 0xfb, 0x3a, 0x96, 0x7b, 0x33, 0x96, 0x94, 0xad, 0x23, 0x4f, 0xe2, 0x1c, + 0x11, 0x8f, 0xb0, 0xce, 0x14, 0x6f, 0x25, 0xd0, 0xfb, 0x81, 0x8a, 0xe5, + 0x74, 0x7d, 0x41, 0x34, 0xcd, 0x4a, 0x3b, 0x99, 0x61, 0x59, 0x63, 0x1d, + 0x54, 0x8c, 0xf1, 0xeb, 0x5d, 0xc7, 0xc4, 0x0b, 0x26, 0x9b, 0x49, 0x86, + 0xe9, 0x47, 0x30, 0x49, 0xcf, 0xfb, 0xa6, 0xbc, 0xe7, 0xb6, 0x29, 0xe3, + 0x6f, 0x0c, 0x43, 0x92, 0xf2, 0x61, 0x57, 0x49, 0xdc, 0xf4, 0x33, 0xe1, + 0xeb, 0x4b, 0xfd, 0x56, 0xcb, 0x59, 0xd3, 0x3c, 0xb6, 0xb4, 0x77, 0xdd, + 0x34, 0x7d, 0xbe, 0xb8, 0xfe, 0x95, 0xd4, 0x7f, 0x66, 0x58, 0x7f, 0xcf, + 0x95, 0xb7, 0xfd, 0xfa, 0x5f, 0xf0, 0xaf, 0x2c, 0xf0, 0xff, 0x00, 0x88, + 0x27, 0xd0, 0xae, 0x7e, 0x5d, 0xcf, 0x6c, 0xfc, 0xc9, 0x1f, 0x6f, 0xa8, + 0xf4, 0x35, 0xdf, 0x43, 0xe2, 0xa4, 0xb8, 0x83, 0xce, 0x8b, 0x4b, 0xd5, + 0x1e, 0x2e, 0xce, 0xb6, 0xe3, 0xfc, 0x6b, 0xb7, 0x0b, 0x5a, 0x83, 0x4d, + 0xb5, 0x66, 0xf7, 0x35, 0xa7, 0x28, 0x99, 0xf7, 0xfe, 0x17, 0x82, 0xe3, + 0x5e, 0x6b, 0xfb, 0xaf, 0x2e, 0x1d, 0x3a, 0x28, 0xc1, 0x28, 0x3e, 0x5d, + 0xc7, 0xdf, 0x1d, 0xab, 0x92, 0xf1, 0x2e, 0xa9, 0x6d, 0xaa, 0x6a, 0x2a, + 0x6c, 0xe1, 0x58, 0xe0, 0x84, 0x6c, 0x52, 0xa0, 0x0d, 0xf5, 0x67, 0xc4, + 0xbe, 0x28, 0x9b, 0x58, 0x7f, 0xb3, 0x42, 0xaf, 0x0d, 0xa2, 0xf5, 0x56, + 0xe1, 0x98, 0xfb, 0xd7, 0x3b, 0x5c, 0x38, 0x9a, 0xd0, 0x6d, 0xc6, 0x9a, + 0xd1, 0xbd, 0x5f, 0x7f, 0xf8, 0x06, 0x53, 0x92, 0xda, 0x27, 0x61, 0xf0, + 0xf6, 0x14, 0x7d, 0x4a, 0xee, 0x56, 0x00, 0xb2, 0x44, 0x02, 0xfb, 0x64, + 0xf3, 0x5d, 0xc6, 0xab, 0xa9, 0x47, 0xa5, 0xe9, 0xd3, 0x5d, 0xc8, 0x78, + 0x41, 0xf2, 0xaf, 0xa9, 0xf4, 0xae, 0x4f, 0xe1, 0xe5, 0x93, 0x2c, 0x37, + 0x77, 0xa4, 0x60, 0x3b, 0x08, 0xd7, 0xf0, 0xeb, 0x54, 0xbc, 0x79, 0xaa, + 0x7d, 0xa2, 0xfd, 0x34, 0xe8, 0xce, 0x63, 0x84, 0x6e, 0x7e, 0x7a, 0xb1, + 0xff, 0x00, 0x0a, 0xec, 0xa5, 0x53, 0xd8, 0x61, 0x39, 0xba, 0xb3, 0x48, + 0xcb, 0x96, 0x99, 0xc8, 0xcb, 0x23, 0x4b, 0x2b, 0xc8, 0xe7, 0x2e, 0xec, + 0x59, 0x8f, 0xa9, 0x3d, 0x6b, 0xbf, 0xd7, 0xbf, 0xe4, 0x59, 0xd2, 0x3f, + 0xeb, 0x9a, 0x7f, 0xe8, 0x15, 0xe7, 0xd5, 0xe8, 0x3a, 0xf7, 0xfc, 0x8b, + 0x3a, 0x47, 0xfd, 0x73, 0x4f, 0xfd, 0x02, 0xb3, 0xca, 0xbf, 0x89, 0x2f, + 0x43, 0xc7, 0xcd, 0xbf, 0xdc, 0x2a, 0xfa, 0x2f, 0xcd, 0x1c, 0xc5, 0x14, + 0x54, 0xb0, 0x5a, 0xcf, 0x72, 0xdb, 0x60, 0x85, 0xe4, 0x6f, 0x45, 0x19, + 0xaf, 0x74, 0xfc, 0xea, 0x31, 0x72, 0x76, 0x8a, 0xd4, 0xf2, 0x5a, 0xf5, + 0x7f, 0x84, 0x76, 0xd2, 0xc9, 0xa3, 0xeb, 0xac, 0xaa, 0x76, 0x4b, 0xb2, + 0x34, 0x3e, 0xa4, 0x2b, 0x67, 0xf9, 0xd7, 0x98, 0x59, 0x58, 0xdc, 0xea, + 0x57, 0xb1, 0x59, 0xd9, 0x42, 0xd3, 0x5c, 0x4a, 0xdb, 0x55, 0x17, 0xfa, + 0xfa, 0x0f, 0x73, 0x5f, 0x46, 0xf8, 0x4f, 0xc3, 0xf1, 0xf8, 0x6b, 0x40, + 0xb7, 0xd3, 0xd5, 0xb7, 0x48, 0x32, 0xf2, 0xb7, 0xf7, 0x9c, 0xf5, 0xac, + 0x9a, 0xba, 0xb1, 0xfb, 0x21, 0xe4, 0xb8, 0x23, 0x23, 0x1f, 0x30, 0xe0, + 0x83, 0xd8, 0xd3, 0x91, 0xda, 0x37, 0x57, 0x43, 0x86, 0x53, 0xb8, 0x1f, + 0x43, 0x5d, 0x17, 0x8b, 0xb4, 0x09, 0x34, 0xcb, 0xf7, 0xbb, 0x89, 0x09, + 0xb4, 0x9c, 0xe7, 0x23, 0xa2, 0x37, 0xa1, 0xae, 0x73, 0x1f, 0xfe, 0xaa, + 0xf9, 0x6a, 0x94, 0xe5, 0x4e, 0x4e, 0x2f, 0x74, 0x70, 0xc9, 0x38, 0xbb, + 0x1e, 0xb2, 0x24, 0x5f, 0x11, 0xf8, 0x55, 0xca, 0x90, 0x5a, 0xe2, 0x02, + 0x08, 0xf4, 0x6f, 0xff, 0x00, 0x5d, 0x79, 0x2f, 0x20, 0xe1, 0x86, 0x18, + 0x64, 0x11, 0xe8, 0x6b, 0xa4, 0xf0, 0xc7, 0x89, 0xc6, 0x8a, 0xaf, 0x6d, + 0x73, 0x1b, 0xb5, 0xb3, 0xb6, 0xe0, 0xc9, 0xd5, 0x4d, 0x63, 0xea, 0xd2, + 0x5a, 0x4b, 0xaa, 0xdc, 0xc9, 0x66, 0x58, 0xc0, 0xee, 0x58, 0x13, 0xef, + 0x5d, 0x38, 0x9a, 0xb1, 0xad, 0x08, 0xce, 0xfe, 0xf2, 0xd1, 0x97, 0x39, + 0x29, 0x24, 0xfa, 0x91, 0xd8, 0x08, 0x9b, 0x51, 0xb6, 0x49, 0x8e, 0x22, + 0x69, 0x17, 0x7f, 0xfb, 0xb9, 0xe6, 0xbd, 0xad, 0x15, 0x55, 0x14, 0x46, + 0xa1, 0x57, 0xb0, 0x1c, 0x0a, 0xf0, 0xda, 0xd8, 0xb7, 0xf1, 0x56, 0xb3, + 0x6b, 0x6c, 0x2d, 0xe3, 0xbc, 0xf9, 0x40, 0xc0, 0xca, 0xa9, 0x3f, 0x99, + 0x19, 0xa7, 0x83, 0xc5, 0x46, 0x85, 0xf9, 0x96, 0xe1, 0x4e, 0xa2, 0x89, + 0x3f, 0x8c, 0xe3, 0x86, 0x3f, 0x11, 0xc9, 0xe4, 0x05, 0x04, 0xa0, 0x32, + 0x01, 0xd3, 0x75, 0x60, 0x76, 0xce, 0x29, 0xd2, 0x48, 0xf2, 0xca, 0xd2, + 0x48, 0xc5, 0xdd, 0x8e, 0x49, 0x63, 0x9c, 0x9a, 0x92, 0xcc, 0xc1, 0xf6, + 0xe8, 0x8d, 0xd1, 0xc5, 0xbe, 0xf1, 0xe6, 0x6d, 0xf4, 0xef, 0x5c, 0xb3, + 0x97, 0x3c, 0xdc, 0xb6, 0xb9, 0x0d, 0xdd, 0x9e, 0x9f, 0xa4, 0xaa, 0x68, + 0x3e, 0x13, 0x86, 0x49, 0xb8, 0x31, 0xc5, 0xe6, 0xb8, 0xf5, 0x63, 0xcd, + 0x79, 0x6d, 0xc4, 0xef, 0x75, 0x73, 0x25, 0xc4, 0xac, 0x4b, 0xc8, 0xc5, + 0xc9, 0xf5, 0x26, 0xba, 0x7f, 0x13, 0x78, 0xb6, 0x3d, 0x56, 0xd4, 0xd8, + 0xd9, 0x46, 0xc2, 0x0d, 0xc3, 0x73, 0xb0, 0xc6, 0x40, 0xae, 0x57, 0xd3, + 0xd6, 0xba, 0x71, 0x75, 0x63, 0x27, 0x1a, 0x70, 0x7a, 0x44, 0xba, 0x92, + 0x4e, 0xc9, 0x74, 0x13, 0x9c, 0x70, 0x32, 0x7b, 0x0f, 0x53, 0x5e, 0x8d, + 0xe2, 0x2b, 0x77, 0x8f, 0xc3, 0x7a, 0x6a, 0x91, 0xcc, 0x61, 0x55, 0xbd, + 0xbe, 0x5a, 0xe6, 0xbc, 0x29, 0xa0, 0x49, 0xab, 0x5f, 0xa4, 0xf2, 0x21, + 0x16, 0x70, 0xb6, 0x59, 0xbb, 0x39, 0xf4, 0x15, 0xe9, 0x1a, 0x8d, 0x8a, + 0x5f, 0xd8, 0xc9, 0x6c, 0xdf, 0x2e, 0xe1, 0xc1, 0xf4, 0x35, 0xdb, 0x95, + 0xd2, 0x71, 0x4e, 0xa3, 0xea, 0x73, 0x62, 0xf0, 0xb2, 0xc4, 0x61, 0x2a, + 0x53, 0x8e, 0xed, 0x69, 0xf9, 0x9e, 0x61, 0x52, 0xad, 0xcc, 0xe8, 0xbb, + 0x52, 0x69, 0x15, 0x7d, 0x15, 0x88, 0xa5, 0xba, 0xb4, 0x9a, 0xca, 0xe1, + 0xa0, 0x9d, 0x0a, 0xb8, 0xfc, 0xbf, 0x0a, 0x86, 0xbd, 0x83, 0xf3, 0x06, + 0xa7, 0x4a, 0x4d, 0x3d, 0x19, 0xe8, 0x7a, 0x0f, 0x86, 0x34, 0x8f, 0x0e, + 0xc2, 0xd1, 0xe9, 0xd6, 0xaa, 0x8c, 0xdf, 0x7e, 0x56, 0x3b, 0x9d, 0xbd, + 0xb2, 0x7b, 0x7b, 0x56, 0xce, 0x05, 0x79, 0x7e, 0x87, 0xe3, 0x2b, 0xdd, + 0x3e, 0x51, 0x1d, 0xeb, 0xbd, 0xc5, 0xa1, 0xfb, 0xc5, 0x8e, 0x59, 0x3f, + 0x1e, 0xa6, 0xbd, 0x32, 0x19, 0xd2, 0xe2, 0x24, 0x96, 0x27, 0xdc, 0x8e, + 0x32, 0xa4, 0x77, 0xae, 0x2c, 0x3e, 0x26, 0x15, 0xd7, 0xbb, 0xb9, 0xfb, + 0x04, 0x26, 0xa4, 0x2c, 0xb0, 0x45, 0x3c, 0x6d, 0x1c, 0xa8, 0xae, 0x8d, + 0xc1, 0x56, 0x19, 0x15, 0xca, 0xde, 0x78, 0x17, 0x4b, 0x99, 0xf7, 0xc5, + 0x2c, 0xb6, 0xdf, 0xec, 0x86, 0xdc, 0x3f, 0x5a, 0x8f, 0xc6, 0x5e, 0x34, + 0x1a, 0x08, 0xfb, 0x1d, 0x9e, 0x24, 0xbe, 0x75, 0xcf, 0x3d, 0x23, 0x1e, + 0xa7, 0xde, 0xbc, 0xa6, 0xef, 0x53, 0xd4, 0x75, 0x39, 0x59, 0xee, 0x6e, + 0xa7, 0x9d, 0x8f, 0x62, 0xc7, 0x1f, 0x90, 0xe2, 0xbd, 0xac, 0x3e, 0x44, + 0xf1, 0xb0, 0xf6, 0x95, 0x2c, 0x97, 0x4b, 0xee, 0x7b, 0xd8, 0x1e, 0x1f, + 0xab, 0x8c, 0x82, 0xab, 0x37, 0xcb, 0x1e, 0x9d, 0xd9, 0xe9, 0x5f, 0xf0, + 0x82, 0x58, 0xff, 0x00, 0xd0, 0x5d, 0xbf, 0x25, 0xff, 0x00, 0x1a, 0x3f, + 0xe1, 0x04, 0xb0, 0xff, 0x00, 0xa0, 0xbb, 0x7e, 0x4b, 0xfe, 0x35, 0xe5, + 0x4e, 0xae, 0x87, 0x6b, 0x2b, 0x29, 0xc7, 0x46, 0xc8, 0x34, 0xdc, 0x9f, + 0x53, 0x5d, 0x4b, 0x84, 0x70, 0xcf, 0xed, 0x7e, 0x0f, 0xfc, 0xcf, 0x45, + 0x70, 0x8d, 0x37, 0xff, 0x00, 0x2f, 0x3f, 0x0f, 0xf8, 0x27, 0xab, 0xff, + 0x00, 0xc2, 0x09, 0x63, 0xff, 0x00, 0x41, 0x76, 0xfc, 0x97, 0xfc, 0x68, + 0xff, 0x00, 0x84, 0x0e, 0xc3, 0xfe, 0x82, 0xed, 0xf9, 0x27, 0xf8, 0xd7, + 0x94, 0x64, 0xfa, 0x9a, 0x32, 0x7d, 0x4d, 0x1f, 0xea, 0x86, 0x1f, 0xf9, + 0xbf, 0x07, 0xfe, 0x63, 0xff, 0x00, 0x54, 0x29, 0xff, 0x00, 0xcf, 0xcf, + 0xc3, 0xfe, 0x09, 0xea, 0xff, 0x00, 0xf0, 0x82, 0x58, 0xff, 0x00, 0xd0, + 0x5d, 0xbf, 0x25, 0xff, 0x00, 0x1a, 0x3f, 0xe1, 0x04, 0xb1, 0xff, 0x00, + 0xa0, 0xbb, 0x7e, 0x49, 0xfe, 0x35, 0xe5, 0x19, 0x3e, 0xa6, 0x8c, 0x9f, + 0x53, 0x47, 0xfa, 0xa1, 0x87, 0xfe, 0x6f, 0xc1, 0xff, 0x00, 0x98, 0x7f, + 0xaa, 0x14, 0xff, 0x00, 0xe7, 0xe7, 0xe1, 0xff, 0x00, 0x04, 0xf5, 0x8f, + 0xf8, 0x41, 0x2c, 0x71, 0x8f, 0xed, 0x76, 0xc7, 0xd1, 0x7f, 0xc6, 0xae, + 0xd9, 0xf8, 0x13, 0x4c, 0x89, 0xb7, 0x4b, 0x2c, 0xb7, 0x3f, 0xec, 0x93, + 0xb4, 0x7e, 0x95, 0xe3, 0xd0, 0xc3, 0x34, 0xed, 0xb6, 0x28, 0xa4, 0x90, + 0xf7, 0xd8, 0xa5, 0xb1, 0xf9, 0x55, 0x8b, 0x6d, 0x42, 0xff, 0x00, 0x4b, + 0xb8, 0x06, 0x0b, 0x89, 0xed, 0xe4, 0x5f, 0xe1, 0x04, 0x8c, 0x7e, 0x06, + 0xa5, 0xf0, 0x9d, 0x05, 0xf0, 0x49, 0x5f, 0xcd, 0x7f, 0xc1, 0x33, 0x97, + 0x09, 0xc3, 0x68, 0x55, 0x57, 0xf3, 0x5f, 0xf0, 0x4f, 0xa1, 0x61, 0x82, + 0x2b, 0x78, 0x96, 0x28, 0x50, 0x24, 0x6a, 0x30, 0x15, 0x78, 0x02, 0xa4, + 0xae, 0x27, 0xc1, 0x9e, 0x36, 0xfe, 0xdb, 0x3f, 0x61, 0xbf, 0xc2, 0x5f, + 0x01, 0x95, 0x60, 0x00, 0x12, 0x0f, 0xf1, 0xae, 0xce, 0x49, 0x16, 0x34, + 0x2e, 0xec, 0x15, 0x54, 0x64, 0x93, 0xd0, 0x0a, 0xf3, 0x2b, 0xe1, 0xe7, + 0x86, 0x9b, 0xa7, 0x35, 0x66, 0x8f, 0x9e, 0xc4, 0xe1, 0x6a, 0xe1, 0xaa, + 0x3a, 0x55, 0x15, 0x9f, 0xf5, 0xb1, 0x56, 0xff, 0x00, 0x4e, 0xb5, 0xd4, + 0x23, 0xd9, 0x73, 0x18, 0x6f, 0x42, 0x0e, 0x08, 0xfc, 0xab, 0x9e, 0x9b, + 0xc2, 0x16, 0x68, 0x49, 0xfb, 0x7b, 0x44, 0x3d, 0x1f, 0x07, 0xfc, 0x2b, + 0x82, 0xf1, 0x87, 0xc4, 0xdb, 0xcb, 0xeb, 0x87, 0xb3, 0xd1, 0x26, 0x36, + 0xf6, 0x8a, 0x70, 0x67, 0x5e, 0x1e, 0x4f, 0x71, 0xe8, 0x3f, 0x5a, 0xf3, + 0xc9, 0x6e, 0x26, 0x9d, 0xf7, 0xcd, 0x34, 0x92, 0x37, 0xab, 0xb1, 0x26, + 0xbc, 0xba, 0x99, 0x84, 0x62, 0xed, 0x15, 0x73, 0xd5, 0xa7, 0xc0, 0x14, + 0xf3, 0x08, 0xaa, 0xb8, 0xc4, 0xa2, 0xdf, 0x96, 0xbf, 0x3b, 0x34, 0x77, + 0x18, 0xe7, 0x35, 0xe8, 0x7e, 0x07, 0xd4, 0x49, 0xd0, 0x6e, 0x62, 0x95, + 0x8f, 0xfa, 0x23, 0x67, 0x9f, 0xee, 0xe3, 0xa7, 0xe9, 0x5e, 0x79, 0x5d, + 0x87, 0x83, 0x46, 0x74, 0x8d, 0x73, 0xda, 0x21, 0xff, 0x00, 0xa0, 0xb5, + 0x79, 0xd9, 0x73, 0xff, 0x00, 0x69, 0x8a, 0xee, 0x7c, 0xce, 0x1d, 0x5e, + 0xa2, 0x8f, 0x73, 0xcf, 0x2e, 0x67, 0x9f, 0x58, 0xd5, 0xa4, 0x99, 0xf2, + 0xd3, 0x5c, 0x49, 0xc0, 0x3e, 0xa4, 0xf0, 0x2b, 0xd3, 0x64, 0x8f, 0x45, + 0xf8, 0x7b, 0xa5, 0x40, 0xf2, 0x5b, 0x0b, 0x9b, 0xe9, 0xb2, 0xa5, 0x87, + 0xde, 0x72, 0x3a, 0xf5, 0xe8, 0x05, 0x79, 0x54, 0x13, 0xbd, 0xb5, 0xcc, + 0x53, 0xc6, 0x7e, 0x78, 0xdc, 0x38, 0xfa, 0x8e, 0x95, 0xd2, 0x78, 0xbf, + 0xc5, 0xab, 0xe2, 0x43, 0x6f, 0x1c, 0x56, 0xa2, 0x28, 0xa2, 0xf9, 0x83, + 0x3f, 0x2f, 0xb8, 0xff, 0x00, 0x4a, 0xfd, 0x57, 0x19, 0x86, 0xa9, 0x56, + 0xa5, 0x3a, 0x49, 0x7e, 0xef, 0xad, 0xb4, 0xf4, 0x3f, 0x4d, 0xc7, 0xe0, + 0xea, 0x57, 0xa9, 0x4a, 0x8c, 0x57, 0xee, 0xb5, 0xe6, 0xb3, 0xb7, 0xa1, + 0xdc, 0x6a, 0xa9, 0xa6, 0xf8, 0xbb, 0xc1, 0x93, 0x6a, 0x31, 0xc5, 0xb5, + 0xd2, 0x26, 0x74, 0x73, 0xf7, 0x91, 0x94, 0x64, 0x83, 0x5e, 0x3f, 0x5e, + 0xa3, 0x6a, 0x23, 0x8b, 0xe1, 0x24, 0x9f, 0x66, 0x95, 0x11, 0x9a, 0x17, + 0xde, 0x59, 0xb1, 0x96, 0x2d, 0xc8, 0xfa, 0xe3, 0x8a, 0xf2, 0xec, 0x60, + 0x9c, 0xf5, 0x07, 0x18, 0xf4, 0xac, 0xf2, 0x95, 0xc8, 0xaa, 0xc1, 0x3d, + 0x14, 0x9a, 0x46, 0x79, 0x1c, 0x7d, 0x9a, 0xad, 0x4d, 0x3f, 0x76, 0x32, + 0x69, 0x27, 0xd2, 0xc1, 0x47, 0xe1, 0x5d, 0x6f, 0x84, 0x7c, 0x18, 0xfa, + 0xfa, 0x1b, 0xbb, 0xa9, 0x1a, 0x2b, 0x35, 0x6c, 0x0c, 0x0f, 0x9a, 0x43, + 0xdf, 0x1e, 0xd5, 0xda, 0xb7, 0x81, 0xfc, 0x2a, 0xd0, 0x00, 0xb1, 0xe0, + 0x31, 0xd8, 0xb2, 0x2d, 0xc9, 0x24, 0xb7, 0xa0, 0xe7, 0x19, 0xf6, 0xad, + 0x71, 0x19, 0xb6, 0x1e, 0x84, 0xfd, 0x9b, 0xbb, 0x7d, 0x6d, 0xd0, 0xdb, + 0x15, 0x9e, 0x61, 0x70, 0xd5, 0x1d, 0x27, 0x76, 0xd6, 0xf6, 0x5b, 0x7e, + 0x28, 0xf1, 0xda, 0x2b, 0xa5, 0xf1, 0x67, 0x84, 0x65, 0xf0, 0xe4, 0xa9, + 0x2c, 0x72, 0x19, 0xac, 0xe4, 0x38, 0x57, 0x23, 0x95, 0x3e, 0x86, 0xb9, + 0xac, 0x1c, 0xe3, 0xbe, 0x71, 0x8a, 0xee, 0xa3, 0x5e, 0x9d, 0x68, 0x2a, + 0x94, 0xdd, 0xd3, 0x3d, 0x1c, 0x3e, 0x26, 0x9e, 0x22, 0x9a, 0xab, 0x4d, + 0xdd, 0x33, 0xbf, 0xd0, 0x3c, 0x6f, 0xa4, 0xe8, 0xbe, 0x1e, 0xf2, 0x53, + 0x4f, 0x22, 0xf1, 0x00, 0x04, 0x0e, 0x92, 0x9f, 0xef, 0x16, 0xad, 0xbf, + 0x23, 0x4c, 0xf8, 0x83, 0xa0, 0x4b, 0x71, 0x1d, 0xb7, 0xd9, 0xef, 0x62, + 0x3b, 0x43, 0xe0, 0x65, 0x5b, 0x19, 0xeb, 0xdc, 0x1a, 0xc8, 0xd1, 0x7c, + 0x17, 0xa2, 0x7f, 0x61, 0xc7, 0xa9, 0xea, 0xfa, 0x80, 0xdb, 0x20, 0x04, + 0x94, 0x99, 0x55, 0x13, 0xfd, 0x9c, 0xf5, 0x2d, 0x5a, 0xb2, 0x78, 0x9f, + 0xc3, 0x9e, 0x17, 0xd1, 0x9a, 0xdf, 0x46, 0x92, 0x39, 0xa4, 0x3c, 0xa2, + 0x46, 0x4b, 0x65, 0xbd, 0x58, 0x9a, 0xf9, 0xbc, 0x42, 0xa4, 0xea, 0x37, + 0x84, 0x52, 0x75, 0x39, 0xb7, 0xd6, 0xde, 0x67, 0xc9, 0x62, 0x95, 0x19, + 0x55, 0x6f, 0x03, 0x19, 0x3a, 0xbc, 0xdb, 0xeb, 0x6f, 0x35, 0xe8, 0x79, + 0x7d, 0xb5, 0xc4, 0xda, 0x75, 0xfc, 0x77, 0x11, 0x12, 0x93, 0x40, 0xe1, + 0x87, 0xd4, 0x57, 0xa8, 0xfc, 0x48, 0xd6, 0xcd, 0xb7, 0x81, 0x95, 0xe0, + 0x62, 0xad, 0xa8, 0x14, 0x45, 0x23, 0xfb, 0xa4, 0x6e, 0x3f, 0xa5, 0x79, + 0x3b, 0x33, 0x3b, 0x96, 0x63, 0x96, 0x3c, 0x93, 0x5d, 0xdf, 0xc4, 0x9f, + 0xf9, 0x27, 0xfe, 0x1e, 0xff, 0x00, 0xb6, 0x7f, 0xfa, 0x2a, 0xa7, 0x8a, + 0x63, 0xcb, 0x42, 0x33, 0xeb, 0xaa, 0x3d, 0xac, 0x7e, 0x1e, 0x15, 0x31, + 0xb8, 0x57, 0x35, 0xad, 0xdf, 0xe1, 0xaf, 0xe6, 0x79, 0x36, 0x68, 0xa2, + 0x8a, 0xfc, 0xe8, 0xfa, 0xd3, 0xbc, 0xae, 0xc3, 0xc1, 0x9f, 0xf2, 0x08, + 0xd7, 0x7f, 0xeb, 0x90, 0xff, 0x00, 0xd0, 0x5a, 0xb8, 0xfa, 0xec, 0x3c, + 0x19, 0xff, 0x00, 0x20, 0x8d, 0x77, 0xfe, 0xb9, 0x0f, 0xfd, 0x05, 0xab, + 0x6c, 0xb7, 0xfd, 0xea, 0x1e, 0xa7, 0xe0, 0xd8, 0x5f, 0xe3, 0x47, 0xd4, + 0xf3, 0x0a, 0x3f, 0xfd, 0x54, 0x51, 0x5f, 0xb5, 0x9f, 0xb3, 0x1b, 0xde, + 0x15, 0xbf, 0xb2, 0x83, 0x55, 0x82, 0x1d, 0x58, 0x19, 0x2c, 0xb7, 0xe4, + 0x23, 0x31, 0xd8, 0x8f, 0xd9, 0x88, 0xe9, 0xf9, 0xd1, 0xe2, 0xeb, 0xdd, + 0x2e, 0xff, 0x00, 0x5d, 0x79, 0xf4, 0xa4, 0x65, 0x8c, 0x8f, 0x9d, 0xb1, + 0x85, 0x76, 0xf5, 0x02, 0xb0, 0xb1, 0x5d, 0xae, 0x89, 0xf0, 0xea, 0xe7, + 0x54, 0xd2, 0xe2, 0xbc, 0x96, 0xf5, 0x6d, 0xcc, 0xa3, 0x74, 0x69, 0xe5, + 0x96, 0xf9, 0x7b, 0x13, 0xcd, 0x79, 0xd8, 0x8f, 0x61, 0x86, 0xaa, 0xb1, + 0x15, 0x25, 0x6e, 0x96, 0xe9, 0xf7, 0x1e, 0x5e, 0x27, 0xea, 0xd8, 0x4a, + 0xcb, 0x15, 0x5a, 0x6d, 0x74, 0xb7, 0x4f, 0xb8, 0xeb, 0xf4, 0x5d, 0x52, + 0xdb, 0x47, 0xf8, 0x79, 0x69, 0x7f, 0xb4, 0xba, 0x45, 0x08, 0xdc, 0xab, + 0xd5, 0x9b, 0x38, 0xfe, 0x75, 0x98, 0xd7, 0x57, 0xd0, 0x69, 0x91, 0xca, + 0xfe, 0x0c, 0x45, 0xb3, 0x86, 0x4f, 0xb5, 0x28, 0x17, 0x63, 0x2a, 0xdf, + 0xde, 0xc7, 0x5f, 0xc2, 0xad, 0xe8, 0xba, 0x36, 0xbb, 0xe1, 0x78, 0x9a, + 0xd7, 0x64, 0x5a, 0xa6, 0x9c, 0xe7, 0x76, 0xc4, 0x21, 0x64, 0x43, 0xec, + 0x1b, 0x82, 0x3d, 0xb3, 0x5d, 0x3f, 0xf6, 0x90, 0x68, 0x89, 0x16, 0x17, + 0xad, 0x91, 0xf7, 0x0c, 0x3c, 0xfe, 0xa7, 0x15, 0xf3, 0x53, 0xa9, 0x1a, + 0x75, 0x24, 0xe0, 0x94, 0xd3, 0x77, 0xbd, 0xda, 0xd3, 0xd1, 0x35, 0x67, + 0xea, 0x7c, 0x85, 0x5a, 0xb0, 0xa5, 0x56, 0x52, 0xa6, 0x94, 0xd4, 0x9b, + 0x77, 0xe6, 0x6b, 0x4e, 0xd6, 0x4d, 0x59, 0xef, 0xb9, 0xcc, 0xf8, 0xca, + 0xfa, 0x0d, 0x47, 0xc0, 0x06, 0xf7, 0x63, 0x01, 0x36, 0xc6, 0x8d, 0x5f, + 0x82, 0x09, 0x3f, 0xe1, 0x5e, 0x7d, 0xe1, 0x2b, 0xcd, 0x32, 0xc7, 0x5d, + 0x8e, 0x6d, 0x51, 0x19, 0xa2, 0x00, 0xec, 0x6c, 0x65, 0x55, 0xbd, 0x48, + 0xae, 0xef, 0x5b, 0xf0, 0xe6, 0xbd, 0xe2, 0x89, 0x23, 0x49, 0xbe, 0xcf, + 0xa7, 0x58, 0x45, 0xfe, 0xae, 0x2d, 0xdb, 0xdb, 0x3e, 0xa7, 0x1c, 0x57, + 0x23, 0xe2, 0x6f, 0x04, 0x5c, 0xf8, 0x7a, 0xcd, 0x2e, 0xd6, 0xe0, 0x5c, + 0x41, 0x9d, 0xae, 0x42, 0x6d, 0xd8, 0x7b, 0x7e, 0x15, 0xe9, 0xe5, 0xf3, + 0xc3, 0xaa, 0x2f, 0x0c, 0xe7, 0x67, 0x36, 0xf4, 0x4f, 0x6f, 0x2b, 0xec, + 0x7b, 0x19, 0x5d, 0x4c, 0x2c, 0x70, 0xef, 0x09, 0x2a, 0x96, 0x94, 0xdb, + 0xd1, 0x3d, 0xaf, 0xd2, 0xfb, 0x5c, 0xa5, 0xe2, 0xbb, 0xbd, 0x3e, 0x6d, + 0x62, 0x78, 0xf4, 0x84, 0xf2, 0xec, 0xc1, 0xc9, 0x54, 0x24, 0x23, 0xbf, + 0x76, 0x0b, 0xd0, 0x7e, 0x15, 0x85, 0x47, 0x6c, 0x76, 0xa2, 0xbd, 0xea, + 0x34, 0x95, 0x28, 0x28, 0x27, 0x7b, 0x1f, 0x4d, 0x42, 0x8a, 0xa3, 0x4d, + 0x53, 0x4e, 0xf6, 0xee, 0x15, 0xde, 0x7c, 0x49, 0xff, 0x00, 0x92, 0x7f, + 0xe1, 0xef, 0xfb, 0x67, 0xff, 0x00, 0xa2, 0xab, 0x83, 0xae, 0xf3, 0xe2, + 0x4f, 0xfc, 0x93, 0xff, 0x00, 0x0f, 0x7f, 0xdb, 0x3f, 0xfd, 0x15, 0x5f, + 0x35, 0xc5, 0x7f, 0xee, 0xd1, 0xf5, 0xff, 0x00, 0x23, 0x87, 0x17, 0xfe, + 0xfb, 0x86, 0xff, 0x00, 0x13, 0xfc, 0x8f, 0x26, 0xa2, 0x8a, 0x2b, 0xf3, + 0x83, 0xe9, 0x8e, 0xf2, 0xbb, 0x0f, 0x06, 0x7f, 0xc8, 0x23, 0x5d, 0xff, + 0x00, 0xae, 0x43, 0xff, 0x00, 0x41, 0x6a, 0xe3, 0xeb, 0xb0, 0xf0, 0x67, + 0xfc, 0x82, 0x35, 0xdf, 0xfa, 0xe4, 0x3f, 0xf4, 0x16, 0xad, 0xb2, 0xdf, + 0xf7, 0xa8, 0x7a, 0x9f, 0x83, 0x61, 0x7f, 0x8d, 0x1f, 0x53, 0xcd, 0xed, + 0x2c, 0xe7, 0xbe, 0xba, 0x8e, 0xda, 0xdd, 0x37, 0xcd, 0x2b, 0x6d, 0x44, + 0x1d, 0xcd, 0x76, 0x16, 0x9f, 0x0c, 0x75, 0x79, 0x97, 0x37, 0x37, 0x16, + 0xf6, 0xfd, 0xf1, 0x9d, 0xe7, 0xf4, 0xaa, 0x3e, 0x07, 0xb3, 0xbb, 0x9f, + 0x50, 0x9a, 0x4b, 0x74, 0x54, 0x83, 0xcb, 0xf2, 0xe5, 0xb9, 0x20, 0x96, + 0x40, 0x7a, 0x84, 0xff, 0x00, 0x6c, 0xf6, 0xaf, 0x57, 0x1a, 0x8d, 0xad, + 0x95, 0x93, 0xbc, 0x98, 0x8a, 0x28, 0x11, 0x89, 0xe7, 0x80, 0xab, 0xd7, + 0xf2, 0xe9, 0xee, 0x6b, 0xf4, 0xbc, 0xcb, 0x30, 0xaf, 0x46, 0xa7, 0xb3, + 0xa3, 0x6f, 0xcd, 0x9f, 0x7f, 0x9b, 0xe6, 0xb8, 0x9a, 0x15, 0x7d, 0x96, + 0x1e, 0xdf, 0x9b, 0x3c, 0x76, 0x7f, 0x0b, 0x5e, 0xd8, 0xf8, 0x92, 0xd7, + 0x49, 0xb9, 0x50, 0x5a, 0x79, 0x15, 0x51, 0xd7, 0xee, 0xb2, 0x93, 0xc9, + 0x15, 0xee, 0xa9, 0x1a, 0x22, 0x2a, 0x2a, 0x80, 0xaa, 0x30, 0x07, 0xa0, + 0xac, 0xa7, 0xb4, 0xb6, 0xd6, 0x17, 0x4c, 0xd4, 0xb6, 0x90, 0xf0, 0x91, + 0x3c, 0x47, 0xd0, 0x15, 0xe9, 0x5a, 0x33, 0x5c, 0x45, 0x6e, 0x9b, 0xe6, + 0x95, 0x63, 0x4e, 0x9b, 0x9c, 0x80, 0x2b, 0xc5, 0xc7, 0x63, 0x67, 0x8a, + 0x50, 0x52, 0xdd, 0x5e, 0xfe, 0xa7, 0xcf, 0x66, 0x59, 0x8d, 0x4c, 0x6a, + 0xa7, 0x19, 0x2f, 0x7a, 0x29, 0xdf, 0xd6, 0xe4, 0xbb, 0x47, 0xa5, 0x2e, + 0x29, 0x01, 0x04, 0x67, 0x3c, 0x62, 0x96, 0xbc, 0xe3, 0xc9, 0x1b, 0xb1, + 0x7d, 0x2a, 0x9e, 0xa7, 0x61, 0x1e, 0xa7, 0xa6, 0x5c, 0x59, 0x49, 0xf7, + 0x66, 0x42, 0x84, 0x9a, 0xb6, 0xf2, 0x2c, 0x68, 0xce, 0xec, 0x15, 0x57, + 0xa9, 0x3d, 0x05, 0x36, 0x29, 0x12, 0x68, 0xd6, 0x48, 0xdd, 0x5d, 0x18, + 0x64, 0x32, 0x9c, 0x83, 0x4e, 0x2d, 0xc5, 0xa9, 0x22, 0xa2, 0xe5, 0x16, + 0xa7, 0x1e, 0x87, 0x8e, 0x78, 0x63, 0xc0, 0xf3, 0xeb, 0x82, 0x59, 0xae, + 0x65, 0x6b, 0x7b, 0x78, 0xdc, 0xc7, 0x90, 0x32, 0xcc, 0xc0, 0xe0, 0xe2, + 0xb4, 0x75, 0x1f, 0x86, 0x37, 0x16, 0xea, 0x5e, 0xd7, 0x50, 0x8a, 0x41, + 0xd1, 0x56, 0x51, 0xb0, 0x93, 0xe9, 0x9e, 0x99, 0xae, 0xff, 0x00, 0x53, + 0xbf, 0xb6, 0xf0, 0xee, 0x9a, 0x93, 0xec, 0x0b, 0x00, 0x99, 0x51, 0xb1, + 0xdb, 0x7b, 0x72, 0x7f, 0xad, 0x36, 0xfa, 0x58, 0xef, 0xad, 0xda, 0xdd, + 0xc1, 0xd8, 0xc7, 0x6e, 0xe5, 0x38, 0x20, 0xf5, 0x04, 0x11, 0xdf, 0x1c, + 0x8f, 0x5e, 0x95, 0xed, 0x3c, 0xd7, 0x17, 0x29, 0xfb, 0x48, 0xbb, 0x45, + 0xf9, 0x1f, 0x43, 0x2c, 0xef, 0x1d, 0x3a, 0x9e, 0xd6, 0x2e, 0xd0, 0x7e, + 0x4b, 0xa6, 0xe7, 0x83, 0x48, 0x8d, 0x1c, 0x8c, 0x8e, 0xa5, 0x59, 0x4e, + 0x08, 0x3d, 0xab, 0xba, 0xf8, 0x93, 0xff, 0x00, 0x24, 0xff, 0x00, 0xc3, + 0xdf, 0xf6, 0xcf, 0xff, 0x00, 0x45, 0x57, 0x37, 0xe2, 0x6b, 0x4b, 0xcb, + 0x5d, 0x6e, 0x71, 0x79, 0x22, 0xcc, 0xef, 0xf3, 0xac, 0xc8, 0xa1, 0x44, + 0x83, 0xd7, 0x03, 0xa7, 0xd2, 0xba, 0x4f, 0x89, 0x3f, 0xf2, 0x4f, 0xfc, + 0x3d, 0xff, 0x00, 0x6c, 0xff, 0x00, 0xf4, 0x55, 0x57, 0x13, 0x4d, 0x4f, + 0x07, 0x09, 0x2e, 0xbf, 0xf0, 0x0f, 0xa3, 0xab, 0x51, 0x54, 0xc4, 0xe1, + 0x26, 0xba, 0xb7, 0xf9, 0x1e, 0x4d, 0x45, 0x14, 0x57, 0xe7, 0x87, 0xd5, + 0x9d, 0xe5, 0x76, 0x1e, 0x0c, 0xff, 0x00, 0x90, 0x46, 0xbb, 0xff, 0x00, + 0x5c, 0x87, 0xfe, 0x82, 0xd5, 0xc7, 0xd7, 0x65, 0xe0, 0xa8, 0xe4, 0x7d, + 0x27, 0x5a, 0x0a, 0x38, 0x78, 0xf6, 0x8f, 0x73, 0xb4, 0xff, 0x00, 0x8d, + 0x6d, 0x96, 0xff, 0x00, 0xbd, 0x40, 0xfc, 0x17, 0x0c, 0xed, 0x5a, 0x2f, + 0xcc, 0xe0, 0x34, 0x9d, 0x72, 0xf7, 0x47, 0x66, 0x36, 0xb2, 0x61, 0x5b, + 0xaa, 0xe4, 0xe3, 0xdc, 0x8f, 0x43, 0x8e, 0xfd, 0x6a, 0xd6, 0xa9, 0xe2, + 0xad, 0x47, 0x55, 0xb5, 0x92, 0xda, 0x4d, 0x91, 0xc2, 0xee, 0x18, 0xac, + 0x63, 0x19, 0x51, 0xf7, 0x57, 0xe8, 0x2b, 0x0f, 0xb7, 0x53, 0xe9, 0x45, + 0x7e, 0xc6, 0xf0, 0xd4, 0xa5, 0x3f, 0x68, 0xe2, 0xae, 0x7e, 0xbf, 0x2c, + 0x25, 0x19, 0x54, 0xf6, 0xae, 0x2b, 0x9b, 0xb9, 0xee, 0x3e, 0x0a, 0xd4, + 0x53, 0x50, 0xf0, 0xa5, 0x91, 0x0d, 0x97, 0x85, 0x3c, 0xa7, 0x19, 0xe7, + 0x2b, 0xff, 0x00, 0xd6, 0xae, 0x77, 0xe2, 0xb5, 0xc6, 0xdb, 0x5d, 0x3e, + 0xd4, 0x1e, 0x5d, 0xda, 0x42, 0x3e, 0x98, 0xff, 0x00, 0x1a, 0xe4, 0x3c, + 0x2d, 0xe2, 0x9b, 0x8f, 0x0d, 0xde, 0x31, 0xda, 0x65, 0xb5, 0x97, 0x1e, + 0x64, 0x79, 0xe7, 0xea, 0x2a, 0xc7, 0x8e, 0x75, 0xfb, 0x6d, 0x7f, 0x53, + 0x82, 0x4b, 0x36, 0x66, 0x86, 0x28, 0xb1, 0xb9, 0x97, 0x1c, 0x93, 0x9a, + 0xf0, 0xe9, 0x65, 0xb3, 0xa5, 0x98, 0x29, 0xdb, 0xdc, 0xd5, 0xdf, 0xf4, + 0x3e, 0x6e, 0x8e, 0x55, 0x52, 0x8e, 0x6a, 0xaa, 0x5a, 0xf0, 0xd5, 0xa7, + 0xfa, 0x7d, 0xe7, 0xb1, 0x69, 0xac, 0x5b, 0x4d, 0xb6, 0x24, 0xe4, 0x98, + 0x90, 0x9f, 0xca, 0xad, 0xd5, 0x3d, 0x33, 0xfe, 0x41, 0x96, 0xbf, 0xf5, + 0xc5, 0x3f, 0x95, 0x5c, 0xaf, 0x9a, 0x9f, 0xc4, 0xcf, 0x90, 0xa9, 0xf1, + 0xbf, 0x53, 0x0b, 0xc6, 0x24, 0x8f, 0x09, 0x6a, 0x64, 0x12, 0x08, 0x84, + 0xf2, 0x0e, 0x3b, 0xd5, 0x0f, 0x87, 0x93, 0x99, 0xfc, 0x1f, 0x6e, 0x19, + 0xb2, 0x63, 0x77, 0x4f, 0xc0, 0x1e, 0x3f, 0x4c, 0x55, 0xef, 0x19, 0x7f, + 0xc8, 0xa3, 0xa9, 0xff, 0x00, 0xd7, 0x1f, 0xeb, 0x5e, 0x6f, 0xe1, 0x8f, + 0x1a, 0xff, 0x00, 0xc2, 0x3d, 0xa3, 0xdc, 0xd9, 0x9b, 0x76, 0x95, 0xd9, + 0x8b, 0xc2, 0x72, 0x36, 0x82, 0x47, 0x46, 0xef, 0x5e, 0xb6, 0x1b, 0x0d, + 0x3c, 0x46, 0x06, 0x51, 0xa6, 0xae, 0xf9, 0x97, 0xe4, 0x7b, 0x78, 0x3c, + 0x25, 0x4c, 0x56, 0x5b, 0x28, 0x52, 0x57, 0x97, 0x3a, 0xfc, 0xad, 0xfa, + 0x9d, 0x07, 0xc5, 0x1d, 0x4d, 0x56, 0xd2, 0xd7, 0x4d, 0x56, 0x1b, 0xd9, + 0xbc, 0xd7, 0x19, 0xe8, 0x07, 0x02, 0xb8, 0x88, 0x3c, 0x4f, 0xab, 0xdb, + 0xc0, 0x20, 0x5b, 0xb2, 0x63, 0x10, 0xf9, 0x40, 0x32, 0x83, 0xc6, 0x72, + 0x39, 0xf6, 0x3d, 0x0f, 0x51, 0xda, 0xa8, 0x6a, 0x17, 0xf7, 0x3a, 0xa5, + 0xf4, 0xb7, 0x97, 0x6f, 0xbe, 0x69, 0x0f, 0x26, 0xab, 0x57, 0xd1, 0xe1, + 0x30, 0x30, 0xa5, 0x87, 0x8d, 0x29, 0xa4, 0xed, 0xaf, 0xcc, 0xfa, 0xdc, + 0x0e, 0x5d, 0x4e, 0x86, 0x1a, 0x34, 0x6a, 0x25, 0x26, 0xb5, 0x7e, 0xa4, + 0xd7, 0x37, 0x53, 0xde, 0x5c, 0x3d, 0xc5, 0xc4, 0x85, 0xe5, 0x73, 0x96, + 0x63, 0xc6, 0x4f, 0xe1, 0x5d, 0xb7, 0xc4, 0x9f, 0xf9, 0x27, 0xfe, 0x1e, + 0xff, 0x00, 0xb6, 0x7f, 0xfa, 0x2a, 0xb8, 0x3a, 0xef, 0xfe, 0x25, 0xc2, + 0xeb, 0xe0, 0x1d, 0x09, 0x4a, 0x9c, 0xc4, 0xd1, 0xab, 0xfb, 0x7e, 0xe8, + 0xd7, 0x89, 0xc5, 0x49, 0x2c, 0x2c, 0x52, 0xf3, 0xfd, 0x09, 0xc5, 0x72, + 0xc7, 0x19, 0x85, 0x4b, 0x4f, 0x79, 0xfe, 0x47, 0x91, 0xd1, 0x45, 0x15, + 0xf9, 0xc9, 0xf5, 0x07, 0x78, 0xaa, 0xcc, 0xc1, 0x54, 0x16, 0x63, 0xd0, + 0x01, 0xd4, 0xd7, 0xac, 0xf8, 0x5f, 0x47, 0xfe, 0xc9, 0xd1, 0x92, 0x29, + 0x46, 0x26, 0x90, 0xee, 0x90, 0x7b, 0x9e, 0xd5, 0x0e, 0x89, 0xe1, 0x2b, + 0x1d, 0x1d, 0xbc, 0xec, 0xb4, 0xf7, 0x03, 0xa4, 0x8f, 0xd0, 0x7d, 0x05, + 0x74, 0x58, 0x15, 0xea, 0x60, 0xb0, 0x6e, 0x93, 0xe7, 0x9e, 0xe7, 0xe1, + 0x14, 0xe9, 0xf2, 0xea, 0xcf, 0x0b, 0xf1, 0x86, 0x83, 0x26, 0x85, 0xac, + 0x48, 0x02, 0xff, 0x00, 0xa2, 0xce, 0x77, 0xc2, 0xfd, 0xb1, 0xe9, 0xf5, + 0x15, 0xcf, 0xd7, 0xd1, 0x3a, 0x96, 0x95, 0x67, 0xab, 0x5a, 0x35, 0xad, + 0xec, 0x0b, 0x24, 0x6d, 0xd8, 0x93, 0xc7, 0xd0, 0x8e, 0x95, 0xe7, 0xd7, + 0xff, 0x00, 0x0a, 0xdb, 0xcc, 0x2d, 0x61, 0xa8, 0x01, 0x19, 0xe8, 0x93, + 0xaf, 0x23, 0xf1, 0x1f, 0xe1, 0x5f, 0x7b, 0x80, 0xce, 0x69, 0x38, 0x28, + 0x57, 0x76, 0x6b, 0xaf, 0x73, 0xef, 0x72, 0xde, 0x20, 0xa3, 0x2a, 0x6a, + 0x18, 0x97, 0x69, 0x2e, 0xbd, 0x1f, 0xfc, 0x13, 0xcd, 0xe8, 0xae, 0xef, + 0xfe, 0x15, 0x66, 0xad, 0xff, 0x00, 0x3f, 0x96, 0x7f, 0x9b, 0x7f, 0x85, + 0x1f, 0xf0, 0xab, 0x35, 0x6f, 0xf9, 0xfc, 0xb3, 0xfc, 0xdb, 0xfc, 0x2b, + 0xd0, 0xfe, 0xd4, 0xc1, 0xff, 0x00, 0x3a, 0x3d, 0x4f, 0xed, 0x8c, 0x07, + 0xfc, 0xfd, 0x47, 0x4f, 0x65, 0xe3, 0xff, 0x00, 0x0f, 0xc1, 0x61, 0x04, + 0x4f, 0x77, 0x26, 0xf4, 0x8d, 0x54, 0x8f, 0x21, 0xba, 0x81, 0xf4, 0xab, + 0x1f, 0xf0, 0xb1, 0x3c, 0x37, 0xff, 0x00, 0x3f, 0x92, 0x7f, 0xdf, 0x86, + 0xff, 0x00, 0x0a, 0xe4, 0x3f, 0xe1, 0x55, 0xea, 0xdf, 0xf3, 0xf9, 0x67, + 0xf9, 0xb7, 0xf8, 0x51, 0xff, 0x00, 0x0a, 0xaf, 0x56, 0xff, 0x00, 0x9f, + 0xcb, 0x3f, 0xcd, 0xbf, 0xc2, 0xbc, 0x47, 0x85, 0xca, 0xdb, 0xbf, 0xb5, + 0x7f, 0x7f, 0xfc, 0x03, 0xe7, 0x9e, 0x0b, 0x25, 0x6e, 0xee, 0xb3, 0xfb, + 0xff, 0x00, 0xe0, 0x1b, 0x7e, 0x23, 0xf1, 0xae, 0x87, 0xa8, 0xf8, 0x7e, + 0xfa, 0xd2, 0xde, 0xe9, 0x9a, 0x59, 0x63, 0xda, 0xa0, 0xc6, 0x46, 0x4f, + 0xe5, 0x5e, 0x53, 0x5d, 0xdf, 0xfc, 0x2a, 0xcd, 0x5b, 0xfe, 0x7f, 0x2c, + 0xff, 0x00, 0x36, 0xff, 0x00, 0x0a, 0x3f, 0xe1, 0x56, 0x6a, 0xdf, 0xf3, + 0xf9, 0x67, 0xf9, 0xb7, 0xf8, 0x57, 0xa1, 0x83, 0xaf, 0x80, 0xc2, 0xc5, + 0xc2, 0x15, 0x34, 0x7d, 0xff, 0x00, 0xe1, 0x8f, 0x4f, 0x01, 0x89, 0xcb, + 0x30, 0x50, 0x70, 0xa7, 0x56, 0xe9, 0xbb, 0xeb, 0xff, 0x00, 0x0c, 0x70, + 0x94, 0x57, 0x77, 0xff, 0x00, 0x0a, 0xb3, 0x56, 0xff, 0x00, 0x9f, 0xcb, + 0x3f, 0xcd, 0xbf, 0xc2, 0xad, 0xd8, 0xfc, 0x2b, 0x93, 0xcc, 0x56, 0xbe, + 0xd4, 0x53, 0x67, 0x74, 0x85, 0x0e, 0x4f, 0xe2, 0x6b, 0xaa, 0x59, 0xae, + 0x0e, 0x2a, 0xfc, 0xe7, 0x64, 0xf3, 0xbc, 0x04, 0x55, 0xfd, 0xa2, 0x7f, + 0x79, 0xca, 0xf8, 0x57, 0x40, 0x9b, 0x5f, 0xd6, 0x23, 0x8b, 0x6b, 0x0b, + 0x68, 0xce, 0xe9, 0xdc, 0x0e, 0x00, 0xf4, 0xfa, 0x9a, 0xf5, 0xbf, 0x15, + 0x68, 0x43, 0xc4, 0x1e, 0x1b, 0xb9, 0xd3, 0x97, 0x02, 0x42, 0xbb, 0xa2, + 0x27, 0xb3, 0x0e, 0x95, 0x7f, 0x4b, 0xd2, 0x6c, 0xf4, 0x7b, 0x35, 0xb6, + 0xb3, 0x84, 0x47, 0x18, 0x39, 0x3c, 0x92, 0x49, 0xf5, 0x24, 0xf5, 0xab, + 0xd8, 0x1f, 0xe4, 0xd7, 0xca, 0x66, 0x78, 0xcf, 0xae, 0xcf, 0x55, 0xee, + 0xad, 0x91, 0xf1, 0xd9, 0x86, 0x6f, 0x53, 0x13, 0x89, 0x8d, 0x6a, 0x7a, + 0x28, 0x7c, 0x3f, 0xe6, 0x7c, 0xa9, 0x73, 0x6b, 0x35, 0x95, 0xcc, 0x96, + 0xd7, 0x31, 0xb4, 0x73, 0x46, 0x76, 0xba, 0x30, 0xe5, 0x4d, 0x43, 0x5f, + 0x44, 0xf8, 0x9f, 0xc0, 0xfa, 0x57, 0x89, 0xb1, 0x2c, 0xea, 0xd6, 0xf7, + 0x60, 0x60, 0x4f, 0x1f, 0x5c, 0x7a, 0x11, 0xd0, 0xd7, 0x03, 0x3f, 0xc1, + 0xad, 0x4d, 0x58, 0xfd, 0x9f, 0x54, 0xb4, 0x90, 0x7f, 0xb6, 0xac, 0xa7, + 0xf4, 0xcd, 0x7c, 0xb5, 0x4c, 0x15, 0x48, 0xbf, 0x77, 0x54, 0x7d, 0xae, + 0x0b, 0x89, 0xf0, 0x55, 0xa9, 0xa7, 0x5a, 0x5c, 0x92, 0xea, 0x9d, 0xed, + 0xf2, 0x66, 0x47, 0x83, 0xbe, 0x2f, 0xea, 0x1a, 0x7d, 0xc4, 0x76, 0x9a, + 0xfb, 0xfd, 0xaa, 0xc8, 0x9d, 0xbf, 0x68, 0xdb, 0xfb, 0xc8, 0xbd, 0xce, + 0x3e, 0xf0, 0xfd, 0x6b, 0xde, 0x21, 0xb8, 0x4b, 0x98, 0x52, 0x68, 0x24, + 0x59, 0x22, 0x91, 0x43, 0x2b, 0xaf, 0x20, 0x83, 0xd0, 0x8a, 0xf8, 0xe2, + 0xbd, 0xf3, 0xe0, 0xce, 0xba, 0xf7, 0x9e, 0x15, 0xba, 0xb2, 0xb8, 0x91, + 0x98, 0xe9, 0xd2, 0xe1, 0x49, 0xed, 0x1b, 0x0c, 0x81, 0xfa, 0x1a, 0xf4, + 0x28, 0xd4, 0x7f, 0x0b, 0x3e, 0x3b, 0x33, 0xc1, 0x42, 0x31, 0xf6, 0xb4, + 0xd5, 0xbb, 0xa3, 0xb3, 0xf1, 0x07, 0x88, 0xe3, 0xd1, 0xd1, 0x61, 0x88, + 0x09, 0x2e, 0x58, 0x70, 0xa7, 0xa2, 0x8f, 0x53, 0x5c, 0x25, 0xd6, 0xb5, + 0xa8, 0xde, 0x39, 0x69, 0xef, 0x26, 0xda, 0x7a, 0x28, 0x6d, 0xa3, 0xf2, + 0x1c, 0x55, 0x7b, 0xdb, 0xb7, 0xbd, 0xbc, 0x96, 0xea, 0x42, 0x73, 0x23, + 0x1e, 0xbe, 0x9d, 0xaa, 0x1f, 0x4f, 0x6a, 0xf9, 0x1c, 0x7e, 0x63, 0x57, + 0x11, 0x37, 0x67, 0x68, 0xf4, 0x47, 0xad, 0x82, 0xc0, 0x53, 0xa1, 0x05, + 0x75, 0x79, 0x75, 0x64, 0xbf, 0x69, 0x9f, 0xfe, 0x7b, 0xcb, 0xff, 0x00, + 0x7d, 0x9a, 0x3e, 0xd3, 0x3f, 0xfc, 0xf7, 0x97, 0xfe, 0xfb, 0x35, 0x15, + 0x15, 0xe7, 0x73, 0xcb, 0xb9, 0xdd, 0xca, 0xbb, 0x12, 0xfd, 0xa6, 0xe0, + 0x67, 0x33, 0x4b, 0xec, 0x37, 0x9a, 0x4f, 0xb4, 0xcf, 0xc6, 0x67, 0x94, + 0x67, 0x9c, 0x19, 0x0f, 0x4a, 0xbd, 0xa0, 0x5a, 0x43, 0x7d, 0xae, 0x5b, + 0xc1, 0x3e, 0x76, 0x1c, 0x92, 0xbe, 0xb8, 0x1d, 0x33, 0x5e, 0x95, 0x3e, + 0x9f, 0x69, 0x71, 0x6c, 0xd6, 0xf2, 0x5b, 0xa1, 0x8d, 0x86, 0x0a, 0x80, + 0x06, 0x2b, 0xd6, 0xc0, 0xe5, 0xd5, 0x31, 0x54, 0xdd, 0x45, 0x3b, 0x58, + 0xf3, 0x31, 0xb9, 0x85, 0x3c, 0x2c, 0xd4, 0x1c, 0x6f, 0x73, 0xca, 0x3e, + 0xd3, 0x3f, 0xfc, 0xf7, 0x97, 0xfe, 0xfb, 0x34, 0x7d, 0xa6, 0x7f, 0xf9, + 0xef, 0x2f, 0xfd, 0xf6, 0x69, 0xb3, 0x20, 0x8e, 0xe2, 0x44, 0x53, 0xb8, + 0x2b, 0x95, 0x07, 0xe8, 0x69, 0x95, 0xe5, 0x39, 0x4d, 0x3b, 0x36, 0x7a, + 0x49, 0x45, 0xab, 0xa4, 0x4b, 0xf6, 0x99, 0xff, 0x00, 0xe7, 0xbc, 0xbf, + 0xf7, 0xd9, 0xab, 0x16, 0xba, 0xc6, 0xa3, 0x64, 0xdb, 0xa1, 0xbc, 0x95, + 0x47, 0xf7, 0x49, 0xc8, 0xfc, 0x8f, 0x15, 0x4a, 0x8a, 0x23, 0x56, 0x71, + 0x77, 0x8c, 0x9a, 0x09, 0x53, 0x84, 0x95, 0xa4, 0x93, 0x47, 0xa3, 0xf8, + 0x7f, 0xc4, 0x91, 0xea, 0xea, 0x60, 0x98, 0x08, 0xee, 0x90, 0x64, 0x81, + 0xd1, 0x87, 0xa8, 0xad, 0xe2, 0xd8, 0x19, 0x24, 0x01, 0xdc, 0x9e, 0xd5, + 0xe3, 0xf6, 0xb7, 0x32, 0x59, 0xdc, 0xc5, 0x73, 0x13, 0x10, 0xf1, 0xbe, + 0x72, 0x2b, 0xb4, 0xf1, 0xe6, 0xac, 0xd6, 0x7e, 0x12, 0x2f, 0x6e, 0xe4, + 0x3d, 0xd9, 0x58, 0xd4, 0x8f, 0x43, 0xc9, 0xfd, 0x2b, 0xed, 0xb2, 0x2c, + 0x4c, 0xf1, 0xed, 0x51, 0x97, 0xc5, 0x74, 0xaf, 0xe4, 0xcf, 0x8f, 0xce, + 0xb0, 0xf0, 0xc1, 0x7e, 0xf6, 0x2b, 0xdd, 0xb6, 0xc7, 0x39, 0xe2, 0x8f, + 0x88, 0xb3, 0x19, 0xde, 0xd3, 0x44, 0x21, 0x23, 0x53, 0x86, 0xb9, 0x20, + 0x1d, 0xdf, 0xee, 0xe7, 0x8c, 0x7b, 0xd7, 0x0d, 0x3e, 0xab, 0xa8, 0xdd, + 0x39, 0x79, 0xef, 0xee, 0xa4, 0x63, 0xdd, 0xa5, 0x63, 0xfd, 0x6a, 0x9d, + 0x15, 0xfa, 0x96, 0x1b, 0x03, 0x47, 0x0f, 0x1e, 0x58, 0x47, 0xe7, 0xd4, + 0xfc, 0xe2, 0xbe, 0x32, 0xad, 0x79, 0x73, 0x49, 0x9c, 0x41, 0xc8, 0xc8, + 0x20, 0x8c, 0x75, 0xcf, 0x51, 0x5e, 0xbf, 0xf0, 0x4d, 0x41, 0xd3, 0x7c, + 0x4b, 0xec, 0x91, 0x7f, 0x29, 0x2b, 0x91, 0xf8, 0xa4, 0x8b, 0x1f, 0xc4, + 0x4d, 0x4d, 0x11, 0x42, 0xaa, 0xf9, 0x78, 0x51, 0xc0, 0x1f, 0x20, 0x35, + 0xd7, 0xfc, 0x12, 0xff, 0x00, 0x90, 0x6f, 0x89, 0xbf, 0xeb, 0x9c, 0x5f, + 0xca, 0x4a, 0xfc, 0xbd, 0x2b, 0x36, 0xbd, 0x7f, 0x23, 0xf6, 0x1c, 0x5c, + 0xf9, 0xf0, 0x9c, 0xfd, 0xed, 0xf9, 0xa2, 0x61, 0x45, 0x02, 0x8a, 0xf8, + 0x33, 0xd9, 0x0a, 0x00, 0x66, 0x7d, 0x8a, 0xb9, 0x62, 0x40, 0x50, 0x28, + 0xad, 0x5f, 0x0c, 0xa2, 0xc9, 0xe2, 0x1b, 0x30, 0xe3, 0x23, 0x71, 0x3c, + 0xfb, 0x03, 0x5b, 0x50, 0xa7, 0xed, 0x2a, 0x46, 0x1d, 0xda, 0x5f, 0x79, + 0x95, 0x6a, 0x9e, 0xce, 0x9c, 0xa7, 0xd9, 0x5c, 0xd2, 0xb2, 0xf0, 0x7e, + 0xaa, 0x1a, 0x2b, 0x81, 0x71, 0x15, 0xbc, 0x8a, 0x77, 0x2f, 0x52, 0x45, + 0x6f, 0xcf, 0x69, 0xe2, 0x2b, 0x8b, 0x53, 0x09, 0xbe, 0xb2, 0x4c, 0x8c, + 0x19, 0x15, 0x5b, 0x35, 0xb8, 0x25, 0x8d, 0xa4, 0x68, 0xc3, 0x82, 0xea, + 0x32, 0x57, 0xb8, 0x06, 0xa5, 0xc5, 0x7d, 0xad, 0x1c, 0xb6, 0x8d, 0x28, + 0xb8, 0xd3, 0x6f, 0x5d, 0xf5, 0x3e, 0x42, 0xae, 0x61, 0x56, 0xa4, 0x94, + 0xa6, 0x97, 0x96, 0x87, 0x99, 0xea, 0x5e, 0x14, 0xd4, 0x34, 0xf8, 0x0c, + 0xe4, 0xa4, 0xd1, 0xaf, 0x2c, 0x63, 0xea, 0x2b, 0x12, 0xbd, 0x87, 0x7c, + 0x53, 0x17, 0x8b, 0x2a, 0xc4, 0x0c, 0x3a, 0xfa, 0x66, 0xbc, 0x82, 0x40, + 0x16, 0x57, 0x03, 0xa0, 0x24, 0x0f, 0xce, 0xbe, 0x77, 0x37, 0xc0, 0xd3, + 0xc3, 0x38, 0xca, 0x93, 0xd1, 0xdf, 0xf0, 0x3d, 0xec, 0xaf, 0x1b, 0x53, + 0x10, 0xa5, 0x1a, 0x9b, 0xab, 0x7e, 0x23, 0x68, 0xa2, 0x8a, 0xf1, 0x8f, + 0x58, 0x2b, 0x7b, 0xe2, 0x0f, 0xfc, 0x89, 0xfa, 0x2f, 0xfb, 0xc9, 0xff, + 0x00, 0xa2, 0xcd, 0x60, 0xd6, 0xf7, 0xc4, 0x1f, 0xf9, 0x13, 0xb4, 0x5f, + 0xaa, 0x7f, 0xe8, 0xb3, 0x5f, 0x65, 0xc1, 0x5f, 0xef, 0xff, 0x00, 0xd7, + 0x99, 0xf2, 0x9c, 0x5d, 0xfe, 0xe5, 0xfd, 0x79, 0x1e, 0x65, 0x45, 0x14, + 0x57, 0xec, 0xc7, 0xe4, 0xc7, 0x33, 0xaf, 0x6b, 0x57, 0x5e, 0x22, 0xd6, + 0xee, 0x75, 0x5b, 0xb0, 0xab, 0x35, 0xc1, 0x07, 0x6a, 0xf0, 0x14, 0x01, + 0x80, 0x3f, 0x2a, 0xf4, 0xff, 0x00, 0x82, 0x5f, 0xf2, 0x0d, 0xf1, 0x37, + 0xfd, 0x73, 0x8b, 0xf9, 0x49, 0x5e, 0x3f, 0x8c, 0x8c, 0x1a, 0xf6, 0x0f, + 0x82, 0x5f, 0xf2, 0x0d, 0xf1, 0x37, 0xfd, 0x73, 0x8b, 0xf9, 0x49, 0x5f, + 0x91, 0x2d, 0x5b, 0x6f, 0xcf, 0xf2, 0x3f, 0x6d, 0xc7, 0x45, 0x47, 0x0c, + 0xe2, 0xb6, 0x56, 0xfc, 0xd1, 0x30, 0xa2, 0x81, 0x45, 0x7c, 0x21, 0xeb, + 0x85, 0x6c, 0x78, 0x5b, 0xfe, 0x46, 0x2b, 0x4f, 0xa9, 0xfe, 0x46, 0xb1, + 0xeb, 0x4f, 0xc3, 0xb7, 0x11, 0xdb, 0xeb, 0xb6, 0xd2, 0xca, 0xea, 0x91, + 0x82, 0xdf, 0x33, 0x74, 0x1c, 0x57, 0x56, 0x0d, 0xa5, 0x88, 0x83, 0x7d, + 0xd7, 0xe6, 0x73, 0xe2, 0x93, 0x74, 0x26, 0x97, 0x66, 0x77, 0x36, 0xaa, + 0x07, 0x8b, 0x75, 0x0f, 0xfa, 0xf7, 0x8f, 0xfa, 0xd6, 0xdd, 0x73, 0xfa, + 0x65, 0xcc, 0x57, 0x7e, 0x28, 0xd4, 0x24, 0x85, 0xd5, 0xe3, 0xf2, 0x63, + 0x1b, 0x97, 0xa5, 0x6f, 0x6e, 0xc9, 0xc0, 0x23, 0x23, 0xa8, 0xaf, 0xb8, + 0xc2, 0x34, 0xe0, 0xda, 0xeb, 0x29, 0x7e, 0x6c, 0xf8, 0xdc, 0x4a, 0x6a, + 0x49, 0x3e, 0xcb, 0xf2, 0x46, 0x36, 0x98, 0xa3, 0xfe, 0x12, 0x1d, 0x67, + 0xeb, 0x17, 0xfe, 0x83, 0x5e, 0x6d, 0x2f, 0xfa, 0xe9, 0x3f, 0xde, 0x3f, + 0xce, 0xbd, 0x06, 0xdb, 0x50, 0xb6, 0xb3, 0xf1, 0x26, 0xae, 0xb7, 0x13, + 0xa4, 0x5b, 0xbc, 0xa2, 0x0b, 0x1e, 0xbf, 0x2d, 0x79, 0xec, 0x8d, 0xba, + 0x57, 0x23, 0xa1, 0x6c, 0x8f, 0xa5, 0x7c, 0xd6, 0x6d, 0x28, 0xba, 0x70, + 0x49, 0xea, 0xa5, 0x3f, 0xfd, 0x28, 0xfa, 0x0c, 0xb2, 0x2d, 0x54, 0x93, + 0xb6, 0x96, 0x8f, 0xe4, 0x36, 0x8a, 0x28, 0xaf, 0x08, 0xf6, 0x82, 0xb7, + 0xbe, 0x20, 0xff, 0x00, 0xc8, 0x9d, 0xa2, 0xfd, 0x53, 0xff, 0x00, 0x45, + 0x9a, 0xc1, 0xad, 0xef, 0x88, 0x3f, 0xf2, 0x27, 0x68, 0xbf, 0x54, 0xff, + 0x00, 0xd1, 0x66, 0xbe, 0xcb, 0x82, 0xbf, 0xe4, 0x61, 0xfd, 0x79, 0x9f, + 0x29, 0xc5, 0xdf, 0xee, 0x5f, 0xd7, 0x91, 0xe6, 0x54, 0x51, 0x45, 0x7e, + 0xcc, 0x7e, 0x4c, 0x71, 0x15, 0xec, 0x1f, 0x04, 0xbf, 0xe4, 0x1b, 0xe2, + 0x6f, 0xfa, 0xe7, 0x17, 0xf2, 0x92, 0x8a, 0x2b, 0xf2, 0x28, 0xff, 0x00, + 0x9f, 0xe4, 0x7e, 0xdf, 0x8f, 0xfe, 0x03, 0xf9, 0x7e, 0x68, 0x98, 0x51, + 0x45, 0x15, 0xf0, 0x87, 0xaa, 0x14, 0x60, 0x7a, 0x51, 0x45, 0x30, 0x3a, + 0xcf, 0x01, 0x7f, 0xc7, 0xe5, 0xe7, 0xfb, 0x83, 0xf9, 0xd6, 0xbd, 0xd6, + 0xb5, 0x69, 0xa4, 0x6a, 0xf7, 0xcd, 0x74, 0xed, 0x96, 0x48, 0xca, 0x22, + 0xf3, 0x9e, 0xb4, 0x51, 0x5f, 0x4b, 0x46, 0xbc, 0xa8, 0x65, 0xd0, 0xa9, + 0x0d, 0xd3, 0x7f, 0xa9, 0xf3, 0xf5, 0x68, 0x46, 0xbe, 0x61, 0x3a, 0x73, + 0xd9, 0xa5, 0xfa, 0x1c, 0x46, 0xaf, 0x7a, 0x35, 0x3d, 0x46, 0x4b, 0xd1, + 0x0b, 0x22, 0x48, 0x46, 0xdc, 0x8c, 0xe7, 0x03, 0xd6, 0xa9, 0xd1, 0x45, + 0x7c, 0xfd, 0x79, 0x39, 0x4d, 0xca, 0x5b, 0xbd, 0x7e, 0xf3, 0xdc, 0xa5, + 0x15, 0x18, 0xa8, 0xad, 0x96, 0x81, 0x45, 0x14, 0x56, 0x26, 0x81, 0x5b, + 0xdf, 0x10, 0x7f, 0xe4, 0x4e, 0xd1, 0x7e, 0xa9, 0xff, 0x00, 0xa2, 0xcd, + 0x14, 0x57, 0xd9, 0x70, 0x57, 0xfc, 0x8c, 0x3f, 0xaf, 0x33, 0xe5, 0x38, + 0xbb, 0xfd, 0xcb, 0xfa, 0xf2, 0x3c, 0xca, 0x8a, 0x28, 0xaf, 0xd9, 0x8f, + 0xc9, 0x8f, 0xff, 0xd9 +}; +unsigned int palette_128x200_jpg_len = 6532; From 6942f24117cba6056163a8d9316e623c3fcb40ba Mon Sep 17 00:00:00 2001 From: tobozo Date: Mon, 17 Apr 2023 14:07:31 +0200 Subject: [PATCH 30/34] float tweaks --- .../Sprite/TransitionFX/LGFX_SpriteFX.hpp | 53 +++++++++---------- examples/Sprite/TransitionFX/TransitionFX.ino | 3 ++ 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp b/examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp index bdff17c7..f53838d6 100644 --- a/examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp +++ b/examples/Sprite/TransitionFX/LGFX_SpriteFX.hpp @@ -1,5 +1,4 @@ -#define LGFX_USE_V1 -#define LGFX_AUTODETECT + #include /*\ @@ -34,33 +33,33 @@ namespace lgfx const float d1 = 2.75f; float linear(float t) { return t; } - float easeInQuad(float t) { return pow(t,2.0f); } + float easeInQuad(float t) { return powf(t,2.0f); } float easeOutQuad(float t) { return t*(2.0f-t); } - float easeInOutQuad(float t) { return t<.5f ? 2.0f*pow(t,2) : -1.0f+(4.0f-2.0f*t)*t; } - float easeInCubic(float t) { return pow(t,3.0f); } - float easeOutCubic(float t) { return 1.0f - pow(1.0f - t, 3.0f); } - float easeInOutCubic(float t) { return t<.5f ? 4.0f*pow(t,3) : (t-1.0f)*(2.0f*t-2.0f)*(2.0f*t-2.0f)+1.0f; } - float easeInQuart(float t) { return pow(t,4.0f); } - float easeOutQuart(float t) { return 1.0f - pow(1.0f - t, 4.0f); } - float easeInOutQuart(float t) { return t < 0.5 ? 8.0f * t * t * t * t : 1.0f - pow(-2.0f * t + 2.0f, 4.0f) / 2.0f; } - float easeInQuint(float t) { return pow(t,5.0f); } - float easeOutQuint(float t) { return 1.0f - pow(1.0f - t, 5.0f); } - float easeInOutQuint(float t) { return t < 0.5 ? 16.0f * t * t * t * t * t : 1.0f - pow(-2.0f * t + 2.0f, 5.0f) / 2.0f;/*t<.5f ? 16.0f*pow(t,5) : 1.0f+16.0f*(--t)*pow(t,4);*/ } - float easeInSine(float t) { return 1.0f - cos((t * PI) / 2.0f); } - float easeOutSine(float t) { return sin((t * PI) / 2.0f); } - float easeInOutSine(float t) { return -(cos(PI * t) - 1.0f) / 2.0f; } - float easeInExpo(float t) { return t==0 ? 0 : pow(2, 10.0f * t - 10.0f); } - float easeOutExpo(float t) { return t==1.0f ? 1.0f : 1.0f - pow(2, -10.0f * t); } - float easeInOutExpo(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : t < 0.5f ? pow(2, 20.0f * t - 10.0f) / 2.0f : (2.0f - pow(2, -20.0f * t + 10.0f)) / 2.0f; } - float easeInCirc(float t) { return 1.0f - sqrt(1.0f - pow(t, 2.0f)); } - float easeOutCirc(float t) { return sqrt(1.0f - pow(t - 1, 2.0f)); } - float easeInOutCirc(float t) { return t < 0.5f ? (1.0f - sqrt(1.0f - pow(2.0f * t, 2.0f))) / 2.0f : (sqrt(1 - pow(-2.0f * t + 2.0f, 2.0f)) + 1.0f) / 2.0f; } + float easeInOutQuad(float t) { return t<.5f ? 2.0f*powf(t,2) : -1.0f+(4.0f-2.0f*t)*t; } + float easeInCubic(float t) { return powf(t,3.0f); } + float easeOutCubic(float t) { return 1.0f - powf(1.0f - t, 3.0f); } + float easeInOutCubic(float t) { return t<.5f ? 4.0f*powf(t,3) : (t-1.0f)*(2.0f*t-2.0f)*(2.0f*t-2.0f)+1.0f; } + float easeInQuart(float t) { return powf(t,4.0f); } + float easeOutQuart(float t) { return 1.0f - powf(1.0f - t, 4.0f); } + float easeInOutQuart(float t) { return t < 0.5 ? 8.0f * t * t * t * t : 1.0f - powf(-2.0f * t + 2.0f, 4.0f) / 2.0f; } + float easeInQuint(float t) { return powf(t,5.0f); } + float easeOutQuint(float t) { return 1.0f - powf(1.0f - t, 5.0f); } + float easeInOutQuint(float t) { return t < 0.5 ? 16.0f * t * t * t * t * t : 1.0f - powf(-2.0f * t + 2.0f, 5.0f) / 2.0f;/*t<.5f ? 16.0f*powf(t,5) : 1.0f+16.0f*(--t)*powf(t,4);*/ } + float easeInSine(float t) { return 1.0f - cosf((t * PI) / 2.0f); } + float easeOutSine(float t) { return sinf((t * PI) / 2.0f); } + float easeInOutSine(float t) { return -(cosf(PI * t) - 1.0f) / 2.0f; } + float easeInExpo(float t) { return t==0 ? 0 : powf(2, 10.0f * t - 10.0f); } + float easeOutExpo(float t) { return t==1.0f ? 1.0f : 1.0f - powf(2, -10.0f * t); } + float easeInOutExpo(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : t < 0.5f ? powf(2, 20.0f * t - 10.0f) / 2.0f : (2.0f - powf(2, -20.0f * t + 10.0f)) / 2.0f; } + float easeInCirc(float t) { return 1.0f - sqrtf(1.0f - powf(t, 2.0f)); } + float easeOutCirc(float t) { return sqrtf(1.0f - powf(t - 1, 2.0f)); } + float easeInOutCirc(float t) { return t < 0.5f ? (1.0f - sqrtf(1.0f - powf(2.0f * t, 2.0f))) / 2.0f : (sqrtf(1 - powf(-2.0f * t + 2.0f, 2.0f)) + 1.0f) / 2.0f; } float easeInBack(float t) { return c3 * t * t * t - c1 * t * t; } - float easeOutBack(float t) { return 1.0f + c3 * pow(t - 1.0f, 3.0f) + c1 * pow(t - 1.0f, 2.0f); } - float easeInOutBack(float t) { return t < 0.5f ? (pow(2.0*t, 2.0f) * ((c2 + 1.0f) * 2.0f * t - c2)) / 2.0f : (pow(2.0*t-2, 2.0f) * ((c2 + 1.0f) * (t * 2.0f - 2.0f) + c2) + 2.0f) / 2.0f; } - float easeInElastic(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : -pow(2, 10.0f * t - 10.0f) * sin((t * 10.0f - 10.75f) * c4); } - float easeOutElastic(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : pow(2, -10.0f * t) * sin((t * 10.0f - 0.75f) * c4) + 1; } - float easeInOutElastic(float t) { return t==0 ? 0 : t==1 ? 1 : t<0.5 ? -(pow(2, 20.0f*t-10.0f)*sin((20.0f*t-11.125f)*c5))/2.0f : (pow(2,-20.0f*t+10.0f)*sin((20.0f*t-11.125f)*c5))/2.0f+1.0f; } + float easeOutBack(float t) { return 1.0f + c3 * powf(t - 1.0f, 3.0f) + c1 * powf(t - 1.0f, 2.0f); } + float easeInOutBack(float t) { return t < 0.5f ? (powf(2.0*t, 2.0f) * ((c2 + 1.0f) * 2.0f * t - c2)) / 2.0f : (powf(2.0*t-2, 2.0f) * ((c2 + 1.0f) * (t * 2.0f - 2.0f) + c2) + 2.0f) / 2.0f; } + float easeInElastic(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : -powf(2, 10.0f * t - 10.0f) * sinf((t * 10.0f - 10.75f) * c4); } + float easeOutElastic(float t) { return t==0 ? 0 : t==1.0f ? 1.0f : powf(2, -10.0f * t) * sinf((t * 10.0f - 0.75f) * c4) + 1; } + float easeInOutElastic(float t) { return t==0 ? 0 : t==1 ? 1 : t<0.5 ? -(powf(2, 20.0f*t-10.0f)*sinf((20.0f*t-11.125f)*c5))/2.0f : (powf(2,-20.0f*t+10.0f)*sinf((20.0f*t-11.125f)*c5))/2.0f+1.0f; } float easeOutBounce(float t) { return t<1.0f/d1 ? n1*t*t : t<2.0f/d1 ? n1*(t-=1.5f/d1)*t+0.75f : t<2.5f/d1 ? n1*(t-=2.25f/d1)*t+0.9375f : n1*(t-=2.625f/d1)*t+0.984375f; } }; // end namespace easing diff --git a/examples/Sprite/TransitionFX/TransitionFX.ino b/examples/Sprite/TransitionFX/TransitionFX.ino index 74c3b070..6039ef57 100644 --- a/examples/Sprite/TransitionFX/TransitionFX.ino +++ b/examples/Sprite/TransitionFX/TransitionFX.ino @@ -37,6 +37,9 @@ * \*/ +#define LGFX_USE_V1 +#define LGFX_AUTODETECT + #include "LGFX_SpriteFX.hpp" #include "assets.h" // some example images for this demo From fe00179ad253ec6b1ae13e15acd75c7cdf827f89 Mon Sep 17 00:00:00 2001 From: tobozo Date: Mon, 17 Apr 2023 14:19:28 +0200 Subject: [PATCH 31/34] v1 is the default --- examples/Sprite/TransitionFX/TransitionFX.ino | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/Sprite/TransitionFX/TransitionFX.ino b/examples/Sprite/TransitionFX/TransitionFX.ino index 6039ef57..68821d5e 100644 --- a/examples/Sprite/TransitionFX/TransitionFX.ino +++ b/examples/Sprite/TransitionFX/TransitionFX.ino @@ -37,7 +37,6 @@ * \*/ -#define LGFX_USE_V1 #define LGFX_AUTODETECT #include "LGFX_SpriteFX.hpp" From 30901a871fba81a16138c055df64fcd68e3cfb5b Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Thu, 27 Apr 2023 14:16:44 +0900 Subject: [PATCH 32/34] Corrected incorrect name. --- src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp b/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp index d83a9465..1d5cc7a9 100644 --- a/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp +++ b/src/lgfx/v1/platforms/esp32/Panel_CVBS.cpp @@ -406,7 +406,7 @@ namespace lgfx static constexpr const size_t sync_proc_count = 12; uint16_t total_scanlines; // 走査線数(2フィールド、1フレーム); uint16_t scanline_width; // 走査線内のサンプル数 (カラークロック数 x4); - uint8_t hsync_serration; // 切り込みパルス幅; + uint8_t hsync_equalizing; // 等化パルス幅; uint8_t hsync_short; // 水平同期期間のSYNC幅; uint16_t hsync_long; // 垂直同期期間のSYNC幅; uint8_t burst_start; @@ -425,7 +425,7 @@ namespace lgfx { // NTSC { 525 // 走査線525本; , 910 // 1走査線あたり 227.5 x4 sample - , 32 // serration = 32 sample (2.3us) + , 32 // equalizing = 32 sample (2.3us) , 66 // hsync_short = 66 sample (4.7us) , 380 // hsync_long = 380 sample , 76 // burst start = 76 sample @@ -442,7 +442,7 @@ namespace lgfx , // NTSC_J { 525 // 走査線525本; , 910 // 1走査線あたり 227.5 x4 sample - , 32 // serration = 32 sample (2.3us) + , 32 // equalizing = 32 sample (2.3us) , 66 // hsync_short = 66 sample (4.7us) , 380 // hsync_long = 380 sample , 76 // burst start = 76 sample @@ -460,7 +460,7 @@ namespace lgfx , // PAL { 625 // 走査線625本; , 1136 // 1走査線あたり 284 x4 sample (正確には283.75x4 = 1135だが、2の倍数でないとI2S出力できないため1136とする) - , 40 // serration = 40 sample (2.3us) + , 40 // equalizing = 40 sample (2.3us) , 84 // hsync_shor = 84 sample (4.7us) , 484 // hsync_long 484 sample , 98 // burst start = 98 sample (5.6us) @@ -477,7 +477,7 @@ namespace lgfx , // PAL_M (PAL_M方式は周波数等がNTSCと共通、カラー情報の仕様がPALと共通) { 525 // 走査線525本; , 908 // 1走査線あたり 227.5 x4 sample - , 32 // serration = 32 sample (2.3us) + , 32 // equalizing = 32 sample (2.3us) , 66 // hsync_short = 66 sample (4.7us) , 380 // hsync_long = 380 sample , 80 // burst start = 84 sample @@ -1798,13 +1798,13 @@ namespace lgfx if (sync_proc & 0x03) // 水平期間後半のパルス付与; { // 0x01=等化パルス幅 / 0x02=垂直同期パルス幅 - int syncwidth = ((sync_proc & 0x01) ? _signal_spec_info.hsync_serration : _signal_spec_info.hsync_long); + int syncwidth = ((sync_proc & 0x01) ? _signal_spec_info.hsync_equalizing : _signal_spec_info.hsync_long); memset(&buf[((_signal_spec_info.scanline_width >> 1) + 1) & ~1u], internal.SYNC_LEVEL >> 8, syncwidth << 1); buf[(_signal_spec_info.scanline_width >> 1) ^ 1] = internal.SYNC_LEVEL; } if (sync_proc & 0x30) // 水平期間前半のパルス付与; { - int syncwidth = _signal_spec_info.hsync_serration; // 等化パルス幅; + int syncwidth = _signal_spec_info.hsync_equalizing; // 等化パルス幅; switch ((sync_proc >> 4) & 3) { case 2: syncwidth = _signal_spec_info.hsync_long; break; // 垂直同期パルス幅; From 9ea7053a3fed2c7c753d7034064c1966187dbf92 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Thu, 27 Apr 2023 16:45:46 +0900 Subject: [PATCH 33/34] Changed to allow configuration of devices to be operated by LinuxFB. --- .../CMake_FrameBuffer/LGFX_LINUX_FB.cpp | 58 +++++++++---------- .../CMake_FrameBuffer/user_code.cpp | 8 ++- .../v1/platforms/framebuffer/Panel_fb.cpp | 43 +++++++++++--- .../v1/platforms/framebuffer/Panel_fb.hpp | 21 ++++++- src/lgfx/v1/platforms/framebuffer/common.cpp | 2 +- src/lgfx/v1/platforms/opencv/common.cpp | 2 +- src/lgfx/v1/platforms/sdl/common.cpp | 2 +- .../LGFX_AutoDetect_FrameBuffer.hpp | 7 ++- 8 files changed, 97 insertions(+), 46 deletions(-) diff --git a/examples_for_PC/CMake_FrameBuffer/LGFX_LINUX_FB.cpp b/examples_for_PC/CMake_FrameBuffer/LGFX_LINUX_FB.cpp index 32ee4530..6cd6982f 100644 --- a/examples_for_PC/CMake_FrameBuffer/LGFX_LINUX_FB.cpp +++ b/examples_for_PC/CMake_FrameBuffer/LGFX_LINUX_FB.cpp @@ -1,29 +1,29 @@ -#include -#include - -#define LGFX_USE_V1 -#include -#include - -void setup(void); -void loop(void); - -void loopThread(void) -{ - setup(); - for (;;) - { - loop(); - std::this_thread::yield(); - } -} - -int main(int, char**) -{ - std::thread sub_thread(loopThread); - for (;;) - { - std::this_thread::yield(); - sleep(5); - } -} +#include +#include + +#define LGFX_USE_V1 +#include +#include + +void setup(void); +void loop(void); + +void loopThread(void) +{ + setup(); + for (;;) + { + loop(); + std::this_thread::yield(); + } +} + +int main(int, char**) +{ + std::thread sub_thread(loopThread); + for (;;) + { + std::this_thread::yield(); + std::this_thread::sleep_for(std::chrono::milliseconds(5)); + } +} diff --git a/examples_for_PC/CMake_FrameBuffer/user_code.cpp b/examples_for_PC/CMake_FrameBuffer/user_code.cpp index 23351978..feb4f8bf 100644 --- a/examples_for_PC/CMake_FrameBuffer/user_code.cpp +++ b/examples_for_PC/CMake_FrameBuffer/user_code.cpp @@ -6,8 +6,12 @@ #define SCREEN_X 320 #define SCREEN_Y 240 +#define DEVICE_NAME "/dev/fb0" -LGFX lcd ( SCREEN_X, SCREEN_Y ); +// 引数1 画面の幅 +// 引数2 画面の高さ +// 引数3 操作対象とするフレームバッファのパス名、またはデバイス名称 ("st7789") 等の文字列 +LGFX lcd ( SCREEN_X, SCREEN_Y, DEVICE_NAME ); int32_t target_x = (SCREEN_X / 2) * 256; int32_t target_y = (SCREEN_Y / 2) * 256; @@ -30,5 +34,5 @@ void loop() current_y += add_y; add_x += (current_x < target_x) ? 1 : -1; add_y += (current_y < target_y) ? 1 : -1; - sleep(1); + lgfx::delay(1); } diff --git a/src/lgfx/v1/platforms/framebuffer/Panel_fb.cpp b/src/lgfx/v1/platforms/framebuffer/Panel_fb.cpp index 2817a637..48f44162 100644 --- a/src/lgfx/v1/platforms/framebuffer/Panel_fb.cpp +++ b/src/lgfx/v1/platforms/framebuffer/Panel_fb.cpp @@ -26,6 +26,10 @@ Porting for Linux FrameBuffer: #include "../../Bus.hpp" #include +#include +#include +#include +#include namespace lgfx { @@ -103,20 +107,43 @@ namespace lgfx bool Panel_fb::init(bool use_reset) { - // TODO - // default: /dev/fb0 - // Open the file for reading and writing - _fbfd = open("/dev/fb0", O_RDWR); + _fbfd = open(_config_detail.device_name, O_RDWR); if (_fbfd == -1) { + // detect target framebuffer. + DIR* sysfs_graphics = opendir("/sys/class/graphics"); + struct dirent* entry; + std::string path; + std::string target = "/dev/fb0"; + while((entry = readdir(sysfs_graphics)) != NULL) { + if( entry->d_type == DT_LNK ) { + path = "/sys/class/graphics/"; + path.append(entry->d_name); + path.append("/name"); + std::ifstream fs(path.c_str()); + if( !fs.is_open() ) continue; + std::stringstream buffer; + buffer << fs.rdbuf(); + if( buffer.str().find_first_of(_config_detail.device_name) != std::string::npos ) { + target = "/dev/"; + target.append(entry->d_name); + break; + } + } + } + closedir(sysfs_graphics); + + _fbfd = open(target.c_str(), O_RDWR); + if (_fbfd == -1) { printf("Error: cannot open framebuffer device.\n"); - return 1; + return false; + } } // printf("The framebuffer device was opened successfully.\n"); // Get variable screen information if (ioctl(_fbfd, FBIOGET_VSCREENINFO, &_var_info)) { printf("Error reading variable information.\n"); - return 1; + return false; } // printf("%dx%d, %dbpp\n", _var_info.xres, _var_info.yres, _var_info.bits_per_pixel); @@ -126,7 +153,7 @@ namespace lgfx // Get fixed screen information if (ioctl(_fbfd, FBIOGET_FSCREENINFO, &_fix_info)) { printf("Error reading fixed information.\n"); - return 1; + return false; } // Figure out the size of the screen in bytes @@ -136,7 +163,7 @@ namespace lgfx _fbp = (char *)mmap(0, _screensize, PROT_READ | PROT_WRITE, MAP_SHARED, _fbfd, 0); if((intptr_t)_fbp == -1) { perror("Error: failed to map framebuffer device to memory"); - return 1; + return false; } memset(_fbp, 0, _screensize); diff --git a/src/lgfx/v1/platforms/framebuffer/Panel_fb.hpp b/src/lgfx/v1/platforms/framebuffer/Panel_fb.hpp index d4b94625..08a24169 100644 --- a/src/lgfx/v1/platforms/framebuffer/Panel_fb.hpp +++ b/src/lgfx/v1/platforms/framebuffer/Panel_fb.hpp @@ -43,6 +43,12 @@ namespace lgfx Panel_fb(void); virtual ~Panel_fb(void); + struct config_detail_t + { + // 操作対象とするフレームバッファのパス名、または、デバイス名称 ("st7789") 等の文字列へのポインタを指定する。 + const char* device_name = "/dev/fb0"; + }; + bool init(bool use_reset) override; void beginTransaction(void) override; void endTransaction(void) override; @@ -72,11 +78,16 @@ namespace lgfx uint_fast8_t getTouchRaw(touch_point_t* tp, uint_fast8_t count) override; - private: - void fb_draw_rgb_pixel(int x, int y, uint32_t rawcolor); - void fb_draw_argb_pixel(int x, int y, uint32_t rawcolor); + // init前に使用し、操作対象とするフレームバッファのパス名、または、デバイス名称 ("st7789") 等の文字列へのポインタを指定する。 + void setDeviceName(const char* device_name) { _config_detail.device_name = device_name; }; + + const config_detail_t& config_detail(void) const { return _config_detail; } + void config_detail(const config_detail_t& config_detail); protected: + + config_detail_t _config_detail; + touch_point_t _touch_point; // framebuffer int _fbfd = 0; @@ -89,6 +100,10 @@ namespace lgfx int32_t _ypos = 0; void _rotate_pixelcopy(uint_fast16_t& x, uint_fast16_t& y, uint_fast16_t& w, uint_fast16_t& h, pixelcopy_t* param, uint32_t& nextx, uint32_t& nexty); + + private: + void fb_draw_rgb_pixel(int x, int y, uint32_t rawcolor); + void fb_draw_argb_pixel(int x, int y, uint32_t rawcolor); }; //---------------------------------------------------------------------------- diff --git a/src/lgfx/v1/platforms/framebuffer/common.cpp b/src/lgfx/v1/platforms/framebuffer/common.cpp index 2025b186..8cebb3cf 100644 --- a/src/lgfx/v1/platforms/framebuffer/common.cpp +++ b/src/lgfx/v1/platforms/framebuffer/common.cpp @@ -109,7 +109,7 @@ namespace lgfx cpp::result beginTransaction(int i2c_port, int i2c_addr, uint32_t freq, bool read) { return cpp::fail(error_t::unknown_err); } cpp::result endTransaction(int i2c_port) { return cpp::fail(error_t::unknown_err); } cpp::result writeBytes(int i2c_port, const uint8_t *data, size_t length) { return cpp::fail(error_t::unknown_err); } - cpp::result readBytes(int i2c_port, uint8_t *data, size_t length) { return cpp::fail(error_t::unknown_err); } + cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nak) { return cpp::fail(error_t::unknown_err); } //-------- diff --git a/src/lgfx/v1/platforms/opencv/common.cpp b/src/lgfx/v1/platforms/opencv/common.cpp index 47c39567..1fa99d30 100644 --- a/src/lgfx/v1/platforms/opencv/common.cpp +++ b/src/lgfx/v1/platforms/opencv/common.cpp @@ -99,7 +99,7 @@ namespace lgfx cpp::result beginTransaction(int i2c_port, int i2c_addr, uint32_t freq, bool read) { return cpp::fail(error_t::unknown_err); } cpp::result endTransaction(int i2c_port) { return cpp::fail(error_t::unknown_err); } cpp::result writeBytes(int i2c_port, const uint8_t *data, size_t length) { return cpp::fail(error_t::unknown_err); } - cpp::result readBytes(int i2c_port, uint8_t *data, size_t length) { return cpp::fail(error_t::unknown_err); } + cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nack = false) { return cpp::fail(error_t::unknown_err); } //-------- diff --git a/src/lgfx/v1/platforms/sdl/common.cpp b/src/lgfx/v1/platforms/sdl/common.cpp index 3868eca8..db5b10d3 100644 --- a/src/lgfx/v1/platforms/sdl/common.cpp +++ b/src/lgfx/v1/platforms/sdl/common.cpp @@ -97,7 +97,7 @@ namespace lgfx cpp::result beginTransaction(int i2c_port, int i2c_addr, uint32_t freq, bool read) { return cpp::fail(error_t::unknown_err); } cpp::result endTransaction(int i2c_port) { return cpp::fail(error_t::unknown_err); } cpp::result writeBytes(int i2c_port, const uint8_t *data, size_t length) { return cpp::fail(error_t::unknown_err); } - cpp::result readBytes(int i2c_port, uint8_t *data, size_t length) { return cpp::fail(error_t::unknown_err); } + cpp::result readBytes(int i2c_port, uint8_t *data, size_t length, bool last_nack = false) { return cpp::fail(error_t::unknown_err); } //-------- diff --git a/src/lgfx/v1_autodetect/LGFX_AutoDetect_FrameBuffer.hpp b/src/lgfx/v1_autodetect/LGFX_AutoDetect_FrameBuffer.hpp index 2378d629..4611e1e2 100644 --- a/src/lgfx/v1_autodetect/LGFX_AutoDetect_FrameBuffer.hpp +++ b/src/lgfx/v1_autodetect/LGFX_AutoDetect_FrameBuffer.hpp @@ -39,7 +39,11 @@ namespace lgfx public: - LGFX(int width = 320, int height = 240) + /// create instance. + /// @param width display width. + /// @param height display height. + /// @param device_name Specify the path (e.g., "/dev/fb1") or device name (e.g., "st7789") of the device to be operated. + LGFX(int width = 320, int height = 240, const char* device_name = "/dev/fb0") { auto cfg = _panel_instance.config(); cfg.memory_width = width; @@ -47,6 +51,7 @@ namespace lgfx cfg.memory_height = height; cfg.panel_height = height; _panel_instance.config(cfg); + _panel_instance.setDeviceName(device_name); setPanel(&_panel_instance); _board = board_t::board_FrameBuffer; } From 7dc99dbf2b4b3f1dd3da25ceb4e87af5f2483ec4 Mon Sep 17 00:00:00 2001 From: lovyan03 <42724151+lovyan03@users.noreply.github.com> Date: Thu, 27 Apr 2023 16:49:55 +0900 Subject: [PATCH 34/34] raising version 1.1.6 --- library.json | 2 +- library.properties | 2 +- src/lgfx/v1/gitTagVersion.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/library.json b/library.json index 43b68ed3..3016463a 100644 --- a/library.json +++ b/library.json @@ -11,7 +11,7 @@ "type": "git", "url": "https://github.com/lovyan03/LovyanGFX.git" }, - "version": "1.1.5", + "version": "1.1.6", "frameworks": ["arduino", "espidf"], "platforms": ["espressif32", "espressif8266", "atmelsam"], "headers": "LovyanGFX.hpp", diff --git a/library.properties b/library.properties index 0d083568..31613ff2 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=LovyanGFX -version=1.1.5 +version=1.1.6 author=lovyan03 maintainer=lovyan03 sentence=TFT LCD Graphics driver with touch for ESP32, ESP8266, SAMD21, SAMD51, RP2040 diff --git a/src/lgfx/v1/gitTagVersion.h b/src/lgfx/v1/gitTagVersion.h index 59b8346e..b71455a0 100644 --- a/src/lgfx/v1/gitTagVersion.h +++ b/src/lgfx/v1/gitTagVersion.h @@ -1,4 +1,4 @@ #define LGFX_VERSION_MAJOR 1 #define LGFX_VERSION_MINOR 1 -#define LGFX_VERSION_PATCH 5 +#define LGFX_VERSION_PATCH 6 #define LOVYANGFX_VERSION F( LGFX_VERSION_MAJOR "." LGFX_VERSION_MINOR "." LGFX_VERSION_PATCH )