1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XIAO RP2040でXIAO Round Displayを使う

Last updated at Posted at 2024-06-02

はじめに

Seeed Studio が販売しているXIAOシリーズのマイコンXIAO Round Display を組み合わせると非常にコンパクトなディスプレイ付きデバイスを作ることが出来ます。

XIAO ESP32C3 / XIAO EPS32S3 を使った記事はいくつか出てきますが、電波を出すマイコンを使いたくなかったので、XIAO RP2040 で使えるようにしてみました。

XIAO Round Display を使うには以下の3つの方法があります。

  • SPI / I2C のインターフェースを直接操作する。
  • TFT_eSPI ライブラリを利用する。
  • LovyanGFX ライブラリを利用する。

XIAO Round Display の開発者向け解説では TFT_eSPI を使う方法が紹介されていますが、XIAO RP2040 との組み合わせではいくつか期待した動作をしなかったので、ここでは LovyanGFX ライブラリを使う方法を説明します。

仕様の調査

XIAO ESP32S3 と XIAO Round Display の組み合わせで LovyanGFX ライブラリを使った実装例はイナバちゃんログの Seeed Studio XIAO 用円形ディスプレイを LovyanGFX で使うで紹介されていますので、これをベースに XIAO RP2040 用に修正します。

XIAO Round Display は以下のピンを利用します。

XIAO GPIO 機能
D0
D1 CS for TF Card
D2 CS for LCD
D3 Data / Command
D4 SDA
D5 SCL
D6 Back Light
D7 Touch Detect
D8 SCK
D9 MISO
D10 MOSI

一方、XIAO RP2040 のピンレイアウトは以下のとおりです。

XIAO RP2040ピンレイアウト

XIAO RP2040 ピンレイアウトの P のラベルが付いた番号と Raspberry Pi Picoのピンレイアウトの GPIO の番号と比較して、SPI と I2C の利用チャンネルを確認します。

Raspberry Pi Picoピンレイアウト

XIAO RP2040 の SPI は Raspberry Pi Picoの GPIO2,3,4 を使っていることから、XIAO RP2040 の SPI はチャンネル0を、同様に I2C は GPIO6,7 を使っていることから、チャンネル1を使っていることが分かります。

実装

変更されたコード全体は付録に掲出します。ここでは変更場所についてのみ説明します。

イナバちゃんログに掲出されていたコードのうち、以下の場所を変更しました。コンフィグレーション構造体のメンバーとしてあるはずの spi_3wire, use_lock, dma_channel はビルド時点でないと言われたため、設定から外しています。その他の設定は先の調査で分かったチャンネル番号と XIAO ピン番号を割り当てます。

 public:
  XiaoRoundDisplay() {
    auto bus_cfg = _bus.config();
    bus_cfg.spi_host = 0;   // for XIAO RP2040    
    bus_cfg.spi_mode = 0;
    bus_cfg.freq_write = 40000000;
    bus_cfg.freq_read  = 20000000;
    // bus_cfg.spi_3wire  = true; // spi_3wire is not a member of.
    // bus_cfg.use_lock   = true; // use_lock is not a member of.
    // bus_cfg.dma_channel = 0; // use_lock is not a member of.
    bus_cfg.pin_sclk = D8;  // for XIAO RP2040
    bus_cfg.pin_mosi = D10; // for XIAO RP2040
    bus_cfg.pin_miso = D9;  // for XIAO RP2040
    bus_cfg.pin_dc   = D3;  // for XIAO RP2040
    _bus.config(bus_cfg);
    _panel.setBus(&_bus);

    auto panel_cfg = _panel.config();
    panel_cfg.pin_cs = D1; // for XIAO RP2040

    ... (snip)

    auto light_cfg = _light.config();
    light_cfg.pin_bl = D6; // for XIAO RP2040

    ... (snip)

    auto touch_cfg = _touch.config(); 
    touch_cfg.pin_int = D7;  // for XIAO RP2040

    touch_cfg.i2c_port = 1;  // for XIAO RP2040
    touch_cfg.pin_sda  = D4; // for XIAO RP2040
    touch_cfg.pin_scl  = D5; // for XIAO RP2040
    touch_cfg.freq = 400000;

    _touch.config(touch_cfg);
    _panel.setTouch(&_touch);

    setPanel(&_panel);
  }
} display;

画像ファイルの準備

表示する画像ファイルとして以下のものを用意しました。ディスプレイサイズに合わせて、画像サイズを240ドット x 240ドットにします。また、今回は PNG 形式の画像を取り扱うことにします。

sample.png

イナバちゃんログに掲出されていたコードは SPIFFS から bmp ファイルを読むように記述されていましたが、XIAO RP2040 では LittleFS を使うことが推奨されています。ファイルシステムのみを変えれば良いかなと思ったのですが、どうも手元の Arduino IDE にインストールした LovyanGFX (ver.1.1.12) は LittleFS に対応していないようで、ビルド時にエラーが出ます。そこで、画像ファイルのバイナリをヘッダファイルに埋め込む形にして画像を扱えるようにしました。

コードの変更点は画像ファイルのヘッダファイルをインクルードするようにしたことと、drawBmpFile(...) を drawPng(...) に変更しただけです。

また、画像ファイルは Ubuntu Linux で使える xxd コマンドを利用して、ヘッダファイルに変換しました。以下のようにすると変換できます。

$ xxd -i sample.png > sample.h

出来上がった sample.h の冒頭宣言部分、型を const uint8_t にして、PROGMEM 修飾子を手作業で追加します。

const uint8_t sample_png[] PROGMEM = {

... (snip)

};

画像ファイルをヘッダファイルに変換するウェブサービスもありますので、Windows ユーザはそちらを利用されると良いでしょう。

実行

Arduino IDE から XIAO RP2040 にコードを書き込んで実行すると、以下のように動作します。

sample.gif

画像を回転させると黒文字が白くなってしまう現象は直せていません。どなたか直し方をご存知でしたら教えてください。

付録

sample.ino
#include <math.h>
//#include <Arduino.h>
#define LGFX_USE_V1
//#include <SPIFFS.h>
#include <LovyanGFX.hpp>
#include "sample.h"

namespace {

struct Touch_XiaoRound : public lgfx::v1::ITouch {
  Touch_XiaoRound() {
    _cfg.x_min = _cfg.y_min = 0;
    _cfg.x_max = _cfg.y_max = 239;
    _cfg.i2c_addr = 0x2e;
  }
  bool init() override {
    if (isSPI()) {
      return false;
    }
    if (_cfg.pin_int >= 0) {
      lgfx::pinMode(_cfg.pin_int, lgfx::v1::pin_mode_t::input_pullup);
    }
    return lgfx::i2c::init(_cfg.i2c_port, _cfg.pin_sda, _cfg.pin_scl).has_value();
  }
  void wakeup() override {}
  void sleep() override {}

  uint_fast8_t getTouchRaw(lgfx::v1::touch_point_t *tp, uint_fast8_t count) override {
    tp[0].size = 0;
    tp[0].id = 0;
    if (_cfg.pin_int < 0) {
      return 0;
    }
    //FIXME:
    if ((bool)lgfx::gpio_in(_cfg.pin_int)) {
      ::delay(10);
      if ((bool)lgfx::gpio_in(_cfg.pin_int)) {
        return 0;
      }
    }
    uint8_t buf[5];
    if (!lgfx::i2c::transactionRead(_cfg.i2c_port, _cfg.i2c_addr, buf, 5, _cfg.freq).has_value()) {
      return 0;
    }
    if (buf[0] != 1) {
      return 0;
    }
    tp[0].x = buf[2];
    tp[0].y = buf[4];
    tp[0].size = 1;
    return 1;
  }
};

class XiaoRoundDisplay : public lgfx::LGFX_Device {
  lgfx::Panel_GC9A01 _panel;
  lgfx::Bus_SPI _bus;
  lgfx::Light_PWM _light;
  Touch_XiaoRound _touch;

 public:
  XiaoRoundDisplay() {
    auto bus_cfg = _bus.config();
    // bus_cfg.spi_host = SPI3_HOST; // for XIAO ESP32C3/S3
    bus_cfg.spi_host = 0; // for XIAO RP2040    
    bus_cfg.spi_mode = 0;
    bus_cfg.freq_write = 40000000;
    bus_cfg.freq_read  = 20000000;
    // bus_cfg.spi_3wire  = true; // spi_3wire is not a member of.
    // bus_cfg.use_lock   = true; // use_lock is not a member of.
    // bus_cfg.dma_channel = 0; // use_lock is not a member of.
    bus_cfg.pin_sclk = D8; // for XIAO RP2040
    bus_cfg.pin_mosi = D10; // for XIAO RP2040
    bus_cfg.pin_miso = D9; // for XIAO RP2040
    bus_cfg.pin_dc   = D3; // for XIAO RP2040
    _bus.config(bus_cfg);
    _panel.setBus(&_bus);

    auto panel_cfg = _panel.config();
    panel_cfg.pin_cs = D1; // for XIAO RP2040
    panel_cfg.pin_rst = -1;
    panel_cfg.pin_busy = -1;
    panel_cfg.memory_width = 240;
    panel_cfg.memory_height = 240;
    panel_cfg.panel_width = 240;
    panel_cfg.panel_height = 240;
    panel_cfg.offset_x = 0;
    panel_cfg.offset_y = 0;
    panel_cfg.offset_rotation = 0;
    panel_cfg.dummy_read_pixel = 8;
    panel_cfg.dummy_read_bits  = 1;
    panel_cfg.readable = false;
    panel_cfg.invert = true;
    panel_cfg.rgb_order = false;
    panel_cfg.dlen_16bit = false;
    panel_cfg.bus_shared =  true;
    _panel.config(panel_cfg);

    auto light_cfg = _light.config();
    light_cfg.pin_bl = D6; // for XIAO RP2040
    light_cfg.invert = false;
    light_cfg.freq = 44100;
    light_cfg.pwm_channel = 7;
    _light.config(light_cfg);
    _panel.setLight(&_light);

    auto touch_cfg = _touch.config(); 
    touch_cfg.pin_int = D7; // for XIAO RP2040

    touch_cfg.i2c_port = 1; // for XIAO RP2040
    touch_cfg.pin_sda  = D4; // for XIAO RP2040
    touch_cfg.pin_scl  = D5; // for XIAO RP2040
    touch_cfg.freq = 400000;

    _touch.config(touch_cfg);
    _panel.setTouch(&_touch);

    setPanel(&_panel);
  }
} display;

LGFX_Sprite record(&display);
float angle = -1.f;

void draw(float curr) {
  if (curr == angle) {
   return;
  }
  curr = ::fmod(curr, 360.f);
  if (curr < 0.f) {
    curr += 360.f;
  } else if (curr >= 360.f) {
    curr -= 360.f;
  }

  angle = curr;
  display.startWrite();
  record.pushRotateZoom(
    record.width() / 2, record.height() / 2, angle, 1.f, 1.f, TFT_BLACK);
  display.endWrite();
  display.waitDisplay();
}

float calcAngle(float x1, float y1, float x2, float y2) {
  return ::atan2(x1 * y2 - y1 * x2, x1 * x2 + y1 * y2) * 180.f / PI;
}

}  // namespace

void setup() {
  display.init();
  record.createSprite(240, 240);
  // need sample.png(240x240 pixels) on sample.h converted by 'xxd -i' from sample.png
  record.drawPng( sample_png, sample_png_len, 0, 0);

  draw(0.f);
}

void loop() {
  static bool hold = false;
  static int32_t _lastx, _lasty;

  int32_t x, y;
  if (display.getTouch(&x, &y)) {
    x -= display.width() / 2;
    y -= display.height() / 2;
    if (hold) {
      auto delta = calcAngle(_lastx, _lasty, x, y);
      if (!::isnan(delta)) {
        ::draw(angle + delta);
      }
    } else {
      hold = true;
    }
    _lastx = x;
    _lasty = y;
  } else if (hold) {
    hold = false;
  }
}
sample.h
const uint8_t sample_png[] PROGMEM = {
  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0,
  0x08, 0x03, 0x00, 0x00, 0x00, 0x09, 0x8b, 0x19, 0xa0, 0x00, 0x00, 0x00,
  0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61,
  0x05, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a,
  0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80,
  0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a,
  0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x02,
  0xca, 0x50, 0x4c, 0x54, 0x45, 0xff, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfc,
  0x00, 0x00, 0xfd, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x4e,
  0x00, 0x00, 0xb9, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x24, 0x00, 0x00, 0x73, 0x00, 0x00, 0xc2, 0x00, 0x00, 0xb8,
  0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05,
  0x00, 0x00, 0x30, 0x00, 0x00, 0x88, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x65,
  0x00, 0x00, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x47, 0x00, 0x00, 0x95,
  0x00, 0x00, 0xe7, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0f,
  0x00, 0x00, 0x58, 0x00, 0x00, 0xae, 0x00, 0x00, 0xea, 0x00, 0x00, 0xdc,
  0x00, 0x00, 0x9b, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x22,
  0x00, 0x00, 0x66, 0x00, 0x00, 0xc1, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x80,
  0x00, 0x00, 0x36, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x81, 0x00, 0x00, 0xcc,
  0x00, 0x00, 0xf6, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x20,
  0x00, 0x00, 0x3b, 0x00, 0x00, 0x92, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf4,
  0x00, 0x00, 0xad, 0x00, 0x00, 0x60, 0x00, 0x00, 0x13, 0x00, 0x00, 0x0e,
  0x00, 0x00, 0x54, 0x00, 0x00, 0xa1, 0x00, 0x00, 0xec, 0x00, 0x00, 0xe8,
  0x00, 0x00, 0x9f, 0x00, 0x00, 0x46, 0x00, 0x00, 0x18, 0x00, 0x00, 0x61,
  0x00, 0x00, 0xba, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x38,
  0x00, 0x00, 0x2b, 0x00, 0x00, 0x74, 0x00, 0x00, 0xca, 0x00, 0x00, 0xcd,
  0x00, 0x00, 0x72, 0x00, 0x00, 0x34, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x16,
  0x00, 0x00, 0x10, 0x00, 0x00, 0x48, 0x00, 0x00, 0x9c, 0x00, 0x00, 0xef,
  0x00, 0x00, 0x52, 0x00, 0x00, 0x11, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x08,
  0x00, 0x00, 0x23, 0x00, 0x00, 0x6c, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x7f,
  0x00, 0x00, 0x82, 0x00, 0x00, 0xd2, 0x00, 0x00, 0xf5, 0x00, 0x00, 0xc3,
  0x00, 0x00, 0x68, 0x00, 0x00, 0x21, 0x00, 0x00, 0x09, 0x00, 0x00, 0x3e,
  0x00, 0x00, 0x9a, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x14,
  0x00, 0x00, 0x55, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x97, 0x00, 0x00, 0x45,
  0x00, 0x00, 0x0c, 0x00, 0x00, 0x6a, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x89,
  0x00, 0x00, 0x2e, 0x00, 0x00, 0x77, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x70,
  0x00, 0x00, 0x3d, 0x00, 0x00, 0x91, 0x00, 0x00, 0xda, 0x00, 0x00, 0xb7,
  0x00, 0x00, 0x5c, 0x00, 0x00, 0x4a, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x9d,
  0x00, 0x00, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x19, 0x00, 0x00, 0xc6,
  0x00, 0x00, 0x8a, 0x00, 0x00, 0x35, 0x00, 0x00, 0x04, 0x00, 0x00, 0x17,
  0x00, 0x00, 0xe6, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x56, 0x00, 0x00, 0x49,
  0x00, 0x00, 0x44, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x0d, 0x00, 0x00, 0xc8,
  0x00, 0x00, 0xa3, 0x00, 0x00, 0x42, 0x00, 0x00, 0x8c, 0x00, 0x00, 0xb3,
  0x00, 0x00, 0x59, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x86, 0x00, 0x00, 0xd3,
  0x00, 0x00, 0x1f, 0x00, 0x00, 0x79, 0x00, 0x00, 0x25, 0x00, 0x00, 0xf3,
  0x00, 0x00, 0x7e, 0x00, 0x00, 0x63, 0x00, 0x00, 0xaf, 0x00, 0x00, 0xed,
  0x00, 0x00, 0xd7, 0x00, 0x00, 0x39, 0x00, 0x00, 0x15, 0x00, 0x00, 0x98,
  0x00, 0x00, 0x57, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x83,
  0x00, 0x00, 0xfa, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x2a,
  0x00, 0x00, 0x76, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x78, 0x00, 0x00, 0x27,
  0x00, 0x00, 0xbf, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x4f,
  0x00, 0x00, 0xa7, 0x00, 0x00, 0x87, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x5d,
  0x00, 0x00, 0x1d, 0x00, 0x00, 0x2d, 0x00, 0x00, 0xcf, 0x00, 0x00, 0xc0,
  0x00, 0x00, 0x62, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x5e, 0x00, 0x00, 0xab,
  0x00, 0x00, 0x4d, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x33, 0x00, 0x00, 0x41,
  0x00, 0x00, 0x99, 0x00, 0x00, 0xdb, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x94,
  0x00, 0x00, 0x84, 0x00, 0x00, 0x8f, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xa9,
  0x00, 0x00, 0xa2, 0x00, 0x00, 0x5a, 0x00, 0x00, 0xe1, 0x00, 0x00, 0xd0,
  0x00, 0x00, 0xb6, 0x00, 0x00, 0xbe, 0x00, 0x00, 0xde, 0x00, 0x00, 0x3a,
  0x00, 0x00, 0x64, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x75, 0x00, 0x00, 0x12,
  0x00, 0x00, 0x1e, 0x00, 0x00, 0xb0, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x7c,
  0x00, 0x00, 0x7a, 0x00, 0x00, 0xee, 0x00, 0x00, 0xd6, 0x00, 0x00, 0xce,
  0x00, 0x00, 0x1c, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x96, 0x00, 0x00, 0xcb,
  0x00, 0x00, 0xdf, 0x00, 0x00, 0x93, 0x00, 0x00, 0x4b, 0x00, 0x00, 0xb4,
  0x00, 0x00, 0x43, 0x00, 0x00, 0x51, 0x00, 0x00, 0x31, 0x00, 0x00, 0x53,
  0x00, 0x00, 0xeb, 0x00, 0x00, 0xc4, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x32,
  0x00, 0x00, 0x5f, 0x00, 0x00, 0x85, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc2,
  0x5d, 0x11, 0xaf, 0x00, 0x00, 0x00, 0x01, 0x62, 0x4b, 0x47, 0x44, 0xed,
  0x56, 0xbe, 0x83, 0x8d, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
  0x07, 0xe7, 0x0a, 0x0b, 0x02, 0x34, 0x29, 0xa0, 0x38, 0xa1, 0xcf, 0x00,
  0x00, 0x0c, 0xe1, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9c, 0x89,
  0x7f, 0x4d, 0x57, 0x1e, 0xc0, 0xcf, 0x5d, 0xda, 0xc8, 0xb1, 0xbc, 0x7b,
  0x5f, 0x24, 0x21, 0x89, 0xca, 0x62, 0x49, 0x10, 0xb1, 0x05, 0x4d, 0x09,
  0xb1, 0x24, 0x28, 0xa2, 0x49, 0xc4, 0x12, 0x41, 0xa8, 0x20, 0xb1, 0x45,
  0x45, 0x45, 0x51, 0xaf, 0x82, 0x86, 0x20, 0x25, 0x96, 0x06, 0xb5, 0x3c,
  0xd5, 0x2a, 0xb5, 0x46, 0x55, 0x69, 0xd0, 0xa9, 0xe9, 0x14, 0x55, 0x33,
  0x83, 0x99, 0x32, 0x33, 0x9d, 0x7d, 0xff, 0x23, 0xe6, 0x2c, 0xf7, 0xde,
  0x77, 0x65, 0x7b, 0x2f, 0x72, 0xdf, 0x32, 0xfd, 0xfc, 0xbe, 0x7c, 0x44,
  0x96, 0x73, 0xcf, 0xef, 0x77, 0xce, 0xef, 0xfc, 0x96, 0x73, 0xce, 0x0d,
  0x42, 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, 0x10,
  0xe0, 0x08, 0x02, 0x12, 0xfc, 0x2d, 0x43, 0x93, 0xb2, 0x51, 0xe9, 0x2c,
  0x7f, 0xa4, 0x28, 0x4a, 0x01, 0xa9, 0x33, 0x11, 0x4a, 0x12, 0x45, 0x8b,
  0x45, 0x13, 0xf8, 0x04, 0xcb, 0x56, 0x3f, 0xd7, 0x12, 0xc9, 0x44, 0x59,
  0x97, 0xcf, 0xc2, 0xc7, 0x4a, 0xe8, 0x85, 0x17, 0x83, 0xda, 0x90, 0xc7,
  0x5a, 0x3e, 0x96, 0xad, 0xd5, 0x56, 0x24, 0xaa, 0xb6, 0x09, 0x7a, 0xf1,
  0x05, 0x24, 0x59, 0x28, 0x16, 0x79, 0xa6, 0x18, 0x8c, 0x71, 0xdb, 0x76,
  0xed, 0x45, 0x84, 0x24, 0x59, 0xb0, 0x7c, 0xc5, 0x3c, 0xa7, 0x54, 0x82,
  0x2c, 0x21, 0x24, 0xb6, 0x6f, 0xd7, 0x16, 0xe3, 0x60, 0xd1, 0xd2, 0x75,
  0x2c, 0xa2, 0x0e, 0x36, 0x45, 0xc5, 0xd8, 0x1e, 0xd2, 0x31, 0x94, 0x18,
  0x90, 0x44, 0x3b, 0xf2, 0xab, 0xd2, 0x02, 0x1d, 0x78, 0x32, 0xa7, 0x72,
  0x68, 0xc7, 0x10, 0x3b, 0xc6, 0xaa, 0x62, 0xeb, 0x40, 0x84, 0xb4, 0xee,
  0xf1, 0x22, 0x0a, 0xc3, 0xe1, 0x58, 0xb5, 0x61, 0x8c, 0x3b, 0x75, 0x8e,
  0x88, 0x24, 0x83, 0x29, 0x8b, 0xfe, 0x73, 0xdb, 0x74, 0xc5, 0x8a, 0xc4,
  0xce, 0x50, 0x64, 0x44, 0xe7, 0x4e, 0x44, 0x24, 0x9b, 0x4a, 0x84, 0x0b,
  0x43, 0xa2, 0x75, 0xe2, 0x48, 0x28, 0xaa, 0x0b, 0x56, 0x89, 0xc2, 0x8a,
  0x62, 0x53, 0x30, 0x7e, 0xa9, 0x6b, 0x74, 0x8c, 0xff, 0x5c, 0x98, 0xee,
  0xa6, 0x62, 0xa2, 0xbb, 0xbe, 0x84, 0xb1, 0x42, 0x65, 0x22, 0xa2, 0xe1,
  0x2e, 0x51, 0x44, 0x4c, 0xeb, 0xfa, 0x90, 0x62, 0xe3, 0xba, 0x75, 0x27,
  0x8f, 0x57, 0xb9, 0xca, 0xb8, 0x47, 0xcf, 0xf8, 0x04, 0x1a, 0x0e, 0x7c,
  0x1d, 0xa9, 0x04, 0xad, 0xd3, 0x84, 0xf8, 0x9e, 0x3d, 0x30, 0x57, 0x57,
  0x25, 0xf2, 0x74, 0xef, 0x16, 0x17, 0x2b, 0x59, 0x1c, 0x98, 0x04, 0x14,
  0xda, 0xab, 0xb7, 0xca, 0xfa, 0xa0, 0x36, 0x84, 0x71, 0x9f, 0xc4, 0xbe,
  0xa4, 0x67, 0xe2, 0xc2, 0x7c, 0xa7, 0x32, 0xe9, 0x8a, 0x78, 0x0f, 0x41,
  0xea, 0x9b, 0xd8, 0x87, 0x08, 0x40, 0x56, 0x18, 0x1b, 0x7d, 0xb5, 0x77,
  0xaf, 0x50, 0x8b, 0x33, 0x0f, 0x66, 0x45, 0xe4, 0x91, 0x49, 0xfd, 0xfa,
  0x0f, 0x50, 0xd9, 0x3c, 0xab, 0x54, 0xe5, 0x4e, 0x03, 0x07, 0x25, 0x13,
  0x57, 0xe9, 0x9b, 0x79, 0xd6, 0xe6, 0x56, 0x10, 0x92, 0x07, 0x0d, 0xa4,
  0x0b, 0x57, 0x55, 0xd9, 0xdc, 0xaa, 0x03, 0xfa, 0xf7, 0x4b, 0xe2, 0x3e,
  0xc5, 0x62, 0x19, 0x88, 0x62, 0x54, 0xe7, 0xc1, 0x43, 0x86, 0xbe, 0xcc,
  0xfd, 0x84, 0x42, 0x5d, 0x58, 0xca, 0x2b, 0xc3, 0x86, 0xfb, 0xc0, 0x85,
  0x19, 0x6e, 0x6a, 0xf8, 0xb0, 0x57, 0x52, 0x68, 0xf7, 0x0a, 0xf7, 0xa0,
  0x2f, 0x0f, 0x1d, 0x32, 0x98, 0x76, 0x2f, 0x79, 0x23, 0x50, 0x6a, 0x29,
  0x9c, 0x20, 0xa4, 0x8e, 0x18, 0x99, 0xa2, 0x0d, 0x31, 0x9d, 0xe7, 0xb4,
  0x51, 0xa3, 0xbd, 0x9c, 0x91, 0x18, 0xf9, 0xc5, 0xe8, 0x51, 0x69, 0xa6,
  0x8e, 0x53, 0x46, 0x8e, 0x48, 0x15, 0x04, 0xef, 0xa6, 0xbc, 0x74, 0x11,
  0xd1, 0x08, 0x3f, 0x66, 0x6c, 0xba, 0x69, 0x11, 0xe1, 0x8c, 0x71, 0xe3,
  0x69, 0x6e, 0xe2, 0x9d, 0x8c, 0x84, 0xe6, 0x17, 0xb4, 0xcf, 0xf1, 0xe3,
  0x32, 0xb0, 0xc9, 0x85, 0xa4, 0x8f, 0x1d, 0xc3, 0xfb, 0xf4, 0xf2, 0x6a,
  0xd2, 0x53, 0x75, 0x79, 0xc2, 0xab, 0x19, 0xaa, 0xcb, 0x4d, 0xaa, 0x13,
  0x27, 0xd1, 0xfe, 0x69, 0x46, 0x62, 0xa5, 0xd2, 0xc6, 0x23, 0xc7, 0x4c,
  0x9a, 0xa8, 0xba, 0x82, 0x84, 0x9a, 0xf1, 0xea, 0x04, 0xd9, 0x77, 0xe5,
  0x8c, 0xee, 0xc2, 0xa2, 0x3a, 0x84, 0x4d, 0xd6, 0x2c, 0x8c, 0xae, 0xa7,
  0xcc, 0x29, 0xaf, 0xc5, 0x20, 0x2b, 0x2d, 0x4c, 0x5f, 0x43, 0x28, 0xe6,
  0xb5, 0x29, 0x99, 0xcc, 0x6f, 0x70, 0x53, 0x9e, 0x1c, 0xd6, 0x21, 0xca,
  0x2b, 0x6e, 0xaa, 0x59, 0x51, 0xb8, 0x0b, 0xcb, 0x1a, 0x96, 0x9d, 0x69,
  0x72, 0x61, 0x39, 0x43, 0xa3, 0xb3, 0x34, 0x17, 0xd6, 0x6a, 0x51, 0x04,
  0xcd, 0x4d, 0x65, 0x45, 0x0f, 0xcd, 0x31, 0xb9, 0xa9, 0xcc, 0xec, 0x61,
  0x59, 0xba, 0x9b, 0xf2, 0x6d, 0x06, 0x20, 0xf0, 0x64, 0x56, 0x9c, 0x1a,
  0x31, 0x30, 0x97, 0x1a, 0x9b, 0xca, 0x97, 0xf3, 0xb4, 0xe9, 0x33, 0x92,
  0x5a, 0x5f, 0xa0, 0xea, 0xe5, 0x77, 0xd2, 0x8c, 0xe9, 0xd3, 0xf8, 0xc2,
  0x55, 0xe9, 0xc2, 0xc9, 0x1d, 0x18, 0x31, 0x55, 0xe4, 0xa9, 0xbc, 0x5f,
  0xea, 0x17, 0xee, 0x4e, 0x90, 0x30, 0x61, 0x66, 0x08, 0x77, 0x61, 0x98,
  0xe9, 0x3c, 0x31, 0x6f, 0x16, 0x6a, 0x95, 0x0b, 0xd3, 0xdc, 0x14, 0x9a,
  0x95, 0x37, 0x91, 0x69, 0x8b, 0xb9, 0x9b, 0x0a, 0x99, 0x39, 0x81, 0x3c,
  0xd0, 0x4b, 0xae, 0xd1, 0x53, 0xd1, 0xb4, 0x99, 0xc8, 0x9f, 0x3d, 0x67,
  0xae, 0xa2, 0xcd, 0x04, 0x11, 0xad, 0x60, 0xde, 0xfc, 0xe4, 0xe7, 0x74,
  0x61, 0x46, 0xb3, 0xe4, 0xf9, 0xf3, 0x0a, 0xb8, 0x87, 0xa0, 0xa3, 0xa8,
  0xcc, 0x9d, 0x33, 0x3b, 0xdf, 0x1b, 0x5b, 0x1b, 0xcf, 0xa7, 0x33, 0xcd,
  0xe5, 0xb3, 0x5e, 0x5f, 0x60, 0x4e, 0x09, 0x0a, 0x17, 0x2e, 0x8a, 0x62,
  0xc6, 0xd7, 0x92, 0xb5, 0xc6, 0x7d, 0x03, 0x19, 0xc0, 0xa8, 0x45, 0x0b,
  0x0b, 0xcd, 0xe9, 0xcd, 0x82, 0xd7, 0xb3, 0x02, 0x68, 0xc3, 0xc5, 0xf0,
  0xa6, 0x91, 0x8b, 0x8b, 0x8a, 0x4d, 0xde, 0x34, 0x6d, 0xc9, 0xd2, 0x16,
  0x79, 0x53, 0xc3, 0xfb, 0x2f, 0x5d, 0x92, 0x66, 0xf2, 0xfe, 0xc5, 0x45,
  0x8b, 0x23, 0x2d, 0xf5, 0xfe, 0x96, 0xe8, 0xac, 0xb9, 0x30, 0x79, 0xd6,
  0xb2, 0x10, 0x95, 0xc9, 0xca, 0x0d, 0x71, 0xf9, 0x8a, 0x12, 0xa2, 0xae,
  0x27, 0xb2, 0xf2, 0x51, 0x23, 0x2a, 0x97, 0xac, 0x58, 0xae, 0x68, 0xf1,
  0x9d, 0x3e, 0x29, 0x64, 0xd9, 0x2c, 0xd9, 0x8f, 0x6e, 0xaa, 0x79, 0xa5,
  0x25, 0xea, 0xc2, 0xa4, 0x7e, 0x2b, 0x83, 0x4d, 0x2e, 0x4c, 0x79, 0x63,
  0x55, 0xa9, 0x87, 0xb2, 0x92, 0x9f, 0x2a, 0x5d, 0xf5, 0x86, 0x62, 0x72,
  0x53, 0xc1, 0x2b, 0xfb, 0xd1, 0x3d, 0x1c, 0xef, 0xa4, 0xca, 0x56, 0xa8,
  0xac, 0xe7, 0xbc, 0xab, 0xdf, 0x9c, 0xac, 0xb8, 0x72, 0xde, 0x9c, 0x35,
  0x65, 0xa9, 0x6e, 0x8b, 0x55, 0x62, 0x22, 0xa9, 0x65, 0x6b, 0x72, 0x5c,
  0xa9, 0xb2, 0x32, 0xf9, 0xcd, 0xd5, 0x01, 0xb7, 0x6b, 0xd8, 0x88, 0xdc,
  0x82, 0xb6, 0x1d, 0xb1, 0xf6, 0xad, 0x75, 0x54, 0x78, 0x9e, 0x70, 0xe3,
  0xf5, 0x1b, 0xdc, 0xed, 0x38, 0x89, 0x68, 0xc3, 0x7a, 0xcc, 0xd3, 0x64,
  0x3a, 0x48, 0xeb, 0xde, 0x5a, 0xab, 0x6d, 0xaa, 0x04, 0xe8, 0xe4, 0x9a,
  0x54, 0xd6, 0xf6, 0x24, 0xc4, 0xa9, 0x6f, 0x6f, 0x24, 0x19, 0x09, 0x0d,
  0xa4, 0x0e, 0xfc, 0xce, 0x26, 0x77, 0xfb, 0x2f, 0x12, 0xda, 0xf4, 0x0e,
  0x76, 0x28, 0xac, 0x41, 0xee, 0xc6, 0xb7, 0x59, 0x7e, 0x11, 0x50, 0x6e,
  0xaa, 0x59, 0x9d, 0x89, 0x7d, 0x96, 0x13, 0x7f, 0x2b, 0x8d, 0xdf, 0x6c,
  0xc7, 0x6c, 0x9e, 0xb7, 0xb8, 0xdd, 0x35, 0x16, 0x24, 0xb4, 0x85, 0xcd,
  0x2d, 0xb6, 0x6f, 0x1e, 0x4f, 0xd6, 0xac, 0x5c, 0x1e, 0x80, 0x6e, 0xaa,
  0x69, 0x75, 0x59, 0xd2, 0x59, 0x32, 0x69, 0x6b, 0xa1, 0xca, 0x15, 0xee,
  0xe2, 0x56, 0x78, 0xf2, 0xfd, 0x2e, 0x5c, 0x61, 0xb5, 0x70, 0xeb, 0xa4,
  0x12, 0x7f, 0x26, 0x90, 0x2d, 0xd3, 0x56, 0xdf, 0x25, 0x78, 0x37, 0xa2,
  0xa8, 0x02, 0x73, 0x8b, 0x26, 0xeb, 0xb2, 0x60, 0x9b, 0xfb, 0x35, 0xbc,
  0xad, 0x80, 0x6e, 0x8b, 0xf2, 0x36, 0x15, 0x45, 0x11, 0xef, 0x7a, 0xbb,
  0xb6, 0xb7, 0x48, 0x5d, 0x96, 0x04, 0x6f, 0xda, 0xbe, 0xb0, 0xd8, 0x94,
  0x75, 0xe5, 0x56, 0xee, 0x88, 0x74, 0xbf, 0x86, 0x23, 0x77, 0x54, 0xe6,
  0x9a, 0xb2, 0xab, 0xe2, 0x85, 0xdb, 0x37, 0x21, 0x5f, 0x54, 0xf8, 0xcf,
  0xad, 0xac, 0xa0, 0xcd, 0x6d, 0xd6, 0xce, 0x5d, 0x55, 0xd8, 0x95, 0x57,
  0x87, 0x87, 0xbc, 0xb7, 0xbb, 0xdc, 0x13, 0x99, 0x05, 0x54, 0xbe, 0xfb,
  0xbd, 0x90, 0x70, 0x57, 0xfe, 0x8c, 0xab, 0x76, 0xed, 0xcc, 0xd2, 0xe6,
  0x39, 0xd0, 0x6c, 0xdb, 0x28, 0x90, 0x13, 0x56, 0x4f, 0xdf, 0x63, 0xae,
  0x9c, 0x32, 0xaa, 0xfb, 0xb1, 0x44, 0xc9, 0x93, 0x4c, 0x8b, 0xa5, 0x6a,
  0xfd, 0xaa, 0x33, 0xcc, 0x15, 0xd2, 0x9e, 0xe9, 0xab, 0x13, 0xfc, 0x52,
  0xfe, 0xba, 0x13, 0x96, 0x25, 0x1c, 0xf9, 0xdb, 0x56, 0xec, 0xb5, 0xb1,
  0xda, 0x98, 0x2d, 0x46, 0xa5, 0xc7, 0x9c, 0xf8, 0x7d, 0x7a, 0xea, 0xe0,
  0x56, 0x5a, 0x41, 0x7f, 0xca, 0xbe, 0xf8, 0x39, 0x3d, 0x58, 0xba, 0xa5,
  0xb2, 0x1a, 0xd8, 0xb6, 0x77, 0xc5, 0xb6, 0xfc, 0x00, 0x4a, 0x40, 0xb4,
  0x02, 0x87, 0x7c, 0x2c, 0xd9, 0xdf, 0xdb, 0x61, 0x2e, 0x97, 0x0e, 0xbc,
  0x5f, 0xd3, 0xd2, 0x0a, 0x47, 0xaf, 0xbc, 0x6a, 0xde, 0x3f, 0x60, 0x2e,
  0x96, 0x1c, 0xbd, 0xf7, 0x97, 0x20, 0xee, 0xfb, 0xfd, 0xad, 0xb4, 0xa0,
  0x1f, 0x3d, 0x1c, 0x1c, 0x74, 0x28, 0x5c, 0xdb, 0x64, 0xa3, 0x96, 0x78,
  0x38, 0xbb, 0xac, 0xe6, 0xb9, 0x2a, 0x1c, 0xa3, 0xf2, 0xaa, 0x29, 0xcb,
  0x3e, 0xcc, 0xd6, 0x06, 0xdf, 0x24, 0x0c, 0x3f, 0x34, 0xe8, 0xa0, 0x7e,
  0xf0, 0xe0, 0x37, 0x95, 0x5d, 0x65, 0xe1, 0x07, 0x9d, 0x33, 0x4d, 0xc2,
  0xad, 0x1b, 0xb9, 0x76, 0x2a, 0x7a, 0xfe, 0x1d, 0x4c, 0x7d, 0x0b, 0x00,
  0x4d, 0x5d, 0x3b, 0x72, 0x9d, 0x69, 0x10, 0x33, 0x3b, 0x7f, 0xe0, 0xd7,
  0x32, 0x51, 0x0f, 0x41, 0x91, 0x65, 0x47, 0x2a, 0xcc, 0x21, 0xa8, 0xdb,
  0xb2, 0x58, 0x1a, 0x4d, 0x5a, 0x97, 0x04, 0x33, 0xdf, 0x4c, 0x1e, 0x13,
  0xbb, 0xac, 0x9b, 0x39, 0x54, 0x55, 0x1c, 0x29, 0x8b, 0xf4, 0x4b, 0xa8,
  0x32, 0xe6, 0x36, 0xeb, 0xe8, 0x82, 0x63, 0xa6, 0x4d, 0xb6, 0xf0, 0xe5,
  0xc7, 0x4b, 0x9c, 0xd6, 0xec, 0xa0, 0xea, 0xbb, 0x01, 0xce, 0x92, 0xe3,
  0xcb, 0xc3, 0x4d, 0x9b, 0x84, 0xc7, 0x16, 0x1c, 0xcd, 0xf2, 0xf9, 0x3c,
  0x6b, 0x21, 0xe8, 0x44, 0xd0, 0x87, 0x73, 0xf5, 0x10, 0x44, 0x6d, 0xee,
  0xe4, 0x47, 0xb3, 0xe9, 0xc5, 0x00, 0xeb, 0xaa, 0x57, 0xd6, 0x0f, 0xc9,
  0x49, 0x66, 0x7f, 0x74, 0xd2, 0xdc, 0xcf, 0xdc, 0x0f, 0x83, 0x4e, 0x78,
  0xed, 0x40, 0xa9, 0xa1, 0x10, 0x7a, 0x08, 0xfa, 0xf8, 0xd4, 0x27, 0xa6,
  0x10, 0xa4, 0x0e, 0x08, 0x3b, 0xbd, 0xcf, 0xfa, 0xe0, 0x61, 0x84, 0xaa,
  0xd3, 0x61, 0xec, 0xd8, 0x52, 0x0f, 0x55, 0x9f, 0x9c, 0xfa, 0xd8, 0x17,
  0xa1, 0x4a, 0xd0, 0x76, 0x35, 0x04, 0x14, 0x9a, 0x98, 0xae, 0x9a, 0x0f,
  0xf1, 0x46, 0x45, 0xb7, 0x38, 0x04, 0xb5, 0x44, 0x67, 0x16, 0xaa, 0xa2,
  0x47, 0x99, 0x8f, 0x2d, 0xd5, 0xf4, 0xc4, 0x50, 0xb6, 0x9c, 0xbd, 0x17,
  0xaa, 0xf4, 0x2a, 0x48, 0x3a, 0x13, 0xf1, 0xa9, 0xdd, 0xe4, 0x3d, 0x0b,
  0xcf, 0x6e, 0x1f, 0xee, 0xd5, 0x55, 0x65, 0x78, 0x8c, 0xe1, 0xdb, 0xcf,
  0x16, 0x9a, 0xa2, 0x81, 0xfd, 0xd3, 0x88, 0x33, 0x92, 0xb7, 0xaa, 0x2a,
  0xa3, 0xd3, 0xd4, 0xb8, 0x2d, 0x39, 0x7a, 0xa7, 0xe4, 0x63, 0xf7, 0xa2,
  0xb8, 0x58, 0x7e, 0xa3, 0xc6, 0xbb, 0x2e, 0x84, 0x87, 0x2a, 0x24, 0xc4,
  0xc6, 0x15, 0x75, 0xa7, 0xdd, 0x6b, 0x83, 0x9d, 0xb3, 0x25, 0x2e, 0xd5,
  0x1b, 0x83, 0xad, 0x87, 0xa0, 0x98, 0x73, 0xbb, 0x52, 0xb8, 0x59, 0x31,
  0x4b, 0x76, 0xcc, 0x3b, 0x5f, 0xaa, 0x87, 0x20, 0xef, 0xdf, 0x00, 0xd0,
  0x43, 0x55, 0xe9, 0xf9, 0x79, 0x0e, 0x93, 0x10, 0x29, 0xbb, 0xce, 0xc5,
  0x78, 0x21, 0x54, 0x11, 0x85, 0x2e, 0x74, 0xb8, 0x78, 0x49, 0x71, 0x85,
  0x20, 0x47, 0x6d, 0xe2, 0xe5, 0x04, 0xdf, 0x1e, 0xe2, 0xe9, 0xa1, 0x2a,
  0xe1, 0x72, 0x62, 0xad, 0xc3, 0x15, 0xaa, 0x94, 0x4b, 0x17, 0x3b, 0x5c,
  0xb0, 0xd6, 0xaa, 0x89, 0x3f, 0x5a, 0xba, 0xb2, 0xad, 0xb9, 0x0a, 0x0a,
  0x1e, 0xf7, 0x99, 0x53, 0x3f, 0x58, 0xf0, 0x29, 0xda, 0xd1, 0x84, 0xf3,
  0xb3, 0x71, 0xc1, 0xe6, 0xaa, 0xaa, 0xed, 0xca, 0xa5, 0xb2, 0x85, 0xe3,
  0x2e, 0xa1, 0xfc, 0x74, 0xac, 0xea, 0x21, 0x08, 0xef, 0xb9, 0xf2, 0x79,
  0x94, 0xc7, 0x55, 0x90, 0xf5, 0x1a, 0x6b, 0xa1, 0x2a, 0xea, 0xf3, 0x2b,
  0x7b, 0xb0, 0x1e, 0xaa, 0x54, 0x9c, 0x9e, 0x6f, 0xe5, 0x3d, 0x2d, 0x19,
  0x55, 0x63, 0x3b, 0x5f, 0x33, 0x39, 0x57, 0xbf, 0x60, 0x21, 0xc8, 0x9f,
  0x3b, 0x11, 0xd4, 0xa7, 0xb0, 0x50, 0xf5, 0xc5, 0xd5, 0x1c, 0xbe, 0x9c,
  0xed, 0xb8, 0x1a, 0xc9, 0x96, 0xde, 0xb5, 0xdc, 0x46, 0x8f, 0xf2, 0x70,
  0xe1, 0xb5, 0xeb, 0xd6, 0x9e, 0xf2, 0xb7, 0x42, 0x65, 0xed, 0x76, 0xc0,
  0xf5, 0x6b, 0x34, 0x54, 0x79, 0xb0, 0x6b, 0xd6, 0xa2, 0xc7, 0x93, 0x27,
  0x7f, 0x89, 0x0b, 0xea, 0x6e, 0xdc, 0x6c, 0x45, 0x15, 0x64, 0xb9, 0xce,
  0x7a, 0x55, 0x75, 0xf3, 0x46, 0x5d, 0x01, 0xfe, 0x12, 0x59, 0x1a, 0x29,
  0x04, 0x09, 0x95, 0x55, 0x97, 0xb6, 0xee, 0x98, 0xdb, 0x3b, 0x4a, 0xf3,
  0x78, 0x59, 0x5a, 0x5d, 0x66, 0xe9, 0x7d, 0x69, 0xed, 0xa5, 0x02, 0x9f,
  0xde, 0x23, 0xf1, 0x5c, 0x32, 0x1a, 0x82, 0x2d, 0x7f, 0x25, 0x23, 0x30,
  0x36, 0x58, 0x9a, 0x52, 0x59, 0xf0, 0x46, 0xa6, 0x17, 0x98, 0xda, 0xba,
  0x74, 0xf6, 0xb7, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0xfc, 0x04, 0x11, 0x04, 0x5f, 0x1c, 0x30, 0x05, 0x06,
  0x7c, 0x8f, 0x98, 0xd3, 0x82, 0xfd, 0x6a, 0x41, 0x90, 0xa4, 0x00, 0xdd,
  0x26, 0x73, 0x23, 0x37, 0x3f, 0x05, 0xd0, 0x74, 0x97, 0x9c, 0x1e, 0x1c,
  0x37, 0xd1, 0x5d, 0x37, 0xa7, 0xc8, 0x4f, 0x4d, 0x9c, 0x1e, 0x9e, 0x4f,
  0x09, 0xfc, 0x6e, 0x23, 0xbf, 0x87, 0xe8, 0xbf, 0x33, 0x0f, 0xa2, 0x21,
  0xbb, 0x55, 0xb5, 0xfb, 0xd6, 0x57, 0x3f, 0x9b, 0xf9, 0x75, 0xd9, 0xf8,
  0xdb, 0xf4, 0xad, 0x87, 0x66, 0x37, 0x73, 0xf9, 0xd1, 0x10, 0x6d, 0xe9,
  0x4c, 0x6a, 0x93, 0x24, 0xeb, 0x67, 0x45, 0xcd, 0x4e, 0x34, 0xdb, 0x8b,
  0xd5, 0xb7, 0xff, 0x9f, 0xf9, 0xc4, 0xd7, 0xfa, 0x92, 0xbe, 0x25, 0x94,
  0xf4, 0xf3, 0xa1, 0xc1, 0x0e, 0x7e, 0xed, 0x17, 0xaf, 0xbf, 0x36, 0xf6,
  0x36, 0xfb, 0x62, 0x13, 0xf2, 0x30, 0xf3, 0x27, 0x33, 0x14, 0xfb, 0xcd,
  0xb8, 0xae, 0x75, 0x87, 0x42, 0x0e, 0x55, 0xfe, 0x62, 0xc5, 0xb9, 0x6f,
  0xe9, 0xe1, 0x4d, 0xd3, 0x6b, 0x41, 0x3f, 0x18, 0x16, 0x50, 0x9b, 0x3b,
  0xb3, 0xef, 0xde, 0x9b, 0x91, 0x2c, 0xeb, 0x17, 0x33, 0x7d, 0x7f, 0x90,
  0x87, 0x88, 0x20, 0xa9, 0x1d, 0xe9, 0x55, 0x1e, 0x4c, 0xcf, 0xf0, 0xf8,
  0xd9, 0x62, 0xca, 0x95, 0x3b, 0x44, 0xe5, 0xc6, 0xc5, 0x11, 0xd8, 0x77,
  0xbe, 0xfb, 0xfa, 0x7e, 0x01, 0x76, 0xd1, 0xa9, 0x6e, 0xf1, 0xed, 0x26,
  0x5b, 0x68, 0x4d, 0xa4, 0x9b, 0xd7, 0xbf, 0xcf, 0xc8, 0xc9, 0xb5, 0x2b,
  0xb6, 0xf0, 0xe2, 0xaa, 0xa2, 0xbc, 0xd3, 0x17, 0x9a, 0x1b, 0x55, 0xaf,
  0xa9, 0x4b, 0x24, 0x91, 0x6e, 0xcc, 0xa5, 0x2f, 0x35, 0xa8, 0xba, 0xf0,
  0xec, 0x26, 0x42, 0xc5, 0x92, 0x07, 0xa8, 0xd1, 0xc3, 0x45, 0xba, 0x00,
  0xd0, 0xb7, 0x4b, 0xe8, 0x4b, 0xb8, 0xd8, 0xe1, 0xa0, 0x63, 0x64, 0x73,
  0xd0, 0x13, 0x49, 0x5c, 0xf5, 0xcb, 0x07, 0x48, 0x6c, 0x74, 0x2f, 0x9d,
  0x35, 0x91, 0xef, 0x9e, 0xfd, 0x15, 0x36, 0x63, 0xeb, 0xb3, 0xff, 0xb6,
  0x9b, 0xa5, 0xe3, 0x0d, 0x7d, 0x65, 0x54, 0x3a, 0x52, 0x7b, 0x47, 0xdc,
  0x8c, 0xaa, 0xe2, 0x5f, 0x3f, 0x44, 0x0d, 0xd7, 0x25, 0x7d, 0xa1, 0x5b,
  0x70, 0x4e, 0xca, 0x69, 0xd0, 0x84, 0x5a, 0x46, 0x5a, 0x1c, 0xb1, 0xf5,
  0x06, 0xf2, 0xd3, 0x26, 0x12, 0x7a, 0x34, 0x90, 0xbf, 0xef, 0xa6, 0xb5,
  0x52, 0x98, 0x25, 0xa5, 0x3c, 0x8e, 0x41, 0x3e, 0xd6, 0x58, 0x42, 0x3b,
  0xab, 0xb0, 0xea, 0x9a, 0x5c, 0xc5, 0x35, 0xcd, 0xd8, 0xf6, 0x1b, 0x19,
  0xd5, 0x5b, 0x65, 0x6c, 0x84, 0x92, 0xa7, 0x60, 0x76, 0x03, 0xa7, 0xe1,
  0x18, 0xe1, 0xcd, 0x0f, 0x1a, 0x28, 0x40, 0x8d, 0x08, 0xfd, 0xf6, 0x7b,
  0x5b, 0xc3, 0x51, 0xa5, 0x0d, 0xa6, 0x1d, 0x6d, 0xc2, 0x2a, 0xbc, 0xa4,
  0xaf, 0x80, 0xbe, 0xb2, 0x63, 0x9b, 0x6e, 0x63, 0xcc, 0x6b, 0xd9, 0x74,
  0xb9, 0x88, 0xca, 0x5d, 0x7f, 0x20, 0x71, 0xd6, 0xb4, 0xca, 0x98, 0xbe,
  0xf1, 0x03, 0xb0, 0x4b, 0x74, 0x85, 0xdf, 0x32, 0x33, 0x5a, 0xd4, 0xc6,
  0xd6, 0x5b, 0x08, 0xac, 0xc9, 0x93, 0x3e, 0xfc, 0x52, 0x43, 0x03, 0x6c,
  0x58, 0x7d, 0x8c, 0x7c, 0xe8, 0xba, 0x24, 0x94, 0x3a, 0x17, 0xdb, 0x35,
  0xc9, 0xe9, 0x3f, 0xc5, 0x29, 0x76, 0xfd, 0xff, 0xec, 0x4d, 0x16, 0xfb,
  0x71, 0xee, 0x58, 0x8c, 0xb9, 0x12, 0xd1, 0xc3, 0x75, 0xfa, 0x08, 0xb9,
  0x0c, 0xc3, 0xf8, 0xaf, 0x0d, 0xaf, 0x6f, 0x6f, 0xbe, 0xdb, 0xc6, 0x9b,
  0x2c, 0x4a, 0x31, 0x86, 0x48, 0xa5, 0x56, 0x4d, 0xec, 0xd9, 0xf8, 0x5c,
  0xc5, 0xa3, 0x12, 0x7c, 0xe8, 0xb8, 0x24, 0xd4, 0xf7, 0x29, 0x93, 0x9f,
  0x4c, 0x53, 0xc1, 0xd9, 0x55, 0x77, 0xfb, 0x5e, 0xbe, 0x37, 0x62, 0xce,
  0x31, 0x43, 0x63, 0x62, 0xe1, 0x5d, 0x1f, 0xf0, 0x33, 0x47, 0x81, 0x5f,
  0xe0, 0x93, 0xf3, 0xec, 0xfc, 0x45, 0x1d, 0xfe, 0x33, 0x9d, 0x6a, 0xb7,
  0xfe, 0xae, 0xf2, 0x24, 0x7b, 0x47, 0x58, 0x1f, 0xa3, 0xcc, 0x73, 0x2c,
  0xc6, 0x0a, 0x5a, 0x13, 0x32, 0x5a, 0x3b, 0x1c, 0xc6, 0x77, 0x4d, 0xd3,
  0xac, 0xa9, 0xac, 0x38, 0x70, 0x7f, 0x6b, 0x8f, 0x85, 0x9b, 0x83, 0xb8,
  0x13, 0x34, 0xe1, 0x18, 0xfd, 0x95, 0x44, 0x38, 0xa7, 0xdd, 0x77, 0xfc,
  0xfc, 0x58, 0x40, 0x17, 0xe6, 0x9f, 0xc4, 0x9a, 0x9d, 0x12, 0xad, 0x9e,
  0xc6, 0xed, 0x63, 0x89, 0x05, 0xfd, 0x2b, 0x3f, 0x4a, 0xd7, 0xbf, 0x43,
  0x44, 0x1f, 0x30, 0x3d, 0x28, 0x26, 0x9f, 0x8c, 0x41, 0x7e, 0xe4, 0xce,
  0xb0, 0x2a, 0xf6, 0x15, 0x62, 0xd3, 0x64, 0x8c, 0x8e, 0x94, 0xf0, 0x9f,
  0x66, 0x4f, 0x93, 0xda, 0x57, 0x1a, 0x4d, 0xc8, 0x87, 0x3d, 0x53, 0x56,
  0xee, 0x88, 0xfb, 0x7d, 0xaf, 0x8b, 0x13, 0x3b, 0xf1, 0xcf, 0x15, 0xf2,
  0x27, 0x37, 0xd9, 0xc2, 0xab, 0x2c, 0x6e, 0x35, 0x96, 0xd1, 0x1f, 0xd6,
  0x63, 0x07, 0x5e, 0x73, 0x90, 0x08, 0xe7, 0x94, 0x45, 0x51, 0x26, 0x69,
  0x25, 0x6a, 0xf3, 0xd8, 0x61, 0xd8, 0x2d, 0xc6, 0x19, 0x79, 0x77, 0x92,
  0x44, 0x24, 0x95, 0x27, 0x2f, 0xae, 0x53, 0x74, 0xb7, 0x66, 0xc3, 0x85,
  0x63, 0x87, 0xeb, 0xa6, 0x48, 0xef, 0x97, 0x27, 0x56, 0x90, 0xf9, 0xbb,
  0x64, 0x63, 0x56, 0x51, 0x7c, 0x76, 0xc4, 0x8f, 0x27, 0xe8, 0x6b, 0xb5,
  0x49, 0x67, 0xfe, 0x58, 0x19, 0xee, 0x1a, 0x22, 0xe5, 0x4f, 0xd1, 0x91,
  0x7c, 0x54, 0x51, 0xc2, 0x93, 0xc4, 0x2a, 0x7a, 0x17, 0x0f, 0xe7, 0x90,
  0x16, 0x7f, 0xb6, 0xf2, 0x6a, 0x87, 0x1b, 0x85, 0x99, 0xc6, 0x4f, 0x71,
  0x9e, 0x84, 0xb4, 0xb3, 0x72, 0x36, 0x91, 0x22, 0x0a, 0x4a, 0x33, 0x26,
  0x99, 0x5d, 0x1b, 0xfb, 0x4b, 0xf6, 0x96, 0x60, 0xbb, 0x6b, 0x75, 0xdb,
  0x70, 0x1d, 0x99, 0x16, 0x59, 0xd4, 0x6c, 0x9d, 0xa6, 0x89, 0x3f, 0xa4,
  0xe3, 0xbd, 0x15, 0xfa, 0x18, 0x61, 0xc7, 0xde, 0xca, 0xec, 0xbf, 0xce,
  0xdb, 0xa3, 0x9a, 0x9b, 0xfc, 0xed, 0x11, 0xbb, 0x6f, 0x41, 0x52, 0x69,
  0x99, 0x5e, 0x4d, 0xab, 0x69, 0x97, 0x8b, 0xf1, 0xca, 0x6a, 0xac, 0x86,
  0x3f, 0xf1, 0xdd, 0x0c, 0x23, 0x76, 0x9d, 0x29, 0xfe, 0x1b, 0x9a, 0x19,
  0x18, 0xae, 0x92, 0xde, 0x14, 0x40, 0xbb, 0xc3, 0x2a, 0x1a, 0x38, 0x27,
  0xc5, 0xa6, 0xbb, 0x66, 0x7c, 0x64, 0x30, 0x72, 0xe5, 0xc2, 0xec, 0xd7,
  0x18, 0xa0, 0x0b, 0x3d, 0xf5, 0x28, 0x6b, 0x0a, 0x40, 0x46, 0x13, 0x1b,
  0xfe, 0xfb, 0x05, 0x7e, 0xb1, 0x95, 0x2f, 0x0f, 0xea, 0xd9, 0x82, 0x32,
  0x87, 0xa2, 0xc7, 0x18, 0x77, 0xf6, 0xe9, 0x6f, 0x6e, 0xa3, 0xa5, 0x83,
  0x50, 0x2f, 0x32, 0xb0, 0x64, 0x19, 0xdd, 0x2a, 0x34, 0x02, 0xd6, 0xb3,
  0xd1, 0x87, 0x44, 0xe8, 0x3c, 0xf4, 0x4c, 0xb8, 0xe2, 0xf9, 0x88, 0x74,
  0xc0, 0x1c, 0xd1, 0xd5, 0x67, 0x9a, 0x28, 0xf8, 0x94, 0x53, 0x90, 0x4d,
  0x01, 0x8e, 0x8d, 0xea, 0x8f, 0xff, 0x40, 0x2b, 0xf0, 0xfd, 0x64, 0xdf,
  0x39, 0x2d, 0x43, 0xbb, 0xfa, 0xc9, 0x02, 0x4b, 0x06, 0x43, 0xbb, 0x34,
  0x96, 0x60, 0x90, 0xaf, 0xa4, 0x3d, 0x6c, 0x98, 0x2d, 0xd0, 0x41, 0x93,
  0x76, 0xac, 0x7b, 0xc6, 0x11, 0x9b, 0xd4, 0x9d, 0xbc, 0xa8, 0x7e, 0x13,
  0x96, 0x90, 0x88, 0xe8, 0x9f, 0x0f, 0xf7, 0x21, 0x9f, 0x97, 0x10, 0x8d,
  0x84, 0x41, 0x3a, 0x65, 0xe8, 0x44, 0xaf, 0x82, 0xfa, 0xf9, 0x11, 0xcd,
  0x1f, 0x76, 0xdd, 0x6e, 0x2c, 0xcb, 0x66, 0x19, 0xc6, 0x8c, 0x43, 0x58,
  0xa9, 0xa7, 0x32, 0xcb, 0xcc, 0xaf, 0xfd, 0xab, 0x61, 0x13, 0x41, 0x33,
  0x2c, 0xc9, 0x87, 0x99, 0x56, 0x73, 0x83, 0x80, 0x68, 0x92, 0x75, 0xe6,
  0x22, 0x7d, 0xe1, 0x52, 0xd5, 0x6a, 0x04, 0xe6, 0x8d, 0xba, 0x2d, 0x6d,
  0xa2, 0x2a, 0x62, 0x53, 0xe6, 0x5c, 0x5b, 0xab, 0x1a, 0x2d, 0xf4, 0x26,
  0xf7, 0x6f, 0x35, 0x55, 0x48, 0x51, 0x4b, 0x0a, 0x0c, 0x7d, 0x35, 0x61,
  0x04, 0x34, 0xeb, 0xf1, 0x34, 0xd3, 0x8c, 0x1d, 0x3e, 0x70, 0xaf, 0x9c,
  0x5a, 0x7b, 0xa3, 0xa9, 0x11, 0xaf, 0x12, 0xf2, 0x87, 0xec, 0x32, 0x57,
  0x45, 0xca, 0xfa, 0x9e, 0xa3, 0xe5, 0x26, 0x9b, 0x04, 0x16, 0xda, 0xea,
  0x96, 0x37, 0x9c, 0xbf, 0x5a, 0xd9, 0x3b, 0xe3, 0xdf, 0xf3, 0x16, 0x3e,
  0xde, 0x19, 0xd5, 0xc8, 0x82, 0x7f, 0xb6, 0x05, 0xdb, 0x3b, 0x39, 0xba,
  0x7f, 0x41, 0xe5, 0xc6, 0x3e, 0xb5, 0xbd, 0x8b, 0xfe, 0xf3, 0xdf, 0xd3,
  0x83, 0x9b, 0x6f, 0x12, 0x58, 0xf0, 0x54, 0x98, 0x2e, 0xb6, 0xfc, 0x9a,
  0x28, 0xd9, 0xf5, 0xd2, 0x5e, 0x73, 0x2d, 0xb4, 0x6b, 0x9c, 0x62, 0x7e,
  0x4d, 0x56, 0xbe, 0xe4, 0x49, 0x93, 0xc0, 0x82, 0x5d, 0x91, 0x73, 0xca,
  0x2c, 0x76, 0xca, 0x4e, 0x8f, 0x5e, 0x55, 0xa3, 0xbb, 0x39, 0x5a, 0x0b,
  0xc1, 0xe9, 0x59, 0x93, 0x00, 0x43, 0x68, 0xf1, 0x6e, 0xac, 0xd6, 0xe2,
  0xff, 0x71, 0x03, 0x17, 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, 0x7e, 0x0a, 0xfc, 0x0f,
  0x8a, 0x8b, 0x10, 0xeb, 0x8b, 0xee, 0x74, 0x73, 0x00, 0x00, 0x00, 0x25,
  0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65,
  0x61, 0x74, 0x65, 0x00, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d,
  0x31, 0x31, 0x54, 0x30, 0x32, 0x3a, 0x34, 0x37, 0x3a, 0x35, 0x31, 0x2b,
  0x30, 0x30, 0x3a, 0x30, 0x30, 0xa5, 0x83, 0x72, 0x46, 0x00, 0x00, 0x00,
  0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f,
  0x64, 0x69, 0x66, 0x79, 0x00, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30,
  0x2d, 0x30, 0x35, 0x54, 0x30, 0x36, 0x3a, 0x33, 0x30, 0x3a, 0x30, 0x31,
  0x2b, 0x30, 0x30, 0x3a, 0x30, 0x30, 0xc4, 0xf7, 0x27, 0x36, 0x00, 0x00,
  0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
unsigned int sample_png_len = 4270;
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?