Browse Source

Initial import

jamesbowman 9 years ago
parent
commit
180a5a442b
77 changed files with 19447 additions and 0 deletions
  1. 4 0
      .gitignore
  2. 186 0
      GD2.cpp
  3. 973 0
      GD2.h
  4. 61 0
      blobs.ino
  5. 312 0
      chess.ino
  6. 440 0
      cobra.ino
  7. 982 0
      converted-assets/blobs_assets.h
  8. 275 0
      converted-assets/chess_assets.h
  9. 44 0
      converted-assets/cobra_assets.h
  10. 17 0
      converted-assets/examples2_assets.h
  11. 27 0
      converted-assets/examples_assets.h
  12. 1089 0
      converted-assets/fonts_assets.h
  13. 1891 0
      converted-assets/formats_assets.h
  14. 288 0
      converted-assets/frogger_assets.h
  15. 1 0
      converted-assets/invaders_assets.h
  16. 819 0
      converted-assets/jnr_assets.h
  17. 667 0
      converted-assets/kenney_assets.h
  18. 22 0
      converted-assets/logo_assets.h
  19. 7 0
      converted-assets/mono_assets.h
  20. 66 0
      converted-assets/nightstrike_0_assets.h
  21. 66 0
      converted-assets/nightstrike_1_assets.h
  22. 66 0
      converted-assets/nightstrike_2_assets.h
  23. 66 0
      converted-assets/nightstrike_3_assets.h
  24. 66 0
      converted-assets/nightstrike_4_assets.h
  25. 17 0
      converted-assets/nightstrike_welcome_assets.h
  26. 32 0
      converted-assets/noisy_assets.h
  27. 12 0
      converted-assets/reflection_assets.h
  28. 2 0
      converted-assets/sdcard_assets.h
  29. 38 0
      converted-assets/selftest_assets.h
  30. 12 0
      converted-assets/slotgag_assets.h
  31. 2517 0
      converted-assets/sprites_assets.h
  32. 7 0
      converted-assets/tiled_assets.h
  33. 124 0
      converted-assets/walk_assets.h
  34. 853 0
      examples.ino
  35. 24 0
      fizz.ino
  36. 44 0
      fonts.ino
  37. 27 0
      formats.ino
  38. 434 0
      frogger.ino
  39. 6 0
      glow.ino
  40. 17 0
      helloworld.ino
  41. 1727 0
      ino-cobra.ino/.build/environment.pickle
  42. 47 0
      ino-cobra.ino/.build/pro328/Makefile
  43. 22 0
      ino-cobra.ino/.build/pro328/Makefile.deps
  44. 9 0
      ino-cobra.ino/.build/pro328/Makefile.sketch
  45. 0 0
      ino-cobra.ino/.build/pro328/src/dependencies.d
  46. 1 0
      ino-cobra.ino/lib/Gameduino2
  47. 1196 0
      invaders.ino
  48. 173 0
      jnr.ino
  49. 19 0
      jpeg.ino
  50. 26 0
      jpeg2.ino
  51. 275 0
      kenney.ino
  52. 31 0
      keywords.txt
  53. 29 0
      lines.ino
  54. 100 0
      logo.ino
  55. 14 0
      mkino
  56. 25 0
      mono.ino
  57. 945 0
      nightstrike.ino
  58. 41 0
      noisy.ino
  59. 52 0
      publish.py
  60. 95 0
      radarchart.ino
  61. 95 0
      reflection.ino
  62. 479 0
      selftest.ino
  63. 115 0
      simon.ino
  64. 25 0
      sketch.ino
  65. 38 0
      slotgag.ino
  66. 28 0
      song.ino
  67. 46 0
      sprites.ino
  68. 72 0
      tempest.ino
  69. 23 0
      tiled.ino
  70. 30 0
      tilt.ino
  71. 39 0
      transports/dump.h
  72. 34 0
      transports/serial.h
  73. 275 0
      transports/spidev.h
  74. 275 0
      transports/wiring.h
  75. 301 0
      viewer.ino
  76. 33 0
      walk.ino
  77. 111 0
      widgets.ino

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
+Gameduino2.zip
+ino-*
+mkino
+go

File diff suppressed because it is too large
+ 186 - 0
GD2.cpp


+ 973 - 0
GD2.h

@@ -0,0 +1,973 @@
+/*
+ * Copyright (C) 2013 by James Bowman <jamesb@excamera.com>
+ * Gameduino 2 library for Arduino, Raspberry Pi.
+ *
+ */
+
+#ifndef _GD2_H_INCLUDED
+#define _GD2_H_INCLUDED
+
+#if defined(RASPBERRY_PI) || defined(EMUPC)
+#include "wiring.h"
+#endif
+
+#if defined(RASPBERRY_PI)
+#define REPORT(VAR) fprintf(stderr, #VAR "=%d\n", (VAR))
+#else
+#define REPORT(VAR) (Serial.print(#VAR "="), Serial.println(VAR, DEC))
+#endif
+
+#include "Arduino.h"
+#include <stdarg.h>
+
+#define RGB(r, g, b)    ((uint32_t)((((r) & 0xffL) << 16) | (((g) & 0xffL) << 8) | ((b) & 0xffL)))
+#define F8(x)           (int((x) * 256L))
+#define F16(x)          ((int32_t)((x) * 65536L))
+
+#define GD_CALIBRATE    1
+#define GD_TRIM         2
+#define GD_STORAGE      4
+
+////////////////////////////////////////////////////////////////////////
+#if !defined(RASPBERRY_PI) && !defined(EMUPC)
+#define VERBOSE 0
+
+struct dirent {
+  char name[8];
+  char ext[3];
+  byte attribute;
+  byte reserved[8];
+  uint16_t cluster_hi;  // FAT32 only
+  uint16_t time;
+  uint16_t date;
+  uint16_t cluster;
+  uint32_t size;
+};
+
+// https://www.sdcard.org/downloads/pls/simplified_specs/Part_1_Physical_Layer_Simplified_Specification_Ver_3.01_Final_100518.pdf
+// page 22
+// http://mac6.ma.psu.edu/space2008/RockSat/microController/sdcard_appnote_foust.pdf
+// http://elm-chan.org/docs/mmc/mmc_e.html
+// http://www.pjrc.com/tech/8051/ide/fat32.html
+
+#define FAT16 0
+#define FAT32 1
+
+class sdcard {
+  public:
+  void sel() {
+    digitalWrite(pin, LOW);
+    delay(1);
+  }
+  void desel() {
+    digitalWrite(pin, HIGH);
+    SPI.transfer(0xff); // force DO release
+  }
+  void sd_delay(byte n) {
+    while (n--)
+      SPI.transfer(0xff);
+  }
+
+  void cmd(byte cmd, uint32_t lba = 0, uint8_t crc = 0x95) {
+#if VERBOSE
+    Serial.print("cmd ");
+    Serial.print(cmd, DEC);
+    Serial.print(" ");
+    Serial.print(lba, HEX);
+    Serial.println();
+#endif
+
+    sel();
+    SPI.transfer(0xff);
+    SPI.transfer(0x40 | cmd);
+    SPI.transfer(0xff & (lba >> 24));
+    SPI.transfer(0xff & (lba >> 16));
+    SPI.transfer(0xff & (lba >> 8));
+    SPI.transfer(0xff & (lba));
+    SPI.transfer(crc);
+    SPI.transfer(0xff);
+  }
+
+  byte R1() {   // read response R1
+    byte r;
+    while ((r = SPI.transfer(0xff)) & 0x80)
+      ;
+    desel();
+    SPI.transfer(0xff);   // trailing byte
+    return r;
+  }
+
+  byte sdR3(uint32_t &ocr) {  // read response R3
+    uint32_t r;
+    while ((r = SPI.transfer(0xff)) & 0x80)
+      ;
+    for (byte i = 4; i; i--)
+      ocr = (ocr << 8) | SPI.transfer(0xff);
+    SPI.transfer(0xff);   // trailing byte
+
+    desel();
+    return r;
+  }
+
+  byte sdR7() {  // read response R3
+    uint32_t r;
+    while ((r = SPI.transfer(0xff)) & 0x80)
+      ;
+    for (byte i = 4; i; i--)
+      // Serial.println(SPI.transfer(0xff), HEX);
+      SPI.transfer(0xff);
+    desel();
+
+    return r;
+  }
+
+  void appcmd(byte cc, uint32_t lba = 0) {
+    cmd(55); R1();
+    cmd(cc, lba);
+  }
+
+  void begin(byte p) {
+    byte type_code;
+    byte sdhc;
+    pin = p;
+
+    pinMode(pin, OUTPUT);
+    SPI.setClockDivider(SPI_CLOCK_DIV64);
+    desel();
+
+    delay(10);      // wait for boot
+    sd_delay(10);   // deselected, 80 pulses
+
+    // Tty.printf("Attempting card reset... ");
+    // attempt reset
+    byte r1;
+    int attempts = 0;
+    do {       // reset, enter idle
+      cmd(0);
+      while ((r1 = SPI.transfer(0xff)) & 0x80)
+        if (++attempts == 1000)
+          goto finished;
+      desel();
+      SPI.transfer(0xff);   // trailing byte
+    } while (r1 != 1);
+    // Tty.printf("reset ok\n");
+
+    sdhc = 0;
+    cmd(8, 0x1aa, 0x87);
+    r1 = sdR7();
+    sdhc = (r1 == 1);
+
+    // Tty.printf("card %s SDHC\n", sdhc ? "is" : "is not");
+
+    // Tty.printf("Sending card init command... ");
+    while (1) {
+      appcmd(41, sdhc ? (1UL << 30) : 0); // card init
+      r1 = R1();
+      if ((r1 & 1) == 0)
+        break;
+      delay(100);
+    }
+    // Tty.printf("OK\n");
+
+    if (sdhc) {
+      cmd(58);
+      uint32_t OCR = 0;
+      sdR3(OCR);
+      ccs = 1UL & (OCR >> 30);
+      // Tty.printf("OCR register is %#010lx\n", long(OCR));
+    } else {
+      ccs = 0;
+    }
+    // Tty.printf("ccs = %d\n", ccs);
+  // REPORT(ccs);
+
+    type_code = rd(0x1be + 0x4);
+    switch (type_code) {
+      default:
+        type = FAT16;
+        break;
+      case 0x0b:
+      case 0x0c:
+        type = FAT32;
+        break;
+    }
+  // REPORT(type_code);
+    // Tty.printf("Type code %#02x means FAT%d\n", type_code, (type == FAT16) ? 16 : 32);
+#if VERBOSE
+    Serial.print("Type ");
+    Serial.print(type_code, HEX);
+    Serial.print(" so FAT");
+    Serial.println((type == FAT16) ? 16 : 32, DEC);
+#endif
+
+    o_partition = 512L * rd4(0x1be + 0x8);
+    sectors_per_cluster = rd(o_partition + 0xd);
+    reserved_sectors = rd2(o_partition + 0xe);
+    cluster_size = 512L * sectors_per_cluster;
+// REPORT(sectors_per_cluster);
+
+    // Tty.printf("Bytes per sector:    %d\n", rd2(o_partition + 0xb));
+    // Tty.printf("Sectors per cluster: %d\n", sectors_per_cluster);
+
+    if (type == FAT16) {
+      max_root_dir_entries = rd2(o_partition + 0x11);
+      sectors_per_fat = rd2(o_partition + 0x16);
+      o_fat = o_partition + 512L * reserved_sectors;
+      o_root = o_fat + (2 * 512L * sectors_per_fat);
+      // data area starts with cluster 2, so offset it here
+      o_data = o_root + (max_root_dir_entries * 32L) - (2L * cluster_size); 
+    } else {
+      uint32_t sectors_per_fat = rd4(o_partition + 0x24);
+      root_dir_first_cluster = rd4(o_partition + 0x2c);
+      uint32_t fat_begin_lba = (o_partition >> 9) + reserved_sectors;
+      uint32_t cluster_begin_lba = (o_partition >> 9) + reserved_sectors + (2 * sectors_per_fat);
+
+      o_fat = 512L * fat_begin_lba;
+      o_root = (512L * (cluster_begin_lba + (root_dir_first_cluster - 2) * sectors_per_cluster));
+      o_data = (512L * (cluster_begin_lba - 2 * sectors_per_cluster));
+    }
+  finished:
+    // Serial.println("finished");
+    SPI.setClockDivider(SPI_CLOCK_DIV2);
+    SPSR = (1 << SPI2X);
+  }
+  void cmd17(uint32_t off) {
+    if (ccs)
+      cmd(17, off >> 9);
+    else
+      cmd(17, off & ~511L);
+    R1();
+    sel();
+    while (SPI.transfer(0xff) != 0xfe)
+      ;
+  }
+  void rdn(byte *d, uint32_t off, uint16_t n) {
+    cmd17(off);
+    uint16_t i;
+    uint16_t bo = (off & 511);
+    for (i = 0; i < bo; i++)
+      SPI.transfer(0xff);
+    for (i = 0; i < n; i++)
+      *d++ = SPI.transfer(0xff);
+    for (i = 0; i < (514 - bo - n); i++)
+      SPI.transfer(0xff);
+    desel();
+  }
+
+  uint32_t rd4(uint32_t off) {
+    uint32_t r;
+    rdn((byte*)&r, off, sizeof(r));
+    return r;
+  }
+
+  uint16_t rd2(uint32_t off) {
+    uint16_t r;
+    rdn((byte*)&r, off, sizeof(r));
+    return r;
+  }
+
+  byte rd(uint32_t off) {
+    byte r;
+    rdn((byte*)&r, off, sizeof(r));
+    return r;
+  }
+  byte pin;
+  byte ccs;
+
+  byte type;
+  uint16_t sectors_per_cluster;
+  uint16_t reserved_sectors;
+  uint16_t max_root_dir_entries;
+  uint16_t sectors_per_fat;
+  uint16_t cluster_size;
+  uint32_t root_dir_first_cluster;
+
+  // These are all linear addresses, hence the o_ prefix
+  uint32_t o_partition;
+  uint32_t o_fat;
+  uint32_t o_root;
+  uint32_t o_data;
+};
+
+static void dos83(byte dst[11], const char *ps)
+{
+  byte i = 0;
+  while (*ps) {
+    if (*ps != '.')
+      dst[i++] = toupper(*ps);
+    else {
+      while (i < 8)
+        dst[i++] = ' ';
+    }
+    ps++;
+  }
+  while (i < 11)
+    dst[i++] = ' ';
+}
+
+#else
+class sdcard {
+public:
+  void begin(int p) {};
+};
+#endif
+
+////////////////////////////////////////////////////////////////////////
+
+class GDClass {
+public:
+  void begin(uint8_t options = (GD_CALIBRATE | GD_TRIM | GD_STORAGE));
+
+  uint16_t random();
+  uint16_t random(uint16_t n);
+  void seed(uint16_t n);
+  int16_t rsin(int16_t r, uint16_t th);
+  int16_t rcos(int16_t r, uint16_t th);
+  void polar(int &x, int &y, int16_t r, uint16_t th);
+  uint16_t atan2(int16_t y, int16_t x);
+
+  void copy(const PROGMEM uint8_t *src, int count);
+  void copyram(byte *src, int count);
+
+  void self_calibrate(void);
+
+  void swap(void);
+  void flush(void);
+  void finish(void);
+
+  void play(uint8_t instrument, uint8_t note = 0);
+  void sample(uint32_t start, uint32_t len, uint16_t freq, uint16_t format, int loop = 0);
+
+  void get_inputs(void);
+  void get_accel(int &x, int &y, int &z);
+  struct {
+    uint16_t track_tag;
+    uint16_t track_val;
+    uint16_t rz;
+    uint16_t __dummy_1;
+    int16_t y;
+    int16_t x;
+    int16_t tag_y;
+    int16_t tag_x;
+    uint8_t tag;
+    uint8_t ptag;
+  } inputs;
+
+  void AlphaFunc(byte func, byte ref);
+  void Begin(byte prim);
+  void BitmapHandle(byte handle);
+  void BitmapLayout(byte format, uint16_t linestride, uint16_t height);
+  void BitmapSize(byte filter, byte wrapx, byte wrapy, uint16_t width, uint16_t height);
+  void BitmapSource(uint32_t addr);
+  void BitmapTransformA(int32_t a);
+  void BitmapTransformB(int32_t b);
+  void BitmapTransformC(int32_t c);
+  void BitmapTransformD(int32_t d);
+  void BitmapTransformE(int32_t e);
+  void BitmapTransformF(int32_t f);
+  void BlendFunc(byte src, byte dst);
+  void Call(uint16_t dest);
+  void Cell(byte cell);
+  void ClearColorA(byte alpha);
+  void ClearColorRGB(byte red, byte green, byte blue);
+  void ClearColorRGB(uint32_t rgb);
+  void Clear(byte c, byte s, byte t);
+  void Clear(void);
+  void ClearStencil(byte s);
+  void ClearTag(byte s);
+  void ColorA(byte alpha);
+  void ColorMask(byte r, byte g, byte b, byte a);
+  void ColorRGB(byte red, byte green, byte blue);
+  void ColorRGB(uint32_t rgb);
+  void Display(void);
+  void End(void);
+  void Jump(uint16_t dest);
+  void LineWidth(uint16_t width);
+  void Macro(byte m);
+  void PointSize(uint16_t size);
+  void RestoreContext(void);
+  void Return(void);
+  void SaveContext(void);
+  void ScissorSize(uint16_t width, uint16_t height);
+  void ScissorXY(uint16_t x, uint16_t y);
+  void StencilFunc(byte func, byte ref, byte mask);
+  void StencilMask(byte mask);
+  void StencilOp(byte sfail, byte spass);
+  void TagMask(byte mask);
+  void Tag(byte s);
+  void Vertex2f(int16_t x, int16_t y);
+  void Vertex2ii(uint16_t x, uint16_t y, byte handle = 0, byte cell = 0);
+
+  // Higher-level graphics commands
+
+  void cmd_append(uint32_t ptr, uint32_t num);
+  void cmd_bgcolor(uint32_t c);
+  void cmd_button(int16_t x, int16_t y, uint16_t w, uint16_t h, byte font, uint16_t options, const char *s);
+  void cmd_calibrate(void);
+  void cmd_clock(int16_t x, int16_t y, int16_t r, uint16_t options, uint16_t h, uint16_t m, uint16_t s, uint16_t ms);
+  void cmd_coldstart(void);
+  void cmd_dial(int16_t x, int16_t y, int16_t r, uint16_t options, uint16_t val);
+  void cmd_dlstart(void);
+  void cmd_fgcolor(uint32_t c);
+  void cmd_gauge(int16_t x, int16_t y, int16_t r, uint16_t options, uint16_t major, uint16_t minor, uint16_t val, uint16_t range);
+  void cmd_getmatrix(void);
+  void cmd_getprops(uint32_t &ptr, uint32_t &w, uint32_t &h);
+  void cmd_getptr(void);
+  void cmd_gradcolor(uint32_t c);
+  void cmd_gradient(int16_t x0, int16_t y0, uint32_t rgb0, int16_t x1, int16_t y1, uint32_t rgb1);
+  void cmd_inflate(uint32_t ptr);
+  void cmd_interrupt(uint32_t ms);
+  void cmd_keys(int16_t x, int16_t y, int16_t w, int16_t h, byte font, uint16_t options, const char*s);
+  void cmd_loadidentity(void);
+  void cmd_loadimage(uint32_t ptr, int32_t options);
+  void cmd_memcpy(uint32_t dest, uint32_t src, uint32_t num);
+  void cmd_memset(uint32_t ptr, byte value, uint32_t num);
+  uint32_t cmd_memcrc(uint32_t ptr, uint32_t num);
+  void cmd_memwrite(uint32_t ptr, uint32_t num);
+  void cmd_regwrite(uint32_t ptr, uint32_t val);
+  void cmd_number(int16_t x, int16_t y, byte font, uint16_t options, uint32_t n);
+  void cmd_progress(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t options, uint16_t val, uint16_t range);
+  void cmd_regread(uint32_t ptr);
+  void cmd_rotate(int32_t a);
+  void cmd_scale(int32_t sx, int32_t sy);
+  void cmd_screensaver(void);
+  void cmd_scrollbar(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t options, uint16_t val, uint16_t size, uint16_t range);
+  void cmd_setfont(byte font, uint32_t ptr);
+  void cmd_setmatrix(void);
+  void cmd_sketch(int16_t x, int16_t y, uint16_t w, uint16_t h, uint32_t ptr, uint16_t format);
+  void cmd_slider(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t options, uint16_t val, uint16_t range);
+  void cmd_snapshot(uint32_t ptr);
+  void cmd_spinner(int16_t x, int16_t y, byte style, byte scale);
+  void cmd_stop(void);
+  void cmd_swap(void);
+  void cmd_text(int16_t x, int16_t y, byte font, uint16_t options, const char *s);
+  void cmd_toggle(int16_t x, int16_t y, int16_t w, byte font, uint16_t options, uint16_t state, const char *s);
+  void cmd_track(int16_t x, int16_t y, uint16_t w, uint16_t h, byte tag);
+  void cmd_translate(int32_t tx, int32_t ty);
+
+  byte rd(uint32_t addr);
+  void wr(uint32_t addr, uint8_t v);
+  uint16_t rd16(uint32_t addr);
+  void wr16(uint32_t addr, uint16_t v);
+  uint32_t rd32(uint32_t addr);
+  void wr32(uint32_t addr, uint32_t v);
+  void wr_n(uint32_t addr, byte *src, uint32_t n);
+
+  void cmd32(uint32_t b);
+
+  void bulkrd(uint32_t a);
+  void resume(void);
+  void __end(void);
+  void reset(void);
+
+  void dumpscreen(void);
+  byte load(const char *filename, void (*progress)(long, long) = NULL);
+  void safeload(const char *filename);
+
+  sdcard SD;
+
+  void storage(void);
+  void tune(void);
+
+private:
+  static void cFFFFFF(byte v);
+  static void cI(uint32_t);
+  static void ci(int32_t);
+  static void cH(uint16_t);
+  static void ch(int16_t);
+  static void cs(const char *);
+  static void fmtcmd(const char *fmt, ...);
+
+  static void align(byte n);
+  void cmdbyte(uint8_t b);
+
+  uint32_t measure_freq(void);
+
+  uint32_t rseed;
+};
+
+extern GDClass GD;
+
+#if !defined(RASPBERRY_PI) && !defined(EMUPC)
+class Reader {
+public:
+  int openfile(const char *filename) {
+    int i = 0;
+    byte dosname[11];
+    dirent de;
+
+    dos83(dosname, filename);
+    do {
+      GD.SD.rdn((byte*)&de, GD.SD.o_root + i * 32, sizeof(de));
+      // Serial.println(de.name);
+      if (0 == memcmp(de.name, dosname, 11)) {
+        begin(de);
+        return 1;
+      }
+      i++;
+    } while (de.name[0]);
+    return 0;
+  }
+  void begin(dirent &de) {
+    size = de.size;
+    cluster = de.cluster;
+    if (GD.SD.type == FAT32)
+      cluster |= ((long)de.cluster_hi << 16);
+    sector = 0;
+    offset = 0;
+  }
+  void nextcluster() {
+    if (GD.SD.type == FAT16)
+      cluster = GD.SD.rd2(GD.SD.o_fat + 2 * cluster);
+    else
+      cluster = GD.SD.rd4(GD.SD.o_fat + 4 * cluster);
+#if VERBOSE
+    Serial.print("nextcluster=");
+    Serial.println(cluster, DEC);
+#endif
+  }
+  void skipcluster() {
+    nextcluster();
+    offset += GD.SD.cluster_size;
+  }
+  void skipsector() {
+    if (sector == GD.SD.sectors_per_cluster) {
+      sector = 0;
+      nextcluster();
+    }
+    sector++;
+    offset += 512;
+  }
+  void seek(uint32_t o) {
+    while (offset < o) {
+      if ((sector == GD.SD.sectors_per_cluster) && ((o - offset) > (long)GD.SD.cluster_size))
+        skipcluster();
+      else
+        skipsector();
+    }
+  }
+  void readsector() {
+    if (sector == GD.SD.sectors_per_cluster) {
+      sector = 0;
+      nextcluster();
+    }
+    uint32_t off = GD.SD.o_data + ((long)GD.SD.cluster_size * cluster) + (512L * sector);
+#if VERBOSE
+    Serial.print("off=0x");
+    Serial.println(off, HEX);
+#endif
+    GD.SD.cmd17(off & ~511L);
+// Serial.println(2 * (micros() - t0), DEC);
+    sector++;
+    offset += 512;
+  }
+  void readsector(byte *dst) {
+    readsector();
+    for (int i = 0; i < 64; i++) {
+      *dst++ = SPI.transfer(0xff);
+      *dst++ = SPI.transfer(0xff);
+      *dst++ = SPI.transfer(0xff);
+      *dst++ = SPI.transfer(0xff);
+      *dst++ = SPI.transfer(0xff);
+      *dst++ = SPI.transfer(0xff);
+      *dst++ = SPI.transfer(0xff);
+      *dst++ = SPI.transfer(0xff);
+    }
+    SPI.transfer(0xff);   // consume CRC
+    SPI.transfer(0xff);
+    GD.SD.desel();
+  }
+  uint32_t cluster;
+  uint32_t offset;
+  uint32_t size;
+  byte sector;
+};
+#endif
+
+typedef struct {
+  byte handle;
+  uint16_t w, h;
+  uint16_t size;
+} shape_t;
+
+// Convert degrees to Furmans
+#define DEGREES(n) ((65536UL * (n)) / 360)
+
+#define NEVER                0
+#define LESS                 1
+#define LEQUAL               2
+#define GREATER              3
+#define GEQUAL               4
+#define EQUAL                5
+#define NOTEQUAL             6
+#define ALWAYS               7
+
+#define ARGB1555             0
+#define L1                   1
+#define L4                   2
+#define L8                   3
+#define RGB332               4
+#define ARGB2                5
+#define ARGB4                6
+#define RGB565               7
+#define PALETTED             8
+#define TEXT8X8              9
+#define TEXTVGA              10
+#define BARGRAPH             11
+
+#define NEAREST              0
+#define BILINEAR             1
+
+#define BORDER               0
+#define REPEAT               1
+
+#define KEEP                 1
+#define REPLACE              2
+#define INCR                 3
+#define DECR                 4
+#define INVERT               5
+
+#define DLSWAP_DONE          0
+#define DLSWAP_LINE          1
+#define DLSWAP_FRAME         2
+
+#define INT_SWAP             1
+#define INT_TOUCH            2
+#define INT_TAG              4
+#define INT_SOUND            8
+#define INT_PLAYBACK         16
+#define INT_CMDEMPTY         32
+#define INT_CMDFLAG          64
+#define INT_CONVCOMPLETE     128
+
+#define TOUCHMODE_OFF        0
+#define TOUCHMODE_ONESHOT    1
+#define TOUCHMODE_FRAME      2
+#define TOUCHMODE_CONTINUOUS 3
+
+#define ZERO                 0
+#define ONE                  1
+#define SRC_ALPHA            2
+#define DST_ALPHA            3
+#define ONE_MINUS_SRC_ALPHA  4
+#define ONE_MINUS_DST_ALPHA  5
+
+#define BITMAPS              1
+#define POINTS               2
+#define LINES                3
+#define LINE_STRIP           4
+#define EDGE_STRIP_R         5
+#define EDGE_STRIP_L         6
+#define EDGE_STRIP_A         7
+#define EDGE_STRIP_B         8
+#define RECTS                9
+
+#define OPT_MONO             1
+#define OPT_NODL             2
+#define OPT_FLAT             256
+#define OPT_CENTERX          512
+#define OPT_CENTERY          1024
+#define OPT_CENTER           (OPT_CENTERX | OPT_CENTERY)
+#define OPT_NOBACK           4096
+#define OPT_NOTICKS          8192
+#define OPT_NOHM             16384
+#define OPT_NOPOINTER        16384
+#define OPT_NOSECS           32768
+#define OPT_NOHANDS          49152
+#define OPT_RIGHTX           2048
+#define OPT_SIGNED           256
+
+#define LINEAR_SAMPLES       0
+#define ULAW_SAMPLES         1
+#define ADPCM_SAMPLES        2
+
+// 'instrument' argument to GD.play()
+
+#define SILENCE              0x00
+
+#define SQUAREWAVE           0x01
+#define SINEWAVE             0x02
+#define SAWTOOTH             0x03
+#define TRIANGLE             0x04
+
+#define BEEPING              0x05
+#define ALARM                0x06
+#define WARBLE               0x07
+#define CAROUSEL             0x08
+
+#define PIPS(n)              (0x0f + (n))
+
+#define HARP                 0x40
+#define XYLOPHONE            0x41
+#define TUBA                 0x42
+#define GLOCKENSPIEL         0x43
+#define ORGAN                0x44
+#define TRUMPET              0x45
+#define PIANO                0x46
+#define CHIMES               0x47
+#define MUSICBOX             0x48
+#define BELL                 0x49
+
+#define CLICK                0x50
+#define SWITCH               0x51
+#define COWBELL              0x52
+#define NOTCH                0x53
+#define HIHAT                0x54
+#define KICKDRUM             0x55
+#define POP                  0x56
+#define CLACK                0x57
+#define CHACK                0x58
+
+#define MUTE                 0x60
+#define UNMUTE               0x61
+
+#define RAM_CMD              1081344UL
+#define RAM_DL               1048576UL
+#define RAM_PAL              1056768UL
+
+#define REG_CLOCK            1057800UL
+#define REG_CMD_DL           1058028UL
+#define REG_CMD_READ         1058020UL
+#define REG_CMD_WRITE        1058024UL
+#define REG_CPURESET         1057820UL
+#define REG_CSPREAD          1057892UL
+#define REG_DITHER           1057884UL
+#define REG_DLSWAP           1057872UL
+#define REG_FRAMES           1057796UL
+#define REG_FREQUENCY        1057804UL
+#define REG_GPIO             1057936UL
+#define REG_GPIO_DIR         1057932UL
+#define REG_HCYCLE           1057832UL
+#define REG_HOFFSET          1057836UL
+#define REG_HSIZE            1057840UL
+#define REG_HSYNC0           1057844UL
+#define REG_HSYNC1           1057848UL
+#define REG_ID               1057792UL
+#define REG_INT_EN           1057948UL
+#define REG_INT_FLAGS        1057944UL
+#define REG_INT_MASK         1057952UL
+#define REG_MACRO_0          1057992UL
+#define REG_MACRO_1          1057996UL
+#define REG_OUTBITS          1057880UL
+#define REG_PCLK             1057900UL
+#define REG_PCLK_POL         1057896UL
+#define REG_PLAY             1057928UL
+#define REG_PLAYBACK_FORMAT  1057972UL
+#define REG_PLAYBACK_FREQ    1057968UL
+#define REG_PLAYBACK_LENGTH  1057960UL
+#define REG_PLAYBACK_LOOP    1057976UL
+#define REG_PLAYBACK_PLAY    1057980UL
+#define REG_PLAYBACK_READPTR 1057964UL
+#define REG_PLAYBACK_START   1057956UL
+#define REG_PWM_DUTY         1057988UL
+#define REG_PWM_HZ           1057984UL
+#define REG_ROTATE           1057876UL
+#define REG_SOUND            1057924UL
+#define REG_SWIZZLE          1057888UL
+#define REG_TAG              1057912UL
+#define REG_TAG_X            1057904UL
+#define REG_TAG_Y            1057908UL
+#define REG_TOUCH_ADC_MODE   1058036UL
+#define REG_TOUCH_CHARGE     1058040UL
+#define REG_TOUCH_DIRECT_XY  1058164UL
+#define REG_TOUCH_DIRECT_Z1Z2 1058168UL
+#define REG_TOUCH_MODE       1058032UL
+#define REG_TOUCH_OVERSAMPLE 1058048UL
+#define REG_TOUCH_RAW_XY     1058056UL
+#define REG_TOUCH_RZ         1058060UL
+#define REG_TOUCH_RZTHRESH   1058052UL
+#define REG_TOUCH_SCREEN_XY  1058064UL
+#define REG_TOUCH_SETTLE     1058044UL
+#define REG_TOUCH_TAG        1058072UL
+#define REG_TOUCH_TAG_XY     1058068UL
+#define REG_TOUCH_TRANSFORM_A 1058076UL
+#define REG_TOUCH_TRANSFORM_B 1058080UL
+#define REG_TOUCH_TRANSFORM_C 1058084UL
+#define REG_TOUCH_TRANSFORM_D 1058088UL
+#define REG_TOUCH_TRANSFORM_E 1058092UL
+#define REG_TOUCH_TRANSFORM_F 1058096UL
+#define REG_TRACKER          1085440UL
+#define REG_VCYCLE           1057852UL
+#define REG_VOFFSET          1057856UL
+#define REG_VOL_PB           1057916UL
+#define REG_VOL_SOUND        1057920UL
+#define REG_VSIZE            1057860UL
+#define REG_VSYNC0           1057864UL
+#define REG_VSYNC1           1057868UL
+
+#define VERTEX2II(x, y, handle, cell) \
+        ((2UL << 30) | (((x) & 511UL) << 21) | (((y) & 511UL) << 12) | (((handle) & 31) << 7) | (((cell) & 127) << 0))
+
+#define ROM_PIXEL_FF        0xc0400UL
+
+class Poly {
+    int x0, y0, x1, y1;
+    int x[8], y[8];
+    byte n;
+    void restart() {
+      n = 0;
+      x0 = 16 * 480;
+      x1 = 0;
+      y0 = 16 * 272;
+      y1 = 0;
+    }
+    void perim() {
+      for (byte i = 0; i < n; i++)
+        GD.Vertex2f(x[i], y[i]);
+      GD.Vertex2f(x[0], y[0]);
+    }
+  public:
+    void begin() {
+      restart();
+
+      GD.ColorMask(0,0,0,0);
+      GD.StencilOp(KEEP, INVERT);
+      GD.StencilFunc(ALWAYS, 255, 255);
+    }
+    void v(int _x, int _y) {
+      x0 = min(x0, _x >> 4);
+      x1 = max(x1, _x >> 4);
+      y0 = min(y0, _y >> 4);
+      y1 = max(y1, _y >> 4);
+      x[n] = _x;
+      y[n] = _y;
+      n++;
+    }
+    void paint() {
+      x0 = max(0, x0);
+      y0 = max(0, y0);
+      x1 = min(16 * 480, x1);
+      y1 = min(16 * 272, y1);
+      GD.ScissorXY(x0, y0);
+      GD.ScissorSize(x1 - x0 + 1, y1 - y0 + 1);
+      GD.Begin(EDGE_STRIP_B);
+      perim();
+    }
+    void finish() {
+      GD.ColorMask(1,1,1,1);
+      GD.StencilFunc(EQUAL, 255, 255);
+
+      GD.Begin(EDGE_STRIP_B);
+      GD.Vertex2ii(0, 0);
+      GD.Vertex2ii(511, 0);
+    }
+    void draw() {
+      paint();
+      finish();
+    }
+    void outline() {
+      GD.Begin(LINE_STRIP);
+      perim();
+    }
+};
+
+#if !defined(RASPBERRY_PI) && !defined(EMUPC)
+class Streamer {
+public:
+  void begin(const char *rawsamples,
+             uint16_t freq = 44100,
+             byte format = ADPCM_SAMPLES,
+             uint32_t _base = (0x40000UL - 8192), uint16_t size = 8192) {
+    r.openfile(rawsamples);
+
+    base = _base;
+    mask = size - 1;
+    wp = 0;
+
+    for (byte i = 10; i; i--)
+      feed();
+
+    GD.sample(base, size, freq, format, 1);
+  }
+  int feed() {
+    uint16_t rp = GD.rd32(REG_PLAYBACK_READPTR) - base;
+    uint16_t freespace = mask & ((rp - 1) - wp);
+    if (freespace >= 512) {
+      // REPORT(base);
+      // REPORT(rp);
+      // REPORT(wp);
+      // REPORT(freespace);
+      // Serial.println();
+      byte buf[512];
+      // uint16_t n = min(512, r.size - r.offset);
+      // n = (n + 3) & ~3;   // force 32-bit alignment
+      GD.__end();
+      r.readsector(buf);
+      GD.resume();
+      GD.cmd_memwrite(base + wp, 512);
+      GD.copyram(buf, 512);
+      wp = (wp + 512) & mask;
+    }
+    return r.offset < r.size;
+  }
+  void progress(uint16_t &val, uint16_t &range) {
+    uint32_t m = r.size;
+    uint32_t p = min(r.offset, m);
+    while (m > 0x10000) {
+      m >>= 1;
+      p >>= 1;
+    }
+    val = p;
+    range = m;
+  }
+private:
+  Reader r;
+  uint32_t base;
+  uint16_t mask;
+  uint16_t wp;
+};
+#else
+class Streamer {
+public:
+  void begin(const char *rawsamples,
+             uint16_t freq = 44100,
+             byte format = ADPCM_SAMPLES,
+             uint32_t _base = (0x40000UL - 4096), uint16_t size = 4096) {}
+  int feed() {}
+  void progress(uint16_t &val, uint16_t &range) {}
+};
+
+#endif
+
+static byte sinus(byte x)
+{
+  return 128 + GD.rsin(128, -16384 + (x << 7));
+}
+
+// JCB{
+static void caption(int t, const char *text)
+{
+
+  if ((0 <= t) && (t < 128)) {
+    int sz = strlen(text) * 8;
+    GD.RestoreContext();
+    GD.Begin(LINES);
+    GD.LineWidth(9 * 16);
+    byte fade;
+    if (t < 96)
+      fade = 0xff;
+    else
+      fade = 0xff - ((t - 96) * 8);
+    GD.ColorA(fade >> 1);
+    GD.ColorRGB(0x000000);
+    int y = 259;
+
+    byte slide = sinus(min(255, t * 16));
+    int x = ((slide * (long)sz) >> 8);
+    GD.Vertex2ii(480, y);
+    GD.Vertex2ii(470 - x, y);
+
+    GD.ColorRGB(0xffffff);
+    if (t < 16) {
+      GD.ColorA(fade >> 2);
+      for (int i = 8; i >= 0; i -= 2)
+        GD.cmd_text(470 - x + sz + i, y, 26, OPT_CENTERY | OPT_RIGHTX, text);
+    } else {
+      GD.ColorA(fade);
+      GD.cmd_text(470 - x + sz, y, 26, OPT_CENTERY | OPT_RIGHTX, text);
+    }
+  }
+}
+// }JCB
+
+#endif

+ 61 - 0
blobs.ino

@@ -0,0 +1,61 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#define NBLOBS      128 //' a{
+#define OFFSCREEN   -16384
+
+struct xy {
+  int x, y;
+} blobs[NBLOBS];
+
+void setup()
+{
+  GD.begin();
+
+  for (int i = 0; i < NBLOBS; i++) {
+    blobs[i].x = OFFSCREEN;
+    blobs[i].y = OFFSCREEN;
+  }
+  Serial.begin(1000000);    // JCB
+} //' }a
+
+void loop() //' b{
+{
+  static byte blob_i;
+  GD.get_inputs();
+  if (GD.inputs.x != -32768) {
+    blobs[blob_i].x = GD.inputs.x << 4; //' xy{
+    blobs[blob_i].y = GD.inputs.y << 4; //' }xy
+  } else {
+    blobs[blob_i].x = OFFSCREEN;
+    blobs[blob_i].y = OFFSCREEN;
+  }
+  blob_i = (blob_i + 1) & (NBLOBS - 1);
+
+  GD.ClearColorRGB(0xd0d0c0); // JCB
+  GD.ClearColorRGB(0xe0e0e0);
+  GD.Clear();
+  GD.Begin(BITMAPS);      // JCB
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272); // JCB
+  GD.Vertex2ii(0, 0); // JCB
+
+  // Draw the blobs from oldest to youngest // JCB
+  GD.Begin(POINTS);
+  for (int i = 0; i < NBLOBS; i++) {
+    // Blobs fade away and swell as they age
+    GD.ColorA(i << 1);
+    GD.PointSize((1024 + 16) - (i << 3));
+
+    // Random color for each blob, keyed from (blob_i + i)
+    uint8_t j = (blob_i + i) & (NBLOBS - 1);
+    byte r = j * 17;
+    byte g = j * 23;
+    byte b = j * 147;
+    GD.ColorRGB(r, g, b);
+
+    // Draw it!
+    GD.Vertex2f(blobs[j].x, blobs[j].y);
+  }
+  GD.swap();
+} //' }b

+ 312 - 0
chess.ino

@@ -0,0 +1,312 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "chess_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000);    // JCB
+  GD.begin();
+  LOAD_ASSETS();
+  GD.BitmapHandle(1);
+  GD.BitmapSource(CHECKER);
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 256, 256);
+  GD.BitmapLayout(L8, CHECKER_WIDTH, CHECKER_HEIGHT);
+}
+
+/***************************************************************************/
+/*                               micro-Max,                                */
+/* A chess program smaller than 2KB (of non-blank source), by H.G. Muller  */
+/* Port to Atmel ATMega644 and AVR GCC, by Andre Adrian                    */
+/***************************************************************************/
+/* version 4.8 (1953 characters) features:                                 */
+/* - recursive negamax search                                              */
+/* - all-capture MVV/LVA quiescence search                                 */
+/* - (internal) iterative deepening                                        */
+/* - best-move-first 'sorting'                                             */
+/* - a hash table storing score and best move                              */
+/* - futility pruning                                                      */
+/* - king safety through magnetic, frozen king in middle-game              */
+/* - R=2 null-move pruning                                                 */
+/* - keep hash and repetition-draw detection                               */
+/* - better defense against passers through gradual promotion              */
+/* - extend check evasions in inner nodes                                  */
+/* - reduction of all non-Pawn, non-capture moves except hash move (LMR)   */
+/* - full FIDE rules (expt under-promotion) and move-legality checking     */
+
+/* 26nov2008 no hash table                                                 */
+/* 29nov2008 all IO via myputchar(), mygetchar(), pseudo random generator  */
+
+#define VERBOSE
+
+#define W while
+#define M 0x88
+#define S 128
+#define I 8000
+
+long N, T;                  /* N=evaluated positions+S, T=recursion limit */
+short Q,O,K,R,k=16;        /* k=moving side */
+char *p,c[5],Z;   /* p=pointer to c, c=user input, computer output, Z=recursion counter */
+
+char L,
+w[]={0,2,2,7,-1,8,12,23},                      /* relative piece values    */
+o[]={-16,-15,-17,0,1,16,0,1,16,15,17,0,14,18,31,33,0, /* step-vector lists */
+     7,-1,11,6,8,3,6,                          /* 1st dir. in o[] per piece*/
+     6,3,5,7,4,5,3,6},                         /* initial piece setup      */
+b[]={     /* board is left part, center-pts table is right part, and dummy */
+  22, 19, 21, 23, 20, 21, 19, 22, 28, 21, 16, 13, 12, 13, 16, 21, 
+  18, 18, 18, 18, 18, 18, 18, 18, 22, 15, 10,  7,  6,  7, 10, 15, 
+   0,  0,  0,  0,  0,  0,  0,  0, 18, 11,  6,  3,  2,  3,  6, 11, 
+   0,  0,  0,  0,  0,  0,  0,  0, 16,  9,  4,  1,  0,  1,  4,  9, 
+   0,  0,  0,  0,  0,  0,  0,  0, 16,  9,  4,  1,  0,  1,  4,  9, 
+   0,  0,  0,  0,  0,  0,  0,  0, 18, 11,  6,  3,  2,  3,  6, 11, 
+   9,  9,  9,  9,  9,  9,  9,  9, 22, 15, 10,  7,  6,  7, 10, 15, 
+  14, 11, 13, 15, 12, 13, 11, 14, 28, 21, 16, 13, 12, 13, 16, 21, 0
+};
+
+volatile char breakpoint; /* for debugger */
+                                
+/* User interface routines */
+void myputchar(char c) {
+#ifdef EMUPC    // JCB{
+  fprintf(stderr, "%c", c);
+#endif    // }JCB
+}
+
+void myputs(const char *s) {
+  while(*s) myputchar(*s++);
+  myputchar('\n');
+}
+
+char mygetchar(void) {
+  return 10;                          /* self play computer with computer */
+#ifdef VERBOSE
+  return getchar();
+#else  
+  return 10;                          /* self play computer with computer */
+#endif  
+}
+
+/* 16bit pseudo random generator */
+#define MYRAND_MAX 65535
+
+unsigned short r = 1;                     /* pseudo random generator seed */
+
+void mysrand(unsigned short r_) {
+ r = r_;
+}
+
+unsigned short myrand(void) {
+ return r=((r<<11)+(r<<7)+r)>>1;
+}
+
+static void sp()
+{
+  void* x;
+  x = &x;
+  Serial.println((size_t)x, HEX);
+}
+
+short D(short q, short l, short e, byte E,byte z, byte n)                          /* recursive minimax search */
+     /* (q,l)=window, e=current eval. score, */
+     /* E=e.p. sqr.z=prev.dest, n=depth; return score */        
+{                       
+ short m,v,i,P,V,s;
+ unsigned char t,p,u,x,y,X,Y,H,B,j,d,h,F,G,C;
+ signed char r;
+
+ // if (0) { REPORT(Z); sp(); }
+ if (++Z>30) {                                     /* stack underrun check */
+  breakpoint=1;               /* AVR Studio 4 Breakpoint for stack underrun */
+  myputchar('u');
+  --Z;return e;                                    
+ }
+ 
+ q--;                                          /* adj. window: delay bonus */
+ k^=24;                                        /* change sides             */
+ d=Y=0;                                        /* start iter. from scratch */
+ X=myrand()&~M;                                /* start at random field    */
+ W(d++<n||d<3||                                /* iterative deepening loop */
+   z&K==I&&(N<T&d<98||                         /* root: deepen upto time   */
+   (K=X,L=Y&~M,d=3)))                          /* time's up: go do best    */
+ {x=B=X;                                       /* start scan at prev. best */
+  h=Y&S;                                       /* request try noncastl. 1st*/
+  P=d<3?I:D(-l,1-l,-e,S,0,d-3);                /* Search null move         */
+  m=-P<l|R>35?d>2?-I:e:-P;                     /* Prune or stand-pat       */
+  ++N;                                         /* node count (for timing)  */
+  do{u=b[x];                                   /* scan board looking for   */
+   if(u&k)                                     /*  own piece (inefficient!)*/
+   {r=p=u&7;                                   /* p = piece type (set r>0) */
+    j=o[p+16];                                 /* first step vector f.piece*/
+    W(r=p>2&r<0?-r:-o[++j])                    /* loop over directions o[] */
+    {A:                                        /* resume normal after best */
+     y=x;F=G=S;                                /* (x,y)=move, (F,G)=castl.R*/
+     do{                                       /* y traverses ray, or:     */
+      H=y=h?Y^h:y+r;                           /* sneak in prev. best move */
+      if(y&M)break;                            /* board edge hit           */
+      m=E-S&b[E]&&y-E<2&E-y<2?I:m;             /* bad castling             */
+      if(p<3&y==E)H^=16;                       /* shift capt.sqr. H if e.p.*/
+      t=b[H];if(t&k|p<3&!(y-x&7)-!t)break;     /* capt. own, bad pawn mode */
+      i=37*w[t&7]+(t&192);                     /* value of capt. piece t   */
+      m=i<0?I:m;                               /* K capture                */
+      if(m>=l&d>1)goto C;                      /* abort on fail high       */
+      v=d-1?e:i-p;                             /* MVV/LVA scoring          */
+      if(d-!t>1)                               /* remaining depth          */
+      {v=p<6?b[x+8]-b[y+8]:0;                  /* center positional pts.   */
+       b[G]=b[H]=b[x]=0;b[y]=u|32;             /* do move, set non-virgin  */
+       if(!(G&M))b[F]=k+6,v+=50;               /* castling: put R & score  */
+       v-=p-4|R>29?0:20;                       /* penalize mid-game K move */
+       if(p<3)                                 /* pawns:                   */
+       {v-=9*((x-2&M||b[x-2]-u)+               /* structure, undefended    */
+              (x+2&M||b[x+2]-u)-1              /*        squares plus bias */
+             +(b[x^16]==k+36))                 /* kling to non-virgin King */
+             -(R>>2);                          /* end-game Pawn-push bonus */
+        V=y+r+1&S?647-p:2*(u&y+16&32);         /* promotion or 6/7th bonus */
+        b[y]+=V;i+=V;                          /* change piece, add score  */
+       }
+       v+=e+i;V=m>q?m:q;                       /* new eval and alpha       */
+       C=d-1-(d>5&p>2&!t&!h);
+       C=R>29|d<3|P-I?C:d;                     /* extend 1 ply if in check */
+       do
+        s=C>2|v>V?-D(-l,-V,-v,                 /* recursive eval. of reply */
+                              F,0,C):v;        /* or fail low if futile    */
+       W(s>q&++C<d);v=s;
+       if(z&&K-I&&v+I&&x==K&y==L)              /* move pending & in root:  */
+       {Q=-e-i;O=F;                            /*   exit if legal & found  */
+        R+=i>>7;--Z;return l;                  /* captured non-P material  */
+       }
+       b[G]=k+6;b[F]=b[y]=0;b[x]=u;b[H]=t;     /* undo move,G can be dummy */
+      }
+      if(v>m)                                  /* new best, update max,best*/
+       m=v,X=x,Y=y|S&F;                        /* mark double move with S  */
+      if(h){h=0;goto A;}                       /* redo after doing old best*/
+      if(x+r-y|u&32|                           /* not 1st step,moved before*/
+         p>2&(p-4|j-7||                        /* no P & no lateral K move,*/
+         b[G=x+3^r>>1&7]-k-6                   /* no virgin R in corner G, */
+         ||b[G^1]|b[G^2])                      /* no 2 empty sq. next to R */
+        )t+=p<5;                               /* fake capt. for nonsliding*/
+      else F=y;                                /* enable e.p.              */
+     }W(!t);                                   /* if not capt. continue ray*/
+  }}}W((x=x+9&~M)-B);                          /* next sqr. of board, wrap */
+C:if(m>I-M|m<M-I)d=98;                         /* mate holds to any depth  */
+  m=m+I|P==I?m:0;                              /* best loses K: (stale)mate*/
+  if(z&&d>2)
+   {*c='a'+(X&7);c[1]='8'-(X>>4);c[2]='a'+(Y&7);c[3]='8'-(Y>>4&7);c[4]=0;
+    breakpoint=2;           /* AVR Studio 4 Breakpoint for moves, watch c[] */
+#ifdef EMUPC    // JCB{
+    fprintf(stderr, "%2d ply, %9d searched, score=%6d by %c%c%c%c\n",d-1,N-S,m,
+     'a'+(X&7),'8'-(X>>4),'a'+(Y&7),'8'-(Y>>4&7)); /* uncomment for Kibitz */   
+#else
+    REPORT(d);
+    Serial.println(c);
+#endif          // }JCB
+  }  
+ }                                             /*    encoded in X S,8 bits */
+ k^=24;                                        /* change sides back        */
+ --Z;return m+=m<e;                            /* delayed-loss bonus       */
+}
+
+void print_board()
+{
+ short N=-1;
+ W(++N<121)
+  myputchar(N&8&&(N+=7)?10:".?inkbrq?I?NKBRQ"[b[N]&15]);      /* Pawn is i */
+}
+
+static void p2(int &x, int &y, const char *c)
+{
+  x = 16 * (32 + 32 * (c[0] - 'a'));
+  y = 16 * ( 8 + 32 * ('8' - c[1]));
+}
+
+#define MOVETIME    10
+#define OVERSAMPLE  8
+
+int clocks[2];
+
+void draw_board()
+{
+//                .  ?  i  n  k  b  r  q  ?  I  ?  N  K  B  R  Q
+  byte xlat[] = { 0, 0, 0, 1, 5, 2, 3, 4, 0, 6, 0, 7, 11,8, 9,10 };
+
+  for (int i = 0; i < MOVETIME; i++) {
+    GD.cmd_gradient(0, 0, 0x101010, 480, 272, 0x202060);
+    GD.cmd_bgcolor(0x101020);
+
+    GD.Begin(BITMAPS);
+    GD.SaveContext();
+    GD.ColorRGB(0xfff0c0);
+    GD.ColorA(0xc0);
+    GD.cmd_scale(F16(32), F16(32));
+    GD.cmd_setmatrix();
+    GD.Vertex2ii(32, 8, 1, 0);
+    GD.RestoreContext();
+
+    int moving = -1;
+    if (c[0])
+      moving = 16 * ('8' - c[3]) + (c[2] - 'a');
+
+    GD.Begin(BITMAPS);
+    GD.ColorRGB(0xe0e0e0);
+    for (int y = 0; y < 8; y++)
+      for (int x = 0; x < 8; x++) {
+        int pos = 16 * y + x;
+        byte piece = b[pos] & 15;
+        if (pos != moving && piece != 0)
+          GD.Vertex2ii(32 + 32 * x, 8 + 32 * y, 0, xlat[piece]);
+      }
+
+    if (c[0]) {
+      GD.Begin(BITMAPS);
+      byte piece = b[moving] & 15;
+      GD.Cell(xlat[piece]);
+      int x0, y0, x1, y1;
+      p2(x0, y0, c + 0);
+      p2(x1, y1, c + 2);
+      GD.ColorRGB(0xffffff);    //' a{
+      GD.ColorA((255 / OVERSAMPLE) + 50);
+      for (int j = 0; j < OVERSAMPLE; j++) {
+        byte linear = 255 * (i * OVERSAMPLE + j) /
+                            (OVERSAMPLE * MOVETIME - 1);
+        byte scurve = sinus(linear);
+        int x = x0 + (long)(x1 - x0) * scurve / 255;
+        int y = y0 + (long)(y1 - y0) * scurve / 255;
+
+        GD.Vertex2f(x, y);
+      } //' }a
+      GD.ColorA(255);
+    }
+
+    GD.ColorRGB((k == 16) ? 0xffffffUL : 0x606060);
+    GD.cmd_clock(384,       60, 50, OPT_FLAT | OPT_NOSECS, 0, 0, clocks[0], 0);
+    GD.ColorRGB((k != 16) ? 0xffffffUL : 0x606060);
+    GD.cmd_clock(384, 272 - 60, 50, OPT_FLAT | OPT_NOSECS, 0, 0, clocks[1], 0);
+
+    GD.ColorRGB(0xffffff);
+    GD.cmd_text(384, 136, 30, OPT_CENTER, c);
+
+    GD.swap();
+  }
+}
+
+void loop()
+{
+
+#ifdef VERBOSE  // JCB{
+  print_board();
+#endif          // }JCB
+  draw_board();
+  K=I;                                               /* invalid move       */
+#if 0           // JCB{
+  p=c;W((*p++=mygetchar())>10);                      /* read input line    */
+  if(*c-10)K=*c-16*c[1]+799,L=c[2]-16*c[3]+799;      /* parse entered move */
+#endif          // }JCB
+  N=0;T=0x9;                                  /* T=Computer Play strength */
+ long t0 = millis();
+ if(!(D(-I,I,Q,O,1,3)>-I+1))                           /* think or check & do*/
+   for (;;);
+ int took = 60 * (millis() - t0) / 1000;
+ clocks[(k==16)] += took;
+}
+

+ 440 - 0
cobra.ino

@@ -0,0 +1,440 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "cobra_assets.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//                                  3D Projection
+////////////////////////////////////////////////////////////////////////////////
+
+static float model_mat[9] = { 1.0, 0.0, 0.0,
+                        0.0, 1.0, 0.0,
+                        0.0, 0.0, 1.0 };
+static float normal_mat[9] = { 1.0, 0.0, 0.0,
+                        0.0, 1.0, 0.0,
+                        0.0, 0.0, 1.0 };
+
+#define M(nm,i,j)       ((nm)[3 * (i) + (j)])
+
+void mult_matrices(float *a, float *b, float *c)
+{
+  int i, j, k;
+  float result[9];
+  for(i = 0; i < 3; i++) {
+    for(j = 0; j < 3; j++) {
+      M(result,i,j) = 0.0f;
+      for(k = 0; k < 3; k++) {
+        M(result,i,j) +=  M(a,i,k) *  M(b,k,j);
+      }
+    }
+  }
+  memcpy(c, result, sizeof(result));
+}
+
+// Based on glRotate()
+// Returns 3x3 rotation matrix in 'm'
+// and its invese in 'mi'
+
+static void rotate(float *m, float *mi, float angle, float *axis)
+{
+  float x = axis[0];
+  float y = axis[1];
+  float z = axis[2];
+
+  float s = sin(angle);
+  float c = cos(angle);
+
+  float xx = x*x*(1-c);
+  float xy = x*y*(1-c);
+  float xz = x*z*(1-c);
+  float yy = y*y*(1-c);
+  float yz = y*z*(1-c);
+  float zz = z*z*(1-c);
+
+  float xs = x * s;
+  float ys = y * s;
+  float zs = z * s;
+
+  m[0] = xx + c;
+  m[1] = xy - zs;
+  m[2] = xz + ys;
+
+  m[3] = xy + zs;
+  m[4] = yy + c;
+  m[5] = yz - xs;
+
+  m[6] = xz - ys;
+  m[7] = yz + xs;
+  m[8] = zz + c;
+
+  mi[0] = m[0];
+  mi[1] = xy + zs;
+  mi[2] = xz - ys;
+
+  mi[3] = xy - zs;
+  mi[4] = m[4];
+  mi[5] = yz + xs;
+
+  mi[6] = xz + ys;
+  mi[7] = yz - xs;
+  mi[8] = m[8];
+}
+
+static void rotation(float angle, float *axis)
+{
+  float mat[9];
+  float mati[9];
+
+  rotate(mat, mati, angle, axis);
+  mult_matrices(model_mat, mat, model_mat);
+  mult_matrices(mati, normal_mat, normal_mat);
+}
+
+#if 0 // JCB{
+class Vector3
+{
+public:
+    float x, y, z;
+
+    void set(float _x, float _y, float _z) {
+        x = _x;
+        y = _y;
+        z = _z;
+    }
+
+    // functions
+    void normalize() {
+      float invLength = 1 / sqrtf(x*x + y*y + z*z);
+      x *= invLength;
+      y *= invLength;
+      z *= invLength;
+    }
+    Vector3& operator-=(const Vector3& rhs) {
+      x -= rhs.x;
+      y -= rhs.y;
+      z -= rhs.z;
+    }
+    void cross(const Vector3& rhs) {
+        float _x = y*rhs.z - z*rhs.y;
+        float _y = z*rhs.x - x*rhs.z;
+        float _z = x*rhs.y - y*rhs.x;
+        set(_x, _y, _z);
+    }
+};
+#endif
+// }JCB
+
+#define N_VERTICES  (sizeof(COBRA_vertices) / 3)
+
+typedef struct {
+  int x, y;
+  float z;
+} xyz;
+
+static xyz projected[N_VERTICES];
+
+void project(float distance)
+{
+  byte vx;
+  const PROGMEM int8_t *pm = COBRA_vertices; 
+  const PROGMEM int8_t *pm_e = pm + sizeof(COBRA_vertices);
+  xyz *dst = projected;
+  int8_t x, y, z;
+
+  while (pm < pm_e) {
+    x = pgm_read_byte_near(pm++);
+    y = pgm_read_byte_near(pm++);
+    z = pgm_read_byte_near(pm++);
+    float xx = x * model_mat[0] + y * model_mat[3] + z * model_mat[6];
+    float yy = x * model_mat[1] + y * model_mat[4] + z * model_mat[7];
+    float zz = x * model_mat[2] + y * model_mat[5] + z * model_mat[8] + distance;
+    float q = 240 / (100 + zz);
+    dst->x = 16 * (240 + xx * q);
+    dst->y = 16 * (136 + yy * q);
+    dst->z = zz;
+    dst++;
+  }
+}
+
+static void transform_normal(int8_t &nx, int8_t &ny, int8_t &nz)
+{
+  int8_t xx = nx * normal_mat[0] + ny * normal_mat[1] + nz * normal_mat[2];
+  int8_t yy = nx * normal_mat[3] + ny * normal_mat[4] + nz * normal_mat[5];
+  int8_t zz = nx * normal_mat[6] + ny * normal_mat[7] + nz * normal_mat[8];
+  nx = xx;
+  ny = yy;
+  nz = zz;
+}
+
+#define EDGE_BYTES  5
+static byte visible_edges[EDGE_BYTES];
+
+void draw_faces()
+{
+  memset(visible_edges, 0, sizeof(visible_edges));
+
+  const PROGMEM uint8_t *p = COBRA_faces; 
+  byte n;
+  int c = 1;
+  Poly po;
+  while ((n = pgm_read_byte_near(p++)) != 0xff) {
+    int8_t nx = pgm_read_byte_near(p++);
+    int8_t ny = pgm_read_byte_near(p++);
+    int8_t nz = pgm_read_byte_near(p++);
+    byte face_edges[EDGE_BYTES];
+    for (byte i = 0; i < EDGE_BYTES; i++)
+      face_edges[i] = pgm_read_byte_near(p++);
+    byte v1 = pgm_read_byte_near(p);
+    byte v2 = pgm_read_byte_near(p + 1);
+    byte v3 = pgm_read_byte_near(p + 2);
+    long x1 = projected[v1].x;
+    long y1 = projected[v1].y;
+    long x2 = projected[v2].x;
+    long y2 = projected[v2].y;
+    long x3 = projected[v3].x;
+    long y3 = projected[v3].y;
+    long area = (x1 - x3) * (y2 - y1) - (x1 - x2) * (y3 - y1);
+
+    if (area > 0) {
+      for (byte i = 0; i < EDGE_BYTES; i++)
+        visible_edges[i] |= face_edges[i];
+      po.begin();
+      for (int i = 0; i < n; i++) {
+        byte vi = pgm_read_byte_near(p++);
+        xyz *v = &projected[vi];
+        po.v(v->x, v->y);
+      }
+      {
+        transform_normal(nx, ny, nz);
+
+        uint16_t r = 10, g = 10, b = 20;  // Ambient
+
+        int d = -ny;                      // diffuse light from +ve Y
+        if (d > 0) {
+          r += d >> 2;
+          g += d >> 1;
+          b += d;
+        }
+                                          // use specular half angle
+        d = ny * -90 + nz * -90;          // Range -16384 to +16384
+        if (d > 8192) {
+          byte l = pgm_read_byte_near(shiny + ((d - 8192) >> 4));
+          r += l;
+          g += l;
+          b += l;
+        }
+
+        /*  JCB{
+        d = nx;
+        if (d > 0)  
+          r += d >> 3;
+        d = -nx;
+        if (d > 0) 
+          g += d >> 3; }JCB */  
+        GD.ColorRGB(min(255, r), min(255, g), min(255, b));
+      }
+      po.draw();
+    } else {
+      p += n;
+    }
+    c += 1;
+  }
+}
+
+void draw_edges()
+{
+  GD.ColorRGB(0x2e666e);
+  GD.Begin(LINES);
+  GD.LineWidth(20);
+
+  const PROGMEM uint8_t *p = COBRA_edges; 
+  byte *pvis = visible_edges;
+  byte vis;
+
+  for (byte i = 0; i < sizeof(COBRA_edges) / 2; i++) {
+    if ((i & 7) == 0)
+      vis = *pvis++;
+    byte v0 = pgm_read_byte_near(p++);
+    byte v1 = pgm_read_byte_near(p++);
+
+    if (vis & 1) {
+      int x0 = projected[v0].x;
+      int y0 = projected[v0].y;
+      int x1 = projected[v1].x;
+      int y1 = projected[v1].y;
+
+      GD.Vertex2f(x0,y0);
+      GD.Vertex2f(x1,y1);
+    }
+    vis >>= 1;
+  }
+}
+
+static void draw_navlight(byte nf)
+{
+  float l0z = projected[N_VERTICES - 2].z;
+  float l1z = projected[N_VERTICES - 1].z;
+  byte i;
+  if (nf == 0)  // draw the one with smallest z
+    i = (l0z < l1z) ? (N_VERTICES - 2) : (N_VERTICES - 1);
+  else
+    i = (l0z < l1z) ? (N_VERTICES - 1) : (N_VERTICES - 2);
+
+  GD.SaveContext();
+  GD.BlendFunc(SRC_ALPHA, ONE);
+  GD.Begin(BITMAPS);
+  GD.BitmapHandle(LIGHT_HANDLE);
+ 
+  GD.ColorRGB((i == N_VERTICES - 2) ? 0xfe2b18 : 0x4fff82);
+  GD.Vertex2f(projected[i].x - (16 * LIGHT_WIDTH / 2),
+              projected[i].y - (16 * LIGHT_WIDTH / 2));
+  GD.RestoreContext();
+}
+
+/*****************************************************************/
+
+/* simple trackball-like motion control */
+/* Based on projtex.c - by David Yu and David Blythe, SGI */
+
+float angle, axis[3] = {0,1,0};
+float lastPos[3];
+
+void
+ptov(int x, int y, int width, int height, float v[3])
+{
+  float d, a;
+
+  /* project x,y onto a hemi-sphere centered within width, height */
+  v[0] = (2.0 * x - width) / width;
+  v[1] = (2.0 * y - height) / height;
+  d = sqrt(v[0] * v[0] + v[1] * v[1]);
+  v[2] = cos((M_PI / 2.0) * ((d < 1.0) ? d : 1.0));
+  a = 1.0 / sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
+  v[0] *= a;
+  v[1] *= a;
+  v[2] *= a;
+}
+
+void
+startMotion(int x, int y)
+{
+  angle = 0.0;
+  ptov(x, y, 480, 272, lastPos);
+}
+
+void
+trackMotion(int x, int y)
+{
+  float curPos[3], dx, dy, dz;
+
+  ptov(x, y, 480, 272, curPos);
+
+  dx = curPos[0] - lastPos[0];
+  dy = curPos[1] - lastPos[1];
+  dz = curPos[2] - lastPos[2];
+  angle = (M_PI / 2) * sqrt(dx * dx + dy * dy + dz * dz);
+
+  axis[0] = lastPos[1] * curPos[2] - lastPos[2] * curPos[1];
+  axis[1] = lastPos[2] * curPos[0] - lastPos[0] * curPos[2];
+  axis[2] = lastPos[0] * curPos[1] - lastPos[1] * curPos[0];
+
+  float mag = 1 / sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
+  axis[0] *= mag;
+  axis[1] *= mag;
+  axis[2] *= mag;
+
+  lastPos[0] = curPos[0];
+  lastPos[1] = curPos[1];
+  lastPos[2] = curPos[2];
+}
+
+/*****************************************************************/
+
+
+void setup()
+{
+  Serial.begin(57600);
+  GD.begin();
+  LOAD_ASSETS();
+  GD.BitmapHandle(BACKGROUND_HANDLE);
+  GD.BitmapSize(BILINEAR, REPEAT, REPEAT, 480, 272);
+#ifdef EMUPC    // JCB{
+  // startMotion(240, 136);
+  // trackMotion(240, 138);
+#endif          // }JCB
+}
+
+static byte prev_touching;
+static uint16_t t;
+
+static void draw_sun(int x, int y, int rot)
+{
+  GD.cmd_loadidentity();
+  GD.cmd_translate(F16(SUN_WIDTH / 2), F16(SUN_WIDTH / 2));
+  GD.cmd_rotate(rot);
+  GD.cmd_translate(-F16(SUN_WIDTH / 2), -F16(SUN_WIDTH / 2));
+  GD.cmd_setmatrix();
+  GD.Vertex2f(x - (16 * SUN_WIDTH / 2), y - (16 * SUN_WIDTH / 2));
+}
+
+void loop()
+{
+  GD.Begin(BITMAPS);
+  GD.SaveContext();
+  GD.BitmapHandle(BACKGROUND_HANDLE);
+  GD.cmd_translate(-(long)t << 14, (long)t << 13);
+  GD.cmd_rotate(3312);
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(0, 0, 0, 0);
+  GD.RestoreContext();
+
+  int et = t - 720;
+  int sun_x = (480 * 16) - (et << 2),
+      sun_y = (100 * 16) + (et << 1);
+  GD.SaveContext();
+  GD.PointSize(52 * 16);
+  GD.ColorRGB(0x000000);
+  GD.Begin(POINTS);
+  GD.Vertex2f(sun_x, sun_y);
+  GD.RestoreContext();
+
+  GD.SaveContext();
+  GD.Begin(BITMAPS);
+  GD.BlendFunc(ONE, ONE);
+  GD.BitmapHandle(SUN_HANDLE);
+  GD.ColorRGB(0xb0a090);
+  draw_sun(sun_x, sun_y, t << 6);
+  draw_sun(sun_x, sun_y, -t << 6);
+  GD.RestoreContext();
+
+  GD.get_inputs();
+  byte touching = (GD.inputs.x != -32768);
+  if (!prev_touching && touching)
+    startMotion(GD.inputs.x, GD.inputs.y);
+  else if (touching)
+    trackMotion(GD.inputs.x, GD.inputs.y);
+  prev_touching = touching;
+
+  unsigned long t0 = micros();
+
+  if (angle != 0.0f)
+    rotation(angle, axis);
+
+  project(0);
+  draw_navlight(1);
+  draw_faces();
+  GD.RestoreContext();
+  draw_edges();
+  draw_navlight(0);
+  GD.RestoreContext();
+#ifndef EMUPC // JCB{
+  GD.cmd_number(240, 7, 26, OPT_CENTER, micros() - t0);
+#else
+  // GD.cmd_number(240, 7, 26, OPT_CENTER, t);
+#endif        // }JCB
+
+  GD.swap();
+
+  t++;
+}

+ 982 - 0
converted-assets/blobs_assets.h

@@ -0,0 +1,982 @@
+static const PROGMEM uint8_t __assets[14648] = {
+0, 0, 0, 5, 0, 0, 0, 1, 128, 0, 1, 8, 128, 0, 25, 7, 34, 255, 255,
+255, 0, 0, 0, 0, 120, 156, 21, 187, 103, 144, 36, 233, 125, 230, 119,
+113, 138, 80, 92, 156, 116, 188, 56, 146, 34, 9, 194, 145, 4, 22, 192,
+98, 23, 235, 237, 172, 157, 153, 29, 179, 227, 93, 123, 223, 213, 93,
+222, 123, 95, 89, 46, 51, 43, 125, 86, 86, 150, 247, 222, 251, 174,
+170, 246, 102, 252, 204, 58, 236, 98, 1, 66, 32, 113, 36, 168, 160,
+36, 138, 148, 66, 10, 221, 7, 125, 211, 59, 29, 211, 17, 53, 221, 149,
+249, 230, 251, 190, 255, 255, 243, 252, 158, 202, 236, 108, 46, 140,
+227, 120, 32, 128, 194, 30, 139, 203, 176, 242, 254, 194, 138, 216,
+135, 162, 36, 23, 230, 89, 138, 37, 48, 2, 103, 131, 108, 152, 99,
+105, 126, 107, 212, 109, 14, 135, 19, 255, 205, 69, 165, 213, 31, 137,
+196, 115, 161, 80, 40, 76, 194, 28, 67, 96, 8, 78, 34, 20, 133, 6, 60,
+186, 229, 121, 14, 183, 163, 86, 189, 217, 161, 81, 73, 21, 82, 185,
+94, 38, 214, 26, 165, 18, 141, 203, 195, 37, 163, 56, 201, 6, 19, 122,
+149, 195, 9, 193, 72, 32, 146, 140, 69, 51, 185, 108, 50, 23, 167, 41,
+28, 37, 16, 31, 6, 67, 86, 253, 202, 39, 107, 98, 129, 155, 165, 248,
+76, 34, 204, 18, 52, 139, 83, 193, 16, 205, 131, 75, 136, 166, 6, 147,
+78, 165, 63, 57, 177, 221, 90, 82, 217, 97, 46, 146, 202, 114, 177,
+16, 11, 190, 2, 36, 133, 80, 36, 140, 145, 88, 192, 107, 218, 152, 39,
+112, 135, 223, 100, 182, 88, 117, 18, 145, 82, 173, 210, 202, 196, 58,
+155, 70, 161, 176, 250, 249, 80, 152, 75, 164, 88, 70, 166, 119, 185,
+125, 48, 226, 230, 114, 217, 120, 54, 23, 79, 37, 19, 17, 26, 39, 24,
+52, 0, 38, 224, 52, 74, 110, 136, 213, 70, 140, 227, 194, 133, 124,
+156, 167, 8, 134, 123, 54, 121, 46, 18, 229, 226, 185, 222, 120, 88,
+108, 245, 247, 29, 215, 102, 54, 109, 24, 207, 103, 243, 177, 84, 44,
+20, 226, 192, 200, 28, 129, 177, 1, 56, 128, 17, 62, 135, 120, 14,
+229, 32, 175, 221, 98, 82, 169, 164, 74, 181, 81, 39, 219, 20, 27,
+156, 58, 161, 194, 228, 12, 50, 177, 88, 152, 199, 188, 155, 42, 23,
+12, 123, 81, 15, 25, 137, 71, 179, 201, 72, 56, 26, 143, 80, 20, 19,
+196, 9, 154, 132, 221, 78, 237, 45, 25, 196, 132, 162, 241, 116, 53,
+159, 77, 242, 33, 150, 11, 133, 192, 32, 177, 72, 56, 148, 29, 238,
+244, 43, 245, 250, 174, 241, 242, 212, 38, 4, 135, 34, 233, 84, 46,
+205, 51, 97, 134, 9, 96, 65, 6, 167, 41, 36, 64, 19, 46, 163, 118, 17,
+13, 185, 221, 86, 135, 73, 34, 53, 218, 12, 90, 157, 74, 162, 49, 58,
+181, 10, 179, 205, 1, 83, 233, 72, 36, 195, 226, 171, 74, 59, 10, 57,
+252, 126, 58, 149, 74, 68, 82, 41, 158, 15, 135, 192, 242, 7, 49, 148,
+13, 184, 253, 176, 234, 146, 210, 194, 70, 19, 153, 84, 45, 31, 75,
+167, 57, 58, 20, 101, 99, 17, 14, 188, 39, 146, 220, 218, 233, 212,
+90, 189, 19, 249, 181, 101, 185, 27, 166, 162, 217, 88, 58, 30, 98,
+130, 76, 0, 37, 131, 65, 134, 197, 48, 38, 136, 121, 181, 186, 85,
+134, 247, 217, 44, 22, 131, 92, 101, 116, 186, 229, 70, 133, 72, 165,
+52, 169, 52, 144, 221, 135, 35, 209, 116, 50, 194, 208, 98, 153, 41,
+224, 245, 160, 88, 44, 145, 73, 68, 248, 100, 144, 99, 194, 56, 236,
+199, 80, 80, 105, 24, 142, 75, 47, 57, 220, 68, 58, 89, 170, 182, 26,
+201, 116, 134, 39, 163, 197, 120, 36, 21, 14, 5, 99, 209, 124, 103,
+212, 45, 119, 118, 182, 164, 211, 2, 181, 203, 71, 48, 177, 92, 54,
+202, 243, 65, 10, 134, 3, 60, 19, 34, 253, 44, 71, 33, 94, 141, 100,
+45, 25, 67, 29, 6, 179, 86, 173, 178, 216, 189, 122, 249, 166, 64,
+166, 80, 105, 229, 54, 39, 204, 122, 67, 41, 10, 67, 146, 98, 129, 30,
+66, 112, 156, 138, 70, 83, 241, 40, 27, 101, 24, 138, 165, 176, 0, 18,
+8, 248, 73, 206, 239, 151, 220, 128, 60, 108, 166, 80, 175, 214, 155,
+181, 82, 38, 30, 141, 149, 114, 217, 84, 12, 140, 158, 200, 181, 39,
+91, 149, 222, 110, 83, 188, 44, 55, 64, 94, 130, 166, 83, 153, 112,
+48, 72, 83, 40, 225, 167, 105, 142, 68, 48, 60, 136, 57, 53, 27, 107,
+217, 8, 230, 179, 232, 13, 74, 133, 217, 225, 50, 108, 174, 46, 139,
+149, 18, 181, 202, 229, 66, 66, 4, 151, 74, 50, 72, 86, 184, 98, 3,
+51, 197, 232, 72, 44, 147, 137, 178, 52, 69, 146, 20, 75, 147, 24, 70,
+248, 25, 2, 117, 137, 175, 251, 184, 124, 186, 86, 170, 151, 219, 157,
+74, 38, 204, 135, 192, 171, 84, 50, 149, 204, 228, 51, 221, 209, 86,
+183, 213, 206, 75, 54, 212, 58, 7, 140, 211, 108, 40, 12, 214, 37,
+192, 248, 9, 156, 32, 232, 128, 7, 37, 40, 194, 44, 91, 90, 75, 49,
+62, 135, 77, 173, 53, 106, 181, 90, 189, 112, 121, 105, 94, 44, 148,
+171, 117, 86, 27, 40, 121, 62, 149, 205, 112, 137, 53, 161, 131, 197,
+81, 138, 142, 199, 64, 245, 179, 44, 193, 17, 44, 195, 51, 52, 205, 7,
+105, 18, 113, 138, 175, 147, 185, 108, 166, 80, 168, 55, 154, 173,
+106, 62, 26, 79, 148, 218, 213, 98, 62, 30, 206, 165, 114, 253, 209,
+120, 88, 41, 196, 101, 82, 171, 217, 13, 106, 238, 217, 49, 116, 144,
+192, 240, 0, 29, 64, 241, 0, 230, 15, 32, 152, 93, 58, 179, 150, 38,
+237, 6, 173, 6, 236, 190, 78, 34, 89, 93, 156, 157, 95, 90, 21, 202,
+12, 122, 139, 27, 242, 147, 177, 84, 153, 11, 204, 41, 141, 48, 130,
+176, 193, 72, 34, 150, 140, 5, 41, 140, 38, 57, 42, 196, 211, 160,
+215, 35, 172, 223, 165, 152, 99, 42, 241, 112, 188, 216, 108, 180, 43,
+149, 82, 54, 95, 109, 150, 58, 141, 124, 152, 203, 36, 179, 64, 124,
+90, 149, 92, 66, 38, 113, 64, 62, 47, 246, 76, 150, 80, 132, 35, 16,
+220, 135, 251, 224, 0, 137, 249, 32, 167, 223, 40, 157, 89, 225, 253,
+102, 149, 72, 46, 215, 56, 77, 122, 245, 234, 204, 194, 252, 34, 248,
+143, 78, 172, 49, 89, 3, 12, 31, 206, 224, 208, 130, 64, 105, 118,
+248, 72, 160, 40, 160, 183, 49, 2, 69, 80, 138, 162, 129, 208, 97, 84,
+8, 236, 165, 69, 156, 76, 112, 124, 44, 221, 172, 181, 42, 229, 114,
+173, 216, 104, 86, 91, 181, 82, 42, 156, 76, 231, 43, 253, 30, 248,
+89, 86, 38, 177, 57, 189, 16, 28, 32, 40, 216, 231, 11, 209, 48, 234,
+246, 120, 2, 8, 226, 114, 90, 237, 46, 149, 124, 117, 153, 178, 104,
+20, 50, 185, 88, 109, 213, 107, 21, 203, 11, 139, 171, 2, 137, 70, 43,
+93, 19, 43, 173, 72, 144, 96, 146, 180, 123, 118, 126, 67, 235, 176,
+121, 112, 156, 193, 8, 196, 239, 131, 125, 64, 123, 185, 16, 133, 67,
+1, 2, 163, 89, 183, 42, 66, 5, 153, 104, 166, 82, 174, 150, 242, 213,
+106, 189, 222, 107, 52, 234, 185, 68, 34, 151, 74, 229, 219, 141, 74,
+177, 20, 151, 2, 1, 129, 108, 46, 36, 224, 113, 250, 221, 62, 10, 241,
+89, 172, 70, 155, 213, 225, 178, 154, 204, 122, 137, 116, 97, 201, 35,
+83, 42, 149, 218, 77, 169, 78, 37, 22, 47, 172, 44, 207, 205, 139,
+212, 42, 193, 178, 66, 175, 117, 98, 40, 202, 145, 174, 197, 233, 5,
+141, 197, 236, 241, 185, 92, 110, 183, 203, 106, 115, 219, 32, 167,
+11, 230, 113, 143, 221, 13, 187, 40, 6, 209, 209, 30, 138, 142, 38,
+51, 201, 72, 44, 22, 75, 23, 43, 173, 122, 189, 154, 79, 38, 98, 17,
+38, 146, 45, 23, 51, 28, 35, 18, 43, 77, 90, 131, 211, 227, 241, 128,
+19, 216, 60, 1, 175, 94, 171, 84, 40, 77, 54, 157, 66, 41, 22, 108,
+78, 77, 217, 100, 98, 153, 76, 50, 63, 187, 176, 180, 177, 185, 182,
+178, 52, 181, 32, 148, 201, 54, 230, 69, 38, 157, 205, 235, 245, 16,
+152, 252, 246, 226, 138, 82, 107, 49, 168, 149, 6, 189, 73, 175, 215,
+235, 4, 50, 225, 134, 10, 242, 106, 84, 54, 187, 45, 64, 250, 92, 81,
+187, 7, 38, 185, 40, 232, 80, 130, 11, 133, 51, 249, 68, 42, 30, 33,
+48, 18, 70, 8, 54, 25, 163, 156, 214, 141, 117, 177, 72, 44, 213, 89,
+156, 118, 157, 70, 111, 130, 92, 118, 173, 68, 176, 42, 16, 11, 133,
+75, 11, 179, 51, 119, 174, 92, 214, 11, 215, 132, 162, 233, 75, 31,
+158, 58, 123, 235, 214, 212, 237, 155, 215, 174, 206, 78, 47, 47, 220,
+92, 87, 42, 141, 14, 15, 132, 120, 23, 47, 222, 89, 82, 72, 36, 155,
+203, 2, 241, 166, 68, 178, 182, 190, 112, 115, 238, 214, 237, 217,
+245, 181, 213, 101, 9, 152, 133, 195, 6, 197, 77, 22, 179, 222, 230,
+50, 218, 125, 110, 6, 20, 5, 142, 16, 1, 200, 104, 178, 106, 20, 42,
+139, 199, 101, 150, 172, 207, 93, 157, 153, 158, 190, 189, 40, 148,
+138, 214, 231, 86, 69, 26, 133, 112, 109, 97, 250, 230, 252, 220, 220,
+244, 141, 203, 55, 207, 125, 116, 230, 140, 96, 250, 218, 237, 219,
+159, 124, 240, 147, 31, 191, 248, 202, 27, 111, 191, 249, 193, 155,
+175, 124, 248, 225, 233, 79, 206, 221, 156, 95, 86, 168, 205, 102,
+163, 252, 234, 135, 151, 102, 22, 102, 167, 166, 111, 223, 6, 75, 180,
+112, 231, 202, 217, 215, 95, 126, 229, 221, 115, 103, 206, 93, 248,
+248, 244, 149, 155, 235, 192, 124, 160, 229, 69, 225, 202, 134, 80,
+44, 183, 128, 229, 213, 171, 197, 114, 133, 112, 254, 214, 141, 75,
+151, 79, 95, 152, 89, 156, 187, 125, 246, 237, 119, 222, 120, 247,
+226, 212, 234, 166, 80, 33, 153, 187, 189, 56, 183, 120, 231, 198,
+165, 115, 103, 62, 186, 116, 225, 253, 143, 78, 189, 242, 218, 75,
+175, 190, 250, 254, 197, 247, 222, 248, 224, 227, 215, 127, 250, 195,
+31, 254, 213, 75, 175, 253, 226, 187, 47, 254, 244, 123, 223, 255,
+254, 207, 94, 122, 245, 212, 59, 111, 95, 188, 114, 225, 234, 149,
+143, 94, 254, 201, 203, 239, 190, 246, 202, 59, 239, 127, 112, 250,
+227, 11, 31, 189, 254, 252, 75, 47, 106, 157, 86, 44, 75, 37, 88, 119,
+32, 94, 222, 221, 107, 99, 14, 187, 151, 98, 243, 131, 81, 119, 247,
+151, 95, 252, 234, 233, 131, 175, 127, 255, 15, 191, 121, 210, 205,
+82, 33, 36, 90, 44, 103, 179, 245, 201, 209, 238, 227, 167, 79, 246,
+31, 61, 125, 242, 104, 183, 217, 105, 118, 187, 245, 156, 199, 96,
+131, 180, 66, 181, 120, 69, 173, 91, 95, 186, 42, 114, 59, 60, 126,
+147, 82, 126, 103, 74, 239, 210, 137, 20, 160, 23, 180, 86, 157, 80,
+170, 209, 123, 104, 2, 227, 131, 190, 53, 129, 114, 67, 19, 170, 148,
+170, 141, 184, 107, 126, 106, 69, 152, 4, 69, 190, 221, 28, 109, 213,
+75, 147, 7, 199, 251, 125, 154, 138, 242, 177, 120, 99, 178, 187, 51,
+185, 255, 217, 239, 126, 247, 47, 255, 247, 255, 245, 175, 255, 252,
+127, 252, 254, 219, 167, 247, 143, 30, 126, 249, 187, 191, 255, 167,
+127, 250, 63, 159, 236, 127, 246, 249, 189, 193, 193, 189, 251, 7,
+253, 118, 179, 15, 44, 169, 16, 134, 131, 169, 168, 15, 179, 233, 33,
+189, 112, 254, 170, 11, 243, 147, 12, 230, 70, 13, 2, 35, 236, 52,
+219, 125, 126, 46, 24, 130, 201, 98, 46, 215, 185, 127, 239, 219, 127,
+253, 231, 95, 230, 162, 249, 100, 123, 119, 188, 61, 60, 172, 135, 48,
+79, 58, 29, 75, 86, 218, 163, 237, 131, 189, 173, 230, 225, 163, 163,
+126, 39, 154, 30, 15, 91, 141, 230, 214, 209, 246, 254, 241, 189, 175,
+190, 254, 221, 31, 254, 151, 175, 190, 250, 226, 120, 167, 209, 239,
+85, 91, 147, 227, 163, 71, 223, 228, 19, 181, 65, 51, 95, 107, 183,
+106, 133, 90, 173, 158, 5, 39, 8, 56, 176, 80, 192, 237, 116, 234,
+237, 154, 205, 235, 51, 36, 130, 4, 99, 184, 15, 148, 138, 217, 237,
+243, 161, 84, 50, 30, 97, 176, 104, 171, 213, 29, 61, 248, 234, 225,
+215, 127, 251, 56, 18, 10, 103, 135, 213, 114, 189, 221, 42, 133, 35,
+225, 116, 177, 148, 202, 247, 38, 135, 199, 119, 15, 182, 78, 30, 238,
+245, 170, 220, 248, 171, 135, 199, 189, 230, 232, 240, 232, 193, 227,
+7, 223, 252, 230, 183, 255, 240, 251, 39, 39, 251, 251, 123, 163, 131,
+221, 193, 120, 235, 240, 224, 193, 125, 60, 88, 109, 87, 147, 201,
+106, 163, 85, 43, 102, 11, 149, 84, 148, 69, 220, 48, 31, 194, 237,
+62, 8, 117, 8, 167, 150, 227, 241, 16, 159, 228, 72, 200, 105, 133,
+16, 2, 216, 82, 42, 158, 9, 133, 147, 213, 201, 246, 221, 123, 15, 14,
+30, 253, 230, 113, 44, 146, 171, 116, 27, 165, 102, 189, 210, 78, 87,
+202, 149, 65, 189, 209, 233, 111, 29, 222, 125, 120, 184, 251, 224,
+100, 191, 159, 39, 78, 126, 115, 124, 178, 59, 220, 59, 218, 63, 188,
+255, 224, 171, 95, 127, 245, 235, 111, 31, 109, 239, 157, 128, 129,
+143, 6, 147, 163, 147, 71, 95, 126, 77, 243, 133, 106, 62, 21, 47, 54,
+42, 153, 116, 190, 83, 79, 199, 128, 239, 99, 33, 142, 65, 193, 96,
+198, 141, 235, 11, 233, 124, 34, 148, 15, 227, 144, 15, 49, 232, 157,
+136, 215, 23, 139, 4, 249, 112, 190, 210, 221, 61, 56, 62, 126, 240,
+232, 201, 211, 112, 178, 208, 233, 55, 107, 149, 122, 163, 150, 203,
+151, 234, 157, 118, 111, 176, 211, 63, 121, 242, 248, 238, 209, 195,
+131, 73, 59, 31, 124, 244, 251, 71, 15, 142, 118, 15, 246, 118, 39, 7,
+119, 31, 63, 253, 226, 139, 47, 15, 143, 238, 63, 56, 153, 236, 77, 6,
+245, 225, 209, 195, 95, 126, 201, 176, 209, 52, 240, 165, 92, 185, 16,
+47, 87, 218, 221, 90, 138, 9, 177, 24, 199, 2, 12, 13, 192, 154, 245,
+171, 243, 89, 48, 221, 82, 148, 242, 123, 156, 86, 27, 66, 161, 112,
+144, 103, 249, 88, 169, 63, 220, 63, 58, 56, 124, 242, 217, 253, 199,
+217, 104, 185, 219, 6, 199, 213, 171, 213, 124, 190, 208, 46, 55, 251,
+253, 241, 232, 248, 139, 175, 142, 143, 14, 182, 6, 141, 92, 248, 248,
+243, 39, 143, 238, 29, 15, 183, 247, 187, 227, 131, 227, 135, 79, 239,
+63, 5, 227, 63, 188, 183, 189, 187, 213, 169, 54, 247, 78, 30, 31, 4,
+112, 0, 101, 225, 68, 170, 90, 72, 149, 138, 205, 78, 167, 204, 167,
+98, 120, 144, 227, 24, 216, 237, 182, 111, 94, 154, 77, 230, 227, 133,
+114, 42, 76, 83, 110, 39, 202, 177, 108, 24, 112, 116, 50, 83, 27,
+236, 109, 31, 28, 236, 159, 60, 62, 250, 44, 73, 85, 59, 205, 74, 161,
+82, 45, 86, 11, 137, 116, 171, 82, 175, 142, 182, 39, 247, 159, 60,
+186, 187, 183, 211, 110, 85, 242, 225, 254, 163, 251, 247, 78, 14,
+183, 198, 59, 253, 237, 189, 157, 123, 15, 239, 62, 62, 57, 57, 120,
+112, 119, 111, 175, 89, 173, 116, 123, 195, 187, 119, 17, 56, 196,
+115, 137, 80, 162, 82, 203, 103, 74, 173, 65, 171, 2, 196, 153, 102,
+105, 156, 198, 97, 47, 162, 184, 49, 27, 207, 101, 43, 213, 118, 54,
+30, 132, 9, 14, 112, 59, 11, 0, 175, 92, 172, 245, 119, 118, 15, 14,
+38, 91, 71, 143, 254, 150, 167, 11, 181, 78, 181, 80, 169, 20, 203,
+185, 120, 58, 83, 170, 181, 135, 187, 7, 143, 239, 221, 63, 30, 118,
+90, 245, 92, 149, 111, 60, 220, 219, 63, 57, 217, 59, 60, 220, 26,
+237, 238, 63, 122, 112, 252, 248, 193, 253, 189, 163, 123, 123, 147,
+70, 37, 209, 31, 180, 79, 142, 3, 112, 144, 98, 34, 116, 172, 82, 201,
+36, 11, 165, 97, 175, 144, 76, 198, 41, 64, 80, 52, 88, 127, 88, 55,
+61, 149, 79, 39, 203, 165, 90, 58, 198, 177, 145, 84, 60, 72, 81, 128,
+158, 27, 197, 114, 119, 119, 119, 178, 63, 232, 13, 238, 125, 19, 15,
+229, 43, 173, 118, 33, 87, 47, 21, 178, 209, 116, 42, 89, 28, 14, 119,
+239, 30, 223, 61, 222, 25, 183, 154, 77, 64, 212, 141, 167, 253, 163,
+207, 30, 236, 129, 221, 216, 218, 62, 124, 120, 114, 242, 240, 222,
+189, 187, 247, 142, 199, 173, 118, 35, 215, 218, 238, 222, 125, 234,
+119, 224, 56, 201, 49, 92, 174, 16, 79, 101, 114, 237, 38, 176, 7, 64,
+127, 40, 202, 82, 94, 216, 109, 88, 157, 138, 167, 99, 133, 76, 156,
+231, 35, 97, 62, 17, 231, 88, 138, 142, 4, 211, 249, 250, 214, 112,
+114, 176, 211, 111, 13, 142, 191, 141, 50, 133, 114, 173, 154, 41,
+148, 243, 89, 192, 195, 233, 116, 181, 55, 28, 143, 119, 143, 70, 219,
+91, 160, 163, 82, 177, 96, 254, 113, 247, 228, 209, 201, 241, 225,
+100, 60, 222, 217, 57, 190, 119, 116, 15, 140, 127, 247, 100, 220, 29,
+245, 42, 213, 206, 232, 139, 199, 14, 59, 138, 163, 28, 206, 229, 210,
+225, 84, 52, 3, 150, 140, 99, 104, 198, 233, 69, 131, 64, 222, 236,
+178, 249, 169, 112, 38, 93, 42, 196, 195, 97, 176, 245, 201, 100, 144,
+14, 144, 76, 40, 153, 107, 111, 183, 219, 195, 81, 175, 219, 187, 247,
+91, 138, 76, 166, 147, 201, 104, 161, 16, 201, 68, 227, 217, 116, 174,
+209, 239, 110, 245, 199, 187, 227, 113, 183, 93, 47, 166, 56, 95, 248,
+238, 224, 222, 147, 147, 227, 227, 237, 173, 201, 214, 214, 254, 193,
+241, 201, 221, 227, 221, 163, 163, 225, 160, 63, 172, 53, 155, 237,
+207, 119, 45, 118, 31, 17, 224, 249, 88, 54, 202, 197, 34, 113, 48,
+19, 54, 196, 195, 78, 23, 48, 75, 14, 215, 45, 223, 188, 147, 204,
+117, 106, 141, 52, 88, 121, 62, 28, 141, 81, 176, 7, 176, 86, 60, 219,
+108, 181, 26, 189, 110, 163, 61, 58, 248, 45, 79, 145, 108, 136, 12,
+70, 179, 96, 129, 194, 249, 108, 173, 209, 27, 244, 90, 253, 201, 100,
+220, 105, 53, 106, 25, 198, 22, 188, 59, 121, 240, 217, 221, 227, 195,
+237, 253, 237, 237, 157, 195, 163, 195, 123, 199, 39, 123, 187, 163,
+193, 160, 51, 108, 54, 43, 249, 135, 67, 139, 203, 15, 18, 79, 50, 22,
+161, 217, 96, 40, 146, 43, 69, 64, 12, 243, 90, 237, 8, 199, 51, 176,
+122, 237, 242, 98, 46, 55, 104, 215, 202, 137, 16, 29, 139, 71, 57,
+194, 11, 130, 37, 21, 6, 219, 212, 237, 15, 39, 157, 198, 240, 248,
+247, 89, 20, 165, 120, 10, 15, 230, 64, 143, 132, 210, 249, 126, 179,
+211, 239, 246, 58, 163, 241, 160, 217, 237, 212, 10, 152, 34, 241,
+232, 222, 195, 7, 135, 39, 247, 14, 246, 182, 119, 247, 239, 63, 60,
+184, 187, 127, 114, 188, 59, 26, 247, 7, 131, 114, 171, 86, 125, 212,
+182, 121, 81, 20, 97, 195, 241, 20, 129, 48, 108, 40, 82, 140, 128,
+136, 228, 212, 154, 188, 52, 233, 179, 138, 22, 206, 207, 198, 18,
+221, 78, 177, 148, 14, 147, 209, 104, 144, 65, 93, 30, 156, 162, 226,
+121, 48, 252, 214, 104, 50, 234, 142, 63, 251, 109, 14, 112, 69, 38,
+68, 4, 147, 201, 112, 48, 146, 41, 183, 218, 189, 110, 191, 211, 30,
+244, 187, 195, 97, 183, 90, 12, 75, 71, 95, 126, 253, 224, 100, 12,
+20, 119, 188, 191, 123, 247, 225, 253, 147, 131, 253, 131, 157, 195,
+209, 160, 215, 110, 166, 65, 1, 28, 117, 61, 62, 132, 242, 19, 209,
+100, 10, 176, 55, 71, 51, 137, 48, 67, 227, 22, 141, 213, 137, 193,
+118, 195, 218, 252, 39, 171, 197, 116, 163, 148, 203, 167, 57, 156,
+15, 145, 12, 129, 216, 49, 22, 36, 173, 102, 167, 55, 26, 143, 183,
+119, 118, 30, 126, 153, 198, 130, 169, 20, 136, 124, 137, 4, 31, 76,
+215, 234, 173, 110, 127, 176, 213, 110, 117, 59, 141, 222, 168, 95,
+45, 36, 77, 223, 124, 245, 237, 227, 187, 187, 147, 209, 96, 2, 20,
+243, 209, 221, 195, 61, 32, 133, 135, 91, 221, 70, 163, 28, 201, 181,
+128, 113, 217, 32, 159, 31, 245, 70, 210, 49, 154, 138, 128, 240, 18,
+139, 96, 24, 234, 52, 152, 61, 28, 106, 214, 174, 45, 93, 180, 109,
+53, 178, 177, 68, 46, 19, 37, 67, 44, 137, 121, 108, 222, 0, 21, 138,
+231, 218, 253, 65, 111, 180, 127, 180, 119, 114, 255, 105, 131, 136,
+164, 147, 92, 16, 28, 8, 42, 180, 214, 232, 182, 251, 253, 118, 181,
+219, 110, 52, 193, 6, 87, 10, 233, 192, 239, 190, 250, 250, 233, 195,
+163, 201, 206, 246, 225, 209, 222, 225, 209, 209, 193, 104, 50, 222,
+61, 4, 191, 42, 23, 227, 197, 74, 239, 120, 223, 102, 247, 97, 148,
+63, 86, 140, 4, 248, 112, 128, 196, 249, 176, 15, 245, 121, 13, 102,
+23, 142, 216, 76, 138, 245, 107, 254, 97, 39, 159, 138, 70, 11, 81,
+62, 68, 80, 62, 183, 25, 166, 104, 46, 154, 111, 143, 6, 192, 100,
+199, 199, 71, 135, 95, 215, 32, 154, 143, 69, 131, 112, 56, 26, 226,
+195, 149, 70, 103, 208, 237, 183, 75, 237, 126, 173, 217, 106, 183,
+202, 229, 36, 251, 119, 79, 159, 126, 249, 232, 224, 104, 111, 114,
+112, 114, 180, 187, 183, 115, 176, 11, 198, 31, 131, 210, 173, 22,
+242, 185, 92, 239, 233, 158, 21, 2, 129, 159, 140, 101, 211, 108, 40,
+134, 224, 40, 136, 82, 8, 234, 51, 154, 1, 45, 249, 236, 26, 225, 29,
+127, 173, 144, 79, 68, 195, 32, 213, 51, 12, 225, 116, 187, 1, 218,
+179, 161, 116, 125, 210, 173, 131, 13, 222, 155, 76, 190, 106, 65,
+160, 248, 147, 97, 10, 132, 250, 112, 188, 82, 233, 13, 186, 131, 38,
+40, 189, 102, 187, 85, 5, 177, 43, 20, 250, 187, 251, 247, 63, 123,
+240, 232, 222, 225, 120, 114, 247, 222, 209, 33, 104, 129, 189, 189,
+253, 81, 171, 211, 174, 128, 246, 40, 245, 62, 31, 90, 97, 10, 103,
+67, 201, 76, 34, 204, 241, 44, 78, 186, 60, 30, 31, 6, 217, 157, 86,
+64, 61, 22, 217, 218, 20, 149, 79, 229, 67, 124, 52, 83, 204, 176, 36,
+225, 247, 122, 25, 218, 79, 179, 169, 202, 168, 87, 171, 246, 71, 163,
+193, 248, 87, 93, 59, 8, 130, 153, 120, 144, 102, 194, 145, 84, 173,
+55, 236, 247, 187, 157, 65, 187, 81, 31, 116, 74, 205, 74, 139, 47,
+125, 123, 255, 201, 195, 135, 143, 159, 30, 141, 6, 123, 199, 128, 8,
+70, 15, 14, 15, 246, 198, 253, 209, 160, 214, 30, 244, 58, 227, 199,
+59, 62, 156, 33, 249, 104, 170, 156, 137, 241, 28, 138, 16, 94, 23,
+228, 119, 99, 78, 135, 195, 230, 117, 153, 13, 51, 55, 153, 82, 50,
+19, 79, 36, 226, 217, 12, 29, 192, 16, 28, 161, 73, 148, 166, 19, 149,
+97, 189, 86, 110, 181, 90, 131, 147, 175, 58, 110, 58, 149, 203, 39,
+67, 33, 138, 139, 165, 193, 53, 13, 39, 189, 173, 173, 86, 167, 55,
+238, 213, 91, 213, 122, 164, 250, 205, 131, 47, 62, 127, 244, 228,
+139, 163, 237, 246, 0, 24, 214, 33, 232, 190, 227, 157, 65, 183, 215,
+107, 212, 219, 221, 222, 232, 151, 199, 8, 205, 5, 131, 9, 16, 138,
+57, 134, 199, 124, 20, 234, 114, 65, 118, 12, 118, 65, 86, 187, 197,
+161, 159, 185, 225, 175, 230, 98, 233, 100, 26, 48, 28, 129, 18, 56,
+5, 122, 148, 10, 113, 169, 74, 173, 81, 46, 215, 7, 221, 206, 254,
+103, 3, 7, 216, 188, 92, 150, 143, 115, 124, 52, 91, 111, 239, 109,
+141, 6, 195, 157, 126, 127, 48, 233, 247, 0, 83, 241, 157, 95, 29,
+221, 127, 250, 240, 225, 87, 15, 247, 7, 227, 189, 221, 163, 147, 131,
+227, 163, 221, 157, 110, 187, 57, 168, 55, 251, 131, 254, 225, 175,
+31, 34, 4, 195, 197, 147, 201, 60, 79, 83, 4, 205, 112, 126, 171, 201,
+5, 249, 48, 191, 23, 50, 105, 53, 242, 197, 75, 80, 49, 159, 74, 101,
+178, 201, 16, 80, 94, 2, 101, 253, 116, 48, 20, 226, 83, 133, 82, 57,
+251, 236, 250, 123, 135, 95, 117, 157, 68, 162, 94, 202, 103, 226,
+225, 68, 56, 213, 236, 142, 183, 38, 195, 93, 32, 175, 147, 73, 191,
+86, 235, 180, 66, 123, 191, 123, 240, 244, 225, 131, 39, 95, 221, 223,
+155, 236, 31, 156, 220, 191, 183, 127, 120, 52, 153, 12, 154, 189, 86,
+177, 53, 2, 130, 240, 217, 93, 156, 192, 194, 249, 40, 15, 28, 38, 68,
+19, 20, 230, 51, 232, 29, 14, 63, 29, 240, 130, 246, 83, 136, 36, 83,
+76, 171, 28, 5, 188, 21, 165, 24, 144, 136, 221, 224, 155, 14, 243,
+124, 180, 88, 40, 100, 250, 195, 78, 119, 252, 244, 127, 222, 242,
+135, 235, 157, 86, 177, 92, 72, 23, 83, 217, 122, 125, 60, 2, 44, 122,
+52, 222, 218, 30, 244, 154, 141, 86, 53, 184, 243, 237, 195, 199, 95,
+222, 127, 250, 197, 253, 195, 147, 163, 7, 247, 1, 120, 29, 156, 236,
+13, 65, 238, 7, 149, 58, 222, 159, 140, 31, 157, 64, 20, 48, 208, 100,
+140, 137, 134, 40, 130, 98, 113, 171, 77, 111, 180, 121, 159, 173,
+181, 219, 104, 208, 201, 55, 249, 102, 46, 24, 226, 128, 37, 135, 105,
+212, 235, 10, 120, 80, 62, 9, 136, 51, 147, 203, 213, 122, 189, 254,
+232, 232, 139, 127, 28, 34, 89, 160, 134, 149, 114, 179, 86, 46, 100,
+242, 149, 209, 206, 49, 216, 228, 201, 206, 86, 107, 180, 5, 168, 148,
+217, 249, 221, 147, 39, 191, 124, 240, 232, 179, 187, 119, 31, 62,
+188, 123, 255, 225, 253, 35, 192, 34, 187, 3, 208, 34, 205, 173, 225,
+246, 168, 245, 232, 192, 203, 197, 74, 181, 44, 23, 140, 4, 9, 2, 39,
+125, 102, 155, 90, 103, 178, 250, 25, 22, 247, 24, 237, 102, 181, 50,
+84, 200, 179, 76, 178, 192, 211, 188, 223, 235, 4, 243, 135, 35, 201,
+120, 52, 150, 77, 38, 43, 141, 173, 93, 48, 216, 111, 91, 193, 124,
+173, 63, 110, 54, 70, 163, 84, 42, 89, 234, 1, 184, 188, 119, 23, 224,
+237, 206, 8, 52, 121, 173, 30, 191, 251, 205, 221, 207, 62, 187, 119,
+252, 248, 238, 131, 187, 247, 31, 28, 62, 125, 242, 240, 0, 184, 240,
+100, 210, 237, 181, 183, 122, 195, 73, 255, 222, 158, 159, 143, 103,
+10, 233, 32, 31, 36, 88, 194, 235, 118, 90, 77, 58, 157, 209, 224, 70,
+169, 128, 219, 228, 180, 153, 13, 124, 37, 23, 36, 66, 153, 36, 17,
+192, 45, 46, 200, 227, 134, 185, 112, 44, 22, 77, 102, 43, 165, 238,
+248, 112, 178, 53, 250, 117, 45, 88, 110, 183, 71, 237, 222, 254, 48,
+29, 205, 54, 186, 123, 219, 39, 15, 238, 238, 239, 237, 238, 110, 79,
+58, 229, 122, 53, 254, 248, 155, 131, 131, 195, 123, 219, 71, 199,
+251, 119, 159, 220, 63, 122, 252, 244, 241, 189, 157, 221, 221, 163,
+193, 168, 63, 30, 14, 118, 38, 59, 143, 246, 97, 142, 207, 132, 163,
+116, 144, 68, 41, 198, 225, 113, 121, 45, 70, 189, 197, 234, 243, 34,
+152, 223, 227, 114, 90, 28, 68, 62, 19, 139, 49, 64, 149, 17, 191, 13,
+242, 88, 141, 110, 140, 98, 194, 225, 92, 173, 220, 28, 236, 239, 180,
+186, 219, 191, 42, 49, 133, 214, 160, 221, 172, 15, 187, 185, 88, 174,
+222, 28, 237, 126, 246, 240, 238, 201, 201, 104, 60, 234, 116, 234,
+173, 126, 241, 203, 111, 247, 198, 251, 135, 59, 39, 251, 123, 15,
+159, 60, 184, 251, 217, 211, 7, 119, 15, 246, 247, 119, 183, 182, 71,
+227, 173, 193, 222, 94, 251, 139, 109, 34, 194, 199, 8, 134, 162, 97,
+152, 9, 249, 253, 48, 106, 180, 26, 65, 5, 216, 44, 94, 196, 235, 68,
+220, 110, 119, 42, 18, 43, 133, 131, 56, 17, 240, 64, 38, 157, 82,
+168, 66, 60, 94, 46, 95, 203, 100, 171, 237, 73, 167, 214, 28, 126,
+85, 8, 23, 128, 154, 21, 27, 227, 94, 137, 77, 130, 162, 62, 249, 226,
+151, 143, 30, 62, 60, 236, 246, 123, 189, 241, 100, 82, 126, 242, 229,
+225, 62, 200, 86, 247, 15, 247, 159, 124, 246, 244, 238, 23, 159, 223,
+155, 28, 236, 31, 237, 140, 118, 7, 147, 97, 31, 244, 233, 103, 19, 2,
+32, 37, 135, 209, 132, 219, 22, 240, 218, 221, 62, 191, 213, 162, 149,
+172, 203, 180, 26, 187, 201, 131, 144, 132, 211, 21, 69, 248, 52, 129,
+187, 2, 110, 143, 67, 47, 92, 88, 89, 183, 251, 92, 124, 49, 31, 75,
+150, 0, 94, 149, 42, 195, 199, 153, 12, 192, 238, 114, 186, 217, 239,
+22, 136, 116, 161, 187, 119, 248, 245, 183, 191, 250, 226, 33, 232,
+128, 195, 222, 225, 189, 195, 254, 131, 251, 199, 79, 190, 2, 213,
+247, 249, 238, 189, 175, 62, 127, 244, 217, 147, 35, 160, 193, 39, 39,
+91, 119, 247, 39, 163, 94, 167, 63, 121, 186, 79, 4, 169, 100, 2, 229,
+57, 143, 195, 99, 215, 107, 205, 144, 219, 162, 145, 76, 175, 200,
+228, 46, 141, 5, 70, 81, 63, 20, 135, 41, 150, 180, 24, 204, 102, 179,
+94, 186, 41, 22, 172, 88, 172, 158, 20, 104, 247, 100, 185, 214, 0,
+67, 55, 31, 102, 129, 204, 231, 178, 197, 74, 37, 27, 99, 82, 213,
+206, 222, 211, 111, 191, 253, 205, 23, 79, 159, 124, 126, 124, 120,
+239, 219, 95, 255, 237, 221, 207, 127, 253, 135, 255, 231, 191, 253,
+203, 255, 246, 135, 63, 252, 230, 243, 175, 255, 254, 55, 191, 253,
+234, 209, 195, 123, 123, 79, 159, 236, 142, 31, 236, 142, 59, 131,
+221, 163, 47, 198, 193, 116, 182, 81, 226, 146, 81, 158, 9, 6, 44, 38,
+163, 51, 224, 50, 235, 52, 58, 189, 1, 245, 184, 34, 241, 96, 132, 42,
+160, 62, 22, 211, 217, 172, 118, 187, 76, 36, 209, 217, 237, 72, 170,
+186, 119, 188, 51, 26, 109, 55, 178, 57, 16, 24, 30, 84, 90, 131, 74,
+187, 51, 6, 126, 80, 41, 54, 78, 198, 143, 191, 252, 195, 191, 253,
+127, 255, 239, 191, 253, 235, 255, 254, 15, 255, 242, 111, 255, 237,
+15, 95, 62, 2, 172, 121, 116, 255, 112, 119, 111, 255, 248, 241, 175,
+126, 253, 197, 47, 191, 248, 250, 239, 255, 235, 63, 255, 227, 255,
+250, 79, 191, 253, 175, 127, 247, 245, 211, 111, 254, 241, 111, 191,
+25, 87, 182, 159, 193, 208, 184, 61, 222, 218, 233, 69, 8, 31, 130,
+82, 56, 100, 179, 107, 229, 82, 173, 214, 23, 32, 67, 92, 62, 28, 202,
+101, 192, 191, 74, 134, 9, 178, 36, 106, 55, 96, 92, 166, 154, 206,
+247, 182, 90, 165, 206, 214, 100, 255, 225, 224, 232, 241, 227, 147,
+195, 81, 191, 91, 143, 129, 182, 204, 238, 75, 29, 100, 50, 68, 56,
+45, 118, 175, 213, 40, 153, 189, 117, 241, 242, 149, 169, 229, 149,
+169, 213, 245, 37, 169, 70, 174, 176, 152, 44, 86, 152, 171, 108, 111,
+53, 91, 135, 195, 76, 50, 27, 143, 150, 73, 187, 94, 190, 46, 216, 16,
+72, 133, 66, 233, 213, 15, 63, 120, 227, 157, 143, 222, 123, 229, 197,
+23, 159, 251, 209, 143, 126, 244, 243, 231, 223, 120, 251, 141, 55,
+222, 125, 247, 236, 217, 179, 231, 110, 174, 108, 174, 9, 230, 46,
+159, 251, 228, 204, 219, 31, 222, 184, 125, 231, 246, 178, 194, 170,
+51, 250, 80, 174, 178, 211, 75, 134, 96, 163, 106, 67, 184, 186, 120,
+254, 226, 165, 171, 55, 215, 212, 38, 31, 236, 210, 131, 179, 109, 46,
+47, 207, 206, 94, 57, 125, 101, 86, 106, 50, 233, 45, 90, 169, 88, 38,
+150, 232, 180, 98, 161, 80, 165, 81, 128, 5, 54, 25, 101, 46, 140,
+202, 54, 188, 90, 229, 230, 220, 204, 236, 244, 194, 252, 226, 212,
+59, 207, 255, 244, 133, 23, 94, 122, 233, 149, 55, 95, 120, 241, 231,
+63, 255, 201, 91, 47, 189, 241, 254, 171, 63, 122, 254, 249, 231, 158,
+123, 225, 181, 215, 222, 63, 243, 214, 135, 239, 191, 255, 201, 141,
+75, 51, 51, 18, 165, 90, 164, 180, 66, 6, 155, 221, 134, 23, 15, 82,
+168, 67, 33, 17, 8, 165, 139, 119, 102, 230, 151, 215, 132, 66, 31,
+22, 3, 243, 71, 28, 16, 100, 213, 107, 180, 27, 119, 4, 74, 29, 138,
+122, 136, 128, 59, 128, 66, 14, 103, 192, 227, 14, 80, 225, 68, 16,
+167, 163, 20, 149, 76, 101, 7, 91, 152, 203, 101, 214, 88, 204, 74,
+163, 86, 181, 118, 238, 131, 183, 223, 124, 235, 204, 153, 211, 159,
+188, 119, 230, 227, 179, 239, 157, 253, 232, 244, 213, 119, 95, 250,
+248, 204, 71, 231, 174, 220, 186, 177, 176, 50, 191, 112, 231, 246,
+226, 218, 204, 230, 154, 206, 173, 83, 106, 108, 88, 128, 11, 194, 92,
+123, 151, 13, 226, 144, 214, 96, 177, 170, 100, 70, 131, 211, 104,
+245, 16, 108, 38, 31, 139, 134, 112, 204, 107, 51, 27, 109, 122, 145,
+198, 236, 12, 133, 152, 20, 8, 215, 73, 158, 101, 184, 112, 40, 28,
+173, 53, 114, 209, 4, 232, 219, 6, 40, 215, 161, 215, 97, 55, 27, 32,
+135, 193, 106, 210, 202, 110, 127, 114, 230, 157, 143, 63, 185, 120,
+243, 214, 205, 233, 107, 87, 47, 125, 242, 193, 217, 43, 31, 188, 113,
+245, 211, 79, 111, 109, 202, 164, 90, 189, 82, 182, 41, 216, 148, 173,
+172, 10, 117, 0, 78, 108, 116, 40, 24, 101, 217, 72, 183, 143, 81,
+164, 95, 15, 192, 200, 227, 114, 249, 88, 220, 23, 138, 199, 11, 149,
+124, 33, 77, 51, 152, 215, 172, 247, 57, 165, 110, 4, 230, 115, 229,
+106, 171, 211, 40, 21, 242, 217, 124, 58, 157, 1, 240, 84, 4, 81, 51,
+215, 216, 238, 15, 239, 54, 157, 14, 200, 101, 119, 251, 237, 144,
+219, 166, 18, 220, 58, 125, 238, 220, 217, 139, 115, 139, 18, 225,
+210, 212, 212, 167, 31, 94, 185, 240, 238, 219, 51, 119, 110, 47, 232,
+140, 102, 191, 67, 111, 183, 106, 84, 234, 77, 137, 74, 229, 65, 96,
+15, 197, 211, 192, 23, 99, 131, 17, 10, 168, 20, 38, 72, 159, 31, 241,
+250, 34, 124, 40, 145, 207, 228, 203, 121, 32, 16, 28, 75, 56, 28,
+176, 93, 230, 65, 240, 28, 96, 157, 209, 100, 208, 170, 54, 171, 245,
+124, 186, 210, 3, 194, 9, 98, 74, 125, 123, 103, 50, 222, 233, 120,
+109, 78, 143, 211, 134, 120, 220, 144, 83, 35, 154, 62, 255, 201, 149,
+219, 183, 22, 151, 132, 82, 193, 194, 220, 237, 171, 55, 206, 191,
+247, 250, 181, 249, 217, 13, 131, 213, 205, 34, 122, 7, 100, 209, 232,
+149, 74, 173, 26, 69, 16, 146, 100, 131, 32, 239, 100, 135, 35, 12,
+199, 97, 54, 204, 250, 1, 155, 97, 124, 40, 157, 45, 164, 211, 133,
+66, 169, 146, 2, 118, 142, 250, 125, 70, 185, 155, 204, 2, 175, 219,
+222, 25, 247, 91, 189, 110, 179, 81, 77, 183, 6, 59, 7, 189, 54, 8,
+199, 67, 0, 36, 173, 33, 110, 134, 92, 122, 131, 7, 114, 250, 156,
+122, 197, 250, 236, 157, 133, 197, 149, 13, 241, 202, 186, 104, 109,
+113, 246, 206, 237, 107, 103, 95, 189, 184, 184, 164, 181, 216, 8, 14,
+181, 88, 45, 78, 163, 81, 171, 87, 104, 80, 216, 71, 2, 232, 139, 132,
+50, 213, 173, 29, 12, 133, 169, 112, 42, 4, 187, 33, 63, 193, 241,
+177, 124, 58, 145, 45, 213, 26, 207, 146, 111, 144, 64, 188, 38, 169,
+139, 175, 213, 90, 32, 124, 236, 111, 141, 135, 245, 106, 171, 92,
+220, 25, 239, 238, 142, 75, 173, 122, 29, 200, 223, 164, 53, 70, 29,
+46, 155, 74, 13, 160, 27, 117, 154, 213, 178, 213, 91, 139, 43, 43,
+66, 249, 218, 154, 104, 115, 110, 106, 102, 230, 214, 153, 23, 206,
+47, 45, 219, 45, 86, 150, 241, 91, 237, 38, 167, 197, 164, 82, 202,
+53, 144, 63, 64, 17, 44, 160, 178, 98, 99, 127, 226, 112, 153, 252,
+145, 108, 28, 0, 11, 76, 227, 0, 164, 114, 169, 12, 72, 33, 237, 76,
+242, 217, 141, 32, 167, 105, 131, 72, 84, 26, 189, 254, 214, 254, 201,
+206, 24, 4, 178, 106, 113, 107, 107, 114, 176, 187, 93, 170, 247, 219,
+91, 227, 237, 97, 99, 31, 55, 155, 237, 58, 19, 193, 192, 136, 15, 50,
+170, 87, 174, 77, 175, 205, 45, 111, 110, 174, 174, 111, 174, 222,
+153, 93, 186, 250, 241, 139, 103, 151, 151, 77, 6, 7, 70, 194, 207,
+62, 93, 54, 42, 68, 50, 185, 198, 230, 195, 113, 134, 79, 102, 203,
+221, 206, 246, 196, 102, 208, 58, 193, 78, 208, 94, 138, 197, 88, 62,
+149, 138, 243, 169, 54, 72, 150, 233, 120, 132, 231, 2, 14, 221, 42,
+157, 105, 54, 218, 253, 173, 221, 163, 157, 97, 191, 93, 175, 22, 128,
+43, 237, 236, 238, 0, 78, 238, 29, 28, 143, 134, 205, 19, 194, 234,
+182, 217, 189, 24, 129, 226, 132, 203, 164, 18, 206, 220, 153, 159,
+157, 95, 222, 88, 94, 223, 88, 152, 158, 95, 185, 241, 201, 139, 231,
+215, 165, 58, 147, 19, 102, 72, 143, 223, 169, 87, 110, 10, 69, 34,
+165, 209, 129, 6, 130, 161, 108, 165, 222, 104, 79, 38, 22, 139, 198,
+73, 7, 131, 20, 66, 226, 4, 203, 39, 146, 177, 88, 172, 81, 171, 228,
+83, 177, 72, 132, 197, 204, 194, 121, 182, 80, 45, 183, 134, 227, 237,
+131, 30, 200, 235, 173, 114, 161, 114, 188, 59, 217, 29, 247, 6, 157,
+193, 189, 227, 253, 113, 247, 49, 109, 244, 66, 54, 107, 0, 195, 41,
+210, 110, 52, 138, 214, 151, 230, 166, 231, 23, 133, 235, 98, 233,
+194, 236, 194, 202, 141, 183, 126, 124, 105, 97, 93, 100, 241, 35, 44,
+131, 120, 32, 157, 112, 77, 46, 217, 144, 41, 44, 40, 21, 162, 51,
+160, 169, 90, 141, 177, 5, 178, 129, 0, 133, 4, 124, 64, 173, 105,
+254, 89, 138, 231, 139, 197, 82, 34, 150, 102, 56, 22, 81, 75, 5, 177,
+210, 179, 207, 25, 182, 183, 247, 134, 253, 122, 163, 94, 47, 151,
+119, 246, 134, 219, 123, 163, 94, 191, 11, 114, 72, 167, 123, 226, 51,
+192, 168, 221, 130, 32, 14, 24, 3, 192, 47, 90, 92, 95, 152, 158, 154,
+19, 137, 196, 242, 229, 233, 249, 169, 233, 183, 158, 187, 120, 123,
+69, 98, 35, 189, 207, 62, 142, 113, 105, 132, 27, 114, 145, 72, 166,
+53, 248, 131, 113, 62, 86, 174, 214, 107, 141, 93, 13, 240, 105, 63,
+137, 251, 60, 207, 238, 154, 176, 64, 106, 34, 108, 50, 149, 140, 132,
+99, 1, 212, 165, 213, 40, 69, 113, 144, 131, 58, 91, 219, 187, 7, 147,
+97, 187, 86, 45, 23, 235, 187, 199, 131, 225, 120, 220, 169, 116, 119,
+158, 113, 248, 177, 207, 69, 160, 176, 3, 242, 185, 188, 30, 179, 213,
+40, 155, 91, 91, 94, 89, 90, 16, 73, 55, 215, 150, 230, 22, 167, 110,
+124, 248, 252, 167, 171, 90, 147, 195, 239, 198, 17, 220, 167, 51,
+139, 215, 196, 27, 34, 141, 70, 235, 10, 38, 226, 233, 66, 167, 94,
+172, 140, 244, 74, 192, 69, 176, 199, 102, 71, 96, 140, 8, 115, 207,
+110, 29, 130, 176, 16, 227, 9, 20, 131, 205, 58, 233, 102, 166, 81,
+40, 55, 39, 123, 7, 39, 163, 221, 81, 29, 40, 195, 120, 124, 184, 53,
+26, 130, 232, 223, 222, 158, 244, 71, 237, 163, 128, 159, 194, 81,
+151, 3, 193, 32, 155, 201, 106, 146, 204, 44, 9, 86, 69, 107, 27, 210,
+205, 213, 133, 153, 149, 197, 169, 115, 47, 95, 16, 152, 28, 22, 200,
+231, 245, 33, 118, 179, 77, 184, 184, 177, 170, 208, 2, 119, 38, 163,
+209, 92, 185, 95, 73, 102, 39, 106, 169, 222, 227, 245, 128, 222, 132,
+221, 24, 27, 137, 130, 44, 137, 209, 209, 88, 148, 199, 233, 48, 230,
+212, 105, 4, 153, 122, 173, 51, 216, 6, 233, 115, 124, 56, 6, 18, 88,
+156, 108, 109, 131, 221, 239, 130, 252, 8, 138, 114, 171, 115, 136,
+65, 40, 48, 7, 200, 23, 128, 60, 14, 155, 65, 182, 178, 178, 190, 180,
+50, 187, 34, 149, 172, 79, 223, 17, 172, 221, 62, 247, 218, 197, 77,
+167, 205, 77, 184, 125, 16, 226, 54, 106, 4, 11, 155, 27, 98, 173,
+193, 104, 67, 216, 84, 169, 211, 204, 242, 201, 190, 66, 164, 5, 89,
+209, 106, 118, 5, 16, 152, 13, 5, 3, 68, 192, 235, 13, 23, 66, 44, 78,
+68, 8, 155, 195, 38, 1, 49, 231, 217, 231, 109, 123, 135, 147, 221,
+73, 61, 158, 111, 111, 247, 6, 195, 65, 175, 183, 213, 157, 236, 140,
+119, 182, 250, 99, 147, 21, 65, 81, 204, 227, 10, 248, 49, 191, 89,
+39, 95, 93, 17, 47, 206, 46, 173, 110, 8, 87, 102, 103, 5, 203, 215,
+78, 255, 252, 252, 178, 205, 236, 69, 33, 200, 131, 5, 116, 74, 209,
+220, 186, 80, 101, 48, 88, 44, 40, 145, 44, 86, 43, 97, 146, 169, 72,
+55, 52, 46, 31, 12, 217, 80, 146, 193, 184, 48, 67, 211, 168, 211,
+199, 87, 211, 88, 32, 16, 38, 189, 30, 167, 110, 178, 219, 61, 188,
+127, 116, 247, 104, 111, 103, 50, 172, 70, 10, 189, 193, 94, 175, 219,
+235, 12, 59, 189, 201, 168, 15, 48, 180, 39, 55, 248, 61, 94, 204, 23,
+64, 9, 34, 96, 181, 40, 86, 150, 5, 203, 115, 115, 43, 130, 205, 213,
+249, 165, 245, 213, 229, 179, 127, 115, 106, 6, 114, 248, 72, 8, 130,
+24, 202, 166, 149, 47, 172, 111, 232, 44, 22, 171, 211, 139, 113, 169,
+92, 58, 228, 182, 115, 155, 43, 70, 135, 7, 71, 60, 4, 129, 97, 193,
+32, 104, 1, 212, 229, 141, 230, 10, 32, 41, 165, 56, 196, 99, 51, 247,
+118, 182, 38, 71, 251, 247, 39, 91, 91, 219, 147, 82, 12, 172, 250,
+94, 15, 132, 207, 241, 160, 61, 216, 26, 237, 12, 219, 105, 161, 200,
+234, 134, 81, 47, 139, 81, 68, 192, 105, 213, 8, 103, 87, 214, 23,
+151, 54, 215, 229, 130, 229, 197, 197, 233, 245, 11, 63, 122, 71, 136,
+248, 220, 1, 155, 203, 7, 236, 214, 105, 16, 44, 110, 170, 29, 78,
+155, 199, 6, 147, 97, 224, 48, 6, 163, 103, 67, 162, 183, 185, 81,
+176, 61, 20, 236, 5, 17, 134, 99, 80, 135, 155, 75, 20, 48, 148, 75,
+70, 48, 143, 73, 62, 188, 183, 219, 219, 219, 222, 235, 119, 135, 123,
+187, 121, 46, 215, 235, 110, 119, 135, 32, 127, 111, 181, 39, 163,
+201, 206, 100, 139, 91, 151, 153, 156, 4, 234, 15, 226, 28, 6, 44,
+219, 32, 188, 51, 191, 178, 182, 33, 88, 81, 11, 103, 23, 214, 151,
+22, 206, 254, 224, 212, 38, 138, 219, 93, 86, 127, 32, 193, 35, 1, 72,
+57, 191, 41, 210, 57, 93, 14, 135, 215, 135, 19, 56, 164, 209, 88,
+229, 2, 181, 205, 227, 135, 93, 46, 134, 68, 48, 42, 128, 163, 94,
+139, 141, 140, 39, 17, 42, 11, 66, 139, 71, 191, 177, 123, 8, 68, 98,
+52, 104, 117, 251, 227, 81, 137, 78, 12, 91, 253, 206, 112, 107, 11,
+4, 166, 254, 214, 104, 180, 213, 11, 46, 74, 13, 110, 218, 11, 193,
+126, 42, 0, 116, 8, 52, 192, 226, 170, 104, 229, 246, 154, 100, 101,
+118, 70, 44, 89, 188, 240, 87, 175, 79, 195, 164, 201, 229, 69, 35,
+133, 40, 78, 194, 234, 117, 217, 186, 210, 10, 236, 30, 241, 195, 48,
+228, 80, 27, 97, 181, 84, 173, 133, 124, 176, 199, 141, 250, 221, 224,
+71, 144, 207, 166, 117, 114, 60, 15, 19, 169, 82, 146, 67, 101, 146,
+225, 65, 187, 54, 158, 140, 123, 91, 157, 110, 187, 152, 72, 53, 91,
+205, 94, 7, 184, 95, 62, 219, 26, 15, 219, 197, 86, 120, 78, 96, 116,
+147, 126, 183, 31, 7, 242, 99, 50, 154, 164, 64, 124, 229, 43, 11,
+130, 229, 165, 197, 37, 129, 112, 254, 236, 143, 79, 45, 64, 152, 3,
+242, 99, 169, 92, 132, 38, 113, 163, 76, 178, 38, 54, 185, 220, 118,
+63, 202, 194, 86, 151, 70, 75, 170, 165, 50, 157, 219, 233, 241, 66,
+46, 27, 228, 179, 59, 157, 144, 81, 99, 245, 80, 28, 12, 167, 234,
+225, 160, 91, 44, 29, 142, 90, 117, 144, 134, 6, 189, 86, 165, 144, 2,
+86, 216, 44, 183, 74, 165, 38, 24, 191, 218, 223, 106, 228, 70, 145,
+57, 169, 1, 72, 15, 140, 226, 94, 163, 195, 106, 54, 40, 86, 151, 5,
+155, 43, 203, 107, 75, 171, 75, 66, 201, 234, 194, 249, 191, 124, 119,
+195, 15, 16, 6, 102, 18, 153, 8, 141, 251, 109, 26, 145, 64, 104, 112,
+184, 221, 78, 55, 133, 91, 221, 26, 165, 91, 180, 172, 180, 120, 124,
+94, 143, 203, 102, 117, 216, 109, 6, 163, 94, 173, 86, 154, 220, 60,
+236, 226, 243, 137, 128, 117, 197, 212, 232, 12, 155, 221, 65, 191,
+221, 77, 197, 19, 201, 173, 70, 185, 80, 106, 148, 243, 165, 78, 62,
+83, 169, 215, 43, 185, 65, 112, 73, 99, 178, 65, 14, 4, 129, 32, 155,
+197, 164, 215, 202, 215, 22, 214, 4, 98, 225, 166, 112, 121, 97, 77,
+184, 186, 112, 246, 251, 31, 26, 252, 40, 140, 19, 193, 104, 152, 33,
+81, 155, 78, 45, 223, 216, 52, 64, 32, 25, 186, 217, 128, 206, 172,
+148, 184, 102, 23, 149, 102, 183, 215, 14, 150, 196, 106, 182, 88, 65,
+118, 48, 152, 109, 46, 27, 129, 186, 130, 105, 14, 181, 78, 43, 226,
+185, 18, 136, 7, 227, 110, 63, 147, 137, 230, 118, 90, 149, 76, 182,
+86, 79, 103, 114, 241, 120, 186, 88, 45, 22, 219, 193, 37, 181, 196,
+234, 115, 131, 227, 157, 122, 157, 82, 173, 16, 173, 206, 11, 132,
+155, 82, 161, 96, 99, 67, 176, 121, 235, 218, 197, 159, 221, 177, 152,
+17, 152, 38, 48, 142, 193, 16, 212, 32, 81, 75, 133, 155, 58, 167,
+209, 96, 65, 25, 204, 162, 81, 26, 60, 55, 215, 85, 102, 187, 207,
+225, 116, 58, 189, 192, 191, 44, 58, 147, 135, 65, 125, 54, 139, 209,
+193, 177, 1, 151, 226, 214, 50, 29, 228, 234, 160, 246, 183, 7, 165,
+12, 240, 129, 126, 165, 152, 207, 23, 195, 233, 108, 152, 12, 102,
+139, 217, 122, 159, 156, 21, 203, 13, 46, 143, 29, 216, 152, 73, 46,
+209, 168, 164, 43, 171, 2, 129, 88, 178, 178, 46, 89, 91, 93, 190,
+118, 229, 220, 27, 139, 64, 221, 48, 128, 82, 4, 74, 99, 30, 131, 82,
+42, 89, 91, 214, 218, 109, 102, 39, 26, 240, 88, 37, 66, 157, 249,
+146, 0, 176, 41, 228, 241, 184, 109, 110, 175, 94, 103, 210, 235, 236,
+76, 192, 102, 215, 72, 52, 30, 196, 169, 221, 184, 114, 217, 12, 145,
+85, 32, 129, 59, 205, 124, 178, 221, 109, 117, 10, 133, 76, 46, 201,
+197, 34, 44, 74, 70, 82, 133, 76, 195, 191, 176, 188, 161, 181, 251,
+77, 122, 200, 170, 150, 136, 85, 82, 197, 250, 210, 198, 134, 28, 84,
+193, 250, 226, 242, 252, 212, 141, 203, 239, 47, 233, 93, 94, 43, 236,
+71, 128, 1, 5, 156, 94, 245, 202, 134, 96, 73, 105, 5, 204, 4, 136,
+215, 170, 21, 40, 101, 83, 235, 203, 34, 169, 217, 11, 89, 29, 78,
+175, 78, 171, 215, 111, 128, 126, 50, 170, 132, 43, 66, 179, 195, 36,
+95, 63, 127, 81, 100, 11, 166, 106, 157, 157, 94, 38, 26, 42, 181, 26,
+249, 98, 37, 147, 142, 114, 193, 48, 226, 39, 72, 46, 17, 78, 232,
+230, 150, 231, 101, 22, 179, 86, 101, 53, 136, 4, 155, 27, 155, 10,
+96, 187, 235, 235, 138, 205, 165, 165, 153, 229, 27, 215, 175, 156,
+127, 111, 14, 204, 17, 108, 169, 7, 69, 252, 1, 15, 174, 92, 95, 95,
+23, 72, 205, 96, 28, 151, 213, 103, 82, 173, 138, 4, 55, 23, 23, 22,
+86, 245, 94, 208, 60, 54, 187, 65, 188, 33, 189, 179, 180, 38, 215,
+111, 44, 206, 172, 106, 116, 178, 141, 133, 247, 78, 45, 169, 240,
+104, 162, 92, 77, 242, 20, 91, 172, 100, 83, 217, 108, 26, 76, 30, 65,
+33, 151, 7, 198, 104, 140, 22, 207, 222, 153, 146, 169, 149, 26, 153,
+73, 185, 178, 184, 58, 183, 36, 152, 189, 116, 25, 156, 98, 105, 126,
+254, 198, 236, 217, 79, 78, 191, 253, 252, 167, 43, 122, 131, 94, 166,
+181, 122, 124, 52, 5, 187, 84, 2, 225, 202, 202, 154, 214, 168, 214,
+217, 204, 58, 245, 250, 188, 88, 112, 126, 126, 121, 110, 70, 14, 198,
+214, 170, 21, 202, 213, 181, 249, 203, 55, 151, 150, 87, 102, 174, 93,
+155, 93, 94, 93, 153, 189, 253, 198, 243, 31, 204, 25, 97, 31, 75,
+160, 136, 7, 73, 135, 72, 150, 37, 105, 38, 132, 57, 45, 14, 19, 224,
+94, 171, 195, 42, 248, 244, 226, 149, 117, 145, 92, 186, 46, 93, 186,
+115, 237, 210, 237, 249, 169, 169, 43, 167, 79, 1, 230, 158, 190, 249,
+233, 153, 87, 78, 189, 255, 214, 247, 62, 92, 219, 144, 137, 54, 197,
+18, 163, 205, 27, 176, 9, 230, 22, 102, 103, 103, 166, 4, 10, 129, 64,
+33, 187, 121, 103, 250, 218, 242, 245, 15, 46, 92, 59, 119, 113, 70,
+186, 186, 44, 221, 156, 155, 189, 51, 55, 245, 209, 7, 87, 46, 94,
+188, 114, 225, 195, 139, 119, 0, 62, 95, 127, 243, 7, 111, 93, 21, 41,
+212, 118, 173, 66, 161, 212, 224, 1, 131, 195, 97, 113, 251, 96, 199,
+179, 62, 219, 148, 8, 215, 100, 155, 183, 78, 189, 119, 230, 206, 134,
+104, 243, 230, 237, 115, 103, 206, 156, 186, 112, 254, 220, 249, 179,
+111, 191, 252, 246, 165, 75, 231, 62, 122, 255, 205, 31, 125, 231,
+251, 63, 252, 179, 215, 46, 223, 94, 88, 154, 91, 5, 85, 161, 181, 76,
+95, 186, 248, 233, 245, 75, 231, 175, 223, 88, 184, 114, 105, 106,
+230, 220, 197, 15, 207, 92, 120, 245, 149, 119, 222, 125, 227, 221,
+211, 211, 119, 174, 223, 184, 57, 53, 251, 241, 249, 11, 175, 189,
+241, 198, 75, 63, 127, 254, 103, 207, 189, 244, 238, 91, 31, 158, 255,
+232, 165, 255, 244, 221, 183, 46, 94, 156, 94, 90, 188, 53, 117, 251,
+150, 68, 188, 60, 189, 180, 178, 46, 86, 73, 230, 102, 231, 174, 93,
+190, 113, 237, 202, 165, 203, 111, 157, 122, 245, 173, 11, 119, 46,
+159, 63, 245, 214, 43, 127, 243, 55, 127, 241, 253, 31, 254, 245, 15,
+159, 255, 139, 63, 249, 193, 75, 207, 255, 248, 167, 207, 253, 79,
+127, 242, 223, 253, 247, 127, 252, 71, 63, 123, 253, 236, 39, 231,
+206, 93, 252, 228, 244, 135, 151, 79, 191, 251, 198, 107, 239, 158,
+250, 197, 79, 127, 242, 194, 199, 239, 188, 242, 218, 123, 191, 120,
+254, 185, 87, 95, 252, 243, 239, 253, 245, 115, 207, 61, 255, 243,
+151, 222, 126, 247, 189, 247, 223, 62, 245, 226, 43, 167, 126, 252,
+147, 239, 127, 231, 79, 254, 252, 123, 63, 248, 209, 95, 255, 213,
+143, 159, 255, 179, 63, 253, 119, 255, 238, 127, 252, 233, 79, 94,
+123, 243, 213, 215, 222, 248, 232, 210, 252, 210, 212, 167, 23, 175,
+95, 186, 118, 235, 242, 219, 207, 253, 228, 199, 207, 253, 236, 103,
+63, 252, 179, 31, 126, 231, 47, 254, 252, 47, 95, 62, 253, 222, 155,
+63, 251, 254, 119, 254, 232, 79, 255, 250, 249, 151, 95, 249, 217,
+223, 252, 241, 127, 254, 143, 127, 244, 159, 254, 203, 127, 249, 227,
+255, 240, 31, 254, 253, 127, 252, 207, 127, 252, 220, 235, 31, 95,
+186, 62, 61, 55, 35, 84, 185, 80, 183, 65, 46, 156, 187, 116, 233,
+212, 217, 21, 173, 224, 198, 213, 119, 223, 126, 243, 181, 95, 124,
+239, 79, 255, 242, 135, 223, 253, 201, 143, 190, 251, 195, 87, 95,
+250, 238, 95, 126, 239, 79, 255, 234, 199, 235, 194, 165, 185, 171,
+183, 22, 230, 230, 193, 78, 188, 255, 242, 159, 255, 251, 63, 125,
+243, 244, 179, 229, 153, 19, 56, 163, 189, 78, 156, 165, 216, 0, 42,
+87, 204, 190, 249, 250, 27, 231, 110, 92, 185, 114, 125, 122, 250,
+230, 141, 155, 74, 200, 42, 186, 51, 187, 182, 40, 117, 152, 117, 42,
+209, 117, 176, 15, 175, 252, 224, 133, 43, 183, 46, 157, 126, 249,
+253, 23, 127, 240, 142, 208, 193, 176, 225, 100, 188, 94, 171, 53,
+235, 237, 118, 62, 93, 72, 179, 169, 237, 7, 163, 118, 145, 134, 157,
+86, 203, 198, 156, 104, 3, 104, 194, 202, 188, 68, 118, 245, 198, 157,
+249, 249, 105, 160, 133, 226, 165, 27, 55, 46, 93, 185, 115, 229, 221,
+247, 94, 254, 225, 255, 240, 243, 85, 169, 218, 134, 210, 40, 21, 72,
+29, 54, 99, 81, 44, 152, 138, 55, 6, 73, 10, 131, 185, 100, 58, 86,
+168, 166, 40, 6, 4, 72, 133, 80, 105, 246, 218, 181, 122, 173, 100,
+99, 121, 238, 234, 167, 211, 215, 47, 207, 9, 13, 234, 141, 235, 23,
+62, 122, 101, 214, 25, 7, 160, 17, 226, 147, 32, 81, 132, 99, 76, 132,
+198, 48, 60, 60, 153, 116, 218, 121, 158, 163, 220, 62, 139, 194, 102,
+244, 90, 84, 138, 117, 160, 153, 98, 185, 203, 172, 119, 195, 118,
+139, 114, 225, 230, 244, 210, 252, 173, 79, 175, 126, 244, 214, 95,
+157, 17, 155, 124, 16, 65, 250, 113, 127, 184, 150, 163, 104, 31, 30,
+75, 245, 118, 202, 213, 50, 31, 138, 22, 99, 92, 49, 232, 15, 250,
+188, 122, 185, 202, 232, 101, 8, 179, 193, 164, 148, 172, 175, 10,
+150, 196, 18, 185, 74, 169, 214, 8, 111, 92, 59, 243, 198, 58, 148,
+174, 85, 98, 33, 134, 138, 196, 120, 46, 24, 138, 5, 17, 134, 203,
+117, 119, 118, 91, 37, 160, 36, 188, 31, 146, 72, 53, 234, 13, 141,
+94, 34, 17, 172, 173, 45, 233, 84, 207, 158, 192, 49, 105, 133, 107,
+82, 21, 232, 254, 217, 107, 31, 189, 115, 77, 96, 12, 0, 120, 138, 39,
+184, 72, 173, 193, 5, 130, 177, 120, 190, 209, 2, 22, 68, 82, 209,
+124, 154, 207, 7, 220, 65, 30, 115, 121, 253, 38, 44, 232, 119, 3, 11,
+18, 75, 149, 70, 169, 222, 239, 112, 66, 122, 251, 250, 212, 252, 185,
+159, 173, 192, 145, 103, 105, 154, 9, 144, 17, 16, 184, 227, 177, 32,
+25, 79, 181, 90, 205, 78, 57, 95, 205, 164, 146, 188, 79, 162, 53, 43,
+87, 116, 58, 153, 84, 42, 94, 91, 145, 172, 169, 158, 9, 149, 219,
+100, 176, 104, 21, 162, 205, 133, 107, 151, 79, 157, 93, 55, 99, 24,
+29, 207, 52, 106, 153, 98, 53, 207, 134, 138, 249, 76, 169, 80, 201,
+68, 130, 12, 93, 46, 39, 227, 48, 196, 133, 115, 153, 28, 231, 167,
+233, 128, 207, 97, 213, 233, 141, 78, 191, 203, 134, 16, 36, 234, 116,
+73, 87, 166, 222, 125, 126, 222, 79, 113, 225, 72, 0, 246, 64, 72, 56,
+200, 3, 178, 78, 68, 50, 149, 124, 173, 243, 236, 121, 166, 92, 56,
+203, 40, 212, 22, 189, 194, 232, 208, 152, 149, 34, 129, 92, 186, 169,
+66, 24, 16, 123, 125, 192, 137, 213, 50, 165, 228, 206, 181, 115, 31,
+111, 58, 67, 60, 159, 206, 214, 170, 165, 112, 178, 24, 97, 115, 133,
+68, 182, 152, 227, 248, 32, 23, 76, 36, 81, 196, 231, 162, 66, 133,
+108, 49, 134, 4, 240, 0, 100, 1, 37, 96, 243, 120, 253, 206, 0, 205,
+194, 62, 135, 116, 245, 210, 43, 175, 207, 6, 120, 6, 231, 17, 151,
+203, 75, 70, 121, 62, 158, 140, 38, 18, 233, 114, 185, 81, 207, 21,
+210, 185, 108, 161, 25, 218, 144, 171, 52, 64, 126, 237, 136, 93, 43,
+87, 74, 165, 22, 79, 0, 35, 49, 18, 135, 28, 38, 149, 70, 180, 116,
+231, 147, 143, 150, 133, 100, 48, 28, 143, 231, 178, 89, 130, 143,
+211, 124, 50, 18, 3, 198, 23, 164, 195, 33, 54, 202, 187, 9, 200, 238,
+103, 210, 185, 84, 16, 243, 3, 112, 83, 91, 117, 106, 35, 142, 160,
+78, 59, 141, 251, 92, 38, 201, 212, 185, 215, 95, 88, 69, 194, 97,
+150, 193, 253, 126, 156, 75, 39, 163, 169, 108, 56, 149, 205, 23, 243,
+237, 70, 181, 92, 2, 4, 156, 143, 175, 201, 196, 42, 149, 215, 231,
+241, 219, 159, 61, 158, 169, 210, 123, 201, 103, 55, 35, 121, 194,
+227, 52, 232, 196, 242, 165, 179, 239, 108, 206, 218, 137, 112, 42,
+158, 76, 179, 126, 150, 15, 210, 65, 38, 154, 202, 167, 25, 152, 13,
+243, 49, 6, 162, 252, 122, 31, 29, 141, 112, 4, 230, 67, 32, 147, 82,
+167, 211, 89, 97, 239, 51, 115, 112, 56, 237, 90, 233, 244, 165, 247,
+127, 38, 9, 113, 153, 2, 72, 19, 56, 14, 142, 75, 70, 99, 137, 84,
+161, 93, 204, 182, 155, 157, 122, 181, 152, 15, 179, 241, 117, 157,
+66, 37, 51, 59, 29, 176, 221, 108, 178, 90, 77, 102, 56, 25, 39, 227,
+233, 20, 75, 128, 61, 208, 202, 22, 111, 124, 48, 63, 175, 113, 69,
+50, 133, 120, 56, 136, 163, 36, 78, 83, 161, 120, 42, 29, 227, 224, 0,
+21, 138, 145, 110, 194, 167, 129, 2, 36, 67, 186, 97, 159, 7, 210,
+171, 12, 90, 189, 53, 128, 98, 14, 167, 203, 5, 25, 117, 146, 181, 27,
+31, 188, 162, 141, 39, 75, 205, 12, 73, 210, 56, 155, 74, 38, 65, 192,
+78, 52, 218, 197, 124, 173, 212, 6, 69, 156, 137, 20, 242, 66, 131,
+221, 160, 118, 185, 173, 48, 100, 49, 155, 237, 14, 40, 80, 204, 132,
+99, 133, 76, 132, 65, 32, 143, 69, 45, 90, 188, 177, 180, 160, 129,
+57, 0, 63, 65, 0, 48, 94, 55, 73, 211, 92, 56, 17, 38, 224, 0, 75,
+145, 126, 23, 138, 24, 189, 8, 73, 144, 30, 55, 4, 104, 86, 97, 208,
+218, 92, 52, 21, 240, 59, 128, 51, 185, 76, 106, 217, 250, 233, 247,
+92, 209, 116, 173, 88, 136, 82, 65, 14, 9, 242, 73, 54, 150, 204, 180,
+58, 217, 108, 165, 212, 4, 37, 144, 75, 148, 203, 203, 70, 72, 103,
+128, 188, 32, 189, 25, 245, 86, 27, 4, 113, 233, 76, 44, 81, 204, 167,
+163, 132, 223, 239, 84, 75, 23, 239, 24, 23, 116, 100, 60, 27, 143,
+226, 132, 31, 70, 221, 110, 10, 128, 76, 44, 76, 51, 65, 150, 10, 248,
+172, 80, 64, 165, 246, 130, 204, 232, 243, 67, 118, 139, 74, 166, 209,
+67, 126, 16, 7, 253, 94, 139, 30, 132, 81, 171, 86, 113, 251, 156, 21,
+204, 38, 153, 12, 99, 4, 73, 248, 153, 8, 19, 139, 166, 27, 181, 124,
+178, 92, 109, 22, 42, 5, 96, 231, 37, 177, 193, 170, 49, 64, 144, 215,
+14, 214, 222, 232, 66, 125, 209, 76, 60, 146, 72, 149, 83, 60, 141,
+187, 236, 170, 205, 107, 183, 173, 235, 16, 155, 203, 177, 44, 78,
+249, 157, 48, 228, 244, 211, 24, 194, 132, 131, 36, 203, 199, 195,
+132, 215, 139, 201, 148, 174, 0, 65, 32, 132, 199, 10, 230, 111, 114,
+121, 220, 1, 220, 11, 249, 29, 102, 163, 201, 104, 49, 169, 4, 215,
+12, 65, 46, 30, 225, 227, 184, 199, 199, 160, 1, 38, 24, 74, 102, 26,
+173, 122, 42, 92, 171, 21, 42, 149, 124, 34, 154, 149, 27, 141, 26,
+131, 205, 233, 180, 58, 244, 102, 13, 16, 177, 108, 46, 26, 202, 164,
+243, 153, 100, 40, 136, 217, 164, 194, 171, 119, 52, 10, 52, 145, 143,
+4, 57, 50, 224, 118, 249, 32, 151, 23, 35, 124, 48, 31, 225, 193, 246,
+199, 200, 0, 68, 105, 196, 6, 24, 15, 160, 232, 179, 231, 14, 141, 14,
+167, 199, 14, 123, 189, 184, 215, 238, 52, 25, 76, 46, 171, 110, 237,
+83, 67, 52, 158, 204, 130, 218, 241, 81, 84, 52, 147, 46, 240, 217,
+74, 190, 87, 139, 198, 226, 217, 82, 183, 7, 244, 163, 170, 84, 26,
+85, 90, 139, 75, 103, 129, 0, 21, 194, 108, 188, 156, 79, 166, 10,
+249, 108, 58, 145, 14, 249, 61, 18, 201, 213, 37, 189, 5, 78, 68, 193,
+73, 120, 208, 235, 22, 163, 203, 15, 83, 126, 140, 15, 133, 240, 32,
+31, 4, 137, 142, 23, 45, 27, 60, 24, 140, 250, 253, 118, 27, 236, 116,
+184, 252, 46, 216, 225, 163, 16, 175, 211, 174, 50, 106, 77, 170, 165,
+139, 146, 72, 46, 158, 143, 99, 129, 16, 79, 36, 249, 104, 26, 156,
+63, 151, 207, 4, 67, 92, 56, 222, 232, 148, 51, 177, 166, 194, 100,
+215, 200, 1, 245, 155, 44, 78, 183, 159, 9, 197, 74, 233, 100, 54,
+155, 72, 231, 210, 96, 199, 125, 96, 253, 54, 157, 30, 16, 29, 227,
+137, 84, 208, 239, 177, 153, 108, 46, 156, 162, 96, 148, 69, 105, 130,
+97, 200, 24, 131, 241, 107, 27, 42, 23, 30, 112, 185, 253, 46, 48,
+186, 211, 9, 195, 126, 187, 199, 135, 6, 64, 245, 105, 85, 106, 197,
+226, 69, 67, 33, 203, 199, 163, 20, 18, 137, 176, 201, 0, 73, 70, 138,
+149, 114, 46, 201, 178, 108, 144, 47, 86, 154, 197, 84, 221, 100, 112,
+169, 101, 96, 116, 147, 215, 141, 6, 184, 120, 180, 4, 0, 183, 80, 46,
+100, 211, 233, 4, 71, 24, 20, 23, 76, 33, 154, 163, 130, 161, 84, 62,
+228, 246, 2, 85, 247, 96, 49, 46, 224, 37, 253, 20, 65, 249, 201, 48,
+138, 81, 27, 107, 160, 0, 124, 54, 7, 226, 129, 204, 144, 199, 139,
+147, 62, 15, 236, 113, 186, 61, 58, 181, 193, 168, 217, 152, 185, 224,
+111, 101, 19, 32, 123, 80, 9, 14, 166, 104, 138, 202, 230, 10, 245,
+66, 24, 15, 243, 209, 68, 30, 184, 88, 121, 203, 164, 116, 234, 212,
+42, 133, 222, 228, 245, 4, 80, 54, 29, 77, 87, 114, 229, 82, 163, 144,
+72, 102, 83, 81, 218, 165, 157, 193, 75, 233, 52, 75, 178, 169, 116,
+20, 65, 124, 126, 127, 0, 227, 163, 136, 143, 1, 150, 128, 131, 149,
+64, 56, 114, 125, 83, 7, 249, 189, 86, 167, 195, 3, 217, 65, 172, 123,
+246, 216, 141, 31, 182, 155, 76, 26, 29, 100, 84, 173, 207, 92, 68,
+70, 213, 124, 58, 23, 165, 89, 208, 165, 20, 195, 103, 50, 169, 82,
+28, 20, 34, 17, 6, 50, 92, 76, 22, 123, 90, 165, 219, 164, 209, 72,
+53, 118, 200, 23, 164, 168, 84, 50, 87, 204, 20, 106, 157, 114, 58,
+147, 76, 71, 48, 144, 23, 130, 229, 114, 142, 38, 216, 72, 130, 15,
+224, 132, 15, 165, 113, 42, 132, 251, 73, 152, 196, 80, 138, 98, 153,
+124, 98, 77, 172, 53, 195, 78, 139, 207, 139, 98, 30, 191, 7, 225, 40,
+143, 15, 193, 220, 86, 189, 222, 0, 60, 68, 178, 112, 141, 26, 215,
+193, 73, 227, 36, 198, 210, 40, 29, 138, 100, 51, 169, 92, 20, 33,
+113, 44, 20, 137, 101, 242, 225, 204, 200, 168, 179, 153, 244, 54,
+189, 206, 225, 198, 130, 161, 96, 182, 80, 44, 229, 203, 205, 97, 51,
+145, 201, 196, 24, 15, 224, 204, 106, 191, 158, 14, 146, 36, 199, 51,
+44, 73, 18, 236, 179, 219, 215, 60, 195, 32, 132, 207, 13, 179, 60,
+95, 136, 10, 132, 34, 35, 236, 116, 129, 45, 71, 96, 194, 71, 69, 130,
+62, 63, 6, 7, 28, 38, 171, 221, 232, 181, 41, 110, 77, 39, 234, 149,
+120, 60, 14, 236, 55, 22, 194, 105, 150, 11, 179, 177, 52, 233, 5,
+221, 68, 242, 108, 34, 147, 171, 118, 180, 50, 187, 75, 109, 55, 106,
+93, 40, 6, 26, 53, 149, 43, 20, 74, 245, 110, 167, 0, 94, 68, 105,
+212, 170, 218, 28, 238, 181, 210, 161, 0, 208, 93, 156, 167, 112, 63,
+27, 34, 113, 14, 148, 50, 140, 249, 33, 140, 224, 18, 217, 240, 166,
+80, 110, 245, 251, 64, 126, 198, 80, 140, 132, 137, 96, 16, 71, 200,
+128, 7, 132, 89, 39, 228, 2, 253, 63, 155, 106, 228, 99, 49, 142, 10,
+208, 113, 158, 4, 251, 200, 177, 201, 8, 98, 15, 164, 195, 48, 65, 63,
+123, 216, 171, 166, 22, 130, 56, 226, 210, 27, 188, 8, 193, 199, 146,
+137, 76, 179, 92, 105, 212, 59, 165, 98, 50, 17, 231, 16, 151, 81,
+214, 216, 239, 228, 210, 56, 202, 50, 100, 36, 72, 193, 12, 31, 12,
+208, 60, 135, 121, 188, 14, 27, 73, 81, 193, 108, 92, 176, 160, 54,
+123, 80, 24, 129, 41, 12, 37, 80, 20, 11, 146, 16, 141, 218, 129, 158,
+249, 73, 159, 92, 46, 93, 8, 54, 235, 113, 142, 225, 40, 32, 219, 52,
+67, 5, 130, 145, 44, 27, 176, 64, 177, 36, 73, 5, 227, 201, 90, 171,
+101, 22, 138, 213, 82, 179, 218, 233, 1, 198, 23, 206, 228, 11, 221,
+70, 179, 219, 238, 131, 6, 72, 70, 67, 4, 100, 91, 107, 28, 247, 202,
+37, 214, 135, 163, 161, 56, 71, 224, 28, 197, 178, 124, 140, 14, 192,
+40, 228, 101, 194, 84, 168, 156, 94, 157, 81, 104, 188, 120, 0, 3,
+149, 225, 195, 129, 113, 51, 28, 130, 147, 118, 224, 134, 126, 18, 81,
+75, 214, 4, 76, 179, 10, 212, 50, 6, 190, 41, 6, 39, 3, 225, 100, 2,
+209, 107, 80, 62, 29, 142, 103, 178, 201, 218, 176, 103, 217, 144,
+107, 20, 90, 173, 27, 130, 193, 214, 84, 139, 205, 97, 171, 221, 233,
+212, 203, 133, 116, 42, 198, 6, 28, 230, 141, 242, 126, 191, 148, 141,
+122, 159, 201, 87, 136, 198, 131, 28, 27, 138, 69, 1, 81, 128, 197,
+102, 131, 76, 188, 86, 157, 95, 18, 235, 97, 54, 64, 19, 56, 21, 192,
+41, 224, 202, 65, 18, 163, 124, 24, 225, 71, 40, 196, 172, 218, 88,
+230, 210, 185, 120, 54, 198, 135, 104, 138, 192, 253, 4, 30, 77, 146,
+14, 133, 26, 13, 68, 163, 177, 76, 46, 81, 105, 109, 153, 87, 229, 50,
+133, 206, 2, 74, 23, 104, 115, 173, 92, 217, 234, 15, 27, 181, 42,
+160, 228, 104, 152, 198, 236, 106, 121, 173, 217, 206, 69, 89, 143,
+135, 162, 226, 97, 142, 99, 131, 92, 34, 25, 75, 68, 128, 157, 134,
+19, 108, 172, 144, 175, 8, 5, 26, 8, 76, 44, 200, 2, 23, 10, 3, 44,
+73, 114, 52, 195, 128, 82, 246, 83, 84, 192, 99, 222, 220, 136, 196,
+242, 249, 76, 154, 197, 80, 134, 240, 249, 192, 69, 243, 62, 131, 74,
+13, 33, 108, 166, 156, 201, 36, 243, 173, 161, 75, 104, 209, 202, 164,
+6, 63, 228, 195, 249, 84, 181, 218, 218, 217, 25, 52, 186, 205, 114,
+46, 5, 234, 159, 242, 27, 213, 165, 122, 171, 156, 196, 252, 110, 10,
+184, 222, 179, 39, 232, 184, 100, 46, 17, 139, 49, 113, 62, 150, 207,
+130, 214, 44, 72, 148, 54, 136, 162, 128, 35, 209, 36, 23, 5, 84, 150,
+6, 90, 19, 226, 41, 46, 128, 5, 220, 168, 71, 170, 42, 53, 170, 245,
+124, 130, 128, 189, 20, 238, 6, 170, 133, 18, 94, 141, 94, 227, 166,
+18, 229, 90, 53, 7, 214, 127, 100, 85, 186, 204, 74, 169, 213, 235,
+245, 161, 161, 108, 115, 56, 216, 61, 28, 52, 123, 195, 86, 54, 93,
+78, 177, 52, 229, 145, 38, 27, 141, 102, 134, 176, 35, 4, 155, 200,
+166, 83, 169, 104, 56, 154, 41, 240, 225, 104, 52, 149, 44, 150, 234,
+81, 62, 188, 33, 246, 32, 56, 23, 141, 129, 230, 228, 249, 103, 124,
+3, 172, 129, 79, 4, 89, 22, 243, 249, 16, 143, 217, 90, 219, 170, 20,
+114, 9, 220, 225, 38, 49, 220, 143, 194, 94, 151, 77, 103, 84, 97,
+108, 182, 154, 111, 183, 18, 229, 110, 223, 164, 177, 0, 214, 116, 65,
+46, 140, 136, 22, 235, 131, 241, 193, 118, 187, 219, 27, 52, 138, 137,
+108, 130, 229, 72, 159, 46, 91, 170, 87, 83, 4, 232, 46, 138, 77, 21,
+18, 185, 84, 228, 217, 7, 151, 209, 96, 56, 145, 200, 132, 89, 135,
+61, 42, 93, 80, 120, 105, 46, 25, 102, 216, 96, 24, 96, 98, 38, 29,
+229, 185, 104, 38, 18, 142, 210, 126, 140, 14, 56, 124, 197, 70, 187,
+148, 138, 179, 46, 103, 24, 195, 92, 78, 143, 91, 175, 211, 104, 92,
+108, 168, 84, 47, 214, 26, 197, 76, 165, 100, 80, 232, 141, 38, 29,
+228, 116, 123, 217, 124, 179, 59, 217, 57, 158, 244, 250, 237, 94,
+175, 2, 128, 147, 15, 49, 62, 125, 238, 217, 159, 125, 160, 54, 159,
+151, 136, 230, 91, 185, 122, 129, 36, 129, 52, 199, 153, 68, 44, 193,
+249, 156, 106, 21, 171, 92, 220, 116, 17, 64, 76, 184, 68, 60, 149,
+76, 165, 75, 149, 100, 56, 150, 75, 198, 64, 218, 160, 104, 158, 241,
+121, 43, 173, 18, 80, 242, 160, 223, 197, 122, 157, 22, 192, 230, 122,
+147, 74, 1, 211, 185, 114, 5, 224, 71, 173, 84, 137, 105, 229, 128,
+19, 244, 54, 136, 192, 194, 165, 238, 225, 221, 157, 195, 237, 225,
+118, 191, 211, 108, 87, 242, 37, 144, 26, 32, 109, 175, 29, 226, 40,
+151, 209, 75, 144, 177, 66, 54, 26, 167, 29, 110, 10, 64, 28, 128,
+208, 84, 2, 115, 104, 141, 172, 118, 69, 228, 102, 2, 12, 30, 42, 54,
+11, 165, 76, 178, 92, 207, 37, 211, 169, 92, 46, 21, 5, 212, 17, 137,
+96, 68, 99, 144, 142, 167, 72, 216, 97, 115, 65, 110, 39, 130, 219,
+173, 102, 149, 14, 38, 138, 181, 114, 38, 26, 207, 231, 35, 25, 141,
+200, 104, 214, 107, 53, 254, 16, 145, 40, 142, 191, 120, 114, 178,
+191, 51, 153, 140, 134, 163, 113, 167, 81, 75, 165, 19, 168, 183, 21,
+15, 167, 73, 191, 211, 142, 249, 232, 68, 24, 243, 186, 32, 59, 14,
+19, 113, 32, 200, 145, 18, 175, 147, 233, 131, 166, 13, 177, 19, 7,
+155, 147, 107, 212, 43, 141, 84, 36, 223, 170, 84, 154, 165, 106, 54,
+155, 230, 19, 197, 66, 150, 160, 247, 6, 153, 44, 7, 1, 184, 245, 64,
+56, 194, 164, 67, 62, 149, 92, 239, 33, 203, 157, 104, 52, 20, 75,
+242, 92, 204, 162, 48, 168, 13, 6, 3, 196, 248, 169, 212, 246, 175,
+191, 124, 116, 124, 120, 116, 242, 160, 183, 55, 30, 237, 108, 213,
+39, 189, 76, 164, 156, 76, 102, 56, 212, 195, 71, 25, 62, 26, 13, 227,
+4, 229, 66, 252, 4, 79, 211, 161, 120, 53, 239, 17, 89, 88, 143, 193,
+234, 10, 160, 8, 149, 105, 101, 115, 213, 90, 161, 62, 222, 62, 222,
+174, 215, 11, 217, 124, 97, 56, 236, 245, 178, 133, 7, 187, 173, 122,
+206, 103, 49, 67, 126, 44, 204, 81, 201, 10, 101, 85, 42, 61, 225,
+122, 39, 93, 42, 148, 138, 192, 136, 189, 110, 132, 13, 184, 28, 16,
+237, 116, 208, 131, 175, 127, 253, 205, 175, 190, 252, 251, 191, 255,
+246, 233, 23, 15, 159, 62, 126, 120, 239, 193, 110, 39, 71, 187, 220,
+30, 187, 149, 40, 22, 34, 225, 76, 58, 157, 47, 68, 48, 220, 105, 177,
+251, 2, 88, 56, 93, 97, 45, 8, 205, 98, 193, 104, 44, 28, 171, 140,
+182, 123, 195, 227, 163, 221, 163, 131, 167, 15, 142, 6, 221, 70, 163,
+214, 236, 118, 250, 187, 227, 201, 147, 7, 199, 195, 173, 36, 76, 32,
+116, 170, 211, 142, 23, 39, 85, 218, 227, 141, 54, 119, 119, 218, 147,
+241, 110, 59, 139, 130, 78, 1, 42, 18, 4, 226, 79, 6, 139, 199, 223,
+252, 254, 247, 161, 120, 140, 113, 88, 84, 27, 107, 75, 115, 151, 78,
+159, 121, 243, 231, 63, 248, 238, 119, 126, 248, 131, 239, 190, 240,
+246, 187, 31, 156, 187, 120, 99, 122, 118, 250, 198, 153, 143, 222,
+61, 245, 201, 251, 103, 63, 62, 127, 123, 81, 36, 213, 122, 96, 189,
+86, 38, 22, 168, 92, 158, 128, 5, 116, 150, 114, 125, 117, 126, 118,
+122, 246, 198, 133, 91, 151, 206, 159, 63, 253, 201, 133, 79, 47, 223,
+184, 115, 254, 131, 143, 94, 127, 233, 204, 199, 151, 215, 148, 107,
+87, 174, 206, 207, 159, 187, 120, 101, 73, 105, 145, 109, 104, 53, 27,
+107, 243, 75, 152, 87, 52, 55, 7, 222, 124, 238, 194, 165, 219, 2,
+141, 92, 71, 109, 46, 47, 174, 204, 205, 222, 158, 154, 157, 155, 191,
+254, 233, 185, 55, 94, 126, 225, 133, 95, 188, 246, 242, 219, 231,
+166, 166, 87, 214, 133, 66, 193, 220, 244, 157, 235, 159, 158, 57,
+127, 229, 194, 213, 91, 203, 11, 51, 226, 205, 117, 147, 77, 36, 19,
+47, 206, 204, 175, 207, 175, 221, 158, 91, 93, 153, 185, 62, 179, 180,
+177, 178, 48, 123, 229, 202, 212, 242, 220, 237, 153, 155, 87, 47,
+158, 191, 122, 225, 250, 249, 215, 126, 113, 234, 245, 215, 63, 250,
+224, 195, 119, 222, 191, 190, 242, 233, 169, 55, 78, 93, 3, 95, 43,
+43, 119, 102, 86, 55, 3, 142, 77, 193, 218, 220, 165, 143, 207, 95,
+189, 61, 183, 182, 178, 166, 18, 155, 76, 122, 189, 78, 169, 144, 172,
+175, 172, 47, 76, 223, 62, 253, 242, 171, 175, 189, 115, 230, 204,
+181, 21, 185, 213, 108, 208, 201, 20, 106, 133, 120, 101, 246, 230,
+173, 185, 149, 153, 69, 225, 186, 64, 173, 82, 58, 76, 74, 163, 90,
+173, 53, 232, 180, 38, 173, 222, 168, 83, 172, 175, 139, 117, 154,
+205, 245, 213, 185, 37, 161, 112, 121, 117, 125, 241, 250, 202, 234,
+236, 194, 220, 181, 51, 87, 62, 189, 121, 231, 250, 245, 171, 115,
+243, 210, 249, 79, 62, 254, 228, 206, 181, 101, 161, 193, 164, 146,
+234, 108, 113, 139, 92, 184, 177, 177, 62, 183, 180, 34, 18, 9, 52,
+54, 135, 222, 227, 116, 121, 92, 6, 147, 86, 33, 94, 91, 94, 154, 185,
+246, 230, 91, 167, 174, 221, 156, 90, 85, 153, 97, 143, 13, 132, 42,
+183, 70, 45, 21, 9, 54, 197, 10, 145, 72, 97, 112, 1, 215, 197, 141,
+98, 157, 222, 230, 118, 219, 92, 62, 151, 219, 102, 182, 168, 164,
+122, 151, 85, 41, 18, 202, 193, 53, 201, 69, 178, 213, 219, 98, 144,
+195, 86, 231, 110, 222, 190, 51, 51, 53, 53, 63, 35, 82, 137, 231, 46,
+158, 63, 119, 107, 78, 166, 181, 219, 33, 163, 219, 87, 180, 234, 228,
+82, 165, 84, 164, 146, 72, 21, 98, 131, 195, 235, 122, 118, 11, 34, 0,
+178, 167, 90, 161, 17, 11, 231, 111, 190, 247, 206, 7, 55, 230, 55,
+100, 38, 79, 192, 7, 209, 12, 233, 55, 155, 76, 155, 27, 42, 181, 193,
+100, 245, 97, 145, 100, 144, 229, 76, 66, 29, 228, 118, 195, 1, 156,
+33, 49, 167, 27, 246, 152, 172, 46, 143, 86, 109, 50, 216, 32, 179,
+82, 172, 18, 204, 43, 124, 118, 237, 250, 141, 5, 201, 250, 198, 210,
+237, 213, 205, 85, 131, 108, 233, 242, 181, 171, 139, 74, 8, 113, 3,
+102, 246, 65, 37, 147, 205, 8, 2, 168, 202, 104, 212, 106, 77, 102, 4,
+245, 179, 145, 24, 144, 61, 139, 197, 172, 179, 201, 164, 243, 215,
+63, 254, 248, 236, 236, 154, 220, 232, 246, 35, 96, 174, 20, 229, 54,
+27, 205, 90, 141, 209, 14, 202, 141, 75, 229, 43, 57, 42, 226, 151,
+106, 237, 168, 15, 102, 128, 21, 176, 168, 63, 16, 240, 162, 1, 216,
+238, 244, 58, 96, 47, 216, 71, 181, 100, 213, 232, 212, 27, 133, 215,
+4, 114, 129, 68, 48, 39, 16, 175, 138, 20, 51, 183, 55, 215, 54, 141,
+48, 77, 132, 64, 128, 244, 151, 77, 46, 167, 78, 165, 49, 67, 32, 90,
+192, 8, 224, 178, 84, 166, 144, 8, 194, 48, 2, 89, 108, 90, 213, 210,
+229, 79, 46, 92, 94, 85, 107, 173, 68, 192, 135, 194, 30, 12, 131,
+236, 6, 147, 201, 108, 115, 251, 57, 42, 85, 47, 55, 10, 129, 24, 165,
+82, 154, 1, 91, 70, 66, 153, 4, 128, 163, 16, 77, 4, 41, 192, 38, 192,
+123, 96, 179, 201, 108, 209, 108, 152, 204, 66, 185, 104, 118, 93,
+176, 161, 20, 175, 129, 107, 88, 17, 205, 11, 100, 34, 165, 33, 144,
+0, 124, 193, 248, 209, 178, 217, 238, 50, 168, 213, 38, 7, 100, 195,
+162, 28, 8, 58, 197, 82, 41, 3, 204, 19, 6, 17, 206, 174, 152, 249,
+228, 163, 115, 179, 75, 50, 147, 147, 70, 125, 56, 130, 6, 80, 175,
+195, 106, 179, 218, 157, 110, 130, 33, 147, 205, 102, 189, 128, 197,
+162, 74, 149, 211, 139, 71, 66, 192, 20, 226, 233, 100, 42, 200, 240,
+36, 226, 241, 160, 126, 204, 103, 118, 185, 44, 242, 53, 163, 121, 99,
+73, 184, 46, 94, 23, 106, 36, 66, 133, 76, 38, 85, 10, 197, 66, 177,
+210, 205, 166, 50, 124, 140, 195, 200, 178, 214, 96, 81, 233, 236,
+102, 59, 226, 101, 18, 137, 34, 176, 93, 16, 62, 194, 20, 137, 66,
+118, 167, 89, 189, 124, 250, 173, 115, 231, 151, 150, 133, 46, 6, 245,
+130, 194, 32, 253, 96, 112, 171, 221, 231, 69, 24, 156, 75, 55, 58,
+141, 52, 157, 229, 55, 55, 116, 54, 50, 150, 46, 167, 99, 185, 108,
+50, 198, 114, 60, 13, 46, 222, 143, 131, 252, 238, 246, 59, 181, 66,
+187, 75, 176, 44, 218, 216, 16, 136, 100, 34, 145, 74, 45, 215, 152,
+117, 146, 13, 137, 10, 229, 147, 241, 68, 216, 235, 131, 99, 98, 145,
+222, 104, 116, 187, 17, 176, 248, 169, 114, 190, 144, 169, 151, 75,
+185, 100, 136, 194, 61, 144, 69, 173, 95, 63, 247, 202, 135, 23, 166,
+230, 215, 92, 12, 5, 130, 63, 5, 146, 173, 195, 229, 178, 61, 187, 83,
+78, 196, 242, 237, 110, 171, 16, 169, 209, 139, 66, 173, 7, 11, 101,
+203, 201, 88, 46, 21, 138, 208, 100, 130, 193, 225, 128, 15, 121, 246,
+231, 159, 62, 143, 67, 108, 115, 170, 55, 197, 27, 203, 18, 165, 68,
+45, 86, 201, 229, 26, 163, 86, 190, 177, 169, 246, 209, 124, 44, 65,
+120, 221, 246, 160, 92, 100, 48, 154, 156, 16, 142, 122, 136, 92, 181,
+156, 47, 130, 84, 12, 0, 39, 136, 120, 28, 102, 179, 86, 56, 243, 206,
+219, 239, 223, 158, 87, 249, 216, 48, 78, 134, 66, 152, 15, 125, 118,
+175, 14, 163, 72, 150, 201, 22, 218, 157, 118, 41, 222, 32, 231, 21,
+6, 59, 28, 41, 20, 114, 105, 128, 121, 49, 38, 16, 161, 193, 27, 0,
+175, 51, 56, 129, 123, 204, 235, 22, 72, 187, 46, 151, 138, 244, 122,
+141, 94, 174, 6, 74, 161, 213, 63, 123, 6, 198, 30, 12, 198, 120, 212,
+15, 123, 195, 234, 77, 189, 221, 102, 245, 0, 160, 197, 243, 245, 122,
+169, 82, 200, 167, 178, 41, 128, 222, 110, 200, 227, 52, 43, 103, 94,
+127, 243, 189, 107, 11, 206, 0, 64, 119, 42, 194, 49, 8, 236, 3, 17,
+136, 225, 104, 54, 92, 110, 116, 91, 221, 114, 162, 14, 175, 138, 228,
+118, 132, 43, 20, 243, 201, 76, 4, 0, 34, 1, 46, 19, 4, 51, 6, 101,
+152, 32, 110, 144, 173, 106, 32, 163, 80, 166, 83, 106, 140, 86, 157,
+66, 102, 208, 40, 149, 50, 153, 16, 68, 38, 46, 26, 15, 145, 168, 219,
+193, 106, 5, 82, 163, 211, 232, 64, 80, 28, 205, 182, 58, 181, 98, 49,
+159, 74, 102, 120, 128, 254, 94, 183, 197, 34, 95, 122, 243, 197, 183,
+175, 104, 92, 94, 148, 161, 40, 142, 193, 64, 200, 9, 192, 1, 38, 194,
+209, 116, 177, 209, 237, 182, 155, 173, 58, 49, 61, 39, 179, 186, 65,
+150, 200, 196, 192, 178, 1, 232, 96, 131, 1, 20, 67, 2, 224, 5, 235,
+49, 74, 197, 38, 191, 85, 41, 81, 170, 165, 6, 167, 86, 34, 84, 105,
+197, 98, 169, 104, 93, 168, 52, 179, 177, 112, 24, 67, 112, 23, 171,
+149, 43, 205, 110, 43, 196, 50, 12, 145, 107, 215, 155, 185, 82, 37,
+19, 5, 94, 132, 249, 129, 110, 88, 100, 203, 175, 189, 253, 222, 13,
+131, 217, 9, 38, 29, 138, 50, 56, 88, 88, 28, 193, 0, 107, 17, 84,
+161, 51, 236, 117, 118, 119, 251, 145, 233, 25, 177, 209, 69, 3, 30,
+3, 240, 29, 99, 96, 42, 130, 61, 83, 1, 15, 195, 208, 24, 100, 16,
+173, 217, 113, 189, 72, 164, 55, 73, 245, 22, 131, 66, 166, 208, 138,
+148, 10, 225, 138, 72, 107, 5, 249, 47, 138, 251, 121, 36, 10, 126,
+99, 178, 59, 208, 72, 144, 11, 229, 219, 229, 122, 54, 91, 202, 6, 99,
+12, 201, 224, 110, 179, 206, 162, 88, 121, 253, 163, 139, 75, 22, 167,
+131, 96, 64, 178, 2, 29, 0, 6, 38, 217, 48, 27, 196, 208, 228, 112,
+171, 219, 219, 219, 57, 136, 205, 204, 139, 204, 46, 208, 0, 49, 140,
+140, 198, 89, 31, 69, 227, 94, 196, 235, 133, 41, 134, 197, 237, 42,
+193, 170, 219, 15, 66, 164, 201, 174, 80, 200, 133, 74, 169, 18, 84,
+160, 106, 125, 77, 104, 180, 194, 225, 98, 18, 108, 57, 27, 183, 136,
+180, 70, 187, 3, 225, 249, 104, 172, 80, 170, 212, 147, 153, 124, 2,
+33, 8, 28, 67, 189, 46, 163, 85, 179, 246, 246, 245, 219, 162, 0, 236,
+15, 128, 101, 101, 130, 36, 205, 4, 16, 38, 20, 98, 185, 96, 32, 58,
+216, 30, 109, 13, 198, 39, 204, 236, 156, 204, 225, 11, 71, 211, 160,
+245, 35, 60, 27, 96, 72, 2, 193, 65, 14, 35, 41, 4, 177, 42, 215, 23,
+97, 216, 238, 51, 233, 172, 122, 133, 68, 40, 151, 202, 149, 106, 137,
+82, 182, 190, 105, 116, 66, 209, 82, 18, 134, 41, 50, 103, 22, 155,
+141, 30, 63, 78, 70, 146, 137, 108, 166, 88, 74, 255, 255, 105, 197,
+94, 197
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define PAPER_HANDLE 0
+#define PAPER_WIDTH 128
+#define PAPER_HEIGHT 128
+#define PAPER_CELLS 1
+#define ASSETS_END 16384UL
+static const shape_t PAPER_SHAPE = {0, 128, 128, 0};

+ 275 - 0
converted-assets/chess_assets.h

@@ -0,0 +1,275 @@
+static const PROGMEM uint8_t __assets[3937] = {
+0, 0, 0, 5, 0, 0, 0, 1, 32, 64, 16, 8, 32, 128, 48, 7, 34, 255, 255,
+255, 0, 0, 0, 0, 120, 156, 237, 92, 59, 114, 172, 188, 18, 102, 9,
+120, 7, 148, 87, 64, 149, 55, 64, 224, 5, 76, 226, 156, 200, 49, 153,
+83, 66, 135, 164, 206, 136, 29, 145, 59, 97, 1, 14, 102, 3, 174, 154,
+21, 184, 252, 126, 142, 61, 151, 175, 91, 18, 146, 144, 132, 24, 159,
+255, 220, 243, 223, 123, 90, 129, 61, 3, 159, 144, 90, 82, 191, 153,
+36, 249, 131, 41, 79, 202, 100, 149, 100, 123, 162, 219, 228, 78, 180,
+106, 15, 116, 163, 208, 104, 197, 98, 252, 198, 192, 183, 191, 29,
+223, 26, 248, 114, 49, 190, 50, 240, 249, 143, 158, 190, 116, 13, 154,
+9, 26, 109, 21, 137, 78, 157, 232, 187, 164, 143, 196, 23, 30, 252,
+102, 232, 57, 134, 242, 31, 226, 127, 58, 254, 36, 169, 157, 248, 34,
+26, 111, 175, 62, 198, 190, 4, 157, 77, 86, 112, 179, 96, 253, 87,
+214, 222, 31, 231, 159, 69, 161, 221, 220, 227, 81, 204, 245, 144, 5,
+208, 49, 107, 48, 221, 247, 118, 43, 3, 104, 223, 202, 235, 109, 189,
+231, 220, 199, 230, 231, 129, 123, 223, 216, 205, 127, 14, 231, 103,
+31, 230, 64, 23, 133, 247, 239, 164, 62, 10, 95, 7, 198, 191, 137,
+104, 254, 241, 99, 5, 231, 219, 95, 138, 165, 98, 177, 238, 207, 134,
+243, 209, 13, 59, 36, 75, 88, 142, 111, 22, 106, 174, 241, 4, 54, 66,
+10, 245, 11, 71, 48, 149, 93, 203, 70, 48, 197, 111, 196, 156, 98,
+118, 142, 79, 119, 177, 228, 40, 102, 241, 141, 141, 58, 123, 189,
+253, 190, 250, 60, 121, 158, 61, 187, 160, 148, 71, 127, 112, 63, 226,
+15, 238, 79, 158, 175, 183, 187, 221, 229, 135, 248, 38, 52, 134, 10,
+247, 95, 125, 238, 118, 231, 111, 230, 40, 78, 158, 119, 187, 155, 47,
+209, 111, 230, 197, 15, 79, 199, 179, 110, 191, 143, 30, 237, 121, 28,
+61, 238, 118, 215, 91, 193, 7, 55, 149, 184, 122, 189, 189, 250, 60,
+124, 112, 241, 15, 61, 136, 89, 184, 37, 208, 122, 78, 242, 156, 190,
+236, 118, 167, 47, 137, 219, 18, 88, 197, 200, 174, 235, 237, 237, 55,
+113, 97, 58, 130, 40, 217, 135, 57, 156, 189, 58, 120, 144, 199, 160,
+209, 110, 190, 110, 191, 233, 63, 115, 87, 199, 73, 126, 218, 79, 187,
+29, 173, 142, 62, 131, 212, 121, 47, 36, 109, 103, 127, 123, 248, 32,
+118, 71, 167, 175, 220, 225, 195, 100, 205, 59, 226, 177, 195, 146,
+16, 251, 64, 231, 64, 117, 252, 116, 241, 110, 161, 65, 78, 125, 136,
+53, 160, 255, 50, 109, 252, 107, 107, 228, 169, 159, 167, 151, 31,
+187, 29, 173, 161, 206, 193, 204, 224, 96, 225, 232, 83, 181, 139,
+119, 129, 47, 172, 53, 204, 134, 111, 112, 254, 219, 240, 138, 156,
+191, 237, 118, 180, 195, 221, 122, 156, 103, 181, 138, 88, 193, 210,
+137, 103, 242, 140, 61, 18, 31, 146, 98, 195, 30, 22, 146, 192, 111,
+135, 196, 217, 49, 54, 255, 70, 106, 162, 236, 128, 144, 92, 255, 95,
+176, 3, 176, 39, 215, 67, 107, 246, 196, 143, 123, 96, 159, 30, 114,
+156, 245, 219, 111, 58, 171, 177, 158, 147, 78, 25, 203, 138, 155, 47,
+194, 239, 67, 29, 180, 17, 237, 180, 122, 15, 116, 246, 163, 248, 67,
+105, 237, 213, 117, 180, 247, 11, 114, 159, 253, 58, 18, 173, 105, 18,
+49, 255, 37, 235, 104, 60, 27, 182, 131, 49, 134, 57, 78, 20, 250,
+179, 143, 30, 177, 254, 150, 54, 14, 239, 4, 237, 233, 144, 115, 76,
+202, 122, 153, 31, 129, 38, 183, 160, 19, 176, 127, 206, 223, 140, 17,
+180, 177, 120, 52, 101, 115, 140, 173, 11, 226, 59, 243, 238, 139,
+119, 210, 214, 241, 171, 104, 239, 155, 105, 155, 179, 70, 215, 146,
+251, 135, 15, 99, 139, 156, 61, 136, 86, 16, 150, 142, 78, 66, 59,
+207, 251, 223, 32, 146, 222, 120, 234, 209, 35, 55, 53, 130, 184, 51,
+80, 240, 222, 57, 126, 226, 118, 242, 124, 252, 36, 108, 131, 56, 75,
+188, 97, 123, 83, 167, 155, 47, 26, 65, 29, 133, 23, 54, 135, 228,
+157, 118, 134, 250, 8, 116, 26, 88, 187, 144, 239, 63, 82, 49, 236,
+162, 169, 221, 179, 30, 214, 46, 172, 177, 50, 210, 74, 217, 208, 74,
+135, 254, 238, 40, 18, 43, 239, 72, 45, 172, 220, 183, 238, 200, 141,
+222, 228, 29, 186, 44, 137, 243, 219, 237, 214, 10, 116, 21, 241, 52,
+119, 43, 8, 159, 123, 175, 119, 195, 76, 115, 111, 84, 98, 212, 74,
+165, 245, 61, 252, 181, 90, 227, 118, 62, 140, 177, 27, 190, 53, 71,
+83, 104, 28, 104, 136, 35, 229, 140, 199, 155, 210, 120, 86, 36, 229,
+106, 235, 90, 8, 55, 165, 165, 241, 220, 223, 69, 57, 53, 166, 76,
+124, 202, 5, 159, 83, 227, 170, 139, 58, 181, 110, 102, 36, 111, 67,
+87, 37, 247, 107, 15, 90, 183, 58, 87, 150, 39, 92, 25, 107, 156, 57,
+241, 171, 232, 157, 235, 198, 7, 173, 222, 8, 252, 79, 159, 159, 70,
+158, 195, 214, 195, 63, 208, 124, 15, 33, 244, 124, 15, 49, 22, 200,
+250, 240, 225, 234, 211, 110, 151, 31, 131, 20, 14, 235, 94, 53, 2,
+216, 157, 118, 35, 159, 35, 206, 142, 245, 207, 160, 253, 139, 255,
+29, 248, 131, 251, 139, 119, 187, 81, 204, 32, 102, 253, 6, 191, 27,
+81, 18, 155, 40, 238, 210, 71, 160, 195, 251, 55, 60, 131, 152, 19,
+232, 239, 225, 103, 231, 55, 22, 237, 235, 97, 21, 141, 70, 155, 74,
+241, 101, 248, 236, 151, 63, 31, 243, 143, 241, 250, 209, 124, 107,
+16, 227, 245, 255, 27, 60, 255, 95, 69, 217, 160, 55, 227, 226, 214,
+146, 210, 97, 29, 11, 133, 38, 27, 90, 179, 122, 139, 25, 15, 32, 23,
+58, 158, 207, 121, 125, 112, 143, 115, 155, 176, 223, 32, 109, 212,
+117, 96, 60, 29, 98, 75, 36, 41, 176, 63, 202, 131, 123, 68, 131, 19,
+182, 212, 74, 120, 99, 215, 219, 65, 10, 216, 30, 100, 74, 85, 10,
+160, 30, 126, 3, 121, 124, 69, 50, 90, 32, 60, 254, 18, 222, 48, 69,
+222, 26, 129, 41, 141, 49, 247, 9, 237, 225, 227, 39, 242, 52, 120,
+140, 189, 54, 155, 2, 145, 175, 227, 39, 26, 155, 140, 13, 2, 211, 30,
+220, 139, 40, 9, 198, 80, 209, 247, 210, 50, 101, 111, 184, 146, 120,
+106, 43, 230, 140, 192, 148, 73, 171, 162, 36, 60, 135, 141, 118, 190,
+116, 124, 169, 158, 168, 115, 182, 98, 111, 75, 139, 103, 242, 152,
+121, 110, 204, 241, 154, 254, 111, 52, 201, 81, 98, 101, 7, 12, 143,
+179, 16, 179, 41, 52, 76, 59, 153, 255, 90, 235, 171, 18, 99, 201,
+196, 10, 212, 26, 166, 19, 243, 28, 163, 191, 189, 54, 123, 189, 175,
+66, 173, 160, 180, 237, 138, 100, 212, 62, 165, 242, 196, 54, 201,
+152, 23, 105, 147, 209, 223, 24, 101, 72, 161, 238, 28, 165, 104, 175,
+73, 164, 66, 217, 158, 173, 218, 21, 122, 76, 43, 85, 119, 234, 62,
+194, 218, 249, 223, 70, 253, 167, 211, 114, 15, 202, 212, 133, 205,
+98, 188, 121, 18, 87, 139, 241, 153, 129, 79, 205, 171, 50, 250, 32,
+189, 127, 218, 45, 250, 29, 83, 79, 88, 204, 224, 236, 245, 234, 19,
+231, 204, 165, 193, 175, 62, 41, 251, 130, 230, 138, 2, 173, 241, 92,
+228, 55, 112, 234, 47, 63, 46, 63, 216, 114, 184, 252, 128, 253, 120,
+189, 229, 43, 137, 220, 5, 83, 154, 171, 29, 240, 143, 125, 25, 23,
+67, 30, 208, 252, 62, 8, 219, 64, 29, 103, 236, 206, 223, 48, 111,
+158, 57, 120, 1, 251, 233, 228, 121, 54, 22, 154, 77, 35, 39, 38, 29,
+61, 6, 99, 177, 21, 228, 194, 233, 11, 71, 108, 56, 114, 130, 157,
+128, 93, 128, 56, 206, 233, 11, 141, 160, 12, 141, 62, 162, 249, 57,
+240, 83, 124, 74, 25, 43, 127, 204, 97, 67, 121, 220, 121, 130, 231,
+11, 93, 87, 82, 131, 70, 132, 223, 155, 69, 32, 255, 44, 130, 206, 45,
+127, 128, 174, 19, 142, 25, 238, 99, 49, 233, 222, 116, 187, 7, 62,
+211, 214, 177, 222, 3, 143, 241, 183, 201, 210, 202, 41, 147, 202,
+160, 180, 136, 65, 163, 117, 63, 230, 95, 156, 223, 12, 26, 215, 202,
+60, 75, 249, 228, 250, 20, 217, 18, 199, 55, 131, 12, 43, 19, 91, 146,
+21, 234, 58, 56, 50, 61, 67, 43, 200, 173, 211, 23, 200, 41, 138, 245,
+246, 214, 41, 236, 173, 235, 157, 245, 108, 202, 140, 223, 124, 65,
+226, 65, 79, 88, 218, 230, 142, 235, 32, 174, 183, 151, 31, 168, 47,
+152, 248, 146, 13, 242, 226, 178, 102, 1, 222, 231, 237, 183, 153,
+181, 184, 120, 191, 249, 146, 249, 105, 216, 91, 100, 199, 141, 156,
+232, 145, 233, 176, 159, 54, 142, 225, 252, 205, 188, 10, 173, 148,
+232, 246, 203, 26, 118, 171, 57, 222, 235, 173, 204, 104, 99, 102,
+230, 104, 206, 94, 233, 218, 168, 193, 91, 216, 166, 102, 254, 28, 40,
+30, 1, 244, 128, 217, 183, 168, 7, 201, 20, 190, 192, 24, 237, 76,
+199, 237, 55, 231, 93, 110, 191, 105, 182, 170, 29, 63, 209, 157, 189,
+177, 2, 29, 56, 104, 230, 58, 174, 62, 241, 25, 150, 170, 62, 122,
+149, 233, 47, 12, 188, 200, 246, 233, 153, 30, 104, 45, 204, 67, 231,
+29, 208, 158, 72, 64, 137, 145, 237, 118, 23, 239, 208, 62, 199, 79,
+200, 82, 195, 150, 135, 45, 113, 249, 193, 223, 33, 171, 65, 188, 112,
+159, 201, 30, 61, 192, 74, 224, 120, 209, 229, 199, 249, 219, 233, 11,
+120, 141, 94, 208, 143, 120, 182, 47, 243, 60, 19, 255, 155, 205, 34,
+164, 17, 209, 119, 52, 191, 6, 234, 162, 240, 126, 251, 163, 145, 92,
+62, 121, 62, 123, 133, 13, 33, 99, 47, 167, 47, 199, 79, 106, 252,
+126, 105, 84, 241, 186, 141, 22, 219, 205, 23, 248, 169, 89, 15, 225,
+92, 110, 201, 79, 103, 219, 65, 231, 28, 91, 17, 244, 41, 36, 79, 99,
+44, 184, 176, 253, 228, 207, 22, 220, 209, 216, 235, 32, 90, 142, 98,
+53, 112, 162, 30, 158, 212, 82, 107, 134, 86, 15, 115, 251, 83, 99,
+246, 255, 28, 161, 254, 191, 218, 91, 127, 54, 138, 239, 237, 30, 232,
+18, 182, 44, 246, 31, 201, 148, 122, 49, 190, 99, 127, 95, 68, 14,
+151, 107, 241, 142, 107, 217, 132, 111, 190, 28, 95, 201, 44, 44, 73,
+213, 122, 49, 126, 197, 18, 53, 162, 214, 199, 69, 13, 208, 60, 254,
+235, 45, 245, 176, 164, 6, 164, 98, 185, 61, 250, 13, 164, 65, 234,
+104, 252, 6, 218, 100, 18, 189, 141, 173, 34, 201, 228, 204, 117, 18,
+145, 151, 24, 74, 93, 120, 226, 65, 236, 9, 238, 117, 41, 200, 60,
+156, 145, 124, 38, 173, 76, 57, 74, 185, 143, 101, 107, 72, 61, 160,
+18, 83, 85, 48, 44, 169, 63, 73, 121, 253, 121, 13, 132, 190, 110,
+162, 173, 80, 138, 150, 156, 60, 235, 235, 47, 170, 38, 139, 40, 244,
+29, 215, 200, 153, 36, 108, 186, 185, 30, 72, 135, 242, 188, 109, 138,
+170, 68, 170, 245, 186, 19, 155, 200, 118, 8, 159, 131, 205, 116, 231,
+76, 118, 145, 127, 4, 121, 232, 233, 32, 178, 63, 252, 60, 40, 125,
+115, 55, 120, 224, 183, 31, 42, 251, 220, 217, 68, 182, 152, 159, 3,
+181, 148, 153, 126, 26, 86, 177, 245, 226, 155, 177, 234, 194, 215,
+130, 218, 160, 162, 220, 125, 184, 197, 233, 240, 191, 244, 43, 104,
+31, 207, 31, 214, 210, 138, 112, 89, 18, 142, 246, 187, 105, 67, 114,
+2, 181, 199, 236, 129, 198, 251, 190, 76, 61, 60, 33, 182, 62, 225,
+75, 36, 161, 122, 117, 23, 173, 217, 118, 61, 124, 128, 252, 38, 63,
+173, 183, 170, 73, 66, 148, 226, 185, 39, 207, 242, 20, 27, 94, 97,
+27, 193, 139, 210, 150, 157, 55, 95, 215, 91, 196, 67, 73, 242, 172,
+103, 71, 209, 35, 51, 224, 38, 33, 195, 179, 0, 154, 228, 215, 213,
+39, 124, 45, 87, 15, 162, 114, 221, 63, 139, 22, 190, 55, 230, 170,
+103, 112, 117, 137, 66, 235, 225, 91, 209, 12, 79, 135, 132, 60, 125,
+25, 49, 176, 28, 116, 153, 24, 168, 156, 110, 88, 122, 153, 18, 16,
+79, 212, 63, 83, 62, 201, 101, 205, 165, 211, 170, 57, 150, 151, 246,
+183, 52, 135, 114, 130, 175, 93, 178, 23, 220, 48, 45, 9, 33, 195,
+251, 201, 211, 55, 211, 200, 45, 123, 238, 108, 197, 233, 68, 123, 33,
+51, 240, 229, 244, 233, 231, 111, 124, 10, 166, 120, 210, 66, 230, 12,
+122, 216, 218, 58, 215, 201, 222, 106, 57, 46, 96, 227, 105, 6, 173,
+185, 114, 208, 173, 114, 231, 146, 197, 177, 161, 85, 234, 93, 185,
+124, 210, 34, 250, 26, 172, 160, 247, 16, 101, 225, 171, 195, 179, 55,
+242, 13, 34, 183, 62, 165, 59, 244, 125, 184, 134, 181, 123, 243, 133,
+157, 67, 59, 48, 39, 158, 174, 17, 189, 112, 225, 233, 44, 100, 198,
+12, 68, 188, 139, 120, 195, 26, 182, 117, 217, 49, 76, 116, 18, 236,
+179, 136, 24, 113, 175, 214, 86, 196, 51, 220, 68, 79, 113, 239, 226,
+66, 201, 206, 128, 46, 15, 224, 153, 154, 176, 37, 50, 131, 119, 90,
+208, 147, 249, 251, 241, 43, 72, 128, 105, 13, 200, 216, 28, 17, 36,
+157, 226, 222, 31, 240, 203, 66, 126, 19, 99, 174, 253, 249, 132, 170,
+197, 126, 111, 123, 167, 85, 153, 225, 125, 234, 255, 83, 246, 32,
+132, 247, 176, 220, 14, 72, 101, 46, 138, 228, 229, 62, 17, 240, 22,
+178, 151, 118, 90, 187, 7, 58, 213, 226, 15, 241, 190, 143, 36, 242,
+129, 80, 129, 126, 241, 78, 146, 112, 179, 200, 255, 170, 193, 187,
+81, 107, 137, 55, 218, 234, 72, 116, 51, 122, 95, 28, 183, 84, 92,
+108, 227, 158, 205, 177, 83, 16, 50, 119, 198, 153, 157, 27, 67, 166,
+75, 45, 84, 93, 35, 35, 43, 63, 71, 248, 224, 154, 22, 28, 163, 214,
+82, 3, 146, 53, 52, 147, 255, 28, 229, 206, 245, 22, 25, 79, 249, 254,
+162, 156, 207, 76, 13, 88, 111, 202, 45, 140, 223, 252, 60, 131, 111,
+77, 169, 123, 246, 58, 242, 82, 140, 191, 13, 226, 11, 151, 21, 33,
+137, 180, 78, 17, 196, 83, 236, 225, 232, 241, 236, 85, 102, 189, 217,
+250, 187, 252, 56, 123, 21, 121, 149, 57, 10, 199, 80, 179, 89, 60,
+73, 111, 172, 152, 94, 125, 41, 86, 179, 140, 64, 19, 15, 144, 111,
+193, 184, 101, 67, 52, 62, 98, 238, 76, 141, 119, 244, 113, 114, 108,
+208, 250, 151, 31, 102, 228, 90, 228, 148, 226, 162, 120, 27, 224, 37,
+231, 57, 255, 142, 92, 6, 73, 210, 24, 57, 146, 143, 57, 104, 45, 10,
+142, 220, 115, 76, 253, 127, 74, 241, 231, 158, 253, 8, 140, 92, 228,
+84, 122, 85, 255, 159, 58, 252, 50, 249, 182, 180, 202, 64, 28, 62,
+192, 118, 145, 107, 167, 229, 150, 228, 125, 58, 47, 169, 206, 8, 249,
+21, 236, 247, 243, 55, 112, 79, 158, 127, 25, 69, 194, 10, 226, 109,
+24, 174, 14, 48, 60, 179, 194, 101, 101, 170, 90, 143, 13, 78, 132,
+29, 213, 48, 98, 90, 84, 77, 117, 241, 126, 245, 41, 251, 63, 122, 20,
+124, 235, 104, 166, 45, 115, 146, 179, 26, 200, 231, 224, 78, 195,
+151, 201, 141, 93, 50, 173, 255, 199, 27, 21, 237, 36, 39, 169, 75,
+244, 50, 25, 235, 255, 67, 107, 204, 149, 1, 141, 67, 146, 102, 142,
+187, 67, 253, 252, 137, 148, 83, 157, 125, 37, 206, 121, 33, 62, 85,
+130, 83, 165, 248, 92, 120, 208, 122, 254, 12, 61, 232, 188, 78, 141,
+218, 26, 175, 255, 6, 185, 71, 107, 219, 177, 22, 132, 63, 72, 251,
+168, 129, 39, 130, 154, 152, 201, 187, 199, 26, 94, 202, 122, 185,
+219, 181, 248, 253, 221, 104, 209, 14, 58, 160, 13, 227, 33, 45, 32,
+123, 199, 221, 202, 50, 108, 14, 63, 23, 125, 227, 190, 189, 17, 180,
+12, 222, 251, 92, 252, 143, 164, 88, 230, 89, 1, 202, 90, 192, 143,
+114, 55, 17, 205, 8, 203, 48, 191, 244, 189, 139, 180, 64, 58, 172,
+227, 180, 69, 213, 111, 131, 90, 183, 239, 49, 172, 106, 92, 44, 200,
+131, 31, 214, 237, 71, 248, 159, 62, 255, 191, 141, 255, 109, 243,
+111, 32, 241, 167, 45, 254, 253, 15, 239, 238, 139, 137, 38, 118, 254,
+252, 1, 237, 192, 112, 15, 157, 110, 239, 218, 68, 149, 16, 161, 30,
+58, 105, 249, 184, 27, 116, 104, 224, 20, 116, 193, 147, 167, 55, 215,
+24, 114, 112, 157, 235, 37, 253, 13, 215, 61, 190, 123, 62, 151, 123,
+24, 249, 232, 195, 155, 239, 172, 250, 154, 247, 183, 3, 218, 136,
+232, 63, 103, 0, 246, 171, 168, 250, 255, 163, 130, 170, 23, 178, 5,
+136, 92, 105, 127, 210, 231, 176, 197, 148, 213, 156, 206, 190, 77,
+176, 18, 22, 47, 219, 150, 45, 124, 79, 202, 56, 21, 201, 88, 207, 23,
+58, 195, 253, 241, 147, 168, 209, 193, 152, 43, 104, 67, 245, 54, 64,
+5, 237, 74, 111, 129, 217, 249, 175, 124, 176, 197, 120, 92, 84, 255,
+79, 158, 70, 150, 140, 158, 80, 79, 119, 85, 28, 11, 28, 240, 165,
+129, 41, 96, 25, 36, 170, 254, 159, 254, 151, 177, 197, 53, 225, 107,
+201, 13, 236, 111, 186, 150, 139, 200, 10, 230, 210, 97, 150, 234, 45,
+133, 74, 88, 160, 140, 215, 107, 241, 165, 117, 132, 187, 26, 173,
+230, 191, 85, 191, 107, 83, 36, 99, 29, 118, 70, 152, 78, 179, 150,
+42, 109, 46, 141, 246, 206, 65, 174, 188, 140, 76, 27, 243, 74, 123,
+190, 138, 102, 38, 102, 253, 190, 236, 45, 23, 24, 241, 254, 0, 98, 6,
+66, 207, 175, 233, 109, 136, 154, 198, 181, 161, 255, 185, 175, 70,
+216, 2, 114, 37, 229, 103, 194, 156, 190, 208, 154, 193, 79, 225, 12,
+76, 151, 8, 159, 82, 224, 101, 157, 212, 104, 159, 203, 74, 73, 124,
+179, 65, 12, 87, 206, 236, 122, 59, 244, 133, 253, 215, 137, 42, 186,
+58, 25, 127, 99, 32, 211, 118, 192, 32, 251, 104, 109, 134, 93, 6,
+143, 157, 158, 90, 169, 247, 255, 87, 236, 209, 18, 126, 133, 93, 61,
+120, 48, 186, 47, 152, 2, 47, 242, 203, 119, 252, 171, 3, 248, 159,
+253, 47, 84, 46, 112, 76, 132, 162, 206, 84, 25, 49, 209, 101, 20,
+119, 224, 223, 90, 96, 41, 10, 127, 147, 53, 201, 197, 187, 212, 167,
+144, 188, 252, 155, 10, 137, 157, 197, 21, 182, 227, 245, 22, 39, 128,
+43, 175, 144, 137, 145, 82, 155, 125, 89, 212, 193, 225, 175, 85, 125,
+152, 48, 127, 57, 86, 141, 123, 166, 213, 147, 104, 71, 143, 152, 163,
+154, 135, 121, 10, 169, 2, 83, 254, 210, 2, 238, 228, 10, 116, 246,
+126, 207, 223, 206, 94, 101, 253, 216, 241, 19, 173, 110, 159, 216,
+164, 226, 231, 126, 205, 161, 124, 89, 87, 36, 65, 236, 10, 182, 248,
+101, 5, 186, 124, 11, 129, 171, 207, 81, 3, 79, 104, 119, 28, 32, 215,
+103, 203, 53, 103, 147, 95, 0, 64, 243, 91, 33, 43, 25, 243, 116, 141,
+253, 230, 75, 228, 142, 66, 18, 176, 55, 179, 77, 38, 69, 196, 80,
+214, 216, 243, 28, 241, 65, 221, 30, 154, 124, 7, 226, 230, 139, 214,
+61, 84, 191, 62, 83, 193, 40, 228, 175, 159, 40, 98, 60, 198, 158, 32,
+111, 209, 120, 68, 34, 155, 26, 138, 251, 175, 67, 57, 15, 245, 11,
+98, 254, 40, 206, 90, 238, 84, 196, 34, 208, 224, 55, 224, 47, 246,
+131, 170, 66, 173, 189, 248, 108, 184, 214, 5, 126, 251, 104, 77, 245,
+240, 243, 182, 67, 42, 222, 125, 47, 232, 45, 0, 89, 253, 255, 111,
+180, 57, 250, 189, 127, 61, 136, 163, 38, 172, 177, 178, 61, 208, 105,
+228, 158, 243, 83, 167, 240, 245, 94, 120, 169, 87, 246, 175, 219, 44,
+146, 253, 126, 251, 136, 105, 37, 70, 191, 244, 55, 16, 153, 50, 174,
+65, 160, 184, 99, 252, 47, 215, 142, 191, 214, 80, 203, 248, 135, 150,
+235, 211, 175, 219, 148, 171, 250, 254, 13, 229, 75, 26, 153, 59, 37,
+169, 183, 210, 42, 107, 81, 129, 99, 247, 65, 146, 135, 227, 53, 34,
+95, 162, 114, 175, 34, 223, 173, 174, 139, 74, 6, 189, 135, 20, 49,
+215, 49, 222, 34, 127, 1, 144, 191, 225, 138, 2, 84, 118, 203, 235,
+34, 66, 52, 82, 101, 103, 217, 57, 127, 205, 249, 39, 244, 101, 199,
+228, 41, 166, 52, 174, 74, 235, 202, 19, 3, 199, 85, 252, 211, 204,
+188, 120, 119, 83, 82, 231, 242, 152, 113, 15, 250, 112, 245, 77, 246,
+197, 40, 201, 157, 181, 3, 34, 223, 226, 212, 168, 86, 52, 221, 243,
+222, 23, 103, 96, 92, 61, 107, 86, 189, 26, 129, 93, 167, 192, 182,
+187, 107, 102, 206, 42, 54, 71, 174, 29, 179, 52, 235, 72, 65, 180,
+159, 90, 199, 254, 27, 214, 152, 61, 84, 216, 27, 167, 47, 50, 138,
+119, 112, 15, 109, 48, 86, 179, 123, 207, 67, 227, 178, 120, 156, 214,
+144, 91, 131, 137, 19, 39, 223, 53, 52, 57, 193, 249, 12, 122, 186,
+95, 154, 245, 225, 172, 249, 108, 253, 93, 51, 87, 127, 71, 43, 234,
+215, 191, 37, 118, 44, 236, 148, 209, 134, 26, 109, 39, 188, 89, 163,
+106, 35, 220, 84, 152, 191, 29, 58, 109, 51, 57, 144, 156, 239, 193,
+179, 228, 123, 24, 242, 109, 12, 126, 155, 36, 153, 171, 162, 93, 243,
+26, 48, 90, 242, 12, 77, 189, 79, 211, 6, 241, 169, 202, 132, 8, 27,
+208, 176, 253, 226, 106, 7, 211, 129, 15, 165, 122, 3, 128, 171, 255,
+43, 146, 128, 255, 0, 149, 109, 91, 254, 7, 191, 138, 163, 53
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define PIECE_FG_HANDLE 0
+#define PIECE_FG_WIDTH 32
+#define PIECE_FG_HEIGHT 32
+#define PIECE_FG_CELLS 12
+#define CHECKER 24576UL
+#define CHECKER_WIDTH 2
+#define CHECKER_HEIGHT 2
+#define ASSETS_END 24580UL
+static const shape_t PIECE_FG_SHAPE = {0, 32, 32, 0};

File diff suppressed because it is too large
+ 44 - 0
converted-assets/cobra_assets.h


+ 17 - 0
converted-assets/examples2_assets.h

@@ -0,0 +1,17 @@
+#define EX2_LOAD_ASSETS()  GD.safeload("examples2.gd2");
+#define EX2_GAMEDUINO_HANDLE 0
+#define EX2_GAMEDUINO_WIDTH 395
+#define EX2_GAMEDUINO_HEIGHT 113
+#define EX2_GAMEDUINO_CELLS 1
+#define EX2_WALK_HANDLE 1
+#define EX2_WALK_WIDTH 32
+#define EX2_WALK_HEIGHT 32
+#define EX2_WALK_CELLS 8
+#define EX2_STRIPE_HANDLE 2
+#define EX2_STRIPE_WIDTH 8
+#define EX2_STRIPE_HEIGHT 8
+#define EX2_STRIPE_CELLS 1
+#define EX2_ASSETS_END 105782UL
+static const shape_t EX2_GAMEDUINO_SHAPE = {0, 395, 113, 0};
+static const shape_t EX2_WALK_SHAPE = {1, 32, 32, 0};
+static const shape_t EX2_STRIPE_SHAPE = {2, 8, 8, 0};

+ 27 - 0
converted-assets/examples_assets.h

@@ -0,0 +1,27 @@
+#define LOAD_ASSETS()  GD.safeload("examples.gd2");
+#define VIGNETTE_HANDLE 0
+#define VIGNETTE_WIDTH 128
+#define VIGNETTE_HEIGHT 128
+#define VIGNETTE_CELLS 1
+#define CARDS_HANDLE 1
+#define CARDS_WIDTH 40
+#define CARDS_HEIGHT 60
+#define CARDS_CELLS 53
+#define SPRITES_HANDLE 2
+#define SPRITES_WIDTH 16
+#define SPRITES_HEIGHT 16
+#define SPRITES_CELLS 100
+#define SPECTRUM_HANDLE 3
+#define SPECTRUM_WIDTH 512
+#define SPECTRUM_HEIGHT 1
+#define SPECTRUM_CELLS 1
+#define ABE_HANDLE 4
+#define ABE_WIDTH 220
+#define ABE_HEIGHT 272
+#define ABE_CELLS 2
+#define ASSETS_END 211040UL
+static const shape_t VIGNETTE_SHAPE = {0, 128, 128, 0};
+static const shape_t CARDS_SHAPE = {1, 40, 60, 0};
+static const shape_t SPRITES_SHAPE = {2, 16, 16, 0};
+static const shape_t SPECTRUM_SHAPE = {3, 512, 1, 0};
+static const shape_t ABE_SHAPE = {4, 220, 272, 0};

+ 1089 - 0
converted-assets/fonts_assets.h

@@ -0,0 +1,1089 @@
+static const PROGMEM uint8_t __assets[16476] = {
+0, 0, 0, 5, 0, 0, 0, 1, 80, 98, 0, 8, 80, 50, 16, 7, 0, 6, 15, 1, 43,
+255, 255, 255, 0, 0, 0, 0, 0, 238, 2, 0, 34, 255, 255, 255, 0, 0, 0,
+0, 120, 156, 237, 157, 123, 148, 84, 199, 125, 231, 111, 247, 60, 96,
+96, 152, 225, 225, 167, 44, 209, 173, 65, 178, 172, 216, 214, 140, 37,
+228, 36, 39, 113, 186, 109, 132, 116, 178, 127, 120, 136, 5, 146, 157,
+179, 71, 221, 177, 5, 82, 156, 93, 15, 201, 90, 12, 100, 143, 183,
+199, 201, 26, 16, 142, 61, 228, 156, 216, 2, 252, 232, 217, 179, 39,
+54, 47, 123, 72, 156, 236, 134, 151, 186, 179, 121, 173, 0, 49, 120,
+179, 235, 181, 45, 160, 219, 114, 188, 177, 4, 51, 141, 4, 2, 241,
+152, 190, 219, 245, 184, 85, 245, 171, 250, 253, 134, 105, 104, 96,
+192, 245, 61, 7, 166, 231, 126, 166, 239, 189, 85, 183, 238, 239, 87,
+191, 95, 213, 173, 27, 4, 94, 94, 94, 94, 94, 94, 94, 94, 94, 55, 92,
+233, 32, 104, 70, 193, 232, 103, 31, 57, 142, 130, 176, 38, 15, 60,
+184, 25, 65, 37, 12, 171, 40, 248, 206, 129, 125, 63, 66, 65, 253, 90,
+59, 59, 246, 52, 126, 240, 106, 5, 63, 248, 212, 172, 171, 250, 65,
+41, 12, 199, 81, 240, 239, 42, 213, 127, 68, 129, 151, 151, 87, 3, 53,
+243, 133, 71, 103, 7, 243, 62, 113, 208, 1, 29, 181, 123, 115, 22,
+102, 253, 58, 107, 27, 59, 176, 59, 186, 83, 124, 3, 5, 151, 218, 49,
+80, 219, 205, 197, 153, 216, 49, 106, 224, 252, 12, 12, 212, 246, 255,
+102, 27, 102, 53, 106, 251, 63, 55, 189, 118, 28, 7, 212, 118, 115,
+118, 90, 24, 94, 112, 64, 237, 175, 223, 104, 173, 237, 206, 1, 181,
+141, 103, 90, 106, 223, 114, 64, 115, 24, 158, 174, 253, 59, 227, 128,
+96, 36, 252, 126, 205, 152, 21, 93, 224, 229, 229, 229, 229, 229, 229,
+117, 189, 52, 119, 241, 10, 107, 203, 151, 107, 157, 137, 108, 19, 18,
+205, 213, 54, 133, 43, 107, 253, 3, 187, 75, 209, 196, 130, 150, 116,
+173, 171, 97, 119, 41, 90, 25, 152, 93, 235, 181, 216, 93, 138, 54,
+190, 19, 214, 51, 178, 186, 20, 172, 235, 115, 49, 72, 132, 78, 151,
+162, 183, 182, 233, 124, 208, 87, 251, 255, 156, 177, 245, 137, 80,
+232, 88, 133, 255, 120, 89, 129, 193, 16, 232, 13, 5, 242, 16, 232,
+163, 12, 79, 18, 232, 195, 23, 32, 120, 179, 113, 224, 188, 2, 95,
+250, 131, 76, 200, 122, 81, 51, 88, 133, 205, 253, 244, 15, 140, 178,
+167, 106, 155, 138, 172, 103, 6, 106, 68, 22, 241, 72, 112, 7, 216,
+15, 239, 13, 154, 210, 87, 170, 27, 130, 112, 54, 5, 200, 111, 40,
+144, 152, 36, 208, 13, 171, 147, 2, 29, 16, 232, 22, 71, 150, 163, 77,
+238, 66, 2, 179, 97, 165, 66, 214, 2, 115, 161, 217, 16, 84, 73, 222,
+224, 141, 165, 12, 1, 107, 110, 175, 215, 186, 170, 97, 56, 4, 65,
+134, 255, 45, 107, 110, 89, 8, 88, 211, 28, 136, 213, 192, 165, 217,
+16, 252, 202, 242, 251, 173, 45, 94, 94, 94, 166, 102, 142, 141, 142,
+157, 192, 64, 39, 48, 35, 151, 1, 177, 13, 107, 23, 37, 185, 113, 234,
+89, 240, 200, 150, 63, 53, 118, 79, 152, 12, 126, 55, 27, 202, 42, 96,
+25, 253, 33, 5, 70, 32, 56, 162, 64, 5, 130, 178, 2, 112, 123, 120,
+106, 10, 129, 36, 251, 148, 66, 64, 143, 170, 98, 171, 28, 63, 80,
+213, 185, 203, 58, 134, 233, 154, 224, 193, 93, 18, 157, 206, 255,
+177, 129, 170, 196, 127, 160, 64, 248, 247, 16, 20, 66, 130, 244, 134,
+4, 105, 41, 25, 228, 175, 76, 210, 106, 146, 239, 81, 164, 154, 164,
+200, 198, 128, 32, 71, 2, 130, 148, 3, 130, 156, 10, 8, 162, 1, 43,
+249, 69, 77, 52, 224, 117, 165, 191, 99, 93, 90, 254, 41, 133, 0, 126,
+205, 187, 17, 160, 53, 69, 0, 121, 171, 149, 32, 40, 42, 96, 221, 206,
+250, 66, 101, 32, 72, 43, 0, 77, 198, 69, 125, 33, 98, 27, 158, 147,
+70, 38, 185, 224, 241, 45, 159, 15, 160, 234, 178, 87, 92, 237, 53,
+211, 119, 18, 3, 94, 94, 94, 90, 177, 133, 250, 243, 191, 127, 233,
+185, 39, 63, 32, 62, 190, 99, 103, 69, 7, 151, 60, 18, 149, 174, 41,
+111, 102, 159, 167, 115, 192, 99, 130, 120, 197, 180, 12, 226, 62,
+231, 93, 2, 22, 64, 100, 21, 16, 113, 6, 15, 72, 230, 215, 126, 234,
+46, 124, 167, 6, 131, 32, 196, 74, 8, 91, 193, 78, 181, 194, 162, 7,
+19, 140, 85, 56, 152, 30, 154, 142, 147, 89, 219, 228, 124, 14, 106,
+255, 11, 3, 44, 148, 170, 109, 108, 231, 32, 15, 140, 15, 243, 106, 2,
+176, 82, 156, 193, 192, 12, 96, 248, 184, 133, 99, 101, 9, 130, 223,
+0, 246, 77, 128, 14, 6, 10, 240, 16, 44, 146, 217, 93, 51, 152, 44,
+133, 15, 243, 247, 125, 178, 128, 237, 176, 20, 1, 143, 172, 88, 149,
+100, 96, 41, 52, 40, 217, 25, 0, 97, 119, 199, 89, 50, 225, 101, 0,
+82, 28, 92, 152, 31, 218, 238, 84, 92, 168, 51, 131, 182, 3, 14, 98,
+95, 220, 119, 232, 208, 193, 143, 85, 176, 225, 137, 64, 92, 213, 159,
+96, 224, 190, 26, 88, 249, 57, 118, 122, 127, 7, 65, 173, 236, 227,
+45, 250, 34, 43, 177, 198, 117, 118, 166, 237, 40, 228, 169, 21, 101,
+92, 154, 53, 1, 235, 131, 164, 101, 36, 187, 210, 4, 35, 172, 202, 59,
+93, 192, 14, 123, 58, 2, 230, 174, 88, 149, 15, 49, 176, 173, 0, 65,
+134, 215, 71, 103, 237, 84, 107, 112, 137, 1, 74, 188, 62, 58, 107,
+145, 51, 4, 45, 162, 62, 58, 107, 109, 190, 19, 148, 163, 93, 156,
+139, 11, 50, 162, 249, 75, 96, 92, 223, 17, 145, 122, 168, 29, 124,
+118, 74, 118, 38, 185, 88, 195, 57, 194, 1, 111, 247, 250, 214, 153,
+33, 139, 219, 169, 238, 20, 169, 251, 228, 29, 214, 97, 87, 251, 160,
+188, 170, 162, 118, 141, 188, 83, 69, 94, 213, 153, 150, 127, 110,
+137, 26, 78, 171, 190, 227, 3, 249, 135, 50, 50, 255, 82, 8, 90, 93,
+219, 218, 143, 68, 103, 24, 127, 112, 205, 94, 179, 14, 189, 188, 188,
+110, 168, 222, 53, 54, 118, 236, 232, 161, 67, 135, 142, 141, 253, 37,
+4, 58, 16, 135, 73, 231, 230, 80, 11, 220, 203, 51, 12, 48, 100, 130,
+118, 3, 128, 72, 205, 204, 65, 150, 77, 96, 102, 45, 79, 221, 72, 0,
+206, 138, 159, 110, 58, 96, 153, 123, 232, 158, 103, 9, 224, 138, 87,
+73, 17, 1, 188, 18, 221, 105, 0, 129, 140, 164, 6, 16, 192, 60, 182,
+157, 94, 213, 251, 170, 98, 135, 175, 64, 67, 172, 36, 58, 107, 118,
+30, 53, 136, 186, 19, 225, 174, 216, 243, 236, 135, 246, 6, 173, 178,
+58, 206, 191, 143, 255, 248, 169, 2, 125, 33, 80, 86, 157, 19, 12, 33,
+117, 39, 110, 62, 252, 130, 174, 198, 28, 216, 62, 174, 207, 13, 134,
+150, 70, 105, 120, 3, 173, 126, 83, 130, 37, 22, 248, 169, 60, 103,
+51, 119, 63, 34, 254, 176, 192, 193, 144, 1, 10, 226, 106, 148, 96,
+33, 228, 193, 47, 68, 153, 239, 162, 1, 242, 230, 73, 157, 163, 128,
+217, 147, 130, 35, 38, 70, 251, 129, 37, 55, 134, 101, 96, 229, 26,
+61, 228, 12, 172, 68, 93, 18, 149, 147, 121, 147, 117, 70, 141, 206,
+101, 66, 29, 151, 87, 139, 190, 163, 163, 123, 179, 86, 225, 5, 80,
+248, 22, 121, 212, 154, 85, 184, 157, 125, 208, 93, 188, 207, 189,
+244, 220, 210, 251, 239, 228, 31, 227, 139, 215, 60, 143, 118, 10,
+153, 230, 80, 192, 203, 203, 107, 18, 90, 118, 255, 131, 120, 111,
+185, 226, 102, 54, 47, 15, 142, 160, 160, 68, 129, 17, 220, 115, 113,
+176, 11, 5, 5, 10, 12, 59, 163, 124, 82, 121, 220, 213, 113, 155, 184,
+18, 5, 125, 206, 184, 160, 84, 6, 247, 192, 60, 224, 237, 65, 65, 219,
+182, 109, 232, 118, 47, 47, 47, 47, 47, 175, 107, 162, 216, 39, 146,
+200, 214, 230, 197, 107, 14, 163, 15, 160, 12, 135, 216, 252, 239, 32,
+96, 185, 93, 212, 119, 127, 212, 142, 98, 162, 227, 178, 248, 6, 59,
+196, 140, 144, 56, 4, 143, 39, 202, 8, 224, 145, 210, 128, 187, 93,
+68, 13, 73, 23, 180, 195, 176, 195, 58, 196, 57, 4, 240, 64, 234, 117,
+4, 240, 208, 178, 72, 29, 27, 57, 41, 17, 190, 165, 93, 32, 146, 158,
+200, 228, 161, 196, 132, 103, 123, 30, 1, 185, 9, 139, 129, 133, 237,
+60, 220, 58, 141, 128, 17, 170, 224, 188, 210, 95, 67, 0, 175, 17,
+103, 68, 187, 177, 128, 60, 56, 121, 186, 5, 24, 130, 106, 13, 82, 85,
+210, 71, 85, 34, 175, 118, 44, 93, 194, 211, 9, 88, 147, 110, 167, 46,
+173, 200, 125, 32, 221, 106, 145, 215, 218, 232, 2, 81, 116, 236, 70,
+27, 164, 46, 97, 138, 199, 224, 8, 152, 73, 157, 175, 56, 58, 214, 81,
+229, 213, 56, 132, 128, 223, 128, 97, 185, 214, 116, 170, 26, 249,
+181, 170, 34, 149, 194, 199, 106, 208, 30, 119, 11, 117, 16, 222, 226,
+209, 216, 63, 54, 247, 225, 175, 163, 7, 97, 122, 119, 146, 0, 94, 94,
+55, 153, 226, 95, 161, 72, 233, 228, 115, 75, 211, 24, 232, 35, 236,
+152, 112, 69, 216, 13, 200, 243, 117, 255, 130, 30, 36, 4, 121, 82,
+173, 28, 101, 49, 230, 83, 22, 185, 141, 50, 75, 77, 148, 181, 20,
+102, 191, 72, 29, 29, 59, 72, 55, 229, 59, 185, 173, 198, 30, 46, 174,
+223, 86, 199, 66, 234, 180, 72, 255, 53, 76, 157, 47, 47, 8, 214, 43,
+202, 80, 5, 225, 102, 255, 34, 2, 186, 169, 254, 68, 130, 170, 248,
+78, 170, 78, 234, 7, 228, 49, 72, 64, 158, 110, 47, 85, 192, 62, 202,
+225, 13, 82, 149, 72, 86, 123, 137, 240, 56, 228, 165, 189, 194, 126,
+31, 86, 112, 210, 111, 147, 158, 158, 159, 45, 146, 245, 106, 166,
+142, 61, 131, 170, 66, 126, 115, 34, 131, 53, 226, 216, 3, 238, 118,
+54, 9, 6, 189, 74, 211, 169, 61, 205, 167, 110, 230, 65, 162, 195, 16,
+171, 188, 240, 228, 157, 152, 137, 137, 127, 18, 217, 232, 229, 117,
+147, 171, 68, 36, 195, 3, 60, 40, 138, 253, 87, 6, 154, 254, 139, 3,
+166, 87, 211, 53, 240, 132, 107, 74, 238, 11, 127, 94, 179, 48, 21,
+107, 138, 85, 160, 231, 89, 219, 182, 68, 13, 183, 219, 182, 178, 169,
+36, 193, 63, 219, 187, 154, 38, 200, 255, 117, 207, 247, 14, 110, 248,
+220, 27, 250, 237, 242, 27, 54, 105, 138, 134, 113, 237, 14, 72, 11,
+117, 86, 100, 57, 106, 225, 138, 40, 185, 19, 227, 180, 137, 186, 114,
+29, 106, 236, 123, 188, 118, 255, 194, 45, 7, 117, 61, 130, 9, 174,
+160, 151, 151, 151, 151, 151, 215, 47, 130, 102, 142, 29, 27, 27, 194,
+0, 155, 198, 86, 198, 0, 139, 32, 81, 175, 122, 147, 129, 94, 44, 86,
+51, 158, 55, 130, 209, 151, 49, 9, 17, 70, 207, 230, 60, 192, 91, 18,
+144, 37, 55, 234, 202, 77, 86, 165, 176, 218, 141, 142, 51, 245, 26,
+195, 132, 160, 140, 129, 246, 177, 227, 99, 248, 60, 22, 47, 47, 47,
+47, 47, 175, 91, 67, 143, 44, 127, 124, 19, 10, 70, 240, 212, 114,
+224, 62, 105, 24, 137, 122, 62, 144, 61, 102, 142, 13, 0, 240, 132,
+62, 218, 145, 136, 83, 158, 153, 141, 70, 21, 49, 192, 146, 100, 216,
+200, 61, 7, 89, 10, 160, 211, 66, 91, 168, 69, 118, 91, 168, 26, 105,
+166, 10, 222, 140, 207, 114, 224, 229, 64, 135, 212, 131, 96, 221,
+210, 36, 14, 188, 188, 188, 188, 126, 1, 245, 27, 71, 247, 110, 223,
+190, 99, 223, 113, 199, 92, 231, 100, 140, 234, 76, 155, 200, 75, 224,
+184, 132, 232, 89, 178, 33, 27, 20, 36, 112, 226, 190, 8, 20, 235, 6,
+206, 174, 200, 131, 147, 167, 75, 22, 144, 172, 18, 47, 47, 47, 47,
+47, 47, 175, 155, 95, 109, 187, 183, 252, 13, 10, 58, 168, 48, 181,
+211, 206, 242, 71, 74, 132, 232, 124, 248, 9, 64, 119, 221, 160, 254,
+99, 144, 167, 75, 22, 176, 109, 247, 230, 221, 40, 240, 242, 242, 186,
+70, 122, 203, 83, 216, 214, 150, 13, 251, 209, 137, 208, 124, 138, 52,
+154, 219, 27, 33, 82, 120, 124, 154, 27, 54, 53, 149, 47, 204, 141,
+237, 137, 77, 102, 69, 31, 114, 97, 147, 89, 209, 244, 90, 41, 196,
+31, 55, 103, 147, 217, 208, 7, 86, 218, 209, 1, 208, 96, 130, 49, 208,
+60, 22, 248, 5, 114, 174, 110, 26, 1, 236, 33, 62, 52, 173, 56, 139,
+74, 155, 246, 81, 217, 209, 17, 44, 82, 12, 68, 213, 162, 197, 99, 85,
+139, 94, 61, 246, 52, 16, 246, 68, 23, 175, 218, 198, 21, 15, 77, 142,
+178, 150, 131, 206, 224, 107, 92, 241, 186, 169, 226, 221, 232, 171,
+55, 128, 108, 231, 197, 75, 34, 0, 89, 245, 95, 136, 53, 78, 108, 98,
+61, 79, 64, 20, 145, 237, 108, 169, 67, 52, 75, 206, 38, 146, 163, 78,
+152, 221, 123, 104, 206, 155, 101, 44, 176, 153, 231, 236, 222, 171,
+98, 87, 175, 233, 37, 189, 58, 156, 151, 151, 215, 13, 209, 251, 78,
+110, 93, 206, 214, 116, 138, 117, 45, 124, 122, 231, 81, 35, 173, 88,
+18, 25, 72, 57, 15, 92, 27, 230, 104, 69, 48, 41, 109, 235, 102, 64,
+160, 45, 148, 245, 94, 9, 237, 211, 173, 55, 81, 144, 239, 174, 160,
+95, 131, 161, 12, 72, 183, 5, 146, 151, 5, 41, 11, 168, 162, 247, 90,
+32, 29, 129, 140, 248, 179, 216, 28, 249, 101, 0, 170, 70, 145, 84,
+111, 166, 207, 2, 217, 43, 7, 57, 93, 115, 179, 38, 4, 43, 175, 28,
+12, 78, 22, 12, 92, 246, 27, 13, 60, 43, 178, 228, 13, 172, 93, 242,
+10, 146, 215, 156, 108, 37, 100, 187, 170, 191, 137, 38, 44, 160, 90,
+59, 121, 127, 144, 119, 20, 121, 15, 146, 119, 109, 11, 4, 70, 151,
+77, 44, 191, 55, 122, 108, 140, 131, 162, 6, 191, 116, 96, 237, 163,
+226, 28, 231, 61, 182, 225, 64, 50, 240, 242, 242, 186, 102, 74, 98,
+27, 231, 206, 253, 224, 55, 203, 200, 118, 30, 201, 96, 211, 97, 249,
+51, 163, 24, 224, 38, 3, 123, 110, 186, 151, 2, 5, 2, 196, 185, 161,
+64, 2, 175, 54, 10, 204, 167, 64, 142, 3, 36, 2, 47, 17, 64, 118, 87,
+92, 32, 215, 191, 116, 227, 165, 25, 199, 9, 32, 75, 142, 129, 206,
+235, 5, 176, 200, 121, 10, 131, 27, 90, 87, 245, 3, 44, 179, 115, 133,
+0, 75, 51, 92, 33, 192, 110, 181, 137, 1, 118, 59, 147, 96, 230, 201,
+67, 37, 234, 153, 202, 216, 111, 250, 249, 240, 94, 94, 215, 92, 119,
+125, 64, 125, 156, 247, 152, 17, 133, 215, 188, 243, 232, 158, 205,
+155, 214, 61, 187, 101, 199, 113, 144, 88, 132, 241, 135, 145, 39, 28,
+6, 192, 72, 156, 86, 32, 80, 55, 118, 28, 110, 215, 161, 126, 147, 5,
+148, 141, 104, 158, 44, 80, 6, 202, 10, 38, 180, 173, 179, 129, 178,
+167, 86, 154, 65, 219, 236, 105, 19, 130, 55, 131, 96, 206, 108, 17,
+212, 40, 167, 52, 93, 255, 217, 52, 23, 136, 35, 242, 158, 136, 170,
+222, 230, 125, 199, 43, 114, 36, 225, 62, 0, 180, 196, 3, 242, 8, 16,
+47, 78, 117, 61, 226, 52, 171, 128, 74, 121, 171, 218, 35, 69, 207,
+98, 217, 99, 35, 177, 17, 177, 221, 57, 246, 135, 196, 246, 170, 253,
+133, 104, 73, 246, 255, 97, 127, 225, 51, 98, 187, 147, 42, 159, 46,
+119, 148, 37, 78, 213, 89, 119, 64, 6, 145, 23, 156, 124, 110, 129,
+216, 209, 237, 196, 142, 100, 217, 220, 29, 201, 47, 188, 217, 191,
+106, 249, 82, 243, 165, 159, 81, 101, 132, 118, 37, 222, 14, 91, 201,
+235, 196, 23, 52, 176, 2, 97, 221, 118, 173, 152, 90, 183, 118, 59,
+10, 47, 83, 223, 80, 192, 138, 194, 245, 233, 182, 91, 160, 24, 129,
+153, 22, 24, 162, 78, 87, 77, 33, 228, 23, 111, 244, 224, 246, 237,
+219, 247, 241, 142, 236, 64, 4, 90, 78, 62, 247, 104, 82, 126, 142,
+63, 184, 230, 112, 218, 174, 99, 47, 47, 175, 198, 40, 150, 52, 126,
+185, 211, 248, 252, 68, 120, 114, 235, 170, 101, 15, 45, 92, 252, 216,
+234, 157, 21, 195, 84, 199, 160, 123, 214, 195, 216, 150, 191, 211, 3,
+223, 150, 105, 208, 207, 54, 55, 48, 223, 126, 227, 129, 200, 189,
+118, 3, 208, 161, 79, 62, 7, 192, 76, 85, 15, 191, 6, 119, 165, 244,
+206, 10, 44, 121, 164, 119, 84, 172, 186, 146, 106, 149, 151, 197, 30,
+111, 85, 107, 240, 216, 254, 60, 178, 228, 142, 207, 147, 197, 188,
+244, 251, 246, 33, 36, 248, 158, 189, 93, 93, 174, 19, 182, 67, 87,
+222, 194, 238, 2, 196, 11, 18, 56, 67, 211, 205, 210, 237, 185, 37,
+143, 94, 127, 234, 128, 168, 78, 92, 32, 107, 81, 253, 170, 171, 93,
+228, 203, 65, 9, 170, 70, 41, 21, 48, 46, 109, 234, 154, 54, 159, 198,
+128, 250, 211, 234, 228, 205, 73, 222, 206, 164, 1, 16, 38, 99, 121,
+205, 100, 172, 128, 38, 35, 136, 37, 245, 103, 96, 100, 188, 188, 188,
+166, 128, 218, 171, 99, 99, 99, 216, 116, 32, 54, 112, 138, 205, 118,
+226, 51, 114, 176, 41, 57, 228, 250, 209, 25, 6, 176, 67, 148, 136,
+67, 8, 11, 132, 76, 201, 33, 151, 212, 30, 38, 14, 33, 194, 253, 35,
+241, 5, 11, 23, 127, 10, 0, 225, 160, 150, 148, 156, 253, 229, 216,
+246, 75, 198, 235, 178, 165, 132, 241, 59, 227, 2, 17, 230, 236, 10,
+42, 54, 224, 249, 143, 106, 143, 11, 184, 163, 59, 31, 56, 160, 53,
+50, 171, 54, 152, 31, 213, 135, 13, 242, 81, 125, 88, 32, 174, 66,
+127, 11, 8, 163, 95, 116, 129, 72, 214, 164, 93, 80, 80, 206, 1, 2,
+81, 179, 252, 109, 107, 176, 74, 68, 205, 110, 116, 1, 111, 6, 124,
+176, 89, 164, 109, 146, 17, 40, 133, 150, 228, 11, 227, 236, 204, 75,
+24, 53, 187, 233, 117, 128, 37, 19, 3, 59, 87, 19, 70, 227, 228, 36,
+176, 211, 62, 97, 52, 128, 142, 156, 110, 210, 168, 42, 32, 145, 31,
+176, 211, 87, 97, 84, 91, 81, 194, 171, 118, 111, 70, 159, 100, 93,
+189, 184, 103, 221, 242, 69, 124, 217, 83, 190, 215, 241, 13, 200,
+124, 115, 6, 208, 9, 126, 12, 160, 179, 239, 24, 64, 231, 140, 150,
+66, 98, 58, 226, 221, 79, 109, 120, 177, 136, 1, 47, 47, 175, 6, 8,
+36, 24, 99, 250, 183, 216, 216, 129, 181, 139, 120, 87, 58, 182, 224,
+241, 175, 149, 180, 251, 148, 175, 173, 30, 59, 46, 108, 134, 30, 122,
+179, 44, 150, 190, 159, 45, 27, 167, 45, 64, 27, 4, 218, 102, 88, 57,
+61, 157, 67, 182, 162, 9, 109, 126, 172, 248, 67, 71, 19, 86, 196,
+242, 38, 5, 116, 238, 55, 65, 1, 61, 61, 169, 122, 236, 224, 158, 77,
+127, 164, 64, 138, 109, 75, 35, 149, 203, 220, 29, 58, 123, 152, 4,
+25, 182, 43, 236, 153, 230, 62, 126, 220, 177, 72, 67, 16, 96, 5, 204,
+65, 160, 15, 55, 8, 129, 62, 115, 27, 100, 35, 144, 183, 192, 74, 10,
+12, 92, 246, 27, 195, 141, 3, 57, 85, 27, 21, 120, 186, 134, 134, 41,
+208, 7, 192, 91, 150, 61, 181, 250, 207, 48, 192, 190, 127, 209, 0,
+42, 232, 44, 132, 48, 245, 2, 64, 173, 74, 89, 68, 63, 12, 106, 215,
+46, 135, 186, 202, 118, 93, 37, 35, 96, 95, 15, 18, 168, 219, 54, 103,
+1, 88, 92, 12, 100, 224, 118, 221, 75, 77, 65, 160, 3, 119, 235, 198,
+209, 183, 154, 213, 251, 209, 147, 224, 99, 35, 225, 232, 238, 117,
+171, 150, 45, 91, 177, 122, 195, 97, 144, 16, 106, 210, 163, 125, 65,
+252, 35, 129, 151, 151, 215, 85, 201, 188, 139, 98, 198, 221, 85, 179,
+0, 227, 7, 214, 175, 90, 190, 108, 69, 255, 134, 253, 102, 242, 44,
+78, 165, 219, 172, 219, 249, 106, 242, 237, 86, 62, 241, 154, 204,
+111, 79, 89, 160, 231, 178, 160, 87, 252, 198, 44, 53, 255, 152, 142,
+64, 70, 159, 10, 50, 9, 90, 87, 130, 158, 108, 208, 167, 65, 211, 138,
+165, 15, 232, 20, 164, 1, 160, 250, 192, 17, 13, 229, 120, 13, 213,
+156, 218, 177, 99, 208, 209, 231, 96, 49, 38, 225, 232, 45, 48, 9, 71,
+111, 131, 149, 151, 5, 246, 49, 26, 8, 212, 89, 25, 117, 213, 235, 2,
+241, 177, 243, 202, 0, 57, 191, 93, 1, 56, 191, 100, 130, 137, 239,
+151, 111, 112, 100, 219, 77, 88, 96, 246, 101, 65, 253, 25, 122, 107,
+100, 93, 15, 140, 88, 247, 185, 110, 87, 86, 222, 192, 136, 220, 7,
+249, 192, 250, 230, 245, 91, 118, 188, 88, 1, 171, 249, 52, 47, 87,
+38, 39, 254, 224, 170, 192, 203, 203, 235, 154, 200, 26, 229, 154,
+171, 62, 85, 78, 60, 247, 164, 132, 115, 31, 94, 243, 188, 50, 0, 34,
+217, 87, 29, 61, 118, 236, 120, 5, 152, 37, 39, 61, 152, 150, 192,
+201, 52, 70, 54, 209, 201, 77, 102, 37, 112, 178, 153, 145, 109, 119,
+18, 163, 3, 18, 180, 217, 32, 154, 190, 99, 79, 235, 161, 65, 116,
+112, 123, 134, 144, 50, 175, 246, 156, 34, 213, 97, 225, 253, 149, 75,
+219, 247, 214, 84, 98, 31, 207, 2, 32, 50, 27, 220, 97, 148, 35, 192,
+173, 171, 152, 247, 196, 211, 235, 67, 46, 16, 213, 25, 213, 97, 48,
+131, 85, 118, 81, 157, 184, 57, 10, 16, 155, 211, 197, 237, 57, 119,
+11, 216, 179, 196, 121, 6, 144, 132, 169, 24, 36, 64, 38, 36, 147,
+111, 139, 235, 176, 143, 29, 137, 23, 15, 91, 67, 128, 87, 8, 178,
+134, 64, 11, 184, 24, 134, 68, 45, 35, 169, 11, 238, 39, 177, 71, 196,
+121, 64, 140, 204, 152, 23, 45, 21, 25, 176, 17, 141, 133, 26, 176,
+193, 158, 128, 207, 81, 85, 203, 139, 135, 60, 166, 45, 154, 246, 144,
+11, 38, 46, 30, 246, 54, 51, 94, 60, 36, 15, 46, 174, 30, 57, 30, 149,
+37, 142, 141, 165, 139, 82, 19, 182, 28, 236, 13, 114, 21, 226, 234,
+241, 203, 138, 190, 74, 209, 203, 203, 235, 218, 235, 157, 187, 87,
+201, 208, 61, 254, 240, 154, 221, 198, 157, 200, 28, 77, 117, 244,
+232, 33, 241, 152, 105, 81, 109, 39, 159, 75, 181, 60, 164, 78, 96,
+147, 33, 192, 245, 152, 15, 151, 168, 27, 216, 225, 18, 4, 216, 164,
+41, 227, 55, 56, 205, 170, 119, 66, 144, 86, 31, 117, 201, 249, 174,
+94, 101, 228, 223, 48, 155, 169, 125, 167, 56, 221, 241, 223, 143,
+125, 142, 127, 208, 243, 225, 100, 237, 86, 197, 83, 115, 198, 245,
+80, 175, 144, 19, 50, 252, 246, 189, 38, 1, 47, 171, 107, 213, 4, 204,
+135, 139, 125, 66, 131, 127, 74, 27, 219, 11, 230, 33, 140, 117, 70,
+200, 17, 19, 171, 118, 117, 99, 200, 200, 13, 59, 229, 190, 20, 16,
+57, 228, 87, 122, 130, 95, 181, 230, 195, 229, 248, 233, 179, 38, 43,
+222, 162, 7, 191, 209, 163, 235, 19, 2, 241, 17, 94, 143, 76, 221,
+160, 151, 58, 70, 10, 22, 112, 18, 128, 108, 112, 9, 10, 52, 112, 162,
+28, 249, 252, 57, 185, 206, 132, 53, 163, 193, 232, 81, 124, 104, 116,
+247, 170, 69, 247, 207, 137, 205, 125, 224, 225, 53, 251, 71, 253, 18,
+185, 94, 94, 215, 91, 173, 122, 85, 167, 185, 15, 63, 99, 128, 90, 92,
+80, 61, 180, 103, 219, 230, 237, 123, 15, 135, 230, 130, 87, 214, 252,
+29, 114, 152, 92, 247, 247, 27, 232, 207, 109, 211, 167, 250, 31, 41,
+10, 216, 233, 207, 100, 4, 236, 161, 70, 101, 126, 114, 20, 24, 20,
+191, 185, 107, 139, 228, 245, 57, 194, 108, 109, 193, 2, 217, 203,
+130, 17, 125, 196, 148, 11, 196, 192, 122, 8, 64, 201, 58, 221, 149,
+87, 14, 42, 147, 5, 3, 151, 253, 6, 121, 140, 2, 5, 114, 20, 152, 111,
+1, 85, 242, 166, 195, 213, 203, 14, 172, 167, 44, 16, 91, 112, 63, 86,
+237, 44, 253, 113, 209, 0, 234, 10, 218, 51, 226, 21, 224, 191, 165,
+145, 198, 96, 183, 221, 158, 186, 65, 146, 2, 117, 167, 213, 53, 104,
+224, 196, 119, 107, 36, 206, 200, 78, 124, 38, 28, 221, 179, 142, 141,
+221, 177, 241, 115, 80, 235, 126, 252, 220, 203, 203, 203, 43, 210,
+158, 103, 30, 223, 129, 2, 96, 182, 111, 69, 80, 161, 214, 11, 47,
+224, 9, 234, 235, 35, 242, 224, 228, 233, 78, 205, 218, 109, 224, 245,
+88, 191, 104, 225, 122, 20, 120, 121, 121, 121, 121, 105, 77, 255,
+236, 194, 181, 40, 232, 160, 222, 70, 217, 57, 1, 64, 215, 209, 167,
+65, 226, 74, 0, 110, 244, 187, 27, 7, 102, 145, 254, 124, 110, 215,
+53, 31, 194, 101, 121, 234, 50, 6, 58, 40, 192, 130, 106, 116, 245,
+52, 6, 6, 40, 128, 204, 98, 16, 32, 73, 0, 242, 101, 48, 120, 93, 117,
+82, 239, 44, 237, 164, 222, 89, 218, 137, 47, 52, 199, 1, 50, 156, 47,
+192, 16, 5, 144, 105, 12, 2, 224, 233, 250, 142, 31, 175, 67, 183, 7,
+113, 124, 179, 151, 151, 215, 84, 87, 146, 216, 222, 68, 173, 54, 217,
+94, 36, 192, 32, 1, 90, 240, 215, 69, 179, 245, 220, 112, 155, 21, 43,
+17, 160, 157, 48, 239, 44, 194, 67, 1, 243, 20, 232, 114, 154, 121, 2,
+240, 129, 14, 204, 196, 14, 18, 64, 204, 119, 67, 64, 142, 3, 247,
+172, 228, 88, 234, 144, 3, 196, 104, 198, 95, 187, 123, 26, 134, 57,
+90, 45, 86, 8, 100, 125, 182, 32, 120, 63, 223, 213, 171, 73, 7, 200,
+121, 0, 72, 237, 254, 6, 85, 14, 177, 98, 29, 86, 37, 31, 165, 0, 255,
+10, 90, 237, 79, 80, 160, 133, 2, 172, 30, 203, 40, 104, 163, 64, 173,
+194, 240, 230, 83, 107, 63, 4, 136, 87, 138, 56, 8, 50, 20, 152, 65,
+221, 31, 49, 100, 110, 155, 151, 151, 151, 151, 151, 82, 239, 232,
+238, 245, 253, 253, 171, 159, 221, 95, 73, 67, 160, 159, 243, 26, 128,
+32, 175, 128, 101, 97, 245, 99, 205, 67, 16, 20, 20, 176, 140, 245,
+136, 2, 69, 8, 74, 10, 88, 158, 66, 15, 140, 150, 39, 9, 200, 131, 51,
+205, 153, 211, 144, 40, 153, 60, 70, 253, 167, 75, 150, 156, 172, 43,
+242, 224, 228, 245, 32, 175, 32, 121, 205, 123, 79, 214, 90, 201, 83,
+171, 159, 221, 87, 241, 83, 200, 188, 188, 188, 126, 97, 68, 26, 60,
+60, 23, 93, 211, 151, 147, 4, 200, 23, 41, 128, 190, 154, 51, 96, 38,
+28, 77, 126, 50, 240, 47, 56, 40, 224, 47, 200, 228, 110, 226, 251,
+40, 168, 57, 150, 75, 168, 23, 100, 30, 231, 111, 41, 128, 126, 165,
+68, 184, 89, 1, 176, 236, 235, 8, 229, 153, 197, 220, 65, 228, 157,
+158, 77, 223, 196, 28, 20, 39, 152, 63, 101, 122, 39, 230, 54, 107,
+186, 141, 123, 225, 170, 123, 133, 133, 231, 68, 106, 152, 151, 67,
+174, 22, 231, 130, 159, 185, 219, 57, 112, 150, 159, 103, 98, 37, 71,
+23, 77, 99, 32, 139, 129, 2, 241, 142, 95, 6, 240, 96, 119, 24, 127,
+41, 42, 3, 69, 2, 80, 79, 126, 229, 137, 246, 22, 228, 7, 8, 240, 39,
+196, 246, 224, 15, 40, 224, 229, 229, 117, 179, 169, 233, 248, 75,
+207, 45, 93, 212, 213, 181, 112, 241, 154, 253, 227, 166, 45, 5, 19,
+98, 205, 104, 6, 204, 11, 55, 109, 224, 176, 9, 76, 211, 85, 50, 129,
+57, 220, 10, 38, 202, 154, 227, 126, 33, 208, 13, 0, 63, 123, 104,
+241, 210, 135, 10, 22, 80, 143, 128, 247, 89, 224, 27, 209, 234, 25,
+195, 161, 61, 126, 57, 247, 1, 102, 146, 219, 236, 2, 74, 197, 185, 7,
+69, 70, 185, 121, 90, 24, 113, 24, 242, 1, 124, 231, 145, 96, 177, 35,
+196, 27, 138, 183, 183, 184, 175, 74, 153, 230, 94, 38, 161, 251, 196,
+142, 220, 97, 77, 17, 94, 58, 111, 56, 145, 189, 128, 139, 136, 231,
+169, 224, 59, 186, 204, 146, 163, 232, 216, 44, 3, 104, 106, 155, 4,
+236, 224, 101, 12, 124, 253, 208, 222, 189, 3, 24, 168, 95, 236, 114,
+163, 25, 108, 242, 224, 100, 82, 191, 126, 80, 106, 28, 24, 169, 27,
+20, 168, 2, 126, 102, 108, 172, 50, 132, 1, 47, 47, 175, 134, 201, 88,
+55, 6, 204, 28, 105, 9, 79, 108, 90, 126, 127, 215, 220, 5, 139, 87,
+127, 167, 98, 186, 109, 240, 144, 153, 185, 156, 5, 120, 36, 198, 244,
+56, 224, 33, 26, 115, 142, 77, 194, 4, 231, 1, 56, 248, 162, 136, 202,
+142, 238, 3, 160, 59, 156, 29, 196, 230, 118, 117, 221, 89, 251, 1,
+124, 78, 202, 112, 138, 32, 196, 236, 53, 64, 197, 116, 144, 189, 70,
+7, 162, 98, 118, 38, 50, 227, 65, 252, 48, 91, 22, 103, 180, 7, 130,
+190, 75, 209, 67, 185, 67, 65, 165, 10, 129, 236, 229, 28, 129, 32,
+119, 49, 170, 149, 114, 205, 254, 66, 32, 107, 229, 20, 6, 170, 21, 7,
+12, 242, 93, 189, 214, 45, 128, 225, 36, 7, 47, 176, 71, 139, 118,
+117, 98, 128, 137, 4, 189, 14, 200, 95, 136, 94, 223, 194, 64, 18,
+128, 153, 33, 1, 58, 234, 3, 181, 131, 119, 78, 0, 222, 200, 16, 224,
+20, 90, 14, 5, 66, 19, 136, 74, 60, 219, 71, 0, 222, 12, 31, 9, 241,
+235, 193, 4, 65, 7, 10, 244, 53, 15, 97, 143, 76, 183, 146, 16, 246,
+200, 68, 187, 58, 122, 140, 175, 219, 96, 246, 90, 116, 75, 140, 45,
+120, 204, 76, 18, 164, 240, 41, 108, 19, 128, 238, 48, 25, 91, 184,
+108, 217, 138, 229, 139, 172, 245, 160, 18, 97, 180, 164, 123, 56,
+186, 251, 63, 3, 96, 200, 220, 109, 39, 5, 64, 135, 222, 188, 63, 120,
+19, 137, 94, 127, 110, 150, 188, 233, 216, 223, 60, 201, 31, 76, 139,
+45, 124, 250, 121, 34, 23, 17, 4, 115, 40, 224, 229, 229, 53, 121,
+125, 121, 236, 216, 216, 24, 146, 176, 22, 139, 61, 13, 185, 160, 69,
+186, 40, 71, 194, 144, 33, 107, 86, 117, 56, 46, 91, 170, 215, 177,
+10, 82, 121, 97, 47, 220, 211, 18, 14, 199, 157, 254, 26, 45, 67, 87,
+180, 65, 180, 118, 156, 243, 130, 136, 200, 48, 57, 17, 97, 244, 48,
+187, 147, 122, 206, 69, 230, 205, 14, 58, 11, 145, 125, 179, 114, 182,
+188, 10, 127, 206, 128, 149, 106, 229, 85, 248, 61, 246, 159, 53, 96,
+203, 171, 112, 37, 251, 154, 181, 112, 27, 175, 194, 30, 118, 32, 43,
+58, 79, 113, 123, 155, 11, 157, 120, 126, 144, 111, 226, 53, 12, 207,
+151, 69, 87, 111, 138, 29, 102, 193, 217, 178, 45, 111, 136, 30, 219,
+144, 9, 90, 69, 253, 181, 57, 151, 125, 134, 40, 1, 47, 13, 56, 223,
+89, 98, 31, 124, 143, 224, 124, 187, 229, 81, 75, 118, 253, 246, 201,
+234, 27, 177, 220, 7, 76, 239, 164, 13, 0, 178, 56, 3, 122, 59, 92,
+144, 208, 136, 147, 225, 147, 211, 70, 65, 224, 179, 214, 70, 251,
+133, 143, 109, 27, 125, 209, 20, 0, 70, 197, 231, 0, 48, 10, 2, 138,
+97, 22, 164, 4, 129, 106, 216, 49, 184, 93, 95, 17, 113, 251, 141,
+141, 30, 59, 46, 158, 175, 87, 5, 49, 222, 207, 203, 47, 12, 124, 37,
+107, 81, 87, 142, 154, 159, 206, 47, 211, 70, 93, 157, 234, 82, 37,
+24, 144, 141, 153, 93, 17, 229, 133, 121, 115, 74, 234, 34, 169, 91,
+151, 21, 60, 186, 160, 60, 139, 20, 181, 185, 111, 190, 240, 140, 90,
+201, 34, 152, 247, 240, 134, 195, 126, 50, 128, 151, 215, 181, 81,
+235, 23, 238, 87, 159, 231, 154, 86, 191, 131, 189, 117, 228, 208,
+222, 189, 123, 247, 189, 56, 22, 94, 52, 110, 65, 184, 100, 133, 49,
+94, 151, 128, 150, 76, 239, 172, 27, 0, 195, 242, 66, 163, 104, 120,
+226, 94, 8, 202, 10, 100, 32, 208, 46, 186, 15, 2, 237, 91, 114, 16,
+232, 39, 109, 6, 33, 208, 78, 39, 15, 193, 121, 8, 122, 130, 57, 115,
+196, 210, 57, 58, 208, 224, 166, 90, 124, 100, 159, 46, 33, 128, 155,
+209, 42, 2, 102, 64, 80, 80, 128, 159, 223, 56, 4, 236, 50, 188, 35,
+132, 7, 47, 80, 5, 28, 129, 96, 23, 1, 140, 41, 229, 0, 152, 175, 205,
+40, 153, 224, 167, 1, 1, 204, 100, 63, 185, 43, 120, 240, 241, 37, 4,
+48, 58, 89, 170, 228, 183, 133, 72, 149, 232, 234, 12, 17, 48, 11, 2,
+93, 237, 45, 20, 136, 81, 32, 64, 0, 191, 45, 154, 33, 200, 195, 114,
+104, 48, 72, 129, 28, 5, 250, 40, 144, 161, 64, 47, 5, 82, 112, 187,
+110, 112, 214, 205, 121, 137, 2, 186, 47, 147, 128, 64, 47, 27, 35,
+59, 63, 85, 9, 6, 20, 152, 241, 194, 170, 69, 93, 252, 237, 110, 115,
+186, 22, 62, 246, 217, 192, 203, 203, 235, 58, 235, 182, 221, 209, 2,
+113, 115, 31, 222, 96, 175, 247, 26, 142, 29, 61, 36, 150, 105, 47,
+170, 237, 55, 116, 189, 87, 203, 200, 76, 226, 125, 44, 36, 72, 89,
+64, 245, 101, 108, 99, 153, 6, 0, 123, 55, 71, 70, 159, 124, 39, 0,
+125, 147, 5, 217, 122, 0, 140, 184, 115, 26, 204, 4, 167, 107, 0, 168,
+41, 15, 96, 57, 200, 146, 95, 85, 37, 194, 235, 145, 161, 46, 173,
+221, 24, 72, 160, 78, 151, 108, 87, 245, 55, 209, 132, 5, 234, 94, 31,
+142, 92, 239, 85, 223, 131, 228, 93, 75, 222, 231, 210, 50, 28, 123,
+209, 182, 12, 193, 109, 123, 8, 91, 226, 229, 229, 213, 72, 81, 201,
+175, 214, 240, 165, 181, 143, 222, 137, 0, 145, 190, 174, 178, 108,
+223, 232, 159, 153, 0, 44, 235, 106, 206, 179, 2, 150, 193, 156, 153,
+5, 211, 156, 198, 250, 144, 208, 209, 27, 105, 89, 203, 250, 232, 232,
+206, 178, 87, 58, 137, 109, 89, 56, 157, 75, 77, 80, 246, 202, 178,
+162, 214, 18, 234, 134, 146, 20, 200, 70, 128, 219, 246, 116, 237, 67,
+252, 63, 113, 48, 0, 0, 255, 36, 158, 136, 222, 229, 2, 17, 232, 21,
+35, 144, 209, 160, 23, 148, 208, 0, 252, 204, 203, 8, 232, 4, 160,
+207, 2, 167, 166, 54, 176, 203, 129, 1, 178, 228, 176, 174, 200, 218,
+157, 248, 122, 164, 3, 117, 5, 213, 176, 137, 125, 205, 87, 82, 32,
+29, 1, 178, 93, 37, 32, 208, 205, 221, 106, 187, 58, 101, 97, 181,
+118, 85, 112, 251, 254, 24, 80, 0, 222, 81, 198, 244, 120, 120, 15,
+26, 233, 54, 120, 215, 102, 53, 0, 247, 249, 255, 214, 219, 181, 101,
+24, 27, 27, 253, 138, 177, 157, 219, 146, 165, 152, 45, 161, 31, 75,
+241, 242, 242, 170, 95, 205, 230, 162, 201, 241, 69, 250, 115, 71,
+120, 114, 235, 51, 139, 186, 238, 236, 90, 176, 120, 245, 78, 115, 90,
+152, 101, 100, 52, 176, 204, 18, 153, 111, 79, 42, 144, 130, 64, 223,
+220, 86, 140, 147, 86, 32, 3, 129, 246, 231, 86, 106, 50, 171, 64, 14,
+2, 61, 236, 62, 56, 73, 48, 160, 64, 158, 250, 134, 30, 26, 29, 59,
+186, 119, 219, 186, 217, 16, 96, 54, 203, 72, 227, 66, 21, 96, 13, 89,
+160, 106, 191, 252, 60, 128, 249, 246, 50, 5, 192, 92, 228, 145, 155,
+11, 92, 174, 128, 124, 153, 246, 93, 14, 72, 6, 174, 200, 106, 159,
+24, 124, 187, 191, 191, 127, 197, 114, 243, 181, 182, 118, 99, 48,
+158, 117, 131, 192, 104, 62, 100, 187, 202, 65, 160, 219, 21, 217,
+168, 51, 16, 232, 131, 247, 82, 32, 5, 65, 90, 1, 235, 230, 236, 161,
+64, 82, 129, 4, 4, 186, 181, 179, 94, 198, 232, 193, 109, 155, 55,
+243, 183, 162, 26, 185, 150, 153, 7, 158, 137, 214, 105, 143, 61, 248,
+135, 7, 176, 122, 246, 242, 242, 186, 122, 53, 127, 204, 248, 229,
+193, 164, 254, 204, 252, 249, 242, 69, 93, 93, 11, 22, 62, 254, 181,
+195, 230, 236, 40, 232, 207, 13, 59, 10, 239, 243, 162, 6, 208, 50,
+24, 243, 191, 160, 145, 41, 107, 0, 205, 146, 97, 221, 51, 0, 188, 70,
+1, 99, 234, 27, 180, 137, 198, 156, 173, 28, 5, 160, 221, 53, 38, 71,
+229, 39, 6, 204, 211, 50, 119, 158, 181, 64, 93, 254, 124, 226, 30,
+128, 244, 231, 187, 28, 224, 86, 225, 4, 254, 188, 126, 112, 117, 78,
+248, 42, 1, 89, 64, 14, 190, 178, 108, 217, 178, 199, 86, 244, 47,
+113, 64, 128, 136, 4, 249, 198, 129, 65, 10, 228, 40, 208, 71, 129,
+76, 221, 160, 151, 2, 41, 10, 116, 83, 32, 65, 1, 102, 0, 208, 129,
+145, 142, 176, 122, 244, 207, 49, 48, 237, 11, 62, 14, 247, 242, 186,
+30, 106, 121, 70, 77, 136, 139, 63, 104, 190, 70, 109, 144, 117, 182,
+183, 111, 90, 191, 101, 199, 254, 138, 25, 77, 88, 175, 51, 215, 89,
+114, 235, 29, 228, 215, 228, 53, 106, 137, 186, 129, 61, 6, 169, 64,
+170, 110, 64, 78, 54, 202, 176, 223, 176, 247, 165, 102, 66, 48, 44,
+11, 95, 245, 41, 127, 99, 41, 210, 87, 49, 16, 235, 50, 159, 224, 97,
+0, 93, 17, 61, 55, 49, 152, 57, 22, 169, 7, 2, 93, 249, 89, 8, 58,
+111, 22, 208, 71, 149, 67, 84, 226, 244, 189, 123, 247, 29, 42, 33,
+128, 43, 193, 192, 229, 39, 58, 216, 151, 54, 29, 129, 250, 135, 201,
+109, 144, 140, 64, 253, 195, 228, 54, 136, 182, 95, 193, 248, 57, 121,
+115, 90, 111, 69, 212, 227, 81, 228, 123, 20, 249, 155, 23, 143, 30,
+220, 190, 101, 239, 33, 246, 142, 94, 227, 137, 142, 105, 107, 31,
+141, 206, 125, 222, 227, 228, 10, 79, 94, 94, 94, 87, 167, 219, 183,
+62, 170, 19, 102, 243, 158, 222, 173, 62, 103, 106, 247, 230, 15, 197,
+199, 182, 227, 132, 43, 234, 0, 70, 38, 167, 13, 72, 39, 0, 131, 22,
+72, 70, 32, 111, 1, 101, 250, 134, 45, 144, 142, 64, 193, 2, 202, 238,
+142, 88, 32, 27, 129, 146, 5, 84, 54, 179, 98, 129, 1, 10, 40, 187,
+20, 90, 96, 72, 110, 143, 53, 26, 136, 122, 72, 177, 143, 81, 40, 30,
+15, 45, 213, 15, 138, 18, 52, 93, 61, 56, 210, 184, 93, 69, 160, 1, 5,
+140, 128, 168, 68, 227, 21, 178, 16, 24, 181, 123, 217, 235, 65, 94,
+115, 7, 168, 86, 66, 182, 171, 146, 5, 84, 75, 36, 219, 110, 193, 2,
+170, 181, 219, 247, 135, 2, 121, 11, 164, 35, 96, 223, 131, 160, 115,
+135, 222, 156, 246, 124, 6, 117, 59, 103, 66, 229, 246, 219, 245, 223,
+212, 212, 125, 114, 235, 147, 209, 215, 23, 62, 189, 95, 119, 13, 98,
+1, 144, 245, 171, 151, 151, 87, 131, 212, 92, 187, 77, 223, 130, 129,
+142, 234, 232, 24, 154, 85, 235, 4, 247, 240, 85, 129, 4, 176, 19, 87,
+5, 186, 129, 45, 186, 42, 144, 2, 246, 110, 202, 131, 222, 9, 65, 250,
+22, 6, 83, 243, 122, 144, 160, 129, 77, 180, 187, 113, 55, 14, 9, 26,
+120, 159, 183, 111, 237, 95, 189, 19, 3, 94, 94, 94, 215, 72, 119,
+175, 89, 137, 108, 109, 221, 89, 193, 87, 112, 228, 193, 249, 41, 4,
+240, 219, 26, 91, 156, 115, 98, 224, 44, 247, 18, 29, 131, 4, 167,
+235, 6, 200, 74, 55, 151, 1, 216, 155, 33, 27, 13, 176, 21, 78, 27,
+13, 176, 37, 197, 235, 7, 179, 26, 7, 38, 91, 142, 230, 213, 207, 110,
+222, 190, 18, 1, 124, 207, 101, 4, 116, 170, 134, 89, 63, 232, 132,
+23, 138, 255, 122, 102, 78, 77, 189, 8, 208, 58, 67, 129, 211, 117,
+131, 215, 41, 240, 90, 221, 64, 223, 156, 147, 157, 15, 175, 231, 182,
+88, 79, 171, 13, 41, 208, 10, 65, 86, 1, 122, 245, 230, 95, 63, 185,
+237, 153, 7, 186, 102, 199, 186, 30, 120, 124, 203, 97, 103, 129, 97,
+47, 47, 175, 70, 169, 245, 11, 73, 253, 75, 60, 173, 63, 119, 132,
+213, 151, 216, 228, 150, 248, 99, 253, 207, 238, 55, 95, 192, 24, 13,
+4, 139, 119, 82, 26, 243, 144, 18, 236, 247, 64, 102, 9, 205, 251, 89,
+78, 185, 17, 169, 86, 211, 132, 167, 4, 152, 97, 25, 25, 53, 173, 135,
+115, 176, 18, 92, 70, 0, 49, 57, 204, 140, 42, 68, 118, 80, 164, 96,
+129, 251, 200, 113, 32, 14, 1, 86, 55, 23, 25, 72, 247, 16, 50, 103,
+201, 75, 1, 19, 20, 28, 184, 165, 144, 167, 35, 30, 252, 41, 186, 64,
+140, 180, 166, 93, 192, 51, 179, 214, 26, 116, 5, 101, 17, 95, 166,
+192, 0, 1, 236, 69, 235, 212, 92, 53, 219, 107, 42, 80, 164, 64, 214,
+2, 202, 84, 219, 61, 62, 5, 142, 88, 64, 237, 202, 126, 135, 182, 2,
+246, 11, 105, 244, 212, 186, 93, 16, 232, 146, 191, 65, 129, 113, 10,
+88, 149, 197, 171, 189, 15, 169, 94, 227, 10, 94, 116, 65, 156, 95,
+41, 184, 246, 159, 72, 121, 15, 186, 133, 207, 115, 32, 28, 37, 104,
+137, 162, 193, 181, 184, 215, 42, 199, 129, 60, 107, 243, 132, 101,
+202, 251, 62, 231, 132, 51, 2, 136, 33, 110, 115, 213, 69, 121, 227,
+136, 149, 29, 205, 26, 78, 9, 32, 167, 135, 26, 67, 219, 242, 230,
+148, 227, 232, 63, 113, 65, 179, 125, 25, 19, 161, 188, 49, 10, 86,
+73, 88, 175, 225, 21, 246, 225, 157, 251, 142, 131, 182, 210, 246,
+194, 103, 213, 169, 204, 123, 124, 167, 117, 125, 189, 188, 188, 26,
+164, 150, 79, 17, 160, 35, 60, 185, 237, 63, 96, 0, 78, 236, 50, 148,
+160, 64, 119, 221, 32, 69, 129, 94, 10, 100, 234, 6, 125, 20, 200, 81,
+96, 112, 34, 128, 78, 73, 171, 31, 228, 175, 3, 24, 158, 8, 160, 5,
+188, 161, 32, 127, 29, 0, 247, 181, 88, 214, 153, 131, 111, 247, 247,
+175, 90, 177, 244, 254, 217, 14, 136, 100, 46, 153, 151, 51, 129, 233,
+208, 251, 76, 112, 118, 50, 32, 99, 2, 179, 51, 211, 107, 2, 51, 183,
+148, 50, 193, 105, 10, 152, 25, 175, 110, 10, 36, 76, 96, 102, 213,
+64, 22, 192, 76, 208, 177, 37, 37, 143, 238, 217, 188, 133, 63, 174,
+86, 54, 192, 140, 23, 162, 113, 245, 248, 195, 95, 31, 10, 188, 188,
+188, 174, 141, 166, 127, 225, 3, 224, 247, 187, 215, 36, 197, 135,
+218, 125, 62, 186, 39, 234, 98, 223, 187, 175, 162, 34, 135, 94, 211,
+134, 20, 216, 47, 67, 226, 51, 183, 62, 81, 176, 192, 3, 4, 217, 17,
+231, 246, 74, 58, 16, 209, 219, 47, 138, 95, 132, 233, 19, 102, 82,
+204, 142, 151, 145, 78, 158, 255, 34, 226, 33, 17, 56, 148, 5, 224,
+81, 145, 12, 47, 58, 76, 75, 83, 48, 190, 222, 107, 218, 166, 17, 227,
+175, 6, 77, 51, 55, 98, 152, 207, 17, 19, 148, 248, 47, 124, 65, 213,
+24, 176, 152, 34, 74, 227, 254, 64, 102, 29, 165, 141, 149, 182, 141,
+13, 154, 202, 60, 229, 89, 0, 86, 170, 179, 149, 32, 90, 154, 155,
+213, 67, 74, 124, 60, 7, 192, 79, 212, 217, 74, 16, 77, 254, 122, 67,
+157, 173, 12, 153, 34, 112, 65, 127, 132, 160, 170, 115, 164, 2, 168,
+41, 105, 105, 181, 152, 200, 121, 8, 6, 84, 130, 214, 2, 71, 148, 39,
+177, 192, 235, 234, 97, 62, 11, 156, 83, 33, 188, 5, 46, 169, 79, 231,
+193, 233, 134, 213, 183, 71, 159, 96, 57, 194, 240, 223, 98, 160, 80,
+251, 199, 42, 228, 162, 13, 34, 47, 121, 86, 3, 81, 187, 145, 7, 59,
+45, 206, 79, 95, 168, 40, 249, 252, 183, 54, 136, 158, 220, 248, 60,
+223, 159, 209, 24, 162, 169, 222, 31, 102, 255, 189, 97, 128, 168,
+173, 196, 13, 192, 43, 66, 182, 224, 11, 28, 156, 49, 90, 162, 244,
+234, 103, 121, 181, 156, 54, 26, 181, 244, 184, 175, 115, 32, 27, 181,
+72, 14, 136, 59, 163, 200, 79, 66, 222, 6, 121, 14, 196, 249, 14, 112,
+32, 29, 174, 72, 14, 136, 243, 77, 243, 28, 65, 89, 0, 153, 3, 96,
+231, 91, 21, 13, 69, 222, 131, 25, 1, 216, 161, 46, 8, 32, 111, 103,
+153, 3, 200, 240, 146, 113, 48, 36, 0, 59, 209, 139, 181, 59, 121,
+211, 250, 103, 7, 130, 38, 182, 199, 1, 1, 218, 15, 172, 213, 43, 184,
+7, 177, 7, 215, 236, 247, 207, 175, 121, 121, 93, 3, 181, 233, 76, 88,
+205, 16, 126, 60, 171, 62, 247, 134, 213, 151, 190, 42, 62, 254, 246,
+254, 138, 209, 221, 230, 6, 64, 56, 250, 74, 104, 118, 208, 115, 12,
+136, 132, 157, 97, 97, 2, 105, 75, 222, 84, 64, 7, 1, 220, 250, 136,
+132, 157, 97, 197, 2, 224, 182, 13, 187, 23, 68, 110, 251, 229, 8,
+216, 139, 149, 95, 136, 192, 89, 11, 240, 116, 55, 251, 169, 3, 166,
+146, 0, 69, 9, 116, 66, 81, 152, 98, 190, 11, 8, 196, 118, 126, 194,
+236, 231, 121, 27, 176, 19, 86, 103, 193, 164, 222, 168, 113, 154, 2,
+151, 40, 16, 102, 57, 80, 201, 95, 237, 213, 126, 66, 129, 243, 20,
+168, 246, 0, 96, 76, 49, 47, 202, 115, 112, 192, 57, 4, 148, 20, 181,
+64, 138, 2, 200, 123, 198, 4, 144, 9, 108, 19, 136, 211, 213, 207,
+248, 219, 96, 126, 4, 172, 2, 234, 151, 172, 216, 64, 245, 36, 20,
+136, 166, 177, 71, 174, 254, 130, 13, 218, 41, 208, 108, 3, 53, 191,
+189, 32, 128, 110, 12, 21, 9, 82, 20, 144, 181, 162, 219, 85, 73, 2,
+89, 43, 186, 137, 142, 72, 32, 107, 197, 90, 210, 158, 125, 16, 181,
+162, 111, 131, 225, 8, 136, 84, 188, 190, 113, 242, 17, 16, 7, 209,
+183, 218, 96, 4, 196, 159, 232, 155, 51, 167, 0, 207, 247, 235, 219,
+185, 79, 129, 54, 8, 50, 161, 204, 183, 7, 177, 231, 67, 51, 66, 191,
+99, 247, 147, 106, 41, 158, 121, 143, 248, 8, 221, 203, 235, 90, 169,
+201, 124, 94, 237, 81, 3, 12, 214, 28, 250, 166, 117, 171, 86, 244,
+175, 255, 218, 113, 115, 88, 79, 219, 98, 174, 73, 60, 127, 14, 151,
+148, 52, 6, 40, 173, 105, 58, 58, 7, 108, 77, 236, 185, 130, 231, 207,
+85, 161, 186, 45, 144, 140, 64, 202, 2, 228, 115, 194, 10, 244, 90,
+32, 29, 129, 140, 248, 51, 119, 145, 111, 35, 167, 223, 49, 33, 200,
+94, 57, 200, 233, 154, 155, 53, 33, 88, 121, 229, 96, 176, 113, 160,
+129, 103, 149, 107, 92, 37, 146, 128, 188, 180, 25, 170, 49, 144, 173,
+132, 108, 87, 100, 19, 37, 65, 194, 2, 170, 181, 147, 55, 206, 100,
+215, 111, 215, 247, 160, 53, 35, 78, 247, 100, 172, 25, 113, 198, 0,
+65, 9, 0, 99, 86, 193, 135, 70, 119, 175, 90, 116, 255, 156, 216, 220,
+7, 30, 94, 179, 127, 212, 7, 231, 94, 94, 215, 70, 77, 31, 38, 192,
+172, 240, 196, 214, 229, 247, 223, 57, 103, 206, 130, 197, 79, 239,
+172, 12, 105, 0, 77, 134, 53, 79, 6, 179, 24, 244, 146, 146, 41, 8,
+178, 10, 88, 54, 81, 207, 172, 201, 64, 48, 160, 64, 31, 4, 122, 194,
+79, 142, 2, 131, 16, 12, 81, 64, 207, 222, 201, 83, 96, 88, 20, 107,
+206, 108, 81, 162, 34, 4, 186, 214, 142, 92, 30, 20, 32, 40, 215, 13,
+116, 190, 100, 228, 202, 0, 191, 60, 41, 4, 104, 105, 80, 162, 0, 249,
+141, 250, 65, 97, 146, 160, 124, 121, 48, 12, 65, 145, 2, 3, 4, 48,
+102, 152, 113, 80, 29, 27, 59, 118, 236, 216, 216, 216, 152, 177, 140,
+121, 158, 1, 253, 119, 90, 58, 18, 182, 148, 163, 64, 31, 5, 50, 20,
+232, 165, 64, 138, 2, 221, 20, 72, 80, 128, 156, 64, 83, 235, 51, 156,
+252, 22, 6, 166, 125, 245, 3, 216, 102, 47, 47, 175, 6, 171, 105, 249,
+71, 112, 240, 153, 218, 93, 123, 112, 219, 166, 254, 254, 254, 213,
+91, 246, 29, 251, 75, 181, 61, 6, 227, 115, 221, 161, 135, 111, 151,
+54, 220, 179, 21, 159, 107, 215, 105, 197, 6, 218, 173, 217, 97, 70,
+57, 2, 9, 11, 40, 227, 110, 135, 50, 151, 7, 41, 10, 216, 1, 150, 2,
+25, 10, 112, 187, 155, 214, 123, 85, 32, 23, 194, 101, 199, 234, 0,
+105, 11, 12, 70, 224, 21, 10, 132, 127, 65, 129, 241, 94, 0, 242, 161,
+188, 108, 118, 57, 110, 40, 80, 167, 91, 161, 192, 8, 5, 62, 42, 192,
+107, 14, 104, 42, 113, 160, 66, 72, 93, 237, 239, 226, 160, 154, 118,
+128, 244, 224, 209, 139, 73, 140, 75, 219, 13, 190, 98, 117, 32, 67,
+53, 41, 46, 227, 0, 25, 218, 218, 237, 74, 101, 170, 82, 212, 55, 236,
+182, 171, 186, 207, 9, 7, 200, 36, 189, 125, 227, 168, 178, 119, 56,
+64, 38, 233, 237, 123, 176, 18, 37, 233, 173, 245, 225, 194, 247, 70,
+73, 122, 235, 253, 106, 23, 99, 35, 81, 146, 30, 118, 201, 94, 14,
+222, 31, 93, 145, 219, 70, 15, 172, 227, 203, 223, 199, 106, 225, 193,
+138, 217, 65, 147, 253, 56, 132, 151, 151, 87, 3, 116, 251, 110, 181,
+164, 83, 16, 91, 96, 128, 12, 123, 83, 210, 193, 109, 235, 159, 221,
+252, 181, 23, 43, 230, 147, 77, 208, 144, 25, 15, 203, 228, 0, 48,
+158, 99, 177, 2, 222, 180, 2, 121, 8, 178, 10, 88, 225, 146, 142, 207,
+11, 16, 12, 40, 96, 69, 119, 58, 12, 47, 77, 18, 12, 41, 0, 251, 43,
+70, 24, 30, 78, 8, 120, 92, 203, 109, 182, 170, 44, 99, 217, 49, 24,
+134, 115, 80, 157, 4, 40, 71, 32, 62, 89, 112, 234, 178, 160, 105, 18,
+32, 133, 128, 22, 85, 49, 22, 208, 3, 45, 22, 104, 171, 3, 196, 39,
+11, 172, 146, 235, 94, 36, 172, 246, 170, 30, 23, 218, 8, 129, 110,
+143, 61, 22, 136, 124, 155, 30, 193, 150, 64, 12, 159, 255, 243, 194,
+164, 2, 129, 172, 43, 222, 82, 193, 122, 7, 98, 102, 153, 24, 217,
+190, 132, 0, 145, 174, 206, 26, 160, 36, 171, 157, 183, 97, 211, 211,
+141, 72, 192, 175, 134, 249, 224, 95, 65, 2, 94, 43, 230, 99, 105,
+195, 18, 136, 78, 247, 144, 6, 249, 232, 210, 230, 24, 48, 158, 125,
+83, 125, 31, 94, 120, 157, 85, 215, 93, 156, 102, 88, 87, 198, 216,
+68, 1, 30, 36, 19, 70, 43, 23, 223, 118, 28, 212, 202, 125, 250, 125,
+44, 193, 220, 135, 191, 246, 163, 192, 203, 203, 235, 154, 104, 218,
+186, 104, 0, 61, 190, 120, 205, 231, 13, 80, 224, 139, 49, 239, 217,
+177, 239, 88, 5, 60, 148, 107, 45, 223, 172, 31, 202, 181, 58, 244,
+218, 115, 90, 75, 68, 23, 21, 32, 151, 185, 176, 194, 140, 83, 83, 8,
+108, 12, 98, 179, 197, 216, 162, 5, 134, 216, 167, 86, 4, 92, 236,
+137, 106, 205, 46, 224, 133, 100, 237, 227, 67, 15, 220, 105, 60, 8,
+37, 15, 254, 106, 50, 176, 20, 157, 213, 43, 54, 81, 167, 251, 202,
+108, 2, 132, 63, 135, 196, 168, 118, 72, 204, 11, 245, 175, 38, 144,
+113, 46, 66, 90, 77, 242, 3, 146, 172, 4, 196, 232, 124, 193, 64, 173,
+69, 19, 107, 221, 161, 230, 2, 1, 130, 166, 97, 23, 204, 93, 176, 240,
+161, 90, 131, 254, 174, 13, 184, 207, 90, 162, 136, 181, 18, 75, 182,
+246, 33, 62, 140, 92, 65, 6, 68, 243, 118, 174, 121, 173, 49, 96, 64,
+107, 138, 0, 242, 86, 35, 111, 78, 242, 118, 182, 12, 64, 90, 87, 123,
+33, 50, 25, 236, 129, 53, 163, 107, 96, 24, 153, 216, 131, 171, 65,
+91, 240, 242, 242, 106, 152, 96, 174, 253, 46, 245, 169, 37, 60, 185,
+237, 153, 69, 108, 82, 234, 220, 133, 143, 111, 56, 172, 189, 182, 53,
+233, 77, 71, 200, 118, 122, 78, 221, 255, 214, 188, 26, 221, 159, 39,
+211, 240, 150, 137, 209, 129, 176, 13, 138, 17, 32, 19, 247, 118, 154,
+177, 28, 1, 59, 49, 121, 138, 2, 202, 230, 39, 40, 48, 109, 203, 190,
+227, 81, 44, 200, 82, 26, 208, 94, 201, 71, 132, 144, 186, 231, 0,
+217, 62, 53, 65, 236, 22, 1, 83, 179, 118, 111, 25, 32, 147, 16, 174,
+158, 31, 59, 54, 118, 2, 3, 94, 94, 94, 141, 82, 44, 9, 126, 213, 111,
+120, 110, 175, 30, 88, 43, 95, 135, 62, 239, 177, 13, 135, 117, 230,
+176, 83, 223, 202, 37, 112, 87, 39, 244, 111, 252, 118, 159, 109, 130,
+42, 6, 186, 53, 224, 14, 81, 157, 75, 202, 2, 61, 151, 5, 189, 22, 72,
+71, 32, 99, 1, 108, 138, 249, 196, 32, 27, 129, 220, 100, 1, 54, 3,
+123, 146, 96, 112, 178, 96, 224, 22, 1, 87, 81, 87, 245, 3, 227, 210,
+134, 224, 10, 246, 89, 109, 87, 1, 214, 124, 194, 223, 154, 211, 213,
+53, 231, 45, 33, 104, 37, 246, 104, 120, 250, 178, 32, 101, 129, 91,
+100, 126, 187, 177, 206, 77, 9, 0, 35, 245, 242, 190, 147, 91, 159,
+97, 105, 168, 57, 11, 30, 92, 189, 243, 100, 50, 240, 242, 242, 106,
+188, 166, 125, 12, 252, 218, 244, 120, 244, 169, 35, 28, 223, 189, 86,
+90, 137, 183, 109, 216, 175, 111, 115, 30, 84, 15, 137, 207, 133, 208,
+72, 196, 243, 192, 189, 44, 62, 51, 35, 170, 134, 251, 248, 244, 25,
+49, 150, 214, 12, 238, 127, 62, 254, 41, 166, 235, 240, 65, 80, 253,
+232, 107, 69, 217, 143, 153, 198, 94, 3, 49, 160, 56, 46, 79, 48, 52,
+71, 176, 7, 149, 85, 227, 54, 112, 64, 129, 12, 251, 149, 27, 97, 99,
+102, 19, 252, 187, 60, 176, 136, 98, 207, 69, 246, 169, 4, 236, 155,
+48, 112, 229, 232, 196, 141, 137, 3, 252, 236, 207, 68, 69, 53, 158,
+223, 225, 131, 197, 172, 34, 218, 96, 249, 68, 9, 89, 213, 181, 91,
+134, 79, 13, 128, 38, 24, 216, 104, 128, 232, 244, 117, 129, 204, 130,
+172, 116, 138, 33, 45, 245, 46, 81, 105, 96, 32, 183, 77, 20, 36, 22,
+157, 157, 82, 171, 40, 72, 75, 84, 30, 165, 184, 248, 83, 254, 69,
+176, 104, 46, 175, 163, 75, 226, 80, 69, 0, 216, 233, 84, 103, 91, 87,
+131, 137, 251, 187, 37, 188, 56, 61, 0, 240, 138, 223, 56, 28, 58,
+139, 215, 241, 138, 63, 82, 129, 149, 174, 206, 247, 172, 229, 84,
+152, 244, 99, 252, 240, 108, 141, 121, 22, 187, 44, 160, 6, 213, 179,
+22, 72, 69, 32, 105, 129, 200, 69, 58, 75, 237, 69, 169, 42, 123, 169,
+91, 53, 147, 204, 125, 191, 128, 204, 239, 148, 29, 32, 7, 19, 54, 58,
+32, 35, 192, 18, 7, 136, 71, 210, 145, 24, 89, 228, 195, 46, 184, 64,
+56, 104, 100, 45, 253, 24, 90, 133, 76, 35, 88, 21, 50, 229, 100, 107,
+116, 116, 7, 171, 169, 217, 8, 240, 242, 242, 106, 140, 238, 121, 52,
+137, 108, 157, 247, 216, 146, 28, 91, 29, 14, 222, 125, 173, 108, 81,
+230, 114, 159, 50, 121, 119, 47, 91, 182, 44, 205, 62, 8, 7, 216, 171,
+44, 119, 41, 178, 175, 9, 126, 211, 115, 123, 56, 20, 72, 239, 198,
+205, 9, 255, 219, 141, 137, 200, 9, 76, 83, 86, 145, 239, 125, 101,
+71, 100, 218, 102, 40, 59, 202, 173, 109, 150, 123, 191, 215, 163, 67,
+114, 91, 198, 237, 93, 154, 255, 33, 243, 64, 41, 101, 253, 74, 252,
+171, 211, 35, 75, 197, 247, 204, 143, 38, 50, 130, 220, 134, 157, 143,
+118, 192, 146, 231, 252, 244, 46, 137, 62, 199, 197, 104, 7, 108, 167,
+45, 226, 188, 163, 169, 106, 113, 101, 172, 167, 203, 159, 50, 183,
+32, 227, 150, 75, 242, 188, 223, 144, 243, 133, 210, 145, 125, 175,
+74, 23, 251, 186, 44, 206, 74, 21, 27, 165, 69, 85, 149, 165, 149, 30,
+82, 241, 215, 74, 53, 193, 142, 59, 198, 35, 106, 242, 244, 46, 97,
+56, 55, 202, 170, 120, 77, 185, 163, 178, 40, 80, 86, 154, 239, 51,
+202, 129, 157, 150, 53, 34, 171, 251, 156, 154, 246, 119, 86, 205,
+193, 227, 69, 191, 160, 134, 71, 47, 180, 68, 85, 33, 254, 66, 205,
+60, 27, 159, 46, 246, 16, 72, 187, 254, 94, 246, 223, 151, 213, 39,
+222, 19, 224, 231, 243, 25, 246, 223, 175, 169, 79, 101, 117, 237,
+249, 53, 152, 30, 125, 18, 142, 65, 69, 144, 23, 245, 4, 106, 238, 24,
+212, 184, 204, 155, 218, 77, 243, 158, 128, 58, 161, 51, 42, 50, 20,
+110, 76, 45, 140, 243, 154, 154, 114, 41, 221, 88, 84, 232, 162, 154,
+214, 41, 221, 88, 52, 8, 191, 81, 249, 111, 217, 253, 138, 254, 110,
+137, 58, 65, 217, 253, 138, 130, 231, 164, 58, 65, 233, 116, 103, 169,
+83, 153, 174, 190, 203, 37, 219, 193, 69, 229, 216, 163, 57, 163, 178,
+202, 207, 169, 142, 136, 234, 37, 87, 100, 249, 162, 230, 168, 156,
+174, 106, 182, 242, 147, 234, 44, 246, 169, 115, 204, 201, 146, 74,
+37, 248, 175, 67, 209, 37, 208, 189, 44, 49, 138, 181, 82, 253, 137,
+234, 101, 77, 83, 191, 206, 210, 117, 171, 234, 151, 255, 202, 91,
+186, 209, 203, 98, 103, 121, 73, 125, 215, 232, 101, 177, 6, 192, 39,
+94, 196, 74, 161, 221, 245, 243, 242, 242, 106, 132, 90, 31, 5, 62,
+251, 46, 181, 152, 123, 91, 88, 61, 184, 105, 21, 255, 248, 238, 53,
+59, 142, 235, 104, 173, 73, 89, 5, 49, 133, 86, 199, 150, 35, 145, 89,
+153, 166, 236, 131, 80, 95, 116, 207, 207, 50, 109, 88, 32, 45, 56,
+251, 61, 99, 89, 5, 97, 7, 179, 210, 33, 26, 209, 76, 92, 30, 179, 9,
+154, 170, 64, 90, 181, 51, 210, 100, 154, 65, 75, 74, 216, 71, 119,
+186, 177, 176, 194, 61, 131, 192, 76, 50, 9, 235, 186, 209, 42, 30,
+19, 63, 157, 19, 209, 201, 25, 210, 57, 86, 43, 88, 211, 115, 4, 172,
+240, 71, 175, 197, 102, 63, 186, 19, 121, 22, 39, 244, 186, 79, 110,
+191, 100, 109, 87, 241, 160, 243, 146, 184, 104, 138, 183, 27, 72,
+229, 67, 104, 186, 149, 68, 116, 135, 4, 113, 51, 177, 82, 48, 9, 247,
+229, 196, 162, 145, 103, 177, 223, 18, 19, 168, 180, 236, 128, 189,
+61, 242, 207, 78, 64, 24, 245, 123, 206, 219, 32, 39, 129, 253, 110,
+23, 253, 76, 165, 21, 216, 234, 233, 31, 214, 235, 110, 212, 242, 115,
+118, 217, 243, 10, 192, 218, 18, 117, 251, 119, 186, 63, 18, 73, 54,
+65, 126, 25, 65, 32, 62, 95, 180, 143, 148, 115, 16, 217, 4, 69, 13,
+27, 37, 137, 238, 176, 102, 187, 36, 234, 14, 27, 177, 74, 162, 238,
+176, 62, 235, 154, 100, 162, 234, 19, 247, 156, 6, 5, 246, 251, 235,
+250, 180, 85, 241, 84, 195, 209, 159, 140, 26, 76, 131, 239, 114, 177,
+61, 87, 197, 212, 245, 247, 129, 92, 202, 19, 7, 190, 160, 151, 190,
+159, 247, 240, 23, 143, 7, 94, 94, 94, 215, 64, 230, 3, 56, 53, 197,
+31, 138, 62, 229, 171, 7, 214, 69, 139, 197, 61, 184, 122, 103, 69,
+221, 156, 189, 250, 174, 231, 65, 134, 234, 130, 235, 52, 181, 232,
+240, 151, 35, 208, 166, 13, 27, 55, 101, 67, 17, 104, 214, 38, 58,
+175, 108, 4, 151, 158, 84, 99, 77, 175, 201, 71, 71, 111, 177, 204,
+123, 111, 180, 103, 25, 149, 42, 113, 11, 199, 28, 196, 124, 97, 27,
+149, 84, 140, 201, 125, 194, 128, 81, 9, 194, 236, 6, 42, 158, 85, 42,
+136, 179, 84, 17, 188, 82, 70, 28, 61, 10, 203, 181, 58, 132, 189,
+189, 15, 84, 136, 58, 250, 155, 194, 146, 15, 152, 128, 187, 137, 113,
+241, 8, 147, 121, 108, 233, 231, 151, 57, 206, 64, 214, 234, 49, 171,
+220, 65, 96, 118, 38, 138, 16, 232, 0, 56, 11, 129, 138, 115, 157, 28,
+114, 20, 166, 58, 175, 62, 141, 162, 86, 199, 9, 71, 174, 211, 73, 21,
+75, 103, 107, 251, 224, 32, 242, 157, 72, 103, 66, 196, 194, 200, 107,
+112, 69, 17, 145, 196, 175, 40, 162, 155, 141, 150, 17, 48, 150, 248,
+229, 0, 217, 238, 65, 29, 192, 186, 97, 181, 252, 124, 56, 47, 175,
+107, 173, 233, 122, 101, 229, 216, 194, 223, 221, 167, 1, 51, 211,
+163, 7, 183, 111, 223, 190, 151, 61, 123, 98, 132, 38, 214, 140, 155,
+180, 2, 9, 8, 180, 41, 181, 102, 245, 100, 21, 72, 65, 160, 35, 122,
+107, 74, 209, 128, 2, 25, 8, 180, 171, 232, 163, 190, 97, 1, 93, 142,
+28, 216, 110, 248, 144, 65, 0, 12, 55, 245, 4, 81, 12, 246, 120, 212,
+226, 21, 79, 245, 111, 224, 219, 157, 232, 57, 242, 108, 63, 117, 193,
+71, 173, 147, 141, 196, 115, 146, 216, 158, 132, 251, 122, 217, 5, 57,
+171, 6, 35, 241, 183, 98, 216, 239, 100, 101, 186, 131, 218, 83, 129,
+3, 215, 17, 138, 152, 208, 137, 144, 163, 247, 230, 218, 89, 134, 168,
+16, 85, 55, 5, 32, 70, 81, 144, 119, 162, 139, 107, 229, 58, 103, 17,
+10, 35, 129, 190, 200, 20, 35, 239, 174, 31, 180, 154, 71, 36, 81, 29,
+72, 197, 182, 79, 92, 177, 175, 172, 95, 215, 15, 95, 176, 102, 173,
+122, 172, 155, 137, 245, 212, 134, 62, 57, 171, 37, 234, 206, 9, 220,
+147, 14, 120, 173, 231, 194, 52, 176, 22, 116, 209, 79, 90, 216, 223,
+80, 15, 109, 52, 89, 160, 172, 138, 97, 1, 117, 25, 99, 22, 40, 170,
+211, 181, 192, 144, 89, 142, 234, 209, 61, 219, 54, 111, 222, 206, 77,
+134, 174, 253, 111, 108, 213, 195, 122, 119, 61, 189, 31, 233, 100,
+121, 121, 121, 53, 78, 174, 209, 13, 226, 91, 63, 22, 220, 253, 205,
+178, 11, 218, 160, 169, 208, 154, 69, 129, 14, 10, 116, 54, 14, 36,
+174, 3, 232, 134, 182, 208, 6, 72, 148, 200, 192, 133, 71, 221, 237,
+28, 216, 15, 82, 115, 165, 240, 67, 123, 224, 129, 33, 214, 124, 94,
+167, 192, 248, 86, 228, 118, 238, 134, 238, 218, 6, 215, 246, 198,
+105, 224, 125, 78, 2, 210, 200, 180, 83, 96, 90, 120, 114, 251, 97,
+180, 126, 217, 29, 251, 155, 69, 4, 120, 121, 77, 105, 125, 149, 90,
+190, 125, 36, 60, 185, 21, 237, 72, 179, 48, 3, 9, 53, 197, 13, 133,
+164, 74, 69, 120, 138, 36, 87, 101, 140, 227, 6, 81, 129, 200, 45, 99,
+211, 106, 121, 228, 142, 68, 118, 226, 174, 69, 223, 233, 205, 103,
+169, 161, 37, 41, 133, 196, 196, 156, 92, 136, 6, 125, 34, 103, 143,
+196, 186, 178, 143, 147, 68, 0, 143, 127, 208, 34, 22, 38, 42, 34, 50,
+26, 45, 138, 136, 166, 50, 121, 17, 179, 24, 41, 225, 54, 92, 20, 241,
+13, 12, 176, 34, 34, 241, 171, 44, 98, 26, 1, 252, 42, 14, 97, 95, 97,
+87, 17, 9, 121, 133, 159, 66, 34, 125, 89, 68, 44, 23, 206, 67, 82,
+108, 218, 116, 35, 139, 200, 243, 40, 136, 47, 188, 210, 34, 214, 119,
+21, 91, 38, 188, 138, 69, 12, 76, 216, 80, 209, 123, 177, 141, 170,
+96, 30, 193, 15, 96, 95, 41, 80, 21, 220, 75, 85, 112, 91, 137, 184,
+77, 130, 96, 193, 211, 251, 113, 224, 229, 229, 117, 245, 106, 161,
+30, 33, 233, 56, 241, 100, 215, 47, 239, 76, 186, 64, 244, 144, 135,
+40, 128, 220, 250, 2, 148, 41, 208, 192, 126, 59, 18, 242, 54, 16,
+136, 16, 0, 137, 139, 102, 80, 32, 152, 55, 72, 0, 126, 20, 18, 32,
+35, 197, 191, 32, 0, 117, 79, 19, 130, 169, 89, 142, 107, 13, 82, 120,
+243, 105, 217, 89, 193, 193, 44, 170, 137, 94, 143, 27, 231, 122, 196,
+231, 151, 49, 50, 69, 12, 252, 248, 217, 239, 96, 61, 168, 153, 127,
+84, 251, 111, 129, 187, 221, 203, 235, 166, 215, 19, 181, 14, 61, 22,
+222, 242, 89, 77, 88, 128, 201, 3, 57, 44, 52, 225, 179, 194, 176, 64,
+125, 152, 232, 33, 200, 81, 63, 215, 158, 201, 49, 74, 55, 6, 72, 9,
+224, 198, 145, 209, 164, 113, 59, 39, 206, 226, 231, 234, 19, 200, 65,
+88, 41, 46, 176, 128, 205, 142, 35, 153, 83, 63, 205, 2, 54, 59, 200,
+202, 240, 221, 179, 3, 89, 213, 53, 204, 79, 168, 215, 61, 122, 133,
+7, 81, 109, 184, 25, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+186, 229, 52, 109, 236, 216, 161, 189, 92, 135, 142, 141, 153, 189,
+99, 176, 202, 157, 217, 55, 79, 152, 192, 124, 218, 50, 101, 2, 51,
+252, 0, 147, 113, 207, 79, 6, 144, 187, 34, 15, 78, 158, 46, 43, 224,
+65, 172, 128, 94, 94, 215, 72, 211, 198, 152, 94, 65, 136, 136, 130,
+179, 46, 16, 1, 53, 22, 205, 23, 168, 104, 254, 118, 42, 154, 23, 243,
+166, 177, 182, 206, 231, 108, 99, 121, 217, 56, 251, 10, 58, 100, 250,
+126, 226, 132, 197, 144, 41, 58, 108, 248, 235, 33, 250, 24, 182, 151,
+151, 151, 151, 151, 151, 215, 47, 156, 30, 91, 42, 94, 118, 243, 212,
+239, 192, 237, 124, 54, 110, 149, 253, 103, 45, 142, 105, 60, 238, 4,
+231, 133, 13, 107, 0, 59, 57, 37, 13, 96, 199, 196, 120, 64, 170, 12,
+128, 17, 52, 156, 162, 192, 107, 14, 72, 138, 129, 17, 8, 74, 98, 122,
+34, 3, 112, 208, 118, 222, 226, 21, 159, 146, 0, 27, 24, 110, 114,
+193, 231, 120, 255, 177, 226, 0, 243, 177, 45, 0, 204, 71, 198, 64,
+247, 110, 22, 5, 58, 40, 208, 57, 33, 248, 241, 246, 157, 56, 72, 139,
+231, 189, 78, 59, 32, 137, 148, 156, 131, 30, 241, 176, 153, 11, 126,
+231, 131, 95, 114, 42, 209, 60, 171, 250, 1, 184, 80, 29, 20, 48, 43,
+17, 52, 6, 241, 224, 226, 143, 87, 56, 128, 93, 243, 87, 63, 41, 154,
+23, 4, 191, 116, 244, 63, 179, 31, 143, 60, 187, 191, 82, 12, 112,
+197, 168, 121, 60, 94, 94, 94, 147, 86, 203, 199, 8, 208, 17, 158,
+216, 244, 73, 12, 48, 211, 128, 206, 36, 79, 176, 59, 28, 3, 221, 117,
+131, 20, 5, 122, 235, 6, 25, 10, 244, 81, 32, 87, 55, 24, 188, 114,
+240, 238, 77, 179, 49, 208, 252, 37, 219, 9, 231, 25, 120, 232, 79,
+152, 177, 60, 235, 2, 161, 139, 20, 24, 167, 0, 156, 4, 96, 116, 13,
+194, 107, 5, 242, 19, 130, 234, 159, 187, 215, 139, 131, 149, 230,
+123, 128, 76, 16, 32, 96, 240, 58, 128, 220, 132, 224, 99, 93, 110,
+99, 49, 31, 64, 7, 32, 83, 55, 48, 82, 191, 240, 10, 166, 52, 24, 167,
+0, 108, 37, 221, 26, 192, 169, 34, 9, 13, 224, 44, 118, 163, 111, 0,
+155, 104, 173, 111, 80, 61, 184, 125, 251, 142, 227, 225, 56, 124, 74,
+96, 230, 11, 114, 225, 201, 185, 201, 192, 203, 203, 203, 235, 214,
+82, 124, 243, 186, 165, 247, 119, 205, 93, 176, 120, 245, 230, 36, 0,
+122, 221, 81, 107, 120, 98, 80, 3, 248, 192, 94, 129, 178, 212, 37,
+202, 182, 27, 241, 57, 244, 6, 134, 251, 0, 254, 35, 70, 129, 56, 5,
+154, 38, 4, 103, 144, 30, 27, 15, 79, 79, 201, 101, 67, 49, 208, 54,
+54, 122, 236, 5, 12, 56, 186, 158, 96, 134, 93, 237, 100, 57, 200,
+146, 147, 117, 69, 214, 46, 121, 61, 200, 43, 72, 95, 243, 146, 6,
+176, 149, 20, 52, 128, 237, 42, 167, 1, 108, 137, 70, 219, 253, 62, 0,
+241, 103, 87, 45, 234, 154, 51, 167, 107, 225, 83, 155, 146, 129, 151,
+151, 215, 117, 80, 23, 186, 245, 174, 167, 159, 71, 163, 241, 118,
+199, 100, 72, 241, 12, 30, 150, 61, 235, 156, 16, 36, 41, 128, 61, 16,
+44, 147, 154, 245, 2, 108, 158, 62, 7, 217, 186, 1, 246, 44, 244, 196,
+96, 0, 1, 41, 7, 180, 62, 175, 45, 47, 0, 121, 195, 82, 155, 0, 120,
+3, 243, 73, 247, 233, 20, 152, 73, 129, 89, 20, 0, 47, 219, 28, 154,
+12, 232, 156, 20, 216, 104, 131, 211, 178, 74, 28, 112, 74, 254, 172,
+31, 12, 52, 4, 36, 8, 208, 92, 96, 63, 87, 218, 224, 236, 167, 197,
+85, 116, 64, 164, 108, 221, 192, 108, 187, 160, 218, 211, 6, 0, 87,
+208, 188, 113, 102, 82, 0, 180, 146, 164, 1, 162, 118, 197, 11, 2,
+238, 90, 158, 122, 121, 229, 183, 18, 14, 120, 87, 173, 175, 240, 103,
+242, 88, 1, 208, 39, 158, 227, 199, 156, 247, 240, 215, 79, 6, 132,
+98, 20, 240, 242, 242, 242, 186, 57, 213, 86, 57, 185, 103, 211, 250,
+245, 155, 247, 85, 172, 9, 135, 25, 220, 130, 3, 71, 15, 23, 174, 25,
+209, 160, 8, 64, 221, 227, 231, 177, 186, 1, 15, 45, 79, 11, 167, 0,
+64, 180, 101, 242, 64, 142, 43, 199, 113, 128, 29, 124, 82, 160, 76,
+129, 34, 5, 86, 186, 160, 202, 6, 246, 225, 133, 114, 135, 193, 173,
+2, 146, 224, 247, 182, 111, 91, 159, 54, 65, 84, 228, 146, 125, 186,
+28, 156, 65, 170, 132, 188, 30, 244, 212, 8, 178, 49, 148, 52, 128,
+105, 117, 99, 40, 101, 8, 128, 140, 6, 176, 231, 60, 35, 172, 30, 221,
+187, 125, 199, 190, 227, 206, 34, 55, 11, 100, 135, 192, 39, 226, 189,
+188, 110, 160, 154, 62, 113, 200, 217, 214, 122, 232, 224, 190, 195,
+33, 18, 181, 71, 195, 125, 14, 24, 166, 64, 137, 2, 21, 10, 132, 87,
+10, 220, 197, 186, 36, 112, 31, 111, 103, 91, 199, 183, 62, 227, 174,
+169, 199, 0, 186, 124, 43, 101, 195, 73, 16, 101, 101, 109, 41, 35,
+106, 91, 68, 101, 118, 237, 114, 104, 67, 61, 37, 129, 125, 186, 170,
+128, 78, 181, 35, 83, 228, 164, 234, 174, 93, 15, 110, 12, 40, 133,
+99, 248, 76, 56, 235, 133, 80, 94, 94, 94, 94, 83, 95, 177, 7, 224,
+239, 247, 238, 249, 227, 218, 255, 241, 199, 55, 148, 224, 104, 6,
+123, 99, 200, 15, 123, 68, 226, 20, 0, 190, 101, 252, 43, 238, 188,
+63, 243, 177, 88, 144, 254, 204, 83, 192, 8, 220, 225, 48, 71, 137, 2,
+70, 16, 7, 199, 63, 194, 201, 128, 244, 164, 193, 235, 111, 253, 46,
+14, 78, 201, 9, 4, 24, 72, 176, 159, 75, 16, 224, 142, 177, 92, 29,
+200, 78, 26, 156, 123, 232, 161, 156, 3, 204, 74, 36, 1, 56, 120, 137,
+2, 5, 10, 12, 82, 160, 151, 2, 51, 41, 16, 124, 73, 159, 87, 58, 112,
+213, 75, 1, 119, 148, 236, 227, 59, 94, 172, 12, 97, 128, 29, 161,
+140, 13, 184, 49, 112, 90, 30, 195, 1, 145, 64, 163, 54, 235, 10, 156,
+206, 8, 5, 140, 74, 36, 167, 133, 194, 135, 92, 115, 26, 192, 110,
+245, 125, 26, 192, 185, 131, 45, 199, 15, 60, 183, 124, 233, 226, 199,
+214, 236, 31, 27, 8, 188, 188, 174, 181, 90, 208, 57, 236, 129, 152,
+223, 254, 41, 12, 248, 249, 237, 142, 174, 98, 126, 123, 243, 179, 75,
+48, 208, 244, 31, 43, 214, 100, 163, 60, 3, 11, 191, 200, 236, 89,
+149, 116, 219, 89, 10, 108, 164, 192, 144, 9, 134, 175, 3, 32, 15, 46,
+64, 181, 132, 131, 31, 126, 56, 129, 151, 163, 199, 29, 63, 7, 147,
+210, 73, 48, 112, 117, 32, 103, 128, 149, 20, 200, 154, 160, 143, 2,
+25, 3, 44, 161, 64, 218, 4, 189, 20, 72, 25, 160, 135, 2, 73, 19, 116,
+83, 32, 97, 0, 208, 224, 216, 150, 170, 28, 196, 55, 183, 243, 249,
+237, 255, 20, 4, 211, 15, 219, 14, 114, 198, 223, 200, 167, 104, 226,
+31, 223, 19, 120, 121, 121, 93, 43, 221, 89, 11, 29, 147, 24, 24, 57,
+121, 168, 84, 70, 65, 72, 38, 213, 174, 61, 168, 52, 22, 148, 49, 80,
+8, 241, 229, 106, 130, 183, 172, 94, 255, 217, 6, 61, 38, 251, 225,
+90, 181, 167, 49, 48, 246, 173, 199, 190, 139, 158, 85, 72, 149, 195,
+3, 15, 166, 6, 32, 239, 168, 29, 155, 86, 127, 109, 8, 3, 94, 94, 94,
+215, 75, 191, 90, 196, 182, 62, 251, 236, 119, 234, 244, 156, 19, 90,
+6, 114, 216, 185, 126, 128, 190, 222, 164, 126, 192, 202, 129, 190,
+249, 172, 214, 147, 249, 241, 18, 12, 204, 123, 32, 137, 109, 158, 88,
+113, 244, 59, 191, 187, 254, 107, 165, 35, 24, 184, 178, 218, 245, 96,
+242, 160, 129, 45, 241, 122, 128, 169, 89, 137, 19, 77, 248, 179, 117,
+207, 119, 9, 80, 10, 9, 16, 94, 55, 80, 166, 64, 145, 2, 27, 17, 112,
+242, 185, 254, 175, 143, 38, 93, 240, 237, 6, 133, 5, 94, 94, 80, 183,
+74, 190, 61, 83, 55, 152, 10, 249, 246, 133, 139, 87, 244, 175, 71, 0,
+127, 138, 8, 14, 209, 229, 57, 224, 163, 232, 103, 16, 192, 107, 236,
+8, 2, 248, 14, 7, 16, 192, 141, 38, 200, 201, 138, 36, 57, 159, 53,
+109, 93, 96, 14, 248, 194, 96, 231, 16, 192, 31, 93, 124, 29, 1, 188,
+69, 88, 169, 14, 126, 112, 94, 247, 75, 16, 192, 146, 63, 246, 76,
+185, 124, 40, 101, 191, 26, 71, 1, 123, 178, 156, 2, 118, 207, 72, 13,
+47, 219, 249, 23, 5, 202, 20, 176, 223, 12, 154, 139, 128, 61, 127,
+143, 131, 188, 91, 185, 162, 193, 241, 235, 180, 17, 1, 188, 18, 173,
+110, 100, 134, 170, 118, 126, 27, 240, 55, 34, 89, 23, 138, 239, 94,
+84, 126, 26, 1, 124, 135, 67, 0, 136, 123, 176, 195, 61, 58, 191, 120,
+226, 237, 74, 112, 1, 35, 145, 111, 231, 78, 26, 14, 47, 179, 124,
+251, 255, 12, 130, 223, 123, 177, 98, 165, 238, 85, 190, 61, 246, 200,
+119, 192, 216, 132, 151, 151, 215, 117, 209, 137, 181, 75, 31, 64,
+131, 81, 204, 234, 41, 80, 87, 191, 61, 54, 33, 192, 2, 147, 250, 65,
+28, 241, 53, 87, 3, 38, 185, 70, 233, 84, 1, 216, 106, 246, 13, 4,
+205, 215, 225, 24, 19, 131, 41, 87, 237, 100, 43, 105, 96, 75, 140,
+77, 8, 26, 115, 227, 52, 50, 112, 63, 176, 238, 169, 13, 69, 12, 120,
+121, 121, 121, 221, 244, 154, 245, 227, 181, 31, 49, 115, 110, 177,
+207, 189, 42, 126, 77, 201, 152, 171, 233, 119, 15, 255, 99, 237, 199,
+219, 10, 81, 134, 143, 135, 86, 115, 30, 249, 58, 11, 202, 86, 178,
+233, 114, 81, 216, 196, 163, 59, 57, 237, 247, 213, 82, 168, 195, 38,
+115, 174, 179, 148, 8, 125, 135, 93, 32, 226, 169, 2, 2, 120, 144, 89,
+66, 64, 154, 129, 10, 2, 120, 47, 16, 217, 46, 38, 129, 97, 128, 197,
+108, 49, 12, 12, 40, 112, 226, 179, 189, 230, 79, 6, 184, 187, 187,
+20, 173, 224, 98, 204, 89, 227, 224, 77, 100, 193, 25, 238, 132, 207,
+33, 32, 94, 55, 136, 97, 64, 157, 174, 113, 240, 68, 84, 192, 160, 46,
+144, 141, 106, 247, 188, 6, 221, 170, 118, 75, 8, 72, 71, 87, 240,
+130, 6, 41, 246, 179, 39, 186, 230, 23, 53, 224, 149, 56, 59, 106, 37,
+151, 52, 200, 132, 81, 43, 201, 133, 188, 37, 154, 96, 92, 181, 196,
+104, 62, 92, 89, 180, 191, 139, 102, 219, 157, 193, 150, 219, 223, 37,
+128, 72, 169, 204, 122, 105, 237, 34, 179, 181, 223, 245, 248, 206,
+159, 77, 242, 70, 241, 242, 242, 242, 154, 226, 234, 127, 84, 218,
+183, 38, 184, 126, 62, 243, 31, 163, 204, 95, 124, 162, 82, 205, 154,
+160, 89, 88, 207, 95, 126, 190, 246, 227, 167, 38, 224, 111, 37, 185,
+240, 60, 119, 118, 32, 33, 221, 106, 248, 69, 144, 149, 157, 102, 0,
+144, 219, 6, 107, 133, 153, 160, 205, 4, 166, 97, 158, 65, 1, 176, 30,
+89, 146, 2, 61, 147, 1, 237, 226, 68, 255, 123, 14, 5, 231, 123, 220,
+89, 222, 237, 210, 5, 57, 96, 22, 5, 200, 111, 212, 15, 102, 154, 192,
+41, 96, 93, 96, 134, 9, 146, 147, 1, 109, 38, 48, 175, 199, 116, 10,
+76, 163, 64, 171, 9, 140, 237, 162, 193, 97, 128, 55, 209, 35, 162,
+150, 225, 152, 201, 216, 129, 117, 203, 107, 167, 25, 127, 108, 205,
+206, 19, 129, 151, 151, 151, 215, 47, 134, 166, 141, 29, 221, 182,
+190, 191, 127, 253, 150, 23, 199, 224, 72, 99, 74, 123, 59, 152, 205,
+205, 107, 0, 7, 152, 71, 52, 128, 227, 156, 70, 80, 125, 149, 235,
+183, 3, 96, 122, 3, 176, 244, 120, 210, 0, 96, 121, 218, 30, 27, 156,
+54, 67, 74, 169, 104, 65, 116, 199, 221, 77, 14, 164, 175, 3, 112, 14,
+142, 149, 99, 226, 146, 99, 117, 69, 86, 34, 89, 237, 141, 92, 216,
+157, 108, 62, 70, 222, 7, 190, 232, 56, 165, 1, 108, 162, 173, 199,
+15, 110, 237, 95, 177, 162, 255, 217, 125, 163, 217, 192, 203, 203,
+203, 235, 150, 82, 251, 137, 181, 31, 225, 31, 154, 254, 240, 79, 1,
+96, 254, 129, 101, 47, 127, 121, 196, 122, 97, 106, 130, 27, 220, 119,
+127, 131, 89, 203, 149, 54, 8, 15, 11, 51, 90, 52, 65, 183, 97, 194,
+203, 38, 48, 236, 46, 28, 239, 236, 165, 64, 166, 110, 208, 71, 129,
+156, 216, 86, 193, 193, 137, 63, 232, 118, 0, 247, 31, 105, 149, 248,
+181, 64, 80, 15, 200, 95, 7, 192, 71, 51, 122, 2, 183, 28, 230, 48,
+199, 228, 64, 126, 50, 160, 76, 129, 35, 20, 0, 147, 1, 205, 81, 153,
+141, 20, 72, 19, 128, 114, 244, 227, 159, 7, 32, 39, 170, 196, 21, 57,
+39, 149, 4, 25, 10, 144, 51, 101, 83, 20, 32, 103, 227, 38, 38, 2,
+238, 114, 146, 129, 190, 107, 29, 181, 159, 252, 42, 24, 105, 240,
+242, 242, 250, 69, 82, 243, 138, 52, 251, 17, 95, 252, 69, 248, 234,
+138, 88, 33, 28, 255, 99, 236, 101, 23, 60, 249, 250, 195, 52, 127,
+185, 21, 48, 29, 194, 159, 87, 75, 14, 48, 45, 117, 210, 4, 5, 3, 0,
+243, 91, 162, 108, 187, 57, 126, 14, 102, 79, 134, 147, 1, 89, 27, 92,
+146, 7, 90, 105, 131, 83, 113, 62, 99, 0, 1, 210, 196, 15, 32, 160,
+179, 193, 96, 227, 213, 131, 40, 112, 31, 162, 170, 164, 126, 0, 142,
+81, 161, 64, 137, 2, 35, 20, 200, 27, 0, 84, 73, 134, 2, 179, 40, 16,
+255, 174, 6, 48, 235, 36, 212, 77, 1, 94, 137, 89, 10, 44, 169, 27,
+164, 41, 128, 117, 54, 156, 209, 12, 0, 48, 47, 77, 190, 138, 138,
+221, 181, 104, 71, 32, 136, 63, 248, 197, 151, 80, 224, 229, 229, 117,
+179, 104, 186, 12, 207, 237, 241, 115, 102, 218, 170, 63, 170, 253,
+252, 237, 138, 101, 224, 122, 185, 73, 120, 55, 179, 140, 47, 3, 192,
+205, 235, 126, 110, 43, 97, 190, 221, 8, 145, 201, 101, 43, 161, 145,
+49, 29, 61, 0, 121, 10, 12, 83, 160, 208, 56, 192, 61, 78, 245, 0, 1,
+126, 63, 32, 64, 208, 72, 80, 114, 234, 74, 130, 15, 174, 232, 95,
+253, 5, 183, 28, 1, 162, 250, 193, 48, 5, 242, 20, 24, 164, 64, 142,
+2, 13, 142, 132, 47, 97, 96, 214, 75, 207, 61, 249, 1, 12, 120, 121,
+121, 121, 221, 252, 162, 94, 15, 57, 173, 50, 186, 103, 211, 58, 246,
+126, 181, 159, 67, 144, 210, 222, 46, 13, 128, 225, 107, 65, 124, 213,
+192, 247, 171, 77, 12, 126, 246, 208, 35, 56, 216, 133, 188, 26, 44,
+2, 159, 222, 182, 105, 85, 143, 3, 46, 125, 219, 234, 222, 24, 7, 31,
+221, 250, 228, 108, 20, 176, 83, 128, 64, 23, 176, 154, 4, 192, 168,
+146, 1, 0, 140, 158, 76, 17, 0, 99, 101, 110, 88, 142, 86, 125, 16,
+88, 242, 96, 222, 199, 119, 86, 80, 80, 83, 252, 145, 111, 184, 224,
+227, 91, 118, 236, 77, 99, 79, 111, 178, 221, 12, 97, 128, 109, 249,
+215, 21, 159, 174, 243, 66, 161, 128, 108, 12, 70, 93, 129, 4, 189,
+217, 224, 6, 0, 72, 81, 213, 222, 242, 226, 158, 117, 43, 150, 175,
+232, 223, 178, 255, 31, 156, 26, 241, 242, 242, 242, 178, 181, 115,
+207, 230, 237, 88, 202, 142, 94, 133, 18, 183, 184, 215, 5, 124, 112,
+49, 3, 167, 227, 206, 235, 165, 84, 188, 187, 203, 2, 202, 186, 30,
+169, 27, 148, 45, 80, 106, 28, 168, 212, 13, 190, 49, 198, 237, 253,
+216, 232, 70, 11, 220, 90, 175, 81, 35, 159, 232, 190, 180, 105, 185,
+155, 219, 149, 117, 229, 22, 94, 2, 123, 45, 27, 5, 220, 199, 242,
+201, 93, 85, 40, 32, 47, 174, 251, 56, 123, 65, 0, 183, 40, 50, 241,
+227, 22, 126, 70, 133, 0, 65, 108, 118, 236, 174, 167, 159, 47, 186,
+192, 203, 203, 203, 235, 38, 215, 98, 149, 126, 156, 183, 12, 128, 82,
+56, 122, 160, 214, 45, 105, 221, 113, 220, 26, 187, 147, 206, 145, 15,
+209, 165, 109, 112, 10, 25, 56, 140, 153, 32, 75, 129, 149, 20, 24,
+48, 64, 220, 4, 27, 41, 48, 68, 1, 179, 111, 210, 52, 41, 80, 156, 12,
+104, 158, 20, 56, 210, 16, 208, 141, 130, 215, 226, 31, 47, 217, 128,
+159, 238, 184, 116, 146, 78, 57, 34, 77, 10, 128, 249, 237, 102, 93,
+197, 38, 5, 134, 12, 48, 185, 17, 119, 208, 31, 54, 7, 214, 179, 38,
+200, 241, 18, 126, 43, 195, 126, 128, 145, 234, 249, 181, 142, 218,
+183, 146, 98, 24, 61, 109, 130, 166, 145, 31, 177, 63, 108, 90, 189,
+229, 48, 124, 151, 144, 161, 57, 196, 118, 47, 47, 47, 175, 155, 82,
+237, 7, 214, 46, 229, 158, 126, 222, 226, 213, 59, 135, 12, 192, 221,
+248, 128, 124, 192, 216, 180, 224, 124, 126, 92, 89, 254, 129, 105,
+143, 249, 131, 197, 175, 203, 36, 104, 218, 0, 220, 19, 189, 33, 163,
+44, 231, 97, 167, 115, 34, 159, 10, 151, 17, 101, 222, 233, 130, 176,
+240, 112, 17, 218, 97, 241, 167, 149, 208, 94, 145, 148, 217, 252, 42,
+22, 114, 115, 199, 216, 211, 34, 207, 218, 16, 247, 2, 217, 233, 142,
+35, 18, 69, 30, 152, 233, 184, 21, 241, 32, 244, 46, 100, 14, 18, 95,
+8, 181, 204, 142, 100, 143, 230, 22, 88, 157, 48, 71, 244, 166, 5,
+216, 249, 190, 193, 146, 238, 118, 196, 203, 246, 114, 158, 21, 220,
+78, 127, 180, 163, 222, 49, 48, 30, 239, 79, 91, 32, 114, 207, 238,
+98, 201, 210, 117, 218, 235, 217, 170, 153, 14, 110, 24, 46, 159, 93,
+176, 79, 74, 157, 150, 147, 253, 136, 78, 203, 62, 169, 232, 180, 176,
+21, 156, 71, 240, 147, 146, 167, 133, 45, 217, 215, 237, 94, 87, 161,
+182, 177, 209, 177, 177, 44, 2, 188, 188, 188, 188, 110, 77, 181, 173,
+91, 122, 191, 246, 77, 119, 61, 182, 122, 199, 247, 197, 199, 4, 243,
+143, 75, 130, 153, 99, 99, 99, 69, 224, 38, 165, 163, 79, 113, 31,
+205, 109, 182, 204, 143, 206, 18, 158, 49, 199, 157, 215, 116, 195,
+206, 114, 207, 88, 148, 11, 134, 205, 16, 191, 112, 201, 63, 42, 113,
+87, 220, 110, 56, 214, 86, 177, 91, 110, 247, 147, 102, 199, 65, 156,
+136, 136, 47, 151, 36, 12, 119, 193, 187, 6, 111, 136, 21, 109, 6, 82,
+252, 123, 178, 76, 108, 239, 231, 196, 250, 52, 187, 50, 161, 49, 201,
+44, 207, 124, 135, 240, 70, 229, 92, 104, 60, 254, 195, 250, 29, 23,
+249, 81, 195, 215, 217, 31, 169, 142, 3, 219, 111, 149, 239, 60, 124,
+99, 196, 116, 48, 252, 143, 243, 194, 69, 130, 209, 22, 176, 252, 77,
+104, 116, 140, 90, 45, 160, 58, 70, 246, 170, 117, 58, 87, 62, 2, 182,
+27, 238, 48, 7, 128, 225, 14, 83, 0, 24, 238, 80, 206, 11, 127, 73,
+252, 40, 107, 32, 215, 241, 89, 43, 126, 12, 105, 208, 44, 182, 44,
+18, 63, 178, 26, 200, 112, 123, 54, 255, 1, 98, 225, 188, 56, 205, 2,
+251, 1, 58, 101, 189, 98, 11, 159, 65, 0, 18, 251, 252, 180, 206, 137,
+121, 113, 101, 19, 240, 134, 114, 90, 56, 239, 33, 19, 52, 137, 63,
+229, 95, 132, 115, 204, 89, 107, 27, 224, 115, 14, 208, 9, 115, 94,
+94, 94, 94, 55, 169, 154, 215, 61, 122, 39, 255, 16, 91, 240, 112,
+191, 9, 152, 65, 172, 254, 191, 32, 206, 30, 39, 135, 33, 100, 129,
+219, 103, 238, 144, 224, 107, 51, 184, 185, 205, 206, 119, 108, 171,
+176, 170, 69, 238, 93, 210, 0, 112, 175, 127, 182, 20, 58, 182, 53,
+166, 114, 175, 246, 128, 173, 154, 46, 102, 7, 132, 243, 35, 144, 181,
+64, 180, 214, 156, 99, 190, 163, 131, 184, 99, 194, 210, 17, 22, 29,
+32, 156, 57, 18, 90, 138, 152, 19, 123, 240, 183, 130, 31, 66, 30,
+253, 172, 11, 196, 249, 34, 81, 170, 156, 16, 231, 78, 205, 144, 83,
+29, 156, 55, 241, 69, 233, 115, 59, 5, 160, 34, 122, 107, 178, 152,
+241, 0, 216, 144, 5, 74, 17, 176, 70, 189, 117, 247, 195, 42, 59, 191,
+230, 85, 164, 182, 120, 50, 230, 101, 214, 136, 172, 153, 25, 252, 16,
+67, 252, 12, 64, 192, 205, 147, 31, 225, 18, 94, 245, 192, 253, 243,
+82, 84, 101, 87, 195, 44, 73, 138, 109, 168, 181, 93, 190, 71, 51, 63,
+240, 39, 219, 86, 45, 98, 205, 61, 182, 96, 241, 234, 29, 197, 192,
+203, 203, 203, 235, 22, 210, 230, 207, 38, 229, 167, 248, 35, 155, 77,
+80, 51, 184, 39, 255, 186, 246, 243, 215, 94, 180, 60, 225, 96, 40,
+66, 89, 22, 21, 130, 12, 104, 70, 154, 213, 138, 237, 191, 120, 244,
+180, 68, 120, 23, 48, 215, 73, 6, 216, 220, 39, 148, 77, 48, 83, 184,
+148, 233, 142, 209, 159, 38, 220, 236, 76, 199, 175, 201, 69, 104,
+185, 23, 129, 179, 188, 42, 252, 168, 157, 161, 243, 216, 109, 129,
+59, 142, 148, 237, 37, 132, 55, 63, 203, 139, 99, 121, 219, 20, 47,
+242, 160, 93, 12, 81, 144, 139, 220, 173, 22, 33, 152, 193, 61, 51,
+171, 170, 1, 8, 120, 153, 121, 236, 106, 205, 73, 227, 57, 231, 7,
+220, 179, 21, 21, 190, 194, 61, 91, 113, 190, 219, 236, 74, 143, 206,
+119, 12, 115, 244, 209, 227, 217, 246, 84, 71, 213, 247, 201, 218, 64,
+134, 225, 200, 67, 208, 162, 83, 132, 196, 186, 121, 14, 206, 185,
+128, 55, 20, 236, 37, 46, 162, 183, 84, 116, 129, 200, 102, 32, 115,
+76, 91, 136, 147, 194, 222, 185, 102, 0, 228, 164, 196, 21, 193, 222,
+44, 195, 27, 155, 59, 156, 32, 123, 144, 3, 8, 232, 115, 91, 161, 144,
+28, 20, 114, 197, 42, 209, 233, 117, 5, 122, 137, 63, 71, 109, 212,
+73, 205, 34, 106, 42, 152, 117, 96, 83, 255, 10, 236, 216, 94, 94, 94,
+183, 140, 30, 151, 235, 183, 199, 23, 63, 3, 65, 41, 172, 30, 61, 184,
+247, 208, 241, 138, 237, 90, 66, 173, 41, 9, 172, 211, 125, 94, 1,
+219, 98, 198, 230, 46, 248, 21, 14, 134, 2, 71, 239, 103, 219, 199,
+221, 41, 83, 49, 158, 221, 126, 217, 253, 2, 55, 251, 213, 180, 11,
+120, 244, 140, 4, 232, 211, 41, 39, 213, 135, 157, 107, 77, 205, 220,
+117, 186, 227, 209, 34, 112, 119, 220, 124, 32, 51, 241, 142, 211,
+150, 254, 17, 41, 156, 72, 76, 84, 15, 237, 221, 179, 109, 19, 216,
+222, 98, 204, 85, 3, 192, 92, 184, 5, 128, 206, 27, 9, 58, 168, 198,
+48, 243, 165, 173, 79, 46, 234, 154, 187, 224, 161, 167, 119, 190,
+234, 150, 222, 203, 203, 171, 193, 122, 27, 250, 168, 87, 252, 241,
+175, 163, 179, 91, 90, 74, 33, 254, 172, 78, 38, 36, 64, 137, 0, 162,
+171, 143, 128, 54, 10, 180, 83, 96, 22, 5, 58, 40, 208, 121, 133, 160,
+76, 128, 234, 0, 1, 200, 213, 167, 144, 237, 87, 0, 82, 4, 136, 141,
+16, 224, 67, 174, 205, 229, 18, 207, 84, 35, 177, 76, 158, 151, 219,
+157, 26, 37, 7, 120, 255, 214, 1, 226, 98, 252, 55, 119, 79, 188, 16,
+136, 159, 21, 87, 233, 34, 82, 83, 226, 130, 95, 114, 215, 252, 106,
+18, 238, 14, 217, 217, 251, 197, 87, 92, 16, 27, 38, 74, 30, 76, 171,
+80, 181, 155, 163, 64, 162, 113, 87, 240, 10, 1, 54, 87, 156, 131, 19,
+89, 2, 96, 209, 101, 253, 183, 1, 121, 71, 145, 128, 188, 107, 103,
+80, 160, 149, 2, 98, 200, 4, 51, 50, 57, 10, 240, 139, 139, 62, 91,
+248, 214, 63, 60, 140, 63, 204, 90, 211, 111, 14, 17, 192, 203, 107,
+170, 170, 71, 254, 115, 52, 186, 117, 253, 119, 202, 24, 160, 110,
+154, 6, 130, 6, 190, 198, 249, 186, 189, 24, 29, 3, 110, 178, 219, 4,
+83, 238, 213, 221, 55, 20, 144, 73, 78, 242, 29, 235, 87, 8, 166, 92,
+201, 167, 48, 184, 198, 247, 199, 196, 47, 120, 191, 198, 6, 224, 186,
+172, 69, 48, 182, 103, 203, 243, 101, 12, 164, 229, 63, 47, 175, 70,
+106, 25, 5, 42, 209, 27, 67, 108, 177, 182, 251, 42, 22, 25, 240, 14,
+245, 255, 162, 0, 54, 107, 137, 3, 44, 122, 21, 96, 128, 2, 72, 50,
+83, 0, 36, 250, 16, 160, 76, 1, 228, 46, 36, 1, 185, 90, 198, 151, 41,
+16, 188, 251, 122, 24, 13, 202, 42, 114, 128, 101, 132, 69, 73, 254,
+130, 2, 227, 73, 23, 136, 217, 95, 63, 117, 129, 136, 133, 157, 57,
+94, 53, 67, 250, 37, 78, 178, 200, 81, 114, 12, 32, 25, 161, 88, 30,
+7, 77, 207, 19, 187, 250, 40, 223, 142, 228, 176, 197, 236, 115, 55,
+111, 32, 10, 136, 213, 9, 213, 226, 56, 192, 134, 126, 39, 94, 55,
+230, 6, 173, 102, 243, 43, 223, 33, 64, 169, 238, 214, 126, 25, 80,
+166, 0, 121, 15, 22, 41, 128, 12, 102, 8, 224, 230, 100, 4, 192, 18,
+44, 28, 32, 19, 29, 57, 168, 98, 233, 199, 48, 60, 185, 245, 119, 144,
+237, 193, 222, 79, 98, 91, 189, 188, 188, 188, 166, 162, 246, 243, 62,
+84, 211, 167, 127, 104, 109, 159, 22, 254, 43, 251, 81, 114, 114, 238,
+179, 194, 240, 7, 60, 214, 177, 77, 105, 162, 102, 45, 255, 158, 27,
+77, 11, 240, 249, 120, 127, 197, 128, 229, 109, 83, 220, 242, 190, 16,
+58, 51, 170, 4, 96, 234, 185, 90, 208, 77, 129, 218, 233, 94, 20, 221,
+50, 235, 224, 157, 53, 223, 220, 202, 157, 158, 85, 142, 14, 230, 211,
+24, 65, 170, 228, 53, 158, 202, 181, 157, 200, 116, 225, 211, 222, 49,
+54, 20, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 77, 29, 189,
+245, 45, 239, 124, 207, 61, 239, 189, 167, 243, 182, 219, 222, 122,
+71, 231, 59, 103, 39, 238, 125, 203, 61, 247, 190, 231, 222, 123, 223,
+243, 158, 123, 103, 207, 126, 251, 29, 111, 189, 251, 238, 5, 247,
+188, 231, 158, 187, 187, 238, 189, 119, 238, 93, 11, 146, 247, 221,
+123, 239, 61, 239, 189, 251, 158, 174, 123, 187, 238, 95, 176, 96,
+193, 91, 147, 111, 251, 192, 237, 243, 19, 137, 228, 157, 243, 223,
+158, 76, 206, 158, 115, 199, 156, 238, 100, 50, 121, 231, 29, 137,
+183, 37, 111, 187, 251, 246, 219, 238, 120, 215, 156, 119, 221, 57,
+63, 30, 136, 247, 90, 176, 21, 181, 120, 106, 166, 53, 12, 255, 63,
+255, 93, 194, 5
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define NIGHTFONT_HANDLE 0
+#define NIGHTFONT_WIDTH 49
+#define NIGHTFONT_HEIGHT 80
+#define NIGHTFONT_CELLS 96
+#define ASSETS_END 192148UL
+static const shape_t NIGHTFONT_SHAPE = {0, 49, 80, 0};

+ 1891 - 0
converted-assets/formats_assets.h

@@ -0,0 +1,1891 @@
+static const PROGMEM uint8_t __assets[27886] = {
+0, 0, 0, 5, 0, 0, 0, 1, 50, 160, 0, 8, 50, 64, 57, 7, 1, 0, 0, 5, 64,
+31, 0, 1, 50, 160, 0, 8, 50, 64, 1, 7, 2, 0, 0, 5, 128, 62, 0, 1, 50,
+160, 0, 8, 50, 64, 49, 7, 3, 0, 0, 5, 192, 93, 0, 1, 50, 160, 0, 8,
+50, 160, 32, 7, 4, 0, 0, 5, 96, 109, 0, 1, 50, 160, 0, 8, 50, 160, 40,
+7, 5, 0, 0, 5, 0, 125, 0, 1, 94, 208, 0, 8, 94, 26, 8, 7, 6, 0, 0, 5,
+198, 129, 0, 1, 94, 208, 0, 8, 94, 104, 16, 7, 7, 0, 0, 5, 222, 148,
+0, 1, 94, 208, 0, 8, 94, 208, 24, 7, 34, 255, 255, 255, 0, 0, 0, 0,
+120, 156, 172, 189, 9, 92, 147, 87, 186, 248, 207, 29, 167, 96, 219,
+153, 22, 156, 233, 253, 89, 123, 167, 178, 9, 65, 173, 10, 65, 91,
+116, 166, 45, 36, 74, 66, 235, 180, 64, 98, 175, 216, 59, 115, 101,
+79, 40, 157, 25, 80, 176, 104, 167, 83, 65, 217, 59, 22, 80, 131, 66,
+171, 53, 177, 4, 136, 83, 172, 1, 195, 86, 165, 144, 150, 37, 136,
+148, 77, 16, 104, 213, 128, 4, 1, 23, 118, 183, 223, 243, 156, 243,
+190, 73, 88, 108, 59, 255, 255, 239, 125, 74, 200, 155, 228, 60, 231,
+123, 158, 245, 156, 224, 124, 70, 147, 171, 201, 189, 164, 152, 41,
+211, 179, 100, 195, 169, 150, 180, 1, 105, 173, 52, 41, 240, 115, 169,
+66, 232, 224, 193, 243, 112, 112, 253, 133, 171, 131, 43, 207, 163,
+138, 83, 101, 91, 197, 185, 2, 178, 192, 213, 193, 35, 193, 211, 210,
+111, 83, 64, 130, 103, 141, 48, 200, 51, 72, 152, 32, 188, 178, 230,
+51, 219, 4, 15, 231, 0, 185, 231, 21, 142, 194, 147, 231, 49, 24, 240,
+220, 41, 147, 214, 78, 16, 211, 156, 26, 42, 185, 40, 217, 185, 50,
+144, 93, 40, 7, 241, 85, 115, 182, 169, 57, 116, 211, 240, 137, 149,
+17, 181, 210, 1, 105, 158, 52, 49, 112, 83, 64, 88, 160, 83, 64, 2,
+80, 46, 112, 69, 65, 58, 7, 15, 228, 3, 106, 15, 75, 63, 167, 0, 203,
+128, 77, 129, 242, 173, 155, 2, 157, 2, 131, 61, 29, 92, 107, 132, 10,
+207, 4, 207, 5, 46, 124, 215, 4, 15, 142, 79, 167, 98, 90, 101, 78,
+248, 99, 124, 148, 240, 167, 233, 166, 21, 235, 14, 122, 251, 229, 5,
+62, 17, 189, 41, 48, 79, 234, 179, 251, 241, 221, 203, 2, 170, 125,
+245, 190, 53, 96, 31, 36, 227, 121, 58, 120, 4, 123, 58, 5, 232, 125,
+131, 61, 55, 5, 224, 103, 18, 165, 159, 71, 61, 30, 159, 24, 37, 247,
+173, 241, 213, 11, 131, 61, 170, 108, 23, 184, 56, 184, 4, 123, 244,
+123, 106, 20, 75, 78, 253, 92, 251, 201, 24, 251, 61, 146, 79, 181,
+228, 20, 104, 131, 199, 177, 44, 129, 95, 98, 224, 227, 209, 121, 210,
+199, 163, 83, 227, 7, 162, 18, 129, 96, 32, 106, 83, 0, 207, 19, 109,
+23, 36, 12, 246, 12, 3, 42, 203, 128, 199, 2, 150, 193, 207, 64, 212,
+183, 64, 119, 61, 238, 219, 184, 101, 129, 53, 190, 193, 30, 11, 92,
+62, 92, 92, 101, 123, 149, 131, 124, 178, 220, 37, 167, 230, 183, 223,
+37, 51, 62, 217, 188, 246, 155, 154, 135, 14, 101, 3, 240, 245, 9,
+175, 71, 253, 58, 231, 181, 248, 199, 193, 122, 161, 210, 60, 32, 248,
+92, 186, 41, 48, 94, 104, 239, 33, 23, 6, 9, 245, 190, 137, 129, 161,
+129, 250, 173, 213, 190, 241, 66, 253, 214, 188, 168, 229, 241, 5,
+153, 169, 153, 223, 198, 161, 5, 175, 64, 132, 126, 182, 248, 195,
+197, 159, 45, 230, 187, 90, 249, 104, 126, 138, 79, 49, 219, 126, 151,
+230, 231, 83, 153, 248, 182, 21, 251, 37, 232, 125, 117, 153, 139, 42,
+126, 157, 243, 248, 238, 111, 163, 54, 5, 38, 74, 175, 3, 95, 40, 48,
+197, 11, 193, 135, 91, 67, 33, 34, 245, 91, 229, 190, 241, 190, 94,
+158, 114, 223, 235, 113, 169, 153, 67, 39, 110, 28, 93, 158, 26, 42,
+13, 18, 86, 113, 182, 91, 111, 183, 254, 112, 241, 94, 176, 225, 73,
+143, 93, 51, 248, 30, 21, 129, 63, 201, 103, 100, 163, 124, 54, 123,
+170, 133, 111, 200, 23, 85, 124, 113, 166, 48, 51, 76, 186, 44, 112,
+83, 96, 88, 32, 210, 45, 11, 172, 134, 60, 72, 140, 74, 140, 186, 6,
+116, 65, 190, 242, 173, 60, 161, 124, 235, 183, 113, 17, 169, 133, 71,
+83, 51, 151, 199, 231, 69, 85, 251, 86, 113, 60, 145, 15, 8, 63, 92,
+188, 209, 117, 87, 238, 115, 143, 228, 51, 39, 156, 203, 55, 245, 72,
+190, 61, 197, 110, 132, 175, 232, 76, 83, 249, 95, 10, 151, 199, 47,
+11, 188, 182, 53, 193, 247, 49, 136, 180, 234, 173, 203, 128, 46, 47,
+106, 0, 34, 45, 72, 24, 228, 91, 189, 53, 200, 247, 177, 192, 111,
+227, 150, 167, 250, 164, 46, 143, 127, 60, 126, 121, 252, 99, 1, 231,
+57, 219, 23, 111, 183, 246, 92, 136, 86, 12, 113, 101, 242, 227, 39,
+115, 216, 20, 127, 243, 240, 169, 102, 243, 129, 127, 133, 171, 114,
+14, 20, 254, 165, 240, 159, 133, 171, 228, 62, 241, 251, 33, 174, 80,
+170, 183, 58, 73, 175, 199, 93, 143, 123, 60, 254, 219, 56, 253, 246,
+19, 91, 175, 193, 207, 50, 224, 27, 128, 87, 30, 143, 31, 216, 59, 16,
+231, 20, 120, 101, 205, 135, 192, 247, 42, 240, 189, 106, 253, 185, 7,
+106, 70, 253, 38, 194, 71, 243, 33, 221, 91, 63, 195, 191, 123, 138,
+111, 69, 203, 133, 67, 153, 111, 20, 254, 81, 254, 71, 249, 42, 249,
+208, 209, 212, 212, 111, 163, 228, 91, 227, 193, 159, 155, 164, 215,
+41, 75, 220, 231, 81, 155, 164, 203, 208, 247, 210, 196, 168, 111,
+225, 181, 39, 226, 243, 226, 194, 162, 30, 11, 252, 133, 199, 135,
+139, 95, 181, 182, 93, 232, 185, 208, 98, 97, 170, 207, 182, 98, 182,
+42, 152, 8, 167, 230, 33, 148, 229, 198, 2, 219, 186, 131, 207, 28,
+60, 139, 188, 115, 44, 56, 51, 254, 90, 211, 250, 124, 211, 82, 223,
+0, 54, 202, 167, 59, 90, 152, 9, 85, 48, 16, 172, 37, 253, 6, 88, 150,
+167, 34, 227, 183, 192, 152, 23, 133, 185, 61, 16, 7, 182, 219, 27,
+22, 165, 223, 94, 237, 107, 198, 103, 177, 106, 219, 158, 98, 86, 183,
+57, 225, 108, 62, 180, 219, 127, 30, 28, 75, 59, 147, 150, 153, 176,
+14, 40, 223, 58, 184, 43, 247, 108, 174, 185, 37, 205, 237, 184, 225,
+212, 89, 69, 120, 192, 227, 209, 171, 228, 171, 10, 255, 8, 254, 93,
+37, 255, 11, 88, 178, 1, 226, 63, 76, 234, 36, 253, 54, 206, 39, 53,
+34, 51, 45, 19, 243, 1, 237, 136, 222, 197, 218, 151, 20, 229, 20, 88,
+179, 53, 65, 248, 11, 87, 224, 91, 104, 75, 100, 209, 142, 89, 124,
+170, 153, 124, 44, 221, 58, 96, 251, 50, 33, 42, 193, 117, 143, 245,
+158, 232, 132, 204, 132, 51, 9, 99, 105, 111, 29, 68, 194, 179, 196,
+243, 103, 231, 244, 100, 9, 116, 181, 55, 228, 127, 57, 243, 151, 66,
+148, 127, 158, 249, 231, 153, 85, 242, 194, 204, 39, 160, 30, 166,
+166, 54, 100, 14, 29, 253, 181, 188, 225, 168, 79, 170, 75, 60, 178,
+13, 236, 197, 216, 3, 235, 109, 173, 241, 101, 248, 172, 145, 112,
+187, 245, 120, 26, 250, 119, 134, 152, 121, 88, 163, 144, 41, 208,
+175, 72, 151, 9, 108, 23, 162, 211, 35, 34, 35, 62, 10, 250, 87, 208,
+205, 8, 191, 61, 173, 105, 235, 14, 198, 230, 198, 130, 53, 215, 165,
+163, 69, 15, 27, 171, 184, 12, 104, 127, 21, 164, 247, 253, 226, 140,
+141, 238, 139, 51, 196, 130, 133, 111, 20, 174, 42, 212, 29, 133, 58,
+146, 249, 148, 156, 74, 225, 209, 229, 224, 225, 48, 176, 231, 242,
+248, 136, 204, 8, 168, 206, 143, 5, 200, 125, 113, 143, 176, 125, 177,
+39, 248, 215, 194, 98, 191, 43, 82, 156, 5, 153, 217, 169, 232, 171,
+72, 182, 37, 119, 93, 238, 51, 7, 91, 210, 162, 18, 172, 247, 124, 20,
+241, 122, 208, 74, 16, 129, 151, 192, 171, 206, 231, 163, 32, 215, 29,
+153, 9, 45, 105, 163, 96, 215, 204, 61, 95, 238, 105, 73, 120, 38,
+125, 157, 81, 222, 58, 120, 51, 90, 225, 217, 116, 38, 170, 213, 166,
+230, 47, 133, 195, 16, 127, 40, 170, 163, 105, 153, 186, 163, 79, 49,
+241, 248, 26, 228, 76, 94, 84, 45, 214, 190, 76, 172, 126, 152, 187,
+104, 191, 43, 156, 237, 214, 212, 191, 125, 190, 153, 89, 135, 129,
+97, 75, 238, 91, 192, 18, 203, 120, 234, 44, 205, 133, 92, 204, 133,
+209, 172, 150, 180, 47, 211, 124, 129, 238, 84, 196, 102, 66, 183, 50,
+72, 235, 186, 207, 85, 225, 154, 15, 132, 55, 35, 92, 119, 216, 236,
+184, 16, 241, 47, 242, 44, 10, 24, 89, 25, 77, 184, 16, 97, 229, 247,
+215, 194, 139, 229, 7, 192, 175, 186, 204, 180, 212, 119, 82, 95, 99,
+36, 45, 243, 157, 212, 21, 241, 134, 56, 111, 105, 88, 224, 183, 81,
+79, 236, 142, 72, 77, 131, 215, 94, 75, 173, 5, 91, 234, 183, 42, 160,
+62, 191, 106, 13, 246, 179, 248, 140, 19, 188, 181, 111, 251, 150, 92,
+49, 88, 232, 183, 192, 178, 238, 32, 144, 30, 220, 130, 254, 66, 178,
+180, 239, 128, 44, 35, 193, 55, 97, 205, 158, 145, 232, 83, 232, 217,
+160, 205, 68, 246, 185, 238, 115, 9, 113, 57, 9, 132, 145, 219, 62,
+10, 218, 188, 109, 208, 175, 206, 103, 165, 63, 210, 250, 238, 64, 75,
+18, 73, 112, 221, 81, 27, 248, 218, 238, 60, 105, 24, 236, 2, 180,
+176, 115, 169, 241, 117, 14, 28, 136, 171, 141, 83, 66, 174, 38, 69,
+121, 75, 21, 190, 11, 60, 174, 172, 225, 193, 62, 38, 65, 216, 183,
+213, 59, 48, 9, 246, 98, 73, 208, 161, 245, 91, 177, 127, 188, 186,
+240, 195, 197, 193, 194, 227, 175, 134, 108, 61, 172, 104, 87, 181,
+171, 74, 224, 113, 146, 72, 135, 234, 172, 226, 176, 34, 38, 119, 45,
+48, 223, 201, 250, 46, 45, 35, 237, 111, 192, 232, 187, 135, 8, 161,
+13, 1, 58, 36, 212, 186, 10, 188, 146, 125, 36, 224, 109, 171, 245,
+225, 94, 131, 126, 145, 219, 46, 0, 225, 151, 123, 70, 19, 126, 155,
+254, 76, 250, 119, 9, 43, 34, 158, 136, 86, 248, 58, 120, 94, 121,
+233, 202, 154, 43, 47, 45, 240, 76, 240, 117, 146, 110, 146, 58, 65,
+175, 179, 12, 72, 128, 215, 241, 157, 227, 182, 219, 23, 127, 104, 91,
+181, 198, 1, 222, 85, 248, 58, 5, 38, 194, 123, 200, 247, 225, 226, 4,
+216, 55, 124, 248, 170, 80, 234, 113, 106, 125, 241, 238, 202, 163,
+218, 114, 163, 28, 213, 30, 173, 140, 171, 220, 90, 252, 108, 113,
+137, 98, 109, 46, 196, 23, 35, 45, 105, 207, 28, 140, 81, 28, 82, 128,
+253, 64, 78, 130, 244, 121, 88, 173, 183, 90, 223, 231, 129, 191, 37,
+62, 131, 126, 31, 5, 89, 239, 248, 50, 1, 179, 6, 162, 230, 224, 59,
+209, 175, 197, 43, 182, 242, 61, 175, 194, 158, 24, 186, 189, 237, 2,
+216, 9, 120, 75, 13, 113, 121, 208, 75, 28, 60, 209, 122, 31, 218, 98,
+39, 131, 31, 144, 170, 53, 124, 176, 113, 24, 240, 97, 255, 128, 253,
+161, 111, 223, 214, 95, 248, 90, 39, 236, 46, 142, 171, 44, 215, 222,
+111, 188, 223, 248, 187, 118, 144, 11, 248, 236, 126, 227, 101, 144,
+221, 149, 83, 234, 24, 224, 203, 128, 186, 18, 149, 144, 153, 214,
+146, 181, 37, 247, 172, 106, 74, 125, 210, 85, 75, 197, 163, 159, 240,
+89, 121, 161, 56, 131, 45, 55, 111, 179, 222, 49, 154, 118, 88, 241,
+236, 169, 128, 226, 245, 197, 107, 210, 158, 202, 121, 61, 245, 201,
+248, 186, 40, 129, 244, 228, 86, 71, 97, 176, 208, 50, 192, 16, 247,
+215, 51, 195, 39, 250, 182, 47, 0, 235, 241, 60, 29, 61, 131, 133,
+251, 192, 110, 10, 223, 96, 33, 143, 248, 57, 17, 236, 11, 59, 108,
+91, 158, 240, 138, 192, 1, 34, 162, 67, 17, 87, 140, 116, 47, 183,
+191, 220, 254, 167, 246, 63, 195, 207, 159, 218, 95, 38, 114, 31, 248,
+38, 85, 91, 114, 33, 59, 246, 184, 130, 111, 253, 18, 206, 164, 173,
+205, 61, 172, 232, 80, 105, 61, 24, 50, 96, 66, 225, 48, 34, 240, 50,
+248, 89, 239, 248, 237, 193, 41, 85, 78, 37, 250, 65, 172, 186, 85,
+62, 124, 194, 176, 55, 60, 202, 74, 138, 226, 45, 173, 141, 82, 29,
+229, 182, 126, 92, 158, 23, 23, 236, 27, 12, 84, 251, 80, 182, 42, 64,
+106, 182, 59, 75, 147, 72, 47, 9, 147, 242, 60, 23, 184, 214, 248, 34,
+223, 71, 241, 113, 96, 189, 203, 218, 223, 93, 248, 83, 187, 185, 188,
+12, 150, 188, 172, 245, 40, 62, 164, 248, 46, 109, 4, 50, 227, 20, 72,
+122, 208, 169, 136, 168, 4, 36, 60, 73, 249, 140, 92, 38, 198, 112,
+159, 83, 17, 45, 105, 29, 170, 109, 149, 57, 192, 87, 172, 182, 169,
+41, 42, 95, 125, 70, 119, 226, 157, 163, 43, 82, 235, 246, 26, 246,
+190, 158, 249, 215, 114, 81, 235, 27, 229, 79, 164, 90, 74, 251, 182,
+123, 75, 195, 163, 194, 33, 83, 240, 119, 82, 156, 50, 46, 143, 240,
+37, 73, 19, 132, 60, 143, 4, 224, 223, 183, 181, 37, 103, 119, 101, 0,
+16, 30, 133, 248, 99, 165, 92, 91, 166, 221, 93, 233, 81, 220, 161,
+18, 231, 102, 164, 165, 71, 212, 250, 41, 253, 240, 71, 224, 227, 12,
+246, 89, 179, 103, 52, 11, 163, 79, 11, 49, 215, 15, 210, 231, 129,
+207, 250, 152, 59, 171, 245, 131, 1, 190, 123, 158, 57, 136, 86, 158,
+82, 237, 84, 187, 213, 44, 210, 221, 110, 184, 216, 240, 244, 153, 52,
+168, 125, 141, 39, 158, 42, 188, 216, 32, 106, 29, 46, 48, 164, 224,
+78, 32, 60, 202, 176, 119, 69, 234, 235, 153, 175, 103, 174, 72, 29,
+216, 91, 27, 151, 23, 135, 116, 225, 200, 231, 105, 25, 104, 25, 40,
+137, 138, 85, 76, 169, 158, 45, 158, 82, 163, 116, 168, 80, 39, 136,
+122, 82, 85, 2, 126, 253, 14, 170, 222, 169, 8, 67, 0, 149, 186, 128,
+124, 191, 100, 191, 112, 159, 39, 183, 89, 239, 113, 180, 227, 147,
+12, 166, 117, 6, 107, 33, 18, 227, 179, 253, 174, 253, 30, 145, 65,
+174, 123, 50, 19, 190, 76, 56, 157, 112, 71, 238, 166, 91, 164, 187,
+213, 112, 160, 250, 175, 229, 127, 45, 31, 42, 120, 170, 240, 86, 195,
+111, 90, 69, 221, 186, 130, 21, 153, 203, 83, 107, 247, 214, 238, 125,
+34, 245, 181, 204, 119, 142, 166, 31, 77, 59, 138, 247, 64, 23, 21,
+46, 245, 14, 196, 72, 12, 147, 134, 69, 157, 138, 255, 237, 193, 181,
+88, 157, 21, 49, 138, 45, 185, 248, 44, 38, 23, 243, 51, 6, 179, 54,
+235, 111, 9, 23, 162, 95, 15, 122, 50, 104, 5, 200, 74, 248, 25, 4,
+70, 148, 200, 136, 171, 139, 175, 46, 254, 165, 157, 35, 35, 124, 23,
+190, 139, 163, 221, 47, 237, 126, 201, 220, 245, 123, 12, 250, 109,
+222, 182, 121, 219, 147, 254, 171, 211, 110, 87, 31, 40, 127, 163,
+252, 141, 51, 67, 5, 181, 41, 150, 81, 79, 21, 222, 110, 56, 168, 255,
+77, 171, 170, 224, 137, 212, 164, 56, 103, 169, 165, 180, 118, 239,
+107, 153, 170, 163, 133, 192, 23, 1, 157, 89, 137, 190, 134, 252, 229,
+121, 246, 109, 173, 133, 190, 242, 100, 80, 122, 68, 99, 244, 112,
+244, 200, 238, 225, 232, 70, 144, 167, 247, 172, 217, 243, 102, 194,
+223, 64, 222, 76, 24, 217, 173, 34, 116, 148, 239, 245, 136, 215, 35,
+158, 12, 162, 118, 52, 4, 124, 189, 248, 235, 197, 200, 184, 192, 110,
+1, 50, 1, 221, 85, 91, 122, 207, 7, 171, 106, 93, 195, 189, 234, 253,
+126, 229, 255, 130, 255, 133, 221, 111, 20, 14, 159, 80, 29, 93, 158,
+233, 20, 117, 69, 176, 34, 83, 164, 191, 221, 194, 237, 126, 179, 250,
+245, 163, 79, 130, 79, 223, 57, 26, 12, 229, 52, 41, 238, 53, 232, 28,
+79, 164, 62, 17, 95, 27, 135, 182, 243, 134, 14, 199, 243, 116, 10,
+84, 70, 9, 252, 250, 60, 4, 16, 209, 18, 159, 112, 31, 154, 135, 225,
+62, 74, 191, 186, 128, 39, 8, 145, 33, 0, 99, 14, 5, 137, 144, 211,
+16, 64, 239, 147, 253, 192, 179, 46, 10, 240, 234, 73, 166, 198, 244,
+123, 104, 73, 53, 252, 198, 117, 225, 122, 161, 87, 190, 207, 202,
+109, 239, 6, 253, 43, 226, 102, 180, 235, 30, 29, 233, 90, 78, 82, 30,
+144, 168, 78, 20, 53, 20, 53, 124, 220, 48, 92, 54, 120, 164, 46, 229,
+201, 163, 202, 20, 62, 228, 128, 124, 107, 56, 88, 74, 9, 29, 37, 140,
+208, 121, 67, 255, 168, 17, 58, 251, 105, 61, 65, 187, 199, 73, 156,
+5, 30, 73, 189, 133, 179, 38, 7, 88, 195, 129, 0, 35, 205, 219, 203,
+155, 169, 107, 18, 134, 139, 174, 67, 0, 43, 74, 6, 73, 49, 254, 152,
+75, 189, 223, 11, 208, 243, 154, 162, 109, 118, 248, 237, 113, 219,
+163, 138, 127, 98, 119, 120, 20, 230, 162, 50, 234, 157, 204, 39, 83,
+95, 59, 186, 226, 104, 109, 134, 115, 156, 118, 187, 86, 194, 135,
+218, 226, 13, 89, 108, 25, 8, 125, 88, 138, 158, 13, 3, 65, 62, 75,
+191, 147, 174, 142, 118, 200, 68, 98, 199, 133, 198, 13, 198, 55, 173,
+27, 125, 36, 43, 21, 174, 33, 204, 107, 104, 89, 96, 243, 233, 243,
+60, 233, 129, 247, 249, 126, 245, 32, 117, 126, 249, 32, 41, 126, 41,
+192, 203, 208, 249, 225, 59, 172, 245, 108, 118, 220, 140, 78, 143,
+95, 190, 219, 91, 202, 19, 122, 75, 211, 82, 255, 90, 248, 68, 188,
+115, 96, 223, 246, 190, 237, 124, 97, 213, 154, 15, 57, 11, 60, 195,
+165, 117, 176, 231, 219, 4, 116, 97, 12, 27, 126, 15, 210, 7, 124, 27,
+93, 174, 218, 58, 50, 81, 125, 213, 150, 196, 147, 237, 47, 9, 99,
+136, 11, 141, 119, 20, 140, 47, 62, 120, 178, 207, 83, 224, 35, 240,
+177, 242, 194, 245, 56, 194, 187, 249, 192, 86, 111, 100, 147, 248, 8,
+225, 71, 10, 194, 90, 240, 87, 219, 94, 0, 198, 119, 113, 191, 19,
+225, 3, 39, 70, 253, 214, 112, 233, 107, 241, 171, 229, 141, 71, 235,
+226, 250, 182, 98, 231, 173, 122, 201, 1, 114, 64, 25, 5, 39, 142,
+168, 48, 168, 121, 137, 82, 202, 231, 77, 248, 250, 132, 142, 46, 64,
+67, 102, 115, 36, 22, 68, 74, 36, 132, 223, 36, 246, 153, 12, 176,
+133, 248, 119, 9, 97, 248, 250, 60, 249, 46, 244, 29, 142, 151, 16,
+152, 56, 94, 11, 215, 99, 228, 161, 124, 3, 118, 95, 184, 126, 161,
+87, 191, 7, 246, 229, 126, 15, 176, 40, 137, 18, 165, 223, 138, 221,
+175, 197, 231, 73, 157, 2, 66, 124, 29, 133, 39, 125, 5, 81, 11, 165,
+39, 183, 239, 219, 186, 111, 171, 150, 248, 213, 27, 186, 153, 183,
+148, 116, 141, 192, 112, 160, 195, 111, 136, 20, 66, 73, 0, 7, 108,
+161, 245, 196, 62, 5, 49, 8, 63, 33, 174, 142, 46, 104, 199, 207, 204,
+132, 218, 20, 249, 160, 83, 160, 119, 61, 28, 93, 62, 91, 188, 215,
+250, 179, 197, 27, 137, 149, 29, 141, 182, 175, 2, 161, 21, 103, 129,
+29, 205, 233, 125, 176, 38, 103, 136, 228, 112, 63, 131, 52, 2, 118,
+240, 137, 210, 21, 241, 46, 210, 237, 182, 31, 218, 242, 161, 227, 58,
+122, 46, 240, 252, 250, 165, 175, 95, 173, 122, 9, 247, 45, 122, 223,
+207, 165, 200, 231, 77, 248, 44, 3, 20, 194, 126, 225, 11, 65, 86, 94,
+253, 160, 1, 227, 191, 223, 179, 31, 226, 138, 239, 178, 192, 238,
+107, 98, 49, 164, 68, 10, 160, 35, 246, 221, 7, 124, 208, 59, 124,
+180, 192, 71, 35, 129, 126, 22, 215, 112, 130, 8, 126, 158, 142, 112,
+36, 209, 193, 119, 129, 152, 5, 58, 101, 128, 50, 160, 54, 224, 181,
+221, 203, 119, 15, 196, 165, 197, 91, 203, 95, 200, 76, 220, 234, 232,
+201, 247, 116, 244, 184, 250, 210, 47, 61, 55, 250, 238, 247, 237,
+223, 170, 223, 186, 44, 224, 58, 116, 13, 244, 44, 72, 96, 159, 175,
+222, 151, 239, 177, 10, 162, 195, 10, 52, 224, 188, 232, 59, 103, 31,
+140, 252, 96, 215, 16, 87, 106, 73, 90, 203, 248, 228, 94, 65, 248,
+208, 191, 33, 36, 159, 246, 185, 126, 238, 17, 130, 17, 65, 34, 128,
+90, 29, 249, 170, 22, 227, 90, 176, 155, 96, 70, 37, 147, 186, 132,
+245, 242, 137, 160, 215, 192, 199, 13, 153, 141, 153, 255, 58, 250,
+238, 209, 95, 103, 214, 239, 77, 217, 235, 18, 231, 18, 197, 145, 38,
+3, 87, 146, 20, 191, 159, 241, 14, 116, 14, 176, 12, 240, 6, 186, 96,
+207, 26, 223, 171, 156, 95, 111, 243, 75, 88, 25, 228, 13, 92, 222,
+62, 168, 169, 54, 32, 220, 207, 219, 7, 239, 157, 125, 44, 189, 106,
+60, 200, 60, 30, 172, 244, 121, 226, 123, 90, 15, 218, 119, 173, 188,
+190, 129, 103, 27, 73, 212, 82, 31, 19, 123, 91, 47, 176, 163, 239,
+66, 69, 34, 182, 67, 186, 90, 144, 100, 191, 39, 34, 34, 226, 117,
+153, 186, 204, 215, 161, 67, 8, 162, 36, 176, 155, 193, 170, 226, 28,
+24, 6, 251, 153, 215, 226, 151, 199, 131, 103, 209, 118, 1, 206, 1,
+193, 30, 232, 255, 95, 186, 252, 49, 226, 86, 180, 95, 130, 179, 15,
+206, 45, 240, 81, 6, 212, 17, 77, 3, 228, 49, 201, 15, 115, 181, 207,
+195, 18, 102, 234, 243, 36, 253, 223, 211, 153, 248, 23, 62, 77, 252,
+198, 241, 194, 168, 221, 199, 88, 27, 125, 253, 245, 98, 71, 59, 180,
+115, 184, 79, 50, 201, 139, 90, 164, 11, 68, 62, 165, 95, 18, 212,
+205, 21, 209, 186, 204, 85, 57, 239, 164, 26, 192, 98, 206, 208, 249,
+157, 192, 155, 200, 247, 4, 88, 54, 73, 138, 108, 150, 240, 19, 236,
+177, 192, 53, 88, 248, 11, 143, 141, 174, 95, 68, 223, 138, 246, 79,
+248, 103, 196, 62, 215, 26, 143, 112, 159, 90, 210, 51, 158, 32, 98,
+8, 84, 18, 91, 146, 189, 29, 248, 20, 197, 18, 158, 91, 2, 171, 22,
+152, 97, 53, 100, 39, 195, 86, 73, 136, 10, 240, 121, 48, 84, 33, 214,
+167, 117, 164, 7, 82, 93, 200, 231, 237, 83, 231, 23, 149, 166, 138,
+255, 139, 252, 47, 242, 161, 76, 56, 181, 65, 205, 134, 115, 8, 243,
+173, 65, 30, 68, 222, 38, 98, 61, 252, 102, 26, 118, 205, 194, 227,
+156, 111, 60, 46, 2, 223, 173, 232, 104, 216, 1, 40, 60, 4, 132, 239,
+181, 136, 229, 65, 212, 35, 176, 94, 88, 177, 37, 67, 4, 20, 158, 150,
+196, 142, 40, 216, 61, 146, 252, 192, 158, 36, 34, 189, 225, 83, 125,
+164, 6, 224, 43, 225, 164, 55, 26, 2, 73, 220, 5, 210, 142, 72, 180,
+249, 60, 147, 251, 207, 221, 249, 129, 171, 115, 108, 42, 154, 206,
+60, 5, 167, 242, 180, 204, 8, 56, 197, 249, 192, 73, 61, 17, 123, 90,
+128, 119, 64, 159, 175, 131, 235, 113, 91, 56, 45, 193, 174, 250, 67,
+219, 6, 63, 155, 61, 192, 183, 251, 214, 238, 214, 172, 95, 109, 211,
+123, 66, 172, 4, 62, 17, 52, 0, 150, 203, 67, 111, 248, 133, 145, 153,
+9, 149, 39, 141, 39, 140, 63, 1, 84, 60, 1, 118, 54, 63, 18, 19, 76,
+199, 243, 198, 158, 231, 195, 129, 119, 105, 247, 198, 72, 161, 132,
+192, 10, 207, 188, 125, 190, 204, 122, 70, 145, 31, 40, 244, 27, 148,
+254, 69, 254, 197, 153, 161, 19, 239, 192, 110, 111, 57, 68, 29, 210,
+57, 145, 200, 83, 8, 127, 129, 223, 153, 175, 113, 240, 224, 193, 137,
+233, 107, 206, 63, 35, 220, 160, 55, 250, 39, 68, 39, 168, 211, 162,
+19, 44, 189, 188, 125, 242, 252, 242, 136, 221, 216, 28, 97, 127, 211,
+236, 102, 163, 42, 153, 249, 13, 251, 10, 194, 162, 132, 216, 79, 34,
+34, 32, 157, 217, 27, 98, 19, 239, 160, 46, 147, 72, 86, 250, 57, 123,
+141, 236, 158, 170, 248, 40, 250, 134, 116, 161, 31, 39, 32, 45, 190,
+16, 200, 106, 233, 46, 57, 202, 146, 84, 20, 75, 191, 96, 79, 242,
+173, 190, 199, 2, 15, 60, 209, 29, 231, 236, 247, 88, 180, 199, 6,
+248, 252, 18, 252, 19, 178, 210, 254, 51, 247, 76, 90, 100, 4, 146,
+133, 177, 81, 71, 236, 69, 103, 66, 79, 51, 108, 126, 236, 238, 69,
+233, 7, 213, 215, 3, 173, 165, 36, 209, 143, 175, 122, 99, 164, 122,
+224, 74, 157, 137, 223, 177, 99, 27, 96, 167, 248, 183, 132, 0, 237,
+58, 197, 133, 221, 245, 129, 28, 228, 75, 93, 177, 27, 242, 3, 242,
+212, 25, 236, 102, 9, 94, 85, 8, 249, 112, 74, 66, 175, 2, 31, 84,
+237, 5, 30, 31, 114, 26, 2, 220, 246, 44, 218, 131, 22, 140, 78, 59,
+147, 182, 46, 247, 45, 133, 76, 241, 76, 238, 133, 232, 112, 159, 26,
+15, 156, 3, 197, 27, 162, 12, 179, 90, 233, 199, 210, 97, 207, 197,
+29, 1, 210, 92, 181, 13, 118, 65, 27, 162, 165, 232, 26, 156, 33, 14,
+21, 30, 53, 30, 184, 62, 45, 188, 243, 244, 158, 118, 213, 229, 198,
+79, 251, 95, 238, 45, 81, 143, 230, 252, 11, 248, 132, 1, 253, 190,
+233, 169, 233, 169, 79, 68, 135, 67, 143, 176, 244, 235, 243, 197,
+111, 50, 18, 132, 120, 110, 115, 48, 202, 149, 151, 174, 173, 185, 8,
+153, 75, 253, 123, 38, 109, 44, 235, 172, 234, 45, 197, 37, 245, 30,
+109, 69, 227, 146, 74, 215, 132, 112, 159, 4, 168, 175, 125, 30, 222,
+76, 44, 213, 145, 24, 75, 242, 163, 119, 236, 46, 255, 51, 235, 171,
+139, 131, 93, 106, 60, 104, 102, 179, 53, 19, 179, 4, 51, 170, 49,
+250, 104, 227, 195, 137, 135, 15, 191, 26, 249, 93, 111, 135, 58, 86,
+117, 38, 107, 115, 116, 125, 96, 74, 160, 86, 248, 14, 240, 189, 19,
+255, 68, 180, 146, 236, 146, 107, 240, 252, 38, 228, 11, 29, 200, 73,
+147, 242, 29, 95, 243, 184, 79, 102, 26, 70, 30, 252, 16, 186, 245,
+149, 151, 212, 229, 141, 187, 129, 239, 229, 222, 87, 122, 119, 107,
+93, 19, 250, 97, 103, 229, 237, 83, 75, 249, 24, 11, 42, 153, 110, 96,
+32, 175, 124, 104, 253, 33, 116, 11, 236, 36, 53, 30, 40, 36, 187, 33,
+131, 177, 142, 239, 84, 244, 78, 60, 156, 248, 83, 255, 179, 197, 107,
+115, 75, 84, 104, 189, 168, 52, 215, 180, 119, 163, 145, 239, 245,
+120, 228, 123, 114, 119, 173, 20, 107, 30, 126, 151, 182, 15, 206,
+189, 84, 248, 66, 71, 33, 116, 229, 53, 95, 68, 103, 17, 190, 232, 4,
+164, 91, 82, 185, 190, 18, 25, 115, 26, 239, 183, 189, 220, 139, 242,
+74, 239, 6, 176, 163, 210, 15, 227, 135, 221, 49, 155, 246, 208, 88,
+51, 234, 8, 31, 118, 91, 7, 166, 219, 6, 187, 98, 229, 174, 241, 80,
+250, 197, 105, 31, 78, 220, 111, 59, 218, 8, 39, 45, 245, 203, 189,
+235, 43, 51, 179, 162, 225, 84, 63, 154, 115, 51, 190, 32, 112, 161,
+159, 33, 42, 61, 245, 181, 120, 18, 131, 100, 31, 85, 67, 78, 230,
+120, 10, 78, 240, 69, 190, 170, 151, 190, 17, 158, 73, 139, 78, 203,
+74, 195, 200, 219, 165, 88, 95, 185, 173, 114, 155, 22, 25, 241, 119,
+121, 227, 131, 182, 231, 123, 159, 111, 127, 30, 40, 151, 84, 250, 37,
+60, 185, 141, 241, 49, 83, 111, 87, 16, 121, 50, 168, 46, 224, 51,
+220, 175, 216, 226, 94, 130, 236, 86, 160, 58, 211, 58, 143, 126, 253,
+160, 255, 79, 189, 207, 247, 254, 185, 255, 171, 145, 63, 247, 31, 86,
+141, 229, 108, 81, 108, 81, 32, 223, 11, 209, 210, 128, 39, 119, 67,
+134, 0, 95, 184, 180, 102, 43, 116, 92, 240, 113, 223, 86, 237, 214,
+26, 56, 157, 239, 99, 248, 254, 24, 221, 146, 21, 13, 113, 215, 154,
+181, 46, 87, 3, 214, 219, 166, 205, 209, 78, 169, 151, 128, 253, 186,
+219, 202, 27, 43, 26, 241, 231, 126, 219, 243, 237, 47, 3, 231, 146,
+74, 235, 61, 117, 126, 44, 35, 218, 143, 37, 68, 54, 19, 31, 223, 133,
+158, 134, 15, 169, 144, 142, 202, 159, 33, 51, 158, 239, 61, 172, 250,
+50, 171, 67, 221, 161, 110, 201, 185, 185, 251, 95, 187, 127, 21, 177,
+98, 55, 126, 175, 246, 228, 238, 58, 114, 202, 13, 151, 10, 164, 148,
+82, 11, 124, 33, 176, 107, 221, 47, 28, 203, 25, 203, 57, 147, 149, 5,
+145, 7, 39, 95, 245, 250, 202, 61, 96, 181, 245, 132, 174, 27, 98, 16,
+104, 129, 16, 25, 43, 224, 149, 231, 219, 239, 183, 157, 85, 157, 138,
+198, 248, 67, 194, 39, 183, 161, 127, 7, 3, 6, 3, 28, 201, 190, 107,
+129, 29, 18, 82, 58, 204, 138, 79, 251, 255, 220, 251, 103, 176, 61,
+141, 20, 124, 60, 171, 106, 201, 233, 80, 111, 81, 172, 83, 156, 201,
+202, 204, 138, 140, 126, 114, 55, 126, 27, 99, 136, 83, 70, 41, 165,
+240, 3, 2, 251, 42, 169, 101, 96, 205, 86, 252, 158, 99, 129, 240,
+143, 187, 207, 170, 90, 179, 90, 179, 254, 51, 247, 63, 115, 215, 229,
+78, 145, 172, 173, 0, 174, 37, 149, 83, 234, 179, 170, 179, 106, 244,
+113, 55, 250, 24, 180, 87, 52, 34, 43, 90, 245, 153, 220, 193, 0, 82,
+143, 137, 96, 52, 134, 224, 105, 28, 118, 99, 193, 46, 33, 36, 219,
+241, 221, 245, 149, 127, 238, 237, 6, 219, 223, 135, 17, 248, 8, 94,
+128, 248, 59, 172, 138, 85, 109, 81, 108, 211, 62, 91, 233, 154, 118,
+67, 90, 23, 245, 14, 126, 91, 132, 124, 81, 134, 56, 20, 216, 207, 0,
+159, 118, 235, 73, 16, 151, 64, 25, 120, 242, 172, 74, 166, 210, 168,
+46, 169, 55, 84, 34, 93, 14, 200, 54, 237, 88, 214, 88, 150, 76, 149,
+211, 136, 100, 40, 191, 3, 65, 198, 28, 242, 62, 70, 192, 133, 104, 9,
+233, 104, 180, 254, 209, 125, 55, 249, 86, 205, 139, 158, 157, 26,
+163, 115, 96, 109, 219, 42, 203, 153, 56, 185, 223, 214, 13, 163, 47,
+169, 159, 201, 69, 15, 191, 220, 59, 85, 97, 147, 240, 171, 136, 58,
+200, 143, 21, 192, 151, 28, 85, 23, 7, 113, 24, 255, 36, 244, 146,
+112, 169, 85, 160, 85, 160, 64, 90, 47, 189, 181, 59, 51, 45, 22, 214,
+130, 146, 3, 158, 196, 104, 219, 166, 221, 13, 50, 150, 99, 162, 163,
+107, 39, 124, 61, 247, 219, 118, 55, 226, 167, 215, 87, 110, 168, 252,
+50, 139, 253, 254, 64, 233, 119, 169, 241, 82, 227, 84, 243, 76, 153,
+158, 37, 207, 181, 239, 208, 74, 212, 18, 181, 160, 200, 91, 93, 35,
+143, 207, 57, 145, 19, 47, 219, 43, 139, 151, 157, 200, 9, 204, 10,
+60, 0, 63, 32, 241, 178, 248, 156, 234, 99, 150, 74, 39, 85, 245, 49,
+189, 252, 196, 177, 19, 242, 106, 121, 160, 204, 235, 64, 117, 142,
+21, 188, 18, 152, 85, 115, 236, 68, 78, 132, 234, 185, 246, 153, 154,
+77, 115, 94, 162, 210, 72, 165, 3, 228, 44, 74, 29, 190, 250, 227,
+116, 211, 240, 137, 52, 53, 225, 83, 123, 23, 57, 169, 156, 139, 44,
+85, 213, 64, 9, 68, 32, 132, 45, 7, 249, 128, 58, 199, 82, 105, 169,
+178, 84, 57, 21, 85, 23, 58, 21, 89, 22, 201, 143, 197, 203, 244, 242,
+154, 99, 213, 199, 226, 179, 228, 178, 234, 156, 133, 10, 208, 214,
+246, 115, 249, 40, 225, 79, 211, 77, 55, 31, 170, 115, 86, 10, 138,
+82, 52, 78, 69, 2, 117, 126, 69, 114, 197, 99, 170, 107, 121, 250, 60,
+61, 216, 7, 201, 78, 28, 139, 207, 145, 31, 179, 84, 233, 243, 228,
+199, 156, 84, 248, 25, 111, 181, 183, 38, 249, 188, 183, 166, 154,
+124, 74, 158, 19, 120, 32, 62, 11, 8, 115, 250, 143, 93, 106, 94, 210,
+254, 111, 241, 213, 253, 8, 95, 219, 146, 118, 208, 6, 143, 59, 235,
+56, 74, 239, 162, 100, 141, 64, 157, 172, 169, 63, 47, 209, 192, 252,
+106, 137, 198, 73, 117, 226, 24, 218, 238, 132, 92, 126, 204, 25, 168,
+44, 85, 143, 17, 145, 104, 194, 129, 46, 188, 34, 188, 226, 177, 34,
+96, 206, 137, 207, 242, 76, 11, 60, 16, 68, 248, 58, 26, 31, 197, 55,
+101, 198, 215, 241, 72, 251, 205, 166, 67, 121, 14, 248, 250, 228,
+225, 154, 95, 55, 22, 156, 79, 6, 235, 57, 169, 5, 64, 224, 173, 118,
+42, 250, 90, 190, 55, 167, 90, 126, 66, 174, 207, 3, 191, 23, 233, 11,
+175, 229, 125, 45, 215, 23, 10, 52, 41, 231, 235, 107, 235, 107, 195,
+43, 208, 130, 24, 161, 94, 105, 158, 105, 94, 105, 114, 153, 149, 226,
+210, 79, 241, 53, 207, 182, 223, 35, 172, 215, 102, 226, 219, 208,
+229, 86, 165, 207, 27, 170, 205, 232, 249, 117, 99, 114, 69, 56, 120,
+217, 91, 77, 249, 144, 16, 124, 136, 177, 166, 210, 23, 86, 231, 125,
+157, 247, 217, 177, 234, 188, 240, 138, 250, 218, 161, 139, 55, 116,
+41, 53, 78, 234, 19, 242, 192, 44, 187, 36, 187, 36, 228, 11, 60, 160,
+205, 57, 59, 139, 239, 81, 30, 254, 9, 62, 35, 27, 229, 179, 169, 188,
+38, 95, 221, 156, 209, 243, 102, 103, 67, 173, 179, 250, 49, 224, 114,
+46, 66, 186, 199, 138, 174, 1, 155, 183, 198, 91, 115, 13, 232, 78,
+228, 85, 23, 66, 214, 22, 134, 87, 20, 212, 52, 232, 234, 107, 83,
+206, 11, 52, 215, 242, 24, 62, 32, 244, 76, 83, 200, 206, 54, 62, 58,
+131, 205, 9, 255, 29, 190, 223, 119, 45, 34, 124, 190, 157, 127, 237,
+89, 221, 150, 114, 30, 169, 170, 243, 48, 210, 174, 21, 62, 6, 116, 2,
+141, 4, 34, 237, 132, 252, 68, 222, 181, 194, 19, 121, 143, 21, 133,
+87, 164, 212, 228, 215, 164, 156, 79, 62, 15, 159, 85, 109, 207, 178,
+75, 3, 194, 4, 164, 84, 200, 152, 252, 248, 201, 28, 54, 197, 223, 60,
+124, 109, 179, 249, 192, 191, 242, 167, 26, 223, 108, 91, 221, 246,
+70, 219, 83, 205, 249, 231, 55, 65, 92, 161, 92, 43, 180, 84, 99, 30,
+96, 54, 232, 191, 248, 186, 240, 26, 252, 32, 159, 4, 94, 73, 62, 47,
+57, 47, 169, 176, 44, 10, 148, 121, 2, 159, 45, 240, 217, 38, 125,
+147, 131, 154, 81, 191, 57, 225, 163, 248, 144, 174, 228, 103, 217,
+239, 150, 166, 90, 62, 84, 187, 186, 109, 85, 243, 170, 230, 167, 154,
+135, 116, 245, 53, 225, 154, 234, 194, 175, 193, 159, 78, 234, 112,
+202, 2, 185, 224, 164, 126, 12, 125, 15, 181, 5, 95, 3, 239, 86, 56,
+107, 30, 43, 218, 155, 227, 153, 102, 155, 100, 145, 96, 151, 96, 145,
+240, 154, 98, 67, 23, 91, 21, 76, 132, 243, 121, 184, 163, 177, 4,
+216, 14, 213, 29, 172, 235, 64, 222, 57, 22, 156, 25, 127, 59, 181,
+125, 121, 13, 53, 171, 129, 141, 242, 13, 233, 26, 106, 161, 10, 22,
+129, 181, 212, 97, 200, 82, 131, 140, 152, 175, 2, 13, 230, 182, 164,
+2, 108, 119, 222, 89, 163, 255, 226, 90, 158, 25, 223, 63, 62, 82,
+253, 190, 139, 213, 61, 63, 33, 229, 59, 75, 216, 118, 106, 69, 90,
+255, 170, 67, 240, 172, 164, 238, 44, 16, 63, 202, 142, 207, 181, 119,
+52, 115, 84, 201, 154, 167, 154, 159, 106, 91, 5, 254, 125, 170, 25,
+45, 121, 3, 226, 223, 89, 141, 254, 205, 175, 41, 168, 109, 168, 197,
+124, 64, 59, 162, 119, 209, 231, 2, 141, 37, 84, 156, 106, 249, 94,
+240, 175, 45, 216, 14, 101, 81, 233, 44, 190, 182, 153, 124, 44, 29,
+178, 249, 87, 185, 85, 217, 84, 90, 87, 114, 171, 252, 171, 68, 85,
+59, 181, 37, 117, 72, 200, 86, 198, 217, 61, 217, 5, 186, 218, 234,
+230, 213, 157, 171, 219, 80, 222, 232, 124, 163, 243, 169, 230, 6, 36,
+170, 168, 175, 185, 81, 59, 164, 251, 117, 243, 13, 93, 126, 13, 195,
+71, 98, 15, 172, 87, 168, 207, 99, 248, 146, 144, 208, 46, 41, 70,
+139, 254, 157, 33, 102, 124, 151, 154, 59, 154, 209, 175, 148, 206,
+166, 114, 68, 163, 83, 171, 212, 141, 69, 23, 138, 110, 170, 221, 42,
+119, 106, 193, 142, 196, 174, 135, 240, 89, 93, 187, 177, 138, 35,
+109, 26, 116, 130, 55, 59, 63, 238, 123, 179, 147, 88, 16, 24, 159,
+106, 27, 210, 65, 29, 169, 69, 123, 162, 52, 232, 82, 192, 195, 206,
+96, 207, 148, 243, 5, 181, 5, 80, 157, 31, 83, 65, 14, 65, 15, 196,
+252, 5, 235, 253, 67, 43, 67, 10, 96, 152, 85, 107, 153, 87, 129, 172,
+184, 241, 80, 227, 193, 186, 29, 90, 183, 42, 235, 202, 70, 117, 97,
+81, 26, 8, 231, 56, 231, 184, 84, 209, 88, 100, 83, 234, 95, 181, 67,
+187, 3, 200, 253, 43, 253, 43, 119, 84, 29, 212, 30, 50, 74, 73, 221,
+77, 77, 205, 177, 191, 118, 158, 54, 124, 124, 101, 117, 219, 176,
+110, 136, 136, 14, 162, 112, 72, 199, 198, 99, 1, 228, 12, 86, 26,
+100, 198, 234, 135, 185, 139, 246, 195, 250, 71, 253, 219, 151, 231,
+15, 171, 46, 6, 41, 33, 98, 90, 127, 9, 177, 26, 144, 1, 155, 191,
+214, 149, 208, 169, 8, 93, 90, 81, 159, 172, 6, 196, 7, 8, 111, 170,
+109, 74, 109, 74, 71, 212, 23, 200, 51, 55, 96, 52, 201, 136, 218, 74,
+185, 166, 237, 111, 80, 161, 129, 167, 182, 161, 166, 176, 166, 128,
+145, 134, 218, 194, 154, 212, 243, 82, 176, 156, 115, 81, 184, 38, 5,
+249, 106, 144, 86, 2, 175, 232, 11, 107, 160, 62, 219, 66, 229, 179,
+248, 135, 87, 150, 188, 176, 239, 139, 226, 70, 53, 88, 40, 11, 88,
+14, 213, 1, 105, 93, 49, 250, 11, 201, 180, 209, 64, 230, 87, 133,
+108, 35, 154, 70, 244, 108, 17, 21, 160, 203, 82, 100, 105, 129, 80,
+165, 106, 44, 82, 169, 34, 148, 82, 69, 154, 18, 105, 93, 75, 209,
+146, 68, 170, 108, 74, 37, 69, 5, 21, 2, 53, 100, 132, 170, 15, 246,
+36, 250, 60, 171, 34, 200, 210, 10, 33, 88, 76, 160, 113, 86, 215,
+228, 193, 78, 6, 118, 88, 242, 99, 213, 242, 190, 66, 220, 45, 160,
+96, 79, 166, 246, 243, 76, 147, 203, 61, 143, 41, 10, 219, 155, 39,
+218, 38, 218, 240, 113, 146, 145, 142, 230, 246, 230, 98, 194, 28, 93,
+23, 173, 245, 3, 235, 129, 84, 18, 33, 180, 10, 160, 67, 194, 62, 25,
+231, 184, 80, 225, 2, 222, 182, 202, 229, 28, 143, 80, 170, 84, 35,
+132, 112, 71, 85, 150, 246, 160, 54, 186, 42, 85, 157, 162, 1, 138,
+99, 129, 192, 17, 152, 19, 15, 125, 214, 82, 237, 164, 182, 44, 194,
+222, 91, 13, 175, 227, 59, 158, 7, 236, 210, 60, 15, 192, 174, 11,
+222, 173, 201, 179, 44, 242, 134, 247, 144, 207, 51, 173, 26, 246, 13,
+158, 199, 92, 212, 207, 182, 47, 233, 218, 208, 187, 237, 234, 219,
+70, 217, 118, 117, 91, 239, 250, 94, 143, 174, 103, 187, 218, 155, 15,
+54, 162, 127, 169, 236, 208, 30, 172, 43, 110, 110, 107, 174, 33, 254,
+213, 130, 244, 229, 88, 229, 90, 229, 246, 229, 224, 111, 23, 69, 4,
+216, 208, 186, 20, 235, 79, 73, 35, 68, 77, 93, 161, 166, 224, 124,
+77, 161, 252, 88, 16, 236, 137, 161, 219, 31, 64, 6, 103, 181, 20,
+172, 71, 232, 128, 26, 233, 160, 139, 165, 161, 4, 202, 228, 96, 99,
+220, 201, 98, 255, 128, 253, 97, 94, 95, 225, 222, 60, 235, 170, 13,
+93, 235, 123, 223, 190, 250, 126, 255, 251, 253, 185, 131, 32, 253,
+239, 19, 217, 3, 178, 161, 119, 170, 179, 24, 248, 252, 160, 174, 184,
+85, 1, 31, 248, 191, 163, 109, 170, 19, 184, 168, 228, 244, 19, 62,
+171, 227, 84, 132, 224, 111, 235, 210, 29, 218, 246, 230, 103, 219,
+215, 119, 45, 233, 178, 214, 62, 213, 72, 34, 77, 195, 81, 107, 11,
+19, 228, 114, 185, 165, 74, 90, 177, 166, 115, 248, 98, 223, 23, 104,
+189, 19, 199, 18, 142, 201, 229, 53, 121, 40, 114, 216, 223, 163, 159,
+189, 193, 190, 176, 195, 62, 0, 187, 24, 121, 60, 68, 196, 100, 243,
+250, 46, 164, 251, 100, 240, 147, 193, 202, 193, 175, 224, 167, 114,
+240, 19, 34, 239, 3, 223, 100, 91, 113, 35, 100, 71, 165, 13, 248,
+214, 173, 74, 164, 61, 216, 216, 222, 60, 217, 134, 246, 34, 100, 12,
+215, 66, 70, 32, 171, 149, 214, 165, 89, 117, 83, 109, 111, 247, 162,
+31, 212, 144, 29, 195, 23, 165, 231, 57, 26, 43, 53, 138, 51, 236, 80,
+117, 186, 76, 131, 111, 143, 160, 66, 158, 39, 207, 163, 100, 144, 56,
+32, 250, 47, 172, 212, 2, 210, 75, 156, 213, 39, 112, 143, 159, 135,
+124, 141, 231, 215, 131, 245, 246, 92, 205, 237, 175, 28, 52, 151, 79,
+192, 146, 123, 174, 62, 219, 213, 214, 28, 173, 197, 154, 7, 41, 164,
+214, 21, 53, 170, 221, 170, 144, 80, 75, 249, 140, 92, 38, 70, 142,
+162, 81, 189, 67, 59, 217, 182, 129, 240, 181, 117, 126, 124, 197,
+183, 231, 233, 206, 161, 139, 133, 186, 212, 26, 233, 121, 233, 249,
+194, 218, 53, 61, 103, 12, 171, 123, 82, 106, 44, 213, 125, 95, 56,
+171, 57, 26, 14, 240, 224, 111, 65, 133, 176, 130, 242, 9, 212, 176,
+127, 205, 169, 70, 254, 194, 29, 141, 27, 122, 145, 112, 27, 196, 31,
+43, 24, 127, 27, 122, 159, 237, 154, 108, 83, 55, 250, 105, 117, 106,
+137, 82, 168, 196, 31, 142, 194, 10, 237, 83, 185, 163, 14, 163, 143,
+218, 176, 63, 167, 207, 40, 253, 196, 166, 17, 42, 215, 202, 131, 117,
+104, 229, 169, 54, 117, 103, 198, 149, 140, 190, 168, 190, 191, 245,
+61, 221, 217, 0, 181, 111, 248, 226, 83, 109, 127, 235, 59, 99, 24,
+110, 149, 214, 224, 78, 128, 163, 145, 158, 79, 173, 41, 172, 45, 172,
+77, 173, 193, 157, 139, 0, 9, 213, 28, 228, 59, 102, 9, 103, 37, 23,
+77, 73, 243, 84, 219, 179, 93, 83, 157, 40, 152, 185, 83, 40, 240,
+172, 29, 252, 26, 13, 121, 219, 168, 150, 170, 88, 241, 33, 140, 169,
+42, 235, 202, 132, 3, 114, 146, 193, 180, 206, 208, 108, 169, 145,
+225, 51, 173, 172, 63, 71, 85, 100, 3, 213, 197, 191, 202, 175, 42,
+186, 57, 163, 47, 3, 232, 222, 188, 178, 166, 103, 77, 207, 80, 43,
+210, 101, 26, 206, 12, 15, 181, 166, 214, 166, 32, 17, 236, 18, 10,
+106, 11, 177, 106, 235, 240, 30, 173, 199, 129, 154, 136, 145, 8, 86,
+213, 52, 158, 135, 170, 135, 213, 185, 185, 24, 235, 9, 169, 211, 152,
+159, 197, 152, 181, 117, 174, 85, 35, 154, 194, 162, 84, 34, 105, 240,
+19, 193, 112, 170, 212, 65, 105, 65, 105, 9, 7, 88, 145, 103, 201,
+179, 204, 239, 250, 115, 176, 210, 168, 84, 169, 202, 167, 181, 81,
+87, 222, 236, 89, 221, 179, 186, 115, 168, 85, 82, 99, 169, 121, 170,
+45, 170, 175, 245, 118, 166, 65, 215, 154, 2, 246, 179, 130, 157, 130,
+4, 250, 26, 210, 53, 232, 10, 160, 51, 11, 209, 215, 144, 191, 39,
+142, 245, 21, 74, 160, 74, 166, 22, 233, 212, 195, 154, 97, 205, 72,
+5, 62, 14, 107, 158, 134, 222, 191, 6, 107, 93, 213, 154, 170, 145,
+10, 157, 145, 46, 181, 168, 80, 93, 168, 78, 45, 98, 45, 137, 124, 40,
+241, 7, 226, 145, 9, 232, 130, 14, 208, 123, 57, 88, 21, 171, 98, 132,
+50, 77, 153, 174, 28, 169, 128, 206, 118, 81, 167, 75, 169, 181, 212,
+4, 202, 83, 107, 207, 220, 142, 50, 100, 14, 175, 185, 2, 209, 8, 62,
+45, 212, 201, 97, 191, 42, 168, 128, 206, 91, 147, 2, 123, 103, 73, 5,
+218, 206, 25, 58, 28, 122, 87, 168, 225, 40, 251, 114, 160, 147, 42,
+92, 20, 24, 89, 40, 28, 133, 80, 41, 85, 165, 16, 34, 169, 10, 99, 14,
+5, 137, 232, 43, 66, 230, 149, 26, 234, 91, 153, 150, 169, 49, 16,
+133, 164, 26, 246, 203, 22, 230, 186, 28, 247, 81, 164, 169, 78, 21,
+93, 80, 223, 212, 216, 84, 14, 145, 174, 101, 169, 134, 115, 70, 158,
+238, 162, 111, 31, 202, 112, 119, 132, 78, 90, 147, 170, 19, 214, 96,
+14, 87, 23, 114, 192, 82, 66, 210, 81, 144, 14, 248, 10, 245, 114, 43,
+101, 223, 49, 172, 174, 90, 156, 133, 60, 226, 239, 254, 99, 11, 129,
+149, 67, 24, 56, 10, 231, 227, 206, 76, 253, 112, 97, 184, 232, 58,
+112, 69, 66, 16, 31, 227, 143, 185, 68, 40, 211, 161, 231, 1, 27, 116,
+227, 69, 149, 186, 243, 41, 21, 28, 13, 230, 162, 80, 131, 89, 80,
+160, 75, 213, 73, 106, 173, 42, 250, 190, 232, 59, 131, 245, 197, 25,
+178, 216, 178, 8, 51, 152, 165, 67, 62, 75, 165, 86, 150, 112, 0, 153,
+72, 236, 100, 209, 184, 193, 248, 166, 117, 131, 230, 35, 70, 60, 125,
+13, 153, 128, 77, 1, 107, 202, 193, 123, 31, 101, 4, 136, 84, 233, 67,
+5, 120, 25, 58, 37, 190, 99, 180, 94, 233, 77, 13, 242, 65, 61, 131,
+104, 111, 168, 89, 3, 231, 36, 171, 34, 32, 251, 66, 14, 59, 40, 207,
+172, 248, 99, 28, 181, 20, 246, 124, 78, 102, 108, 24, 125, 125, 192,
+167, 200, 10, 58, 144, 192, 68, 53, 141, 157, 32, 134, 81, 145, 101,
+138, 119, 140, 47, 57, 18, 30, 35, 124, 199, 113, 61, 9, 240, 174, 15,
+176, 69, 24, 217, 168, 44, 7, 97, 45, 152, 166, 74, 7, 198, 83, 184,
+223, 81, 231, 67, 86, 234, 11, 57, 234, 130, 243, 79, 55, 15, 235,
+164, 21, 125, 133, 213, 164, 35, 199, 67, 14, 8, 53, 120, 158, 116,
+134, 172, 245, 86, 155, 243, 245, 201, 145, 77, 78, 102, 75, 96, 44,
+8, 148, 148, 54, 205, 76, 48, 254, 179, 20, 12, 95, 223, 49, 121, 22,
+125, 125, 225, 113, 36, 130, 122, 156, 139, 145, 135, 130, 49, 184,
+48, 119, 225, 241, 254, 28, 90, 99, 192, 162, 76, 76, 164, 86, 20,
+156, 199, 239, 49, 20, 121, 9, 114, 109, 30, 71, 179, 80, 173, 253, 2,
+251, 5, 235, 87, 124, 36, 93, 163, 136, 67, 78, 200, 150, 69, 53, 114,
+23, 213, 194, 227, 104, 21, 234, 71, 236, 6, 10, 89, 66, 22, 218, 209,
+203, 76, 168, 77, 145, 15, 186, 3, 122, 55, 39, 33, 11, 94, 79, 242,
+74, 163, 86, 54, 217, 62, 16, 132, 86, 156, 248, 3, 52, 167, 81, 187,
+21, 68, 50, 71, 41, 5, 203, 193, 73, 77, 157, 122, 254, 113, 181, 221,
+1, 207, 3, 114, 232, 184, 9, 208, 123, 131, 114, 130, 200, 190, 38,
+254, 152, 62, 207, 91, 141, 124, 206, 148, 79, 85, 35, 239, 151, 167,
+23, 89, 29, 239, 7, 13, 24, 239, 253, 199, 250, 33, 174, 228, 89, 241,
+7, 168, 197, 8, 37, 80, 144, 8, 0, 169, 145, 97, 252, 81, 62, 106, 85,
+250, 89, 92, 3, 143, 8, 249, 60, 51, 66, 78, 4, 98, 22, 243, 76, 37,
+84, 73, 84, 5, 21, 41, 176, 235, 107, 56, 111, 221, 156, 94, 251, 77,
+33, 236, 8, 142, 37, 228, 4, 229, 36, 28, 83, 228, 105, 243, 250, 11,
+245, 133, 143, 169, 96, 23, 77, 234, 30, 72, 17, 236, 20, 243, 228,
+57, 31, 65, 116, 144, 245, 193, 188, 52, 246, 49, 242, 229, 50, 252,
+231, 186, 212, 146, 24, 121, 244, 158, 242, 161, 127, 21, 36, 159,
+106, 100, 223, 228, 40, 178, 152, 72, 56, 16, 196, 174, 39, 41, 48,
+45, 129, 233, 37, 152, 81, 180, 46, 161, 164, 192, 46, 181, 224, 252,
+141, 218, 225, 218, 11, 186, 83, 186, 244, 218, 136, 243, 62, 231, 31,
+175, 120, 28, 60, 45, 212, 224, 142, 20, 191, 159, 113, 46, 178, 2,
+58, 103, 160, 147, 131, 61, 131, 178, 210, 85, 110, 85, 105, 69, 206,
+192, 229, 76, 106, 158, 68, 197, 81, 58, 43, 240, 222, 74, 97, 121,
+92, 159, 67, 230, 201, 97, 165, 239, 24, 190, 215, 151, 195, 206, 221,
+79, 114, 219, 148, 95, 148, 47, 254, 0, 125, 23, 132, 216, 14, 217,
+36, 32, 66, 101, 10, 248, 120, 168, 118, 168, 182, 16, 58, 4, 71, 227,
+2, 187, 25, 140, 62, 171, 34, 220, 207, 20, 192, 169, 28, 60, 139,
+182, 83, 89, 169, 228, 57, 196, 255, 89, 167, 212, 183, 52, 110, 85,
+86, 10, 156, 27, 170, 50, 163, 137, 138, 128, 212, 185, 190, 28, 75,
+152, 137, 137, 81, 140, 4, 228, 203, 161, 126, 91, 120, 28, 163, 182,
+134, 177, 54, 137, 139, 52, 140, 57, 90, 225, 81, 36, 72, 135, 53, 30,
+232, 80, 95, 170, 102, 168, 22, 247, 130, 82, 176, 152, 85, 17, 246,
+126, 160, 1, 190, 20, 38, 123, 168, 200, 115, 226, 97, 143, 186, 23,
+178, 161, 73, 115, 75, 195, 173, 186, 160, 174, 145, 233, 115, 56, 10,
+9, 233, 25, 41, 68, 164, 69, 66, 98, 75, 106, 7, 224, 3, 65, 82, 75,
+194, 106, 73, 8, 104, 157, 102, 171, 36, 141, 56, 164, 51, 249, 20,
+189, 138, 186, 144, 207, 89, 33, 85, 186, 105, 117, 231, 225, 44, 140,
+231, 164, 90, 176, 24, 196, 163, 132, 249, 214, 0, 35, 207, 137, 208,
+225, 55, 211, 176, 107, 150, 123, 66, 7, 191, 165, 185, 69, 8, 71, 52,
+53, 12, 95, 129, 58, 165, 136, 122, 4, 214, 11, 4, 150, 12, 17, 90,
+207, 248, 140, 84, 106, 1, 244, 30, 26, 145, 206, 240, 41, 102, 119,
+133, 175, 144, 222, 40, 165, 93, 154, 237, 145, 196, 27, 7, 27, 47,
+84, 248, 20, 61, 221, 248, 113, 207, 95, 225, 44, 119, 131, 156, 44,
+11, 106, 242, 225, 164, 78, 234, 158, 202, 25, 206, 79, 241, 50, 60,
+133, 192, 206, 244, 152, 231, 129, 119, 148, 54, 149, 192, 87, 113,
+171, 98, 103, 93, 154, 74, 127, 12, 252, 11, 171, 149, 128, 229, 4,
+232, 13, 18, 137, 12, 223, 49, 106, 71, 124, 133, 163, 192, 253, 39,
+116, 54, 37, 137, 9, 182, 11, 162, 45, 21, 164, 47, 42, 168, 253, 36,
+212, 130, 69, 116, 189, 206, 10, 255, 186, 131, 205, 62, 69, 46, 202,
+8, 245, 234, 230, 55, 113, 175, 10, 125, 46, 229, 124, 10, 161, 179,
+36, 145, 87, 35, 223, 139, 223, 153, 203, 226, 115, 78, 64, 205, 9,
+202, 186, 160, 94, 4, 189, 145, 91, 197, 173, 18, 107, 185, 85, 150,
+199, 157, 193, 38, 2, 21, 75, 102, 165, 160, 60, 86, 68, 56, 204, 204,
+68, 152, 223, 176, 175, 32, 44, 66, 18, 93, 100, 77, 196, 227, 176, 6,
+114, 7, 159, 97, 50, 195, 234, 248, 72, 197, 84, 79, 163, 230, 29,
+245, 66, 229, 66, 85, 195, 249, 6, 220, 167, 208, 93, 178, 198, 146,
+86, 20, 37, 126, 99, 143, 127, 105, 0, 65, 235, 101, 105, 115, 22,
+193, 121, 98, 17, 156, 39, 184, 112, 162, 56, 212, 40, 210, 170, 212,
+132, 140, 141, 58, 98, 47, 58, 19, 122, 154, 221, 181, 152, 4, 243,
+148, 188, 78, 248, 240, 21, 103, 5, 141, 78, 103, 178, 34, 212, 195,
+81, 224, 78, 209, 181, 106, 253, 213, 67, 205, 35, 21, 17, 69, 132,
+175, 38, 21, 226, 205, 10, 242, 212, 138, 216, 173, 47, 175, 70, 46,
+135, 83, 18, 122, 149, 210, 197, 231, 120, 102, 189, 163, 66, 235, 17,
+11, 106, 145, 175, 164, 185, 3, 246, 163, 35, 26, 142, 66, 159, 131,
+115, 160, 160, 69, 49, 171, 77, 76, 216, 115, 113, 71, 128, 207, 177,
+66, 35, 33, 178, 209, 53, 96, 182, 212, 228, 232, 115, 104, 222, 112,
+20, 79, 87, 78, 180, 237, 233, 239, 189, 243, 201, 72, 123, 231, 14,
+136, 190, 136, 34, 23, 85, 127, 158, 174, 70, 87, 147, 162, 225, 160,
+221, 148, 88, 135, 171, 229, 213, 114, 60, 183, 197, 27, 37, 48, 39,
+88, 134, 121, 65, 253, 43, 210, 238, 172, 235, 104, 131, 61, 126, 231,
+239, 175, 254, 79, 255, 146, 94, 155, 42, 142, 162, 154, 212, 56, 103,
+38, 150, 164, 36, 198, 4, 74, 83, 102, 34, 161, 87, 82, 80, 154, 60,
+75, 159, 67, 51, 155, 173, 153, 152, 37, 104, 197, 97, 205, 182, 254,
+135, 119, 31, 62, 236, 157, 200, 29, 153, 236, 44, 105, 19, 213, 169,
+52, 17, 69, 62, 69, 125, 242, 66, 224, 43, 60, 159, 162, 17, 146, 110,
+161, 199, 179, 27, 240, 209, 147, 38, 229, 243, 148, 61, 174, 240,
+215, 98, 228, 129, 16, 186, 37, 112, 198, 125, 187, 127, 3, 240, 125,
+50, 242, 233, 200, 134, 171, 54, 85, 88, 125, 157, 21, 18, 134, 136,
+181, 159, 169, 114, 8, 149, 158, 73, 158, 208, 45, 176, 166, 232, 115,
+80, 72, 118, 31, 195, 106, 233, 172, 80, 55, 3, 219, 221, 202, 59,
+207, 118, 193, 73, 175, 13, 173, 231, 166, 181, 209, 158, 210, 16,
+190, 243, 200, 151, 90, 129, 127, 85, 194, 111, 239, 245, 228, 220,
+203, 94, 9, 64, 26, 4, 149, 79, 196, 240, 81, 186, 37, 189, 248, 248,
+118, 255, 251, 131, 159, 140, 160, 124, 58, 242, 28, 216, 17, 173, 54,
+155, 46, 149, 169, 25, 82, 194, 135, 221, 54, 158, 233, 182, 114, 25,
+86, 110, 125, 142, 80, 185, 254, 234, 195, 187, 239, 15, 110, 235,
+135, 147, 86, 231, 39, 35, 75, 122, 253, 235, 184, 112, 170, 223, 209,
+120, 243, 252, 107, 16, 129, 82, 141, 174, 166, 224, 60, 137, 65, 178,
+143, 210, 179, 39, 96, 216, 93, 35, 95, 96, 78, 191, 28, 232, 180,
+244, 231, 108, 243, 146, 222, 13, 189, 27, 174, 34, 35, 254, 126, 187,
+255, 239, 200, 72, 56, 151, 244, 186, 85, 165, 170, 102, 214, 91, 246,
+44, 34, 85, 121, 225, 126, 229, 64, 16, 187, 91, 201, 162, 150, 228,
+40, 208, 175, 95, 221, 169, 132, 241, 95, 221, 233, 157, 248, 234, 78,
+123, 219, 78, 114, 246, 66, 190, 116, 205, 114, 85, 106, 5, 100, 8,
+240, 113, 212, 250, 66, 232, 184, 116, 175, 7, 59, 4, 216, 111, 49,
+124, 167, 52, 59, 234, 104, 220, 29, 106, 188, 4, 118, 3, 170, 171,
+83, 157, 212, 126, 111, 247, 255, 79, 63, 254, 188, 63, 72, 24, 7,
+151, 244, 90, 87, 74, 205, 60, 155, 106, 36, 36, 187, 2, 35, 31, 217,
+193, 130, 253, 218, 218, 144, 142, 21, 92, 101, 123, 155, 127, 221,
+100, 231, 36, 248, 248, 102, 197, 133, 138, 52, 117, 106, 69, 33, 225,
+147, 146, 83, 46, 10, 75, 89, 147, 167, 128, 93, 171, 86, 190, 179,
+113, 103, 163, 168, 14, 249, 48, 43, 150, 244, 254, 30, 172, 70, 233,
+222, 135, 24, 68, 27, 190, 77, 24, 41, 229, 251, 131, 29, 109, 141,
+26, 163, 127, 9, 97, 132, 42, 66, 69, 247, 93, 241, 132, 144, 165, 27,
+214, 244, 222, 249, 106, 228, 43, 160, 162, 145, 130, 143, 29, 109,
+59, 26, 39, 59, 139, 155, 15, 53, 139, 234, 252, 33, 75, 40, 159, 180,
+66, 8, 25, 2, 63, 26, 220, 191, 224, 14, 21, 191, 243, 171, 201, 139,
+151, 159, 170, 232, 104, 219, 89, 135, 182, 67, 161, 89, 251, 63, 253,
+232, 225, 169, 206, 142, 182, 142, 78, 228, 99, 181, 255, 15, 33, 69,
+171, 30, 108, 140, 80, 145, 122, 76, 4, 105, 113, 207, 5, 123, 45,
+232, 188, 10, 25, 91, 11, 151, 244, 126, 53, 242, 62, 174, 115, 144,
+172, 118, 16, 245, 44, 233, 109, 111, 43, 105, 43, 110, 222, 112, 245,
+217, 94, 27, 237, 59, 106, 169, 198, 200, 167, 145, 86, 160, 192, 126,
+6, 248, 250, 10, 181, 32, 143, 23, 117, 116, 98, 54, 116, 180, 93,
+130, 232, 125, 174, 23, 233, 144, 97, 195, 85, 100, 238, 104, 123,
+187, 159, 102, 200, 39, 35, 185, 32, 200, 72, 173, 137, 17, 48, 162,
+113, 81, 208, 42, 72, 251, 7, 43, 244, 60, 199, 81, 12, 107, 222, 134,
+181, 109, 48, 198, 9, 229, 156, 234, 60, 216, 136, 30, 254, 100, 100,
+170, 199, 166, 42, 77, 141, 249, 65, 249, 164, 21, 224, 103, 16, 9,
+240, 89, 129, 143, 57, 234, 8, 245, 173, 10, 127, 109, 73, 51, 122,
+17, 163, 142, 70, 27, 189, 219, 217, 104, 162, 163, 107, 39, 124, 240,
+124, 3, 249, 196, 146, 222, 231, 32, 19, 35, 140, 245, 165, 124, 10,
+100, 122, 166, 84, 204, 18, 221, 244, 145, 73, 209, 56, 138, 255, 184,
+219, 168, 221, 29, 147, 216, 220, 102, 5, 239, 220, 70, 121, 99, 188,
+49, 183, 81, 248, 12, 136, 219, 168, 13, 188, 239, 118, 7, 95, 129,
+223, 48, 78, 60, 166, 155, 165, 121, 246, 204, 132, 134, 145, 66, 34,
+115, 62, 49, 135, 14, 181, 132, 142, 179, 124, 64, 48, 142, 51, 154,
+19, 226, 35, 189, 67, 62, 252, 132, 27, 126, 106, 220, 126, 20, 153,
+9, 239, 109, 251, 59, 110, 119, 248, 163, 115, 53, 63, 154, 175, 124,
+94, 190, 185, 116, 21, 211, 5, 83, 188, 49, 209, 120, 200, 4, 111, 28,
+31, 131, 39, 188, 198, 220, 80, 192, 62, 132, 12, 40, 236, 193, 114,
+110, 99, 248, 200, 35, 171, 240, 159, 8, 158, 244, 159, 160, 159, 178,
+199, 207, 220, 70, 66, 238, 104, 249, 180, 238, 255, 33, 159, 142,
+104, 3, 239, 78, 241, 199, 252, 199, 131, 39, 68, 240, 179, 115, 82,
+52, 1, 243, 143, 139, 38, 120, 99, 118, 163, 196, 110, 163, 192, 5,
+84, 188, 49, 47, 34, 162, 9, 17, 208, 225, 163, 23, 216, 209, 254,
+142, 221, 109, 235, 91, 104, 101, 194, 55, 245, 255, 143, 111, 54, 29,
+149, 35, 83, 220, 81, 209, 196, 254, 169, 144, 201, 96, 176, 30, 176,
+76, 32, 35, 111, 220, 149, 248, 15, 34, 109, 12, 239, 208, 90, 174,
+240, 92, 52, 17, 50, 185, 115, 106, 231, 20, 124, 6, 44, 72, 162, 243,
+22, 16, 222, 178, 191, 195, 251, 105, 190, 57, 17, 248, 51, 248, 238,
+38, 79, 186, 141, 197, 76, 41, 239, 238, 159, 2, 27, 2, 31, 90, 15,
+137, 144, 16, 169, 72, 68, 34, 221, 152, 29, 225, 219, 57, 21, 51, 29,
+3, 171, 225, 141, 163, 133, 45, 110, 89, 16, 62, 155, 219, 220, 59,
+133, 83, 255, 110, 134, 204, 207, 167, 51, 151, 187, 73, 19, 110, 163,
+137, 211, 202, 187, 178, 187, 49, 83, 188, 113, 47, 66, 134, 226, 69,
+242, 192, 127, 130, 70, 154, 29, 254, 48, 246, 139, 1, 251, 133, 128,
+143, 209, 126, 148, 15, 197, 254, 231, 240, 77, 255, 187, 124, 141,
+119, 147, 9, 159, 12, 248, 18, 167, 67, 38, 189, 136, 39, 49, 210,
+224, 17, 232, 104, 164, 65, 150, 16, 70, 175, 113, 228, 67, 9, 134,
+31, 175, 49, 107, 194, 103, 113, 19, 31, 237, 239, 204, 206, 143, 31,
+183, 224, 207, 230, 155, 4, 190, 41, 217, 116, 226, 244, 225, 105, 36,
+100, 50, 147, 120, 150, 205, 6, 183, 113, 215, 49, 252, 241, 98, 94,
+129, 215, 38, 49, 22, 108, 238, 88, 27, 249, 184, 119, 42, 254, 13,
+62, 164, 43, 248, 89, 124, 187, 192, 126, 49, 83, 137, 211, 84, 192,
+119, 196, 115, 174, 12, 31, 97, 1, 31, 163, 191, 209, 247, 254, 132,
+15, 189, 203, 67, 187, 178, 124, 32, 226, 81, 221, 93, 182, 42, 252,
+148, 135, 11, 136, 228, 79, 145, 187, 57, 132, 51, 227, 239, 200, 36,
+119, 44, 102, 210, 196, 135, 2, 85, 144, 88, 203, 159, 176, 176, 140,
+34, 86, 192, 122, 60, 176, 41, 120, 220, 140, 47, 108, 172, 241, 46,
+171, 251, 199, 8, 11, 9, 219, 145, 201, 35, 147, 217, 147, 148, 179,
+112, 106, 62, 74, 86, 87, 249, 52, 127, 44, 120, 130, 229, 99, 41, 49,
+63, 121, 52, 218, 166, 104, 62, 208, 170, 199, 10, 169, 56, 163, 132,
+239, 38, 149, 228, 137, 159, 195, 87, 72, 216, 178, 39, 147, 39, 147,
+38, 146, 38, 146, 225, 25, 146, 22, 80, 66, 83, 118, 207, 24, 195, 7,
+79, 2, 213, 93, 202, 118, 248, 238, 225, 187, 148, 16, 235, 53, 90,
+115, 63, 189, 163, 124, 36, 246, 120, 76, 247, 48, 179, 223, 173, 163,
+147, 232, 223, 249, 250, 167, 201, 179, 5, 12, 93, 210, 68, 236, 68,
+204, 120, 232, 120, 44, 200, 174, 241, 228, 137, 35, 140, 37, 65, 200,
+179, 178, 25, 149, 60, 20, 108, 33, 187, 155, 119, 79, 118, 119, 166,
+5, 205, 163, 146, 68, 28, 99, 207, 16, 168, 206, 94, 76, 15, 100, 242,
+247, 38, 247, 206, 252, 177, 110, 78, 134, 17, 119, 132, 88, 46, 22,
+216, 80, 248, 163, 252, 81, 241, 104, 236, 120, 210, 4, 181, 99, 246,
+100, 246, 68, 54, 208, 230, 79, 22, 152, 100, 10, 51, 68, 118, 87,
+121, 63, 239, 94, 226, 116, 236, 84, 140, 153, 176, 241, 24, 194, 248,
+54, 132, 216, 19, 187, 7, 245, 47, 169, 127, 196, 187, 220, 177, 108,
+88, 181, 209, 10, 102, 171, 55, 146, 81, 203, 153, 209, 133, 142, 115,
+97, 95, 225, 118, 7, 9, 119, 141, 163, 191, 169, 61, 193, 239, 19, 71,
+38, 77, 18, 11, 29, 34, 137, 169, 128, 48, 255, 100, 232, 100, 8, 35,
+49, 83, 248, 92, 60, 193, 196, 34, 242, 77, 178, 182, 68, 15, 219, 48,
+245, 15, 250, 239, 24, 119, 28, 41, 168, 20, 152, 73, 62, 225, 202,
+102, 217, 24, 207, 82, 1, 186, 219, 246, 208, 121, 196, 163, 161, 99,
+64, 61, 38, 30, 163, 207, 144, 49, 155, 21, 24, 133, 59, 23, 17, 118,
+141, 49, 46, 238, 240, 152, 202, 103, 202, 4, 216, 201, 220, 193, 125,
+140, 219, 40, 151, 236, 97, 80, 240, 117, 106, 63, 232, 29, 163, 214,
+163, 246, 99, 101, 211, 172, 152, 252, 92, 54, 77, 169, 179, 167, 24,
+66, 146, 23, 32, 228, 153, 61, 208, 81, 66, 254, 168, 104, 20, 189,
+205, 131, 103, 226, 49, 100, 76, 98, 60, 157, 15, 227, 66, 128, 15,
+251, 23, 236, 57, 145, 100, 148, 238, 240, 136, 144, 190, 134, 239,
+96, 175, 176, 190, 77, 223, 37, 157, 15, 222, 67, 62, 235, 91, 184,
+34, 235, 81, 254, 120, 3, 84, 43, 221, 221, 238, 123, 61, 70, 233,
+190, 215, 13, 175, 52, 128, 148, 77, 155, 236, 136, 177, 6, 54, 6,
+118, 55, 226, 95, 46, 17, 30, 8, 253, 141, 132, 52, 38, 105, 174, 20,
+76, 133, 130, 231, 112, 135, 135, 123, 98, 220, 47, 81, 66, 241, 132,
+136, 80, 163, 245, 152, 78, 70, 196, 6, 45, 73, 246, 13, 216, 63, 192,
+174, 96, 117, 187, 177, 164, 73, 164, 163, 92, 195, 247, 65, 204, 56,
+117, 119, 203, 239, 178, 117, 133, 212, 20, 218, 59, 238, 114, 239,
+152, 4, 249, 120, 163, 84, 68, 224, 229, 36, 176, 94, 217, 52, 93,
+115, 210, 100, 34, 19, 105, 252, 113, 46, 112, 226, 94, 84, 60, 145,
+116, 55, 118, 154, 139, 189, 119, 20, 119, 129, 246, 163, 180, 235,
+217, 147, 221, 61, 151, 236, 186, 232, 14, 214, 6, 186, 51, 111, 28,
+186, 47, 161, 27, 185, 63, 91, 8, 31, 248, 57, 155, 241, 109, 50, 177,
+31, 70, 129, 145, 140, 225, 226, 27, 69, 12, 124, 216, 95, 122, 136,
+206, 124, 200, 142, 216, 105, 241, 36, 127, 130, 245, 171, 104, 2,
+246, 92, 247, 101, 119, 69, 19, 246, 99, 246, 99, 110, 230, 50, 206,
+70, 39, 238, 176, 96, 143, 56, 134, 124, 177, 140, 245, 134, 231, 240,
+13, 3, 31, 250, 55, 123, 18, 51, 3, 51, 20, 31, 147, 9, 33, 195, 103,
+164, 50, 103, 140, 29, 63, 50, 201, 174, 185, 140, 86, 191, 187, 49,
+211, 161, 144, 157, 98, 144, 208, 169, 164, 187, 249, 247, 19, 239,
+98, 31, 225, 2, 17, 127, 130, 178, 243, 205, 122, 136, 136, 156, 167,
+220, 8, 255, 145, 41, 228, 131, 232, 131, 248, 99, 5, 227, 15, 163,
+175, 28, 98, 47, 123, 50, 102, 92, 52, 70, 5, 57, 208, 62, 71, 166,
+76, 209, 55, 91, 120, 119, 168, 5, 105, 174, 229, 223, 85, 222, 83,
+222, 203, 190, 39, 187, 7, 140, 80, 225, 98, 161, 38, 203, 238, 229,
+223, 71, 155, 226, 78, 128, 63, 33, 6, 239, 135, 78, 33, 189, 136,
+237, 115, 227, 124, 228, 27, 165, 212, 5, 160, 5, 72, 168, 176, 217,
+123, 151, 230, 47, 230, 109, 236, 184, 120, 204, 36, 200, 24, 50, 70,
+243, 23, 51, 152, 214, 25, 154, 45, 110, 119, 240, 25, 50, 134, 146,
+28, 33, 50, 141, 124, 50, 144, 164, 187, 73, 96, 69, 164, 83, 222,
+207, 191, 31, 51, 29, 66, 137, 176, 26, 2, 29, 83, 171, 9, 33, 31,
+227, 15, 34, 17, 248, 38, 98, 39, 153, 170, 55, 93, 64, 234, 9, 169,
+124, 200, 134, 89, 59, 5, 116, 19, 161, 227, 33, 68, 240, 55, 75, 25,
+58, 110, 131, 39, 131, 219, 143, 18, 168, 139, 80, 105, 66, 199, 66,
+198, 18, 39, 179, 137, 127, 209, 195, 216, 93, 19, 167, 179, 239, 149,
+62, 80, 34, 31, 169, 197, 16, 113, 100, 159, 64, 248, 166, 216, 215,
+240, 12, 197, 37, 39, 166, 16, 140, 169, 9, 147, 36, 178, 21, 14, 45,
+55, 17, 99, 164, 11, 33, 85, 217, 68, 136, 124, 40, 228, 4, 72, 4,
+207, 51, 120, 143, 86, 229, 50, 181, 16, 170, 33, 16, 197, 98, 151,
+157, 226, 77, 216, 140, 134, 76, 229, 63, 200, 190, 175, 188, 159,
+116, 15, 252, 57, 133, 94, 197, 8, 3, 138, 41, 218, 85, 168, 237, 72,
+221, 198, 179, 221, 4, 127, 12, 53, 153, 34, 28, 99, 92, 4, 179, 83,
+34, 241, 24, 27, 119, 98, 230, 53, 211, 43, 110, 212, 183, 243, 196,
+31, 31, 217, 160, 202, 132, 97, 199, 131, 213, 178, 93, 11, 247, 241,
+49, 211, 50, 226, 235, 216, 187, 226, 41, 136, 187, 41, 209, 36, 205,
+97, 190, 177, 163, 240, 24, 62, 252, 78, 129, 59, 74, 53, 186, 49,
+143, 228, 55, 165, 53, 102, 131, 177, 126, 152, 101, 8, 205, 84, 17,
+136, 216, 248, 51, 67, 72, 23, 65, 182, 100, 144, 152, 201, 16, 200,
+2, 204, 69, 209, 4, 102, 1, 217, 165, 128, 53, 185, 144, 189, 246,
+164, 95, 112, 141, 39, 39, 19, 31, 208, 221, 161, 113, 61, 51, 114,
+220, 152, 186, 193, 146, 179, 175, 241, 24, 27, 227, 154, 240, 222,
+60, 103, 176, 247, 242, 141, 108, 36, 62, 141, 214, 219, 69, 248, 48,
+222, 121, 227, 49, 147, 73, 211, 180, 170, 0, 25, 233, 107, 118, 208,
+187, 196, 16, 149, 179, 248, 160, 107, 240, 198, 48, 98, 236, 103,
+196, 142, 205, 60, 145, 78, 227, 203, 141, 177, 43, 111, 148, 93, 207,
+76, 54, 42, 27, 65, 76, 22, 68, 198, 48, 26, 181, 228, 220, 193, 135,
+223, 184, 203, 18, 79, 112, 199, 104, 71, 166, 57, 64, 79, 28, 236,
+201, 152, 229, 227, 142, 146, 121, 102, 88, 207, 134, 33, 102, 99,
+159, 50, 147, 248, 103, 248, 112, 20, 125, 221, 216, 47, 230, 196, 30,
+27, 47, 152, 33, 52, 38, 112, 247, 132, 223, 99, 64, 172, 1, 17, 31,
+59, 29, 217, 67, 153, 251, 149, 70, 31, 159, 245, 47, 196, 19, 127,
+20, 173, 98, 210, 141, 172, 54, 51, 217, 76, 54, 37, 254, 69, 175,
+179, 124, 246, 179, 109, 111, 124, 213, 206, 204, 230, 24, 183, 252,
+49, 49, 177, 160, 63, 60, 242, 199, 45, 110, 91, 223, 182, 39, 61,
+151, 236, 105, 70, 217, 93, 13, 249, 102, 198, 180, 179, 1, 75, 132,
+142, 99, 52, 209, 232, 231, 146, 184, 66, 221, 212, 98, 179, 232, 240,
+219, 184, 153, 124, 183, 237, 205, 63, 53, 119, 61, 164, 6, 154, 178,
+10, 44, 8, 246, 193, 248, 11, 157, 162, 187, 4, 251, 59, 184, 87, 193,
+253, 9, 151, 156, 218, 69, 204, 46, 17, 191, 201, 194, 87, 236, 239,
+96, 116, 144, 245, 141, 26, 99, 31, 243, 129, 10, 177, 10, 245, 44,
+138, 27, 147, 31, 224, 95, 99, 198, 24, 35, 97, 150, 5, 217, 157, 23,
+111, 84, 100, 140, 81, 220, 5, 226, 158, 57, 22, 36, 12, 170, 30, 246,
+97, 236, 187, 124, 244, 235, 56, 126, 191, 69, 172, 199, 208, 225,
+126, 198, 230, 118, 232, 88, 242, 36, 218, 144, 236, 138, 104, 231,
+26, 51, 213, 19, 182, 99, 177, 66, 45, 205, 53, 206, 205, 157, 145,
+249, 44, 161, 29, 147, 235, 108, 69, 162, 29, 145, 88, 112, 156, 158,
+48, 66, 177, 6, 147, 29, 1, 215, 24, 121, 88, 153, 25, 58, 204, 219,
+59, 196, 190, 183, 195, 32, 255, 147, 39, 121, 163, 52, 55, 69, 99,
+166, 218, 203, 214, 57, 58, 19, 19, 163, 70, 62, 234, 55, 254, 40, 83,
+127, 136, 181, 169, 175, 217, 56, 48, 171, 234, 198, 138, 14, 93, 27,
+42, 53, 238, 5, 197, 212, 147, 212, 155, 240, 200, 102, 15, 75, 135,
+187, 125, 248, 185, 179, 107, 2, 249, 98, 241, 36, 129, 123, 244, 177,
+16, 99, 39, 19, 143, 155, 219, 146, 196, 166, 233, 57, 67, 192, 103,
+120, 77, 85, 146, 210, 137, 204, 170, 34, 171, 75, 52, 134, 187, 158,
+228, 73, 250, 93, 2, 221, 9, 132, 204, 216, 77, 177, 214, 163, 223,
+248, 194, 153, 3, 162, 23, 249, 8, 225, 132, 57, 31, 235, 17, 62, 75,
+96, 180, 30, 155, 235, 148, 143, 107, 140, 90, 150, 146, 102, 43, 82,
+137, 105, 151, 54, 235, 145, 252, 209, 252, 169, 216, 9, 241, 120,
+226, 84, 30, 123, 150, 99, 58, 110, 48, 173, 123, 216, 47, 240, 59,
+13, 114, 10, 177, 3, 190, 45, 99, 73, 19, 148, 240, 200, 84, 40, 228,
+179, 136, 232, 19, 49, 59, 189, 153, 214, 51, 235, 114, 108, 103, 27,
+227, 26, 253, 200, 159, 249, 30, 19, 115, 44, 33, 254, 230, 141, 102,
+79, 229, 79, 139, 199, 177, 210, 224, 247, 109, 116, 175, 58, 147, 14,
+247, 163, 54, 72, 119, 135, 212, 157, 219, 176, 15, 198, 238, 56, 137,
+59, 118, 140, 66, 222, 232, 108, 178, 57, 84, 52, 146, 152, 223, 228,
+220, 54, 35, 102, 141, 156, 51, 226, 24, 125, 27, 59, 81, 126, 55,
+118, 98, 203, 56, 214, 66, 56, 229, 78, 134, 76, 154, 78, 152, 76,
+212, 153, 254, 250, 64, 172, 199, 189, 147, 76, 187, 55, 225, 195,
+243, 79, 232, 56, 33, 155, 65, 199, 55, 122, 90, 52, 54, 91, 220, 238,
+80, 66, 115, 14, 238, 168, 49, 119, 153, 71, 220, 41, 194, 233, 235,
+94, 193, 52, 122, 151, 242, 145, 243, 240, 24, 253, 123, 3, 61, 21,
+219, 143, 210, 147, 18, 165, 67, 47, 111, 25, 35, 214, 35, 132, 228,
+27, 20, 220, 137, 67, 132, 144, 158, 98, 58, 139, 141, 205, 180, 144,
+105, 15, 45, 26, 179, 97, 207, 190, 102, 209, 74, 171, 15, 141, 72,
+254, 104, 226, 68, 217, 116, 207, 189, 135, 15, 70, 238, 151, 221, 61,
+50, 69, 249, 184, 212, 126, 184, 203, 163, 108, 228, 175, 50, 70, 190,
+81, 122, 30, 94, 116, 7, 243, 130, 165, 59, 2, 103, 45, 224, 187, 219,
+72, 78, 147, 73, 147, 252, 209, 217, 245, 85, 196, 88, 208, 124, 151,
+207, 214, 19, 243, 232, 164, 251, 51, 180, 98, 236, 68, 247, 189, 135,
+120, 61, 24, 190, 15, 231, 211, 105, 136, 113, 224, 19, 143, 67, 215,
+154, 36, 223, 114, 48, 57, 203, 252, 165, 99, 6, 159, 53, 172, 141,
+158, 102, 137, 119, 167, 240, 164, 85, 14, 103, 45, 29, 115, 194, 212,
+221, 75, 154, 228, 222, 113, 155, 193, 55, 211, 126, 248, 138, 53,
+253, 238, 255, 182, 169, 126, 179, 89, 206, 27, 205, 159, 70, 180,
+145, 7, 13, 119, 241, 148, 132, 214, 75, 134, 221, 120, 216, 196, 76,
+62, 17, 203, 71, 251, 221, 168, 169, 43, 67, 206, 206, 160, 195, 51,
+46, 57, 13, 26, 79, 150, 104, 71, 180, 218, 108, 58, 83, 13, 178, 102,
+190, 251, 103, 119, 247, 246, 196, 230, 110, 119, 68, 99, 58, 176, 92,
+207, 253, 238, 123, 120, 202, 66, 77, 217, 83, 56, 207, 145, 169, 93,
+147, 36, 131, 113, 63, 56, 105, 246, 157, 140, 153, 32, 159, 13, 172,
+242, 8, 147, 181, 71, 38, 11, 9, 157, 238, 30, 61, 97, 162, 5, 123,
+205, 24, 147, 39, 67, 198, 102, 215, 91, 150, 144, 237, 188, 236, 110,
+133, 90, 146, 63, 138, 126, 29, 121, 64, 52, 60, 128, 216, 123, 80, 6,
+190, 197, 179, 23, 242, 133, 78, 108, 132, 157, 2, 229, 227, 51, 127,
+107, 227, 49, 59, 4, 19, 95, 216, 4, 218, 251, 8, 243, 77, 5, 165, 42,
+167, 223, 111, 220, 55, 126, 175, 97, 178, 227, 132, 120, 76, 52, 15,
+161, 241, 239, 143, 166, 221, 20, 72, 217, 52, 161, 99, 5, 52, 192,
+233, 126, 10, 79, 174, 192, 55, 65, 206, 130, 19, 228, 59, 182, 9, 49,
+57, 229, 242, 217, 29, 31, 97, 180, 199, 83, 219, 40, 218, 26, 191,
+209, 195, 117, 33, 23, 205, 11, 74, 167, 35, 81, 104, 78, 217, 115,
+191, 28, 106, 131, 209, 191, 99, 172, 127, 217, 221, 181, 141, 25, 93,
+236, 196, 195, 7, 204, 247, 34, 198, 199, 114, 176, 28, 102, 8, 90,
+48, 27, 191, 45, 154, 160, 223, 198, 144, 125, 139, 169, 187, 141, 83,
+11, 218, 141, 134, 77, 224, 136, 35, 236, 119, 145, 132, 142, 112,
+209, 211, 57, 177, 38, 171, 157, 165, 236, 185, 151, 63, 37, 30, 227,
+207, 200, 23, 123, 227, 222, 128, 70, 30, 190, 171, 187, 139, 223,
+216, 244, 208, 145, 248, 72, 60, 128, 103, 233, 130, 105, 221, 189, 6,
+136, 233, 45, 227, 98, 19, 31, 216, 16, 133, 158, 41, 185, 196, 207,
+252, 241, 114, 146, 13, 244, 59, 2, 29, 67, 135, 124, 200, 92, 62,
+109, 250, 142, 8, 191, 199, 50, 99, 188, 135, 29, 128, 111, 86, 17,
+205, 190, 207, 96, 58, 76, 236, 68, 143, 153, 39, 88, 206, 242, 187,
+248, 13, 34, 102, 74, 57, 240, 133, 142, 211, 252, 16, 19, 186, 153,
+103, 94, 56, 41, 193, 142, 42, 123, 18, 215, 98, 238, 71, 122, 103,
+78, 71, 215, 206, 240, 221, 167, 239, 99, 254, 100, 79, 153, 234, 203,
+225, 195, 37, 179, 174, 178, 12, 137, 68, 18, 206, 119, 36, 151, 45,
+94, 142, 142, 124, 129, 128, 143, 23, 60, 23, 240, 109, 249, 142, 194,
+178, 89, 131, 14, 179, 215, 108, 109, 112, 69, 162, 62, 65, 184, 128,
+79, 21, 58, 130, 62, 71, 129, 64, 16, 206, 15, 135, 89, 64, 41, 220,
+10, 103, 143, 249, 17, 125, 135, 4, 146, 200, 112, 73, 100, 36, 18,
+129, 50, 80, 1, 207, 4, 225, 146, 240, 240, 244, 112, 212, 134, 234,
+249, 37, 101, 63, 75, 95, 89, 25, 44, 87, 24, 30, 41, 137, 76, 135,
+241, 18, 88, 27, 0, 193, 111, 184, 36, 146, 116, 106, 6, 11, 64, 230,
+31, 254, 89, 250, 202, 240, 202, 224, 75, 62, 78, 143, 4, 68, 9, 179,
+190, 112, 196, 226, 75, 210, 211, 97, 14, 176, 160, 133, 133, 133,
+163, 96, 182, 190, 146, 31, 211, 151, 94, 252, 113, 36, 226, 133, 19,
+77, 225, 212, 21, 146, 116, 85, 58, 44, 24, 213, 89, 216, 58, 254, 28,
+125, 101, 244, 138, 226, 23, 21, 159, 78, 15, 167, 23, 159, 234, 100,
+248, 210, 37, 84, 159, 197, 92, 125, 37, 63, 166, 239, 244, 233, 34,
+180, 61, 4, 73, 56, 46, 27, 213, 133, 19, 125, 233, 2, 70, 223, 108,
+127, 252, 136, 190, 12, 254, 199, 167, 139, 138, 136, 66, 84, 3, 110,
+8, 230, 7, 147, 39, 233, 201, 146, 240, 159, 208, 119, 104, 174, 190,
+119, 249, 233, 69, 168, 15, 22, 71, 177, 36, 116, 233, 244, 153, 35,
+209, 7, 241, 92, 54, 215, 130, 135, 224, 42, 57, 60, 91, 95, 6, 171,
+47, 61, 18, 205, 71, 204, 6, 116, 18, 73, 114, 114, 120, 48, 159, 234,
+219, 140, 250, 102, 135, 204, 161, 67, 25, 25, 25, 160, 210, 124, 209,
+248, 41, 97, 100, 17, 189, 192, 159, 140, 217, 210, 37, 228, 2, 19,
+80, 125, 81, 115, 245, 29, 70, 109, 81, 81, 25, 168, 243, 112, 137,
+185, 45, 133, 225, 69, 70, 133, 145, 160, 171, 136, 232, 75, 78, 79,
+38, 233, 65, 244, 101, 204, 89, 44, 194, 69, 69, 226, 245, 110, 20,
+66, 146, 139, 218, 52, 146, 127, 186, 237, 52, 163, 143, 53, 37, 225,
+132, 124, 161, 241, 226, 56, 71, 153, 81, 157, 80, 40, 140, 36, 144,
+81, 70, 181, 239, 130, 190, 182, 34, 186, 78, 2, 135, 171, 165, 102,
+100, 244, 241, 51, 204, 230, 167, 202, 88, 58, 44, 22, 128, 24, 133,
+156, 68, 111, 70, 70, 164, 224, 52, 6, 160, 241, 194, 84, 137, 52,
+215, 103, 203, 15, 62, 100, 118, 101, 152, 180, 17, 125, 142, 194,
+205, 145, 155, 133, 240, 0, 26, 225, 202, 136, 146, 64, 182, 9, 104,
+240, 209, 82, 104, 235, 200, 220, 209, 124, 227, 191, 202, 47, 198,
+139, 44, 182, 216, 168, 17, 121, 162, 72, 213, 132, 69, 11, 57, 168,
+145, 44, 58, 35, 50, 18, 43, 167, 45, 86, 130, 112, 162, 24, 138, 0,
+222, 194, 61, 230, 7, 159, 255, 170, 4, 188, 219, 69, 47, 12, 177, 98,
+170, 49, 227, 80, 113, 49, 45, 195, 28, 14, 252, 16, 75, 226, 2, 34,
+211, 169, 10, 194, 132, 21, 143, 38, 5, 222, 131, 62, 100, 205, 32,
+234, 122, 123, 123, 169, 202, 18, 86, 95, 73, 9, 171, 15, 75, 156,
+112, 115, 84, 70, 49, 70, 244, 199, 232, 2, 24, 38, 144, 156, 86, 5,
+243, 205, 46, 200, 15, 91, 88, 109, 120, 73, 25, 209, 70, 47, 162,
+143, 172, 246, 80, 49, 234, 163, 186, 200, 21, 117, 8, 63, 89, 124,
+90, 149, 44, 161, 41, 214, 118, 90, 194, 234, 10, 166, 6, 116, 4, 125,
+233, 128, 215, 107, 166, 175, 56, 131, 58, 3, 20, 98, 111, 64, 77, 84,
+99, 100, 6, 209, 7, 225, 7, 197, 46, 57, 57, 253, 52, 196, 77, 120,
+48, 41, 173, 52, 67, 36, 124, 102, 185, 102, 246, 3, 186, 72, 66, 35,
+16, 70, 101, 56, 154, 95, 28, 0, 4, 175, 21, 183, 181, 53, 55, 67,
+192, 168, 138, 154, 219, 144, 20, 114, 35, 29, 139, 11, 209, 135, 37,
+172, 216, 172, 188, 160, 47, 168, 58, 184, 54, 71, 57, 206, 188, 72,
+108, 159, 70, 125, 167, 79, 163, 186, 54, 202, 153, 206, 42, 12, 71,
+125, 233, 224, 179, 98, 140, 19, 120, 36, 234, 232, 69, 22, 8, 201,
+51, 227, 18, 110, 222, 188, 249, 227, 102, 72, 55, 85, 114, 120, 81,
+243, 56, 232, 131, 181, 38, 27, 3, 27, 162, 71, 34, 97, 198, 71, 254,
+141, 36, 64, 164, 241, 66, 133, 36, 29, 73, 163, 165, 191, 129, 121,
+115, 36, 90, 47, 252, 213, 244, 241, 230, 182, 102, 212, 195, 22, 123,
+108, 80, 16, 66, 66, 71, 106, 112, 180, 56, 163, 133, 60, 35, 191,
+102, 192, 185, 96, 76, 67, 154, 208, 212, 82, 53, 55, 55, 171, 96,
+177, 201, 216, 61, 112, 173, 164, 151, 8, 248, 198, 143, 243, 169, 38,
+129, 49, 62, 216, 48, 49, 93, 52, 233, 210, 35, 37, 12, 19, 148, 80,
+8, 64, 112, 49, 219, 159, 4, 51, 205, 99, 188, 5, 77, 100, 166, 57,
+250, 64, 225, 187, 164, 50, 167, 67, 147, 3, 101, 144, 104, 146, 100,
+86, 157, 0, 244, 217, 50, 214, 177, 157, 161, 24, 88, 5, 142, 115,
+245, 161, 245, 224, 130, 222, 33, 129, 82, 133, 177, 108, 139, 164,
+146, 112, 9, 163, 207, 180, 90, 220, 39, 89, 208, 68, 164, 250, 72,
+173, 69, 29, 46, 172, 245, 140, 19, 68, 146, 218, 9, 86, 11, 198, 188,
+32, 169, 66, 85, 194, 48, 71, 86, 37, 205, 106, 70, 159, 0, 241, 204,
+124, 107, 97, 12, 28, 62, 152, 2, 137, 210, 37, 164, 166, 240, 109,
+95, 37, 165, 70, 194, 240, 193, 62, 73, 32, 160, 156, 160, 136, 85,
+199, 234, 51, 50, 27, 223, 160, 233, 23, 25, 41, 1, 251, 145, 237, 20,
+73, 94, 1, 110, 225, 4, 216, 143, 96, 227, 133, 153, 37, 20, 176, 144,
+70, 127, 176, 220, 160, 200, 12, 80, 192, 68, 19, 147, 19, 52, 203,
+72, 133, 69, 117, 124, 219, 205, 80, 191, 5, 2, 99, 156, 24, 253, 65,
+159, 178, 247, 182, 84, 157, 177, 208, 8, 35, 153, 190, 65, 66, 5, 66,
+39, 156, 12, 70, 190, 119, 51, 4, 108, 228, 17, 173, 48, 136, 207,
+234, 19, 24, 3, 26, 213, 49, 186, 36, 140, 194, 143, 73, 70, 192, 78,
+53, 28, 221, 67, 88, 96, 224, 187, 239, 102, 68, 162, 215, 72, 134,
+73, 40, 37, 26, 4, 181, 10, 8, 181, 89, 72, 50, 166, 67, 3, 101, 164,
+211, 61, 2, 211, 201, 81, 29, 180, 17, 91, 208, 135, 10, 205, 50, 141,
+193, 227, 51, 70, 20, 48, 42, 241, 9, 106, 146, 208, 207, 29, 138,
+148, 124, 92, 204, 116, 185, 72, 128, 20, 96, 217, 7, 243, 9, 163, 80,
+225, 102, 62, 124, 78, 194, 26, 145, 208, 49, 150, 226, 179, 41, 104,
+52, 136, 4, 244, 9, 50, 138, 37, 66, 73, 209, 105, 213, 12, 117, 128,
+103, 27, 73, 187, 170, 153, 71, 4, 230, 131, 133, 166, 4, 49, 123, 89,
+16, 89, 130, 179, 51, 251, 150, 112, 98, 27, 92, 2, 44, 151, 244, 137,
+12, 172, 200, 115, 117, 17, 125, 172, 66, 52, 39, 188, 137, 239, 71,
+102, 116, 21, 19, 125, 145, 224, 134, 112, 230, 232, 129, 133, 222,
+17, 150, 203, 54, 158, 67, 145, 66, 18, 15, 179, 244, 217, 178, 10,
+137, 187, 5, 142, 194, 191, 21, 119, 61, 236, 133, 6, 35, 17, 242,
+211, 137, 66, 179, 246, 102, 107, 251, 46, 221, 66, 149, 20, 151, 64,
+231, 200, 16, 154, 188, 200, 94, 24, 39, 124, 38, 50, 49, 186, 186,
+30, 62, 124, 216, 91, 130, 250, 36, 124, 226, 222, 112, 51, 133, 182,
+66, 218, 103, 161, 125, 144, 246, 219, 149, 49, 143, 62, 154, 22, 228,
+216, 34, 40, 6, 109, 101, 208, 21, 176, 140, 51, 250, 36, 230, 250,
+222, 101, 212, 149, 177, 13, 24, 24, 141, 23, 137, 32, 11, 179, 66,
+38, 236, 122, 216, 213, 85, 82, 2, 31, 130, 235, 35, 112, 240, 44, 62,
+91, 62, 171, 174, 171, 140, 221, 32, 192, 135, 55, 27, 213, 129, 66,
+76, 94, 147, 186, 135, 189, 189, 64, 88, 156, 1, 132, 31, 69, 98, 206,
+1, 101, 184, 81, 163, 109, 36, 221, 84, 128, 170, 18, 182, 253, 162,
+198, 40, 51, 133, 244, 252, 72, 174, 98, 242, 77, 26, 168, 44, 206,
+40, 41, 201, 120, 23, 203, 42, 147, 30, 172, 74, 130, 87, 140, 186,
+88, 117, 68, 101, 87, 9, 73, 129, 205, 184, 94, 82, 12, 136, 186, 200,
+135, 184, 119, 192, 255, 74, 192, 127, 197, 216, 8, 217, 125, 179,
+132, 30, 106, 34, 75, 200, 126, 187, 132, 238, 129, 74, 24, 159, 144,
+235, 144, 41, 254, 152, 197, 10, 203, 122, 217, 249, 202, 160, 77,
+119, 225, 49, 216, 168, 143, 156, 105, 36, 116, 87, 64, 209, 192, 140,
+236, 22, 134, 220, 151, 68, 154, 233, 35, 65, 108, 90, 4, 108, 72, 74,
+0, 50, 82, 194, 238, 116, 233, 254, 229, 221, 140, 98, 211, 34, 169,
+58, 19, 97, 25, 227, 233, 193, 57, 215, 136, 161, 181, 181, 181, 165,
+233, 156, 249, 213, 212, 210, 210, 132, 23, 60, 133, 119, 154, 206,
+181, 142, 204, 29, 247, 200, 171, 21, 245, 193, 101, 174, 146, 220,
+227, 75, 84, 105, 235, 191, 161, 206, 208, 2, 234, 8, 34, 25, 10, 42,
+224, 89, 75, 11, 76, 161, 103, 94, 130, 23, 7, 127, 30, 224, 200, 8,
+46, 23, 181, 233, 91, 81, 5, 140, 6, 93, 132, 22, 95, 50, 154, 225,
+103, 234, 27, 193, 203, 208, 212, 58, 160, 39, 136, 204, 250, 168,
+237, 90, 245, 122, 189, 81, 95, 203, 191, 165, 79, 111, 24, 104, 37,
+120, 68, 19, 227, 10, 212, 167, 55, 218, 244, 231, 232, 27, 161, 87,
+103, 211, 128, 193, 160, 111, 161, 87, 83, 11, 163, 142, 234, 107,
+253, 255, 170, 111, 64, 79, 156, 128, 126, 32, 142, 1, 35, 234, 9,
+224, 191, 175, 207, 0, 250, 6, 6, 136, 66, 84, 3, 110, 96, 159, 160,
+1, 127, 66, 159, 97, 174, 190, 182, 38, 253, 0, 234, 35, 122, 16, 171,
+149, 46, 157, 62, 163, 234, 32, 158, 71, 230, 106, 52, 192, 53, 31,
+31, 163, 15, 221, 9, 65, 71, 158, 96, 140, 163, 59, 154, 204, 244,
+205, 86, 104, 96, 174, 89, 107, 134, 252, 24, 160, 23, 40, 96, 204,
+166, 111, 37, 151, 81, 95, 231, 60, 250, 80, 85, 103, 231, 28, 141,
+144, 111, 45, 3, 70, 133, 168, 142, 160, 182, 146, 104, 97, 245, 25,
+230, 44, 150, 104, 35, 147, 182, 117, 26, 102, 146, 182, 54, 25, 166,
+13, 140, 62, 214, 148, 45, 76, 56, 51, 250, 230, 93, 41, 85, 7, 87,
+167, 25, 42, 92, 109, 160, 111, 122, 128, 174, 147, 192, 233, 137,
+241, 204, 244, 53, 153, 207, 207, 14, 163, 234, 208, 184, 128, 216,
+73, 30, 232, 27, 173, 45, 6, 12, 64, 227, 213, 218, 210, 50, 91, 31,
+171, 208, 116, 177, 112, 196, 91, 204, 5, 26, 225, 34, 111, 209, 76,
+99, 156, 64, 52, 52, 181, 24, 203, 98, 19, 163, 111, 6, 158, 1, 135,
+26, 58, 207, 177, 10, 171, 201, 202, 9, 98, 107, 43, 173, 84, 77, 52,
+229, 140, 80, 120, 79, 159, 180, 130, 119, 105, 247, 122, 72, 66, 204,
+116, 81, 251, 86, 87, 195, 15, 107, 73, 67, 171, 190, 137, 225, 104,
+97, 84, 51, 85, 170, 137, 213, 103, 48, 170, 35, 42, 205, 66, 143,
+213, 71, 75, 28, 232, 195, 233, 208, 163, 52, 59, 12, 250, 38, 243,
+11, 245, 225, 175, 65, 115, 117, 68, 95, 39, 93, 26, 234, 99, 116, 81,
+79, 227, 39, 161, 188, 208, 36, 107, 213, 79, 27, 90, 77, 202, 168, 1,
+225, 153, 126, 100, 166, 62, 52, 17, 94, 116, 189, 45, 180, 97, 208,
+87, 136, 190, 105, 214, 189, 134, 105, 172, 11, 45, 198, 183, 129,
+154, 89, 174, 153, 253, 6, 89, 117, 45, 192, 51, 163, 141, 85, 227,
+130, 193, 101, 211, 211, 52, 0, 7, 166, 167, 217, 88, 102, 115, 142,
+180, 18, 131, 89, 121, 161, 14, 52, 134, 242, 185, 153, 23, 245, 8,
+234, 131, 69, 131, 186, 105, 189, 217, 69, 51, 24, 74, 196, 172, 216,
+107, 53, 187, 206, 205, 86, 8, 215, 0, 166, 27, 164, 43, 213, 215, 74,
+107, 12, 13, 108, 208, 103, 26, 123, 169, 115, 182, 182, 249, 245,
+181, 14, 144, 228, 215, 79, 51, 124, 108, 177, 39, 81, 14, 134, 60,
+199, 116, 232, 214, 121, 174, 25, 202, 106, 152, 52, 161, 169, 165,
+103, 151, 219, 68, 161, 104, 112, 155, 181, 121, 6, 181, 197, 24, 31,
+243, 77, 129, 73, 71, 162, 143, 105, 24, 36, 82, 154, 90, 140, 253,
+105, 230, 114, 140, 183, 45, 76, 50, 206, 167, 176, 141, 84, 102, 189,
+129, 41, 120, 160, 185, 229, 81, 250, 204, 89, 91, 206, 205, 171, 15,
+47, 232, 29, 173, 80, 170, 48, 150, 207, 33, 105, 107, 11, 211, 68,
+154, 154, 30, 173, 175, 137, 213, 87, 195, 90, 207, 52, 1, 49, 96, 83,
+43, 109, 109, 212, 62, 180, 191, 131, 197, 231, 85, 217, 210, 250, 72,
+114, 102, 251, 162, 111, 37, 185, 138, 219, 51, 227, 38, 6, 195, 133,
+233, 241, 63, 91, 31, 235, 35, 61, 169, 5, 84, 39, 77, 57, 162, 134,
+238, 108, 90, 103, 15, 111, 105, 109, 157, 223, 20, 70, 117, 122, 179,
+44, 51, 70, 11, 232, 51, 176, 161, 71, 128, 77, 171, 34, 79, 103, 207,
+98, 138, 32, 99, 130, 209, 86, 78, 7, 163, 190, 54, 67, 203, 57, 179,
+36, 105, 57, 71, 118, 158, 84, 95, 203, 140, 128, 158, 25, 141, 122,
+178, 107, 99, 182, 6, 173, 148, 5, 6, 182, 181, 25, 90, 205, 195, 162,
+133, 221, 133, 129, 86, 82, 209, 90, 230, 83, 135, 149, 148, 238, 17,
+76, 163, 206, 49, 250, 80, 161, 249, 71, 41, 94, 19, 99, 196, 22, 70,
+101, 211, 76, 58, 72, 243, 1, 182, 203, 25, 119, 211, 184, 220, 78,
+162, 176, 169, 213, 108, 34, 99, 72, 193, 213, 196, 190, 58, 67, 91,
+11, 41, 27, 3, 134, 153, 234, 16, 143, 105, 89, 102, 30, 105, 153, 49,
+216, 68, 110, 246, 114, 75, 235, 32, 227, 18, 35, 194, 57, 138, 119,
+142, 233, 19, 6, 147, 178, 25, 32, 38, 211, 162, 57, 201, 30, 23, 23,
+251, 144, 84, 53, 214, 31, 180, 125, 16, 117, 173, 157, 108, 227, 49,
+224, 216, 249, 244, 49, 10, 137, 187, 91, 206, 181, 94, 50, 60, 196,
+142, 132, 166, 96, 75, 158, 241, 2, 111, 208, 125, 9, 236, 27, 177,
+13, 181, 206, 9, 138, 86, 38, 22, 105, 52, 128, 185, 73, 143, 25, 100,
+245, 205, 82, 120, 174, 149, 105, 179, 35, 131, 180, 25, 25, 230, 213,
+71, 77, 141, 85, 206, 64, 187, 31, 179, 73, 48, 182, 12, 163, 190, 54,
+70, 221, 8, 219, 128, 71, 102, 149, 251, 25, 245, 153, 192, 13, 14,
+82, 141, 125, 196, 33, 51, 248, 152, 125, 21, 168, 123, 104, 214, 47,
+13, 143, 210, 215, 202, 246, 103, 131, 185, 62, 211, 137, 129, 93, 46,
+178, 153, 111, 16, 70, 58, 231, 215, 103, 48, 233, 131, 182, 218, 198,
+232, 99, 34, 134, 40, 52, 24, 245, 205, 216, 31, 60, 28, 156, 79, 95,
+171, 233, 109, 3, 211, 165, 205, 210, 141, 28, 105, 232, 190, 103,
+144, 238, 89, 6, 7, 205, 52, 26, 102, 235, 107, 109, 53, 77, 137, 246,
+35, 118, 49, 171, 86, 68, 29, 217, 21, 140, 176, 107, 152, 23, 145,
+41, 83, 240, 204, 180, 136, 65, 252, 240, 32, 171, 143, 137, 26, 104,
+84, 6, 131, 105, 252, 44, 117, 224, 32, 138, 72, 239, 238, 89, 124,
+96, 122, 235, 123, 139, 5, 166, 155, 127, 88, 88, 24, 159, 63, 176,
+176, 48, 125, 110, 18, 110, 94, 97, 223, 216, 5, 55, 79, 155, 189, 97,
+188, 185, 137, 55, 86, 70, 197, 112, 45, 152, 239, 230, 28, 222, 252,
+135, 105, 202, 153, 55, 182, 198, 155, 5, 56, 142, 185, 177, 88, 138,
+55, 12, 143, 197, 67, 211, 205, 131, 5, 100, 98, 10, 247, 192, 202,
+252, 230, 105, 194, 183, 148, 174, 121, 233, 35, 111, 94, 33, 55, 79,
+207, 115, 243, 1, 209, 70, 111, 30, 204, 184, 121, 104, 254, 49, 243,
+155, 251, 15, 205, 62, 246, 208, 252, 29, 100, 94, 122, 143, 153, 20,
+23, 97, 197, 222, 60, 88, 112, 207, 98, 129, 241, 198, 226, 30, 152,
+131, 253, 24, 220, 88, 60, 52, 26, 4, 110, 62, 120, 250, 83, 211, 205,
+43, 159, 48, 170, 63, 125, 40, 91, 240, 240, 191, 190, 49, 77, 250,
+208, 99, 194, 236, 102, 131, 217, 243, 135, 65, 230, 55, 223, 155, 61,
+127, 112, 211, 236, 230, 222, 3, 179, 155, 73, 243, 33, 166, 79, 37,
+194, 13, 49, 11, 126, 30, 124, 50, 121, 207, 184, 54, 184, 49, 87,
+112, 207, 236, 57, 53, 209, 188, 239, 76, 154, 153, 237, 225, 77, 211,
+77, 226, 221, 155, 75, 217, 87, 45, 172, 110, 255, 47, 123, 51, 241,
+96, 193, 237, 239, 151, 26, 63, 118, 247, 144, 153, 117, 95, 249, 222,
+236, 230, 239, 166, 24, 125, 56, 113, 207, 20, 163, 200, 109, 22, 255,
+51, 110, 32, 178, 237, 76, 48, 16, 151, 198, 27, 8, 230, 255, 253,
+192, 168, 219, 226, 63, 254, 247, 21, 102, 97, 107, 224, 134, 229,
+193, 244, 249, 143, 115, 236, 68, 16, 216, 79, 159, 99, 195, 23, 52,
+47, 253, 7, 203, 0, 159, 123, 229, 31, 198, 76, 131, 39, 255, 96, 240,
+70, 70, 206, 89, 60, 196, 228, 192, 155, 79, 95, 249, 126, 193, 3,
+230, 230, 193, 223, 95, 185, 105, 197, 222, 76, 62, 240, 48, 221, 252,
+240, 240, 229, 155, 16, 98, 244, 102, 239, 223, 95, 217, 245, 1, 115,
+51, 149, 54, 189, 180, 151, 230, 234, 195, 135, 151, 173, 31, 44, 101,
+114, 245, 225, 195, 43, 118, 141, 198, 155, 248, 115, 191, 41, 95,
+218, 207, 220, 44, 56, 247, 244, 127, 45, 189, 202, 220, 252, 135,
+197, 210, 123, 75, 207, 211, 155, 123, 214, 16, 172, 175, 156, 51,
+222, 88, 221, 123, 229, 31, 52, 191, 239, 173, 177, 120, 242, 193, 43,
+255, 248, 128, 164, 244, 61, 91, 139, 223, 60, 248, 0, 45, 143, 55,
+22, 22, 159, 223, 251, 224, 151, 123, 200, 205, 77, 139, 255, 136,
+127, 233, 239, 86, 103, 201, 199, 38, 23, 254, 242, 55, 247, 126, 111,
+245, 245, 63, 232, 59, 22, 207, 37, 253, 210, 138, 172, 218, 226, 251,
+133, 22, 27, 12, 191, 98, 110, 206, 89, 44, 244, 152, 252, 47, 186,
+80, 139, 238, 71, 92, 195, 55, 242, 66, 197, 124, 238, 198, 176, 228,
+114, 29, 243, 210, 229, 134, 134, 134, 250, 178, 178, 252, 252, 161,
+71, 140, 233, 220, 47, 22, 243, 249, 92, 174, 251, 198, 45, 169, 102,
+131, 234, 203, 74, 243, 243, 225, 105, 79, 247, 240, 236, 17, 13, 154,
+196, 16, 254, 70, 62, 143, 203, 117, 224, 186, 191, 85, 49, 115, 30,
+229, 156, 143, 227, 155, 229, 151, 63, 23, 241, 113, 26, 24, 100, 207,
+229, 111, 109, 96, 135, 52, 148, 225, 24, 242, 161, 158, 25, 132, 151,
+19, 143, 30, 198, 1, 238, 60, 252, 15, 6, 185, 239, 161, 147, 147, 33,
+165, 204, 152, 238, 110, 243, 65, 135, 36, 165, 59, 220, 184, 238, 92,
+55, 7, 124, 116, 176, 183, 119, 240, 214, 49, 99, 136, 9, 148, 67,
+115, 134, 104, 55, 110, 138, 225, 226, 229, 102, 15, 23, 23, 31, 28,
+210, 88, 11, 224, 152, 236, 185, 139, 241, 247, 242, 14, 134, 207,
+194, 101, 207, 92, 139, 236, 61, 26, 200, 60, 4, 141, 25, 67, 167,
+233, 33, 143, 53, 246, 228, 195, 240, 0, 84, 246, 54, 112, 45, 178,
+89, 244, 219, 66, 51, 52, 243, 49, 116, 224, 94, 123, 7, 55, 123, 227,
+101, 7, 67, 144, 47, 141, 53, 1, 76, 51, 135, 205, 96, 239, 192, 181,
+179, 55, 191, 214, 110, 17, 185, 217, 71, 24, 231, 81, 206, 29, 211,
+186, 200, 205, 52, 4, 38, 116, 223, 18, 10, 67, 28, 34, 112, 8, 25,
+115, 68, 57, 103, 204, 105, 250, 105, 119, 242, 87, 128, 45, 161, 226,
+183, 18, 131, 209, 128, 47, 233, 40, 91, 233, 124, 243, 68, 217, 193,
+114, 28, 54, 190, 151, 45, 75, 206, 206, 206, 135, 21, 239, 224, 163,
+73, 220, 85, 116, 76, 254, 60, 235, 185, 236, 101, 195, 181, 119, 124,
+235, 104, 3, 115, 149, 149, 237, 163, 54, 127, 187, 155, 160, 205, 55,
+207, 37, 187, 223, 120, 46, 75, 46, 164, 55, 100, 9, 39, 169, 115, 57,
+44, 219, 220, 121, 218, 108, 28, 28, 222, 43, 239, 54, 27, 115, 150,
+71, 76, 239, 88, 241, 200, 245, 84, 217, 216, 11, 217, 33, 100, 76,
+89, 105, 48, 113, 237, 162, 244, 203, 116, 76, 246, 236, 49, 61, 31,
+219, 56, 28, 157, 149, 151, 9, 110, 232, 89, 155, 215, 153, 48, 152,
+195, 214, 179, 125, 145, 51, 59, 132, 25, 83, 186, 207, 205, 110, 17,
+140, 89, 126, 153, 218, 109, 46, 155, 167, 221, 107, 230, 100, 56,
+102, 191, 155, 13, 142, 89, 124, 153, 13, 183, 57, 99, 22, 165, 153,
+143, 129, 33, 74, 152, 7, 227, 244, 25, 198, 63, 115, 214, 211, 237,
+249, 140, 57, 90, 125, 61, 216, 105, 159, 27, 137, 238, 223, 54, 152,
+230, 161, 25, 192, 134, 182, 239, 242, 110, 179, 49, 13, 104, 167,
+157, 92, 123, 27, 59, 50, 166, 204, 124, 158, 97, 182, 242, 244, 124,
+24, 105, 26, 66, 220, 158, 47, 219, 201, 71, 184, 25, 243, 204, 188,
+226, 141, 206, 233, 102, 166, 145, 197, 250, 115, 209, 216, 191, 53,
+217, 160, 135, 33, 99, 216, 118, 154, 150, 83, 79, 139, 140, 44, 49,
+152, 103, 15, 214, 126, 134, 25, 131, 108, 67, 230, 67, 186, 195, 117,
+166, 33, 5, 101, 165, 56, 38, 6, 198, 192, 229, 244, 72, 91, 151, 55,
+52, 48, 171, 41, 77, 74, 218, 133, 74, 179, 19, 161, 108, 67, 126, 56,
+95, 166, 133, 119, 174, 173, 187, 242, 11, 116, 56, 85, 131, 114, 127,
+72, 168, 56, 28, 199, 36, 133, 136, 161, 214, 217, 187, 60, 114, 158,
+111, 147, 100, 152, 59, 245, 135, 67, 160, 39, 136, 197, 225, 73, 100,
+204, 70, 190, 23, 142, 121, 68, 206, 105, 69, 27, 183, 28, 41, 171,
+87, 250, 99, 37, 116, 231, 67, 190, 102, 39, 197, 132, 136, 197, 254,
+246, 203, 25, 182, 185, 243, 180, 139, 248, 220, 117, 71, 242, 15,
+195, 178, 29, 184, 124, 241, 198, 255, 78, 206, 78, 140, 141, 9, 13,
+229, 185, 109, 96, 124, 58, 79, 158, 238, 216, 200, 223, 114, 180, 44,
+143, 231, 96, 191, 41, 132, 43, 230, 111, 73, 202, 150, 37, 198, 132,
+198, 72, 148, 187, 31, 233, 211, 174, 29, 110, 129, 238, 105, 13, 26,
+63, 232, 6, 142, 33, 107, 197, 27, 119, 37, 37, 193, 152, 148, 210,
+253, 97, 229, 230, 249, 51, 163, 145, 196, 175, 243, 114, 79, 191, 92,
+23, 196, 95, 23, 4, 11, 10, 11, 141, 197, 49, 97, 5, 251, 120, 14,
+105, 143, 154, 167, 251, 164, 52, 49, 169, 226, 178, 242, 112, 226,
+110, 245, 91, 34, 254, 22, 152, 38, 41, 41, 118, 215, 231, 47, 42,
+119, 70, 60, 106, 61, 221, 165, 249, 101, 165, 186, 174, 124, 229,
+145, 210, 124, 217, 46, 116, 143, 44, 105, 87, 76, 242, 65, 105, 169,
+76, 250, 136, 220, 238, 238, 46, 131, 119, 116, 117, 249, 56, 52, 63,
+191, 0, 62, 33, 203, 78, 12, 75, 138, 205, 215, 36, 197, 177, 99, 100,
+115, 199, 148, 53, 116, 215, 21, 144, 127, 219, 72, 74, 58, 140, 9,
+79, 244, 127, 79, 153, 148, 250, 200, 121, 32, 8, 46, 95, 134, 89,
+202, 145, 190, 30, 115, 1, 226, 110, 191, 219, 166, 236, 228, 217, 99,
+134, 204, 198, 232, 116, 13, 100, 12, 134, 80, 169, 50, 27, 236, 182,
+43, 47, 100, 139, 44, 41, 231, 145, 118, 131, 89, 186, 47, 151, 30,
+41, 40, 135, 161, 56, 6, 134, 196, 190, 119, 246, 72, 162, 44, 169,
+252, 209, 99, 186, 47, 119, 215, 3, 1, 172, 170, 27, 198, 100, 195,
+144, 216, 247, 62, 79, 145, 29, 78, 125, 100, 188, 117, 235, 186, 235,
+203, 242, 146, 11, 74, 243, 203, 41, 27, 140, 137, 121, 47, 47, 57,
+41, 54, 215, 88, 226, 231, 177, 65, 109, 114, 140, 56, 44, 251, 72,
+62, 178, 228, 43, 147, 98, 99, 99, 146, 147, 149, 251, 119, 177, 45,
+56, 123, 174, 173, 203, 27, 234, 66, 189, 108, 108, 54, 165, 100, 23,
+148, 67, 65, 148, 193, 152, 216, 164, 228, 188, 176, 184, 31, 25, 83,
+95, 86, 158, 231, 199, 21, 191, 85, 160, 60, 82, 144, 143, 86, 131,
+49, 201, 202, 236, 68, 149, 169, 253, 204, 51, 166, 76, 153, 24, 155,
+12, 33, 0, 157, 49, 155, 68, 91, 108, 146, 50, 59, 133, 84, 85, 172,
+67, 202, 185, 99, 186, 64, 217, 145, 124, 114, 101, 203, 100, 56, 38,
+49, 54, 37, 63, 79, 117, 153, 157, 231, 17, 99, 32, 208, 144, 139,
+204, 2, 99, 194, 146, 149, 41, 204, 110, 39, 127, 94, 182, 46, 18,
+240, 120, 145, 16, 136, 221, 149, 20, 27, 22, 26, 154, 107, 28, 163,
+156, 103, 204, 229, 178, 50, 100, 80, 146, 42, 5, 235, 223, 149, 24,
+27, 26, 180, 86, 247, 163, 243, 64, 124, 202, 142, 40, 147, 147, 18,
+67, 223, 147, 97, 12, 128, 123, 66, 131, 95, 52, 237, 144, 204, 198,
+24, 131, 244, 114, 254, 142, 48, 49, 215, 141, 203, 231, 122, 19, 59,
+147, 49, 66, 210, 89, 202, 30, 197, 214, 173, 249, 239, 114, 8, 179,
+253, 98, 209, 50, 102, 76, 104, 104, 72, 64, 247, 101, 118, 204, 124,
+108, 221, 165, 176, 22, 226, 152, 24, 66, 6, 99, 196, 33, 17, 230,
+187, 183, 121, 198, 228, 55, 228, 65, 221, 220, 18, 118, 36, 59, 113,
+23, 128, 133, 197, 132, 138, 197, 82, 19, 219, 252, 243, 232, 52, 49,
+98, 209, 198, 247, 242, 179, 113, 30, 24, 19, 34, 222, 34, 202, 105,
+96, 93, 58, 239, 152, 186, 134, 122, 37, 164, 76, 65, 169, 44, 38, 20,
+60, 3, 171, 17, 111, 242, 91, 127, 121, 222, 49, 61, 236, 24, 200,
+129, 210, 252, 130, 50, 104, 86, 91, 200, 16, 17, 255, 173, 96, 167,
+31, 159, 167, 179, 156, 110, 186, 148, 137, 161, 98, 28, 4, 187, 243,
+208, 157, 14, 57, 204, 78, 108, 254, 49, 93, 5, 229, 100, 27, 45, 219,
+31, 130, 99, 160, 201, 173, 141, 217, 207, 245, 249, 209, 49, 151, 11,
+104, 239, 77, 220, 9, 71, 6, 177, 152, 199, 117, 216, 20, 115, 136,
+187, 172, 176, 188, 158, 9, 235, 121, 198, 116, 231, 23, 96, 180, 37,
+197, 6, 243, 249, 56, 196, 205, 253, 173, 216, 147, 92, 135, 184, 114,
+38, 120, 231, 27, 211, 163, 193, 34, 29, 27, 19, 130, 155, 88, 216,
+86, 58, 108, 12, 123, 239, 32, 151, 251, 34, 157, 126, 254, 49, 221,
+6, 72, 204, 152, 16, 17, 143, 28, 100, 112, 179, 28, 155, 146, 224, 6,
+19, 21, 228, 151, 230, 63, 138, 173, 187, 152, 47, 194, 61, 40, 221,
+135, 194, 52, 177, 202, 32, 56, 60, 108, 138, 205, 206, 127, 244, 152,
+203, 59, 232, 22, 212, 129, 12, 9, 141, 141, 203, 131, 25, 221, 249,
+238, 91, 194, 178, 179, 75, 231, 97, 27, 194, 29, 200, 209, 252, 67,
+60, 230, 40, 3, 31, 76, 130, 142, 204, 117, 112, 231, 226, 54, 253,
+191, 75, 231, 206, 3, 67, 26, 74, 149, 169, 41, 154, 157, 244, 156,
+225, 46, 14, 75, 74, 81, 226, 22, 155, 75, 198, 240, 67, 119, 145, 49,
+51, 79, 142, 245, 202, 228, 236, 212, 196, 82, 217, 14, 55, 220, 32,
+136, 67, 195, 146, 243, 149, 241, 176, 28, 56, 66, 242, 120, 220, 181,
+124, 96, 77, 162, 246, 53, 46, 165, 84, 22, 155, 156, 253, 158, 186,
+32, 91, 22, 236, 230, 0, 231, 204, 176, 164, 35, 71, 148, 254, 60, 55,
+7, 60, 67, 241, 221, 241, 96, 200, 223, 50, 99, 146, 134, 188, 164,
+152, 240, 35, 178, 176, 75, 187, 149, 217, 251, 253, 113, 200, 174,
+35, 202, 252, 207, 221, 241, 8, 5, 222, 21, 109, 228, 193, 1, 148,
+191, 209, 228, 75, 224, 130, 125, 202, 46, 216, 67, 108, 105, 216, 85,
+154, 45, 11, 225, 139, 67, 99, 83, 148, 71, 202, 14, 194, 145, 11,
+118, 73, 164, 72, 192, 32, 145, 216, 196, 86, 95, 42, 75, 138, 17,
+191, 39, 147, 37, 138, 116, 37, 82, 72, 5, 88, 204, 46, 168, 218, 165,
+224, 81, 60, 17, 58, 64, 24, 225, 185, 120, 35, 223, 148, 55, 202,
+100, 89, 108, 112, 56, 238, 33, 120, 21, 93, 59, 143, 64, 202, 133,
+194, 6, 174, 160, 44, 63, 24, 79, 195, 112, 185, 195, 22, 136, 24,
+143, 76, 2, 166, 211, 64, 219, 132, 77, 74, 236, 46, 72, 105, 175,
+220, 238, 186, 112, 168, 244, 187, 10, 148, 176, 87, 204, 243, 135,
+61, 31, 31, 217, 96, 12, 15, 134, 136, 112, 138, 225, 225, 238, 82,
+72, 254, 240, 253, 161, 176, 125, 128, 45, 145, 103, 100, 247, 229,
+218, 247, 148, 178, 156, 210, 50, 216, 97, 31, 130, 131, 45, 153, 9,
+142, 184, 14, 92, 7, 30, 55, 148, 178, 213, 145, 146, 25, 18, 22, 26,
+6, 73, 16, 227, 250, 58, 188, 164, 73, 46, 172, 135, 148, 45, 83, 238,
+228, 193, 226, 97, 53, 120, 190, 133, 225, 94, 92, 98, 131, 250, 252,
+68, 40, 229, 177, 59, 197, 177, 161, 225, 178, 216, 93, 49, 174, 184,
+49, 31, 42, 239, 134, 214, 93, 95, 122, 88, 44, 242, 114, 112, 199,
+40, 119, 119, 119, 227, 187, 187, 243, 220, 113, 76, 215, 190, 45, 80,
+254, 99, 66, 67, 248, 97, 177, 201, 251, 119, 201, 66, 188, 94, 234,
+30, 26, 110, 121, 11, 139, 26, 148, 146, 96, 158, 3, 215, 17, 78, 235,
+238, 48, 27, 60, 110, 68, 27, 116, 215, 138, 96, 76, 34, 12, 225, 134,
+237, 202, 142, 193, 49, 2, 29, 156, 109, 221, 210, 117, 184, 41, 207,
+223, 194, 131, 79, 242, 121, 96, 5, 119, 123, 119, 119, 209, 198, 16,
+119, 24, 115, 152, 31, 27, 179, 43, 100, 11, 100, 217, 91, 73, 217,
+48, 99, 176, 151, 180, 162, 167, 219, 157, 183, 162, 30, 139, 73, 157,
+152, 203, 23, 241, 54, 138, 220, 221, 185, 188, 69, 238, 107, 221,
+253, 121, 48, 166, 107, 231, 198, 216, 157, 177, 59, 55, 242, 55, 114,
+189, 99, 97, 231, 149, 20, 195, 203, 209, 117, 95, 119, 119, 123, 6,
+134, 52, 52, 124, 187, 9, 6, 136, 66, 192, 255, 27, 221, 22, 129, 13,
+220, 253, 237, 1, 109, 199, 218, 216, 152, 216, 157, 124, 0, 88, 187,
+75, 38, 75, 78, 10, 229, 193, 52, 45, 176, 139, 45, 40, 111, 208, 117,
+43, 68, 248, 241, 141, 16, 210, 60, 59, 123, 62, 15, 82, 152, 219,
+221, 125, 118, 199, 178, 196, 208, 88, 17, 172, 78, 228, 157, 184, 75,
+150, 156, 152, 184, 182, 103, 104, 248, 51, 56, 36, 188, 3, 27, 153,
+248, 181, 48, 70, 44, 242, 135, 95, 94, 139, 28, 121, 92, 62, 223, 13,
+198, 200, 118, 174, 77, 12, 13, 221, 194, 115, 132, 212, 8, 75, 74,
+150, 201, 98, 94, 28, 30, 26, 230, 193, 1, 102, 37, 204, 242, 155, 80,
+81, 176, 120, 11, 223, 13, 140, 224, 234, 192, 231, 243, 66, 248, 246,
+220, 238, 174, 196, 96, 119, 216, 12, 67, 37, 219, 4, 136, 187, 146,
+101, 135, 67, 93, 134, 135, 251, 127, 99, 239, 44, 122, 169, 187, 195,
+75, 44, 22, 137, 182, 64, 205, 230, 111, 228, 45, 90, 7, 118, 22, 67,
+46, 117, 95, 138, 21, 185, 135, 98, 53, 219, 24, 190, 255, 173, 216,
+164, 216, 164, 196, 144, 231, 134, 135, 247, 186, 249, 110, 40, 252,
+188, 82, 190, 37, 33, 148, 255, 214, 22, 177, 104, 147, 63, 207, 213,
+17, 154, 138, 24, 191, 191, 233, 238, 136, 225, 45, 19, 199, 192, 115,
+104, 28, 225, 97, 201, 137, 201, 178, 29, 207, 36, 199, 6, 57, 216,
+175, 104, 168, 15, 123, 43, 121, 167, 56, 100, 75, 136, 88, 180, 69,
+180, 209, 193, 97, 99, 8, 15, 202, 55, 215, 161, 59, 47, 198, 127,
+153, 56, 52, 132, 231, 30, 187, 37, 100, 87, 108, 114, 98, 108, 98,
+144, 141, 141, 115, 148, 131, 253, 250, 134, 50, 89, 125, 125, 104,
+200, 150, 45, 144, 208, 27, 215, 110, 220, 232, 5, 169, 13, 166, 114,
+112, 232, 76, 140, 21, 57, 110, 74, 20, 243, 214, 194, 162, 118, 37,
+66, 147, 143, 217, 105, 247, 219, 36, 46, 215, 78, 88, 86, 86, 222,
+61, 0, 190, 22, 65, 219, 11, 21, 135, 138, 32, 223, 196, 254, 238,
+254, 14, 220, 146, 224, 88, 17, 119, 29, 116, 67, 24, 3, 173, 240,
+191, 223, 219, 181, 95, 236, 182, 248, 91, 72, 22, 143, 178, 178, 138,
+238, 111, 66, 197, 34, 232, 174, 226, 96, 145, 56, 24, 13, 141, 33,
+100, 79, 254, 242, 132, 127, 162, 24, 26, 188, 113, 131, 252, 181, 98,
+192, 112, 253, 250, 192, 245, 235, 125, 253, 248, 252, 186, 254, 154,
+190, 15, 175, 254, 190, 254, 235, 215, 245, 125, 215, 111, 141, 15,
+183, 104, 50, 99, 222, 121, 91, 252, 166, 15, 143, 39, 12, 120, 55,
+62, 253, 100, 101, 99, 107, 79, 239, 149, 43, 87, 174, 94, 211, 235,
+175, 194, 239, 43, 63, 244, 92, 238, 104, 111, 111, 107, 110, 214,
+213, 213, 87, 87, 150, 159, 253, 242, 139, 252, 225, 33, 156, 103, 0,
+255, 16, 49, 128, 127, 124, 25, 128, 167, 55, 200, 191, 233, 185, 110,
+24, 232, 239, 191, 118, 245, 218, 213, 43, 48, 252, 202, 85, 125, 127,
+127, 255, 213, 190, 254, 238, 210, 143, 35, 183, 255, 249, 109, 241,
+235, 16, 159, 47, 191, 228, 190, 150, 231, 179, 249, 173, 183, 36, 25,
+223, 180, 118, 247, 95, 235, 215, 95, 253, 225, 202, 181, 171, 87,
+191, 239, 237, 233, 237, 238, 236, 128, 137, 26, 234, 106, 206, 87,
+150, 150, 158, 86, 21, 220, 184, 113, 99, 232, 198, 224, 224, 200,
+141, 27, 195, 195, 240, 228, 198, 224, 245, 1, 50, 165, 225, 122, 31,
+172, 7, 39, 66, 204, 126, 253, 181, 235, 215, 175, 93, 186, 88, 37,
+255, 120, 79, 228, 182, 215, 188, 69, 91, 222, 248, 227, 70, 175, 63,
+252, 254, 229, 151, 214, 184, 175, 245, 240, 220, 20, 176, 187, 188,
+251, 186, 190, 255, 250, 53, 253, 53, 152, 234, 234, 247, 221, 151,
+187, 218, 154, 47, 54, 93, 104, 168, 253, 166, 170, 178, 82, 93, 148,
+175, 28, 30, 166, 86, 27, 194, 25, 208, 114, 184, 20, 88, 225, 245,
+129, 126, 24, 216, 223, 119, 13, 22, 3, 160, 125, 131, 93, 223, 54,
+93, 107, 87, 237, 122, 251, 77, 88, 192, 159, 255, 232, 45, 240, 241,
+242, 242, 241, 122, 113, 253, 250, 117, 110, 174, 238, 127, 224, 255,
+241, 237, 79, 218, 186, 174, 145, 207, 95, 249, 225, 251, 174, 203,
+29, 45, 205, 205, 77, 141, 186, 218, 111, 190, 254, 170, 178, 188,
+228, 116, 65, 222, 208, 141, 33, 252, 87, 62, 134, 161, 161, 161, 225,
+97, 92, 27, 235, 36, 34, 125, 253, 215, 122, 174, 124, 175, 239, 27,
+104, 248, 120, 223, 177, 74, 197, 251, 127, 22, 191, 185, 217, 155,
+255, 226, 31, 188, 54, 109, 244, 244, 122, 229, 101, 31, 225, 122,
+247, 13, 47, 187, 175, 90, 243, 210, 239, 95, 17, 238, 187, 160, 215,
+95, 239, 187, 246, 131, 254, 106, 79, 111, 123, 107, 139, 174, 177,
+177, 190, 254, 155, 234, 243, 231, 190, 210, 168, 139, 84, 48, 143,
+97, 144, 152, 238, 198, 32, 44, 103, 24, 126, 15, 145, 191, 92, 221,
+32, 78, 234, 211, 127, 127, 245, 234, 149, 254, 254, 19, 59, 162, 79,
+104, 75, 227, 55, 111, 112, 91, 231, 225, 37, 224, 189, 178, 118, 21,
+212, 123, 183, 181, 30, 127, 16, 120, 186, 187, 190, 232, 230, 236,
+252, 194, 170, 23, 95, 255, 224, 66, 15, 76, 2, 129, 208, 219, 219,
+209, 209, 118, 241, 130, 174, 225, 155, 175, 171, 171, 42, 75, 213,
+167, 85, 133, 39, 111, 226, 10, 6, 6, 80, 255, 13, 136, 137, 65, 140,
+58, 124, 164, 49, 209, 223, 167, 191, 214, 219, 223, 30, 227, 255,
+191, 162, 191, 124, 16, 234, 185, 193, 99, 253, 250, 13, 175, 188,
+250, 242, 139, 107, 93, 221, 86, 113, 92, 86, 189, 176, 106, 213, 218,
+181, 110, 171, 87, 191, 224, 228, 224, 232, 236, 250, 251, 148, 230,
+238, 94, 8, 133, 239, 123, 193, 59, 223, 93, 104, 248, 22, 156, 115,
+174, 178, 172, 164, 248, 84, 254, 201, 79, 13, 55, 240, 31, 206, 128,
+123, 224, 34, 11, 195, 181, 225, 45, 218, 206, 112, 189, 31, 236, 240,
+221, 118, 30, 127, 205, 166, 184, 29, 27, 93, 87, 174, 92, 227, 177,
+97, 253, 250, 181, 235, 214, 187, 175, 92, 181, 218, 217, 193, 222,
+145, 227, 228, 178, 124, 249, 50, 103, 103, 123, 59, 123, 7, 167, 117,
+159, 54, 183, 95, 237, 253, 190, 27, 194, 160, 163, 229, 66, 93, 173,
+246, 235, 115, 149, 229, 154, 211, 167, 10, 243, 79, 30, 71, 187, 97,
+124, 129, 123, 192, 98, 3, 131, 100, 54, 48, 32, 190, 142, 177, 48,
+208, 127, 57, 196, 109, 13, 247, 229, 87, 95, 93, 189, 204, 217, 197,
+249, 5, 247, 23, 61, 214, 174, 118, 117, 229, 174, 89, 233, 226, 236,
+228, 96, 183, 148, 252, 207, 79, 151, 218, 218, 63, 255, 252, 82, 251,
+231, 189, 53, 23, 175, 126, 223, 211, 123, 249, 82, 103, 199, 119, 77,
+176, 30, 237, 215, 95, 157, 253, 242, 204, 23, 5, 39, 21, 159, 97, 12,
+12, 244, 227, 170, 96, 30, 92, 14, 241, 21, 220, 15, 244, 65, 174, 66,
+64, 15, 167, 46, 119, 94, 185, 210, 157, 187, 108, 185, 243, 50, 39,
+199, 149, 47, 184, 186, 185, 173, 92, 189, 194, 101, 185, 19, 103,
+153, 243, 10, 71, 187, 231, 127, 247, 95, 75, 151, 58, 56, 174, 217,
+176, 214, 197, 209, 97, 89, 242, 69, 204, 158, 206, 174, 246, 150,
+214, 166, 250, 58, 8, 182, 178, 210, 226, 162, 252, 207, 79, 126, 138,
+118, 3, 143, 195, 108, 67, 131, 48, 205, 192, 16, 102, 43, 198, 57,
+172, 113, 224, 122, 127, 223, 213, 225, 210, 101, 156, 229, 27, 94,
+218, 224, 108, 103, 111, 239, 180, 204, 121, 229, 170, 229, 78, 46,
+171, 151, 115, 92, 94, 88, 193, 225, 112, 156, 28, 56, 46, 203, 93,
+156, 94, 124, 59, 36, 236, 109, 159, 23, 93, 150, 173, 137, 248, 22,
+130, 0, 146, 7, 82, 244, 98, 99, 237, 215, 85, 231, 202, 213, 69, 69,
+74, 197, 103, 39, 114, 7, 73, 78, 130, 86, 152, 198, 0, 113, 0, 11, 3,
+251, 225, 164, 134, 254, 235, 144, 55, 134, 255, 125, 110, 245, 75,
+28, 39, 187, 101, 203, 156, 56, 206, 203, 151, 47, 95, 181, 198, 109,
+185, 243, 10, 151, 149, 43, 95, 224, 186, 173, 89, 229, 234, 186, 110,
+211, 255, 68, 254, 37, 98, 235, 166, 13, 176, 76, 103, 175, 80, 45,
+166, 104, 215, 229, 246, 246, 230, 11, 13, 223, 84, 125, 253, 213, 87,
+197, 69, 202, 252, 194, 19, 159, 125, 114, 3, 176, 7, 250, 7, 112,
+130, 33, 92, 148, 129, 113, 16, 68, 1, 206, 115, 253, 219, 101, 46,
+203, 29, 92, 87, 58, 115, 86, 184, 112, 56, 171, 126, 255, 186, 200,
+215, 239, 141, 55, 125, 132, 2, 31, 209, 86, 105, 116, 120, 224, 159,
+130, 226, 82, 255, 46, 17, 174, 247, 112, 119, 125, 225, 133, 85, 110,
+47, 31, 236, 186, 250, 67, 119, 103, 39, 164, 233, 133, 218, 111, 170,
+191, 46, 211, 168, 79, 21, 124, 174, 248, 252, 196, 167, 104, 167, 1,
+178, 30, 248, 111, 0, 147, 244, 58, 206, 6, 143, 215, 17, 96, 240, 67,
+123, 142, 157, 61, 119, 221, 234, 229, 43, 215, 172, 127, 45, 56, 225,
+200, 231, 39, 142, 202, 14, 158, 56, 118, 236, 164, 178, 232, 76, 105,
+73, 209, 233, 83, 121, 251, 95, 23, 108, 242, 88, 235, 230, 186, 220,
+133, 179, 226, 15, 155, 191, 248, 225, 135, 238, 203, 237, 173, 173,
+77, 186, 218, 170, 243, 21, 103, 75, 207, 156, 62, 85, 112, 242, 248,
+177, 79, 192, 59, 16, 193, 152, 172, 196, 75, 232, 45, 152, 5, 159,
+194, 180, 253, 253, 29, 155, 150, 217, 62, 255, 178, 151, 163, 131,
+219, 155, 219, 62, 60, 241, 85, 235, 165, 203, 157, 173, 23, 154, 218,
+219, 91, 219, 190, 187, 216, 160, 211, 213, 214, 125, 83, 246, 113,
+192, 6, 143, 23, 95, 90, 181, 146, 227, 228, 228, 228, 234, 246, 231,
+198, 43, 221, 93, 109, 109, 223, 53, 213, 127, 83, 85, 93, 85, 86,
+114, 230, 95, 170, 60, 249, 241, 207, 114, 135, 200, 4, 196, 86, 176,
+46, 172, 210, 55, 72, 163, 128, 34, 119, 29, 162, 90, 97, 111, 103,
+231, 206, 127, 126, 213, 182, 228, 220, 51, 23, 190, 239, 239, 135,
+16, 212, 235, 33, 19, 123, 187, 58, 0, 185, 65, 119, 65, 167, 61, 245,
+174, 231, 58, 216, 11, 45, 119, 182, 95, 230, 96, 239, 188, 60, 3,
+142, 67, 29, 173, 173, 205, 186, 250, 154, 170, 138, 242, 179, 103,
+138, 10, 10, 20, 39, 142, 127, 58, 120, 131, 182, 3, 172, 59, 6, 3, 4,
+53, 86, 107, 104, 64, 16, 110, 253, 224, 182, 208, 165, 182, 14, 175,
+218, 255, 33, 81, 249, 85, 115, 47, 70, 96, 95, 255, 128, 30, 114,
+183, 183, 231, 210, 119, 23, 117, 13, 141, 13, 13, 186, 218, 175, 146,
+222, 124, 201, 221, 213, 213, 197, 201, 209, 193, 209, 222, 126, 217,
+230, 58, 104, 62, 173, 45, 23, 117, 181, 223, 66, 235, 41, 254, 178,
+232, 95, 202, 147, 242, 227, 57, 55, 168, 123, 208, 49, 3, 6, 210,
+123, 200, 28, 208, 225, 224, 26, 186, 224, 98, 251, 187, 85, 203, 188,
+115, 43, 191, 251, 254, 250, 32, 46, 16, 186, 93, 255, 149, 31, 174,
+92, 233, 110, 111, 250, 14, 255, 15, 215, 46, 212, 86, 215, 20, 132,
+109, 122, 225, 133, 149, 171, 56, 142, 118, 75, 237, 236, 108, 29, 62,
+234, 238, 237, 104, 105, 189, 216, 84, 127, 254, 124, 69, 153, 186,
+168, 80, 153, 247, 153, 252, 248, 113, 82, 69, 65, 239, 13, 82, 106,
+232, 63, 209, 100, 234, 245, 245, 235, 55, 115, 22, 219, 218, 113,
+214, 126, 90, 223, 121, 181, 31, 172, 9, 70, 187, 110, 48, 96, 233,
+239, 233, 184, 208, 212, 124, 1, 26, 76, 109, 13, 56, 33, 245, 205,
+63, 56, 64, 133, 179, 179, 91, 10, 229, 225, 249, 63, 54, 95, 110,
+109, 105, 130, 178, 83, 253, 85, 185, 166, 248, 203, 83, 42, 40, 7,
+199, 115, 6, 113, 9, 168, 26, 220, 116, 253, 6, 73, 31, 252, 215, 57,
+216, 96, 175, 247, 141, 68, 252, 31, 59, 123, 231, 127, 52, 245, 92,
+189, 14, 25, 12, 47, 64, 123, 133, 30, 126, 165, 187, 167, 227, 98,
+163, 174, 17, 90, 140, 246, 92, 213, 87, 167, 15, 255, 233, 85, 142,
+189, 173, 157, 253, 210, 231, 151, 254, 238, 249, 231, 151, 151, 252,
+208, 129, 101, 84, 171, 253, 186, 162, 180, 88, 253, 175, 194, 207,
+229, 159, 29, 255, 4, 43, 13, 249, 87, 136, 88, 177, 49, 2, 152, 127,
+144, 56, 132, 81, 113, 253, 141, 197, 246, 118, 155, 202, 122, 6, 176,
+3, 194, 30, 1, 140, 118, 237, 218, 15, 61, 157, 224, 128, 239, 154,
+154, 46, 54, 53, 53, 84, 86, 126, 117, 238, 95, 233, 161, 47, 190, 0,
+11, 129, 169, 254, 107, 233, 239, 126, 183, 36, 245, 251, 75, 237, 23,
+27, 106, 181, 213, 95, 193, 60, 167, 255, 117, 74, 169, 56, 33, 255,
+4, 172, 97, 48, 254, 123, 71, 58, 35, 172, 6, 122, 54, 244, 239, 190,
+129, 205, 75, 150, 58, 125, 172, 187, 110, 24, 194, 146, 113, 29, 118,
+8, 215, 160, 238, 119, 67, 52, 93, 132, 72, 107, 110, 134, 77, 70, 89,
+241, 151, 138, 148, 183, 214, 187, 252, 223, 34, 174, 251, 41, 209,
+44, 93, 255, 21, 183, 246, 206, 78, 247, 204, 244, 76, 79, 183, 221,
+182, 57, 161, 40, 168, 72, 80, 140, 152, 115, 206, 57, 39, 196, 28,
+65, 204, 1, 20, 48, 71, 20, 3, 138, 57, 71, 108, 115, 206, 89, 64,
+177, 103, 103, 239, 222, 218, 218, 170, 123, 183, 238, 57, 31, 51,
+117, 91, 127, 233, 182, 138, 195, 123, 222, 231, 125, 194, 251, 73,
+127, 248, 233, 135, 159, 222, 189, 125, 251, 243, 155, 31, 254, 226,
+121, 124, 113, 12, 202, 93, 89, 156, 135, 112, 235, 7, 48, 104, 105,
+225, 66, 64, 191, 62, 35, 170, 3, 123, 35, 135, 198, 7, 57, 19, 94,
+156, 140, 252, 221, 15, 174, 23, 16, 2, 50, 233, 203, 227, 35, 232,
+204, 211, 61, 144, 203, 203, 147, 227, 131, 237, 189, 237, 141, 109,
+241, 242, 132, 112, 164, 159, 199, 112, 65, 125, 252, 21, 84, 243, 14,
+220, 218, 15, 111, 191, 35, 110, 158, 30, 236, 126, 93, 91, 91, 4,
+253, 1, 214, 160, 175, 3, 244, 135, 3, 212, 243, 27, 60, 4, 234, 0,
+32, 210, 151, 111, 200, 111, 134, 67, 237, 1, 32, 126, 245, 126, 243,
+161, 7, 168, 190, 20, 246, 13, 169, 91, 246, 8, 136, 255, 242, 120,
+23, 162, 122, 91, 60, 55, 41, 26, 238, 235, 100, 165, 186, 233, 107,
+127, 80, 122, 7, 196, 225, 13, 252, 34, 109, 159, 239, 111, 111, 172,
+173, 172, 204, 77, 139, 6, 4, 252, 174, 174, 182, 150, 86, 158, 252,
+245, 1, 1, 53, 208, 133, 111, 136, 69, 120, 69, 224, 38, 67, 84, 238,
+183, 146, 191, 38, 221, 220, 61, 1, 228, 73, 229, 8, 216, 128, 157,
+187, 1, 168, 221, 220, 20, 175, 173, 136, 55, 86, 192, 181, 244, 9,
+58, 202, 83, 124, 205, 241, 90, 154, 191, 190, 123, 251, 253, 247,
+111, 127, 120, 251, 214, 234, 240, 228, 112, 107, 123, 3, 138, 233,
+216, 176, 128, 207, 111, 239, 104, 110, 229, 190, 194, 35, 94, 145,
+241, 121, 125, 249, 67, 125, 224, 149, 65, 209, 126, 148, 51, 245, 86,
+206, 111, 239, 129, 18, 1, 1, 127, 146, 128, 114, 192, 105, 183, 87,
+231, 135, 123, 251, 123, 155, 43, 75, 51, 163, 67, 3, 128, 239, 42,
+11, 82, 60, 76, 49, 104, 213, 79, 191, 0, 184, 189, 121, 251, 189,
+205, 229, 9, 28, 211, 165, 249, 217, 25, 209, 240, 32, 191, 183, 163,
+173, 181, 133, 39, 255, 166, 32, 181, 103, 112, 113, 64, 68, 17, 33,
+133, 156, 10, 222, 251, 179, 228, 53, 213, 231, 244, 242, 238, 73,
+246, 10, 184, 225, 73, 10, 223, 6, 144, 151, 171, 227, 77, 241, 250,
+234, 252, 194, 202, 194, 12, 112, 24, 130, 46, 54, 157, 78, 13, 179,
+198, 163, 190, 168, 126, 1, 152, 123, 247, 227, 27, 231, 187, 227,
+221, 237, 45, 49, 112, 110, 211, 162, 225, 129, 222, 110, 112, 111,
+205, 13, 47, 80, 175, 95, 101, 114, 233, 11, 112, 33, 175, 240, 36, 5,
+176, 1, 186, 30, 164, 15, 17, 244, 211, 171, 251, 7, 192, 3, 207, 8,
+51, 61, 75, 31, 110, 46, 246, 54, 86, 102, 39, 102, 102, 102, 166,
+199, 167, 134, 251, 192, 16, 178, 24, 153, 177, 33, 14, 86, 134, 42,
+192, 142, 124, 84, 250, 245, 231, 15, 97, 55, 128, 118, 182, 224, 189,
+77, 142, 8, 251, 249, 189, 93, 29, 173, 45, 108, 112, 200, 51, 50,
+171, 10, 254, 129, 239, 249, 89, 193, 163, 128, 121, 30, 23, 183, 54,
+15, 142, 46, 110, 128, 35, 125, 0, 230, 250, 249, 241, 246, 252, 112,
+103, 190, 183, 142, 94, 68, 207, 47, 23, 242, 187, 218, 59, 58, 1,
+104, 27, 202, 168, 126, 46, 14, 86, 104, 125, 53, 29, 173, 207, 64,
+110, 51, 239, 78, 247, 247, 182, 214, 214, 128, 165, 18, 1, 19, 210,
+221, 213, 209, 206, 99, 191, 66, 39, 10, 79, 122, 129, 196, 243, 34,
+69, 140, 182, 28, 81, 109, 48, 167, 207, 139, 61, 130, 209, 245, 131,
+171, 51, 224, 152, 193, 141, 93, 158, 110, 246, 55, 208, 99, 131, 253,
+131, 163, 2, 3, 162, 42, 90, 120, 28, 46, 175, 153, 215, 86, 203, 8,
+114, 241, 117, 52, 38, 224, 140, 209, 170, 192, 66, 52, 220, 2, 153,
+219, 20, 47, 207, 77, 79, 130, 115, 250, 65, 61, 93, 109, 141, 114,
+196, 178, 201, 225, 208, 200, 144, 66, 36, 80, 93, 101, 136, 68, 72,
+158, 207, 203, 170, 106, 89, 101, 29, 203, 135, 199, 7, 59, 135, 71,
+123, 203, 237, 121, 97, 94, 182, 100, 44, 214, 218, 57, 208, 217, 205,
+35, 180, 162, 182, 174, 129, 197, 106, 168, 43, 79, 242, 240, 246,
+176, 116, 161, 216, 145, 52, 62, 124, 120, 223, 121, 125, 112, 176,
+181, 245, 117, 101, 25, 120, 55, 225, 64, 127, 79, 15, 228, 107, 168,
+211, 8, 247, 64, 50, 64, 96, 7, 229, 13, 20, 131, 116, 254, 48, 218,
+215, 222, 214, 221, 45, 184, 113, 120, 121, 117, 115, 122, 180, 221,
+223, 64, 69, 249, 195, 199, 15, 202, 234, 122, 70, 102, 22, 4, 27,
+255, 2, 118, 3, 167, 133, 83, 195, 76, 143, 12, 114, 118, 241, 118,
+245, 115, 65, 125, 250, 229, 243, 232, 29, 160, 55, 32, 11, 139, 211,
+227, 0, 144, 130, 158, 238, 14, 128, 3, 4, 210, 208, 81, 33, 154, 13,
+93, 1, 162, 226, 82, 64, 151, 192, 198, 223, 101, 250, 59, 144, 137,
+104, 109, 92, 80, 219, 196, 196, 104, 87, 54, 69, 79, 19, 24, 81, 37,
+96, 20, 137, 20, 47, 23, 138, 83, 0, 179, 134, 213, 220, 88, 85, 152,
+155, 69, 13, 137, 76, 136, 139, 36, 232, 232, 168, 98, 150, 207, 14,
+15, 119, 197, 171, 203, 192, 237, 136, 192, 128, 241, 65, 15, 155, 26,
+228, 127, 204, 12, 34, 61, 72, 252, 65, 16, 32, 133, 179, 249, 244,
+32, 105, 78, 183, 161, 120, 153, 147, 125, 67, 26, 196, 107, 147, 130,
+18, 91, 125, 77, 93, 53, 85, 251, 144, 164, 0, 125, 148, 187, 31, 197,
+218, 45, 178, 168, 134, 195, 102, 215, 20, 229, 101, 38, 36, 38, 165,
+36, 197, 179, 123, 154, 243, 55, 46, 64, 194, 218, 17, 175, 47, 204,
+76, 142, 12, 11, 4, 61, 8, 222, 94, 95, 145, 176, 0, 237, 0, 84, 84,
+57, 34, 154, 160, 51, 128, 109, 128, 219, 121, 94, 200, 50, 51, 82,
+13, 86, 210, 118, 168, 56, 61, 63, 89, 235, 112, 81, 254, 172, 169,
+109, 100, 64, 86, 39, 71, 185, 97, 220, 189, 93, 108, 253, 210, 203,
+43, 106, 170, 170, 152, 121, 105, 241, 81, 49, 37, 194, 69, 81, 105,
+108, 108, 225, 242, 233, 225, 222, 214, 198, 10, 144, 109, 209, 208,
+0, 112, 189, 237, 205, 60, 69, 61, 96, 66, 95, 33, 127, 130, 91, 3,
+36, 35, 131, 189, 65, 190, 30, 159, 238, 75, 81, 232, 88, 162, 178,
+169, 125, 205, 245, 195, 197, 215, 158, 8, 67, 34, 65, 47, 41, 88, 95,
+89, 69, 197, 212, 216, 60, 42, 37, 62, 60, 37, 131, 81, 83, 85, 201,
+40, 200, 74, 138, 206, 26, 154, 171, 117, 182, 66, 171, 225, 170, 129,
+187, 222, 22, 175, 44, 204, 78, 142, 14, 14, 246, 247, 34, 253, 145,
+189, 252, 49, 52, 112, 110, 16, 198, 129, 174, 90, 10, 37, 26, 8, 218,
+147, 148, 31, 22, 51, 81, 156, 83, 95, 183, 124, 253, 176, 55, 222,
+193, 206, 171, 78, 205, 152, 91, 245, 242, 72, 245, 53, 179, 182, 117,
+140, 204, 45, 169, 160, 87, 213, 214, 150, 50, 75, 105, 169, 233, 245,
+162, 60, 116, 134, 144, 75, 243, 143, 91, 223, 223, 219, 88, 7, 124,
+1, 206, 25, 224, 243, 187, 58, 218, 120, 141, 72, 12, 6, 95, 114, 32,
+101, 175, 175, 136, 201, 130, 33, 248, 17, 140, 165, 4, 230, 223, 37,
+33, 127, 96, 126, 99, 102, 108, 251, 241, 122, 65, 56, 56, 200, 229,
+244, 47, 138, 198, 249, 188, 250, 66, 58, 167, 179, 129, 205, 107,
+229, 177, 217, 117, 53, 165, 185, 69, 169, 113, 69, 77, 173, 142, 49,
+252, 41, 1, 143, 17, 63, 113, 188, 189, 9, 120, 7, 212, 51, 34, 232,
+235, 229, 183, 181, 53, 177, 100, 255, 31, 180, 192, 200, 194, 102, 1,
+65, 0, 186, 41, 129, 217, 236, 233, 241, 110, 109, 229, 240, 104, 119,
+105, 110, 253, 244, 225, 100, 98, 120, 98, 106, 92, 208, 183, 180,
+178, 58, 209, 63, 48, 44, 20, 205, 14, 9, 134, 251, 59, 90, 88, 117,
+44, 22, 61, 39, 62, 163, 188, 38, 63, 109, 176, 119, 178, 187, 166,
+54, 71, 184, 191, 247, 117, 21, 164, 146, 201, 49, 225, 176, 160, 191,
+175, 163, 181, 169, 254, 249, 69, 65, 209, 144, 20, 16, 23, 7, 16, 7,
+135, 7, 26, 53, 40, 211, 98, 241, 193, 193, 198, 218, 254, 217, 237,
+237, 238, 196, 200, 204, 194, 170, 120, 109, 105, 78, 188, 177, 46,
+222, 18, 175, 47, 47, 78, 137, 6, 249, 109, 156, 250, 6, 118, 121, 94,
+82, 49, 51, 217, 25, 149, 221, 208, 211, 82, 89, 95, 50, 121, 188,
+187, 185, 1, 206, 1, 62, 100, 96, 160, 175, 167, 179, 173, 137, 141,
+120, 14, 8, 107, 100, 74, 145, 116, 42, 81, 0, 1, 30, 37, 149, 30,
+124, 61, 58, 60, 56, 188, 58, 185, 57, 93, 25, 23, 77, 44, 172, 110,
+236, 29, 126, 93, 223, 0, 129, 112, 109, 115, 125, 101, 98, 160, 175,
+157, 203, 174, 168, 173, 175, 46, 202, 42, 47, 11, 193, 124, 176, 76,
+234, 106, 175, 105, 44, 91, 219, 223, 217, 92, 133, 120, 27, 27, 29,
+30, 232, 227, 119, 183, 242, 88, 82, 232, 9, 97, 210, 2, 71, 124, 123,
+65, 204, 40, 116, 84, 18, 24, 157, 31, 239, 31, 165, 231, 192, 43, 31,
+61, 156, 93, 158, 159, 174, 12, 243, 135, 22, 55, 86, 129, 107, 58,
+57, 61, 60, 58, 58, 220, 91, 91, 28, 235, 235, 106, 106, 172, 169,
+100, 210, 139, 104, 249, 85, 35, 244, 136, 64, 255, 240, 198, 250,
+242, 138, 150, 147, 163, 29, 192, 111, 139, 200, 156, 2, 31, 210, 214,
+218, 196, 66, 136, 83, 138, 144, 1, 76, 34, 127, 82, 181, 228, 17, 57,
+69, 250, 120, 120, 126, 121, 254, 112, 118, 115, 115, 115, 54, 63,
+208, 209, 47, 156, 90, 217, 57, 189, 189, 184, 186, 56, 190, 56, 218,
+89, 158, 30, 237, 99, 213, 87, 150, 149, 20, 229, 101, 100, 228, 52,
+204, 212, 113, 68, 149, 212, 150, 210, 138, 170, 141, 147, 125, 232,
+119, 22, 230, 166, 199, 70, 134, 248, 189, 192, 87, 53, 53, 0, 165,
+148, 41, 162, 21, 178, 164, 120, 126, 70, 70, 21, 192, 251, 254, 94,
+2, 136, 231, 254, 224, 226, 230, 238, 106, 251, 241, 254, 104, 93, 52,
+208, 63, 58, 49, 62, 187, 190, 125, 126, 117, 121, 123, 115, 118, 176,
+185, 54, 35, 234, 230, 214, 84, 48, 243, 115, 105, 169, 41, 217, 237,
+35, 217, 21, 35, 13, 76, 86, 30, 125, 254, 234, 236, 112, 119, 11,
+110, 66, 198, 69, 35, 195, 253, 61, 32, 103, 53, 179, 129, 53, 123,
+69, 172, 7, 188, 61, 169, 194, 46, 130, 63, 15, 240, 215, 174, 1, 176,
+37, 199, 55, 247, 183, 231, 115, 226, 133, 145, 218, 178, 134, 145,
+165, 233, 209, 145, 209, 133, 189, 227, 139, 243, 211, 163, 195, 173,
+181, 133, 225, 126, 94, 109, 57, 35, 59, 35, 37, 53, 169, 176, 163,
+183, 170, 156, 83, 85, 157, 149, 223, 113, 121, 122, 184, 3, 228, 20,
+204, 207, 196, 216, 200, 64, 31, 176, 111, 205, 28, 22, 164, 78, 249,
+31, 62, 241, 5, 178, 154, 12, 49, 136, 50, 48, 64, 0, 214, 146, 251,
+253, 139, 139, 227, 211, 230, 242, 134, 194, 80, 119, 207, 208, 188,
+166, 78, 238, 128, 112, 98, 237, 240, 248, 232, 112, 99, 117, 118,
+124, 160, 183, 189, 158, 81, 152, 147, 73, 77, 78, 96, 182, 212, 54,
+247, 52, 51, 34, 211, 153, 219, 128, 70, 1, 95, 175, 129, 248, 51, 9,
+248, 154, 223, 221, 209, 222, 196, 169, 83, 172, 115, 224, 231, 243,
+128, 235, 133, 28, 10, 133, 72, 10, 210, 252, 35, 212, 57, 137, 108,
+125, 103, 103, 123, 123, 48, 56, 2, 255, 241, 221, 79, 111, 191, 179,
+142, 172, 28, 237, 110, 27, 90, 90, 217, 20, 47, 78, 14, 245, 182,
+176, 170, 203, 138, 243, 179, 114, 50, 82, 147, 153, 117, 69, 157,
+195, 85, 209, 201, 89, 19, 32, 156, 2, 27, 178, 185, 190, 12, 119, 7,
+67, 130, 222, 174, 246, 214, 22, 78, 29, 108, 206, 11, 4, 2, 82, 199,
+179, 98, 71, 246, 2, 238, 77, 2, 185, 71, 34, 221, 93, 95, 91, 88,
+223, 29, 173, 114, 81, 211, 50, 241, 240, 119, 204, 20, 77, 143, 180,
+182, 14, 142, 78, 141, 141, 13, 116, 241, 26, 235, 202, 139, 25, 185,
+89, 217, 180, 148, 84, 6, 123, 176, 129, 213, 92, 69, 235, 185, 58,
+59, 59, 218, 221, 222, 134, 182, 119, 106, 84, 56, 4, 252, 91, 71, 43,
+143, 83, 35, 145, 65, 135, 11, 4, 65, 142, 4, 56, 36, 104, 75, 224,
+246, 13, 126, 131, 234, 142, 150, 151, 23, 215, 86, 198, 58, 170, 179,
+178, 178, 202, 219, 70, 71, 199, 166, 199, 251, 219, 218, 4, 3, 128,
+133, 185, 117, 85, 165, 244, 162, 226, 18, 70, 126, 94, 58, 141, 94,
+39, 104, 110, 106, 175, 232, 5, 80, 60, 57, 216, 223, 220, 248, 10,
+124, 21, 28, 83, 126, 55, 200, 167, 77, 156, 122, 240, 90, 50, 216,
+123, 56, 147, 18, 197, 156, 130, 139, 3, 80, 3, 4, 7, 37, 226, 106,
+113, 22, 46, 105, 70, 186, 133, 99, 131, 195, 162, 81, 209, 248, 152,
+80, 208, 211, 211, 222, 206, 170, 103, 213, 215, 48, 75, 139, 74, 138,
+75, 153, 69, 121, 105, 89, 204, 190, 209, 225, 222, 42, 209, 29, 8,
+193, 160, 59, 32, 108, 3, 91, 5, 220, 170, 128, 223, 219, 211, 217,
+210, 196, 169, 5, 239, 29, 220, 26, 144, 234, 231, 63, 62, 9, 9, 187,
+5, 25, 20, 20, 4, 46, 239, 69, 178, 50, 191, 56, 183, 48, 7, 12, 108,
+207, 128, 104, 122, 124, 82, 52, 50, 212, 217, 209, 209, 194, 174, 43,
+171, 40, 47, 47, 41, 162, 23, 149, 48, 203, 75, 178, 18, 211, 139,
+187, 122, 184, 244, 254, 91, 16, 26, 207, 142, 15, 246, 183, 54, 54,
+214, 22, 166, 199, 133, 208, 86, 117, 118, 180, 114, 27, 107, 37, 207,
+18, 216, 9, 0, 46, 100, 70, 165, 82, 133, 118, 67, 178, 126, 132, 49,
+81, 186, 62, 183, 176, 176, 186, 176, 12, 40, 102, 116, 92, 56, 42,
+20, 142, 137, 134, 123, 58, 154, 184, 85, 244, 146, 226, 226, 130,
+220, 156, 130, 146, 50, 102, 126, 90, 76, 114, 82, 80, 92, 104, 243,
+205, 237, 245, 245, 5, 8, 245, 59, 96, 74, 151, 145, 77, 85, 127, 31,
+180, 137, 188, 198, 26, 48, 43, 47, 207, 64, 208, 160, 141, 66, 130,
+35, 130, 109, 68, 229, 110, 225, 154, 244, 121, 111, 121, 126, 110,
+241, 235, 9, 72, 207, 226, 121, 208, 26, 46, 139, 203, 109, 110, 105,
+96, 149, 151, 22, 230, 23, 230, 231, 228, 230, 151, 148, 228, 211, 82,
+98, 226, 35, 180, 116, 2, 79, 239, 110, 46, 175, 207, 193, 57, 251,
+219, 226, 213, 37, 36, 149, 244, 33, 245, 240, 88, 181, 160, 233, 79,
+50, 197, 58, 20, 177, 33, 207, 16, 20, 144, 23, 160, 167, 190, 189,
+127, 124, 58, 6, 164, 60, 200, 170, 109, 235, 239, 229, 214, 55, 129,
+150, 80, 163, 162, 50, 26, 57, 53, 140, 34, 70, 65, 30, 45, 59, 39,
+39, 27, 208, 65, 108, 68, 108, 146, 153, 97, 33, 200, 121, 87, 23,
+103, 0, 7, 128, 221, 128, 154, 2, 118, 19, 8, 122, 161, 61, 104, 98,
+215, 73, 161, 73, 7, 223, 136, 99, 147, 131, 136, 130, 44, 45, 225,
+101, 2, 184, 61, 75, 30, 158, 206, 199, 69, 169, 148, 112, 170, 171,
+179, 169, 174, 150, 170, 150, 33, 30, 111, 100, 104, 149, 85, 89, 78,
+47, 46, 40, 164, 209, 114, 51, 210, 179, 179, 50, 83, 163, 67, 195,
+18, 41, 68, 30, 48, 147, 87, 151, 231, 199, 7, 7, 219, 27, 43, 75, 11,
+160, 158, 81, 224, 226, 187, 1, 220, 184, 236, 42, 25, 220, 125, 193,
+198, 35, 201, 23, 166, 28, 48, 176, 207, 112, 148, 0, 54, 192, 176,
+74, 110, 167, 26, 61, 235, 167, 55, 55, 23, 38, 123, 187, 26, 203, 18,
+252, 125, 252, 200, 26, 126, 229, 197, 116, 192, 3, 52, 106, 118, 70,
+78, 126, 46, 53, 49, 42, 56, 52, 218, 215, 77, 244, 112, 115, 117,
+113, 121, 14, 172, 241, 38, 220, 189, 77, 41, 224, 198, 239, 106, 227,
+241, 26, 107, 161, 239, 68, 62, 173, 43, 69, 34, 15, 162, 122, 50,
+100, 245, 6, 87, 177, 32, 141, 220, 79, 243, 151, 38, 250, 90, 185,
+205, 3, 195, 221, 236, 210, 18, 208, 254, 170, 130, 248, 146, 252,
+124, 90, 70, 118, 70, 86, 110, 122, 102, 58, 53, 45, 38, 36, 32, 48,
+216, 55, 120, 225, 225, 250, 246, 230, 28, 100, 224, 157, 237, 175,
+226, 149, 249, 217, 201, 177, 225, 65, 192, 162, 192, 190, 113, 217,
+53, 136, 189, 133, 212, 41, 83, 0, 27, 246, 73, 193, 168, 138, 15,
+166, 74, 159, 38, 68, 187, 7, 131, 21, 177, 222, 110, 158, 238, 78,
+110, 65, 97, 233, 236, 222, 102, 54, 51, 39, 191, 36, 63, 35, 61, 51,
+45, 41, 62, 57, 57, 46, 34, 200, 223, 199, 219, 39, 140, 15, 104, 252,
+234, 242, 236, 104, 255, 96, 11, 214, 51, 3, 232, 96, 176, 15, 244,
+167, 179, 181, 169, 161, 6, 190, 62, 60, 4, 250, 66, 184, 18, 147,
+191, 34, 187, 81, 120, 48, 188, 205, 199, 71, 217, 188, 112, 231, 90,
+204, 75, 142, 10, 244, 113, 36, 145, 220, 168, 28, 161, 176, 155, 67,
+207, 76, 163, 102, 166, 37, 103, 164, 196, 38, 36, 167, 39, 132, 248,
+121, 121, 187, 4, 251, 154, 53, 158, 92, 156, 30, 159, 28, 31, 110,
+109, 174, 1, 24, 128, 180, 0, 234, 233, 237, 233, 110, 107, 110, 105,
+172, 2, 183, 243, 164, 64, 27, 162, 61, 207, 200, 10, 65, 166, 24, 37,
+48, 82, 224, 29, 28, 136, 182, 78, 246, 86, 5, 172, 194, 220, 140,
+156, 2, 214, 232, 220, 148, 176, 179, 130, 26, 23, 19, 147, 152, 146,
+24, 155, 16, 31, 23, 31, 19, 21, 236, 237, 228, 226, 16, 229, 247,
+193, 64, 120, 3, 20, 3, 134, 241, 181, 101, 184, 232, 5, 46, 158, 15,
+220, 1, 192, 53, 183, 70, 10, 151, 212, 18, 168, 4, 82, 216, 31, 200,
+162, 48, 210, 193, 191, 188, 64, 200, 73, 165, 39, 125, 226, 163, 131,
+237, 157, 245, 37, 48, 170, 99, 128, 77, 198, 186, 27, 139, 64, 117,
+161, 17, 209, 113, 177, 137, 97, 81, 145, 193, 126, 206, 54, 150, 100,
+143, 148, 88, 243, 95, 162, 247, 46, 78, 142, 79, 143, 182, 190, 138,
+87, 161, 9, 17, 194, 122, 122, 187, 129, 173, 2, 188, 131, 128, 250,
+69, 130, 156, 2, 238, 11, 137, 244, 114, 196, 91, 61, 33, 59, 131,
+231, 251, 193, 165, 237, 221, 205, 157, 131, 205, 133, 185, 185, 53,
+241, 226, 196, 96, 83, 85, 94, 68, 144, 111, 64, 96, 100, 76, 76, 84,
+120, 72, 144, 191, 51, 25, 111, 102, 25, 30, 159, 226, 167, 105, 200,
+59, 189, 0, 217, 116, 15, 132, 237, 165, 185, 233, 137, 17, 225, 96,
+127, 95, 79, 119, 87, 107, 51, 183, 6, 100, 16, 153, 162, 30, 197,
+103, 128, 16, 146, 131, 171, 114, 9, 228, 9, 248, 211, 151, 201, 137,
+117, 241, 246, 238, 198, 242, 202, 226, 226, 234, 194, 184, 168, 187,
+174, 52, 41, 200, 195, 195, 55, 32, 56, 60, 34, 52, 216, 195, 209,
+154, 128, 65, 227, 156, 211, 98, 138, 99, 48, 58, 196, 97, 168, 10,
+59, 98, 241, 34, 96, 81, 96, 222, 6, 1, 16, 64, 156, 3, 102, 5, 212,
+34, 71, 26, 35, 67, 54, 20, 114, 4, 213, 207, 64, 141, 228, 64, 49,
+30, 37, 208, 117, 237, 13, 76, 47, 174, 174, 207, 79, 206, 128, 155,
+232, 235, 109, 46, 203, 75, 13, 116, 117, 160, 56, 248, 248, 251, 249,
+122, 59, 89, 154, 98, 116, 53, 48, 182, 145, 180, 164, 142, 4, 67,
+253, 47, 254, 19, 155, 226, 157, 205, 53, 241, 210, 52, 52, 85, 131,
+3, 32, 6, 3, 221, 110, 229, 212, 220, 35, 204, 9, 129, 45, 129, 130,
+32, 87, 232, 30, 148, 62, 96, 234, 36, 160, 36, 240, 131, 158, 190,
+161, 249, 169, 161, 254, 246, 238, 142, 38, 86, 89, 113, 118, 90, 168,
+61, 217, 202, 206, 198, 209, 197, 217, 209, 2, 135, 65, 233, 168, 163,
+205, 61, 210, 211, 242, 122, 67, 181, 80, 234, 168, 228, 137, 117, 96,
+169, 128, 119, 155, 157, 128, 176, 238, 233, 5, 241, 167, 157, 215,
+88, 13, 111, 236, 229, 143, 25, 125, 150, 255, 105, 24, 95, 32, 161,
+34, 227, 11, 100, 226, 155, 152, 221, 218, 206, 105, 110, 230, 180,
+50, 11, 10, 210, 146, 66, 61, 40, 4, 34, 137, 76, 34, 154, 153, 24,
+106, 170, 169, 125, 81, 53, 176, 246, 136, 203, 77, 230, 181, 187,
+106, 235, 26, 26, 96, 82, 123, 102, 151, 231, 167, 38, 39, 167, 166,
+70, 6, 160, 185, 6, 252, 214, 214, 220, 80, 133, 188, 26, 180, 241,
+138, 197, 226, 139, 98, 199, 3, 174, 82, 161, 19, 136, 113, 248, 54,
+145, 153, 79, 165, 149, 22, 211, 98, 66, 2, 157, 108, 8, 134, 24, 99,
+130, 177, 190, 129, 174, 150, 134, 138, 178, 178, 178, 58, 218, 202,
+53, 44, 35, 139, 206, 47, 39, 234, 106, 26, 162, 53, 177, 180, 158,
+177, 201, 177, 209, 201, 49, 145, 104, 164, 191, 175, 191, 167, 11,
+204, 41, 23, 240, 181, 226, 177, 25, 242, 36, 3, 89, 41, 35, 59, 216,
+23, 4, 214, 8, 51, 192, 186, 94, 103, 195, 236, 29, 220, 172, 177,
+186, 40, 35, 29, 117, 85, 117, 109, 61, 148, 158, 182, 198, 23, 229,
+207, 31, 149, 62, 171, 97, 236, 124, 99, 210, 51, 243, 248, 173, 97,
+122, 186, 88, 3, 61, 29, 35, 64, 186, 121, 220, 78, 192, 160, 35, 67,
+130, 145, 126, 126, 87, 103, 75, 11, 152, 31, 216, 18, 228, 166, 144,
+85, 21, 18, 241, 145, 71, 102, 80, 139, 160, 53, 81, 48, 171, 244, 60,
+223, 134, 160, 175, 165, 170, 170, 174, 170, 170, 170, 162, 162, 169,
+169, 165, 169, 242, 229, 147, 210, 167, 79, 218, 68, 215, 160, 152,
+236, 194, 194, 222, 222, 42, 27, 125, 29, 156, 174, 174, 145, 5, 145,
+130, 179, 245, 9, 73, 42, 96, 119, 52, 119, 77, 11, 5, 192, 93, 183,
+114, 88, 149, 82, 185, 162, 34, 132, 109, 64, 83, 20, 79, 233, 94, 20,
+244, 10, 151, 50, 175, 47, 178, 135, 243, 189, 229, 174, 217, 129,
+222, 166, 68, 162, 142, 150, 150, 142, 142, 182, 134, 186, 242, 39,
+120, 138, 42, 198, 202, 55, 50, 41, 143, 89, 38, 232, 107, 166, 226,
+177, 6, 250, 170, 186, 56, 60, 198, 208, 128, 68, 49, 199, 147, 237,
+108, 189, 153, 83, 163, 189, 93, 157, 221, 77, 28, 118, 5, 244, 52,
+200, 74, 17, 18, 206, 171, 92, 1, 106, 104, 126, 1, 14, 191, 129, 127,
+146, 220, 158, 236, 47, 8, 250, 155, 202, 215, 24, 195, 75, 109, 133,
+158, 104, 229, 143, 31, 65, 178, 255, 248, 89, 89, 69, 3, 99, 225,
+226, 23, 153, 65, 103, 212, 138, 70, 185, 53, 254, 40, 35, 180, 142,
+138, 154, 17, 26, 165, 111, 106, 111, 101, 103, 71, 176, 181, 33, 80,
+162, 226, 169, 21, 188, 230, 22, 78, 91, 5, 172, 228, 27, 18, 128, 97,
+0, 2, 237, 129, 140, 240, 231, 234, 79, 46, 187, 62, 92, 232, 107,
+170, 108, 104, 105, 44, 90, 41, 202, 95, 234, 227, 86, 166, 58, 24,
+168, 40, 41, 125, 84, 250, 162, 99, 72, 114, 244, 10, 9, 79, 200, 102,
+54, 14, 245, 9, 184, 197, 134, 24, 180, 142, 174, 46, 202, 156, 128,
+70, 163, 76, 72, 198, 102, 70, 198, 166, 38, 46, 182, 86, 246, 206,
+17, 161, 169, 121, 181, 204, 151, 87, 197, 242, 245, 5, 242, 218, 139,
+226, 56, 120, 117, 144, 182, 239, 78, 196, 162, 238, 218, 172, 20, 70,
+119, 27, 47, 167, 101, 198, 115, 124, 186, 157, 205, 162, 135, 89,
+232, 171, 171, 233, 96, 45, 40, 110, 94, 33, 113, 169, 244, 218, 182,
+161, 174, 209, 97, 182, 187, 158, 25, 86, 91, 83, 19, 131, 65, 27, 96,
+80, 122, 90, 186, 214, 68, 35, 162, 165, 189, 163, 147, 61, 217, 2,
+111, 107, 238, 146, 136, 108, 44, 97, 21, 138, 29, 220, 179, 84, 130,
+60, 208, 146, 75, 31, 207, 190, 14, 214, 214, 49, 11, 18, 18, 139, 58,
+123, 26, 234, 67, 50, 47, 217, 217, 43, 227, 173, 28, 118, 105, 156,
+19, 14, 131, 183, 117, 246, 14, 138, 72, 43, 100, 112, 251, 4, 173, 3,
+99, 253, 52, 83, 188, 38, 132, 135, 169, 46, 214, 28, 131, 50, 194,
+170, 185, 90, 217, 186, 91, 163, 9, 86, 214, 110, 68, 178, 45, 209,
+202, 5, 106, 206, 159, 15, 205, 144, 61, 2, 8, 249, 242, 231, 251,
+171, 237, 169, 54, 78, 101, 121, 86, 120, 50, 131, 213, 192, 170, 42,
+167, 57, 133, 159, 93, 228, 20, 77, 13, 128, 224, 91, 28, 237, 102,
+107, 239, 228, 29, 22, 159, 158, 199, 232, 27, 234, 238, 28, 157, 156,
+110, 241, 48, 52, 249, 162, 162, 174, 139, 53, 195, 24, 97, 53, 180,
+181, 140, 53, 12, 81, 230, 150, 104, 99, 51, 156, 153, 149, 181, 171,
+139, 93, 128, 211, 51, 60, 226, 21, 57, 236, 27, 2, 239, 231, 151,
+135, 139, 141, 41, 97, 75, 125, 5, 179, 32, 222, 35, 48, 175, 153, 87,
+207, 174, 47, 201, 112, 163, 28, 221, 109, 164, 199, 13, 10, 218, 26,
+75, 83, 34, 125, 189, 130, 66, 99, 211, 51, 106, 135, 186, 154, 123,
+199, 38, 103, 133, 213, 36, 61, 77, 148, 30, 218, 196, 84, 199, 8, 3,
+159, 69, 162, 48, 250, 26, 250, 120, 109, 45, 180, 129, 41, 133, 226,
+75, 113, 167, 16, 225, 3, 51, 152, 179, 101, 80, 73, 193, 113, 210,
+187, 237, 9, 126, 67, 53, 167, 177, 36, 39, 51, 204, 33, 145, 158,
+149, 67, 175, 175, 170, 171, 205, 178, 213, 158, 121, 184, 22, 231,
+250, 117, 138, 186, 170, 51, 18, 194, 67, 35, 19, 51, 203, 134, 133,
+45, 157, 19, 243, 11, 83, 35, 252, 56, 146, 158, 169, 142, 174, 186,
+54, 26, 135, 197, 232, 163, 76, 13, 12, 137, 26, 106, 31, 140, 140,
+208, 122, 36, 107, 51, 75, 112, 113, 4, 10, 28, 208, 87, 228, 209, 28,
+92, 193, 74, 46, 151, 186, 202, 25, 85, 133, 185, 165, 244, 212, 212,
+196, 232, 248, 60, 106, 114, 41, 139, 85, 85, 80, 144, 66, 248, 133,
+37, 121, 184, 222, 21, 36, 210, 123, 187, 106, 50, 83, 211, 210, 75,
+69, 75, 253, 221, 195, 43, 203, 107, 83, 99, 253, 245, 62, 104, 60,
+17, 109, 168, 169, 67, 50, 211, 49, 192, 168, 232, 161, 117, 53, 191,
+124, 209, 52, 210, 69, 17, 77, 72, 102, 214, 182, 102, 4, 15, 123,
+168, 8, 112, 119, 240, 219, 111, 191, 255, 38, 191, 23, 247, 149, 229,
+100, 21, 22, 208, 18, 25, 69, 49, 17, 209, 5, 197, 41, 177, 244, 166,
+134, 74, 70, 102, 118, 12, 225, 93, 228, 131, 236, 241, 234, 248, 136,
+149, 198, 229, 115, 217, 149, 109, 123, 203, 195, 83, 107, 187, 226,
+237, 249, 153, 225, 246, 48, 140, 14, 154, 128, 50, 53, 52, 192, 26,
+171, 234, 106, 27, 232, 105, 171, 104, 27, 42, 163, 180, 63, 225, 76,
+245, 149, 176, 14, 166, 56, 84, 80, 8, 96, 131, 111, 16, 8, 175, 50,
+201, 221, 145, 128, 89, 76, 47, 164, 229, 230, 102, 103, 80, 35, 221,
+146, 114, 226, 99, 146, 104, 236, 230, 154, 242, 252, 130, 188, 40,
+195, 119, 132, 3, 144, 193, 111, 47, 37, 98, 94, 117, 219, 240, 230,
+49, 72, 69, 199, 199, 219, 59, 11, 11, 194, 238, 52, 119, 188, 161,
+129, 6, 6, 69, 36, 24, 40, 41, 25, 161, 116, 149, 213, 62, 107, 24,
+26, 168, 169, 235, 27, 107, 19, 112, 56, 59, 117, 61, 83, 31, 71, 196,
+175, 129, 239, 243, 41, 62, 191, 62, 39, 159, 206, 40, 201, 74, 79,
+207, 200, 13, 116, 247, 206, 206, 140, 9, 75, 44, 235, 168, 167, 102,
+230, 51, 178, 147, 12, 223, 41, 245, 200, 145, 232, 250, 237, 106,
+114, 235, 238, 233, 228, 250, 226, 254, 98, 127, 123, 101, 65, 212,
+89, 232, 235, 239, 68, 198, 107, 170, 162, 181, 200, 22, 186, 70, 40,
+51, 125, 35, 180, 17, 209, 196, 70, 235, 11, 137, 136, 179, 48, 114,
+32, 152, 224, 44, 220, 124, 255, 8, 166, 27, 213, 94, 94, 113, 224,
+21, 43, 138, 233, 41, 81, 137, 161, 193, 206, 86, 214, 137, 133, 25,
+233, 229, 109, 53, 97, 57, 149, 13, 197, 145, 1, 228, 15, 122, 204,
+187, 231, 223, 94, 191, 253, 246, 66, 10, 204, 190, 191, 125, 184,
+186, 63, 61, 221, 92, 155, 29, 233, 102, 213, 38, 153, 91, 98, 53,
+141, 177, 122, 106, 118, 166, 122, 166, 120, 146, 169, 62, 17, 165,
+143, 183, 68, 171, 27, 144, 45, 80, 250, 230, 214, 174, 214, 230, 36,
+59, 228, 169, 169, 108, 159, 21, 64, 9, 140, 207, 72, 207, 101, 22,
+229, 6, 69, 197, 58, 217, 17, 117, 13, 66, 105, 185, 149, 173, 220,
+140, 56, 106, 41, 171, 44, 216, 137, 244, 129, 92, 119, 0, 165, 253,
+159, 85, 74, 152, 207, 165, 242, 139, 235, 221, 35, 241, 234, 60, 8,
+160, 99, 163, 190, 137, 118, 88, 99, 2, 1, 101, 96, 105, 105, 109,
+111, 98, 105, 107, 98, 132, 86, 51, 34, 126, 248, 108, 68, 196, 145,
+125, 72, 150, 94, 65, 174, 166, 214, 200, 51, 211, 203, 150, 44, 7,
+135, 100, 90, 122, 72, 90, 105, 148, 175, 123, 176, 19, 129, 128, 211,
+213, 115, 207, 41, 45, 97, 55, 230, 229, 231, 209, 75, 171, 35, 200,
+100, 213, 164, 254, 13, 9, 48, 250, 247, 56, 27, 162, 129, 218, 226,
+185, 120, 103, 97, 101, 110, 106, 110, 69, 188, 215, 239, 225, 99,
+130, 181, 178, 119, 180, 176, 55, 49, 247, 247, 177, 71, 59, 96, 9,
+166, 88, 2, 234, 173, 146, 33, 30, 237, 98, 108, 227, 130, 181, 50,
+49, 176, 132, 124, 41, 155, 165, 6, 90, 120, 80, 243, 147, 253, 147,
+169, 41, 129, 14, 110, 22, 4, 123, 39, 44, 150, 156, 74, 163, 178,
+107, 25, 244, 194, 74, 70, 29, 53, 212, 78, 183, 109, 19, 254, 215,
+22, 255, 168, 208, 50, 71, 171, 254, 224, 190, 187, 49, 191, 180, 180,
+182, 117, 112, 114, 118, 81, 102, 27, 98, 109, 108, 227, 29, 96, 235,
+106, 17, 228, 67, 182, 176, 114, 117, 182, 34, 187, 224, 126, 253, 73,
+3, 101, 130, 177, 208, 195, 161, 41, 254, 198, 26, 154, 128, 58, 95,
+207, 91, 83, 237, 117, 253, 168, 89, 169, 9, 52, 90, 138, 139, 149,
+45, 73, 223, 196, 138, 96, 97, 226, 79, 101, 178, 107, 89, 245, 213,
+92, 102, 105, 98, 152, 21, 110, 227, 82, 6, 145, 105, 103, 134, 86,
+251, 248, 235, 207, 19, 27, 43, 155, 219, 71, 231, 143, 178, 59, 65,
+128, 39, 197, 146, 76, 114, 10, 32, 153, 59, 217, 122, 155, 106, 155,
+6, 88, 17, 200, 166, 159, 126, 252, 168, 97, 67, 48, 51, 113, 38, 234,
+25, 227, 244, 244, 141, 160, 190, 205, 85, 164, 89, 107, 122, 210,
+243, 18, 18, 210, 104, 129, 20, 27, 19, 44, 209, 220, 217, 205, 30,
+159, 92, 156, 150, 83, 206, 173, 172, 228, 48, 179, 153, 169, 104,
+111, 249, 223, 190, 189, 126, 251, 251, 224, 123, 188, 150, 242, 251,
+159, 255, 18, 187, 127, 112, 116, 125, 247, 114, 94, 101, 104, 224,
+22, 96, 111, 99, 71, 242, 117, 245, 118, 178, 243, 52, 193, 185, 187,
+82, 172, 200, 22, 106, 127, 85, 215, 160, 88, 152, 232, 97, 172, 237,
+45, 109, 141, 52, 80, 250, 114, 153, 252, 186, 173, 52, 221, 19, 237,
+201, 72, 142, 76, 74, 136, 13, 136, 112, 208, 209, 32, 218, 250, 4, 5,
+83, 179, 67, 169, 37, 140, 114, 14, 183, 138, 83, 145, 21, 109, 144,
+243, 175, 255, 250, 29, 160, 205, 66, 23, 173, 244, 235, 155, 55, 111,
+85, 142, 206, 239, 30, 46, 249, 78, 111, 117, 130, 66, 189, 201, 17,
+214, 238, 1, 30, 97, 120, 138, 241, 103, 75, 10, 201, 8, 143, 215,
+250, 207, 247, 104, 11, 138, 173, 133, 53, 38, 210, 149, 232, 160,
+161, 172, 131, 3, 138, 182, 88, 146, 27, 110, 143, 161, 208, 18, 35,
+99, 210, 98, 60, 221, 204, 177, 40, 172, 117, 116, 78, 102, 78, 84,
+70, 94, 126, 81, 81, 67, 83, 109, 75, 65, 92, 232, 103, 238, 63, 126,
+255, 251, 239, 255, 44, 124, 163, 167, 254, 94, 61, 215, 215, 218,
+164, 22, 72, 109, 137, 249, 103, 63, 71, 47, 127, 15, 75, 119, 188,
+103, 68, 184, 139, 151, 157, 181, 45, 201, 206, 202, 217, 14, 253,
+157, 178, 97, 148, 149, 171, 3, 158, 76, 244, 240, 32, 106, 227, 212,
+53, 48, 64, 56, 91, 169, 201, 190, 4, 45, 187, 200, 152, 148, 184,
+112, 55, 18, 145, 136, 39, 59, 71, 151, 84, 196, 6, 164, 167, 211,
+202, 138, 169, 25, 213, 197, 69, 180, 24, 223, 159, 102, 254, 253, 63,
+255, 251, 47, 134, 178, 150, 146, 227, 59, 3, 241, 208, 215, 1, 218,
+226, 191, 7, 108, 156, 98, 43, 44, 131, 194, 73, 182, 1, 169, 94, 161,
+158, 174, 254, 230, 54, 161, 206, 88, 146, 62, 250, 175, 31, 241, 30,
+190, 46, 145, 129, 54, 142, 238, 118, 120, 51, 19, 20, 70, 75, 71, 42,
+191, 172, 206, 10, 183, 211, 215, 240, 244, 117, 205, 14, 246, 242,
+39, 16, 200, 216, 144, 130, 216, 176, 240, 168, 232, 210, 196, 84, 6,
+175, 46, 171, 182, 173, 165, 40, 217, 226, 173, 115, 125, 123, 97, 65,
+162, 182, 138, 214, 47, 191, 254, 50, 179, 117, 124, 178, 144, 148,
+236, 155, 201, 224, 102, 187, 248, 250, 133, 122, 121, 196, 68, 121,
+4, 56, 6, 90, 187, 199, 123, 219, 227, 221, 212, 117, 223, 27, 88,
+120, 135, 123, 89, 152, 120, 185, 88, 152, 225, 112, 122, 90, 234, 40,
+249, 211, 68, 101, 106, 130, 163, 174, 166, 155, 179, 87, 108, 116,
+164, 39, 232, 29, 33, 57, 217, 55, 49, 220, 63, 131, 158, 157, 90,
+218, 92, 146, 154, 145, 81, 151, 26, 143, 249, 241, 251, 255, 248, 94,
+53, 155, 166, 166, 174, 163, 244, 139, 225, 232, 215, 253, 141, 213,
+238, 186, 147, 249, 205, 217, 144, 216, 16, 31, 167, 32, 255, 48, 71,
+103, 115, 43, 43, 27, 59, 71, 83, 47, 130, 7, 201, 201, 66, 211, 132,
+68, 113, 112, 116, 246, 179, 36, 153, 226, 240, 234, 90, 154, 6, 143,
+253, 37, 41, 105, 41, 222, 100, 77, 162, 101, 108, 17, 213, 207, 209,
+220, 72, 223, 35, 37, 60, 52, 150, 150, 152, 91, 93, 156, 82, 196, 99,
+150, 49, 51, 11, 195, 10, 253, 148, 126, 252, 145, 80, 84, 5, 124,
+160, 214, 199, 119, 164, 142, 229, 213, 153, 249, 249, 19, 233, 253,
+127, 119, 198, 120, 5, 132, 122, 81, 252, 236, 60, 61, 29, 173, 236,
+189, 162, 35, 60, 253, 195, 162, 189, 45, 244, 140, 244, 45, 109, 61,
+29, 125, 157, 141, 113, 102, 206, 88, 77, 125, 93, 195, 153, 156, 48,
+235, 180, 100, 47, 27, 29, 156, 105, 82, 102, 98, 128, 163, 19, 89,
+219, 39, 63, 44, 42, 138, 150, 154, 15, 174, 41, 176, 54, 143, 85, 80,
+86, 20, 231, 235, 166, 245, 254, 7, 250, 73, 37, 26, 173, 165, 244,
+225, 61, 166, 125, 110, 122, 105, 121, 253, 73, 250, 114, 154, 25, 30,
+237, 230, 237, 111, 225, 19, 232, 229, 230, 18, 228, 228, 26, 76, 241,
+162, 248, 58, 37, 153, 155, 235, 161, 208, 100, 27, 123, 178, 53, 22,
+111, 143, 213, 49, 248, 172, 162, 249, 127, 182, 31, 0, 160
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define PHOTO_RGB565_HANDLE 0
+#define PHOTO_RGB565_WIDTH 80
+#define PHOTO_RGB565_HEIGHT 50
+#define PHOTO_RGB565_CELLS 1
+#define PHOTO_ARGB1555_HANDLE 1
+#define PHOTO_ARGB1555_WIDTH 80
+#define PHOTO_ARGB1555_HEIGHT 50
+#define PHOTO_ARGB1555_CELLS 1
+#define PHOTO_ARGB4_HANDLE 2
+#define PHOTO_ARGB4_WIDTH 80
+#define PHOTO_ARGB4_HEIGHT 50
+#define PHOTO_ARGB4_CELLS 1
+#define PHOTO_RGB332_HANDLE 3
+#define PHOTO_RGB332_WIDTH 80
+#define PHOTO_RGB332_HEIGHT 50
+#define PHOTO_RGB332_CELLS 1
+#define PHOTO_ARGB2_HANDLE 4
+#define PHOTO_ARGB2_WIDTH 80
+#define PHOTO_ARGB2_HEIGHT 50
+#define PHOTO_ARGB2_CELLS 1
+#define PHOTO_L1_HANDLE 5
+#define PHOTO_L1_WIDTH 104
+#define PHOTO_L1_HEIGHT 94
+#define PHOTO_L1_CELLS 1
+#define PHOTO_L4_HANDLE 6
+#define PHOTO_L4_WIDTH 104
+#define PHOTO_L4_HEIGHT 94
+#define PHOTO_L4_CELLS 1
+#define PHOTO_L8_HANDLE 7
+#define PHOTO_L8_WIDTH 104
+#define PHOTO_L8_HEIGHT 94
+#define PHOTO_L8_CELLS 1
+#define ASSETS_END 47886UL
+static const shape_t PHOTO_RGB565_SHAPE = {0, 80, 50, 0};
+static const shape_t PHOTO_ARGB1555_SHAPE = {1, 80, 50, 0};
+static const shape_t PHOTO_ARGB4_SHAPE = {2, 80, 50, 0};
+static const shape_t PHOTO_RGB332_SHAPE = {3, 80, 50, 0};
+static const shape_t PHOTO_ARGB2_SHAPE = {4, 80, 50, 0};
+static const shape_t PHOTO_L1_SHAPE = {5, 104, 94, 0};
+static const shape_t PHOTO_L4_SHAPE = {6, 104, 94, 0};
+static const shape_t PHOTO_L8_SHAPE = {7, 104, 94, 0};

+ 288 - 0
converted-assets/frogger_assets.h

@@ -0,0 +1,288 @@
+static const PROGMEM uint8_t __assets[3895] = {
+0, 0, 0, 5, 0, 0, 0, 1, 0, 193, 1, 8, 0, 193, 33, 7, 1, 0, 0, 5, 0,
+224, 0, 1, 16, 32, 0, 8, 16, 64, 0, 7, 2, 0, 0, 5, 0, 168, 1, 1, 8,
+16, 0, 8, 8, 16, 32, 7, 3, 0, 0, 5, 64, 168, 1, 1, 48, 96, 0, 8, 48,
+96, 24, 7, 4, 0, 0, 5, 64, 177, 1, 1, 8, 16, 0, 8, 8, 2, 8, 7, 64,
+177, 1, 1, 43, 255, 255, 255, 4, 0, 0, 0, 64, 181, 1, 0, 34, 255, 255,
+255, 0, 0, 0, 0, 120, 156, 237, 157, 207, 143, 35, 71, 21, 199, 219,
+107, 216, 132, 100, 9, 16, 241, 43, 100, 226, 13, 9, 9, 132, 252, 26,
+178, 176, 242, 97, 153, 65, 226, 15, 64, 252, 7, 86, 44, 237, 30, 2,
+36, 10, 135, 32, 17, 217, 66, 254, 19, 150, 127, 0, 113, 202, 5, 137,
+63, 130, 108, 70, 115, 131, 13, 28, 230, 98, 177, 151, 185, 68, 43,
+238, 30, 153, 174, 174, 126, 93, 239, 85, 189, 170, 110, 123, 237,
+177, 187, 247, 251, 233, 25, 119, 87, 189, 87, 213, 245, 234, 85, 85,
+219, 229, 114, 119, 175, 87, 207, 217, 153, 31, 200, 95, 206, 10, 34,
+202, 230, 197, 87, 168, 66, 229, 65, 41, 174, 212, 98, 25, 110, 157,
+179, 136, 125, 61, 207, 114, 41, 247, 165, 214, 22, 119, 16, 228, 179,
+19, 219, 170, 162, 201, 192, 154, 246, 5, 251, 61, 178, 239, 172, 108,
+63, 245, 246, 85, 237, 76, 164, 115, 237, 81, 100, 74, 77, 185, 146,
+239, 128, 245, 250, 159, 102, 61, 213, 139, 159, 143, 174, 125, 89,
+196, 219, 103, 76, 57, 214, 62, 201, 129, 178, 29, 156, 157, 69, 218,
+194, 165, 160, 141, 131, 137, 238, 146, 28, 63, 207, 232, 64, 230,
+115, 166, 233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 160, 98, 88, 208, 43, 255,
+135, 222, 190, 146, 251, 251, 182, 232, 155, 255, 243, 33, 197, 156,
+159, 203, 189, 146, 162, 109, 250, 189, 82, 161, 136, 235, 133, 123,
+159, 214, 234, 235, 149, 19, 212, 73, 203, 244, 123, 161, 162, 75, 81,
+72, 122, 165, 178, 221, 183, 79, 223, 40, 158, 231, 71, 61, 251, 66,
+251, 42, 171, 48, 89, 155, 244, 139, 36, 231, 231, 189, 124, 163, 151,
+98, 95, 217, 238, 53, 233, 214, 233, 23, 114, 237, 194, 113, 46, 106,
+72, 236, 91, 167, 175, 40, 200, 33, 153, 95, 103, 218, 165, 111, 27,
+170, 194, 208, 93, 88, 88, 125, 181, 78, 223, 232, 158, 107, 246, 243,
+12, 25, 109, 212, 79, 181, 95, 237, 122, 211, 54, 253, 100, 255, 148,
+215, 155, 86, 234, 199, 250, 231, 185, 118, 233, 108, 163, 190, 102,
+191, 171, 38, 241, 150, 174, 101, 250, 116, 125, 12, 237, 103, 111,
+22, 248, 120, 213, 70, 253, 244, 245, 209, 191, 154, 182, 75, 63, 214,
+63, 171, 55, 113, 67, 57, 102, 181, 78, 63, 210, 63, 123, 229, 199,
+167, 224, 243, 84, 187, 244, 203, 55, 56, 10, 212, 6, 100, 115, 104,
+159, 254, 176, 190, 127, 250, 180, 72, 223, 126, 88, 210, 236, 119,
+31, 169, 228, 231, 170, 150, 233, 155, 157, 142, 249, 20, 21, 124,
+174, 106, 155, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+0, 0, 0, 176, 13, 178, 89, 150, 205, 204, 191, 221, 101, 93, 11, 207,
+8, 119, 212, 177, 112, 191, 122, 97, 135, 221, 9, 247, 231, 253, 242,
+133, 29, 118, 40, 188, 235, 250, 221, 122, 216, 50, 231, 129, 110,
+133, 139, 131, 185, 117, 102, 7, 195, 101, 131, 173, 236, 237, 90,
+120, 214, 167, 158, 216, 209, 112, 25, 39, 186, 99, 119, 194, 101,
+228, 156, 140, 238, 88, 152, 60, 153, 149, 162, 174, 133, 139, 214,
+202, 27, 108, 215, 194, 228, 199, 89, 103, 195, 226, 184, 123, 225,
+62, 125, 156, 200, 138, 143, 23, 29, 11, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 17, 123, 118, 191, 78, 220, 255,
+115, 213, 112, 191, 122, 9, 238, 138, 214, 133, 240, 166, 239, 183,
+185, 111, 225, 93, 215, 239, 214, 195, 150, 61, 186, 95, 231, 166,
+195, 197, 193, 254, 220, 175, 115, 211, 225, 126, 205, 253, 51, 219,
+30, 158, 245, 169, 39, 118, 52, 92, 198, 137, 238, 216, 157, 112, 25,
+185, 47, 247, 235, 220, 116, 152, 60, 185, 47, 247, 235, 220, 116,
+184, 104, 173, 188, 193, 118, 45, 76, 126, 156, 117, 54, 44, 142, 187,
+23, 238, 239, 213, 253, 58, 55, 29, 6, 173, 225, 193, 131, 7, 187, 46,
+194, 86, 25, 62, 24, 238, 186, 8, 219, 100, 104, 216, 117, 33, 182,
+200, 112, 1, 251, 90, 77, 110, 224, 174, 139, 208, 94, 134, 59, 34,
+203, 22, 5, 213, 222, 28, 102, 44, 220, 122, 251, 172, 53, 213, 222,
+218, 184, 112, 177, 221, 179, 111, 241, 152, 216, 183, 193, 230, 185,
+79, 246, 101, 139, 172, 211, 254, 203, 178, 78, 218, 215, 221, 241,
+115, 251, 140, 238, 166, 98, 70, 119, 109, 104, 190, 28, 221, 157, 47,
+231, 75, 30, 231, 180, 7, 11, 43, 29, 221, 29, 44, 252, 28, 77, 200,
+164, 176, 114, 27, 242, 207, 103, 100, 180, 133, 229, 113, 103, 167,
+18, 172, 42, 55, 82, 42, 129, 38, 229, 229, 11, 75, 231, 219, 19, 218,
+231, 167, 136, 107, 135, 113, 233, 244, 151, 65, 218, 30, 91, 90, 231,
+127, 173, 134, 184, 255, 117, 123, 227, 245, 219, 118, 255, 203, 24,
+205, 62, 94, 167, 49, 223, 218, 248, 184, 231, 235, 228, 219, 67, 235,
+255, 92, 170, 245, 127, 191, 125, 167, 250, 63, 201, 156, 255, 67, 43,
+83, 254, 181, 233, 157, 92, 235, 159, 210, 255, 90, 255, 228, 173, 99,
+223, 250, 231, 134, 89, 84, 219, 102, 194, 57, 131, 207, 228, 41, 120,
+152, 251, 150, 111, 86, 139, 66, 131, 207, 204, 230, 142, 204, 166,
+73, 179, 5, 251, 175, 145, 215, 231, 159, 46, 95, 51, 251, 54, 81,
+127, 73, 255, 108, 147, 197, 228, 161, 251, 167, 200, 201, 67, 179,
+165, 228, 238, 152, 250, 130, 235, 57, 163, 187, 44, 125, 153, 151,
+219, 100, 122, 23, 111, 211, 217, 92, 184, 166, 149, 88, 153, 158,
+190, 78, 158, 202, 191, 174, 124, 117, 246, 241, 218, 161, 28, 229,
+249, 117, 185, 59, 127, 91, 112, 87, 70, 123, 36, 198, 192, 133, 171,
+61, 191, 46, 185, 180, 129, 124, 177, 99, 185, 86, 190, 58, 251, 212,
+250, 217, 76, 173, 239, 31, 220, 58, 191, 239, 132, 253, 168, 219,
+242, 186, 250, 233, 10, 243, 211, 249, 169, 12, 185, 240, 100, 54,
+184, 160, 205, 132, 101, 200, 73, 39, 51, 115, 204, 181, 39, 51, 35,
+159, 159, 58, 169, 211, 52, 33, 158, 126, 125, 121, 179, 252, 99, 229,
+171, 179, 175, 190, 126, 118, 204, 170, 239, 53, 214, 120, 239, 18,
+126, 26, 114, 199, 233, 254, 67, 87, 18, 186, 166, 242, 171, 43, 31,
+157, 139, 179, 45, 52, 13, 121, 125, 245, 229, 245, 249, 55, 233, 223,
+41, 251, 182, 241, 94, 26, 128, 203, 100, 18, 44, 38, 225, 49, 102,
+92, 52, 123, 26, 27, 121, 156, 211, 158, 159, 90, 169, 25, 111, 253,
+28, 237, 56, 79, 114, 27, 242, 207, 231, 70, 85, 26, 119, 37, 124,
+100, 214, 108, 168, 147, 187, 177, 93, 203, 157, 174, 8, 116, 109, 8,
+165, 233, 112, 152, 95, 92, 59, 140, 75, 167, 191, 12, 210, 246, 216,
+210, 58, 255, 107, 53, 196, 253, 175, 219, 27, 175, 223, 182, 251, 95,
+198, 104, 246, 241, 58, 141, 249, 150, 222, 109, 232, 210, 122, 249,
+246, 208, 250, 63, 151, 106, 253, 223, 111, 223, 169, 254, 207, 223,
+155, 57, 29, 73, 202, 191, 254, 59, 55, 173, 127, 74, 255, 107, 253,
+147, 183, 142, 125, 235, 159, 0, 0, 0, 0, 0, 0, 0, 0, 192, 163, 19,
+174, 168, 225, 49, 180, 18, 194, 172, 157, 160, 53, 19, 114, 117, 68,
+113, 188, 176, 82, 179, 238, 194, 207, 145, 214, 105, 84, 43, 52, 130,
+51, 242, 53, 25, 69, 30, 1, 116, 118, 183, 106, 99, 53, 185, 145, 86,
+37, 84, 164, 188, 124, 97, 233, 124, 123, 66, 251, 252, 20, 113, 237,
+48, 46, 157, 254, 50, 72, 219, 67, 107, 117, 200, 255, 90, 13, 113,
+255, 235, 246, 198, 235, 183, 237, 254, 151, 49, 250, 10, 68, 46, 215,
+202, 71, 241, 113, 207, 215, 201, 183, 135, 214, 255, 185, 84, 235,
+255, 126, 251, 78, 245, 127, 185, 38, 139, 116, 36, 41, 255, 218, 244,
+78, 174, 245, 79, 233, 127, 173, 127, 242, 214, 177, 111, 253, 19, 0,
+0, 0, 0, 0, 0, 0, 0, 32, 244, 223, 45, 133, 210, 248, 124, 20, 201,
+212, 249, 29, 145, 191, 63, 219, 161, 253, 118, 202, 207, 203, 63,
+187, 156, 51, 9, 207, 23, 134, 100, 234, 120, 138, 88, 13, 164, 164,
+206, 202, 152, 52, 157, 182, 62, 125, 234, 252, 254, 124, 67, 122, 6,
+42, 230, 227, 71, 35, 53, 191, 84, 55, 63, 104, 247, 252, 23, 117,
+126, 14, 124, 126, 71, 75, 237, 203, 253, 95, 223, 201, 45, 149, 187,
+47, 111, 146, 127, 170, 124, 77, 236, 171, 155, 15, 118, 177, 187,
+154, 57, 226, 61, 82, 147, 197, 99, 154, 180, 8, 138, 139, 207, 124,
+218, 25, 100, 59, 123, 172, 167, 79, 181, 14, 109, 126, 88, 190, 198,
+228, 117, 249, 55, 47, 95, 253, 204, 110, 44, 182, 105, 141, 199, 252,
+211, 140, 117, 219, 87, 115, 255, 110, 254, 252, 250, 152, 24, 27, 41,
+99, 115, 251, 113, 249, 106, 249, 55, 41, 107, 187, 234, 23, 0, 0, 0,
+0, 0, 0, 240, 248, 81, 55, 127, 227, 175, 95, 242, 103, 155, 194, 245,
+57, 82, 35, 255, 220, 181, 200, 22, 197, 231, 175, 98, 31, 126, 114,
+147, 114, 95, 234, 175, 191, 146, 26, 242, 174, 77, 161, 220, 230,
+156, 152, 33, 90, 240, 213, 65, 234, 44, 192, 66, 202, 253, 250, 179,
+231, 141, 173, 80, 171, 171, 31, 127, 230, 82, 159, 129, 213, 143, 31,
+29, 183, 126, 147, 207, 126, 201, 210, 200, 213, 83, 220, 2, 146, 250,
+254, 225, 54, 88, 175, 178, 245, 95, 194, 195, 180, 38, 144, 173, 255,
+90, 112, 15, 242, 220, 181, 22, 224, 223, 179, 203, 111, 1, 161, 239,
+165, 15, 125, 223, 133, 62, 214, 228, 188, 246, 100, 253, 72, 15, 211,
+156, 118, 40, 245, 231, 200, 67, 143, 108, 134, 102, 173, 77, 218,
+198, 231, 232, 181, 186, 225, 54, 112, 159, 240, 35, 55, 179, 202,
+235, 192, 29, 187, 218, 181, 222, 23, 235, 43, 171, 22, 66, 99, 130,
+108, 31, 229, 88, 33, 228, 172, 239, 121, 242, 84, 11, 168, 147, 235,
+222, 151, 237, 39, 37, 167, 82, 235, 53, 24, 142, 13, 122, 11, 210,
+252, 211, 204, 191, 0, 0, 0, 0, 0, 0, 0, 0, 192, 229, 81, 119, 183,
+252, 60, 174, 186, 207, 165, 122, 119, 220, 133, 216, 4, 197, 221, 63,
+253, 45, 146, 55, 63, 75, 44, 61, 191, 183, 183, 59, 63, 105, 105, 82,
+123, 142, 242, 174, 160, 106, 249, 211, 246, 183, 157, 228, 253, 79,
+131, 251, 29, 235, 79, 208, 208, 60, 195, 136, 250, 191, 184, 99, 187,
+234, 127, 122, 170, 68, 218, 255, 97, 250, 213, 253, 111, 203, 239,
+252, 239, 203, 234, 236, 79, 215, 95, 59, 224, 247, 195, 13, 239, 125,
+109, 239, 170, 75, 199, 225, 221, 177, 183, 225, 127, 58, 239, 186,
+254, 247, 239, 95, 191, 174, 255, 155, 216, 95, 87, 127, 251, 78, 186,
+196, 190, 84, 215, 230, 79, 13, 208, 91, 144, 242, 92, 1, 69, 26, 123,
+158, 146, 187, 207, 115, 220, 67, 246, 30, 208, 186, 21, 241, 179,
+167, 189, 25, 134, 219, 231, 95, 75, 234, 174, 246, 143, 158, 183,
+220, 235, 210, 80, 195, 133, 124, 239, 84, 207, 223, 96, 82, 174, 17,
+142, 65, 174, 143, 54, 63, 127, 179, 242, 111, 134, 109, 214, 63, 0,
+0, 0, 0, 0, 0, 155, 65, 91, 215, 230, 175, 110, 145, 191, 185, 146,
+191, 191, 218, 173, 220, 95, 201, 21, 218, 2, 210, 232, 191, 233, 142,
+251, 93, 30, 185, 92, 82, 114, 223, 147, 97, 222, 113, 185, 150, 11,
+63, 226, 171, 245, 244, 95, 167, 131, 166, 216, 167, 167, 196, 159,
+112, 18, 149, 94, 100, 23, 36, 183, 199, 190, 188, 248, 244, 78, 82,
+79, 163, 252, 220, 127, 193, 55, 239, 44, 201, 244, 13, 206, 223, 192,
+186, 102, 26, 219, 32, 253, 124, 106, 255, 185, 209, 74, 248, 194,
+214, 79, 53, 131, 82, 132, 101, 126, 171, 204, 192, 69, 74, 120, 193,
+94, 131, 210, 185, 243, 186, 167, 104, 186, 57, 159, 201, 76, 204,
+240, 205, 252, 50, 249, 114, 191, 180, 198, 39, 218, 177, 212, 160,
+141, 91, 194, 206, 89, 182, 43, 39, 231, 118, 199, 228, 78, 71, 230,
+30, 214, 156, 30, 118, 229, 224, 53, 22, 166, 88, 201, 255, 194, 191,
+151, 231, 127, 187, 197, 252, 239, 203, 67, 255, 147, 20, 254, 103,
+26, 209, 209, 170, 148, 166, 53, 244, 209, 208, 147, 39, 190, 175,
+186, 240, 159, 166, 238, 179, 235, 239, 186, 106, 206, 95, 216, 158,
+176, 65, 92, 83, 182, 112, 254, 26, 13, 189, 55, 109, 145, 180, 165,
+23, 201, 246, 80, 201, 148, 209, 168, 202, 55, 178, 58, 32, 150, 175,
+168, 125, 77, 94, 165, 142, 150, 216, 201, 195, 178, 177, 247, 3, 76,
+147, 233, 93, 36, 183, 134, 253, 135, 151, 221, 179, 129, 165, 214,
+53, 228, 168, 122, 233, 237, 1, 0, 0, 0, 216, 10, 159, 124, 177, 170,
+156, 98, 236, 254, 147, 47, 170, 240, 9, 133, 221, 70, 49, 147, 135,
+46, 174, 60, 62, 113, 41, 41, 85, 168, 229, 127, 35, 79, 233, 120,
+254, 225, 243, 194, 211, 132, 250, 218, 51, 199, 87, 205, 163, 29,
+240, 26, 215, 142, 156, 207, 76, 253, 187, 184, 102, 27, 247, 159,
+243, 83, 30, 123, 162, 197, 55, 201, 197, 75, 43, 60, 47, 218, 207,
+137, 77, 229, 219, 75, 94, 162, 115, 187, 85, 43, 54, 150, 219, 77,
+33, 242, 42, 207, 79, 123, 46, 189, 238, 127, 173, 20, 178, 254, 83,
+26, 178, 36, 49, 169, 222, 238, 156, 204, 95, 193, 227, 106, 84, 95,
+75, 69, 242, 80, 38, 107, 92, 147, 83, 234, 120, 137, 157, 60, 44,
+155, 244, 46, 105, 58, 189, 116, 75, 169, 171, 47, 46, 215, 215, 15,
+105, 126, 15, 107, 207, 249, 189, 141, 125, 190, 142, 148, 7, 173, 87,
+120, 251, 225, 146, 148, 127, 170, 182, 206, 198, 1, 49, 62, 88, 29,
+175, 119, 243, 126, 198, 250, 45, 252, 191, 65, 234, 107, 204, 122,
+42, 158, 54, 62, 14, 133, 30, 146, 82, 217, 6, 244, 148, 242, 236, 49,
+207, 107, 254, 144, 35, 180, 28, 169, 155, 173, 145, 13, 181, 87, 191,
+206, 63, 74, 253, 250, 35, 110, 74, 26, 151, 135, 227, 172, 159, 186,
+46, 103, 215, 39, 244, 94, 152, 74, 41, 229, 161, 140, 219, 46, 71, 4,
+19, 178, 255, 113, 175, 82, 156, 86, 119, 126, 95, 13, 227, 234, 114,
+112, 41, 98, 121, 199, 82, 1, 0, 0, 0, 0, 172, 202, 224, 98, 126, 58,
+63, 141, 73, 141, 204, 110, 105, 105, 147, 60, 82, 231, 159, 159, 78,
+102, 154, 6, 73, 245, 28, 140, 84, 158, 69, 74, 101, 41, 204, 25, 172,
+70, 157, 53, 177, 117, 60, 148, 71, 218, 86, 221, 18, 176, 73, 234,
+90, 29, 121, 42, 230, 11, 215, 18, 252, 60, 252, 22, 34, 243, 208, 90,
+134, 107, 191, 143, 159, 223, 47, 111, 244, 208, 122, 191, 217, 92,
+221, 135, 26, 20, 235, 159, 71, 211, 164, 60, 82, 109, 198, 233, 212,
+149, 54, 38, 7, 155, 36, 222, 239, 120, 171, 208, 116, 66, 63, 201,
+113, 95, 247, 97, 19, 207, 194, 247, 155, 99, 157, 209, 133, 252, 168,
+141, 46, 97, 10, 217, 78, 194, 54, 32, 37, 241, 86, 241, 120, 142,
+254, 187, 35, 53, 66, 219, 35, 95, 67, 122, 72, 122, 76, 27, 179, 101,
+203, 136, 149, 34, 245, 110, 177, 43, 104, 223, 125, 104, 50, 109,
+134, 221, 205, 58, 107, 243, 180, 250, 28, 123, 157, 220, 205, 134,
+250, 185, 251, 223, 23, 105, 51, 192, 97, 249, 132, 109, 39, 197, 55,
+191, 39, 194, 254, 147, 226, 251, 34, 177, 5, 181, 83, 198, 134, 242,
+118, 226, 60, 173, 121, 223, 251, 198, 189, 209, 166, 181, 2, 61, 167,
+166, 121, 175, 90, 6, 59, 143, 206, 253, 37, 54, 174, 91, 197, 150,
+105, 66, 109, 207, 223, 93, 247, 191, 255, 29, 132, 244, 65, 248, 93,
+135, 238, 169, 122, 57, 239, 217, 154, 159, 227, 114, 122, 117, 114,
+235, 109, 242, 186, 252, 126, 71, 250, 77, 41, 159, 34, 23, 246, 249,
+30, 15, 86, 12, 1, 176, 93, 180, 95, 231, 184, 53, 227, 131, 69, 83,
+185, 251, 37, 36, 255, 69, 164, 147, 235, 103, 223, 156, 60, 44, 219,
+106, 114, 94, 114, 119, 182, 203, 43, 255, 122, 114, 255, 89, 17, 171,
+179, 110, 253, 197, 253, 207, 203, 172, 149, 127, 187, 242, 88, 249,
+52, 123, 98, 246, 105, 237, 55, 172, 155, 116, 253, 172, 42, 247, 235,
+174, 89, 249, 181, 103, 133, 172, 222, 38, 214, 177, 209, 79, 187, 47,
+254, 111, 151, 60, 244, 185, 171, 207, 102, 245, 47, 125, 190, 254,
+120, 176, 217, 54, 192, 203, 144, 30, 195, 66, 123, 57, 171, 143, 143,
+178, 124, 205, 251, 191, 149, 175, 218, 126, 125, 125, 173, 76, 117,
+225, 120, 27, 104, 90, 255, 143, 218, 6, 180, 188, 99, 117, 150, 146,
+175, 227, 255, 109, 189, 7, 88, 71, 174, 215, 221, 190, 191, 135, 209,
+124, 143, 251, 79, 0, 0, 0, 0, 0, 128, 4, 195, 236, 193, 226, 65, 254,
+58, 92, 24, 134, 89, 86, 236, 179, 106, 63, 52, 130, 97, 46, 47, 181,
+105, 127, 217, 188, 35, 169, 209, 254, 73, 72, 66, 251, 80, 39, 162,
+253, 118, 28, 77, 253, 173, 20, 161, 250, 27, 105, 124, 245, 215, 235,
+144, 234, 63, 174, 135, 171, 191, 214, 4, 167, 254, 35, 141, 191, 253,
+229, 103, 94, 76, 165, 255, 67, 141, 229, 242, 63, 63, 149, 49, 164,
+254, 170, 202, 50, 79, 112, 67, 70, 149, 250, 175, 168, 228, 250, 203,
+127, 191, 35, 162, 172, 250, 203, 58, 203, 34, 193, 161, 136, 43, 244,
+95, 210, 89, 218, 4, 111, 243, 56, 163, 254, 253, 8, 203, 50, 193, 91,
+60, 50, 215, 127, 49, 194, 146, 18, 188, 201, 34, 115, 253, 235, 17,
+72, 127, 249, 249, 155, 46, 50, 215, 31, 16, 31, 222, 227, 252, 175,
+210, 95, 222, 123, 163, 210, 201, 245, 95, 32, 238, 45, 99, 124, 254,
+58, 233, 228, 250, 207, 19, 159, 70, 245, 151, 159, 191, 86, 234, 228,
+250, 223, 35, 18, 250, 203, 79, 75, 157, 92, 253, 57, 34, 165, 191,
+252, 181, 213, 201, 243, 255, 46, 241, 143, 132, 250, 253, 82, 39,
+215, 255, 14, 145, 208, 191, 255, 74, 169, 147, 235, 127, 155, 136,
+235, 223, 255, 1, 233, 228, 250, 223, 34, 126, 251, 223, 136, 250,
+191, 94, 174, 116, 114, 253, 111, 70, 112, 234, 47, 185, 200, 92, 255,
+217, 8, 149, 250, 139, 44, 210, 232, 127, 67, 135, 212, 175, 179, 56,
+163, 159, 125, 93, 199, 170, 255, 115, 192, 227, 138, 254, 242, 53,
+157, 82, 93, 196, 217, 14, 249, 140, 74, 161, 254, 130, 136, 42, 251,
+251, 87, 85, 140, 250, 129, 140, 162, 1, 229, 154, 70, 174, 254, 188,
+140, 169, 198, 171, 167, 159, 82, 248, 235, 159, 159, 147, 17, 79,
+187, 1, 241, 169, 175, 212, 243, 20, 31, 112, 159, 172, 71, 14, 232,
+79, 212, 145, 121, 92, 77, 227, 171, 103, 217, 151, 83, 132, 234, 121,
+130, 47, 197, 80, 213, 115, 250, 58, 17, 109, 195, 149, 43, 61, 201,
+149, 43, 9, 109, 131, 81, 10, 15, 193, 254, 51, 53, 47, 203, 63, 21,
+84, 51, 155, 7, 175, 142, 199, 227, 119, 14, 178, 107, 7, 166, 135,
+30, 103, 71, 227, 39, 6, 183, 62, 152, 102, 199, 87, 175, 13, 250,
+227, 163, 236, 153, 193, 205, 219, 211, 188, 57, 79, 70, 147, 190, 9,
+15, 14, 71, 147, 113, 190, 159, 142, 175, 94, 51, 227, 251, 173, 119,
+63, 188, 245, 171, 95, 30, 229, 233, 198, 199, 253, 171, 183, 214, 46,
+220, 193, 205, 241, 120, 58, 30, 103, 121, 230, 230, 47, 27, 220, 24,
+141, 70, 55, 6, 217, 199, 183, 243, 242, 221, 254, 56, 59, 62, 60, 60,
+58, 60, 60, 206, 166, 163, 209, 36, 151, 100, 215, 15, 71, 119, 198,
+55, 174, 103, 227, 34, 217, 56, 59, 190, 102, 203, 95, 52, 248, 188,
+124, 227, 219, 191, 249, 195, 199, 191, 187, 83, 190, 37, 61, 206,
+198, 31, 77, 167, 239, 229, 122, 227, 223, 255, 113, 250, 254, 157,
+177, 41, 239, 216, 216, 145, 159, 108, 156, 103, 88, 132, 223, 191,
+253, 115, 19, 190, 99, 210, 221, 186, 61, 58, 50, 249, 28, 151, 67,
+215, 184, 212, 207, 95, 62, 58, 58, 120, 50, 223, 191, 55, 157, 222,
+124, 41, 51, 161, 163, 143, 198, 217, 141, 27, 207, 14, 140, 222, 244,
+137, 103, 14, 134, 31, 76, 55, 224, 174, 199, 131, 6, 3, 245, 86, 49,
+3, 152, 249, 127, 178, 252, 255, 197, 223, 123, 217, 255, 1, 95, 185,
+119, 136
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define BACKGROUND_HANDLE 0
+#define BACKGROUND_WIDTH 224
+#define BACKGROUND_HEIGHT 256
+#define BACKGROUND_CELLS 1
+#define SPRITES_HANDLE 1
+#define SPRITES_WIDTH 16
+#define SPRITES_HEIGHT 16
+#define SPRITES_CELLS 100
+#define LIFE_HANDLE 2
+#define LIFE_WIDTH 8
+#define LIFE_HEIGHT 8
+#define LIFE_CELLS 1
+#define ARROW_HANDLE 3
+#define ARROW_WIDTH 48
+#define ARROW_HEIGHT 48
+#define ARROW_CELLS 1
+#define FONT_HANDLE 4
+#define FONT_WIDTH 8
+#define FONT_HEIGHT 8
+#define FONT_CELLS 128
+#define ASSETS_END 112084UL
+static const shape_t BACKGROUND_SHAPE = {0, 224, 256, 0};
+static const shape_t SPRITES_SHAPE = {1, 16, 16, 0};
+static const shape_t LIFE_SHAPE = {2, 8, 8, 0};
+static const shape_t ARROW_SHAPE = {3, 48, 48, 0};
+static const shape_t FONT_SHAPE = {4, 8, 8, 0};

File diff suppressed because it is too large
+ 1 - 0
converted-assets/invaders_assets.h


+ 819 - 0
converted-assets/jnr_assets.h

@@ -0,0 +1,819 @@
+static const PROGMEM uint8_t __assets[11817] = {
+0, 0, 0, 5, 0, 0, 0, 1, 240, 32, 3, 8, 240, 144, 17, 7, 1, 0, 0, 5,
+128, 187, 0, 1, 146, 32, 3, 8, 146, 100, 8, 7, 2, 0, 0, 5, 4, 216, 0,
+1, 104, 32, 3, 8, 104, 100, 8, 7, 3, 0, 0, 5, 84, 236, 0, 1, 116, 32,
+3, 8, 116, 100, 8, 7, 4, 0, 0, 5, 252, 2, 1, 1, 32, 64, 0, 8, 32, 128,
+48, 7, 5, 0, 0, 5, 252, 146, 1, 1, 2, 4, 0, 8, 2, 4, 24, 7, 34, 255,
+255, 255, 0, 0, 0, 0, 120, 156, 237, 125, 93, 136, 100, 215, 118, 222,
+41, 149, 60, 37, 114, 199, 170, 177, 19, 147, 137, 163, 168, 38, 2,
+99, 129, 95, 198, 76, 72, 58, 120, 50, 71, 132, 128, 243, 224, 7, 99,
+232, 184, 195, 132, 155, 185, 220, 135, 251, 96, 72, 228, 167, 140,
+195, 120, 170, 164, 161, 239, 52, 52, 204, 56, 248, 197, 96, 131, 244,
+34, 184, 111, 185, 230, 98, 40, 168, 208, 93, 138, 80, 36, 132, 97,
+252, 18, 156, 55, 213, 88, 15, 178, 210, 80, 85, 51, 195, 149, 74,
+234, 154, 179, 179, 215, 94, 123, 157, 181, 246, 207, 249, 171, 238,
+233, 177, 110, 206, 58, 84, 245, 169, 115, 246, 183, 215, 207, 94,
+123, 237, 223, 115, 58, 73, 90, 106, 169, 165, 150, 90, 106, 169, 165,
+150, 90, 106, 233, 103, 151, 94, 251, 25, 161, 231, 109, 199, 211,
+162, 231, 109, 199, 150, 90, 106, 169, 165, 150, 90, 106, 169, 165,
+150, 90, 106, 169, 165, 150, 90, 250, 59, 65, 123, 187, 219, 191, 243,
+188, 101, 56, 57, 189, 190, 183, 189, 189, 253, 188, 133, 56, 57, 189,
+174, 75, 163, 80, 141, 61, 67, 111, 159, 161, 56, 27, 211, 158, 46,
+142, 184, 87, 189, 110, 148, 216, 54, 116, 198, 66, 53, 167, 215, 119,
+119, 10, 244, 16, 90, 212, 85, 99, 50, 217, 127, 94, 133, 183, 183,
+189, 179, 253, 43, 209, 27, 154, 118, 27, 169, 241, 107, 147, 231,
+231, 133, 175, 239, 237, 236, 22, 150, 134, 213, 162, 102, 44, 179,
+106, 60, 31, 69, 94, 55, 214, 14, 13, 46, 74, 163, 110, 86, 147, 177,
+213, 99, 239, 84, 37, 172, 71, 96, 244, 215, 94, 11, 44, 190, 129, 26,
+191, 150, 171, 241, 60, 10, 4, 244, 248, 149, 192, 115, 94, 103, 167,
+170, 95, 28, 123, 76, 97, 142, 207, 154, 246, 118, 99, 173, 32, 151,
+70, 125, 121, 184, 56, 0, 219, 164, 76, 182, 79, 78, 215, 39, 19, 25,
+94, 45, 77, 52, 141, 247, 225, 250, 206, 78, 237, 156, 28, 61, 118,
+130, 60, 75, 168, 190, 198, 133, 4, 141, 57, 136, 250, 59, 238, 69,
+45, 10, 150, 71, 253, 226, 200, 221, 106, 23, 52, 104, 84, 221, 107,
+43, 92, 98, 197, 201, 222, 62, 186, 150, 32, 40, 142, 9, 150, 70, 125,
+171, 142, 89, 143, 93, 171, 199, 110, 53, 234, 180, 232, 250, 100,
+172, 69, 222, 217, 117, 175, 129, 91, 161, 72, 245, 115, 34, 61, 118,
+160, 124, 119, 246, 34, 222, 250, 44, 9, 100, 30, 239, 186, 134, 203,
+139, 163, 145, 36, 86, 143, 93, 83, 161, 118, 246, 206, 184, 64, 174,
+79, 246, 247, 247, 188, 186, 156, 23, 199, 158, 173, 60, 181, 200,
+209, 99, 175, 177, 25, 78, 72, 38, 202, 184, 102, 131, 34, 218, 223,
+107, 108, 80, 169, 199, 206, 153, 235, 177, 61, 137, 5, 221, 49, 7,
+158, 218, 36, 53, 223, 123, 14, 122, 140, 129, 181, 176, 187, 169,
+229, 16, 195, 32, 90, 53, 40, 15, 81, 37, 242, 226, 56, 195, 10, 2,
+53, 122, 91, 134, 87, 173, 199, 88, 87, 125, 93, 49, 26, 4, 93, 32,
+46, 129, 189, 231, 80, 30, 215, 39, 94, 13, 129, 88, 165, 171, 199,
+182, 190, 214, 208, 156, 59, 86, 114, 46, 142, 51, 13, 88, 158, 221,
+160, 122, 140, 109, 75, 208, 132, 38, 219, 88, 128, 215, 101, 127,
+241, 116, 101, 45, 231, 63, 113, 204, 118, 61, 111, 59, 154, 217, 82,
+163, 64, 17, 87, 13, 157, 135, 206, 238, 108, 10, 229, 122, 160, 199,
+120, 111, 12, 241, 179, 17, 123, 204, 101, 103, 111, 18, 168, 49, 62,
+43, 239, 114, 57, 77, 168, 245, 104, 158, 137, 134, 236, 59, 106, 128,
+30, 227, 51, 171, 38, 166, 166, 179, 64, 182, 249, 216, 109, 20, 116,
+209, 155, 118, 183, 221, 226, 216, 195, 230, 233, 172, 234, 201, 117,
+209, 22, 94, 207, 187, 186, 141, 178, 32, 179, 79, 198, 174, 26, 215,
+243, 254, 205, 153, 16, 54, 134, 64, 212, 215, 109, 200, 120, 66, 110,
+228, 170, 177, 125, 221, 158, 238, 96, 135, 244, 12, 251, 91, 147,
+141, 226, 21, 233, 225, 169, 97, 175, 111, 239, 216, 102, 234, 236, 2,
+49, 88, 45, 236, 114, 85, 146, 117, 171, 29, 30, 76, 153, 203, 215,
+115, 225, 207, 216, 193, 76, 69, 221, 111, 194, 238, 187, 243, 249,
+252, 128, 134, 127, 162, 37, 55, 63, 247, 3, 7, 59, 171, 2, 161, 138,
+90, 55, 253, 252, 8, 71, 93, 251, 129, 91, 237, 114, 63, 107, 119,
+155, 43, 206, 89, 213, 248, 102, 193, 234, 187, 243, 9, 146, 152, 93,
+96, 195, 231, 167, 59, 60, 122, 63, 163, 2, 49, 182, 221, 221, 173,
+169, 72, 174, 6, 116, 144, 157, 14, 162, 17, 151, 71, 233, 103, 221,
+117, 180, 97, 183, 110, 27, 248, 221, 163, 73, 78, 219, 142, 180, 219,
+48, 166, 217, 201, 5, 247, 20, 124, 230, 132, 97, 23, 36, 168, 165,
+200, 156, 213, 24, 147, 184, 118, 210, 194, 76, 156, 68, 244, 56, 171,
+78, 35, 6, 221, 154, 236, 132, 30, 123, 123, 147, 191, 152, 255, 173,
+23, 175, 72, 236, 138, 226, 216, 59, 117, 186, 55, 183, 1, 104, 82,
+157, 86, 19, 187, 149, 174, 199, 147, 131, 35, 167, 91, 98, 3, 86, 62,
+41, 103, 234, 137, 95, 141, 12, 157, 86, 41, 48, 97, 121, 236, 110,
+239, 214, 43, 15, 87, 143, 185, 171, 254, 238, 110, 96, 232, 130, 92,
+27, 24, 186, 38, 65, 121, 28, 136, 249, 171, 138, 212, 142, 30, 230,
+151, 192, 69, 12, 239, 205, 166, 60, 59, 2, 61, 230, 245, 245, 200,
+43, 199, 62, 233, 33, 10, 36, 166, 135, 223, 88, 62, 43, 210, 122,
+204, 231, 98, 30, 174, 34, 53, 151, 70, 174, 135, 108, 240, 188, 228,
+186, 48, 156, 73, 186, 103, 72, 168, 199, 126, 173, 210, 208, 36, 162,
+85, 174, 21, 221, 219, 141, 233, 177, 109, 84, 57, 45, 105, 139, 9,
+244, 56, 26, 239, 105, 71, 169, 21, 176, 28, 61, 230, 174, 30, 94, 69,
+160, 5, 161, 29, 51, 212, 124, 214, 148, 151, 71, 189, 26, 66, 106,
+24, 55, 196, 74, 191, 47, 58, 232, 126, 114, 235, 84, 59, 207, 190,
+64, 238, 153, 234, 49, 222, 219, 175, 87, 30, 71, 121, 176, 202, 221,
+106, 204, 35, 114, 207, 236, 249, 207, 221, 51, 168, 34, 216, 14, 142,
+235, 197, 43, 27, 217, 80, 114, 87, 143, 176, 56, 88, 248, 221, 51,
+112, 44, 19, 173, 112, 56, 81, 157, 214, 9, 180, 84, 54, 8, 13, 138,
+99, 215, 89, 76, 56, 29, 97, 203, 100, 67, 69, 234, 148, 199, 189,
+185, 76, 55, 193, 86, 112, 63, 95, 254, 245, 108, 110, 100, 199, 130,
+8, 35, 217, 233, 211, 220, 56, 214, 94, 29, 61, 80, 97, 221, 29, 153,
+195, 88, 152, 130, 213, 56, 210, 55, 220, 203, 139, 195, 92, 61, 187,
+242, 168, 83, 63, 108, 167, 100, 239, 224, 72, 12, 66, 198, 56, 190,
+245, 75, 99, 59, 239, 51, 238, 197, 35, 217, 169, 19, 117, 120, 107,
+164, 180, 37, 112, 239, 192, 83, 99, 111, 226, 103, 192, 138, 209,
+154, 202, 51, 144, 220, 147, 110, 62, 63, 168, 89, 61, 160, 216, 116,
+194, 123, 19, 65, 230, 206, 190, 83, 195, 236, 24, 25, 207, 183, 113,
+233, 235, 212, 226, 213, 125, 165, 105, 21, 147, 142, 58, 188, 149,
+69, 114, 207, 140, 157, 242, 154, 33, 49, 30, 94, 212, 235, 237, 188,
+81, 63, 21, 2, 45, 84, 230, 14, 223, 44, 233, 250, 49, 175, 163, 70,
+222, 115, 185, 55, 57, 212, 121, 101, 106, 62, 231, 59, 69, 33, 143,
+198, 31, 155, 202, 237, 145, 178, 122, 196, 20, 209, 74, 28, 212, 170,
+32, 251, 86, 212, 137, 201, 9, 201, 230, 55, 41, 40, 208, 157, 211,
+29, 54, 45, 84, 206, 58, 188, 169, 91, 5, 168, 233, 53, 42, 136, 21,
+85, 169, 57, 147, 185, 65, 158, 230, 230, 49, 63, 2, 29, 160, 250,
+157, 130, 10, 64, 247, 89, 141, 72, 129, 220, 155, 219, 174, 73, 101,
+62, 164, 70, 38, 244, 48, 25, 230, 53, 6, 82, 233, 126, 186, 169, 21,
+144, 233, 95, 108, 207, 235, 15, 210, 42, 201, 225, 28, 42, 98, 245,
+168, 206, 199, 200, 115, 95, 150, 70, 76, 15, 36, 59, 99, 55, 182,
+179, 24, 160, 72, 196, 23, 26, 145, 46, 142, 133, 239, 9, 158, 30, 7,
+245, 252, 10, 190, 220, 210, 192, 252, 76, 253, 242, 124, 211, 182,
+74, 249, 52, 234, 158, 25, 231, 80, 78, 155, 208, 161, 176, 224, 129,
+206, 141, 120, 240, 125, 29, 125, 220, 75, 5, 4, 70, 241, 213, 208,
+122, 236, 235, 12, 204, 253, 253, 61, 221, 47, 216, 159, 232, 99, 124,
+207, 198, 192, 60, 148, 221, 147, 28, 54, 42, 143, 44, 243, 244, 184,
+231, 150, 10, 14, 65, 106, 230, 125, 223, 87, 227, 104, 60, 89, 64,
+25, 145, 247, 16, 217, 78, 204, 17, 235, 33, 18, 108, 84, 30, 162, 56,
+142, 14, 230, 218, 96, 80, 237, 165, 249, 77, 121, 104, 115, 205, 11,
+179, 96, 51, 78, 124, 61, 76, 121, 230, 85, 204, 38, 28, 231, 197, 64,
+127, 209, 7, 220, 54, 180, 25, 29, 74, 227, 29, 28, 77, 246, 23, 138,
+236, 71, 41, 20, 212, 160, 131, 3, 80, 179, 202, 189, 14, 252, 226, 0,
+51, 216, 179, 49, 84, 69, 172, 22, 185, 226, 185, 30, 216, 249, 57,
+37, 61, 160, 197, 59, 36, 243, 51, 65, 35, 57, 63, 58, 194, 134, 164,
+44, 43, 21, 232, 1, 104, 235, 183, 186, 203, 152, 205, 23, 210, 66,
+162, 165, 183, 141, 232, 230, 106, 72, 206, 71, 19, 99, 62, 12, 95,
+190, 30, 58, 104, 153, 139, 133, 170, 128, 255, 184, 122, 28, 129,
+222, 121, 24, 249, 219, 189, 195, 185, 147, 241, 222, 158, 44, 23,
+168, 27, 39, 40, 14, 193, 249, 200, 116, 64, 168, 57, 22, 242, 66, 17,
+233, 242, 0, 199, 130, 185, 231, 34, 45, 140, 55, 122, 133, 161, 111,
+228, 77, 236, 56, 147, 249, 238, 237, 121, 197, 113, 66, 58, 152, 59,
+114, 31, 146, 27, 184, 142, 5, 82, 161, 170, 230, 122, 160, 12, 86,
+102, 171, 199, 209, 124, 194, 89, 228, 13, 202, 228, 158, 85, 238,
+128, 38, 31, 72, 250, 147, 21, 132, 163, 135, 57, 203, 69, 118, 203,
+223, 74, 121, 100, 46, 206, 141, 14, 129, 30, 182, 79, 160, 245, 88,
+24, 47, 156, 228, 25, 228, 249, 29, 81, 182, 1, 120, 188, 121, 189,
+128, 24, 116, 140, 167, 56, 80, 178, 52, 103, 182, 158, 152, 25, 22,
+199, 28, 10, 36, 112, 46, 170, 4, 147, 201, 66, 217, 146, 161, 12,
+242, 214, 105, 18, 102, 123, 42, 106, 88, 69, 14, 179, 140, 173, 127,
+176, 96, 182, 14, 169, 188, 218, 128, 210, 7, 19, 143, 172, 243, 28,
+77, 176, 209, 147, 242, 82, 134, 71, 147, 72, 182, 134, 78, 224, 86,
+56, 224, 80, 19, 81, 31, 224, 242, 124, 206, 221, 35, 215, 112, 135,
+153, 189, 51, 49, 133, 18, 228, 151, 231, 225, 248, 229, 145, 168,
+230, 236, 106, 234, 120, 113, 124, 10, 122, 64, 57, 88, 61, 142, 37,
+95, 19, 52, 185, 199, 232, 163, 172, 161, 15, 140, 64, 222, 77, 116,
+43, 51, 79, 226, 116, 119, 225, 94, 94, 30, 182, 17, 61, 84, 236, 11,
+134, 198, 27, 233, 97, 179, 161, 204, 14, 69, 1, 28, 201, 224, 127,
+228, 57, 207, 129, 18, 26, 7, 213, 35, 247, 165, 3, 217, 223, 53, 201,
+132, 149, 208, 138, 202, 85, 100, 188, 81, 127, 202, 81, 3, 244, 144,
+76, 231, 158, 8, 46, 241, 48, 37, 184, 185, 96, 207, 100, 53, 112, 29,
+235, 128, 140, 100, 114, 95, 8, 230, 172, 198, 6, 197, 161, 92, 202,
+221, 96, 2, 206, 236, 122, 68, 88, 153, 185, 41, 240, 136, 138, 227,
+80, 137, 82, 59, 146, 197, 129, 10, 121, 204, 109, 255, 118, 3, 53,
+14, 220, 156, 50, 17, 21, 15, 156, 150, 29, 248, 22, 53, 18, 69, 122,
+80, 97, 219, 76, 140, 29, 76, 31, 128, 20, 242, 140, 120, 12, 151, 55,
+107, 203, 15, 125, 61, 88, 242, 35, 210, 195, 106, 28, 17, 247, 224,
+176, 64, 17, 236, 112, 80, 230, 50, 240, 234, 206, 218, 2, 53, 8, 212,
+32, 207, 218, 128, 14, 124, 61, 200, 123, 141, 23, 129, 247, 102, 54,
+101, 188, 142, 232, 62, 111, 22, 211, 3, 175, 113, 182, 57, 250, 16,
+89, 152, 139, 11, 229, 211, 113, 145, 156, 243, 42, 242, 242, 146,
+183, 108, 221, 201, 200, 151, 11, 200, 67, 49, 229, 197, 65, 41, 38,
+220, 119, 54, 215, 2, 53, 138, 114, 138, 54, 150, 46, 57, 185, 44, 68,
+99, 49, 207, 239, 21, 52, 232, 165, 100, 244, 240, 4, 60, 178, 25,
+234, 238, 194, 162, 160, 60, 84, 46, 84, 211, 242, 112, 156, 74, 216,
+114, 194, 85, 39, 152, 40, 224, 52, 124, 30, 185, 191, 240, 242, 102,
+189, 22, 133, 122, 44, 24, 86, 41, 122, 161, 30, 174, 140, 147, 216,
+117, 39, 197, 65, 84, 252, 104, 214, 160, 135, 252, 129, 249, 134,
+122, 100, 66, 251, 146, 172, 23, 129, 113, 227, 197, 49, 153, 200, 72,
+22, 211, 193, 246, 85, 107, 235, 193, 63, 51, 210, 35, 139, 232, 177,
+152, 75, 72, 145, 10, 11, 255, 174, 199, 10, 18, 88, 57, 15, 85, 85,
+134, 70, 223, 2, 86, 174, 97, 35, 122, 44, 84, 52, 238, 58, 186, 69,
+253, 217, 228, 189, 240, 238, 122, 89, 216, 48, 162, 213, 240, 93,
+187, 72, 141, 168, 30, 8, 206, 138, 244, 152, 91, 61, 124, 77, 241,
+230, 66, 66, 34, 68, 89, 200, 219, 1, 102, 97, 197, 246, 109, 84, 64,
+71, 113, 61, 16, 181, 240, 245, 88, 168, 60, 119, 243, 21, 196, 124,
+37, 117, 91, 248, 124, 109, 149, 48, 57, 123, 142, 133, 98, 179, 176,
+139, 208, 38, 133, 118, 153, 99, 143, 203, 47, 138, 172, 40, 151, 249,
+60, 163, 188, 80, 143, 120, 113, 144, 9, 179, 185, 175, 7, 218, 98,
+193, 146, 102, 242, 22, 7, 141, 220, 144, 126, 24, 41, 9, 187, 190,
+30, 11, 225, 224, 65, 216, 205, 121, 163, 217, 99, 106, 176, 21, 50,
+42, 176, 156, 187, 162, 34, 206, 75, 192, 209, 35, 147, 229, 157, 103,
+225, 89, 178, 72, 13, 223, 173, 12, 92, 121, 249, 205, 193, 73, 230,
+243, 220, 167, 77, 44, 89, 100, 161, 22, 84, 90, 86, 136, 140, 4, 164,
+188, 51, 254, 237, 26, 24, 161, 126, 155, 20, 24, 114, 30, 117, 173,
+88, 43, 171, 114, 163, 233, 12, 231, 34, 7, 123, 147, 92, 34, 86, 53,
+28, 17, 1, 78, 137, 88, 15, 252, 189, 144, 245, 87, 230, 236, 230,
+149, 251, 109, 150, 73, 206, 110, 73, 202, 1, 17, 211, 130, 107, 153,
+147, 175, 189, 73, 253, 92, 225, 62, 146, 176, 79, 180, 200, 221, 195,
+211, 99, 17, 54, 155, 153, 202, 75, 216, 215, 99, 46, 126, 103, 115,
+246, 69, 41, 81, 17, 45, 72, 96, 148, 137, 113, 194, 206, 148, 75,
+160, 5, 150, 90, 126, 43, 207, 73, 132, 82, 79, 247, 76, 129, 119,
+218, 123, 158, 156, 11, 39, 234, 26, 235, 74, 150, 198, 160, 133, 97,
+216, 6, 195, 69, 230, 8, 78, 119, 29, 53, 114, 158, 153, 211, 195, 88,
+184, 149, 130, 172, 25, 180, 4, 121, 54, 28, 22, 252, 36, 126, 145,
+59, 13, 236, 34, 234, 214, 210, 12, 115, 140, 189, 44, 170, 84, 18,
+51, 145, 94, 229, 217, 68, 201, 120, 64, 174, 28, 231, 73, 107, 77,
+25, 121, 130, 167, 162, 167, 151, 83, 169, 168, 108, 10, 74, 100, 49,
+183, 166, 206, 100, 240, 147, 106, 100, 142, 138, 81, 241, 242, 90,
+155, 7, 93, 21, 239, 193, 148, 144, 40, 77, 214, 76, 184, 121, 69,
+105, 20, 230, 40, 125, 62, 94, 199, 5, 191, 185, 213, 182, 57, 51,
+151, 171, 192, 47, 162, 53, 242, 89, 146, 241, 243, 19, 106, 225, 187,
+85, 165, 15, 60, 3, 170, 40, 173, 250, 185, 112, 54, 126, 148, 57, 27,
+122, 22, 28, 227, 225, 238, 153, 82, 180, 243, 248, 45, 164, 159, 17,
+53, 98, 35, 221, 111, 31, 45, 206, 222, 143, 79, 155, 178, 231, 19,
+85, 78, 135, 116, 15, 134, 58, 41, 223, 90, 29, 4, 157, 125, 43, 213,
+82, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82,
+75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75,
+45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 45,
+181, 212, 82, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 45, 181,
+212, 82, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 45, 181, 212,
+82, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 255, 159, 80, 18,
+161, 139, 177, 139, 101, 212, 81, 211, 134, 136, 222, 6, 136, 89, 67,
+68, 95, 45, 207, 0, 177, 106, 140, 88, 55, 70, 100, 13, 17, 131, 120,
+185, 150, 35, 70, 207, 26, 145, 214, 68, 176, 251, 105, 196, 180, 150,
+44, 121, 170, 186, 136, 94, 110, 210, 97, 77, 68, 55, 79, 166, 17,
+179, 72, 130, 81, 112, 37, 247, 141, 218, 136, 33, 137, 85, 27, 49,
+32, 155, 170, 56, 226, 143, 130, 43, 125, 72, 151, 106, 47, 212, 136,
+101, 103, 234, 223, 238, 254, 159, 0, 97, 42, 171, 69, 60, 10, 185,
+116, 195, 42, 208, 181, 136, 142, 65, 4, 149, 170, 27, 186, 103, 23,
+52, 183, 136, 175, 99, 136, 145, 127, 169, 163, 24, 161, 98, 136, 105,
+136, 24, 25, 68, 55, 142, 136, 69, 24, 107, 171, 66, 132, 184, 212,
+65, 9, 161, 208, 127, 78, 173, 123, 6, 97, 44, 115, 181, 8, 209, 67,
+9, 135, 217, 13, 16, 141, 17, 169, 114, 16, 194, 188, 125, 228, 145,
+42, 131, 232, 19, 162, 235, 212, 44, 7, 49, 40, 68, 76, 41, 73, 186,
+116, 162, 88, 138, 86, 24, 104, 213, 53, 98, 96, 16, 107, 200, 149,
+17, 106, 229, 32, 84, 37, 162, 163, 214, 18, 209, 113, 17, 41, 33,
+250, 140, 232, 170, 108, 32, 16, 84, 154, 16, 161, 53, 98, 24, 65,
+244, 0, 177, 20, 136, 81, 9, 162, 179, 54, 8, 167, 80, 123, 106, 203,
+34, 86, 128, 80, 30, 34, 51, 183, 60, 196, 42, 255, 43, 17, 3, 243,
+13, 14, 250, 130, 65, 60, 206, 17, 212, 194, 116, 213, 122, 171, 163,
+238, 40, 42, 15, 66, 140, 146, 174, 65, 124, 35, 16, 43, 50, 200, 205,
+142, 122, 39, 71, 104, 163, 101, 104, 151, 238, 167, 110, 75, 78, 118,
+235, 14, 161, 114, 56, 8, 101, 17, 170, 0, 97, 170, 211, 97, 142, 24,
+250, 8, 50, 169, 206, 11, 16, 157, 105, 39, 85, 153, 143, 24, 153,
+128, 209, 139, 34, 146, 85, 49, 2, 157, 83, 77, 251, 22, 49, 212, 182,
+186, 145, 36, 183, 65, 112, 172, 228, 136, 48, 137, 12, 98, 96, 17,
+131, 44, 71, 116, 180, 103, 165, 14, 98, 25, 67, 164, 22, 161, 121,
+247, 166, 203, 11, 131, 105, 20, 209, 215, 159, 84, 34, 58, 128, 72,
+250, 119, 102, 91, 253, 153, 209, 195, 149, 106, 6, 193, 181, 99, 117,
+251, 155, 33, 120, 121, 7, 178, 77, 6, 189, 217, 213, 190, 174, 52,
+235, 28, 161, 70, 29, 68, 232, 58, 64, 23, 53, 34, 35, 196, 213, 254,
+244, 213, 30, 84, 154, 16, 145, 170, 153, 45, 14, 245, 153, 41, 160,
+142, 210, 191, 147, 91, 131, 209, 160, 187, 30, 72, 30, 83, 70, 216,
+226, 80, 159, 27, 115, 3, 34, 75, 86, 233, 168, 127, 71, 69, 16, 75,
+173, 205, 178, 175, 152, 44, 226, 215, 87, 195, 81, 255, 3, 117, 223,
+65, 116, 115, 196, 32, 64, 168, 39, 75, 149, 244, 62, 211, 78, 24, 32,
+64, 177, 101, 42, 16, 83, 141, 208, 82, 126, 245, 72, 35, 158, 232,
+223, 2, 129, 250, 174, 186, 113, 132, 2, 196, 113, 12, 1, 113, 123,
+37, 17, 159, 106, 222, 128, 120, 162, 146, 60, 129, 131, 80, 119, 61,
+4, 36, 65, 75, 4, 136, 37, 218, 116, 161, 17, 202, 161, 251, 69, 136,
+85, 95, 197, 233, 1, 33, 122, 62, 98, 80, 128, 88, 56, 136, 140, 17,
+235, 34, 132, 114, 16, 20, 123, 0, 156, 22, 34, 6, 18, 241, 25, 35,
+134, 85, 136, 190, 135, 40, 33, 68, 216, 166, 233, 73, 99, 196, 113,
+125, 196, 116, 80, 31, 145, 34, 34, 109, 138, 152, 165, 117, 210, 58,
+136, 97, 125, 68, 75, 45, 181, 212, 82, 75, 45, 181, 212, 82, 75, 45,
+181, 212, 82, 75, 45, 125, 123, 41, 97, 26, 37, 13, 169, 211, 24, 209,
+109, 10, 208, 136, 243, 13, 17, 189, 100, 216, 20, 49, 104, 186, 100,
+215, 111, 186, 200, 119, 110, 208, 116, 201, 238, 92, 218, 28, 241,
+176, 33, 162, 247, 135, 239, 55, 212, 163, 183, 148, 8, 152, 240, 173,
+70, 220, 16, 136, 110, 141, 69, 222, 238, 236, 114, 154, 208, 98, 92,
+247, 65, 141, 69, 222, 238, 44, 233, 189, 69, 92, 156, 37, 152, 66,
+169, 62, 128, 53, 31, 115, 186, 213, 175, 133, 232, 223, 93, 246, 236,
+98, 48, 76, 224, 213, 208, 99, 208, 95, 245, 112, 193, 185, 163, 17,
+117, 214, 170, 175, 13, 214, 93, 148, 5, 16, 179, 106, 192, 242, 246,
+96, 157, 244, 102, 22, 241, 195, 105, 37, 160, 187, 190, 53, 200, 146,
+238, 200, 252, 24, 170, 26, 117, 171, 187, 94, 105, 30, 47, 88, 1,
+175, 94, 174, 70, 244, 12, 226, 28, 254, 120, 33, 185, 116, 161, 22,
+98, 133, 136, 107, 26, 113, 163, 210, 184, 111, 104, 68, 186, 196,
+208, 112, 59, 57, 215, 249, 168, 210, 186, 211, 222, 250, 166, 174,
+29, 47, 25, 68, 239, 197, 126, 191, 10, 209, 213, 136, 225, 42, 233,
+154, 21, 241, 236, 218, 249, 173, 65, 21, 226, 101, 173, 199, 112,
+153, 244, 47, 247, 103, 26, 145, 189, 116, 99, 176, 170, 216, 205,
+241, 74, 210, 89, 165, 179, 36, 189, 156, 174, 117, 249, 101, 255,
+104, 58, 88, 93, 123, 177, 20, 241, 71, 175, 36, 203, 116, 214, 83,
+55, 134, 25, 236, 102, 24, 36, 233, 106, 88, 94, 136, 127, 254, 103,
+26, 49, 77, 179, 153, 118, 222, 129, 90, 95, 184, 166, 150, 195, 114,
+77, 254, 219, 159, 36, 203, 225, 122, 184, 158, 106, 68, 170, 17, 74,
+77, 43, 16, 159, 93, 72, 150, 106, 165, 30, 33, 66, 87, 248, 10, 196,
+40, 121, 237, 114, 178, 82, 35, 245, 214, 84, 87, 144, 161, 154, 190,
+15, 83, 177, 176, 220, 55, 45, 68, 164, 211, 228, 150, 234, 100, 157,
+169, 174, 122, 67, 117, 7, 86, 48, 134, 186, 64, 7, 179, 2, 196, 52,
+249, 14, 120, 120, 103, 221, 121, 240, 80, 163, 179, 255, 133, 43, 24,
+211, 139, 105, 1, 226, 141, 89, 242, 95, 19, 157, 240, 210, 202, 44,
+80, 166, 235, 223, 210, 17, 98, 169, 85, 185, 230, 35, 110, 218, 191,
+191, 183, 76, 30, 235, 106, 158, 205, 150, 157, 165, 65, 252, 219,
+161, 82, 15, 97, 230, 250, 208, 243, 224, 124, 107, 1, 212, 164, 139,
+3, 53, 189, 97, 66, 103, 186, 254, 247, 159, 42, 165, 149, 31, 249,
+136, 14, 69, 51, 93, 206, 47, 156, 187, 120, 83, 77, 47, 235, 32, 55,
+24, 165, 235, 223, 77, 33, 252, 24, 59, 59, 136, 46, 35, 46, 189, 112,
+123, 235, 205, 116, 116, 81, 219, 102, 56, 29, 102, 255, 60, 85, 127,
+217, 55, 235, 31, 5, 8, 165, 182, 134, 217, 127, 153, 93, 187, 0, 219,
+19, 96, 41, 245, 159, 13, 97, 190, 126, 166, 219, 172, 89, 79, 54,
+243, 61, 70, 220, 74, 179, 91, 201, 181, 203, 137, 246, 117, 88, 51,
+187, 58, 84, 31, 224, 36, 255, 236, 21, 88, 155, 36, 4, 45, 167, 95,
+50, 11, 23, 171, 36, 189, 161, 155, 128, 206, 178, 171, 178, 91, 67,
+245, 17, 34, 166, 224, 42, 57, 98, 104, 219, 176, 255, 100, 254, 21,
+249, 210, 20, 240, 178, 3, 75, 176, 154, 199, 3, 68, 152, 86, 228, 6,
+86, 102, 8, 124, 35, 139, 4, 154, 25, 196, 205, 78, 231, 125, 181,
+210, 136, 251, 26, 161, 212, 186, 55, 51, 136, 243, 86, 113, 31, 161,
+185, 223, 234, 220, 121, 164, 166, 183, 134, 89, 223, 172, 70, 174,
+161, 18, 39, 111, 234, 74, 141, 138, 91, 4, 118, 154, 192, 27, 207,
+39, 47, 119, 238, 44, 111, 39, 55, 175, 109, 13, 204, 130, 218, 218,
+236, 132, 185, 172, 251, 31, 49, 196, 75, 233, 180, 63, 234, 221, 81,
+179, 171, 201, 242, 166, 93, 120, 92, 165, 22, 49, 146, 8, 187, 144,
+246, 214, 75, 233, 172, 63, 234, 62, 88, 38, 26, 177, 210, 149, 125,
+100, 22, 237, 70, 55, 95, 76, 182, 116, 112, 130, 148, 125, 131, 120,
+251, 69, 139, 248, 250, 226, 112, 54, 152, 194, 126, 176, 171, 29, 64,
+172, 250, 29, 168, 86, 163, 229, 185, 100, 235, 2, 34, 82, 211, 230,
+189, 253, 15, 44, 226, 233, 159, 12, 151, 186, 57, 80, 201, 207, 93,
+235, 204, 86, 218, 189, 6, 35, 168, 86, 119, 102, 231, 146, 155, 23,
+186, 51, 43, 190, 54, 216, 219, 95, 254, 186, 237, 47, 126, 163, 101,
+120, 167, 187, 74, 126, 105, 248, 199, 239, 175, 222, 72, 53, 102,
+168, 43, 201, 221, 247, 187, 201, 173, 139, 6, 209, 49, 171, 233, 221,
+31, 170, 63, 224, 78, 230, 170, 255, 96, 150, 252, 146, 250, 235, 143,
+86, 211, 219, 73, 58, 74, 13, 162, 55, 186, 245, 146, 41, 72, 208,
+171, 115, 174, 251, 215, 178, 91, 58, 131, 5, 99, 125, 229, 211, 236,
+127, 103, 221, 116, 244, 74, 127, 169, 238, 127, 112, 119, 180, 126,
+197, 108, 120, 1, 189, 186, 231, 255, 225, 167, 14, 66, 43, 254, 139,
+95, 225, 121, 47, 75, 174, 166, 51, 141, 184, 63, 69, 196, 27, 192,
+227, 213, 203, 191, 235, 246, 125, 187, 26, 97, 79, 239, 127, 54, 186,
+58, 92, 130, 127, 189, 15, 8, 53, 187, 1, 139, 170, 87, 167, 30, 226,
+171, 175, 115, 196, 131, 207, 167, 55, 213, 143, 225, 236, 131, 245,
+43, 61, 141, 120, 19, 150, 192, 213, 219, 94, 255, 90, 61, 122, 248,
+167, 132, 88, 204, 134, 203, 55, 209, 32, 215, 122, 107, 53, 187, 101,
+44, 209, 245, 17, 71, 143, 222, 33, 118, 15, 102, 58, 95, 139, 232,
+175, 117, 101, 30, 245, 15, 151, 89, 176, 146, 153, 241, 34, 217, 253,
+135, 42, 185, 137, 136, 219, 6, 49, 29, 188, 243, 126, 201, 186, 164,
+22, 235, 179, 117, 242, 175, 204, 217, 58, 27, 32, 226, 135, 157, 85,
+25, 226, 43, 221, 220, 166, 150, 115, 138, 136, 63, 235, 186, 43, 183,
+62, 245, 87, 23, 8, 49, 52, 136, 244, 127, 116, 87, 101, 0, 45, 255,
+133, 33, 157, 174, 135, 218, 14, 233, 170, 247, 168, 10, 145, 159,
+174, 117, 28, 94, 14, 151, 253, 138, 213, 195, 213, 191, 228, 83, 243,
+129, 152, 87, 78, 191, 145, 159, 125, 173, 63, 79, 117, 75, 87, 133,
+240, 169, 104, 33, 186, 165, 150, 90, 106, 169, 165, 150, 190, 181,
+148, 148, 82, 243, 25, 195, 94, 83, 64, 242, 106, 99, 68, 211, 45,
+254, 73, 183, 233, 99, 4, 201, 160, 41, 162, 211, 248, 225, 134, 110,
+99, 68, 175, 241, 35, 23, 205, 17, 155, 60, 214, 49, 131, 63, 157,
+202, 132, 249, 92, 226, 0, 17, 56, 196, 41, 33, 218, 250, 12, 227, 32,
+115, 214, 171, 146, 141, 119, 131, 91, 68, 229, 51, 39, 74, 60, 220,
+160, 135, 198, 32, 92, 57, 19, 97, 82, 5, 221, 207, 17, 169, 83, 34,
+84, 126, 95, 35, 148, 217, 39, 59, 45, 3, 116, 120, 38, 185, 99, 246,
+76, 86, 34, 186, 252, 160, 12, 14, 21, 103, 249, 184, 188, 128, 132,
+154, 180, 97, 31, 16, 37, 115, 127, 67, 86, 3, 17, 43, 216, 17, 156,
+108, 213, 81, 195, 238, 138, 92, 155, 145, 252, 181, 23, 98, 137, 49,
+21, 87, 187, 94, 30, 162, 254, 146, 31, 245, 144, 100, 34, 141, 44,
+95, 70, 168, 105, 244, 193, 161, 1, 124, 137, 210, 72, 68, 207, 254,
+81, 20, 113, 27, 190, 140, 226, 55, 2, 196, 215, 49, 132, 217, 249,
+174, 121, 140, 146, 158, 101, 51, 144, 209, 54, 130, 232, 175, 17,
+161, 249, 140, 34, 136, 136, 251, 98, 108, 74, 51, 126, 48, 167, 18,
+97, 174, 165, 107, 14, 82, 30, 34, 40, 145, 212, 34, 122, 162, 10, 46,
+165, 30, 47, 7, 8, 227, 79, 195, 85, 254, 144, 13, 88, 33, 205, 17,
+79, 103, 3, 31, 49, 68, 196, 114, 200, 149, 54, 147, 130, 173, 210, 0,
+97, 132, 25, 138, 178, 74, 215, 178, 72, 214, 65, 45, 177, 136, 39,
+108, 21, 181, 50, 136, 44, 41, 48, 23, 102, 49, 228, 201, 183, 142,
+69, 228, 187, 203, 93, 4, 77, 78, 13, 229, 243, 24, 75, 131, 88, 18,
+194, 159, 199, 67, 133, 5, 162, 103, 17, 48, 203, 244, 32, 68, 208,
+66, 198, 80, 13, 9, 209, 55, 27, 232, 113, 19, 250, 131, 119, 148,
+255, 64, 19, 61, 57, 55, 204, 242, 41, 218, 129, 64, 220, 191, 31, 65,
+172, 44, 162, 235, 35, 96, 38, 107, 48, 8, 16, 3, 133, 209, 98, 184,
+78, 222, 176, 151, 82, 139, 128, 217, 113, 131, 112, 109, 149, 218,
+114, 27, 114, 61, 16, 136, 245, 171, 128, 200, 156, 199, 172, 104, 90,
+90, 76, 79, 15, 205, 131, 0, 218, 34, 132, 80, 61, 137, 32, 150, 74,
+34, 32, 184, 25, 196, 234, 21, 116, 73, 161, 73, 215, 26, 91, 182,
+224, 24, 220, 20, 204, 242, 175, 174, 166, 230, 9, 12, 81, 34, 212,
+70, 202, 214, 213, 238, 43, 135, 103, 91, 86, 91, 169, 242, 116, 167,
+216, 217, 87, 239, 10, 132, 245, 166, 142, 90, 106, 68, 234, 132, 135,
+14, 249, 134, 12, 125, 121, 229, 211, 136, 203, 41, 204, 175, 138,
+254, 27, 69, 219, 174, 148, 212, 69, 172, 183, 224, 199, 200, 55, 85,
+79, 92, 234, 120, 136, 155, 166, 170, 248, 136, 62, 94, 26, 73, 132,
+190, 164, 150, 151, 134, 171, 223, 119, 244, 160, 130, 195, 8, 212,
+181, 18, 90, 178, 136, 239, 121, 154, 227, 57, 78, 226, 227, 67, 92,
+121, 21, 31, 25, 196, 242, 161, 99, 93, 106, 53, 176, 110, 96, 208,
+200, 195, 200, 20, 17, 31, 56, 136, 1, 45, 243, 25, 30, 168, 76, 10,
+243, 206, 22, 161, 91, 207, 71, 119, 212, 231, 66, 243, 84, 34, 108,
+220, 213, 94, 156, 10, 196, 195, 59, 48, 65, 62, 186, 65, 138, 35,
+186, 163, 112, 169, 1, 205, 55, 179, 130, 205, 32, 48, 13, 31, 118,
+225, 17, 138, 15, 166, 108, 122, 76, 181, 76, 168, 138, 192, 67, 78,
+169, 13, 33, 6, 209, 131, 9, 114, 10, 27, 221, 28, 177, 202, 221, 23,
+22, 9, 134, 2, 49, 237, 169, 254, 59, 57, 162, 167, 158, 140, 114,
+132, 245, 20, 208, 134, 92, 145, 16, 131, 188, 134, 12, 8, 10, 2, 17,
+98, 69, 165, 78, 8, 83, 217, 115, 196, 200, 34, 178, 28, 209, 95, 82,
+169, 27, 132, 210, 136, 87, 211, 188, 78, 33, 226, 50, 34, 108, 139,
+51, 152, 17, 98, 13, 174, 0, 8, 168, 186, 43, 66, 192, 247, 37, 80,
+149, 17, 249, 83, 81, 132, 88, 111, 165, 121, 13, 233, 155, 191, 55,
+176, 165, 181, 93, 214, 116, 116, 209, 65, 140, 66, 4, 68, 79, 104,
+205, 251, 104, 134, 116, 116, 121, 64, 238, 110, 17, 151, 135, 121,
+13, 233, 43, 251, 252, 231, 192, 62, 15, 5, 136, 100, 54, 88, 58, 136,
+149, 64, 244, 140, 48, 35, 148, 200, 238, 106, 184, 221, 153, 13, 70,
+18, 209, 55, 136, 117, 12, 129, 23, 175, 118, 103, 215, 108, 17, 130,
+221, 0, 113, 105, 120, 76, 136, 174, 233, 162, 26, 241, 166, 182, 149,
+78, 174, 246, 166, 87, 173, 155, 152, 242, 0, 132, 202, 27, 201, 174,
+241, 58, 139, 176, 45, 206, 86, 111, 186, 101, 93, 49, 249, 143, 6,
+177, 188, 164, 107, 72, 142, 152, 154, 162, 0, 209, 104, 209, 233,
+114, 127, 116, 25, 16, 159, 107, 196, 167, 218, 75, 192, 9, 212, 71,
+135, 185, 84, 51, 236, 123, 235, 232, 67, 146, 110, 245, 19, 131, 248,
+76, 87, 163, 251, 57, 98, 192, 136, 142, 69, 228, 126, 176, 53, 208,
+78, 160, 17, 186, 122, 191, 133, 8, 157, 235, 221, 52, 71, 232, 172,
+8, 97, 125, 237, 2, 12, 55, 83, 179, 136, 199, 136, 151, 211, 44, 71,
+232, 38, 194, 69, 36, 215, 58, 6, 241, 150, 82, 119, 254, 51, 33, 206,
+75, 196, 12, 11, 159, 91, 21, 129, 72, 1, 209, 155, 37, 217, 43, 195,
+188, 204, 109, 117, 236, 115, 77, 38, 4, 108, 35, 120, 135, 16, 23,
+109, 199, 232, 149, 62, 249, 164, 68, 220, 238, 140, 44, 226, 127,
+126, 101, 16, 211, 100, 125, 241, 54, 166, 27, 40, 242, 48, 56, 27,
+117, 124, 196, 191, 254, 23, 57, 226, 22, 110, 190, 73, 115, 155, 194,
+217, 200, 110, 56, 208, 174, 152, 224, 163, 123, 175, 253, 96, 169,
+93, 89, 247, 12, 86, 23, 111, 98, 63, 85, 123, 15, 174, 56, 225, 147,
+143, 184, 38, 150, 100, 29, 104, 106, 1, 241, 203, 79, 114, 196, 42,
+53, 55, 57, 202, 27, 227, 98, 199, 228, 82, 150, 232, 144, 96, 30, 71,
+235, 255, 177, 69, 44, 47, 44, 13, 162, 147, 215, 147, 14, 214, 6,
+131, 120, 35, 211, 17, 123, 104, 186, 99, 253, 63, 53, 136, 145, 65,
+76, 19, 17, 17, 49, 120, 76, 209, 121, 167, 58, 253, 8, 17, 131, 7,
+26, 113, 78, 27, 98, 150, 204, 126, 131, 16, 40, 250, 15, 204, 195,
+212, 166, 12, 59, 128, 0, 33, 245, 221, 193, 211, 101, 50, 120, 185,
+51, 210, 166, 152, 93, 153, 217, 242, 27, 145, 26, 15, 45, 195, 238,
+91, 153, 177, 156, 65, 60, 212, 136, 23, 12, 98, 250, 251, 136, 88,
+119, 114, 53, 64, 89, 125, 250, 98, 247, 45, 229, 34, 222, 214, 136,
+105, 50, 189, 49, 75, 196, 40, 28, 30, 202, 179, 75, 199, 231, 1, 1,
+229, 9, 79, 223, 13, 102, 128, 72, 70, 23, 167, 29, 68, 228, 195, 26,
+243, 36, 49, 70, 237, 243, 189, 247, 241, 233, 50, 29, 210, 85, 186,
+214, 136, 251, 201, 157, 213, 180, 51, 186, 113, 35, 121, 237, 197,
+220, 93, 205, 178, 164, 137, 41, 201, 69, 141, 48, 207, 138, 233, 90,
+156, 253, 64, 199, 249, 193, 253, 209, 157, 213, 200, 32, 126, 245,
+48, 119, 62, 211, 126, 98, 43, 104, 16, 198, 36, 125, 149, 253, 240,
+133, 155, 73, 255, 254, 244, 163, 101, 210, 25, 189, 113, 201, 152,
+208, 34, 140, 10, 61, 227, 97, 58, 146, 152, 62, 40, 108, 136, 200,
+206, 189, 168, 17, 119, 167, 191, 153, 252, 178, 70, 92, 150, 8, 83,
+255, 122, 179, 27, 151, 94, 210, 113, 97, 102, 226, 11, 244, 245, 215,
+189, 243, 91, 186, 87, 48, 251, 77, 24, 205, 189, 113, 217, 180, 67,
+83, 50, 46, 52, 106, 211, 213, 155, 23, 13, 98, 102, 152, 106, 81,
+123, 23, 182, 180, 123, 46, 95, 254, 197, 195, 228, 133, 127, 115,
+185, 199, 136, 30, 34, 222, 122, 154, 109, 37, 183, 12, 98, 104, 80,
+171, 254, 12, 16, 111, 246, 255, 157, 154, 253, 189, 171, 23, 254, 59,
+32, 254, 134, 76, 165, 165, 234, 254, 99, 144, 254, 86, 127, 105, 30,
+229, 156, 26, 196, 232, 98, 167, 59, 250, 131, 225, 87, 234, 105, 186,
+254, 5, 140, 222, 255, 193, 86, 167, 21, 213, 42, 64, 172, 76, 63,
+109, 72, 8, 140, 193, 79, 49, 176, 170, 167, 214, 171, 86, 201, 69,
+227, 191, 179, 117, 127, 165, 86, 102, 161, 25, 30, 25, 29, 189, 212,
+233, 88, 68, 78, 255, 247, 13, 227, 85, 235, 228, 159, 152, 27, 171,
+76, 35, 158, 42, 124, 158, 114, 57, 216, 125, 233, 23, 254, 252, 174,
+11, 80, 199, 139, 119, 193, 139, 214, 221, 63, 68, 158, 89, 127, 13,
+80, 251, 88, 228, 71, 191, 245, 247, 35, 235, 124, 102, 89, 46, 251,
+136, 120, 35, 130, 87, 41, 191, 14, 17, 30, 221, 45, 121, 112, 242,
+180, 16, 159, 171, 97, 67, 68, 75, 223, 26, 194, 160, 240, 84, 253,
+228, 56, 73, 62, 204, 126, 114, 252, 84, 95, 249, 201, 49, 252, 194,
+107, 240, 25, 173, 240, 47, 94, 31, 173, 232, 58, 33, 225, 51, 90, 61,
+85, 112, 7, 62, 240, 141, 231, 244, 45, 207, 40, 13, 230, 7, 60, 41,
+197, 104, 245, 189, 159, 210, 55, 158, 201, 95, 124, 143, 190, 49, 39,
+224, 252, 189, 159, 194, 1, 18, 192, 95, 248, 190, 244, 232, 202, 99,
+70, 95, 122, 180, 253, 196, 205, 3, 63, 244, 251, 123, 63, 189, 242,
+152, 175, 224, 103, 251, 9, 158, 93, 121, 188, 253, 100, 251, 201,
+221, 47, 225, 219, 151, 135, 48, 152, 66, 242, 185, 244, 8, 126, 143,
+86, 120, 7, 208, 240, 237, 162, 136, 27, 224, 33, 5, 115, 189, 244, 8,
+114, 26, 173, 224, 27, 238, 252, 232, 235, 187, 95, 194, 7, 115, 192,
+3, 239, 19, 111, 72, 67, 92, 81, 10, 56, 131, 111, 70, 255, 232, 107,
+56, 48, 7, 76, 73, 41, 240, 62, 243, 39, 137, 33, 21, 35, 241, 160,
+116, 200, 239, 227, 53, 115, 128, 43, 116, 23, 114, 128, 3, 238, 192,
+125, 121, 16, 30, 36, 248, 120, 253, 163, 175, 249, 62, 74, 77, 56,
+252, 108, 63, 129, 52, 46, 30, 52, 132, 187, 151, 30, 125, 145, 81,
+254, 100, 33, 23, 237, 75, 143, 87, 128, 7, 166, 134, 188, 57, 69,
+168, 109, 200, 29, 14, 226, 15, 248, 80, 63, 64, 201, 252, 93, 222,
+164, 39, 166, 3, 249, 125, 9, 1, 69, 184, 80, 122, 188, 138, 156, 239,
+126, 249, 69, 38, 211, 32, 95, 151, 103, 60, 7, 72, 5, 146, 147, 253,
+177, 196, 138, 210, 197, 115, 1, 12, 218, 15, 37, 142, 89, 10, 115, 8,
+239, 144, 229, 224, 94, 104, 191, 58, 7, 224, 238, 126, 153, 36, 161,
+141, 99, 22, 143, 93, 5, 254, 73, 130, 250, 149, 231, 16, 151, 31,
+249, 215, 177, 118, 232, 103, 210, 115, 170, 248, 163, 182, 252, 205,
+252, 175, 60, 46, 215, 221, 149, 42, 198, 223, 149, 171, 232, 160, 90,
+128, 223, 92, 51, 139, 249, 135, 62, 45, 173, 208, 148, 63, 230, 64,
+190, 142, 188, 161, 230, 92, 121, 92, 7, 233, 150, 0, 197, 20, 140,
+232, 245, 236, 207, 126, 142, 113, 241, 227, 245, 23, 25, 252, 189,
+242, 56, 73, 168, 124, 32, 5, 92, 255, 34, 195, 51, 56, 240, 23, 240,
+194, 95, 244, 65, 222, 87, 30, 51, 30, 235, 32, 214, 41, 58, 135, 111,
+140, 238, 88, 215, 57, 174, 33, 239, 43, 246, 157, 62, 248, 155, 218,
+40, 204, 25, 127, 241, 125, 184, 66, 87, 241, 28, 209, 40, 109, 243,
+131, 242, 70, 253, 154, 227, 161, 230, 0, 109, 138, 102, 254, 228,
+149, 199, 10, 236, 90, 23, 79, 182, 99, 254, 80, 86, 245, 34, 17, 122,
+129, 207, 159, 253, 169, 14, 154, 248, 55, 177, 63, 213, 28, 242, 60,
+148, 191, 60, 181, 255, 33, 63, 33, 188, 43, 87, 152, 90, 182, 170,
+18, 125, 37, 127, 159, 148, 188, 206, 30, 24, 59, 0, 133, 223, 140, 6,
+58, 86, 62, 95, 206, 141, 115, 245, 219, 89, 198, 67, 25, 84, 235,
+142, 109, 35, 167, 112, 249, 215, 43, 181, 208, 255, 36, 127, 238,
+125, 196, 14, 201, 223, 197, 215, 241, 0, 201, 31, 109, 210, 4, 143,
+54, 224, 104, 89, 198, 223, 237, 57, 201, 50, 41, 210, 159, 252, 223,
+247, 4, 255, 23, 203, 207, 254, 203, 62, 68, 101, 236, 251, 18, 69,
+46, 25, 235, 125, 124, 140, 202, 236, 225, 218, 175, 41, 30, 189, 233,
+36, 252, 93, 251, 109, 130, 63, 137, 254, 104, 217, 77, 241, 228, 75,
+205, 241, 210, 151, 234, 227, 99, 145, 161, 14, 30, 114, 224, 120, 5,
+31, 191, 237, 107, 137, 232, 169, 250, 48, 131, 15, 142, 221, 113,
+244, 207, 191, 224, 12, 102, 7, 224, 224, 51, 188, 15, 104, 78, 73,
+99, 121, 184, 203, 227, 126, 119, 62, 128, 127, 241, 60, 3, 164, 150,
+243, 0, 238, 124, 64, 120, 206, 7, 240, 230, 57, 4, 119, 100, 239,
+163, 253, 15, 124, 227, 220, 197, 79, 142, 105, 84, 77, 163, 242, 112,
+62, 0, 15, 255, 58, 205, 65, 208, 156, 1, 143, 206, 221, 252, 16, 9,
+222, 199, 191, 240, 14, 162, 49, 111, 28, 147, 83, 63, 13, 199, 246,
+50, 71, 184, 206, 51, 14, 240, 151, 209, 120, 151, 103, 19, 40, 30,
+211, 108, 8, 220, 195, 171, 148, 6, 103, 40, 36, 119, 70, 201, 62, 0,
+141, 232, 113, 100, 78, 249, 208, 61, 204, 65, 242, 116, 199, 209,
+164, 19, 164, 197, 187, 52, 250, 198, 40, 74, 120, 217, 223, 112, 227,
+134, 156, 81, 128, 223, 52, 122, 134, 223, 132, 119, 165, 118, 15,
+156, 17, 113, 71, 63, 178, 23, 7, 120, 104, 197, 139, 198, 185, 196,
+191, 40, 10, 34, 190, 108, 36, 131, 243, 5, 126, 52, 116, 241, 101,
+189, 87, 156, 135, 113, 121, 115, 20, 103, 254, 197, 120, 42, 49, 137,
+166, 56, 8, 229, 3, 209, 146, 231, 28, 252, 222, 159, 223, 50, 115,
+36, 101, 60, 198, 91, 234, 105, 197, 63, 178, 53, 135, 3, 91, 97, 68,
+51, 201, 145, 90, 216, 39, 116, 57, 196, 240, 220, 167, 142, 245, 3,
+185, 55, 88, 212, 10, 115, 159, 190, 252, 40, 106, 5, 139, 198, 52,
+190, 20, 69, 173, 176, 28, 229, 151, 245, 227, 139, 91, 65, 105, 51,
+215, 246, 210, 250, 112, 22, 199, 23, 17, 140, 177, 224, 131, 227, 88,
+24, 151, 54, 195, 211, 232, 152, 99, 67, 115, 254, 174, 77, 155, 242,
+119, 75, 182, 41, 255, 176, 100, 155, 243, 199, 131, 198, 248, 205,
+240, 216, 43, 146, 53, 170, 41, 62, 164, 99, 197, 37, 74, 223, 60,
+155, 23, 27, 159, 114, 234, 143, 215, 136, 69, 171, 242, 28, 17, 99,
+226, 104, 255, 151, 155, 131, 60, 170, 174, 192, 216, 173, 172, 174,
+134, 99, 67, 247, 74, 213, 248, 187, 138, 191, 235, 81, 148, 91, 108,
+78, 56, 142, 175, 154, 255, 168, 154, 219, 172, 210, 159, 83, 186,
+231, 20, 69, 142, 213, 166, 252, 49, 199, 120, 169, 213, 149, 31, 202,
+111, 179, 249, 39, 63, 255, 162, 145, 119, 108, 230, 86, 166, 59, 45,
+254, 207, 42, 135, 147, 231, 127, 82, 13, 164, 183, 184, 179, 68, 177,
+245, 141, 170, 89, 144, 211, 214, 240, 164, 246, 57, 41, 222, 157, 65,
+115, 251, 78, 225, 12, 152, 236, 3, 21, 183, 191, 174, 213, 139, 123,
+83, 101, 253, 23, 191, 236, 138, 62, 241, 22, 33, 140, 154, 254, 65,
+229, 27, 231, 95, 223, 170, 113, 124, 53, 255, 50, 124, 147, 57, 229,
+77, 228, 151, 22, 140, 225, 199, 199, 69, 169, 195, 82, 141, 225, 227,
+200, 250, 229, 31, 246, 21, 121, 189, 129, 122, 129, 178, 255, 206,
+163, 125, 26, 73, 211, 152, 30, 239, 224, 57, 220, 129, 235, 56, 94,
+199, 95, 64, 60, 250, 199, 17, 61, 237, 5, 192, 177, 173, 28, 63, 243,
+28, 1, 141, 59, 1, 47, 209, 60, 90, 199, 115, 137, 190, 244, 72, 142,
+196, 241, 47, 160, 113, 238, 32, 220, 57, 224, 174, 176, 195, 74, 185,
+28, 199, 227, 239, 75, 143, 104, 230, 33, 156, 31, 128, 49, 51, 166,
+131, 179, 237, 39, 136, 192, 145, 59, 94, 133, 111, 154, 207, 224,
+220, 97, 223, 1, 166, 64, 59, 227, 90, 62, 142, 149, 105, 28, 142, 43,
+244, 240, 87, 234, 73, 40, 28, 49, 19, 10, 185, 67, 73, 210, 56, 20,
+115, 196, 212, 44, 59, 254, 134, 252, 145, 3, 140, 25, 17, 143, 104,
+220, 47, 192, 87, 124, 155, 34, 154, 198, 217, 60, 102, 166, 88, 142,
+43, 254, 52, 158, 128, 43, 136, 33, 109, 89, 98, 201, 149, 125, 25,
+126, 145, 76, 116, 149, 45, 141, 22, 229, 85, 104, 127, 196, 140, 61,
+42, 152, 65, 144, 215, 168, 116, 80, 94, 57, 74, 247, 91, 160, 112,
+118, 0, 114, 68, 185, 209, 166, 254, 44, 129, 143, 142, 141, 224, 37,
+138, 44, 30, 198, 10, 252, 11, 182, 149, 146, 33, 127, 230, 25, 231,
+207, 51, 29, 225, 10, 61, 205, 17, 145, 197, 36, 222, 151, 23, 235,
+187, 143, 190, 242, 152, 99, 29, 242, 47, 138, 120, 52, 63, 207, 113,
+9, 231, 47, 120, 214, 162, 8, 79, 222, 3, 165, 228, 70, 53, 151, 191,
+59, 175, 195, 186, 242, 120, 151, 71, 238, 188, 10, 37, 35, 53, 206,
+34, 197, 229, 247, 87, 63, 105, 246, 3, 248, 211, 202, 134, 59, 203,
+18, 234, 95, 213, 214, 20, 251, 78, 241, 140, 119, 81, 75, 39, 215,
+220, 220, 21, 191, 88, 107, 81, 180, 78, 39, 63, 69, 120, 198, 240,
+12, 185, 180, 146, 219, 82, 132, 4, 227, 71, 156, 23, 144, 179, 3,
+120, 208, 26, 56, 159, 211, 58, 185, 68, 55, 105, 239, 217, 62, 132,
+223, 12, 77, 120, 23, 45, 103, 25, 139, 60, 217, 237, 57, 149, 141,
+127, 138, 243, 146, 252, 155, 247, 64, 235, 242, 143, 203, 79, 158,
+18, 250, 111, 177, 190, 238, 204, 21, 250, 19, 32, 171, 215, 159, 177,
+222, 146, 23, 114, 63, 6, 87, 243, 64, 10, 183, 86, 83, 122, 119, 253,
+79, 214, 91, 188, 70, 229, 21, 171, 145, 50, 218, 179, 206, 24, 131,
+93, 9, 9, 79, 158, 139, 222, 132, 94, 10, 158, 201, 51, 33, 177, 113,
+14, 149, 2, 207, 159, 212, 177, 191, 252, 45, 247, 96, 212, 89, 197,
+245, 71, 241, 40, 63, 205, 193, 196, 17, 220, 18, 240, 62, 61, 210,
+30, 241, 117, 125, 208, 95, 193, 102, 249, 93, 155, 22, 249, 60, 183,
+32, 205, 249, 179, 143, 72, 62, 136, 175, 107, 61, 244, 30, 153, 31,
+202, 239, 215, 129, 248, 126, 181, 152, 23, 55, 227, 31, 174, 112, 75,
+254, 85, 187, 71, 40, 62, 203, 232, 76, 45, 64, 189, 25, 160, 162,
+217, 194, 186, 251, 15, 138, 218, 128, 242, 241, 150, 156, 175, 142,
+227, 67, 249, 253, 158, 2, 150, 85, 49, 127, 137, 117, 75, 200, 93, 1,
+142, 227, 105, 229, 66, 34, 142, 149, 219, 87, 40, 70, 203, 216, 65,
+251, 187, 100, 36, 193, 22, 134, 90, 63, 246, 46, 66, 35, 174, 44,
+210, 196, 15, 230, 126, 146, 253, 87, 132, 110, 194, 153, 35, 23, 213,
+253, 102, 18, 96, 84, 42, 242, 29, 142, 88, 84, 142, 110, 228, 164,
+171, 204, 191, 169, 254, 210, 151, 55, 217, 127, 38, 241, 49, 254,
+177, 158, 186, 140, 123, 174, 252, 117, 119, 112, 186, 145, 83, 238,
+255, 106, 106, 253, 88, 44, 224, 213, 124, 216, 207, 239, 142, 233,
+113, 164, 143, 251, 252, 221, 231, 0, 104, 14, 0, 239, 208, 8, 158,
+102, 17, 100, 14, 180, 206, 238, 175, 243, 51, 111, 247, 9, 129, 216,
+122, 63, 167, 225, 177, 61, 205, 93, 184, 40, 57, 239, 128, 31, 24,
+233, 186, 163, 116, 176, 33, 205, 116, 48, 111, 74, 39, 199, 197, 24,
+115, 121, 214, 130, 174, 193, 168, 19, 172, 193, 51, 8, 56, 134, 14,
+209, 24, 253, 232, 42, 61, 81, 0, 35, 22, 178, 28, 28, 184, 39, 64,
+114, 99, 52, 141, 202, 249, 105, 3, 244, 9, 180, 43, 74, 78, 249, 210,
+186, 60, 63, 27, 192, 253, 32, 94, 251, 199, 185, 127, 57, 231, 66,
+163, 127, 72, 73, 79, 77, 184, 179, 191, 32, 49, 226, 41, 238, 0, 30,
+103, 60, 224, 89, 7, 246, 82, 214, 220, 141, 229, 248, 196, 1, 236,
+229, 69, 207, 133, 146, 194, 189, 12, 60, 250, 199, 116, 110, 45, 146,
+26, 64, 68, 32, 191, 7, 254, 88, 18, 254, 26, 121, 216, 134, 80, 239,
+21, 241, 88, 107, 252, 189, 5, 177, 186, 82, 214, 147, 7, 249, 253,
+186, 29, 59, 232, 46, 29, 84, 103, 81, 122, 236, 107, 114, 251, 193,
+237, 1, 183, 10, 20, 167, 221, 218, 14, 53, 17, 215, 48, 154, 141, 4,
+120, 212, 207, 49, 172, 62, 154, 123, 42, 80, 131, 194, 53, 20, 119,
+246, 33, 156, 147, 225, 126, 224, 38, 49, 28, 251, 241, 152, 3, 182,
+129, 77, 247, 208, 134, 252, 93, 217, 203, 125, 1, 199, 31, 204, 191,
+186, 13, 33, 191, 230, 177, 53, 229, 22, 246, 95, 252, 131, 198, 214,
+114, 124, 194, 163, 233, 80, 254, 16, 93, 54, 190, 168, 194, 151, 163,
+171, 229, 103, 223, 220, 20, 47, 215, 149, 221, 241, 140, 148, 223,
+189, 195, 229, 87, 213, 190, 214, 225, 127, 50, 249, 79, 198, 191,
+106, 110, 163, 26, 95, 197, 159, 102, 96, 100, 191, 181, 40, 218, 196,
+245, 147, 107, 248, 62, 191, 98, 254, 88, 90, 210, 191, 98, 158, 82,
+37, 129, 239, 157, 238, 188, 97, 157, 245, 231, 147, 173, 95, 111,
+250, 252, 68, 221, 252, 229, 253, 88, 59, 114, 26, 235, 215, 167, 165,
+63, 141, 145, 139, 230, 207, 226, 248, 103, 111, 127, 57, 23, 196, 51,
+233, 216, 51, 106, 254, 252, 138, 219, 155, 168, 51, 239, 83, 140,
+222, 196, 127, 220, 85, 140, 166, 104, 154, 133, 111, 98, 191, 98,
+238, 77, 249, 211, 42, 64, 117, 124, 142, 245, 229, 104, 254, 103, 51,
+254, 52, 15, 224, 123, 103, 253, 185, 47, 156, 177, 113, 249, 195,
+252, 57, 203, 40, 231, 29, 227, 187, 31, 253, 89, 64, 158, 69, 224,
+200, 91, 117, 144, 212, 240, 145, 163, 200, 77, 34, 1, 113, 223, 116,
+39, 68, 179, 81, 108, 17, 126, 83, 233, 25, 95, 140, 118, 123, 77,
+188, 2, 129, 223, 85, 252, 201, 178, 69, 26, 34, 190, 88, 122, 178,
+108, 89, 255, 169, 172, 5, 47, 110, 223, 234, 241, 175, 178, 44, 172,
+159, 243, 30, 122, 92, 221, 199, 81, 49, 190, 13, 128, 230, 5, 48, 13,
+141, 149, 63, 204, 223, 224, 197, 251, 250, 229, 56, 154, 82, 210, 92,
+128, 28, 223, 243, 74, 61, 226, 229, 104, 158, 238, 208, 46, 1, 94,
+193, 151, 171, 244, 114, 253, 159, 71, 243, 156, 147, 92, 193, 231,
+81, 183, 92, 255, 167, 29, 248, 176, 119, 24, 159, 240, 199, 49, 51,
+237, 252, 167, 181, 127, 121, 221, 125, 66, 0, 247, 239, 184, 171,
+222, 196, 145, 247, 231, 51, 158, 164, 196, 187, 248, 44, 0, 126, 228,
+154, 57, 173, 254, 99, 158, 52, 254, 102, 29, 145, 11, 241, 134, 111,
+90, 115, 198, 49, 51, 225, 232, 189, 1, 120, 135, 199, 242, 24, 193,
+48, 31, 204, 65, 174, 138, 19, 71, 122, 239, 0, 121, 155, 251, 116, 0,
+197, 81, 228, 239, 122, 36, 189, 47, 128, 246, 243, 187, 114, 185,
+115, 78, 56, 159, 235, 122, 51, 245, 30, 220, 177, 60, 173, 172, 187,
+120, 224, 79, 171, 71, 254, 225, 142, 224, 232, 105, 253, 24, 255, 58,
+81, 135, 108, 145, 36, 33, 255, 58, 207, 14, 162, 109, 195, 217, 111,
+201, 159, 87, 216, 195, 62, 30, 141, 73, 99, 248, 186, 107, 159, 197,
+235, 215, 197, 8, 217, 151, 110, 190, 126, 93, 143, 191, 220, 171, 86,
+182, 242, 90, 180, 87, 170, 238, 78, 181, 166, 250, 187, 243, 70, 197,
+235, 255, 117, 246, 218, 149, 173, 255, 115, 249, 199, 80, 178, 190,
+197, 241, 82, 191, 112, 133, 201, 221, 235, 16, 231, 79, 207, 167,
+227, 51, 234, 49, 79, 47, 163, 88, 89, 55, 217, 149, 30, 90, 190, 206,
+179, 137, 101, 248, 58, 207, 38, 250, 120, 119, 110, 167, 9, 158, 246,
+241, 51, 186, 222, 179, 137, 68, 238, 202, 118, 83, 244, 201, 9, 251,
+7, 97, 109, 173, 19, 83, 138, 86, 122, 235, 230, 16, 155, 175, 105,
+134, 166, 93, 4, 254, 202, 105, 189, 49, 40, 141, 38, 98, 235, 53,
+117, 249, 83, 77, 11, 35, 118, 21, 26, 115, 136, 143, 74, 66, 116,
+216, 46, 48, 255, 112, 76, 83, 86, 50, 46, 127, 127, 60, 202, 121, 87,
+231, 192, 227, 153, 102, 252, 101, 109, 43, 206, 59, 230, 19, 238,
+199, 125, 38, 188, 152, 191, 68, 248, 209, 49, 214, 218, 250, 150,
+225, 126, 147, 255, 137, 63, 37, 237, 219, 53, 236, 251, 48, 197, 173,
+35, 103, 136, 41, 135, 106, 188, 171, 167, 111, 145, 56, 158, 91, 25,
+217, 86, 212, 109, 189, 229, 94, 101, 57, 230, 245, 199, 239, 197,
+109, 10, 231, 207, 171, 90, 245, 123, 15, 242, 121, 40, 150, 58, 134,
+46, 123, 82, 174, 220, 27, 200, 162, 113, 60, 239, 229, 103, 92, 19,
+254, 210, 195, 202, 106, 76, 177, 254, 161, 204, 50, 70, 84, 235, 95,
+93, 123, 154, 249, 175, 107, 7, 182, 110, 93, 188, 191, 199, 166, 41,
+255, 162, 30, 80, 153, 253, 253, 186, 202, 113, 185, 170, 77, 246,
+103, 121, 202, 116, 141, 243, 15, 115, 104, 214, 255, 112, 99, 82,
+211, 119, 27, 208, 24, 159, 246, 255, 203, 49, 190, 156, 27, 224, 231,
+3, 228, 55, 238, 158, 167, 67, 174, 248, 195, 193, 107, 219, 156, 54,
+252, 240, 122, 61, 175, 222, 23, 239, 3, 240, 159, 185, 143, 61, 243,
+47, 159, 239, 151, 239, 249, 195, 81, 191, 251, 70, 0, 247, 25, 1, 90,
+201, 150, 251, 4, 248, 61, 130, 60, 62, 231, 153, 2, 158, 125, 160,
+81, 55, 225, 112, 164, 206, 235, 246, 180, 143, 95, 62, 227, 79, 41,
+121, 204, 47, 71, 235, 114, 102, 1, 123, 135, 60, 207, 64, 57, 201,
+217, 3, 194, 227, 142, 120, 249, 246, 62, 94, 133, 198, 209, 181, 220,
+169, 47, 211, 224, 183, 124, 190, 159, 34, 136, 156, 39, 144, 43, 245,
+252, 205, 245, 151, 71, 239, 110, 44, 167, 51, 57, 103, 17, 143, 90,
+120, 14, 123, 176, 226, 241, 197, 221, 25, 16, 139, 90, 136, 47, 142,
+168, 97, 46, 161, 68, 56, 182, 147, 115, 186, 69, 253, 58, 255, 62,
+158, 213, 219, 87, 39, 251, 66, 174, 60, 101, 99, 91, 87, 127, 154,
+213, 113, 83, 240, 138, 169, 43, 151, 252, 200, 182, 223, 111, 69, 98,
+187, 242, 252, 200, 44, 223, 206, 227, 183, 26, 236, 119, 254, 104,
+150, 102, 195, 105, 239, 3, 207, 205, 210, 252, 44, 74, 237, 238, 171,
+139, 189, 99, 144, 119, 78, 248, 178, 110, 63, 145, 200, 34, 235, 17,
+58, 182, 11, 13, 209, 229, 207, 144, 210, 250, 165, 159, 55, 240, 47,
+66, 243, 140, 82, 209, 250, 38, 222, 117, 229, 226, 58, 197, 189, 44,
+185, 62, 236, 215, 66, 220, 161, 29, 150, 157, 219, 63, 45, 242, 81,
+40, 31, 186, 39, 219, 54, 246, 151, 226, 218, 128, 8, 154, 27, 148,
+243, 18, 242, 77, 60, 40, 111, 209, 234, 79, 188, 21, 197, 183, 246,
+81, 126, 113, 222, 204, 63, 196, 203, 55, 8, 74, 254, 238, 56, 180,
+184, 199, 130, 169, 227, 253, 91, 191, 29, 143, 225, 99, 126, 18, 27,
+149, 20, 183, 226, 110, 60, 111, 250, 254, 130, 88, 126, 114, 53, 36,
+102, 203, 216, 85, 172, 53, 241, 123, 254, 88, 58, 140, 98, 229, 123,
+66, 252, 49, 97, 152, 174, 124, 77, 195, 231, 31, 166, 44, 91, 173,
+138, 141, 229, 235, 88, 68, 122, 1, 69, 14, 122, 246, 197, 93, 187,
+11, 243, 118, 235, 101, 253, 119, 90, 50, 86, 198, 212, 114, 233, 229,
+58, 165, 59, 255, 82, 52, 246, 242, 173, 19, 219, 217, 85, 142, 14,
+219, 13, 31, 29, 251, 29, 182, 85, 164, 99, 85, 43, 92, 212, 222, 148,
+163, 139, 219, 200, 34, 251, 20, 205, 26, 249, 41, 227, 189, 33, 62,
+228, 254, 241, 248, 122, 111, 89, 253, 100, 92, 19, 191, 97, 222, 238,
+10, 99, 149, 7, 248, 182, 174, 218, 223, 85, 100, 101, 230, 95, 71,
+114, 191, 167, 202, 215, 155, 239, 127, 41, 234, 227, 212, 213, 92,
+250, 239, 38, 111, 46, 118, 189, 161, 40, 130, 22, 75, 35, 91, 62,
+106, 163, 235, 205, 119, 82, 74, 249, 12, 77, 51, 185, 195, 121, 154,
+122, 235, 39, 110, 124, 171, 111, 63, 191, 159, 234, 247, 61, 120,
+254, 209, 111, 131, 229, 153, 59, 62, 118, 203, 47, 214, 38, 186, 173,
+188, 31, 185, 36, 186, 124, 77, 167, 200, 14, 132, 174, 226, 143, 252,
+98, 239, 197, 172, 158, 85, 145, 169, 228, 156, 136, 191, 38, 196,
+207, 236, 211, 147, 248, 79, 21, 60, 189, 207, 251, 253, 233, 29, 125,
+252, 155, 222, 253, 15, 196, 111, 254, 115, 247, 1, 184, 59, 246, 229,
+83, 255, 48, 214, 231, 39, 7, 252, 231, 4, 248, 249, 127, 122, 143,
+128, 68, 187, 99, 118, 200, 131, 206, 228, 238, 1, 247, 221, 127, 254,
+44, 129, 59, 43, 192, 163, 121, 119, 239, 0, 122, 10, 33, 233, 173,
+252, 244, 54, 62, 126, 155, 0, 142, 151, 241, 61, 255, 204, 135, 119,
+226, 243, 8, 159, 222, 8, 64, 111, 15, 192, 15, 237, 200, 167, 212,
+46, 218, 125, 87, 159, 124, 110, 31, 159, 93, 135, 247, 239, 127, 188,
+230, 183, 239, 185, 187, 246, 161, 118, 242, 12, 1, 207, 25, 208, 206,
+124, 200, 129, 227, 13, 96, 232, 105, 122, 142, 39, 238, 156, 44, 94,
+149, 18, 185, 245, 213, 125, 134, 63, 86, 7, 224, 224, 55, 19, 32,
+127, 137, 15, 209, 50, 7, 25, 55, 226, 252, 227, 145, 144, 175, 202,
+92, 66, 254, 101, 61, 3, 238, 29, 72, 109, 235, 68, 206, 162, 248,
+140, 229, 239, 143, 102, 100, 132, 142, 235, 127, 90, 252, 65, 130,
+186, 248, 184, 109, 54, 225, 47, 103, 149, 124, 60, 69, 249, 58, 252,
+225, 119, 249, 91, 114, 171, 244, 175, 223, 254, 185, 115, 69, 140,
+174, 219, 87, 143, 143, 86, 113, 142, 194, 125, 243, 90, 241, 108, 3,
+205, 7, 112, 79, 13, 249, 87, 245, 127, 200, 191, 228, 120, 141, 236,
+95, 188, 254, 38, 209, 216, 102, 187, 188, 235, 233, 207, 237, 148,
+219, 83, 168, 230, 79, 51, 13, 180, 30, 5, 8, 169, 121, 21, 127, 55,
+106, 97, 44, 244, 203, 178, 92, 255, 178, 62, 63, 189, 157, 191, 200,
+255, 138, 198, 39, 220, 34, 211, 211, 199, 113, 124, 61, 191, 108,
+202, 63, 148, 166, 200, 126, 245, 122, 147, 60, 86, 246, 107, 7, 202,
+95, 238, 153, 101, 229, 23, 139, 0, 126, 57, 192, 167, 120, 253, 183,
+158, 244, 229, 252, 203, 228, 167, 26, 112, 114, 254, 242, 253, 139,
+197, 251, 127, 229, 83, 48, 180, 99, 3, 227, 7, 190, 173, 171, 249,
+232, 15, 249, 111, 142, 38, 254, 101, 187, 83, 171, 208, 240, 254,
+150, 77, 121, 99, 109, 170, 179, 255, 43, 246, 230, 30, 248, 70, 254,
+77, 185, 179, 239, 213, 221, 63, 24, 203, 161, 250, 255, 55, 148, 107,
+196, 207, 254, 135, 122, 241, 175, 120, 171, 195, 111, 62, 216, 148,
+63, 143, 92, 54, 43, 61, 230, 191, 9, 90, 234, 95, 255, 221, 47, 114,
+54, 200, 183, 127, 172, 207, 37, 249, 81, 138, 112, 63, 93, 185, 254,
+216, 186, 227, 119, 108, 119, 127, 121, 205, 115, 159, 235, 12, 83,
+131, 38, 101, 120, 176, 141, 180, 79, 152, 182, 60, 78, 85, 237, 234,
+175, 195, 191, 42, 135, 178, 187, 85, 177, 129, 250, 63, 254, 211,
+106, 132, 114, 223, 75, 130, 223, 238, 72, 160, 138, 127, 217, 221,
+226, 94, 93, 61, 124, 25, 255, 122, 81, 180, 170, 255, 85, 197, 31,
+60, 154, 87, 233, 113, 76, 78, 99, 124, 26, 141, 211, 111, 152, 21,
+192, 209, 126, 184, 126, 79, 99, 112, 119, 93, 94, 142, 227, 229, 174,
+126, 30, 135, 211, 30, 127, 126, 143, 94, 56, 14, 231, 252, 33, 5,
+191, 175, 142, 119, 251, 211, 170, 59, 189, 117, 144, 209, 244, 198,
+62, 70, 225, 251, 234, 120, 63, 189, 124, 26, 94, 190, 25, 128, 87,
+251, 105, 183, 62, 62, 97, 47, 211, 240, 156, 20, 90, 211, 223, 165,
+207, 239, 243, 167, 231, 249, 57, 63, 119, 253, 156, 202, 131, 158,
+69, 199, 177, 173, 92, 251, 231, 121, 0, 250, 203, 101, 204, 113, 4,
+231, 33, 200, 179, 92, 143, 39, 20, 163, 195, 119, 22, 201, 209, 183,
+63, 94, 246, 175, 199, 230, 125, 93, 109, 220, 43, 190, 71, 111, 254,
+196, 15, 30, 167, 249, 220, 101, 253, 217, 83, 62, 226, 123, 11, 252,
+103, 184, 120, 230, 222, 215, 55, 190, 170, 86, 167, 47, 38, 251, 166,
+174, 220, 245, 122, 114, 56, 255, 202, 233, 232, 45, 87, 161, 77, 195,
+81, 111, 56, 30, 162, 213, 3, 184, 82, 245, 44, 4, 207, 164, 50, 127,
+178, 11, 174, 154, 85, 201, 78, 125, 102, 215, 255, 233, 94, 213, 126,
+9, 57, 139, 43, 249, 115, 95, 180, 14, 26, 249, 187, 125, 94, 236, 21,
+132, 168, 88, 207, 193, 45, 181, 242, 231, 252, 216, 119, 194, 26, 67,
+61, 127, 25, 3, 234, 173, 165, 200, 114, 171, 74, 29, 71, 87, 63, 55,
+93, 135, 191, 95, 94, 28, 99, 138, 107, 36, 121, 95, 136, 174, 119,
+200, 232, 183, 169, 244, 110, 253, 217, 140, 255, 166, 235, 117, 241,
+249, 177, 34, 41, 217, 111, 9, 67, 243, 15, 110, 253, 15, 223, 253,
+47, 189, 35, 22, 43, 217, 15, 170, 86, 240, 170, 123, 200, 229, 245,
+174, 60, 135, 242, 114, 172, 46, 169, 147, 244, 79, 81, 254, 34, 59,
+202, 29, 75, 238, 42, 157, 108, 27, 137, 127, 243, 117, 212, 80, 142,
+42, 75, 20, 221, 225, 189, 66, 245, 119, 85, 184, 86, 194, 120, 184,
+217, 174, 10, 249, 62, 199, 98, 116, 184, 39, 93, 162, 227, 255, 165,
+151, 244, 38, 159, 167, 185, 59, 119, 109, 172, 204, 98, 156, 158,
+159, 91, 247, 63, 180, 114, 79, 113, 203, 95, 171, 164, 29, 79, 225,
+136, 15, 219, 204, 170, 213, 194, 176, 205, 149, 229, 25, 107, 115,
+171, 209, 156, 195, 166, 30, 71, 249, 161, 222, 120, 165, 89, 47, 170,
+62, 127, 191, 15, 42, 175, 109, 122, 80, 94, 200, 159, 119, 17, 134,
+115, 112, 241, 221, 23, 146, 127, 189, 183, 127, 186, 154, 112, 59,
+64, 49, 180, 104, 148, 47, 209, 238, 106, 156, 228, 95, 175, 223, 200,
+57, 184, 99, 136, 186, 229, 32, 235, 14, 95, 119, 71, 221, 197, 188,
+105, 45, 187, 200, 35, 171, 208, 49, 253, 221, 177, 127, 76, 6, 232,
+23, 250, 187, 75, 235, 204, 190, 212, 181, 110, 81, 31, 185, 169, 117,
+139, 242, 35, 13, 235, 218, 171, 153, 109, 97, 14, 235, 147, 108, 156,
+125, 226, 28, 99, 115, 101, 156, 95, 31, 155, 227, 61, 251, 151, 206,
+113, 6, 236, 19, 243, 235, 251, 223, 188, 151, 21, 29, 227, 224, 55,
+165, 38, 244, 56, 191, 51, 118, 120, 200, 171, 116, 230, 230, 247,
+137, 253, 91, 198, 63, 60, 190, 255, 13, 230, 249, 253, 111, 62, 201,
+37, 252, 167, 63, 133, 227, 251, 223, 224, 135, 206, 240, 28, 207,
+128, 135, 255, 77, 252, 41, 133, 188, 31, 74, 230, 75, 9, 114, 16,
+119, 188, 23, 166, 14, 191, 217, 2, 18, 47, 175, 48, 254, 175, 148,
+203, 115, 236, 225, 63, 241, 248, 191, 231, 148, 230, 95, 169, 177,
+249, 184, 242, 202, 18, 248, 196, 67, 200, 123, 136, 134, 195, 151,
+255, 147, 66, 254, 252, 141, 72, 58, 92, 251, 141, 61, 121, 164, 254,
+174, 156, 132, 141, 89, 161, 26, 47, 121, 75, 100, 40, 63, 33, 92, 43,
+2, 122, 236, 216, 199, 199, 143, 43, 241, 49, 251, 187, 252, 81, 126,
+183, 150, 49, 79, 233, 17, 178, 212, 240, 62, 227, 93, 191, 244, 203,
+178, 200, 126, 97, 249, 115, 233, 163, 253, 249, 187, 158, 255, 186,
+60, 8, 41, 75, 113, 156, 203, 143, 90, 203, 156, 25, 143, 8, 248, 6,
+27, 250, 126, 65, 90, 23, 149, 31, 149, 62, 231, 20, 226, 129, 191,
+139, 255, 66, 28, 116, 45, 44, 5, 150, 159, 203, 15, 238, 195, 255,
+31, 135, 21, 45, 248, 124, 225, 217, 223, 181, 190, 171, 63, 227, 37,
+119, 223, 11, 98, 229, 239, 250, 31, 34, 81, 134, 47, 162, 101, 74,
+233, 217, 126, 50, 30, 35, 74, 234, 255, 94, 192, 127, 44, 228, 151,
+94, 235, 242, 138, 113, 142, 149, 127, 81, 212, 135, 235, 220, 98,
+189, 151, 113, 203, 242, 158, 109, 211, 48, 82, 187, 252, 199, 65,
+234, 177, 109, 253, 62, 17, 103, 136, 70, 238, 224, 181, 212, 146,
+196, 37, 241, 219, 50, 150, 16, 91, 152, 36, 241, 211, 199, 243, 161,
+188, 222, 203, 121, 35, 26, 232, 189, 252, 42, 125, 100, 235, 197, 45,
+152, 255, 29, 223, 59, 216, 82, 75, 127, 55, 232, 195, 151, 225, 216,
+28, 251, 227, 159, 135, 99, 147, 60, 16, 251, 238, 119, 240, 128, 60,
+154, 162, 223, 253, 14, 74, 255, 225, 203, 128, 255, 241, 207, 255,
+246, 185, 166, 120, 200, 129, 100, 128, 28, 154, 162, 1, 133, 31, 60,
+175, 43, 129, 203, 245, 36, 120, 212, 157, 242, 169, 111, 1, 169, 63,
+158, 109, 98, 63, 192, 224, 167, 169, 253, 147, 4, 101, 102, 205, 155,
+161, 129, 126, 251, 28, 235, 221, 28, 77, 121, 108, 142, 109, 169,
+165, 58, 116, 227, 221, 119, 111, 252, 63, 117, 194, 126, 175
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define LAYER1_HANDLE 0
+#define LAYER1_WIDTH 400
+#define LAYER1_HEIGHT 240
+#define LAYER1_CELLS 1
+#define LAYER2_HANDLE 1
+#define LAYER2_WIDTH 400
+#define LAYER2_HEIGHT 146
+#define LAYER2_CELLS 1
+#define LAYER3_HANDLE 2
+#define LAYER3_WIDTH 400
+#define LAYER3_HEIGHT 104
+#define LAYER3_CELLS 1
+#define LAYER4_HANDLE 3
+#define LAYER4_WIDTH 400
+#define LAYER4_HEIGHT 116
+#define LAYER4_CELLS 1
+#define TILES_HANDLE 4
+#define TILES_WIDTH 32
+#define TILES_HEIGHT 32
+#define TILES_CELLS 18
+#define CHECKER_HANDLE 5
+#define CHECKER_WIDTH 2
+#define CHECKER_HEIGHT 2
+#define CHECKER_CELLS 1
+#define ASSETS_END 103168UL
+static const shape_t LAYER1_SHAPE = {0, 400, 240, 0};
+static const shape_t LAYER2_SHAPE = {1, 400, 146, 0};
+static const shape_t LAYER3_SHAPE = {2, 400, 104, 0};
+static const shape_t LAYER4_SHAPE = {3, 400, 116, 0};
+static const shape_t TILES_SHAPE = {4, 32, 32, 0};
+static const shape_t CHECKER_SHAPE = {5, 2, 2, 0};

File diff suppressed because it is too large
+ 667 - 0
converted-assets/kenney_assets.h


+ 22 - 0
converted-assets/logo_assets.h

@@ -0,0 +1,22 @@
+#define LOAD_ASSETS()  GD.safeload("logo.gd2");
+#define GAMEDUINO_HANDLE 0
+#define GAMEDUINO_WIDTH 395
+#define GAMEDUINO_HEIGHT 113
+#define GAMEDUINO_CELLS 1
+#define OSHW_HANDLE 1
+#define OSHW_WIDTH 46
+#define OSHW_HEIGHT 50
+#define OSHW_CELLS 1
+#define TWO_HANDLE 2
+#define TWO_WIDTH 128
+#define TWO_HEIGHT 143
+#define TWO_CELLS 2
+#define PERSONAL_HANDLE 3
+#define PERSONAL_WIDTH 480
+#define PERSONAL_HEIGHT 272
+#define PERSONAL_CELLS 1
+#define ASSETS_END 175154UL
+static const shape_t GAMEDUINO_SHAPE = {0, 395, 113, 0};
+static const shape_t OSHW_SHAPE = {1, 46, 50, 0};
+static const shape_t TWO_SHAPE = {2, 128, 143, 0};
+static const shape_t PERSONAL_SHAPE = {3, 480, 272, 0};

+ 7 - 0
converted-assets/mono_assets.h

@@ -0,0 +1,7 @@
+#define LOAD_ASSETS()  GD.safeload("mono.gd2");
+#define GREEN_HANDLE 0
+#define GREEN_WIDTH 128
+#define GREEN_HEIGHT 128
+#define GREEN_CELLS 1
+#define ASSETS_END 8192UL
+static const shape_t GREEN_SHAPE = {0, 128, 128, 0};

+ 66 - 0
converted-assets/nightstrike_0_assets.h

@@ -0,0 +1,66 @@
+#define LOAD_ASSETS()  GD.safeload("night0.gd2");
+#define BACKGROUND_COLOR_HANDLE 0
+#define BACKGROUND_COLOR_WIDTH 120
+#define BACKGROUND_COLOR_HEIGHT 68
+#define BACKGROUND_COLOR_CELLS 2
+#define BACKGROUND_BITS_HANDLE 1
+#define BACKGROUND_BITS_WIDTH 480
+#define BACKGROUND_BITS_HEIGHT 272
+#define BACKGROUND_BITS_CELLS 2
+#define DEFENSOR_FRONT_HANDLE 2
+#define DEFENSOR_FRONT_WIDTH 104
+#define DEFENSOR_FRONT_HEIGHT 64
+#define DEFENSOR_FRONT_CELLS 2
+#define DEFENSOR_TURRET_HANDLE 3
+#define DEFENSOR_TURRET_WIDTH 38
+#define DEFENSOR_TURRET_HEIGHT 50
+#define DEFENSOR_TURRET_CELLS 1
+#define DEFENSOR_TURRET_SIZE 50
+#define MISSILE_A_HANDLE 4
+#define MISSILE_A_WIDTH 17
+#define MISSILE_A_HEIGHT 51
+#define MISSILE_A_CELLS 1
+#define MISSILE_A_SIZE 51
+#define MISSILE_C_HANDLE 5
+#define MISSILE_C_WIDTH 19
+#define MISSILE_C_HEIGHT 35
+#define MISSILE_C_CELLS 1
+#define MISSILE_C_SIZE 35
+#define HELI_HANDLE 6
+#define HELI_WIDTH 100
+#define HELI_HEIGHT 62
+#define HELI_CELLS 2
+#define COPTER_FALL_HANDLE 7
+#define COPTER_FALL_WIDTH 45
+#define COPTER_FALL_HEIGHT 37
+#define COPTER_FALL_CELLS 4
+#define FIRE_HANDLE 8
+#define FIRE_WIDTH 26
+#define FIRE_HEIGHT 30
+#define FIRE_CELLS 17
+#define EXPLODE_BIG_HANDLE 9
+#define EXPLODE_BIG_WIDTH 100
+#define EXPLODE_BIG_HEIGHT 70
+#define EXPLODE_BIG_CELLS 10
+#define EXPLODE_BIG_SIZE 100
+#define SOLDIER_RUN_HANDLE 10
+#define SOLDIER_RUN_WIDTH 34
+#define SOLDIER_RUN_HEIGHT 40
+#define SOLDIER_RUN_CELLS 8
+#define INFOFONT_HANDLE 11
+#define INFOFONT_WIDTH 12
+#define INFOFONT_HEIGHT 19
+#define INFOFONT_CELLS 96
+#define ASSETS_END 233032UL
+static const shape_t BACKGROUND_COLOR_SHAPE = {0, 120, 68, 0};
+static const shape_t BACKGROUND_BITS_SHAPE = {1, 480, 272, 0};
+static const shape_t DEFENSOR_FRONT_SHAPE = {2, 104, 64, 0};
+static const shape_t DEFENSOR_TURRET_SHAPE = {3, 38, 50, 50};
+static const shape_t MISSILE_A_SHAPE = {4, 17, 51, 51};
+static const shape_t MISSILE_C_SHAPE = {5, 19, 35, 35};
+static const shape_t HELI_SHAPE = {6, 100, 62, 0};
+static const shape_t COPTER_FALL_SHAPE = {7, 45, 37, 0};
+static const shape_t FIRE_SHAPE = {8, 26, 30, 0};
+static const shape_t EXPLODE_BIG_SHAPE = {9, 100, 70, 100};
+static const shape_t SOLDIER_RUN_SHAPE = {10, 34, 40, 0};
+static const shape_t INFOFONT_SHAPE = {11, 12, 19, 0};

+ 66 - 0
converted-assets/nightstrike_1_assets.h

@@ -0,0 +1,66 @@
+#define LOAD_ASSETS()  GD.safeload("night1.gd2");
+#define BACKGROUND_COLOR_HANDLE 0
+#define BACKGROUND_COLOR_WIDTH 120
+#define BACKGROUND_COLOR_HEIGHT 68
+#define BACKGROUND_COLOR_CELLS 2
+#define BACKGROUND_BITS_HANDLE 1
+#define BACKGROUND_BITS_WIDTH 480
+#define BACKGROUND_BITS_HEIGHT 272
+#define BACKGROUND_BITS_CELLS 2
+#define DEFENSOR_FRONT_HANDLE 2
+#define DEFENSOR_FRONT_WIDTH 104
+#define DEFENSOR_FRONT_HEIGHT 64
+#define DEFENSOR_FRONT_CELLS 2
+#define DEFENSOR_TURRET_HANDLE 3
+#define DEFENSOR_TURRET_WIDTH 38
+#define DEFENSOR_TURRET_HEIGHT 50
+#define DEFENSOR_TURRET_CELLS 1
+#define DEFENSOR_TURRET_SIZE 50
+#define MISSILE_A_HANDLE 4
+#define MISSILE_A_WIDTH 17
+#define MISSILE_A_HEIGHT 51
+#define MISSILE_A_CELLS 1
+#define MISSILE_A_SIZE 51
+#define MISSILE_C_HANDLE 5
+#define MISSILE_C_WIDTH 19
+#define MISSILE_C_HEIGHT 35
+#define MISSILE_C_CELLS 1
+#define MISSILE_C_SIZE 35
+#define HELI_HANDLE 6
+#define HELI_WIDTH 100
+#define HELI_HEIGHT 62
+#define HELI_CELLS 2
+#define COPTER_FALL_HANDLE 7
+#define COPTER_FALL_WIDTH 45
+#define COPTER_FALL_HEIGHT 37
+#define COPTER_FALL_CELLS 4
+#define FIRE_HANDLE 8
+#define FIRE_WIDTH 26
+#define FIRE_HEIGHT 30
+#define FIRE_CELLS 17
+#define EXPLODE_BIG_HANDLE 9
+#define EXPLODE_BIG_WIDTH 100
+#define EXPLODE_BIG_HEIGHT 70
+#define EXPLODE_BIG_CELLS 10
+#define EXPLODE_BIG_SIZE 100
+#define SOLDIER_RUN_HANDLE 10
+#define SOLDIER_RUN_WIDTH 34
+#define SOLDIER_RUN_HEIGHT 40
+#define SOLDIER_RUN_CELLS 8
+#define INFOFONT_HANDLE 11
+#define INFOFONT_WIDTH 12
+#define INFOFONT_HEIGHT 19
+#define INFOFONT_CELLS 96
+#define ASSETS_END 233032UL
+static const shape_t BACKGROUND_COLOR_SHAPE = {0, 120, 68, 0};
+static const shape_t BACKGROUND_BITS_SHAPE = {1, 480, 272, 0};
+static const shape_t DEFENSOR_FRONT_SHAPE = {2, 104, 64, 0};
+static const shape_t DEFENSOR_TURRET_SHAPE = {3, 38, 50, 50};
+static const shape_t MISSILE_A_SHAPE = {4, 17, 51, 51};
+static const shape_t MISSILE_C_SHAPE = {5, 19, 35, 35};
+static const shape_t HELI_SHAPE = {6, 100, 62, 0};
+static const shape_t COPTER_FALL_SHAPE = {7, 45, 37, 0};
+static const shape_t FIRE_SHAPE = {8, 26, 30, 0};
+static const shape_t EXPLODE_BIG_SHAPE = {9, 100, 70, 100};
+static const shape_t SOLDIER_RUN_SHAPE = {10, 34, 40, 0};
+static const shape_t INFOFONT_SHAPE = {11, 12, 19, 0};

+ 66 - 0
converted-assets/nightstrike_2_assets.h

@@ -0,0 +1,66 @@
+#define LOAD_ASSETS()  GD.safeload("night2.gd2");
+#define BACKGROUND_COLOR_HANDLE 0
+#define BACKGROUND_COLOR_WIDTH 120
+#define BACKGROUND_COLOR_HEIGHT 68
+#define BACKGROUND_COLOR_CELLS 2
+#define BACKGROUND_BITS_HANDLE 1
+#define BACKGROUND_BITS_WIDTH 480
+#define BACKGROUND_BITS_HEIGHT 272
+#define BACKGROUND_BITS_CELLS 2
+#define DEFENSOR_FRONT_HANDLE 2
+#define DEFENSOR_FRONT_WIDTH 104
+#define DEFENSOR_FRONT_HEIGHT 64
+#define DEFENSOR_FRONT_CELLS 2
+#define DEFENSOR_TURRET_HANDLE 3
+#define DEFENSOR_TURRET_WIDTH 38
+#define DEFENSOR_TURRET_HEIGHT 50
+#define DEFENSOR_TURRET_CELLS 1
+#define DEFENSOR_TURRET_SIZE 50
+#define MISSILE_A_HANDLE 4
+#define MISSILE_A_WIDTH 17
+#define MISSILE_A_HEIGHT 51
+#define MISSILE_A_CELLS 1
+#define MISSILE_A_SIZE 51
+#define MISSILE_C_HANDLE 5
+#define MISSILE_C_WIDTH 19
+#define MISSILE_C_HEIGHT 35
+#define MISSILE_C_CELLS 1
+#define MISSILE_C_SIZE 35
+#define HELI_HANDLE 6
+#define HELI_WIDTH 100
+#define HELI_HEIGHT 62
+#define HELI_CELLS 2
+#define COPTER_FALL_HANDLE 7
+#define COPTER_FALL_WIDTH 45
+#define COPTER_FALL_HEIGHT 37
+#define COPTER_FALL_CELLS 4
+#define FIRE_HANDLE 8
+#define FIRE_WIDTH 26
+#define FIRE_HEIGHT 30
+#define FIRE_CELLS 17
+#define EXPLODE_BIG_HANDLE 9
+#define EXPLODE_BIG_WIDTH 100
+#define EXPLODE_BIG_HEIGHT 70
+#define EXPLODE_BIG_CELLS 10
+#define EXPLODE_BIG_SIZE 100
+#define SOLDIER_RUN_HANDLE 10
+#define SOLDIER_RUN_WIDTH 34
+#define SOLDIER_RUN_HEIGHT 40
+#define SOLDIER_RUN_CELLS 8
+#define INFOFONT_HANDLE 11
+#define INFOFONT_WIDTH 12
+#define INFOFONT_HEIGHT 19
+#define INFOFONT_CELLS 96
+#define ASSETS_END 233032UL
+static const shape_t BACKGROUND_COLOR_SHAPE = {0, 120, 68, 0};
+static const shape_t BACKGROUND_BITS_SHAPE = {1, 480, 272, 0};
+static const shape_t DEFENSOR_FRONT_SHAPE = {2, 104, 64, 0};
+static const shape_t DEFENSOR_TURRET_SHAPE = {3, 38, 50, 50};
+static const shape_t MISSILE_A_SHAPE = {4, 17, 51, 51};
+static const shape_t MISSILE_C_SHAPE = {5, 19, 35, 35};
+static const shape_t HELI_SHAPE = {6, 100, 62, 0};
+static const shape_t COPTER_FALL_SHAPE = {7, 45, 37, 0};
+static const shape_t FIRE_SHAPE = {8, 26, 30, 0};
+static const shape_t EXPLODE_BIG_SHAPE = {9, 100, 70, 100};
+static const shape_t SOLDIER_RUN_SHAPE = {10, 34, 40, 0};
+static const shape_t INFOFONT_SHAPE = {11, 12, 19, 0};

+ 66 - 0
converted-assets/nightstrike_3_assets.h

@@ -0,0 +1,66 @@
+#define LOAD_ASSETS()  GD.safeload("night3.gd2");
+#define BACKGROUND_COLOR_HANDLE 0
+#define BACKGROUND_COLOR_WIDTH 120
+#define BACKGROUND_COLOR_HEIGHT 68
+#define BACKGROUND_COLOR_CELLS 2
+#define BACKGROUND_BITS_HANDLE 1
+#define BACKGROUND_BITS_WIDTH 480
+#define BACKGROUND_BITS_HEIGHT 272
+#define BACKGROUND_BITS_CELLS 2
+#define DEFENSOR_FRONT_HANDLE 2
+#define DEFENSOR_FRONT_WIDTH 104
+#define DEFENSOR_FRONT_HEIGHT 64
+#define DEFENSOR_FRONT_CELLS 2
+#define DEFENSOR_TURRET_HANDLE 3
+#define DEFENSOR_TURRET_WIDTH 38
+#define DEFENSOR_TURRET_HEIGHT 50
+#define DEFENSOR_TURRET_CELLS 1
+#define DEFENSOR_TURRET_SIZE 50
+#define MISSILE_A_HANDLE 4
+#define MISSILE_A_WIDTH 17
+#define MISSILE_A_HEIGHT 51
+#define MISSILE_A_CELLS 1
+#define MISSILE_A_SIZE 51
+#define MISSILE_C_HANDLE 5
+#define MISSILE_C_WIDTH 19
+#define MISSILE_C_HEIGHT 35
+#define MISSILE_C_CELLS 1
+#define MISSILE_C_SIZE 35
+#define HELI_HANDLE 6
+#define HELI_WIDTH 100
+#define HELI_HEIGHT 62
+#define HELI_CELLS 2
+#define COPTER_FALL_HANDLE 7
+#define COPTER_FALL_WIDTH 45
+#define COPTER_FALL_HEIGHT 37
+#define COPTER_FALL_CELLS 4
+#define FIRE_HANDLE 8
+#define FIRE_WIDTH 26
+#define FIRE_HEIGHT 30
+#define FIRE_CELLS 17
+#define EXPLODE_BIG_HANDLE 9
+#define EXPLODE_BIG_WIDTH 100
+#define EXPLODE_BIG_HEIGHT 70
+#define EXPLODE_BIG_CELLS 10
+#define EXPLODE_BIG_SIZE 100
+#define SOLDIER_RUN_HANDLE 10
+#define SOLDIER_RUN_WIDTH 34
+#define SOLDIER_RUN_HEIGHT 40
+#define SOLDIER_RUN_CELLS 8
+#define INFOFONT_HANDLE 11
+#define INFOFONT_WIDTH 12
+#define INFOFONT_HEIGHT 19
+#define INFOFONT_CELLS 96
+#define ASSETS_END 233032UL
+static const shape_t BACKGROUND_COLOR_SHAPE = {0, 120, 68, 0};
+static const shape_t BACKGROUND_BITS_SHAPE = {1, 480, 272, 0};
+static const shape_t DEFENSOR_FRONT_SHAPE = {2, 104, 64, 0};
+static const shape_t DEFENSOR_TURRET_SHAPE = {3, 38, 50, 50};
+static const shape_t MISSILE_A_SHAPE = {4, 17, 51, 51};
+static const shape_t MISSILE_C_SHAPE = {5, 19, 35, 35};
+static const shape_t HELI_SHAPE = {6, 100, 62, 0};
+static const shape_t COPTER_FALL_SHAPE = {7, 45, 37, 0};
+static const shape_t FIRE_SHAPE = {8, 26, 30, 0};
+static const shape_t EXPLODE_BIG_SHAPE = {9, 100, 70, 100};
+static const shape_t SOLDIER_RUN_SHAPE = {10, 34, 40, 0};
+static const shape_t INFOFONT_SHAPE = {11, 12, 19, 0};

+ 66 - 0
converted-assets/nightstrike_4_assets.h

@@ -0,0 +1,66 @@
+#define LOAD_ASSETS()  GD.safeload("night4.gd2");
+#define BACKGROUND_COLOR_HANDLE 0
+#define BACKGROUND_COLOR_WIDTH 120
+#define BACKGROUND_COLOR_HEIGHT 68
+#define BACKGROUND_COLOR_CELLS 2
+#define BACKGROUND_BITS_HANDLE 1
+#define BACKGROUND_BITS_WIDTH 480
+#define BACKGROUND_BITS_HEIGHT 272
+#define BACKGROUND_BITS_CELLS 2
+#define DEFENSOR_FRONT_HANDLE 2
+#define DEFENSOR_FRONT_WIDTH 104
+#define DEFENSOR_FRONT_HEIGHT 64
+#define DEFENSOR_FRONT_CELLS 2
+#define DEFENSOR_TURRET_HANDLE 3
+#define DEFENSOR_TURRET_WIDTH 38
+#define DEFENSOR_TURRET_HEIGHT 50
+#define DEFENSOR_TURRET_CELLS 1
+#define DEFENSOR_TURRET_SIZE 50
+#define MISSILE_A_HANDLE 4
+#define MISSILE_A_WIDTH 17
+#define MISSILE_A_HEIGHT 51
+#define MISSILE_A_CELLS 1
+#define MISSILE_A_SIZE 51
+#define MISSILE_C_HANDLE 5
+#define MISSILE_C_WIDTH 19
+#define MISSILE_C_HEIGHT 35
+#define MISSILE_C_CELLS 1
+#define MISSILE_C_SIZE 35
+#define HELI_HANDLE 6
+#define HELI_WIDTH 100
+#define HELI_HEIGHT 62
+#define HELI_CELLS 2
+#define COPTER_FALL_HANDLE 7
+#define COPTER_FALL_WIDTH 45
+#define COPTER_FALL_HEIGHT 37
+#define COPTER_FALL_CELLS 4
+#define FIRE_HANDLE 8
+#define FIRE_WIDTH 26
+#define FIRE_HEIGHT 30
+#define FIRE_CELLS 17
+#define EXPLODE_BIG_HANDLE 9
+#define EXPLODE_BIG_WIDTH 100
+#define EXPLODE_BIG_HEIGHT 70
+#define EXPLODE_BIG_CELLS 10
+#define EXPLODE_BIG_SIZE 100
+#define SOLDIER_RUN_HANDLE 10
+#define SOLDIER_RUN_WIDTH 34
+#define SOLDIER_RUN_HEIGHT 40
+#define SOLDIER_RUN_CELLS 8
+#define INFOFONT_HANDLE 11
+#define INFOFONT_WIDTH 12
+#define INFOFONT_HEIGHT 19
+#define INFOFONT_CELLS 96
+#define ASSETS_END 233032UL
+static const shape_t BACKGROUND_COLOR_SHAPE = {0, 120, 68, 0};
+static const shape_t BACKGROUND_BITS_SHAPE = {1, 480, 272, 0};
+static const shape_t DEFENSOR_FRONT_SHAPE = {2, 104, 64, 0};
+static const shape_t DEFENSOR_TURRET_SHAPE = {3, 38, 50, 50};
+static const shape_t MISSILE_A_SHAPE = {4, 17, 51, 51};
+static const shape_t MISSILE_C_SHAPE = {5, 19, 35, 35};
+static const shape_t HELI_SHAPE = {6, 100, 62, 0};
+static const shape_t COPTER_FALL_SHAPE = {7, 45, 37, 0};
+static const shape_t FIRE_SHAPE = {8, 26, 30, 0};
+static const shape_t EXPLODE_BIG_SHAPE = {9, 100, 70, 100};
+static const shape_t SOLDIER_RUN_SHAPE = {10, 34, 40, 0};
+static const shape_t INFOFONT_SHAPE = {11, 12, 19, 0};

+ 17 - 0
converted-assets/nightstrike_welcome_assets.h

@@ -0,0 +1,17 @@
+#define WELCOME_LOAD_ASSETS()  GD.safeload("nightw.gd2");
+#define WELCOME_BACKGROUND_COLOR_HANDLE 0
+#define WELCOME_BACKGROUND_COLOR_WIDTH 120
+#define WELCOME_BACKGROUND_COLOR_HEIGHT 68
+#define WELCOME_BACKGROUND_COLOR_CELLS 2
+#define WELCOME_BACKGROUND_BITS_HANDLE 1
+#define WELCOME_BACKGROUND_BITS_WIDTH 480
+#define WELCOME_BACKGROUND_BITS_HEIGHT 272
+#define WELCOME_BACKGROUND_BITS_CELLS 2
+#define WELCOME_DISPLAYFONT_HANDLE 2
+#define WELCOME_DISPLAYFONT_WIDTH 29
+#define WELCOME_DISPLAYFONT_HEIGHT 46
+#define WELCOME_DISPLAYFONT_CELLS 96
+#define WELCOME_ASSETS_END 131668UL
+static const shape_t WELCOME_BACKGROUND_COLOR_SHAPE = {0, 120, 68, 0};
+static const shape_t WELCOME_BACKGROUND_BITS_SHAPE = {1, 480, 272, 0};
+static const shape_t WELCOME_DISPLAYFONT_SHAPE = {2, 29, 46, 0};

+ 32 - 0
converted-assets/noisy_assets.h

@@ -0,0 +1,32 @@
+#define LOAD_ASSETS()  GD.safeload("noisy.gd2");
+#define DIGIT_0 0UL
+#define DIGIT_0_LENGTH 3272
+#define DIGIT_0_FREQ 8000
+#define DIGIT_1 3272UL
+#define DIGIT_1_LENGTH 2576
+#define DIGIT_1_FREQ 8000
+#define DIGIT_2 5848UL
+#define DIGIT_2_LENGTH 2320
+#define DIGIT_2_FREQ 8000
+#define DIGIT_3 8168UL
+#define DIGIT_3_LENGTH 2392
+#define DIGIT_3_FREQ 8000
+#define DIGIT_4 10560UL
+#define DIGIT_4_LENGTH 2608
+#define DIGIT_4_FREQ 8000
+#define DIGIT_5 13168UL
+#define DIGIT_5_LENGTH 2664
+#define DIGIT_5_FREQ 8000
+#define DIGIT_6 15832UL
+#define DIGIT_6_LENGTH 2728
+#define DIGIT_6_FREQ 8000
+#define DIGIT_7 18560UL
+#define DIGIT_7_LENGTH 3192
+#define DIGIT_7_FREQ 8000
+#define DIGIT_8 21752UL
+#define DIGIT_8_LENGTH 2104
+#define DIGIT_8_FREQ 8000
+#define DIGIT_9 23856UL
+#define DIGIT_9_LENGTH 2960
+#define DIGIT_9_FREQ 8000
+#define ASSETS_END 26816UL

+ 12 - 0
converted-assets/reflection_assets.h

@@ -0,0 +1,12 @@
+#define LOAD_ASSETS()  GD.safeload("reflec~1.gd2");
+#define GAMEDUINO_HANDLE 0
+#define GAMEDUINO_WIDTH 395
+#define GAMEDUINO_HEIGHT 113
+#define GAMEDUINO_CELLS 1
+#define GRADIENT_HANDLE 1
+#define GRADIENT_WIDTH 1
+#define GRADIENT_HEIGHT 128
+#define GRADIENT_CELLS 1
+#define ASSETS_END 89398UL
+static const shape_t GAMEDUINO_SHAPE = {0, 395, 113, 0};
+static const shape_t GRADIENT_SHAPE = {1, 1, 128, 0};

+ 2 - 0
converted-assets/sdcard_assets.h

@@ -0,0 +1,2 @@
+#define LOAD_ASSETS()  GD.safeload("sdcard.gd2");
+#define ASSETS_END 0UL

+ 38 - 0
converted-assets/selftest_assets.h

@@ -0,0 +1,38 @@
+#define LOAD_ASSETS()  GD.safeload("selftest.gd2");
+#define KITTEN_HANDLE 0
+#define KITTEN_WIDTH 96
+#define KITTEN_HEIGHT 96
+#define KITTEN_CELLS 1
+#define DIGIT_0 18432UL
+#define DIGIT_0_LENGTH 3272
+#define DIGIT_0_FREQ 8000
+#define DIGIT_1 21704UL
+#define DIGIT_1_LENGTH 2576
+#define DIGIT_1_FREQ 8000
+#define DIGIT_2 24280UL
+#define DIGIT_2_LENGTH 2320
+#define DIGIT_2_FREQ 8000
+#define DIGIT_3 26600UL
+#define DIGIT_3_LENGTH 2392
+#define DIGIT_3_FREQ 8000
+#define DIGIT_4 28992UL
+#define DIGIT_4_LENGTH 2608
+#define DIGIT_4_FREQ 8000
+#define DIGIT_5 31600UL
+#define DIGIT_5_LENGTH 2664
+#define DIGIT_5_FREQ 8000
+#define DIGIT_6 34264UL
+#define DIGIT_6_LENGTH 2728
+#define DIGIT_6_FREQ 8000
+#define DIGIT_7 36992UL
+#define DIGIT_7_LENGTH 3192
+#define DIGIT_7_FREQ 8000
+#define DIGIT_8 40184UL
+#define DIGIT_8_LENGTH 2104
+#define DIGIT_8_FREQ 8000
+#define DIGIT_9 42288UL
+#define DIGIT_9_LENGTH 2960
+#define DIGIT_9_FREQ 8000
+#define KITTEN_CRC 0xe3337e2bUL
+#define ASSETS_END 45248UL
+static const shape_t KITTEN_SHAPE = {0, 96, 96, 0};

+ 12 - 0
converted-assets/slotgag_assets.h

@@ -0,0 +1,12 @@
+#define LOAD_ASSETS()  GD.safeload("slotgag.gd2");
+#define BACKGROUND_HANDLE 0
+#define BACKGROUND_WIDTH 256
+#define BACKGROUND_HEIGHT 256
+#define BACKGROUND_CELLS 1
+#define GAMEDUINO_HANDLE 1
+#define GAMEDUINO_WIDTH 395
+#define GAMEDUINO_HEIGHT 113
+#define GAMEDUINO_CELLS 1
+#define ASSETS_END 220342UL
+static const shape_t BACKGROUND_SHAPE = {0, 256, 256, 0};
+static const shape_t GAMEDUINO_SHAPE = {1, 395, 113, 0};

+ 2517 - 0
converted-assets/sprites_assets.h

@@ -0,0 +1,2517 @@
+static const PROGMEM uint8_t __assets[3708] = {
+0, 0, 0, 5, 0, 0, 0, 1, 16, 32, 0, 8, 16, 64, 0, 7, 34, 255, 255, 255,
+0, 0, 0, 0, 120, 156, 229, 92, 205, 106, 27, 201, 22, 110, 178, 82,
+32, 144, 187, 202, 120, 17, 152, 44, 102, 21, 152, 133, 152, 23, 16,
+89, 122, 49, 15, 224, 71, 24, 47, 253, 2, 109, 137, 1, 67, 188, 200,
+38, 139, 1, 13, 68, 55, 48, 216, 228, 46, 228, 133, 22, 6, 25, 188,
+50, 54, 52, 186, 12, 228, 10, 219, 224, 160, 196, 118, 6, 217, 198,
+22, 22, 56, 33, 99, 162, 91, 95, 157, 174, 174, 191, 83, 37, 103, 140,
+19, 59, 169, 194, 178, 212, 223, 119, 206, 169, 234, 238, 250, 57, 85,
+167, 59, 73, 46, 144, 154, 73, 150, 244, 234, 195, 228, 60, 25, 36,
+123, 73, 79, 252, 106, 139, 99, 86, 186, 155, 222, 75, 239, 167, 223,
+139, 191, 123, 233, 221, 180, 148, 250, 104, 125, 248, 125, 250, 125,
+128, 161, 164, 67, 56, 24, 115, 91, 253, 253, 233, 211, 254, 254, 220,
+150, 143, 106, 70, 8, 85, 140, 48, 74, 165, 136, 73, 223, 11, 148, 77,
+163, 115, 91, 177, 250, 163, 124, 253, 253, 80, 253, 85, 253, 250,
+251, 161, 250, 79, 159, 6, 234, 127, 129, 235, 115, 177, 116, 178, 82,
+31, 78, 236, 134, 209, 137, 221, 147, 149, 249, 165, 147, 21, 30, 157,
+233, 64, 122, 114, 145, 67, 231, 151, 58, 203, 173, 238, 104, 84, 31,
+158, 172, 112, 140, 201, 197, 206, 242, 76, 7, 12, 216, 224, 112, 104,
+0, 163, 187, 93, 94, 243, 241, 82, 131, 24, 39, 43, 229, 181, 249, 37,
+31, 223, 216, 121, 120, 48, 125, 154, 125, 152, 62, 125, 120, 176,
+177, 227, 227, 11, 2, 47, 143, 8, 95, 96, 112, 104, 32, 121, 78, 154,
+240, 95, 142, 167, 79, 127, 57, 14, 227, 147, 199, 229, 209, 100, 16,
+95, 144, 37, 12, 89, 87, 26, 66, 210, 74, 67, 88, 154, 24, 49, 244,
+98, 169, 151, 234, 207, 0, 99, 86, 253, 241, 172, 94, 154, 214, 122,
+41, 131, 254, 71, 220, 183, 25, 221, 189, 12, 218, 76, 54, 147, 163,
+228, 189, 184, 199, 113, 135, 187, 247, 55, 208, 129, 64, 207, 69,
+126, 207, 48, 218, 192, 101, 27, 81, 248, 170, 193, 176, 165, 143, 60,
+92, 74, 231, 232, 32, 71, 219, 162, 188, 174, 180, 137, 54, 11, 92,
+73, 135, 209, 184, 236, 123, 217, 178, 125, 12, 105, 211, 193, 174,
+40, 45, 236, 160, 103, 162, 236, 222, 69, 115, 91, 11, 121, 235, 66,
+166, 123, 120, 110, 75, 75, 18, 86, 30, 149, 71, 39, 31, 79, 62, 106,
+14, 225, 232, 245, 128, 42, 76, 105, 233, 239, 219, 242, 102, 182,
+219, 9, 236, 207, 109, 153, 217, 180, 175, 89, 200, 253, 215, 161, 54,
+0, 153, 254, 235, 112, 11, 90, 16, 173, 15, 150, 195, 248, 139, 179,
+242, 232, 197, 89, 72, 3, 112, 212, 48, 164, 1, 245, 204, 62, 64, 222,
+47, 187, 102, 140, 107, 225, 87, 153, 208, 106, 199, 50, 242, 182, 31,
+78, 1, 180, 41, 242, 122, 242, 82, 180, 252, 84, 126, 119, 209, 117,
+217, 130, 232, 78, 239, 129, 103, 161, 47, 209, 182, 243, 17, 144,
+218, 233, 75, 171, 117, 247, 114, 84, 231, 129, 96, 168, 180, 46, 52,
+158, 123, 185, 103, 226, 142, 52, 89, 208, 250, 179, 220, 170, 41,
+109, 150, 176, 237, 88, 232, 25, 210, 74, 67, 47, 71, 206, 189, 250,
+169, 51, 208, 99, 107, 127, 29, 82, 83, 246, 219, 77, 235, 155, 141,
+226, 186, 100, 214, 55, 157, 228, 217, 19, 103, 24, 199, 233, 58, 226,
+155, 78, 250, 220, 154, 223, 28, 121, 231, 234, 154, 242, 238, 245,
+113, 237, 219, 12, 31, 53, 25, 60, 170, 25, 33, 84, 49, 226, 87, 238,
+186, 93, 215, 79, 76, 165, 198, 201, 74, 169, 17, 66, 38, 118, 91,
+221, 86, 55, 191, 254, 65, 188, 213, 229, 116, 96, 190, 144, 214, 158,
+85, 159, 85, 43, 213, 103, 204, 188, 226, 91, 199, 175, 67, 130, 135,
+50, 183, 21, 243, 175, 238, 167, 248, 187, 31, 240, 177, 8, 7, 118,
+159, 193, 239, 166, 223, 9, 252, 59, 169, 193, 151, 7, 10, 15, 147,
+24, 190, 247, 244, 157, 225, 95, 250, 12, 37, 125, 25, 252, 178, 250,
+99, 242, 154, 193, 163, 95, 62, 161, 253, 214, 135, 104, 187, 157,
+229, 201, 69, 166, 15, 64, 223, 119, 46, 102, 214, 71, 98, 198, 26,
+234, 95, 37, 222, 221, 238, 110, 51, 30, 98, 142, 119, 183, 71, 163,
+24, 14, 15, 51, 166, 127, 52, 138, 217, 151, 210, 44, 62, 185, 8, 203,
+245, 97, 119, 59, 140, 75, 116, 108, 253, 120, 124, 236, 249, 187,
+230, 73, 206, 218, 196, 200, 47, 124, 187, 170, 63, 195, 203, 189, 61,
+57, 126, 138, 239, 169, 61, 123, 203, 81, 49, 246, 202, 79, 57, 62,
+20, 28, 57, 170, 42, 84, 243, 228, 55, 48, 50, 169, 111, 64, 199, 96,
+27, 12, 42, 5, 122, 201, 252, 168, 98, 164, 202, 130, 252, 214, 54,
+172, 251, 51, 132, 172, 40, 65, 155, 205, 214, 53, 156, 219, 130, 151,
+242, 223, 143, 240, 76, 184, 249, 59, 225, 229, 17, 143, 19, 122, 242,
+17, 94, 80, 72, 195, 141, 72, 222, 184, 110, 165, 118, 178, 23, 97,
+180, 139, 185, 97, 8, 95, 23, 88, 72, 67, 91, 174, 27, 172, 139, 220,
+102, 25, 123, 82, 115, 59, 88, 134, 44, 199, 51, 185, 134, 230, 50,
+50, 41, 191, 151, 51, 218, 242, 206, 177, 173, 15, 242, 178, 241, 22,
+178, 252, 158, 89, 151, 127, 92, 29, 179, 66, 251, 158, 96, 220, 240,
+121, 96, 146, 96, 157, 47, 140, 162, 175, 11, 51, 128, 242, 24, 218,
+9, 214, 239, 248, 22, 182, 177, 19, 66, 73, 14, 216, 134, 92, 41, 224,
+208, 254, 254, 70, 190, 138, 224, 163, 180, 106, 168, 86, 23, 108,
+156, 218, 181, 198, 121, 219, 208, 128, 181, 219, 79, 173, 213, 87,
+149, 154, 211, 167, 210, 183, 247, 253, 123, 145, 208, 55, 162, 245,
+201, 255, 174, 31, 213, 204, 253, 202, 129, 228, 100, 57, 163, 64,
+105, 101, 93, 156, 191, 38, 176, 28, 29, 40, 13, 132, 106, 70, 222,
+187, 231, 22, 148, 172, 197, 48, 60, 57, 218, 85, 192, 29, 233, 104,
+176, 180, 91, 242, 78, 233, 61, 251, 94, 253, 139, 59, 139, 69, 191,
+138, 148, 89, 217, 67, 229, 172, 45, 207, 253, 125, 231, 12, 200, 163,
+245, 97, 121, 36, 16, 66, 205, 115, 132, 187, 1, 242, 205, 34, 103,
+142, 167, 157, 25, 247, 157, 102, 88, 22, 104, 108, 166, 171, 196,
+206, 223, 50, 75, 158, 175, 97, 12, 213, 140, 88, 250, 26, 175, 188,
+76, 98, 142, 101, 100, 31, 173, 15, 53, 234, 174, 51, 210, 209, 250,
+112, 234, 240, 89, 149, 80, 57, 123, 43, 80, 172, 58, 10, 249, 180,
+200, 179, 246, 238, 130, 150, 49, 25, 182, 133, 180, 86, 31, 194, 187,
+70, 230, 246, 45, 164, 206, 34, 7, 106, 24, 65, 53, 35, 132, 74, 70,
+20, 189, 201, 233, 100, 197, 204, 62, 138, 254, 85, 229, 250, 208,
+246, 127, 212, 209, 238, 54, 252, 35, 160, 200, 182, 172, 58, 138,
+140, 245, 35, 115, 13, 201, 70, 21, 195, 181, 79, 218, 187, 219, 176,
+229, 251, 95, 56, 166, 51, 95, 195, 24, 170, 25, 177, 179, 116, 243,
+252, 190, 79, 79, 88, 37, 138, 161, 24, 37, 67, 12, 160, 24, 125, 121,
+6, 80, 244, 226, 189, 89, 78, 135, 148, 29, 208, 252, 128, 246, 209,
+77, 134, 41, 75, 243, 12, 115, 182, 166, 100, 177, 87, 165, 70, 9, 27,
+213, 199, 129, 152, 51, 57, 53, 63, 224, 230, 134, 215, 34, 113, 43,
+246, 54, 234, 175, 216, 155, 248, 32, 223, 119, 225, 25, 122, 101,
+125, 28, 99, 220, 202, 250, 69, 24, 227, 234, 49, 158, 49, 110, 253,
+254, 34, 140, 216, 40, 126, 125, 24, 30, 202, 238, 201, 91, 104, 50,
+8, 51, 138, 145, 55, 136, 99, 20, 14, 239, 33, 250, 227, 54, 163, 123,
+150, 179, 161, 214, 198, 105, 244, 125, 86, 197, 124, 192, 24, 253,
+83, 154, 33, 152, 26, 76, 134, 44, 147, 26, 187, 139, 255, 186, 156,
+249, 175, 154, 46, 127, 175, 230, 91, 144, 214, 115, 253, 254, 12,
+194, 153, 125, 48, 229, 151, 165, 150, 136, 172, 137, 167, 93, 151, 0,
+214, 77, 134, 137, 163, 20, 105, 45, 168, 33, 47, 161, 87, 190, 166,
+24, 119, 172, 249, 177, 252, 93, 160, 201, 166, 24, 177, 55, 205, 44,
+127, 43, 70, 150, 28, 137, 30, 224, 200, 204, 242, 119, 86, 224, 189,
+238, 182, 220, 187, 44, 178, 252, 157, 21, 250, 215, 133, 190, 117,
+51, 203, 223, 205, 11, 150, 175, 72, 52, 118, 248, 199, 53, 142, 253,
+137, 24, 94, 30, 93, 78, 254, 178, 246, 175, 90, 62, 54, 6, 97, 21, 2,
+235, 24, 33, 198, 198, 142, 90, 7, 225, 101, 49, 2, 34, 186, 1, 217,
+214, 65, 35, 173, 90, 71, 1, 230, 51, 72, 30, 35, 112, 124, 5, 53, 84,
+62, 66, 41, 50, 36, 180, 190, 138, 248, 46, 142, 97, 162, 62, 195, 69,
+93, 6, 226, 194, 176, 110, 235, 70, 168, 168, 243, 180, 177, 243, 248,
+204, 150, 70, 126, 124, 166, 113, 58, 115, 33, 121, 85, 179, 144, 125,
+159, 113, 53, 43, 200, 104, 29, 49, 205, 177, 251, 67, 51, 194, 40,
+102, 229, 83, 135, 161, 253, 227, 68, 197, 72, 196, 102, 0, 189, 60,
+250, 145, 221, 125, 153, 58, 20, 232, 251, 100, 79, 252, 231, 118,
+255, 133, 108, 171, 139, 29, 24, 79, 135, 210, 60, 40, 53, 164, 103,
+50, 112, 24, 171, 10, 47, 175, 181, 186, 229, 181, 2, 95, 181, 229,
+133, 93, 196, 136, 13, 100, 57, 2, 22, 100, 230, 234, 208, 44, 172,
+184, 145, 105, 95, 40, 141, 243, 100, 115, 111, 151, 141, 245, 153,
+219, 186, 253, 118, 110, 43, 140, 78, 30, 139, 185, 244, 107, 201,
+240, 108, 96, 149, 55, 182, 143, 2, 89, 48, 184, 245, 84, 83, 214, 95,
+7, 86, 178, 106, 45, 214, 69, 55, 118, 76, 73, 78, 22, 177, 159, 252,
+10, 242, 237, 183, 229, 209, 47, 199, 161, 245, 97, 200, 134, 122,
+230, 185, 173, 236, 3, 36, 57, 236, 115, 165, 201, 197, 216, 142, 228,
+228, 226, 76, 7, 94, 115, 136, 65, 145, 189, 97, 70, 169, 129, 168,
+221, 139, 50, 248, 178, 40, 198, 252, 82, 119, 123, 234, 16, 17, 192,
+46, 7, 140, 249, 165, 153, 14, 180, 240, 12, 148, 179, 188, 6, 70,
+103, 25, 123, 176, 110, 20, 177, 194, 59, 203, 212, 207, 185, 123,
+208, 176, 80, 94, 35, 20, 119, 138, 191, 71, 13, 13, 243, 75, 106,
+148, 242, 113, 42, 35, 105, 231, 98, 152, 21, 3, 153, 67, 175, 46,
+209, 29, 172, 70, 23, 180, 94, 31, 215, 241, 159, 62, 62, 185, 136,
+190, 29, 43, 44, 173, 238, 76, 199, 143, 0, 191, 172, 126, 205, 224,
+81, 98, 44, 236, 220, 126, 203, 69, 134, 106, 70, 246, 33, 214, 210,
+22, 118, 194, 209, 159, 132, 103, 31, 98, 56, 245, 123, 49, 52, 84,
+122, 85, 59, 138, 80, 143, 105, 249, 210, 169, 50, 251, 108, 182, 194,
+245, 235, 114, 239, 179, 130, 117, 218, 234, 131, 170, 199, 104, 11,
+143, 97, 47, 201, 30, 84, 123, 240, 83, 252, 8, 130, 30, 141, 140,
+149, 89, 48, 24, 121, 26, 27, 165, 133, 160, 253, 54, 157, 181, 216,
+185, 195, 60, 53, 182, 58, 69, 115, 173, 24, 30, 215, 143, 52, 110,
+110, 6, 244, 250, 94, 223, 80, 42, 53, 202, 107, 19, 187, 120, 254,
+163, 188, 198, 245, 207, 132, 34, 130, 134, 99, 148, 26, 243, 75, 229,
+53, 194, 253, 190, 25, 210, 120, 46, 4, 12, 232, 25, 141, 108, 13, 52,
+47, 83, 235, 186, 200, 246, 10, 50, 228, 205, 117, 97, 250, 109, 90,
+152, 95, 66, 233, 148, 236, 196, 174, 219, 191, 66, 130, 44, 163, 20,
+182, 52, 141, 90, 100, 83, 253, 209, 108, 86, 149, 141, 214, 159, 81,
+67, 148, 28, 181, 83, 199, 180, 60, 216, 224, 232, 239, 177, 253, 243,
+235, 154, 122, 105, 172, 127, 195, 58, 74, 138, 253, 157, 89, 110,
+143, 29, 199, 49, 242, 165, 146, 101, 51, 104, 76, 165, 222, 79, 106,
+168, 217, 254, 143, 66, 105, 124, 0, 3, 154, 76, 105, 219, 131, 74,
+61, 220, 245, 208, 76, 156, 247, 192, 204, 18, 186, 184, 41, 109, 107,
+8, 249, 168, 202, 3, 142, 249, 184, 55, 61, 97, 246, 29, 243, 14, 105,
+222, 20, 98, 196, 253, 127, 204, 49, 208, 63, 240, 79, 151, 41, 28,
+173, 55, 134, 227, 217, 178, 171, 194, 209, 203, 224, 233, 185, 16,
+58, 94, 254, 166, 167, 169, 67, 204, 210, 133, 255, 27, 72, 157, 229,
+169, 67, 172, 0, 4, 21, 172, 138, 49, 126, 175, 240, 171, 189, 84, 31,
+222, 73, 133, 246, 77, 62, 194, 171, 213, 189, 155, 222, 73, 37, 131,
+213, 48, 117, 120, 39, 93, 121, 55, 117, 88, 74, 185, 18, 180, 186,
+43, 239, 238, 228, 242, 216, 39, 244, 113, 72, 163, 4, 43, 239, 184,
+39, 24, 225, 117, 196, 228, 193, 128, 133, 16, 122, 179, 211, 194,
+206, 70, 254, 252, 24, 34, 229, 232, 155, 246, 207, 23, 118, 104, 213,
+80, 204, 188, 218, 216, 121, 67, 47, 128, 62, 93, 49, 30, 30, 60, 62,
+67, 150, 145, 152, 25, 190, 209, 74, 40, 124, 114, 146, 135, 207, 158,
+100, 226, 175, 141, 79, 100, 244, 22, 36, 111, 219, 6, 195, 180, 127,
+81, 219, 194, 186, 180, 77, 168, 107, 91, 90, 102, 108, 171, 186, 11,
+110, 38, 254, 218, 248, 164, 252, 117, 246, 240, 255, 36, 169, 168,
+11, 55, 43, 31, 64, 238, 86, 32, 87, 225, 23, 228, 159, 114, 22, 225,
+225, 179, 60, 30, 183, 144, 71, 124, 92, 202, 66, 92, 30, 223, 248,
+252, 185, 206, 113, 60, 253, 154, 242, 89, 161, 152, 149, 35, 250,
+102, 98, 215, 204, 229, 53, 98, 252, 154, 214, 135, 71, 79, 126, 124,
+250, 243, 211, 39, 191, 81, 254, 249, 233, 143, 79, 143, 158, 180,
+186, 10, 159, 58, 4, 254, 228, 183, 211, 198, 79, 127, 252, 244, 199,
+105, 227, 201, 111, 159, 134, 79, 236, 30, 61, 129, 246, 63, 127, 63,
+109, 156, 54, 254, 252, 29, 22, 254, 9, 14, 6, 80, 14, 143, 149, 191,
+213, 125, 49, 79, 12, 202, 64, 95, 204, 43, 220, 100, 80, 182, 81,
+147, 65, 217, 69, 53, 131, 178, 143, 42, 6, 101, 14, 53, 175, 227, 5,
+46, 249, 63, 74, 232, 215, 98, 79, 158, 160, 103, 12, 224, 3, 244,
+141, 144, 23, 253, 94, 150, 12, 120, 86, 68, 254, 178, 246, 101, 146,
+222, 223, 37, 228, 47, 99, 159, 234, 78, 35, 71, 168, 246, 196, 9, 91,
+184, 108, 253, 46, 158, 226, 113, 74, 165, 198, 76, 103, 98, 55, 196,
+32, 52, 188, 150, 75, 40, 63, 203, 5, 74, 171, 188, 156, 180, 150,
+141, 161, 254, 202, 46, 161, 240, 241, 9, 245, 203, 110, 162, 202, 35,
+231, 53, 115, 79, 56, 150, 26, 40, 51, 80, 172, 205, 113, 171, 31,
+132, 34, 74, 168, 60, 2, 195, 215, 64, 121, 156, 15, 4, 6, 158, 191,
+15, 95, 29, 172, 16, 127, 153, 40, 50, 21, 99, 31, 123, 250, 133, 223,
+223, 165, 157, 231, 233, 211, 23, 103, 200, 46, 67, 161, 253, 125,
+210, 223, 223, 7, 71, 51, 240, 204, 62, 161, 120, 250, 158, 226, 236,
+167, 79, 31, 159, 245, 95, 19, 254, 240, 160, 243, 17, 79, 213, 3,
+197, 243, 245, 96, 208, 167, 194, 97, 153, 62, 57, 188, 255, 186, 243,
+145, 244, 131, 225, 235, 167, 186, 189, 56, 11, 149, 79, 251, 246,
+124, 253, 244, 185, 163, 121, 104, 236, 28, 134, 176, 47, 144, 154,
+214, 19, 216, 70, 194, 190, 30, 90, 68, 120, 143, 18, 104, 184, 247,
+64, 12, 102, 169, 193, 239, 13, 18, 10, 255, 136, 219, 125, 84, 40,
+255, 244, 225, 21, 161, 182, 93, 246, 217, 36, 3, 101, 207, 73, 222,
+167, 92, 239, 103, 195, 105, 7, 122, 51, 176, 251, 44, 227, 205, 254,
+53, 10, 198, 249, 173, 58, 79, 215, 173, 58, 248, 121, 30, 89, 71, 17,
+122, 153, 119, 111, 13, 138, 168, 126, 245, 22, 1, 199, 190, 232, 49,
+233, 233, 146, 77, 62, 198, 96, 35, 127, 191, 15, 230, 33, 124, 4, 11,
+189, 135, 196, 142, 251, 116, 53, 100, 31, 194, 17, 12, 100, 33, 220,
+62, 245, 251, 171, 120, 124, 92, 124, 196, 248, 248, 158, 171, 221,
+55, 80, 179, 151, 240, 238, 19, 69, 136, 68, 202, 224, 61, 25, 227,
+225, 148, 217, 200, 69, 88, 22, 215, 175, 89, 220, 11, 14, 138, 179,
+143, 17, 152, 67, 233, 220, 210, 24, 203, 239, 47, 162, 247, 45, 53,
+112, 253, 75, 141, 219, 111, 93, 255, 156, 174, 173, 150, 183, 113,
+91, 250, 225, 1, 112, 115, 159, 81, 173, 254, 146, 124, 24, 183, 165,
+125, 11, 232, 253, 57, 244, 115, 166, 248, 29, 72, 239, 236, 81, 111,
+238, 113, 82, 51, 121, 41, 100, 131, 239, 46, 193, 44, 171, 62, 156,
+233, 196, 230, 149, 83, 135, 97, 60, 145, 111, 129, 137, 188, 27, 5,
+248, 251, 104, 252, 47, 240, 184, 252, 120, 253, 95, 78, 254, 170,
+211, 170, 124, 139, 213, 102, 96, 253, 117, 53, 127, 199, 85, 128, 33,
+174, 124, 33, 207, 221, 65, 152, 197, 73, 198, 170, 152, 65, 189, 246,
+165, 209, 254, 160, 131, 90, 130, 31, 95, 104, 183, 22, 243, 55, 183,
+171, 159, 123, 162, 185, 229, 242, 200, 47, 15, 34, 144, 20, 46, 122,
+157, 8, 110, 234, 226, 244, 143, 43, 159, 58, 130, 122, 211, 27, 168,
+248, 200, 38, 154, 231, 18, 203, 47, 207, 101, 211, 173, 87, 63, 252,
+253, 195, 223, 207, 143, 159, 31, 215, 14, 110, 189, 114, 81, 28, 125,
+243, 63, 202, 183, 94, 213, 14, 108, 14, 161, 181, 131, 31, 254, 222,
+61, 219, 61, 195, 247, 71, 111, 52, 67, 163, 144, 171, 29, 0, 51, 25,
+132, 214, 14, 192, 51, 25, 248, 3, 250, 232, 141, 41, 173, 112, 250,
+188, 245, 234, 249, 177, 43, 173, 112, 42, 9, 56, 116, 20, 191, 129,
+17, 234, 227, 100, 65, 161, 164, 17, 245, 53, 237, 233, 255, 132, 254,
+251, 79, 148, 80, 29, 131, 6, 147, 139, 242, 39, 9, 149, 239, 209, 27,
+93, 3, 133, 66, 90, 51, 80, 162, 221, 179, 231, 199, 46, 74, 12, 85,
+74, 194, 108, 84, 113, 84, 246, 177, 207, 153, 240, 38, 70, 238, 249,
+28, 28, 135, 231, 222, 89, 158, 219, 194, 12, 222, 28, 37, 128, 33,
+234, 10, 113, 87, 254, 60, 27, 222, 57, 189, 251, 17, 241, 85, 164,
+229, 175, 186, 139, 82, 124, 17, 24, 243, 75, 38, 131, 226, 178, 38,
+118, 241, 94, 17, 224, 120, 195, 6, 49, 76, 156, 80, 30, 135, 126,
+196, 118, 2, 245, 113, 98, 224, 189, 147, 60, 170, 117, 32, 3, 227,
+214, 47, 254, 170, 171, 243, 99, 214, 237, 91, 73, 52, 55, 86, 241,
+217, 238, 28, 195, 68, 145, 225, 107, 187, 79, 88, 217, 239, 31, 180,
+113, 68, 37, 40, 239, 156, 60, 116, 196, 150, 26, 6, 154, 249, 83,
+167, 197, 159, 240, 62, 173, 231, 183, 141, 167, 152, 114, 255, 198,
+159, 157, 133, 226, 199, 53, 227, 42, 163, 179, 175, 107, 170, 84, 91,
+93, 231, 217, 239, 60, 183, 186, 149, 170, 184, 54, 85, 249, 228, 119,
+254, 220, 72, 41, 45, 62, 51, 68, 138, 1, 31, 141, 4, 126, 94, 74,
+157, 55, 188, 101, 163, 17, 240, 52, 199, 85, 46, 120, 2, 79, 171,
+244, 100, 49, 93, 59, 75, 195, 64, 234, 159, 165, 213, 138, 188, 4,
+26, 37, 235, 179, 234, 77, 167, 146, 241, 82, 190, 125, 244, 92, 190,
+191, 231, 165, 70, 21, 3, 245, 24, 201, 132, 114, 51, 207, 255, 224,
+45, 52, 50, 182, 45, 245, 208, 111, 33, 85, 170, 149, 106, 120, 191,
+11, 119, 2, 82, 124, 71, 12, 251, 104, 149, 106, 47, 176, 111, 86, 49,
+162, 2, 125, 134, 137, 202, 119, 170, 218, 111, 112, 49, 143, 180,
+243, 231, 25, 53, 195, 62, 210, 206, 231, 177, 109, 75, 218, 60, 18,
+215, 255, 205, 38, 122, 191, 85, 108, 237, 154, 162, 243, 90, 93, 142,
+67, 173, 12, 109, 7, 12, 30, 173, 212, 136, 193, 224, 179, 178, 245,
+213, 40, 186, 212, 143, 176, 168, 84, 31, 212, 8, 127, 80, 171, 84,
+253, 40, 29, 27, 103, 222, 79, 104, 233, 15, 149, 94, 149, 47, 84,
+251, 248, 249, 185, 138, 244, 127, 68, 156, 132, 103
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define PICKUPS_HANDLE 0
+#define PICKUPS_WIDTH 16
+#define PICKUPS_HEIGHT 16
+#define PICKUPS_CELLS 47
+#define ASSETS_END 24064UL
+static const shape_t PICKUPS_SHAPE = {0, 16, 16, 0};
+static const PROGMEM uint32_t circle[] = {
+0x08080000,
+0x0827f000,
+0x0867f000,
+0x0887f000,
+0x08c7f000,
+0x08e7f000,
+0x0927f000,
+0x0947f000,
+0x0987e000,
+0x09c7e000,
+0x09e7e000,
+0x0a27d000,
+0x0a47d000,
+0x0a87c000,
+0x0aa7c000,
+0x0ae7b000,
+0x0b07b000,
+0x0b27a000,
+0x0b679000,
+0x0b879000,
+0x0bc78000,
+0x0be77000,
+0x0c076000,
+0x0c476000,
+0x0c675000,
+0x0c874000,
+0x0cc73000,
+0x0ce72000,
+0x0d071000,
+0x0d270000,
+0x0d46f000,
+0x0d86e000,
+0x0da6d000,
+0x0dc6c000,
+0x0de6a000,
+0x0e069000,
+0x0e268000,
+0x0e467000,
+0x0e666000,
+0x0e864000,
+0x0ea63000,
+0x0ec62000,
+0x0ec60000,
+0x0ee5f000,
+0x0f05e000,
+0x0f25c000,
+0x0f25b000,
+0x0f459000,
+0x0f658000,
+0x0f657000,
+0x0f855000,
+0x0f854000,
+0x0fa52000,
+0x0fa51000,
+0x0fc4f000,
+0x0fc4e000,
+0x0fc4c000,
+0x0fe4a000,
+0x0fe49000,
+0x0fe47000,
+0x0fe46000,
+0x0fe44000,
+0x0fe43000,
+0x0fe41000,
+0x10040000,
+0x0fe3e000,
+0x0fe3c000,
+0x0fe3b000,
+0x0fe39000,
+0x0fe38000,
+0x0fe36000,
+0x0fe35000,
+0x0fc33000,
+0x0fc31000,
+0x0fc30000,
+0x0fa2e000,
+0x0fa2d000,
+0x0f82b000,
+0x0f82a000,
+0x0f628000,
+0x0f627000,
+0x0f426000,
+0x0f224000,
+0x0f223000,
+0x0f021000,
+0x0ee20000,
+0x0ec1f000,
+0x0ec1d000,
+0x0ea1c000,
+0x0e81b000,
+0x0e619000,
+0x0e418000,
+0x0e217000,
+0x0e016000,
+0x0de15000,
+0x0dc13000,
+0x0da12000,
+0x0d811000,
+0x0d410000,
+0x0d20f000,
+0x0d00e000,
+0x0ce0d000,
+0x0cc0c000,
+0x0c80b000,
+0x0c60a000,
+0x0c409000,
+0x0c009000,
+0x0be08000,
+0x0bc07000,
+0x0b806000,
+0x0b606000,
+0x0b205000,
+0x0b004000,
+0x0ae04000,
+0x0aa03000,
+0x0a803000,
+0x0a402000,
+0x0a202000,
+0x09e01000,
+0x09c01000,
+0x09801000,
+0x09400000,
+0x09200000,
+0x08e00000,
+0x08c00000,
+0x08800000,
+0x08600000,
+0x08200000,
+0x08000000,
+0x07c00000,
+0x07800000,
+0x07600000,
+0x07200000,
+0x07000000,
+0x06c00000,
+0x06a00000,
+0x06601000,
+0x06201000,
+0x06001000,
+0x05c02000,
+0x05a02000,
+0x05603000,
+0x05403000,
+0x05004000,
+0x04e04000,
+0x04c05000,
+0x04806000,
+0x04606000,
+0x04207000,
+0x04008000,
+0x03e09000,
+0x03a09000,
+0x0380a000,
+0x0360b000,
+0x0320c000,
+0x0300d000,
+0x02e0e000,
+0x02c0f000,
+0x02a10000,
+0x02611000,
+0x02412000,
+0x02213000,
+0x02015000,
+0x01e16000,
+0x01c17000,
+0x01a18000,
+0x01819000,
+0x0161b000,
+0x0141c000,
+0x0121d000,
+0x0121f000,
+0x01020000,
+0x00e21000,
+0x00c23000,
+0x00c24000,
+0x00a26000,
+0x00827000,
+0x00828000,
+0x0062a000,
+0x0062b000,
+0x0042d000,
+0x0042e000,
+0x00230000,
+0x00231000,
+0x00233000,
+0x00035000,
+0x00036000,
+0x00038000,
+0x00039000,
+0x0003b000,
+0x0003c000,
+0x0003e000,
+0x0003f000,
+0x00041000,
+0x00043000,
+0x00044000,
+0x00046000,
+0x00047000,
+0x00049000,
+0x0004a000,
+0x0024c000,
+0x0024e000,
+0x0024f000,
+0x00451000,
+0x00452000,
+0x00654000,
+0x00655000,
+0x00857000,
+0x00858000,
+0x00a59000,
+0x00c5b000,
+0x00c5c000,
+0x00e5e000,
+0x0105f000,
+0x01260000,
+0x01262000,
+0x01463000,
+0x01664000,
+0x01866000,
+0x01a67000,
+0x01c68000,
+0x01e69000,
+0x0206a000,
+0x0226c000,
+0x0246d000,
+0x0266e000,
+0x02a6f000,
+0x02c70000,
+0x02e71000,
+0x03072000,
+0x03273000,
+0x03674000,
+0x03875000,
+0x03a76000,
+0x03e76000,
+0x04077000,
+0x04278000,
+0x04679000,
+0x04879000,
+0x04c7a000,
+0x04e7b000,
+0x0507b000,
+0x0547c000,
+0x0567c000,
+0x05a7d000,
+0x05c7d000,
+0x0607e000,
+0x0627e000,
+0x0667e000,
+0x06a7f000,
+0x06c7f000,
+0x0707f000,
+0x0727f000,
+0x0767f000,
+0x0787f000,
+0x07c7f000,
+};
+static const PROGMEM uint32_t sprites[] = {
+0x88e6a023,
+0xa9241021,
+0x86a69020,
+0x81e7e007,
+0x8184f024,
+0x8005b00a,
+0x9bc15005,
+0x9bc1c01b,
+0x9141500b,
+0x83a7a011,
+0xa6c15012,
+0xa7606022,
+0xa0465026,
+0x89a0c011,
+0xa446200b,
+0x9ac1f021,
+0x8f00e00b,
+0x96c5a025,
+0x8d02d001,
+0xa646f010,
+0xa646a01f,
+0x9be63026,
+0x80a5a026,
+0x8a66702d,
+0xa0c43016,
+0x9ac5202a,
+0x8364b017,
+0xa9619001,
+0x9662d00f,
+0xa500200d,
+0xa4c4d00e,
+0x92a1501a,
+0x9862e023,
+0xa9213009,
+0x9f637018,
+0x91660025,
+0x89e4a000,
+0xa0c3f004,
+0x9043d01b,
+0xa644c024,
+0x81a4702d,
+0x95657008,
+0x88626016,
+0xa9a3301c,
+0x8d87901c,
+0x9fc46000,
+0x82a48006,
+0x9fe3f027,
+0xa565701f,
+0x9a452001,
+0x8ae26020,
+0xa866b016,
+0x97c7501c,
+0x93a1302b,
+0x9b84e02c,
+0xa4621007,
+0x9167b02a,
+0x9141c010,
+0x9540f021,
+0x9a603004,
+0x83c52009,
+0x96e26017,
+0x8fa51018,
+0x92e31017,
+0x9a679001,
+0x85a7a015,
+0x8ca3f004,
+0xa204f021,
+0xa9a0b004,
+0x9067a002,
+0x9726c005,
+0x85c0801c,
+0x8d25a025,
+0x8e647009,
+0x99a3a006,
+0xa662d02b,
+0x91076026,
+0x9201a020,
+0xa643c002,
+0x82c33004,
+0x90019027,
+0x9ea53012,
+0x8bc4400f,
+0x82229011,
+0x9c21b002,
+0x91c2601a,
+0xa4273010,
+0x9840801e,
+0x8dc3a009,
+0x96e54011,
+0x8381302b,
+0x98816003,
+0xa3e79014,
+0x86a3000d,
+0x89022020,
+0x89a38007,
+0xa2a40017,
+0x9d01500e,
+0x82c3b025,
+0xa6c34003,
+0x86225026,
+0x9126a029,
+0xa347e024,
+0x88e1701c,
+0xa5a41002,
+0x95e56022,
+0x98204004,
+0x8e054009,
+0x9a442024,
+0x9c65500d,
+0x8582d016,
+0x9de22023,
+0xa4a61009,
+0x9b043001,
+0x90a58024,
+0x9a62d029,
+0x96a39007,
+0xa9a58018,
+0x89828027,
+0x8521e023,
+0x87c4f013,
+0xa6e6b00d,
+0x85a2c01d,
+0x9e625028,
+0xa6242024,
+0x9581402b,
+0x8ec74021,
+0x8003c023,
+0x8366800a,
+0x86a0501c,
+0x8a805012,
+0xa7c7b027,
+0x90c3c00a,
+0x95067027,
+0x9d871015,
+0x9dc1a003,
+0x8b23e00b,
+0xa720d023,
+0x9b456029,
+0x84c3400c,
+0x89a0b018,
+0xa5e4f021,
+0x9dc52027,
+0xa685200c,
+0xa7e3d003,
+0x80a38012,
+0x9825402a,
+0x8e041020,
+0x94c63014,
+0x9067c000,
+0x82402001,
+0x87478011,
+0x9ca46029,
+0x85a25024,
+0xa2a5b010,
+0x90c6a026,
+0x8c055015,
+0x93c5e011,
+0xa503e00c,
+0xa5a6d017,
+0x99c3f00f,
+0x85a5f01b,
+0x91866021,
+0xa1c3501f,
+0x92e4c005,
+0x8a86f00a,
+0xa8c6f016,
+0x8802700d,
+0x89e3900f,
+0xa027201c,
+0x8c22c025,
+0x85e27017,
+0x99222022,
+0xa802a013,
+0x8ca56004,
+0x9b05f004,
+0x8c03001a,
+0x8423201d,
+0x8207f016,
+0xa9456002,
+0x8682400c,
+0x94e1902e,
+0x9d45a006,
+0x9f01d001,
+0x92e5400c,
+0x80a1200e,
+0x9102e014,
+0x83811009,
+0x9062602e,
+0x8906901b,
+0x86a76015,
+0x86e04010,
+0xa4e2d017,
+0x93a0d00a,
+0xa5c2901b,
+0x9b85b002,
+0x82664000,
+0x8e661009,
+0x8be09016,
+0x94e1c009,
+0x88e01021,
+0xa3c4d02c,
+0x9640801b,
+0x8ac39013,
+0xa6c4d00e,
+0x9304d02d,
+0x8942b020,
+0x88030000,
+0xa905a019,
+0xa6c11029,
+0xa5e0d01f,
+0xa8030018,
+0x9487500f,
+0x8a81702e,
+0xa366f00b,
+0xa260800c,
+0xa3441029,
+0x92650007,
+0x99405000,
+0x9285801e,
+0x96a75021,
+0x95879029,
+0x8ec4700e,
+0x82404014,
+0x83e7c026,
+0x9a23f024,
+0x8e23e022,
+0x8827d011,
+0x96c5900a,
+0x88828010,
+0xa1240018,
+0x9263802b,
+0x9141402c,
+0x99454004,
+0x9567402b,
+0x8da5a026,
+0x99e72026,
+0x9f82401b,
+0x96803017,
+0xa122201a,
+0xa863f010,
+0x9b81b00b,
+0xa5c39010,
+0x8320d028,
+0x8d267010,
+0x8ac52008,
+0xa6055003,
+0x88a3c02b,
+0x8083b021,
+0x9704c014,
+0x92a1800e,
+0x8046900f,
+0xa904901c,
+0xa927801f,
+0x8584901e,
+0xa7413017,
+0x8102c016,
+0x9960801a,
+0x9a41b001,
+0xa761c017,
+0x8205d029,
+0xa486c017,
+0x8a02e00e,
+0x89a32012,
+0x8007400b,
+0xa965200d,
+0x80a6200f,
+0x82c57020,
+0x8f645016,
+0x8602a009,
+0x85a6700d,
+0x9285701f,
+0x8487500c,
+0xa2a1c012,
+0x9be4b022,
+0x8c05c012,
+0xa2a08026,
+0x87e65026,
+0x87e30012,
+0x97e71016,
+0xa2a5f012,
+0xa0e1101d,
+0xa300802e,
+0x92c2e027,
+0x96c3102c,
+0x9c43302a,
+0xa522700e,
+0x8ba3500d,
+0x94c35029,
+0x8026e00d,
+0x98052020,
+0x89673007,
+0x8987b001,
+0xa801900f,
+0x94802003,
+0x95259002,
+0xa7800008,
+0x8ca21022,
+0x8560d02d,
+0xa3a65025,
+0xa264e025,
+0x85e4e02c,
+0x8281500c,
+0x9c674007,
+0x99816008,
+0x81a32019,
+0x86a51012,
+0xa601a013,
+0xa1a28018,
+0x91213008,
+0x8b62200d,
+0x95a29008,
+0x95600009,
+0xa3e58002,
+0x8340f024,
+0x9180e016,
+0x92e3102e,
+0x9340d012,
+0x8720b000,
+0x9aa2e00a,
+0x9ba45009,
+0x9f81502a,
+0x8ca4d005,
+0x9d609025,
+0x9441402e,
+0x92816001,
+0x86015008,
+0x9204000d,
+0x9ce4d002,
+0xa4e16022,
+0xa823802d,
+0x9ac3d014,
+0xa8022026,
+0x8484c007,
+0x87275017,
+0x8a67502d,
+0xa6c3e015,
+0xa4e7b013,
+0xa125e019,
+0x9c00000a,
+0x9c410028,
+0x8846d00b,
+0x9d45a01a,
+0xa707d004,
+0x87c51026,
+0xa7a1f002,
+0x8164401b,
+0xa023802e,
+0x9be4b028,
+0x9827f022,
+0x9400200f,
+0xa7e09007,
+0x8f621010,
+0x8c65b006,
+0x8144800a,
+0x80c02028,
+0x8984c019,
+0x81c50011,
+0x9407f013,
+0x80e69013,
+0x88e2b027,
+0xa121b01d,
+0x9585b028,
+0x9f07e00f,
+0x9a04a025,
+0x9d822028,
+0x9287302a,
+0x86e31007,
+0x8385100a,
+0x86625024,
+0x8c60f029,
+0xa106a00f,
+0x8e00601e,
+0x8520a028,
+0x8b463028,
+0x9d00801a,
+0x86848028,
+0xa921b00b,
+0xa885600d,
+0xa8e7e024,
+0x88e19016,
+0x9624a008,
+0x8d87100f,
+0x8ae69013,
+0x8ac42018,
+0x9ba62008,
+0x92a5a00e,
+0x8142b028,
+0x98c5401e,
+0xa2c46014,
+0xa624701c,
+0xa7a5e02c,
+0x83811026,
+0x90a62000,
+0x9f21300b,
+0x88c4e015,
+0x92e5702a,
+0xa0e11016,
+0x9d057027,
+0x8402600c,
+0x98a1f00c,
+0x81e62005,
+0xa987400c,
+0x92c28013,
+0x8e85e011,
+0x9c22b013,
+0xa566e026,
+0x9bc69001,
+0xa1a77002,
+0x86c1600b,
+0x90452018,
+0x9ac7c010,
+0x90607003,
+0x80e06028,
+0x9b06c023,
+0x8263801e,
+0x8226e013,
+0x9126f01f,
+0x8e67600b,
+0x8b27900b,
+0x9be33009,
+0x8fc2201d,
+0xa6e44012,
+0x90855009,
+0x82c69018,
+0xa544a02b,
+0x9424e026,
+0x8ce65008,
+0x90e12011,
+0xa0e5c000,
+0x9603a000,
+0x81c5f01c,
+0x9c065011,
+0x97a0502b,
+0x82218027,
+0x9aa6301e,
+0xa3e3c02c,
+0x8bc6400a,
+0x8f62a006,
+0x84612003,
+0x8aa7b014,
+0x96a5f00f,
+0x80076017,
+0x99a1d006,
+0x92c08021,
+0x9884f011,
+0xa2a3101f,
+0x9be4c01f,
+0xa263e01c,
+0x9c27602e,
+0x85a3b01e,
+0xa7468018,
+0x82472007,
+0x85658029,
+0xa7a6301f,
+0x9087c020,
+0x9a437000,
+0x9720900d,
+0xa0c17008,
+0xa727a019,
+0x8706e007,
+0x8964901c,
+0x9d21c026,
+0x98e78002,
+0x8140102e,
+0x9986c015,
+0x9a80e006,
+0xa2841028,
+0x8543600e,
+0x9fa43003,
+0x84257022,
+0x9c22d02a,
+0x81c6900c,
+0xa1633008,
+0x91203006,
+0x8067f027,
+0xa3e65000,
+0x9ee33018,
+0x8d829022,
+0xa5a57005,
+0xa246802a,
+0xa3275017,
+0x86a1e015,
+0x88048001,
+0x92e1502b,
+0x9e820014,
+0xa7a10018,
+0x9a228014,
+0x95a09016,
+0x8dc33021,
+0x83a3502b,
+0x8923e029,
+0x9dc56005,
+0x8185e02c,
+0x9d007019,
+0x96a7b013,
+0x9c604024,
+0x9ca11024,
+0x95c6001a,
+0x8ec5b01d,
+0x83236014,
+0x9781d022,
+0x9f86901b,
+0x9f67401f,
+0x92623017,
+0x96a4e028,
+0x9d22f02d,
+0x8a613008,
+0xa7643014,
+0x8ce74006,
+0x87a56007,
+0x8fe1e021,
+0x93e02029,
+0x91e75022,
+0x8ec63020,
+0x9ae21025,
+0x8da5c004,
+0x8bc04012,
+0x88202028,
+0xa787600f,
+0x8de3500e,
+0x8de4a019,
+0x8c674000,
+0x86076027,
+0x85630000,
+0x8e403015,
+0x89c64008,
+0xa585602a,
+0xa6e29008,
+0x8d250024,
+0x9aa6b017,
+0x8566d022,
+0x9f876009,
+0xa6020002,
+0x9c429018,
+0x84051027,
+0xa8a1d016,
+0x9aa5d007,
+0x9121402e,
+0x8e23502a,
+0x9a45500c,
+0x81015021,
+0x99847002,
+0xa9c7c006,
+0x8ee62018,
+0x80e40014,
+0xa9641005,
+0xa907d013,
+0x9807401b,
+0x98a76010,
+0x8465f020,
+0x9e23302c,
+0x8646f019,
+0x94e7901f,
+0x8ce6e01f,
+0x88216000,
+0xa662c00c,
+0x89a3b02a,
+0x87c4100e,
+0xa527501e,
+0x93a6f013,
+0x8a63101a,
+0x9f63f007,
+0x9386f006,
+0x9f662000,
+0x8582201e,
+0x8e870002,
+0x8821e00b,
+0x8fa3d024,
+0x8106f008,
+0xa4046008,
+0x8066101f,
+0xa0445002,
+0x8d244010,
+0xa9055000,
+0x92a2e027,
+0x8ae16011,
+0x9862a024,
+0xa9442017,
+0x9ce0b010,
+0x88c0b01f,
+0xa6e4c028,
+0x93256021,
+0x8625e019,
+0xa102501d,
+0xa0629008,
+0x80270019,
+0x91e32025,
+0xa6220010,
+0x8c064019,
+0xa3c38007,
+0x8965801f,
+0x94a10019,
+0x8024101b,
+0x88e67024,
+0x8ee69001,
+0x9583200f,
+0x9347d023,
+0x9c20f001,
+0x97060007,
+0x93674029,
+0xa1c2f00c,
+0x99c24021,
+0x8800c00c,
+0x80e1a023,
+0xa906a02d,
+0xa581c013,
+0x81c3c00b,
+0x87866029,
+0x86a14004,
+0x98c3f019,
+0x9ba0501f,
+0x9b272026,
+0x8de50019,
+0xa184701f,
+0x8f07701a,
+0xa8a17019,
+0x8282a00b,
+0x8ce3000a,
+0x8c672014,
+0x9de68011,
+0x9f602029,
+0x8046e00b,
+0x9d20b026,
+0xa406a00a,
+0x9b07902e,
+0x8d450028,
+0x87e21028,
+0x86e1e029,
+0xa5871009,
+0x85016003,
+0x9981e001,
+0x94e3702e,
+0xa1200028,
+0xa3a4002a,
+0xa601d026,
+0x9c65d01d,
+0x9bc2101e,
+0x97c00000,
+0x8465801b,
+0x8585001b,
+0xa667b01f,
+0x8846600b,
+0x8da5002a,
+0x93662009,
+0xa3a5901b,
+0xa7441014,
+0x99a7400b,
+0x97c04017,
+0x96e07008,
+0x8be3302c,
+0x80a7302d,
+0xa5c37025,
+0x9fe27006,
+0xa927c006,
+0x8b02a006,
+0x9a64001b,
+0x9c85702d,
+0x8721301e,
+0x8c449018,
+0xa5251007,
+0x8d434024,
+0x82209003,
+0x9665f00a,
+0xa7e2c019,
+0x8421f02e,
+0xa5a7602c,
+0x9bc7e009,
+0x9001b01e,
+0xa2639019,
+0x95a22015,
+0x8927e015,
+0x9cc2c02b,
+0xa8e55010,
+0xa624c00a,
+0x92c10005,
+0x8347402e,
+0x94a27026,
+0x94e73029,
+0x85a1102c,
+0x9425901f,
+0x9bc61020,
+0x97c0d021,
+0x86c5c01e,
+0x93e49012,
+0x8345e00f,
+0xa785d01f,
+0x8d45d02e,
+0x96c42014,
+0x8047f01a,
+0x80c04011,
+0x86043022,
+0x95830005,
+0x9a05302c,
+0x80c13004,
+0x93c1f014,
+0x9141100d,
+0x97c10024,
+0x91253025,
+0x82831011,
+0x9200d01f,
+0x82022018,
+0x9f06402a,
+0x83862006,
+0x8c83c029,
+0xa4e51012,
+0x9b65702a,
+0xa887f015,
+0x9444000d,
+0x9de4e006,
+0xa5e7d00f,
+0x87a54009,
+0x88645006,
+0x8be2f02b,
+0x8c84800a,
+0x86e6d006,
+0x87c3f02e,
+0x80c6901d,
+0xa0a5f019,
+0x8a62902b,
+0x86e5c026,
+0x97805004,
+0x9f255029,
+0x95030004,
+0x90213029,
+0xa2611026,
+0xa926602b,
+0x8a82b025,
+0xa947a020,
+0x9ba1f00c,
+0x84e7b007,
+0x8386801c,
+0x9b605013,
+0xa5010029,
+0x83254017,
+0xa0e47005,
+0xa963a01e,
+0x8f27601f,
+0x85817007,
+0x8a65f005,
+0x92c2300f,
+0x9e43a01f,
+0x86a61013,
+0x87856004,
+0x8e25f010,
+0x8e46801a,
+0x8567b014,
+0x8b256020,
+0x95069007,
+0x9845601b,
+0x91831016,
+0x9a41100e,
+0x94c3a01d,
+0x90e75006,
+0xa2c5301f,
+0x8a01d018,
+0x9f86c02a,
+0x8487b014,
+0x95474014,
+0x86e25011,
+0x8302c023,
+0xa5e3700e,
+0x96a27029,
+0x82a59018,
+0xa321c02a,
+0x9e811002,
+0x8884a00f,
+0x89e26014,
+0xa4216017,
+0x9165b018,
+0x95c06019,
+0x9c85d01f,
+0xa9a3b01f,
+0x8c05101d,
+0x8a47e012,
+0x97650015,
+0x81242005,
+0x9207300d,
+0x9427e00d,
+0x8f03800e,
+0x8f030008,
+0xa560700f,
+0x93a4a01f,
+0x90c7701a,
+0x9720600e,
+0x99a0f01a,
+0x91c3f014,
+0x80824007,
+0xa7660019,
+0x9f00701e,
+0x9aa70013,
+0x8ec5d00f,
+0x95a5f01d,
+0x9d079022,
+0x93254022,
+0xa226302b,
+0x9805002c,
+0xa642b01a,
+0x8786e007,
+0x9fc63005,
+0x8ba3c027,
+0x8521e01f,
+0xa321a029,
+0x9785c00a,
+0x94801026,
+0x9821d018,
+0x82239020,
+0x8645302d,
+0xa6c1c00b,
+0xa8c20005,
+0x94868008,
+0xa2a6d02d,
+0x93004023,
+0xa060900c,
+0x8c84501f,
+0xa203e014,
+0x9e61a007,
+0x9042000b,
+0x9b24d014,
+0x80c2600d,
+0x9f85b021,
+0x8d86b018,
+0x8a67501b,
+0x9b04601a,
+0x8a25a017,
+0x8947f00c,
+0x92e2f029,
+0xa1c5a00a,
+0xa6a0700d,
+0xa9e3b002,
+0x93c5902c,
+0x90455011,
+0xa0614024,
+0x85e2e01c,
+0x9881a002,
+0xa0a7e00d,
+0xa2c57019,
+0x8fa4b027,
+0xa3e22001,
+0x92e18008,
+0x8d24800f,
+0x8785f016,
+0xa144d00c,
+0x8844400a,
+0x9ba1d025,
+0x8dc7e02a,
+0x9283f002,
+0x91e70015,
+0xa9c0d016,
+0x9801202b,
+0x98c52016,
+0x9f85d001,
+0x83a15011,
+0x93075006,
+0x95c0302b,
+0x93476007,
+0x9fe5802d,
+0x97c1a01b,
+0xa707f02c,
+0x99e47021,
+0x88c2f014,
+0x8ae22013,
+0xa1a2b029,
+0x85c70000,
+0x9447700e,
+0x8860c002,
+0x8f224027,
+0xa5c4b006,
+0x8fe0602b,
+0x8a82c016,
+0x8e017001,
+0xa0c6901e,
+0x85a4f01f,
+0x92420020,
+0x85042023,
+0xa1848029,
+0x8382f00d,
+0x91a2d021,
+0x97e62004,
+0x9424200b,
+0x96e46020,
+0xa143e01f,
+0x91c3100e,
+0x9fc31017,
+0x9600300a,
+0x8500602d,
+0x95445027,
+0xa745e011,
+0x86022022,
+0xa021f004,
+0x93031028,
+0x8244100b,
+0xa763d021,
+0x9063a005,
+0x89c21016,
+0x81e7901f,
+0xa140902b,
+0x9fe4c016,
+0x9c848018,
+0x95078014,
+0x8a834002,
+0x9083500c,
+0x86e43025,
+0x98274016,
+0xa3e3f000,
+0x91c51008,
+0x8fa4401b,
+0xa681001c,
+0x88479022,
+0x94e7001c,
+0x8dc1202d,
+0xa603001f,
+0x8c463007,
+0x9fc5700e,
+0xa2c6700d,
+0x9bc3f017,
+0xa5a48024,
+0x9e23901b,
+0x92a5d017,
+0x9ba0d013,
+0x97615005,
+0xa8a12013,
+0x8ae7f014,
+0x8be4c014,
+0x9ca09004,
+0x8dc7002c,
+0xa4c1f011,
+0x8542601e,
+0x81401025,
+0x8540801c,
+0xa926a01d,
+0x9527b017,
+0x8a03c025,
+0x90a7a024,
+0x9d27a02d,
+0x9ca3b000,
+0x84818027,
+0x91e3002d,
+0x89433016,
+0x94660014,
+0x91417002,
+0x8664300e,
+0x92475020,
+0xa1e31002,
+0x9f20f027,
+0x9b007018,
+0x9b83b00e,
+0x8a05401b,
+0xa780d00f,
+0x9de1b01f,
+0xa5c1002a,
+0x8ca63028,
+0x8ee5c01a,
+0xa4458003,
+0x96e7f014,
+0x9d43b00f,
+0xa4a18001,
+0xa8e70000,
+0x92e2802e,
+0xa1613012,
+0xa2638025,
+0x8460f026,
+0x8a413022,
+0xa603f007,
+0x9ea05016,
+0x91a7501d,
+0x9906702d,
+0xa0063019,
+0x80e6102d,
+0x8146c00f,
+0xa107100b,
+0x9c27302e,
+0x9e06b028,
+0x88447016,
+0x93c4601a,
+0x92e30021,
+0x8dc75013,
+0x81026000,
+0x8e460001,
+0x85870022,
+0x84224029,
+0x8be1c001,
+0xa3a4a014,
+0x9183d012,
+0x9465301e,
+0x9e61402e,
+0xa2c69025,
+0x94015019,
+0x96a3101d,
+0x9ca1200a,
+0xa2c79024,
+0xa2229006,
+0xa880600f,
+0xa8c08013,
+0x9607100d,
+0x8b86e00d,
+0x83a10006,
+0x9a86100b,
+0x9ca5002e,
+0x99a7e010,
+0x8da51015,
+0x95e73000,
+0x8267f011,
+0x88e5e026,
+0xa1c0e013,
+0x9e879010,
+0xa1c3c001,
+0x91a6e01a,
+0x85869004,
+0x94668008,
+0xa7632017,
+0x8fc6802b,
+0x8ac54008,
+0x83c6501d,
+0x8081e01d,
+0x9c456005,
+0xa3459026,
+0x99212000,
+0xa9408004,
+0x9f47500c,
+0x9ea69015,
+0xa8033016,
+0x93408007,
+0xa5a3600c,
+0x87437023,
+0x8907e00d,
+0x8a06c011,
+0xa647300d,
+0x8fa6e007,
+0x9b07801f,
+0x87a4e01c,
+0x8960d020,
+0x9e07a008,
+0x99e69012,
+0xa3048025,
+0x9b87d01b,
+0x8c61701f,
+0x9082001a,
+0xa7260025,
+0x9644b00d,
+0x9684a02c,
+0x8f45d023,
+0x93c3c02d,
+0x97625023,
+0x92c1601c,
+0x98a3801a,
+0xa082c000,
+0x9280201a,
+0x9ce1e00f,
+0x88231006,
+0x9d05e006,
+0x8d848003,
+0x98605023,
+0x8c02d007,
+0x8141d020,
+0x8f844021,
+0x8062b02d,
+0x9f64801f,
+0x96c09014,
+0x97c35001,
+0x82a3c005,
+0xa3635028,
+0x81022020,
+0x8d875004,
+0xa920e024,
+0x86844026,
+0xa6216003,
+0xa1a2801f,
+0x92a0600e,
+0x8d42400e,
+0x8f65f024,
+0x85e1000b,
+0x8345400d,
+0x8922d01d,
+0x96c38025,
+0x82c6c019,
+0x98e41011,
+0x86e6e015,
+0x98619003,
+0x80c39014,
+0x86622008,
+0x9e27300d,
+0xa4e78012,
+0x8606f000,
+0x9ae3d024,
+0x90431004,
+0x98a57025,
+0x9c857007,
+0x8ee48008,
+0x90675006,
+0x93a7a018,
+0x89a46001,
+0x8fa2501e,
+0xa381e026,
+0x88c6300c,
+0xa6868023,
+0x9044401f,
+0x8861802c,
+0x96615026,
+0x9b022012,
+0x8981e02b,
+0x83a02023,
+0x8060c007,
+0x8da7b02c,
+0x99c08008,
+0xa3a7d015,
+0x9ac1500a,
+0x8b67a005,
+0x8fe00024,
+0x8723401a,
+0x98c5c01c,
+0x86652029,
+0xa8a1f01c,
+0x8b453014,
+0x9c618017,
+0x97068029,
+0x89a79002,
+0x9647b01d,
+0x89a0a00e,
+0xa5642027,
+0x9ce6b010,
+0x8107a000,
+0x9220b02e,
+0x8a461011,
+0x95852019,
+0x9960200b,
+0xa6e5c016,
+0x9f60e02c,
+0x9464e013,
+0x8466e010,
+0x9d251029,
+0xa7619024,
+0xa5a33007,
+0x92c26019,
+0x82211009,
+0x9740501b,
+0x97e4400d,
+0x89c5700e,
+0x80c20020,
+0xa8c2201a,
+0x9ba48020,
+0x90a17010,
+0x8d46b009,
+0x81e51002,
+0xa5a32014,
+0x88e3200b,
+0xa626b003,
+0xa4a40000,
+0x8906902c,
+0xa0023012,
+0x97426000,
+0x83456022,
+0x98866029,
+0xa2045003,
+0xa762f023,
+0x8da34026,
+0x85e4700e,
+0xa6a29006,
+0x8886802c,
+0x84642004,
+0x9c826000,
+0x94e6101b,
+0x9043a021,
+0x83259005,
+0x9aa57015,
+0xa6857006,
+0x82649016,
+0xa401b014,
+0xa4621020,
+0x96273000,
+0xa002a015,
+0x8f052010,
+0xa545900d,
+0x9ee5602b,
+0xa563e02e,
+0xa1a75017,
+0xa0a3b00d,
+0x86c5800b,
+0xa6c7301b,
+0xa2c3d01f,
+0x92865000,
+0x8141e02e,
+0x9643100c,
+0x9902d016,
+0x95228015,
+0x95416009,
+0x89807015,
+0x8bc62011,
+0xa4c43029,
+0x93403009,
+0x8663e01b,
+0x9807f015,
+0xa1c4b021,
+0x9381701c,
+0x94e6600e,
+0xa0c52020,
+0x82e3f002,
+0xa1447026,
+0xa140c02e,
+0x8402f025,
+0x8906d027,
+0xa204a024,
+0xa962001c,
+0x92e47011,
+0x8ca36005,
+0x8e600014,
+0x82643010,
+0x83400019,
+0xa084a020,
+0x8b27401e,
+0x9042c007,
+0x8306d02c,
+0x8e42e006,
+0xa0855000,
+0x88a4802d,
+0x8805d025,
+0x9f66f02e,
+0x9587f021,
+0x97a5001b,
+0x80014009,
+0x81a2a022,
+0x95a1501c,
+0x9bc6a028,
+0x9022f018,
+0xa982b017,
+0x8ae0401e,
+0x9cc7c007,
+0x9ac7a011,
+0x9482d010,
+0x8987f01a,
+0x91c59023,
+0x96c3a00f,
+0x8c01c00f,
+0x8941a009,
+0x8886d01e,
+0x89c39004,
+0x83e1e005,
+0xa4024022,
+0x85606014,
+0x94c14014,
+0x9c405018,
+0x98802008,
+0x9a47801e,
+0x9c634009,
+0x9ae0f01b,
+0x9d07c019,
+0xa7846010,
+0x88c20024,
+0x84227002,
+0x9ee7102a,
+0x89034005,
+0x8b43400c,
+0xa043b027,
+0x9ae73005,
+0x87c1f01f,
+0xa8a0f007,
+0x84225008,
+0x89a10008,
+0x8947f004,
+0x9b803011,
+0x89e5d00d,
+0xa0c0e011,
+0x93e62025,
+0xa467e022,
+0xa5e0d015,
+0x9a41c006,
+0x9447a015,
+0x82e11023,
+0x8a020026,
+0x9bc41004,
+0x9367e021,
+0x93e4402b,
+0x8607500b,
+0x9ba2f011,
+0xa9441009,
+0x8a65b014,
+0x9425301d,
+0x8587d003,
+0x80c29004,
+0x93a6a002,
+0x8ae5701b,
+0x8d667017,
+0x8706f009,
+0x93871029,
+0x8326b00d,
+0xa2a5801a,
+0x82e4b007,
+0xa3a5a019,
+0x92270015,
+0x8702e021,
+0x8de7d02d,
+0x80e1b00c,
+0x8801f008,
+0x97a08006,
+0x95a2000d,
+0x8d83d020,
+0x9ba1d00b,
+0x9fa43023,
+0x90655008,
+0x8c237000,
+0x98e7c02c,
+0xa682c027,
+0x99a64012,
+0xa2063011,
+0x8e64001e,
+0xa2a4e027,
+0x9987e01a,
+0xa6466013,
+0x90e7202e,
+0x9064e017,
+0x93a36005,
+0x9160d00a,
+0x94033017,
+0x9ac0602c,
+0x8924901f,
+0xa4032020,
+0x8fa7c01a,
+0x8c835023,
+0xa544c020,
+0x9505701b,
+0x9641d009,
+0x9322b026,
+0x98676017,
+0x9387802a,
+0x83860005,
+0x81a26017,
+0x8d83a003,
+0x8481702a,
+0xa8846021,
+0x9d87c002,
+0x9945e015,
+0x9c064006,
+0x9ea40026,
+0x89e58013,
+0x9d82f01f,
+0x81c7201b,
+0x82e06020,
+0x9de5802b,
+0x9486a018,
+0x89479014,
+0x8f85501e,
+0x8ca16008,
+0x8f417019,
+0xa846801d,
+0x9d03c011,
+0x9d22102b,
+0x9705100f,
+0x86a26021,
+0xa0e04000,
+0x9425f012,
+0x8a667001,
+0x97e76029,
+0x8024a00c,
+0xa4c6201c,
+0x8d835017,
+0x8302e007,
+0x86265003,
+0x94c37028,
+0x99c5101c,
+0x8de7e01f,
+0x90253005,
+0x90c33007,
+0x98e42008,
+0x8b63c015,
+0x80e4c02c,
+0x9283602c,
+0xa5e0e017,
+0x92c7b001,
+0xa9613008,
+0x83c6d026,
+0xa502400c,
+0xa327701c,
+0xa9c3b01f,
+0x8ce20006,
+0xa760c005,
+0x95c18005,
+0x9c427000,
+0x90816006,
+0x8ba35027,
+0x8c60401a,
+0xa6e0900b,
+0x9ea55000,
+0x9d62f012,
+0xa441100e,
+0x9b82d014,
+0xa242100e,
+0x9763d02c,
+0x94c0901b,
+0xa742b016,
+0x9381e00f,
+0x8ec3a01f,
+0x8c26400f,
+0x88a5d006,
+0x90a6a026,
+0x9d434002,
+0x94c7f026,
+0x8da4700e,
+0x9041802d,
+0x8667b028,
+0x9907e011,
+0x9ae1700a,
+0x83a4201d,
+0x83447008,
+0x86813028,
+0x8063f015,
+0x90271028,
+0xa601501c,
+0x9d42400e,
+0x9c24f01a,
+0xa1a7a01a,
+0x8ba5f02b,
+0x8283b01e,
+0x8f81c02a,
+0x82a30011,
+0xa5c2101b,
+0xa6202012,
+0xa425d027,
+0x9b440028,
+0x98c3c013,
+0x8e67d029,
+0x9287f00a,
+0x84c18013,
+0xa226a001,
+0x8c23c006,
+0x84257025,
+0x9987300f,
+0xa763e005,
+0xa9472016,
+0xa703000b,
+0x8fe5a018,
+0x9c40e01a,
+0x86e1c01e,
+0x81c18020,
+0xa682b026,
+0x81c5b00d,
+0x85456001,
+0x8727a00d,
+0x8562e01f,
+0x92e69002,
+0x87c49023,
+0x94a31009,
+0xa927601e,
+0xa2608028,
+0xa7066003,
+0x8b82302c,
+0xa965c017,
+0xa5459015,
+0x8824a021,
+0x9864e00a,
+0x8082900e,
+0x85a09024,
+0x89c24018,
+0x93420009,
+0x9d238000,
+0x9c20a02d,
+0xa9a4200a,
+0xa5807028,
+0x8987f016,
+0x9a241000,
+0x8f601017,
+0x9ae24029,
+0x8dc2a021,
+0x8b855000,
+0x8de5c012,
+0x8ba18002,
+0x9404a008,
+0x88c5f015,
+0x9cc7300b,
+0x9ee2a02c,
+0x9f634020,
+0x80073008,
+0xa6a3102a,
+0x86615004,
+0x97e2c01a,
+0x8a46a000,
+0x83215010,
+0x8fa65023,
+0xa060100e,
+0xa580902e,
+0x9a415000,
+0x8843a00e,
+0x8ba7f029,
+0x8c051011,
+0x93219021,
+0x80c73010,
+0x91a53011,
+0xa4262013,
+0x8962801a,
+0x9c80700a,
+0xa420802a,
+0x85821000,
+0x92a26000,
+0xa821400e,
+0x8142d010,
+0xa066201f,
+0x81e21016,
+0x9246f024,
+0x85e2e00a,
+0xa402801d,
+0x9f473018,
+0x8e479027,
+0x94628027,
+0xa3e7701b,
+0x9b044016,
+0x9a823024,
+0x9b066005,
+0x9566002c,
+0x81402003,
+0xa802800d,
+0x9b44c002,
+0x9202b01b,
+0x99401018,
+0x9244d019,
+0x9826f02e,
+0xa8833012,
+0x90e1d013,
+0x93a3f029,
+0x9605502c,
+0xa1c3801b,
+0x8c66f011,
+0x80e3101b,
+0x8ce1f00d,
+0x9782902a,
+0x8cc5a01b,
+0x8701c01b,
+0xa622802e,
+0x89461017,
+0x8365e028,
+0x8ec21024,
+0x8401802a,
+0x9fc0f025,
+0x87c56020,
+0x9f41a00e,
+0xa007200e,
+0x9a466000,
+0x90204017,
+0x85e1e004,
+0x92a2200a,
+0xa5a65015,
+0xa5662022,
+0xa984901c,
+0x8847c01f,
+0xa7c0d02e,
+0x8c007020,
+0x9dc0e006,
+0x8106c010,
+0x9083b000,
+0xa2a7802d,
+0xa5658022,
+0x9d02700b,
+0x8141201e,
+0xa2651026,
+0xa606202e,
+0x94a7e005,
+0x9be7c006,
+0x80c70029,
+0x84209023,
+0x8e426000,
+0x9462602d,
+0x97a16023,
+0x87a48000,
+0xa5e2d015,
+0x89c6a00f,
+0xa1e04009,
+0xa107200c,
+0x83450025,
+0xa6254017,
+0x93c5f004,
+0x93235011,
+0x9de5200c,
+0x8227902a,
+0x8c66301f,
+0x8b65a013,
+0x81e5f00c,
+0xa1c07003,
+0x9dc1b008,
+0xa821001f,
+0xa343f014,
+0x81a5e02b,
+0x8880101a,
+0x9e837023,
+0x93467026,
+0x8283b012,
+0x82c4d010,
+0x98250000,
+0xa124202a,
+0xa066101c,
+0x9260a02d,
+0x8d243026,
+0x8865d007,
+0x8066f01e,
+0x87876018,
+0x8ce6c018,
+0x8ec7c024,
+0x84850007,
+0x99e6700f,
+0xa3a0a000,
+0xa483301a,
+0x92869000,
+0xa3402003,
+0x83c6102e,
+0x9fe11022,
+0x96241007,
+0x96e6d02e,
+0x93a25025,
+0x8b64801d,
+0x96e6902d,
+0x87e4e004,
+0x8dc19005,
+0xa9a6f01b,
+0x9bc58018,
+0xa364d00f,
+0x9f009000,
+0x84a4d02a,
+0x9aa4a003,
+0xa0a62003,
+0x9d02b015,
+0x97e0d028,
+0x9806c00e,
+0x91a7a000,
+0xa8628001,
+0xa8e4201f,
+0xa1239029,
+0x8ac21026,
+0x86860027,
+0x93615016,
+0x8422f009,
+0x95821011,
+0x8862f001,
+0x9cc12024,
+0x85e23002,
+0x81a31029,
+0x98833027,
+0x9143b022,
+0x8b85e01e,
+0x8da53019,
+0x9c44a025,
+0x9b400008,
+0x90658014,
+0xa362d00b,
+0x92842009,
+0xa1075018,
+0xa344100d,
+0x9fe53008,
+0x99002026,
+0x8ae0701f,
+0x92e7c003,
+0xa062b01d,
+0x92e70025,
+0x9ec6901c,
+0x88841022,
+0x94a34002,
+0x9222c021,
+0xa1e7b000,
+0x8a67200d,
+0x9727b001,
+0x90c7c002,
+0x9c846014,
+0xa247d014,
+0x90e5301a,
+0x81c38001,
+0x8ba7d02b,
+0x8184301f,
+0x9620500b,
+0x9964c016,
+0x8321b02b,
+0xa080c00d,
+0xa924902e,
+0x93064015,
+0xa2e75019,
+0x92043004,
+0x8bc45011,
+0x8cc13016,
+0x82c20023,
+0x8844b01a,
+0xa5822009,
+0xa7207007,
+0x91a4b00a,
+0x9545f02e,
+0x81063022,
+0x90e4602b,
+0x82a5c00c,
+0xa0c7000f,
+0x9644c017,
+0xa521a01f,
+0x8fc1301a,
+0x8b67d01e,
+0x98e6902d,
+0x9bc1c01b,
+0xa843f012,
+0x94243026,
+0x9727e011,
+0x92014029,
+0x9ba0a016,
+0x9e403025,
+0x97e1502e,
+0x83006002,
+0x96c6d011,
+0xa5017020,
+0xa5c3602b,
+0x99624011,
+0xa6c60010,
+0xa4e0602e,
+0x97e6e027,
+0x97811013,
+0x8d86b003,
+0x8b41302b,
+0x9a66500e,
+0xa9c1302e,
+0x84a04028,
+0x98a49024,
+0x8b84a016,
+0x9965701e,
+0x96a2500f,
+0xa0044013,
+0x8a22b001,
+0x8900600e,
+0x8741c008,
+0x8cc09013,
+0x9e249012,
+0xa5a58018,
+0xa500b018,
+0xa3e34003,
+0x8d80602d,
+0x9a46f024,
+0xa542600f,
+0x8d826001,
+0x9d616028,
+0x94821013,
+0xa920d01c,
+0x8c23501a,
+0xa382d00a,
+0x8742a026,
+0x8764702a,
+0x9b053009,
+0x9cc7a01d,
+0x9ca3a02b,
+0x9dc7e018,
+0x98875022,
+0x96072016,
+0x8422200a,
+0xa0a48002,
+0xa4608025,
+0x9480201e,
+0x8325500a,
+0x9a618016,
+0x97207024,
+0x8d40c027,
+0x9da3c02b,
+0x81053029,
+0xa645800d,
+0x92e53021,
+0x8026a005,
+0x9920d007,
+0x9f602028,
+0x86035015,
+0xa006801d,
+0x82a69004,
+0x9b80200c,
+0x9c20402c,
+0xa9e4100b,
+0x8467b00f,
+0x9d86501d,
+0xa4a7a003,
+0xa820102b,
+0x9423f00c,
+0x8882602c,
+0x96c28006,
+0x99645023,
+0x9e83d01b,
+0x81854006,
+0x8246a015,
+0x96c62024,
+0xa946b022,
+0x9aa3e006,
+0x8ce08025,
+0xa2c31023,
+0x9be6c00a,
+0x96e53025,
+0x8b814029,
+0x9a45301b,
+0xa6848012,
+0x8360000d,
+0x81e3f010,
+0x85862003,
+0x87a2f00e,
+0x8b868004,
+0x81a0a004,
+0x9a83301b,
+0x8c47901c,
+0x8be6e01f,
+0x83e2201f,
+0x9b42601f,
+0x9be20002,
+0x9ac2502c,
+0x92e5b017,
+0x8084500f,
+0x9487c01f,
+0xa7411014,
+0x90a09023,
+0x9140002b,
+0xa4e4901d,
+0x8c034006,
+0x8b43700c,
+0x92e5f005,
+0x86e5702a,
+0x93e17016,
+0x9e67400b,
+0x87839004,
+0x84a1e005,
+0xa9867021,
+0x86a2401e,
+0x8d058005,
+0x8ee34012,
+0x9f87d021,
+0x9561100e,
+0x90a04003,
+0x9684802d,
+0x93477024,
+0x95655008,
+0x95a60015,
+0x9e85301b,
+0x9ce4d009,
+0x9d25f00b,
+0x8527e02c,
+0xa7676013,
+0x8e20a019,
+0x9607b001,
+0x8042401d,
+0x87e6f00f,
+0x9ba2c020,
+0x96463005,
+0x9365c021,
+0x8225a02c,
+0x9620800f,
+0x95a64026,
+0xa706900f,
+0x8c86a010,
+0x98049028,
+0xa2a2702c,
+0x8e27f015,
+0x8306a00f,
+0x9644d01f,
+0x99446002,
+0xa927b027,
+0x9ae64022,
+0x9a66602b,
+0x90034000,
+0x8360f025,
+0xa326201c,
+0x9ea43023,
+0x97a5101b,
+0xa0831028,
+0xa1c32022,
+0x9b84901d,
+0x8fa7e010,
+0x9063d010,
+0x8ca2e016,
+0x9a625028,
+0xa8600029,
+0x85c1a005,
+0x88263018,
+0xa6c1d02c,
+0x9da44025,
+0x92651023,
+0x9ae0600c,
+0xa427300c,
+0x9166801e,
+0x9ac09028,
+0xa264702c,
+0x8827102c,
+0xa0a2c013,
+0xa887a02d,
+0x83225009,
+0xa8036009,
+0xa764400d,
+0x8845400a,
+0xa7431013,
+0x88c0601d,
+0x85c67028,
+0x9b044018,
+0x8cc40005,
+0x84e13011,
+0x82c0d022,
+0xa3e79009,
+0x99c74009,
+0xa5e62021,
+0x9dc72010,
+0x9a24600a,
+0x8782001e,
+0xa567a016,
+0x90c0001a,
+0x9087c001,
+0x8e44c02c,
+0x81e43023,
+0x9e607000,
+0x8b21d015,
+0x82e0400e,
+0x9ee0b01b,
+0xa3e0502d,
+0xa7e5b02a,
+0x81e1b005,
+0x8a07a021,
+0xa682101a,
+0x9ce6e011,
+0x81039017,
+0xa0c11007,
+0x8f027008,
+0x97e5801e,
+0x9607b01b,
+0x8c66e022,
+0x99e3501b,
+0x94a76024,
+0x8dc4a013,
+0xa6c40001,
+0x9486d00e,
+0x8de23027,
+0xa081a000,
+0xa363c01c,
+0xa4a32029,
+0x91432018,
+0x99a18021,
+0x86649015,
+0x8467a025,
+0x89674018,
+0x91c19017,
+0xa9a00006,
+0x90618008,
+0x94242022,
+0xa286a01f,
+0x95e01004,
+0x83e1d011,
+0xa1a12000,
+0xa7e3d003,
+0x96262005,
+0x92656021,
+0x90c59024,
+0x8606e000,
+0x9b411011,
+0x90627003,
+0xa1c05020,
+0xa6830029,
+0x9927c003,
+0x85461012,
+0xa6a62026,
+0x93e2e000,
+0xa2653002,
+0x9a21001f,
+0x9b65d007,
+0xa027500d,
+0x85a06018,
+0x92057009,
+0x92855009,
+0xa5003011,
+0x9fc4d016,
+0x8540600f,
+0x93c77016,
+0xa6449016,
+0x9700c024,
+0x8c24d01d,
+0x8d257022,
+0x84425025,
+0x99a0802a,
+0x8904c025,
+0x9c02501a,
+0xa0268002,
+0xa105602c,
+0x8d812010,
+0x9ea03026,
+0x94275016,
+0x9de1f018,
+0xa9c44021,
+0x8de7901b,
+0x94e0c015,
+0x95028008,
+0x96a05025,
+0x8365e01c,
+0x9920f003,
+0xa5069028,
+0x80a3002c,
+0xa2a5f004,
+0x94207020,
+0x9aa43017,
+0xa247b012,
+0xa3e7b022,
+0xa640a018,
+0x9e41902e,
+0x8105f007,
+0x8064e00e,
+0x97e50002,
+0x85e1a01d,
+0xa7870026,
+0x82e7b023,
+0x89c35009,
+0x9801900b,
+0x83a6c02c,
+0x80067011,
+0x93e60016,
+0x8c647003,
+0x8d060007,
+0xa385f029,
+};

+ 7 - 0
converted-assets/tiled_assets.h

@@ -0,0 +1,7 @@
+#define LOAD_ASSETS()  GD.safeload("tiled.gd2");
+#define METAL_HANDLE 0
+#define METAL_WIDTH 256
+#define METAL_HEIGHT 256
+#define METAL_CELLS 1
+#define ASSETS_END 65536UL
+static const shape_t METAL_SHAPE = {0, 256, 256, 0};

+ 124 - 0
converted-assets/walk_assets.h

@@ -0,0 +1,124 @@
+static const PROGMEM uint8_t __assets[1707] = {
+0, 0, 0, 5, 0, 0, 0, 1, 32, 64, 0, 8, 32, 128, 0, 7, 34, 255, 255,
+255, 0, 0, 0, 0, 120, 156, 237, 91, 59, 114, 219, 48, 16, 85, 161, 82,
+163, 130, 165, 14, 144, 243, 184, 96, 225, 107, 228, 6, 58, 5, 47,
+146, 11, 232, 8, 26, 21, 44, 51, 46, 213, 178, 164, 213, 196, 143, 15,
+79, 11, 82, 34, 185, 75, 101, 220, 152, 131, 73, 198, 137, 245, 22,
+192, 98, 177, 111, 63, 208, 159, 95, 127, 6, 99, 123, 180, 49, 252,
+221, 252, 216, 30, 247, 231, 203, 181, 108, 202, 230, 114, 221, 159,
+163, 18, 128, 126, 255, 124, 255, 60, 220, 254, 222, 14, 183, 170,
+221, 157, 34, 18, 128, 174, 91, 224, 53, 170, 54, 178, 134, 237, 241,
+114, 21, 18, 243, 227, 239, 183, 143, 8, 190, 104, 132, 198, 202, 223,
+63, 183, 199, 56, 158, 243, 66, 251, 75, 240, 117, 11, 124, 213, 46,
+195, 95, 174, 212, 95, 221, 114, 84, 109, 12, 15, 253, 67, 66, 221,
+226, 39, 156, 95, 8, 191, 145, 4, 140, 221, 105, 119, 234, 246, 177,
+241, 226, 41, 1, 123, 88, 178, 122, 147, 0, 108, 217, 188, 125, 0, 29,
+153, 157, 58, 160, 6, 14, 183, 162, 89, 98, 255, 56, 65, 73, 168, 91,
+225, 189, 119, 209, 240, 176, 131, 186, 45, 26, 222, 99, 252, 123, 94,
+2, 116, 71, 253, 83, 10, 206, 177, 104, 48, 250, 171, 25, 199, 227,
+190, 1, 11, 140, 118, 113, 232, 110, 82, 237, 184, 203, 180, 86, 34,
+47, 215, 221, 73, 59, 209, 152, 198, 115, 245, 196, 115, 229, 176, 32,
+140, 187, 63, 155, 56, 203, 237, 17, 159, 36, 190, 106, 121, 3, 184,
+247, 78, 135, 27, 140, 233, 149, 23, 95, 22, 35, 188, 188, 16, 108,
+176, 108, 60, 154, 199, 108, 196, 191, 125, 148, 73, 119, 92, 197,
+229, 234, 192, 111, 168, 187, 110, 165, 199, 242, 126, 122, 212, 163,
+199, 118, 128, 211, 128, 247, 230, 29, 32, 218, 36, 76, 217, 33, 86,
+32, 203, 195, 220, 64, 227, 243, 249, 25, 224, 86, 61, 151, 0, 13,
+208, 243, 195, 210, 128, 134, 46, 132, 223, 159, 113, 27, 223, 63,
+177, 178, 49, 124, 217, 152, 223, 74, 104, 156, 218, 17, 104, 88, 101,
+217, 28, 110, 101, 51, 102, 5, 196, 227, 147, 125, 107, 161, 79, 146,
+77, 141, 251, 19, 105, 189, 110, 203, 100, 47, 185, 102, 49, 59, 215,
+62, 102, 69, 118, 238, 143, 115, 72, 194, 148, 5, 231, 231, 247, 248,
+169, 244, 91, 151, 47, 91, 249, 127, 229, 255, 149, 255, 151, 243,
+127, 149, 60, 224, 50, 254, 191, 92, 141, 61, 42, 7, 103, 63, 206, 78,
+95, 69, 75, 240, 176, 126, 31, 111, 220, 79, 9, 49, 47, 32, 30, 163,
+31, 195, 136, 173, 1, 120, 156, 26, 247, 160, 200, 33, 118, 3, 170,
+110, 110, 139, 131, 106, 183, 15, 128, 246, 137, 135, 4, 69, 15, 140,
+10, 124, 104, 240, 109, 217, 197, 15, 186, 67, 126, 31, 36, 203, 123,
+251, 200, 45, 0, 150, 232, 245, 130, 88, 1, 89, 214, 188, 160, 120,
+212, 135, 215, 216, 159, 203, 198, 208, 206, 8, 34, 243, 190, 90, 1,
+209, 17, 60, 227, 69, 156, 59, 45, 135, 250, 247, 104, 80, 243, 231,
+241, 162, 240, 140, 131, 61, 120, 225, 52, 136, 86, 68, 49, 119, 126,
+100, 112, 197, 139, 244, 103, 208, 165, 197, 36, 115, 43, 232, 71, 56,
+138, 62, 202, 123, 252, 48, 183, 130, 33, 207, 247, 226, 130, 176, 55,
+91, 50, 214, 248, 97, 141, 31, 126, 112, 252, 112, 124, 189, 126, 0,
+203, 37, 115, 196, 103, 7, 247, 146, 55, 24, 131, 68, 249, 159, 120,
+218, 1, 36, 68, 111, 16, 241, 140, 0, 14, 221, 29, 140, 221, 32, 226,
+193, 130, 146, 224, 231, 111, 203, 65, 97, 131, 208, 63, 99, 160, 0,
+126, 35, 254, 228, 42, 112, 159, 163, 59, 192, 167, 37, 1, 209, 220,
+188, 223, 239, 227, 25, 55, 238, 207, 213, 151, 253, 193, 19, 118,
+156, 238, 182, 34, 86, 2, 192, 58, 204, 122, 253, 236, 159, 75, 80,
+244, 148, 234, 71, 33, 27, 86, 5, 166, 104, 34, 236, 159, 227, 85,
+253, 42, 2, 209, 71, 31, 111, 18, 150, 224, 139, 172, 126, 194, 243,
+140, 234, 79, 50, 192, 216, 190, 232, 101, 32, 33, 69, 14, 140, 30,
+60, 21, 164, 231, 171, 248, 78, 222, 55, 253, 173, 252, 191, 242, 255,
+202, 255, 75, 248, 159, 236, 111, 153, 99, 220, 243, 17, 45, 43, 140,
+240, 63, 173, 151, 185, 179, 114, 239, 194, 157, 123, 202, 111, 91,
+238, 254, 247, 107, 40, 7, 244, 225, 49, 163, 106, 173, 38, 193, 203,
+223, 67, 60, 37, 16, 63, 239, 65, 121, 106, 240, 247, 57, 158, 18,
+153, 13, 79, 73, 224, 220, 204, 28, 117, 7, 108, 192, 14, 166, 87,
+192, 217, 97, 187, 185, 253, 169, 135, 208, 225, 127, 79, 246, 31,
+186, 218, 129, 101, 239, 240, 160, 214, 5, 242, 88, 113, 199, 23, 169,
+94, 46, 57, 140, 159, 188, 86, 156, 234, 229, 247, 122, 191, 34, 177,
+152, 7, 64, 236, 146, 227, 189, 235, 207, 241, 100, 92, 235, 163, 249,
+215, 0, 124, 213, 178, 75, 161, 110, 134, 167, 247, 212, 199, 87, 89,
+247, 34, 198, 192, 236, 189, 112, 220, 59, 24, 51, 189, 167, 135, 83,
+124, 145, 245, 87, 254, 94, 249, 123, 229, 239, 50, 117, 99, 163, 252,
+109, 29, 204, 98, 178, 95, 247, 28, 173, 222, 233, 18, 254, 39, 255,
+226, 222, 89, 237, 92, 253, 255, 249, 251, 12, 75, 97, 189, 151, 25,
+184, 216, 23, 93, 120, 86, 100, 167, 121, 24, 59, 103, 143, 31, 57,
+175, 241, 55, 110, 32, 60, 162, 216, 109, 106, 118, 250, 76, 225, 141,
+191, 153, 131, 141, 229, 81, 100, 170, 100, 243, 27, 245, 239, 141,
+191, 185, 238, 228, 143, 31, 59, 163, 247, 59, 135, 93, 51, 115, 171,
+158, 248, 144, 126, 79, 183, 143, 135, 207, 98, 231, 255, 17, 127,
+231, 130, 177, 190, 111, 202, 22, 239, 115, 12, 250, 255, 101, 51,
+151, 65, 147, 181, 181, 190, 92, 130, 100, 204, 223, 2, 219, 155, 152,
+191, 108, 44, 10, 241, 189, 67, 81, 189, 156, 235, 133, 29, 21, 233,
+29, 65, 138, 33, 186, 155, 53, 222, 255, 71, 148, 117, 185, 130, 53,
+244, 94, 0, 222, 67, 214, 136, 174, 210, 84, 55, 200, 250, 255, 176,
+147, 252, 205, 129, 36, 16, 61, 62, 63, 240, 56, 171, 252, 5, 0, 117,
+107, 145, 192, 120, 44, 36, 207, 165, 46, 127, 166, 209, 76, 194, 132,
+29, 164, 218, 255, 179, 108, 159, 18, 152, 79, 76, 156, 224, 4, 239,
+63, 235, 12, 76, 159, 227, 202, 255, 43, 255, 255, 116, 254, 95, 146,
+191, 95, 174, 98, 240, 37, 252, 79, 253, 191, 146, 255, 179, 246, 158,
+243, 127, 100, 246, 60, 255, 23, 255, 71, 243, 127, 68, 12, 121, 254,
+238, 207, 255, 129, 219, 157, 158, 229, 239, 190, 252, 159, 12, 62,
+204, 223, 189, 249, 63, 222, 135, 245, 243, 127, 123, 133, 49, 87,
+131, 133, 221, 50, 234, 27, 226, 249, 254, 111, 30, 15, 166, 132, 239,
+235, 243, 127, 149, 186, 255, 115, 190, 155, 189, 231, 238, 79, 119,
+3, 134, 236, 61, 111, 137, 41, 255, 79, 126, 31, 60, 108, 49, 132,
+255, 5, 33, 246, 105, 236, 205, 190, 117, 36, 123, 230, 167, 141, 189,
+119, 167, 178, 243, 104, 222, 23, 4, 140, 1, 108, 13, 122, 203, 232,
+123, 199, 66, 205, 49, 251, 55, 246, 199, 255, 32, 50, 160, 196, 105,
+60, 206, 174, 255, 254, 79, 43, 128, 53, 66, 171, 115, 49, 248, 240,
+149, 159, 189, 198, 196, 152, 193, 111, 30, 79, 122, 80, 17, 248, 134,
+78, 192, 26, 63, 172, 241, 195, 79, 142, 31, 248, 110, 125, 105, 252,
+192, 154, 235, 255, 232, 255, 71, 235, 255, 57, 254, 213, 254, 63,
+117, 112, 8, 241, 127, 142, 103, 20, 65, 9, 158, 247, 239, 125, 60,
+109, 24, 231, 79, 191, 27, 235, 255, 147, 127, 89, 241, 216, 157, 128,
+143, 217, 176, 88, 139, 188, 85, 133, 43, 224, 200, 156, 33, 3, 118,
+200, 29, 196, 239, 0, 101, 168, 19, 30, 61, 1, 238, 33, 231, 156, 192,
+251, 131, 163, 152, 82, 175, 241, 34, 231, 199, 40, 78, 21, 132, 232,
+235, 13, 160, 171, 212, 117, 231, 61, 62, 220, 162, 171, 87, 245, 95,
+190, 140, 47, 42, 35, 218, 87, 29, 199, 94, 33, 132, 44, 56, 85, 14,
+212, 191, 240, 240, 254, 228, 74, 190, 141, 247, 77, 135, 43, 255,
+175, 252, 255, 115, 249, 255, 245, 239, 15, 28, 110, 150, 121, 198,
+209, 202, 63, 251, 149, 91, 47, 30, 117, 11, 121, 62, 127, 230, 149,
+207, 143, 44, 135, 172, 197, 234, 109, 236, 253, 126, 213, 157, 186,
+245, 48, 162, 223, 31, 96, 255, 150, 85, 4, 13, 127, 5, 2, 187, 101,
+255, 86, 249, 35, 153, 200, 151, 125, 242, 219, 114, 124, 255, 207,
+243, 199, 96, 79, 197, 215, 129, 175, 59, 139, 87, 244, 167, 149, 120,
+111, 129, 222, 255, 51, 134, 98, 252, 87, 52, 138, 40, 28, 248, 77,
+202, 122, 147, 31, 18, 218, 207, 31, 100, 46, 251, 6, 166, 197, 34,
+254, 19, 148, 253, 10, 93, 181, 254, 8, 140, 30, 152, 54, 163, 183,
+247, 158, 151, 243, 57, 158, 30, 112, 192, 158, 238, 254, 189, 44, 55,
+69, 14, 209, 254, 125, 230, 125, 190, 135, 245, 255, 1, 232, 117, 221,
+129
+};
+#define LOAD_ASSETS()  GD.copy(__assets, sizeof(__assets))
+#define WALK_HANDLE 0
+#define WALK_WIDTH 32
+#define WALK_HEIGHT 32
+#define WALK_CELLS 8
+#define ASSETS_END 16384UL
+static const shape_t WALK_SHAPE = {0, 32, 32, 0};

+ 853 - 0
examples.ino

@@ -0,0 +1,853 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "examples_assets.h"
+#include "examples2_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+}
+
+void f1()
+{
+}
+
+// Apply a rotation around pixel (64, 64) //' rota{
+static void rotate_64_64(uint16_t a)
+{
+    GD.cmd_translate(F16(64),F16(64));
+    GD.cmd_rotate(a);
+    GD.cmd_translate(F16(-64), F16(-64));
+} //' }rota
+
+// Apply a scale (s, t) around pixel (64, 64) //' scalea{
+static void scale_64_64(uint32_t s, uint32_t t)
+{
+    GD.cmd_translate(F16(64),F16(64));
+    GD.cmd_scale(s, t);
+    GD.cmd_translate(F16(-64), F16(-64));
+} //' }scalea
+
+static void zigzag(const char *title, int x)
+{
+  for (int i = 0; i < 3; i++) {
+    GD.Vertex2ii(x - 14,   25 + i * 90, SPRITES_HANDLE, 2);
+    GD.Vertex2ii(x + 14,   25 + 45 + i * 90, SPRITES_HANDLE, 2);
+  }
+  GD.cmd_text(x, 0, 27, OPT_CENTERX, title);
+}
+
+static void button(int x, int y, byte label);
+
+void loop()
+{
+  GD.ClearColorRGB(0x103000); //' a{
+  GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
+  GD.Begin(POINTS);
+  GD.Vertex2ii(220, 100);
+  GD.Vertex2ii(260, 170);
+  GD.swap(); //' }a
+
+  GD.ClearColorRGB(0x103000); //' b{
+  GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
+  GD.PointSize(16 * 30);  // means 30 pixels
+  GD.Begin(POINTS);
+  GD.Vertex2ii(220, 100);
+  GD.Vertex2ii(260, 170);
+  GD.swap(); //' }b
+
+  GD.ClearColorRGB(0x103000); //' c{
+  GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
+  GD.PointSize(16 * 30);
+  GD.Begin(POINTS);
+  GD.ColorRGB(0xff8000);  // orange
+  GD.Vertex2ii(220, 100);
+  GD.ColorRGB(0x0080ff);  // teal
+  GD.Vertex2ii(260, 170);
+  GD.swap(); //' }c
+
+  GD.ClearColorRGB(0x103000); //' d{
+  GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
+  GD.PointSize(16 * 30);
+  GD.Begin(POINTS);
+  GD.ColorA(128);         // 50% transparent
+  GD.ColorRGB(0xff8000);  // orange
+  GD.Vertex2ii(220, 100);
+  GD.ColorRGB(0x0080ff);  // teal
+  GD.Vertex2ii(260, 170); 
+  GD.swap(); //' }d
+
+  GD.ColorRGB(0, 128, 255); // teal //' triplet{
+  GD.Vertex2ii(260, 170);   //' }triplet
+
+  GD.play(PIANO, 60);   //' e{
+  delay(1000);
+  GD.play(ORGAN, 64);   //' }e
+
+  GD.ClearColorRGB(0x103000); //' f{
+  GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
+  GD.PointSize(16 * 30);
+  GD.Begin(POINTS);
+  GD.ColorRGB(0xff8000);
+  GD.Tag(100);
+  GD.Vertex2ii(220, 100);
+  GD.ColorRGB(0x0080ff);
+  GD.Tag(101);
+  GD.Vertex2ii(260, 170);
+  GD.swap();  //' }f
+  
+#ifndef EMUPC    // JCB
+  Serial.begin(9600);
+  for (;;) {      //' g{
+    GD.get_inputs();
+    Serial.println(GD.inputs.tag);
+  } //' }g
+#endif          // JCB
+
+  GD.Clear(); //' h{
+  for (int i = 0; i <= 254; i++) {
+    GD.Tag(i);
+    GD.cmd_number((i % 16) * 30, (i / 16) * 17, 26, 0, i);
+  }
+  GD.swap();
+#ifndef EMUPC    // JCB
+  GD.get_inputs(); //' }h
+  Serial.println(GD.inputs.tag);
+#endif          // JCB
+
+  GD.cmd_loadimage(0, 0);
+  GD.load("healsky3.jpg");
+
+  GD.Clear(); //' i{
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0);
+  GD.Vertex2ii(100, 100);
+  GD.Vertex2ii(200, 0);
+  GD.Vertex2ii(300, 100);
+  GD.swap(); //' }i
+
+  GD.Clear(); //' j{
+  GD.Begin(BITMAPS);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 64, 64);
+  GD.Vertex2ii(0, 0);
+  GD.swap(); //' }j
+
+  GD.Clear(); //' k{
+  GD.Begin(BITMAPS);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 480, 272);
+  GD.Vertex2ii(0, 0);
+  GD.swap(); //' }k
+
+  GD.Clear(); //' l{
+  GD.Begin(BITMAPS);
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272);
+  GD.Vertex2ii(0, 0);
+  GD.swap(); //' }l
+
+  GD.BitmapHandle(0);
+  GD.cmd_loadimage(0, 0);
+  GD.load("sunrise.jpg");
+  GD.BitmapHandle(1);
+  GD.cmd_loadimage(-1, 0);
+  GD.load("healsky3.jpg");
+
+  GD.Clear(); //' m{
+  GD.Begin(BITMAPS);
+  for (int i = 0; i < 100; i++)
+    GD.Vertex2ii(GD.random(480), GD.random(272), GD.random(2));
+  GD.swap(); //' }m
+
+  GD.Clear(); //' n{
+  GD.Begin(BITMAPS);
+
+  GD.ColorRGB(0x00ff00);                  // pure green
+  GD.Vertex2ii(240 - 130, 136 - 130, 1);
+
+  GD.ColorRGB(0xff8080);                  // pinkish
+  GD.Vertex2ii(240      , 136 - 130, 1);
+
+  GD.ColorRGB(0xffff80);                  // yellowish
+  GD.Vertex2ii(240 - 130, 136      , 1);
+
+  GD.ColorRGB(0xffffff);                  // white
+  GD.Vertex2ii(240      , 136      , 1);
+  GD.swap(); //' }n
+
+  GD.cmd_gradient(0, 0,   0x0060c0, //' grad{
+                  0, 271, 0xc06000);
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "READY PLAYER ONE");
+  GD.swap(); //' }grad
+
+#define WIDGET(c) do { \
+  GD.ClearColorRGB(0x404040); \
+  GD.Clear(); \
+  (c); \
+  GD.swap(); \
+  } while (0)
+
+  WIDGET(GD.cmd_clock(240, 136, 120, 0, 8, 27, 13, 0));
+  WIDGET(GD.cmd_dial(240, 136, 120, 0, 5333));
+  WIDGET(GD.cmd_gauge(240, 136, 120, 0, 4, 2, 5333, 65535));
+  WIDGET(GD.cmd_keys(0, 136 - 40, 480, 80, 31, 'u', "qwertyuiop"));
+  WIDGET((
+    GD.cmd_number(240, 45, 31, OPT_CENTER, 42),
+    GD.cmd_number(240, 136, 31, OPT_CENTER | 4, 42),
+    GD.cmd_number(240, 226, 31, OPT_CENTER | 8, 42)
+    ));
+  WIDGET(GD.cmd_progress(10, 136, 460, 10, 0, 25333, 65535));
+  WIDGET(GD.cmd_scrollbar(30, 136, 420, 30, 0, 25333, 10000, 65535));
+  WIDGET(GD.cmd_slider(30, 136, 420, 30, 0, 25333, 65535));
+  WIDGET(GD.cmd_spinner(240, 136, 0, 1));
+  WIDGET((
+    GD.cmd_toggle(180,  20, 120, 31, 0, 0,     "yes\xffno"),
+    GD.cmd_toggle(180, 120, 120, 31, 0, 32768, "yes\xffno"),
+    GD.cmd_toggle(180, 220, 120, 31, 0, 65535, "yes\xffno")
+  ));
+  WIDGET(GD.cmd_button(240 - 100, 136 - 40, 200, 80, 31, 0, "1 UP"));
+
+
+  GD.cmd_gradient(0, 0,   0x0060c0, //' dropshadow{
+                  0, 271, 0xc06000);
+  GD.ColorRGB(0x000000);
+  GD.cmd_text(237, 139, 31, OPT_CENTER, "READY PLAYER ONE");
+  GD.ColorRGB(0xffffff);
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "READY PLAYER ONE");
+  GD.swap(); //' }dropshadow
+
+  int x, y;
+  GD.Clear();
+  GD.Begin(LINES); //' linewidth{
+  for (int i = 0; i < 136; i++) {
+    GD.ColorRGB(GD.random(255), GD.random(255), GD.random(255));
+    GD.LineWidth(i);
+    GD.polar(x, y, i, i * 2500);
+    GD.Vertex2ii(240 + x, 136 + y);
+  } //' }linewidth
+  GD.swap();
+
+  GD.Clear();
+  GD.Begin(POINTS); //' pointsize{
+  for (int i = 0; i < 136; i++) {
+    GD.ColorRGB(GD.random(255), GD.random(255), GD.random(255));
+    GD.PointSize(i);
+    GD.polar(x, y, i, i * 2500);
+    GD.Vertex2ii(240 + x, 136 + y);
+  } //' }pointsize
+  GD.swap();
+
+  GD.Clear();
+  GD.Begin(RECTS); //' colorrgb{
+  GD.ColorRGB(255, 128, 30);    // orange
+  GD.Vertex2ii(10, 10); GD.Vertex2ii(470, 130); 
+  GD.ColorRGB(0x4cc417);        // apple green
+  GD.Vertex2ii(10, 140); GD.Vertex2ii(470, 260); //' }colorrgb
+  GD.swap();
+
+  GD.Clear();
+  GD.Begin(POINTS); //' colora{
+  GD.PointSize(12 * 16);
+  for (int i = 0; i < 255; i += 5) {
+    GD.ColorA(i);
+    GD.Vertex2ii(2 * i, 136 + GD.rsin(120, i << 8));
+  } //' }colora
+  GD.swap();
+
+  GD.ClearColorRGB(0x008080);         // teal //' clearcolorrgb{
+  GD.Clear();
+  GD.ScissorSize(100, 200);
+  GD.ScissorXY(10, 20);
+  GD.ClearColorRGB(0xf8, 0x80, 0x17); // orange
+  GD.Clear(); //' }clearcolorrgb
+  GD.swap();
+
+  GD.Clear();
+  GD.Begin(POINTS); //' blendfunc{
+  GD.ColorRGB(0xf88017);
+  GD.PointSize(80 * 16);
+  GD.BlendFunc(SRC_ALPHA, ONE_MINUS_SRC_ALPHA);
+  GD.Vertex2ii(150, 76); GD.Vertex2ii(150, 196); 
+  GD.BlendFunc(SRC_ALPHA, ONE);
+  GD.Vertex2ii(330, 76); GD.Vertex2ii(330, 196); 
+  //' }blendfunc
+  GD.swap();
+
+  LOAD_ASSETS();
+
+  GD.Clear();
+  GD.Begin(BITMAPS); //' alphafunc{
+  GD.Vertex2ii(110, 6);             // Top left: ALWAYS
+  GD.AlphaFunc(EQUAL, 255);         // Top right: (A == 255)
+  GD.Vertex2ii(240, 6);
+  GD.AlphaFunc(LESS, 160);          // Bottom left: (A < 160)
+  GD.Vertex2ii(110, 136);
+  GD.AlphaFunc(GEQUAL, 160);        // Bottom right: (A >= 160)
+  GD.Vertex2ii(240, 136); //' }alphafunc
+  GD.swap();
+
+  GD.Clear();
+  GD.PointSize(135 * 16); //' colormask{
+  GD.Begin(POINTS); //' colormask{
+  GD.ColorMask(1, 0, 0, 0); // red only
+  GD.Vertex2ii(240 - 100, 136);
+  GD.ColorMask(0, 1, 0, 0); // green only
+  GD.Vertex2ii(240, 136);
+  GD.ColorMask(0, 0, 1, 0); // blue only
+  GD.Vertex2ii(240 + 100, 136); //' }colormask
+  GD.swap();
+
+  GD.ClearColorRGB(0x003000);
+  GD.Clear();
+  GD.BitmapHandle(CARDS_HANDLE);  // CARDS has 53 cells, 0-52 //' cell{
+  GD.Begin(BITMAPS);
+  for (int i = 1; i <= 52; i++) {
+    GD.Cell(i);
+    GD.Vertex2f(GD.random(16 * 480), GD.random(16 * 272));
+  } //' }cell
+  GD.swap();
+
+  GD.ClearColorRGB(0x0000ff); // Clear color to blue //' clear{
+  GD.ClearStencil(0x80);      // Clear stencil to 0x80
+  GD.ClearTag(100);           // Clear tag to 100
+  GD.Clear(1, 1, 1);          // Go! //' }clear
+  GD.swap();
+
+  GD.Clear();
+  GD.cmd_text(240,  64, 31, OPT_CENTER, "WHITE"); //' context{
+  GD.SaveContext();
+  GD.ColorRGB(0xff0000);
+  GD.cmd_text(240, 128, 31, OPT_CENTER, "RED");
+  GD.RestoreContext();
+  GD.cmd_text(240, 196, 31, OPT_CENTER, "WHITE AGAIN"); //' }context
+  GD.swap();
+
+  GD.Clear();
+  GD.ScissorSize(400, 100); //' scissor{
+  GD.ScissorXY(35, 36);
+  GD.ClearColorRGB(0x008080); GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Scissor Example");
+  GD.ScissorXY(45, 140);
+  GD.ClearColorRGB(0xf88017); GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Scissor Example"); //' }scissor
+  GD.swap();
+
+  GD.Clear();
+  GD.StencilOp(INCR, INCR); // incrementing stencil //' stencil{
+  GD.PointSize(135 * 16);
+  GD.Begin(POINTS);         // Draw three white circles
+  GD.Vertex2ii(240 - 100, 136);
+  GD.Vertex2ii(240, 136);
+  GD.Vertex2ii(240 + 100, 136);
+  GD.ColorRGB(0xff0000);    // Draw pixels with stencil==2 red
+  GD.StencilFunc(EQUAL, 2, 255);
+  GD.Begin(RECTS);          // Visit every pixel on the screen
+  GD.Vertex2ii(0,0); GD.Vertex2ii(480,272); //' }stencil
+  GD.swap();
+
+  GD.Clear();   //' rects{
+  GD.Begin(RECTS);
+
+  GD.Vertex2ii(30, 30);
+  GD.Vertex2ii(450, 50);
+
+  GD.LineWidth(10 * 16);    // corner radius 10.0 pixels
+  GD.Vertex2ii(30, 120);
+  GD.Vertex2ii(450, 140);
+
+  GD.LineWidth(20 * 16);    // corner radius 20.0 pixels
+  GD.Vertex2ii(30, 220);
+  GD.Vertex2ii(450, 230);
+
+  GD.swap();    //' }rects
+
+  GD.Clear();   
+  GD.Begin(POINTS);  // draw 50-pixel wide green circles //' blend1{
+  GD.ColorRGB(20, 91, 71);
+  GD.PointSize(50 * 16);
+
+  for (int x = 100; x <= 380; x += 40)
+    GD.Vertex2ii(x, 72);
+
+  GD.BlendFunc(SRC_ALPHA, ONE);   // additive blending
+  for (int x = 100; x <= 380; x += 40)
+    GD.Vertex2ii(x, 200); //' }blend1
+
+  GD.swap();    
+
+  GD.cmd_loadimage(0, 0);
+  GD.load("tree.jpg");
+
+  GD.Begin(BITMAPS);
+  GD.ColorRGB(0xc0c0c0);
+  GD.Vertex2ii(0, 0);
+  GD.ColorRGB(0xffffff);
+
+  GD.Begin(POINTS);     //' comp1{
+  GD.PointSize(16 * 120); // White outer circle
+  GD.Vertex2ii(136, 136);
+  GD.ColorRGB(0x000000);
+  GD.PointSize(16 * 110); // Black inner circle
+  GD.Vertex2ii(136, 136);
+
+  GD.ColorRGB(0xffffff);
+  GD.cmd_clock(136, 136, 130,
+               OPT_NOTICKS | OPT_NOBACK, 8, 41, 39, 0); //' }comp1
+  GD.swap();
+
+  GD.ColorRGB(0xc0c0c0);
+  GD.Clear();             // now alpha is all zeroes //' comp2{ 
+  GD.ColorMask(1,1,1,0);  // draw tree, but leave alpha zero
+  GD.Begin(BITMAPS);          
+  GD.Vertex2ii(0, 0);
+
+  GD.ColorMask(0,0,0,1);      //' comp2a{
+  GD.BlendFunc(ONE, ONE_MINUS_SRC_ALPHA); //' }comp2a
+  GD.Begin(POINTS); //' comp2b{
+  GD.PointSize(16 * 120); // outer circle
+  GD.Vertex2ii(136, 136); //' }comp2b
+  GD.BlendFunc(ZERO, ONE_MINUS_SRC_ALPHA); //' comp2c{
+  GD.PointSize(16 * 110); // inner circle
+  GD.Vertex2ii(136, 136); //' }comp2c
+  GD.BlendFunc(ONE, ONE_MINUS_SRC_ALPHA); //' comp2d{
+  GD.cmd_clock(136, 136, 130,
+               OPT_NOTICKS | OPT_NOBACK, 8, 41, 39, 0); //' }comp2d
+
+  GD.ColorMask(1,1,1,0); //' comp2e{
+  GD.BlendFunc(DST_ALPHA, ONE);
+  GD.ColorRGB(0x808080);
+  GD.Begin(RECTS);        // Visit every pixel on the screen
+  GD.Vertex2ii(0,0);
+  GD.Vertex2ii(480,272); //' }comp2 }comp2e
+  GD.swap();
+
+  GD.cmd_loadimage(0, 0);
+  GD.load("healsky3.jpg");
+  GD.ClearColorRGB(0x602010); //' rot1{
+  GD.Clear();             
+  GD.Begin(BITMAPS);
+
+  GD.Vertex2ii(10, 72);
+
+  GD.cmd_rotate(DEGREES(22.5));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(176, 72);
+
+  GD.cmd_rotate(DEGREES(22.5));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(342, 72);
+
+  GD.swap();  //' }rot1
+
+  GD.ClearColorRGB(0x602010);
+  GD.Clear();             //' rot2{
+  GD.BlendFunc(SRC_ALPHA, ZERO);
+  GD.Begin(BITMAPS);
+
+  GD.Vertex2ii(10, 72);
+
+  GD.cmd_rotate(DEGREES(22.5));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(176, 72);
+
+  GD.cmd_rotate(DEGREES(22.5));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(342, 72);
+
+  GD.swap();  //' }rot2
+
+  GD.ClearColorRGB(0x602010); //' rot3{
+  GD.Clear();             
+  GD.BlendFunc(SRC_ALPHA, ZERO);
+  GD.Begin(BITMAPS);
+
+  GD.Vertex2ii(10, 72);
+
+  rotate_64_64(DEGREES(22.5));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(176, 72);
+
+  rotate_64_64(DEGREES(22.5));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(342, 72);
+
+  GD.swap();   //' }rot3
+
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 128, 128);
+  GD.ClearColorRGB(0x602010); //' zoom{
+  GD.Clear();             
+  GD.Begin(BITMAPS);
+
+  GD.cmd_scale(F16(2), F16(2));
+  GD.cmd_setmatrix();
+
+  GD.Vertex2ii(10, 8);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 256, 256);
+  GD.Vertex2ii(200, 8);
+
+  GD.swap();   //' }zoom
+
+  LOAD_ASSETS();
+
+  GD.Clear();
+
+  GD.LineWidth(20);
+  GD.PointSize(20);
+
+  GD.Begin(BITMAPS);
+  zigzag("BITMAPS", 48);
+
+  GD.Begin(POINTS);
+  zigzag("POINTS",  48 + 1 * 96);
+
+  GD.Begin(LINES);
+  zigzag("LINES",  48 + 2 * 96);
+
+  GD.Begin(LINE_STRIP);
+  zigzag("LINE_STRIP",  48 + 3 * 96);
+
+  GD.Begin(RECTS);
+  zigzag("RECTS",  48 + 4 * 96);
+
+  GD.swap();
+  
+  for (int j = 0; j < 2; j++) {
+    uint32_t rgb[2] = {0x00ff00, 0x60c030};
+    uint32_t color = rgb[j];
+    GD.ColorRGB(color);
+    GD.seed(0x947a);  
+
+    GD.Clear(); //' additive{
+    GD.BlendFunc(SRC_ALPHA, ONE);
+    GD.PointSize(8 * 16);
+    GD.Begin(POINTS);
+    for (int i = 0; i < 1000; i++)
+      GD.Vertex2ii(20 + GD.random(440), 20 + GD.random(232));
+    GD.swap(); //' }additive
+  }
+
+  GD.Clear();   //' polygon{
+  GD.ColorRGB(0xf3d417);
+  Poly po;
+  po.begin();
+  po.v(16 * 154, 16 * 262);
+  po.v(16 * 256, 16 * 182);
+  po.v(16 * 312, 16 * 262);
+  po.v(16 * 240, 16 *  10);
+  po.draw();
+  GD.swap();  //' }polygon
+
+  GD.cmd_gradient(0, 0, 0x82670e, 272, 272, 0xa78512);
+  GD.SaveContext();
+  GD.ColorRGB(0xf3d417);
+  po.begin();
+  po.v(16 * 154, 16 * 262);
+  po.v(16 * 256, 16 * 182);
+  po.v(16 * 312, 16 * 262);
+  po.v(16 * 240, 16 *  10);
+  po.draw();
+  GD.RestoreContext();
+  GD.ColorRGB(0x000000);  //' polygon2{
+  GD.LineWidth(3 * 16);
+  po.outline();    //' }polygon2
+  GD.swap();
+
+  GD.Clear();
+  GD.BitmapLayout(L8, 1, 1); //' 1x1{
+  GD.BlendFunc(ONE, ZERO);
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 60, 30);
+
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(10, 10); // each vertex draws a 60X30 rectangle
+  GD.Vertex2ii(110, 110);
+  GD.Vertex2ii(210, 210);
+
+  GD.swap(); //' }1x1
+
+  GD.BitmapHandle(SPECTRUM_HANDLE); //' 1d{
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 512, 512);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0, SPECTRUM_HANDLE);  //' }1d
+  GD.swap();
+
+  GD.cmd_rotate(DEGREES(73));   //' 1d-twist{
+  GD.cmd_scale(F16(0.3), F16(1));
+  GD.cmd_setmatrix(); //' }1d-twist
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0, SPECTRUM_HANDLE);  
+  GD.swap();
+
+  GD.ClearColorRGB(0x00324d);   //' 2bit{
+  GD.Clear();
+
+  GD.ColorMask(0, 0, 0, 1);
+  GD.Begin(BITMAPS);
+
+  GD.BlendFunc(ONE, ONE);
+  GD.ColorA(0xaa);  // draw bit 1 into A
+  GD.Vertex2ii(240 - ABE_WIDTH / 2, 0, ABE_HANDLE, 1);
+  GD.ColorA(0x55);  // draw bit 0 into A
+  GD.Vertex2ii(240 - ABE_WIDTH / 2, 0, ABE_HANDLE, 0);
+
+  // Now draw the same pixels, controlled by DST_ALPHA
+  GD.ColorMask(1, 1, 1, 1);
+  GD.ColorRGB(0xfce4a8);
+  GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
+  GD.Vertex2ii(240 - ABE_WIDTH / 2, 0, ABE_HANDLE, 1);
+
+  GD.swap(); //' }2bit
+
+  EX2_LOAD_ASSETS();
+
+  GD.cmd_gradient(0, 0,   0x8080c0, //' dropshadow2{
+                  0, 271, 0xc0d080);
+  GD.ColorRGB(0x000000);
+  GD.ColorA(128);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(240 - 12 - EX2_GAMEDUINO_WIDTH / 2,
+               136 + 12 - EX2_GAMEDUINO_HEIGHT / 2,
+               EX2_GAMEDUINO_HANDLE);
+  GD.ColorRGB(0xffffff);
+  GD.ColorA(0xff);
+  GD.Vertex2ii(240 - EX2_GAMEDUINO_WIDTH / 2,
+               136 - EX2_GAMEDUINO_HEIGHT / 2,
+               EX2_GAMEDUINO_HANDLE);
+  GD.swap(); //' }dropshadow2
+
+  {
+    int w = 65;
+    GD.Begin(LINES);
+    GD.LineWidth(28 * 16);
+    GD.Vertex2ii(240 - w, 136, 0, 0);
+    GD.Vertex2ii(240 + w, 136, 0, 0);
+    GD.ColorRGB(0x000480);
+    GD.LineWidth(24 * 16);
+    GD.Vertex2ii(240 - w, 136, 0, 0);
+    GD.Vertex2ii(240 + w, 136, 0, 0);
+    GD.ColorRGB(0xffffff);
+    GD.cmd_text(240, 132, 31, OPT_CENTER, "upvote");
+    GD.swap();
+  }
+
+  int WALK_HANDLE = EX2_WALK_HANDLE;
+  GD.ClearColorRGB(0x80c2dd);
+  GD.Clear();
+  GD.Begin(BITMAPS);  //' cell{
+  GD.Vertex2ii(  0, 10, WALK_HANDLE, 0);
+  GD.Vertex2ii( 50, 10, WALK_HANDLE, 1);
+  GD.Vertex2ii(100, 10, WALK_HANDLE, 2);
+  GD.Vertex2ii(150, 10, WALK_HANDLE, 3);
+  GD.Vertex2ii(200, 10, WALK_HANDLE, 4);
+  GD.Vertex2ii(250, 10, WALK_HANDLE, 5);
+  GD.Vertex2ii(300, 10, WALK_HANDLE, 6);
+  GD.Vertex2ii(350, 10, WALK_HANDLE, 7); //' }cell
+  GD.swap();
+
+  int STRIPE_HANDLE = EX2_STRIPE_HANDLE;
+  GD.BitmapHandle(STRIPE_HANDLE);    //' stripe1{
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0, STRIPE_HANDLE);  //' }stripe1
+  GD.swap();      
+
+  GD.BitmapHandle(STRIPE_HANDLE);    //' stripe2{
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272);
+
+  GD.ClearColorRGB(0x103000);
+  GD.Clear();
+
+  GD.ColorMask(0, 0, 0, 1);   // write A only
+  GD.BlendFunc(ONE, ONE);
+  GD.cmd_text(240, 136, 31, OPT_CENTER,
+              "STRIPES ARE IN, BABY!");
+
+  GD.ColorMask(1, 1, 1, 0);   // write R,G,B only
+  GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0, STRIPE_HANDLE);  //' }stripe2
+
+  GD.swap();
+
+  GD.ClearColorRGB(0x80c2dd);
+  GD.Clear();
+  GD.Begin(BITMAPS);  //' mirror{
+  GD.Vertex2ii(  0, 10, WALK_HANDLE, 0);
+  GD.cmd_translate(F16(16), F16(0));
+  GD.cmd_scale(F16(-1), F16(1));
+  GD.cmd_translate(F16(-16), F16(0));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii( 30, 10, WALK_HANDLE, 0);
+  GD.swap();  //' }mirror
+
+  if (0) {
+  GD.play(PIANO, 60);   //' waitnote{
+  while (GD.rd(REG_PLAY) != 0)
+    ; //' }waitnote
+  }
+
+  GD.cmd_loadimage(0, 0);
+  GD.load("healsky3.jpg");
+  GD.BlendFunc(SRC_ALPHA, ZERO);
+  GD.ClearColorRGB(0x602010); //' scale1{
+  GD.Clear();             
+  GD.Begin(BITMAPS);
+
+  GD.Vertex2ii(10, 72);
+
+  scale_64_64(F16(2.0), F16(2.0));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(176, 72);
+
+  GD.cmd_loadidentity();
+  scale_64_64(F16(0.4), F16(0.4));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(342, 72);
+
+  GD.swap();  //' }scale1
+
+#define draw_left_circle()   (GD.Begin(POINTS), GD.PointSize(16 * 60), GD.Vertex2ii(200, 136))
+#define draw_right_circle()  (GD.Begin(POINTS), GD.PointSize(16 * 70), GD.Vertex2ii(280, 136))
+              
+#define PAINT_ALPHA()  GD.BlendFunc(ONE, ONE_MINUS_SRC_ALPHA) //' alpha1{
+#define CLEAR_ALPHA()  GD.BlendFunc(ZERO, ONE_MINUS_SRC_ALPHA)
+
+  GD.ClearColorA(0x80);
+  GD.Clear();
+
+  PAINT_ALPHA();
+  draw_left_circle();
+
+  CLEAR_ALPHA();
+  draw_right_circle();       //' }alpha1
+
+  GD.BlendFunc(DST_ALPHA, ZERO);
+  GD.Begin(RECTS);
+  GD.Vertex2ii(0, 0);
+  GD.Vertex2ii(480, 272);
+
+  GD.swap();
+
+  GD.cmd_loadimage(0, 0);
+  GD.load("healsky3.jpg");
+  GD.cmd_gradient(0, 0, 0x403040,
+                  0, 272, 0xd8bfd8);
+  GD.Begin(BITMAPS);    //' corners{
+
+  GD.Vertex2ii( 52, 50);                    // left bitmap
+
+  GD.ColorMask(0, 0, 0, 1);                 // only draw A
+  GD.Clear();
+  int r = 20;                               // corner radius
+  GD.LineWidth(16 * r);
+  GD.Begin(RECTS);
+  GD.Vertex2ii(300 + r,       50 + r);       // top-left
+  GD.Vertex2ii(300 + 127 - r, 50 + 127 - r); // bottom-right
+
+  GD.ColorMask(1, 1, 1, 0);                 // draw bitmap
+  GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii( 300, 50); //' }corners
+
+  GD.swap();
+
+  GD.Clear();
+  GD.LineWidth(16 * r);
+  GD.Begin(RECTS);
+  GD.Vertex2ii(300 + r,       50 + r);       // top-left
+  GD.Vertex2ii(300 + 127 - r, 50 + 127 - r); // bottom-right
+  GD.swap();
+
+  GD.ColorRGB(0x808080);
+  GD.cmd_loadimage(0, 0);     //' keypad{
+  GD.load("tree.jpg");
+  GD.Clear();
+  GD.ColorMask(1, 1, 1, 0);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0);
+
+  GD.ColorMask(0, 0, 0, 1);
+  int x0 = 160, x1 = 240, x2 = 320;
+  int y0 =  56, y1 = 136, y2 = 216;
+  button(x0, y0, 1); button(x1, y0, 2); button(x2, y0, 3);
+  button(x0, y1, 4); button(x1, y1, 5); button(x2, y1, 6);
+  button(x0, y2, 7); button(x1, y2, 8); button(x2, y2, 9);
+
+  GD.ColorMask(1, 1, 1, 1);
+  GD.ColorRGB(0xffffff);
+  GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
+  GD.Begin(RECTS);
+  GD.Vertex2ii(0, 0); GD.Vertex2ii(480, 272);  //' }keypad
+
+  GD.swap();
+
+  GD.cmd_memwrite(0, 8);  //' handmade{
+  static const PROGMEM uint8_t picture[] = {
+    0b01110111,
+    0b11100010,
+    0b11000001,
+    0b10100011,
+    0b01110111,
+    0b00111010,
+    0b00011100,
+    0b00101110,
+  };
+  GD.copy(picture, 8);
+
+  GD.BitmapSource(0);
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272);
+  GD.BitmapLayout(L1, 1, 8);
+
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0);  //' }handmade
+  GD.swap();
+
+  GD.ColorRGB(176, 224, 230);
+  GD.Clear();
+  GD.PointSize(32);
+  GD.Begin(POINTS);
+  for (int i = 0; i < 16; i++)
+    GD.Vertex2f(64 + 16 * i * 7, 64 + i);
+  GD.swap();
+
+  GD.ClearColorRGB(0x103000);   //' replace{
+  GD.Clear();
+  GD.BlendFunc(SRC_ALPHA, ZERO);  // replace operation
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
+  GD.swap();                    //' }replace
+
+  GD.cmd_loadimage(0, 0);
+  GD.load("healsky3.jpg");
+  GD.finish();
+}
+
+static void button(int x, int y, byte label)  //' button{
+{
+  int sz = 18;                    // button size in pixels
+
+  GD.Tag(label);
+  PAINT_ALPHA();
+  GD.Begin(RECTS);
+  GD.LineWidth(16 * 20);
+  GD.Vertex2ii(x - sz, y - sz);
+  GD.Vertex2ii(x + sz, y + sz);
+
+  CLEAR_ALPHA();
+  GD.ColorA(200);
+  /* JCB
+  GD.ColorA(200);
+  JCB */
+  GD.LineWidth(16 * 15);
+  GD.Vertex2ii(x - sz, y - sz);
+  GD.Vertex2ii(x + sz, y + sz);
+
+  GD.ColorA(0xff);
+  PAINT_ALPHA();
+  GD.cmd_number(x, y, 31, OPT_CENTER, label);
+} //' }button

+ 24 - 0
fizz.ino

@@ -0,0 +1,24 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+}
+
+void loop() //' a{
+{
+  GD.Clear();
+  GD.Begin(POINTS);
+  for (int i = 0; i < 100; i++) {
+    GD.PointSize(GD.random(16 * 50));
+    GD.ColorRGB(GD.random(256),
+                GD.random(256),
+                GD.random(256));
+    GD.ColorA(GD.random(256));
+    GD.Vertex2ii(GD.random(480), GD.random(272));
+  }
+  GD.swap();
+} //' }a

+ 44 - 0
fonts.ino

@@ -0,0 +1,44 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+#include "fonts_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+void loop()
+{
+  GD.ClearColorRGB(0x103000);
+  GD.Clear();
+  for (int i = 0; i < 16; i++) {
+    int x = (i & 8) ? 260 : 20;
+    int y = 12 + 33 * (i % 8);
+    GD.BlendFunc(SRC_ALPHA, ONE_MINUS_SRC_ALPHA);
+    GD.cmd_number(x, y, 26, OPT_CENTERY, 16 + i);
+    // GD.BlendFunc(SRC_ALPHA, ZERO);
+    GD.cmd_text(x + 20, y, 16 + i, OPT_CENTERY, "This font");
+  }
+  GD.swap();
+
+  GD.ClearColorRGB(0x103000);
+  GD.Clear();
+  byte font = NIGHTFONT_HANDLE;  //' night{
+  GD.cmd_text(240, 40, font, OPT_CENTER, "abcdefghijklm");
+  GD.cmd_text(240, 100, font, OPT_CENTER, "nopqrstuvwxyz");
+  GD.cmd_text(240, 160, font, OPT_CENTER, "ABCDEFGHIJKLM");
+  GD.cmd_text(240, 220, font, OPT_CENTER, "NOPQRSTUVWXYZ"); //' }night
+  GD.swap();
+  
+  for (int i = 0; i < 10; i++) {
+    GD.ClearColorRGB(0x301000);
+    GD.Clear();
+    GD.cmd_text(240, 136, 31, OPT_CENTER, "Night font");
+    GD.swap();
+  }
+
+} //' }A

+ 27 - 0
formats.ino

@@ -0,0 +1,27 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "formats_assets.h" //' A{
+
+void setup() 
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+void loop()
+{
+  GD.ClearColorRGB(0x000050);
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(10, 10, PHOTO_RGB565_HANDLE);
+  GD.Vertex2ii(10, 60, PHOTO_ARGB1555_HANDLE);
+  GD.Vertex2ii(10, 110, PHOTO_ARGB4_HANDLE);
+  GD.Vertex2ii(10, 160, PHOTO_RGB332_HANDLE);
+  GD.Vertex2ii(10, 210, PHOTO_ARGB2_HANDLE);
+
+  GD.Vertex2ii(240, 10, PHOTO_L1_HANDLE);
+  GD.swap();
+} //' }A

+ 434 - 0
frogger.ino

@@ -0,0 +1,434 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "frogger_assets.h"
+
+#define CONTROL_LEFT  1
+#define CONTROL_RIGHT 2
+#define CONTROL_UP    4
+#define CONTROL_DOWN  8
+
+class Controller {
+  public:
+    void begin() {
+      prev = 0;
+    }
+    byte read() {
+      byte r = GD.inputs.tag & (CONTROL_LEFT | CONTROL_RIGHT | CONTROL_UP | CONTROL_DOWN);
+      byte edge = r & ~prev;
+      prev = r;
+      return edge;
+    }
+  private:
+    byte prev;
+};
+
+static Controller Control;
+
+static void draw_score(byte x, byte y, long n)
+{
+  GD.cmd_number(8 * x, 8 * y, FONT_HANDLE, 5, n);
+}
+
+// Game variables
+static unsigned int t;
+static int frogx, frogy;    // screen position
+static int leaping;         // 0 means not leaping, 1-8 animates the leap
+static int frogdir;         // while leaping, which direction is the leap?
+static int frogface;        // which way is the frog facing, in furmans for CMD_ROTATE
+static int dying;           // 0 means not dying, 1-64 animation counter
+static long score;
+static long hiscore;
+static byte lives;
+static byte done[5];
+static byte homes[5] = { 24, 72, 120, 168, 216 };
+static int time;
+
+void frog_start()
+{
+  frogx = 120;
+  frogy = 232;
+  leaping = 0;
+  frogdir = 0;
+  frogface = 0x0000;
+  dying = 0;
+  time = 120 << 7;
+}
+
+void level_start()
+{
+  for (byte i = 0; i < 5; i++)
+    done[i] = 0;
+}
+
+void game_start()
+{
+  lives = 4;
+  score = 0;
+}
+
+void game_setup()
+{
+  Control.begin();
+  game_start();
+  level_start();
+  frog_start();
+}
+
+
+static void sprite(byte x, byte y, byte anim, uint16_t rot = 0xffff)
+{
+  x -= 16;
+  y -= 8;
+  if (rot != 0xffff) {
+    GD.cmd_loadidentity();
+    GD.cmd_translate(F16(8),F16(8));
+    GD.cmd_rotate(rot);
+    GD.cmd_translate(F16(-8),F16(-8));
+    GD.cmd_setmatrix();
+  }
+  if (x > 224) {
+    GD.Cell(anim);
+    GD.Vertex2f(16 * (x - 256), 16 * y);
+  } else {
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, anim);
+  }
+}
+
+static void turtle3(byte x, byte y)
+{
+  byte anim = 50 + ((t / 32) % 3);
+  sprite(x, y, anim);
+  sprite(x + 16, y, anim);
+  sprite(x + 32, y, anim);
+}
+
+static void turtle2(byte x, byte y)
+{
+  byte anim = 50 + ((t / 32) % 3);
+  sprite(x, y, anim);
+  sprite(x + 16, y, anim);
+}
+
+void log1(byte x, byte y)
+{
+  sprite(x, y,      86);
+  sprite(x + 16, y, 87);
+  sprite(x + 32, y, 88);
+}
+
+void log(byte length, byte x, byte y)
+{
+  sprite(x, y,      86);
+  while (length--) {
+    x += 16;
+    sprite(x, y, 87);
+  }
+  sprite(x + 16, y, 88);
+}
+
+static int riverat(byte y, uint16_t tt)
+{
+  switch (y) {
+  case 120: return -tt;
+  case 104: return tt;
+  case 88:  return 5 * tt / 4;
+  case 72:  return -tt / 2;
+  case 56:  return tt / 2;
+  }
+}
+
+static void squarewave(uint16_t freq, byte amp)
+{
+  GD.wr(REG_VOL_SOUND, amp);
+  GD.wr16(REG_SOUND, (freq << 8) | 0x01);
+  GD.wr(REG_PLAY, 1);
+}
+
+static void sound()
+{
+  byte note;
+
+  if (dying) { 
+    note = 84 - (dying / 2);
+    squarewave(note, 100);
+  } else if (leaping) {
+    if (leaping & 1)
+      note = 60 + leaping;
+    else
+      note = 72 + leaping;
+    squarewave(note, 100);
+  } else {
+    squarewave(0, 0);  // silence
+  }
+}
+
+static void rotate_around(int x, int y, int a)
+{
+    GD.cmd_loadidentity();
+    GD.cmd_translate(F16(x),F16(y));
+    GD.cmd_rotate(a);
+    GD.cmd_translate(F16(-x),F16(-y));
+    GD.cmd_setmatrix();
+}
+
+void game_over()
+{
+  GD.wr(REG_VOL_SOUND, 0);
+  for (byte i = 0; i < 60; i++) {
+    GD.Clear();
+
+    // Draw "F R O G G E R" using the sprites 90-94
+
+    int x = 160, y = 50, space = 24;
+    GD.Begin(BITMAPS);
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, 90); x += space;   // F
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, 91); x += space;   // R
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, 92); x += space;   // O
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, 93); x += space;   // G
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, 93); x += space;   // G
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, 94); x += space;   // E
+    GD.Vertex2ii(x, y, SPRITES_HANDLE, 91); x += space;   // R
+
+    GD.cmd_text(240, 136, FONT_HANDLE, OPT_CENTER, "GAME OVER");
+    if (i == 59)
+      GD.cmd_text(240, 200, FONT_HANDLE, OPT_CENTER, "PRESS TO PLAY");
+    GD.swap();
+  }
+  while (GD.inputs.x == -32768)
+    GD.get_inputs();
+  while (GD.inputs.x != -32768)
+    GD.get_inputs();
+}
+
+void loop()
+{
+  static uint32_t counter;
+  static int prevt;
+
+  GD.Clear();
+  GD.Tag(1);
+  GD.BitmapHandle(SPRITES_HANDLE);
+  GD.SaveContext();
+  GD.ScissorSize(224, 256);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0, BACKGROUND_HANDLE, 0);   // Background bitmap
+
+  GD.wr(REG_TAG_X, frogx - 8);
+  GD.wr(REG_TAG_Y, frogy);
+
+  GD.Tag(2);
+  GD.AlphaFunc(GREATER, 0); // on road, don't tag transparent pixels
+
+  // Completed homes
+  for (byte i = 0; i < 5; i++) {
+    if (done[i])
+      sprite(homes[i], 40, 63);
+  }
+
+  // Yellow cars
+  sprite(-t,       216, 3);
+  sprite(-t + 128, 216, 3);
+
+  // Dozers
+  sprite(t, 200, 4);
+  sprite(t + 50, 200, 4);
+  sprite(t + 150, 200, 4);
+
+  // Purple cars
+  sprite(-t,       184, 7);
+  sprite(-t + 75,  184, 7);
+  sprite(-t + 150, 184, 7);
+
+  // Green and white racecars
+  sprite(2 * t,    168, 8);
+
+  // Trucks
+  sprite(-t/2,       152, 5);
+  sprite(-t/2 + 16,  152, 6);
+  sprite(-t/2 + 100, 152, 5);
+  sprite(-t/2 + 116, 152, 6);
+
+  GD.AlphaFunc(GREATER, 0); // on river, tag transparent pixels
+
+  // Turtles
+  for (int i = 0; i < 256; i += 64)
+    turtle3(riverat(120, t) + i, 120);
+
+  // Short logs
+  for (int i = 0; i < 240; i += 80)
+    log(1, riverat(104, t) + i, 104);
+
+  // Long logs
+  for (int i = 0; i < 256; i += 128)
+    log(5, riverat(88, t) + i, 88);
+
+  // Turtles again, but slower
+  for (int i = 0; i < 250; i += 50)
+    turtle2(riverat(72, t) + i, 72);
+
+  // Top logs
+  for (int i = 0; i < 210; i += 70)
+    log(2, riverat(56, t) + i, 56);
+
+  // The frog himself, or his death animation
+
+  GD.TagMask(0);
+
+  if (!dying) {
+    static byte frog_anim[] = {2, 1, 0, 0, 2};
+    sprite(frogx, frogy, frog_anim[leaping / 2], frogface);
+  } else {
+    static byte die_anim[] = {31, 32, 33, 30};
+    sprite(frogx, frogy, die_anim[dying / 16], frogface);
+  }
+
+  prevt = t;
+  t++;
+  time = max(0, time - 1);
+  if ((time == 0) && (dying == 0))
+    dying = 1;
+ 
+  // Draw 'time remaining' by clearing a black rectangle
+  {
+    byte tw = 120 - (time >> 7);
+    byte tx = 72;
+    GD.SaveContext();
+    GD.ScissorXY(tx, 248);
+    GD.ScissorSize(tw, 8);
+    GD.Clear();
+    GD.RestoreContext();
+  }
+
+  GD.TagMask(1);
+
+  // player control.  If button pressed, start the 'leaping' counter
+  byte con = Control.read();
+  if (!dying && (leaping == 0) && con) {
+    frogdir = con;
+    leaping = 1;
+    score += 10;
+  } else if (leaping > 0) {
+    if (leaping <= 8) {
+      if (frogdir == CONTROL_LEFT) {
+        frogx -= 2;
+        frogface = 0xc000;
+      } if (frogdir == CONTROL_RIGHT) {
+        frogx += 2;
+        frogface = 0x4000;
+      } if (frogdir == CONTROL_UP) {
+        frogy -= 2;
+        frogface = 0x0000;
+      } if (frogdir == CONTROL_DOWN) {
+        frogy += 2;
+        frogface = 0x8000;
+      }
+      leaping++;
+    } else {
+      leaping = 0;
+    }
+  }
+
+  GD.RestoreContext();
+  GD.SaveContext();
+  GD.Begin(BITMAPS);
+
+#define PADX(x) (480 + (x - 3) * 48)
+#define PADY(y) (272 + (y - 3) * 48)
+
+  GD.Tag(CONTROL_RIGHT);
+  GD.Vertex2ii(PADX(2), PADY(1), ARROW_HANDLE, 0);
+  rotate_around(24, 24, 3 * 0x4000);
+
+  GD.Tag(CONTROL_UP);
+  GD.Vertex2ii(PADX(1), PADY(0), ARROW_HANDLE, 0);
+  rotate_around(24, 24, 2 * 0x4000);
+
+  GD.Tag(CONTROL_LEFT);
+  GD.Vertex2ii(PADX(0), PADY(1), ARROW_HANDLE, 0);
+  rotate_around(24, 24, 1 * 0x4000);
+
+  GD.Tag(CONTROL_DOWN);
+  GD.Vertex2ii(PADX(1), PADY(2), ARROW_HANDLE, 0);
+  GD.RestoreContext();
+
+  GD.ColorRGB(255, 85, 0);
+  draw_score(3, 1, score);
+  draw_score(11, 1, hiscore);
+
+  GD.ColorRGB(255, 255, 255);
+  for (byte i = 0; i < lives; i++)
+    GD.Vertex2ii(8 * i, 30 * 8, LIFE_HANDLE, 0);
+
+  // for (byte i = 0; i < 16; i++)
+  //  GD.wr(atxy(i, 30), (i < lives) ? BG_LIFE : BG_BLACK);
+
+  GD.swap();
+
+  GD.get_inputs();
+  byte tag = GD.rd(REG_TAG);
+  byte touching = (tag == 2);
+
+  if (dying) {
+    if (++dying == 64) {
+      if (--lives == 0 || time == 0) {
+        game_over();
+        game_start();
+        level_start();
+      }
+      frog_start();
+    }
+  }
+  else if (frogx < 8 || frogx > 224) {
+    dying = 1;
+  }
+  else if (frogy >= 136) {    // road section
+    // if touching something, frog dies
+    if (tag == 2)
+      dying = 1;
+  }
+  else if (frogy > 40) {      // river section
+    if (!leaping) {
+      // if touching something, frog is safe
+      if (tag != 1) {
+        // move frog according to lane speed
+        int oldx = riverat(frogy, prevt);
+        int newx = riverat(frogy, t);
+        int river_velocity = newx - oldx;
+        frogx += river_velocity;
+      } else {
+        dying = 1;
+      }
+    }
+  }
+  else 
+  {                      // riverbank section
+    if (!leaping) {
+      byte landed = 0;
+      for (byte i = 0; i < 5; i ++) {
+        if (!done[i] && abs(homes[i] - frogx) < 4) {
+          done[i] = 1;
+          landed = 1;
+          score += 10;
+        }
+      }
+      if (landed) {
+        if (done[0] && done[1] && done[2] && done[3] && done[4])
+          level_start();
+        frog_start();
+      } else // if frog did not land in a home, die!
+        dying = 1;
+    }
+  }
+  sound();
+  hiscore = max(score, hiscore);
+}
+
+void setup()
+{
+  Serial.begin(1000000);    // JCB
+  GD.begin();
+  LOAD_ASSETS();
+  game_setup();
+}

File diff suppressed because it is too large
+ 6 - 0
glow.ino


+ 17 - 0
helloworld.ino

@@ -0,0 +1,17 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin(0);
+}
+
+void loop()
+{
+  GD.ClearColorRGB(0x103000);
+  GD.Clear();
+  GD.cmd_text(240, 136, 31, OPT_CENTER, "Hello world");
+  GD.swap();
+} //' }A

+ 1727 - 0
ino-cobra.ino/.build/environment.pickle

@@ -0,0 +1,1727 @@
+(lp0
+(S'cppflags'
+p1
+ccopy_reg
+_reconstructor
+p2
+(cino.utils
+SpaceList
+p3
+c__builtin__
+list
+p4
+(lp5
+S'-mmcu=atmega328p'
+p6
+aS'-DF_CPU=8000000L'
+p7
+aS'-DARDUINO=100'
+p8
+aS'-I/usr/share/arduino/hardware/arduino/cores/arduino'
+p9
+aS'-ffunction-sections'
+p10
+aS'-fdata-sections'
+p11
+aS'-g'
+p12
+aS'-Os'
+p13
+aS'-w'
+p14
+aS'-I/usr/share/arduino/hardware/arduino/variants/standard'
+p15
+atp16
+Rp17
+tp18
+a(S'version.txt'
+p19
+S'/usr/share/arduino/lib/version.txt'
+p20
+tp21
+a(S'used_libs'
+p22
+(lp23
+tp24
+a(S'cc'
+p25
+S'/usr/bin/avr-gcc'
+p26
+tp27
+a(S'make'
+p28
+S'/usr/bin/make'
+p29
+tp30
+a(S'build_dir'
+p31
+S'.build/pro328'
+p32
+tp33
+a(S'arduino_core_dir'
+p34
+S'/usr/share/arduino/hardware/arduino/cores/arduino'
+p35
+tp36
+a(S'boards.txt'
+p37
+S'/usr/share/arduino/hardware/arduino/boards.txt'
+p38
+tp39
+a(S'cxxflags'
+p40
+g2
+(g3
+g4
+(lp41
+S'-fno-exceptions'
+p42
+atp43
+Rp44
+tp45
+a(S'arduino_variants_dir'
+p46
+S'/usr/share/arduino/hardware/arduino/variants'
+p47
+tp48
+a(S'deps'
+p49
+g2
+(g3
+g4
+(lp50
+S'.build/pro328/src/dependencies.d'
+p51
+atp52
+Rp53
+tp54
+a(S'ar'
+p55
+S'/usr/bin/avr-ar'
+p56
+tp57
+a(S'names'
+p58
+(dp59
+S'cpp'
+p60
+S'%s.cpp'
+p61
+sS'obj'
+p62
+S'%s.o'
+p63
+sg49
+S'%s.d'
+p64
+sS'lib'
+p65
+S'lib%s.a'
+p66
+stp67
+a(S'cflags'
+p68
+g2
+(g3
+g4
+(lp69
+tp70
+Rp71
+tp72
+a(S'ldflags'
+p73
+g2
+(g3
+g4
+(lp74
+g6
+aS'-Wl,-Os'
+p75
+aS'-Wl,--gc-sections'
+p76
+atp77
+Rp78
+tp79
+a(S'arduino_libraries_dir'
+p80
+S'/usr/share/arduino/libraries'
+p81
+tp82
+a(S'arduino_lib_version'
+p83
+g2
+(cino.environment
+Version
+p84
+c__builtin__
+tuple
+p85
+(I1
+I0
+I0
+tp86
+tp87
+Rp88
+tp89
+a(S'objcopy'
+p90
+S'/usr/bin/avr-objcopy'
+p91
+tp92
+a(S'board_models'
+p93
+cino.environment
+BoardModels
+p94
+((lp95
+(lp96
+S'uno'
+p97
+a(dp98
+S'build'
+p99
+(dp100
+S'core'
+p101
+S'arduino'
+p102
+sS'mcu'
+p103
+S'atmega328p'
+p104
+sS'f_cpu'
+p105
+S'16000000L'
+p106
+sS'variant'
+p107
+S'standard'
+p108
+ssS'bootloader'
+p109
+(dp110
+S'extended_fuses'
+p111
+S'0x05'
+p112
+sS'high_fuses'
+p113
+S'0xde'
+p114
+sS'low_fuses'
+p115
+S'0xff'
+p116
+sS'lock_bits'
+p117
+S'0x0F'
+p118
+sS'file'
+p119
+S'optiboot_atmega328.hex'
+p120
+sS'path'
+p121
+S'optiboot'
+p122
+sS'unlock_bits'
+p123
+S'0x3F'
+p124
+ssS'name'
+p125
+S'Arduino Uno'
+p126
+sS'upload'
+p127
+(dp128
+S'speed'
+p129
+S'115200'
+p130
+sS'maximum_size'
+p131
+S'32256'
+p132
+sS'protocol'
+p133
+S'arduino'
+p134
+ssaa(lp135
+S'atmega328'
+p136
+a(dp137
+S'build'
+p138
+(dp139
+S'core'
+p140
+S'arduino'
+p141
+sS'mcu'
+p142
+S'atmega328p'
+p143
+sS'f_cpu'
+p144
+S'16000000L'
+p145
+sS'variant'
+p146
+S'standard'
+p147
+ssS'bootloader'
+p148
+(dp149
+S'extended_fuses'
+p150
+S'0x05'
+p151
+sS'high_fuses'
+p152
+S'0xDA'
+p153
+sS'low_fuses'
+p154
+S'0xFF'
+p155
+sS'lock_bits'
+p156
+S'0x0F'
+p157
+sS'file'
+p158
+S'ATmegaBOOT_168_atmega328.hex'
+p159
+sS'path'
+p160
+S'atmega'
+p161
+sS'unlock_bits'
+p162
+S'0x3F'
+p163
+ssS'name'
+p164
+S'Arduino Duemilanove w/ ATmega328'
+p165
+sS'upload'
+p166
+(dp167
+S'speed'
+p168
+S'57600'
+p169
+sS'maximum_size'
+p170
+S'30720'
+p171
+sS'protocol'
+p172
+S'arduino'
+p173
+ssaa(lp174
+S'diecimila'
+p175
+a(dp176
+S'build'
+p177
+(dp178
+S'core'
+p179
+S'arduino'
+p180
+sS'mcu'
+p181
+S'atmega168'
+p182
+sS'f_cpu'
+p183
+S'16000000L'
+p184
+sS'variant'
+p185
+S'standard'
+p186
+ssS'bootloader'
+p187
+(dp188
+S'extended_fuses'
+p189
+S'0x00'
+p190
+sS'high_fuses'
+p191
+S'0xdd'
+p192
+sS'low_fuses'
+p193
+S'0xff'
+p194
+sS'lock_bits'
+p195
+S'0x0F'
+p196
+sS'file'
+p197
+S'ATmegaBOOT_168_diecimila.hex'
+p198
+sS'path'
+p199
+S'atmega'
+p200
+sS'unlock_bits'
+p201
+S'0x3F'
+p202
+ssS'name'
+p203
+S'Arduino Diecimila or Duemilanove w/ ATmega168'
+p204
+sS'upload'
+p205
+(dp206
+S'speed'
+p207
+S'19200'
+p208
+sS'maximum_size'
+p209
+S'14336'
+p210
+sS'protocol'
+p211
+S'arduino'
+p212
+ssaa(lp213
+S'nano328'
+p214
+a(dp215
+S'build'
+p216
+(dp217
+S'core'
+p218
+S'arduino'
+p219
+sS'mcu'
+p220
+S'atmega328p'
+p221
+sS'f_cpu'
+p222
+S'16000000L'
+p223
+sS'variant'
+p224
+S'eightanaloginputs'
+p225
+ssS'bootloader'
+p226
+(dp227
+S'extended_fuses'
+p228
+S'0x05'
+p229
+sS'high_fuses'
+p230
+S'0xDA'
+p231
+sS'low_fuses'
+p232
+S'0xFF'
+p233
+sS'lock_bits'
+p234
+S'0x0F'
+p235
+sS'file'
+p236
+S'ATmegaBOOT_168_atmega328.hex'
+p237
+sS'path'
+p238
+S'atmega'
+p239
+sS'unlock_bits'
+p240
+S'0x3F'
+p241
+ssS'name'
+p242
+S'Arduino Nano w/ ATmega328'
+p243
+sS'upload'
+p244
+(dp245
+S'speed'
+p246
+S'57600'
+p247
+sS'maximum_size'
+p248
+S'30720'
+p249
+sS'protocol'
+p250
+S'arduino'
+p251
+ssaa(lp252
+S'nano'
+p253
+a(dp254
+S'build'
+p255
+(dp256
+S'core'
+p257
+S'arduino'
+p258
+sS'mcu'
+p259
+S'atmega168'
+p260
+sS'f_cpu'
+p261
+S'16000000L'
+p262
+sS'variant'
+p263
+S'eightanaloginputs'
+p264
+ssS'bootloader'
+p265
+(dp266
+S'extended_fuses'
+p267
+S'0x00'
+p268
+sS'high_fuses'
+p269
+S'0xdd'
+p270
+sS'low_fuses'
+p271
+S'0xff'
+p272
+sS'lock_bits'
+p273
+S'0x0F'
+p274
+sS'file'
+p275
+S'ATmegaBOOT_168_diecimila.hex'
+p276
+sS'path'
+p277
+S'atmega'
+p278
+sS'unlock_bits'
+p279
+S'0x3F'
+p280
+ssS'name'
+p281
+S'Arduino Nano w/ ATmega168'
+p282
+sS'upload'
+p283
+(dp284
+S'speed'
+p285
+S'19200'
+p286
+sS'maximum_size'
+p287
+S'14336'
+p288
+sS'protocol'
+p289
+S'arduino'
+p290
+ssaa(lp291
+S'mega2560'
+p292
+a(dp293
+S'build'
+p294
+(dp295
+S'core'
+p296
+S'arduino'
+p297
+sS'mcu'
+p298
+S'atmega2560'
+p299
+sS'f_cpu'
+p300
+S'16000000L'
+p301
+sS'variant'
+p302
+S'mega'
+p303
+ssS'bootloader'
+p304
+(dp305
+S'extended_fuses'
+p306
+S'0xFD'
+p307
+sS'high_fuses'
+p308
+S'0xD8'
+p309
+sS'low_fuses'
+p310
+S'0xFF'
+p311
+sS'lock_bits'
+p312
+S'0x0F'
+p313
+sS'file'
+p314
+S'stk500boot_v2_mega2560.hex'
+p315
+sS'path'
+p316
+S'stk500v2'
+p317
+sS'unlock_bits'
+p318
+S'0x3F'
+p319
+ssS'name'
+p320
+S'Arduino Mega 2560 or Mega ADK'
+p321
+sS'upload'
+p322
+(dp323
+S'speed'
+p324
+S'115200'
+p325
+sS'maximum_size'
+p326
+S'258048'
+p327
+sS'protocol'
+p328
+S'stk500v2'
+p329
+ssaa(lp330
+S'mega'
+p331
+a(dp332
+S'build'
+p333
+(dp334
+S'core'
+p335
+S'arduino'
+p336
+sS'mcu'
+p337
+S'atmega1280'
+p338
+sS'f_cpu'
+p339
+S'16000000L'
+p340
+sS'variant'
+p341
+S'mega'
+p342
+ssS'bootloader'
+p343
+(dp344
+S'extended_fuses'
+p345
+S'0xF5'
+p346
+sS'high_fuses'
+p347
+S'0xDA'
+p348
+sS'low_fuses'
+p349
+S'0xFF'
+p350
+sS'lock_bits'
+p351
+S'0x0F'
+p352
+sS'file'
+p353
+S'ATmegaBOOT_168_atmega1280.hex'
+p354
+sS'path'
+p355
+S'atmega'
+p356
+sS'unlock_bits'
+p357
+S'0x3F'
+p358
+ssS'name'
+p359
+S'Arduino Mega (ATmega1280)'
+p360
+sS'upload'
+p361
+(dp362
+S'speed'
+p363
+S'57600'
+p364
+sS'maximum_size'
+p365
+S'126976'
+p366
+sS'protocol'
+p367
+S'arduino'
+p368
+ssaa(lp369
+S'mini328'
+p370
+a(dp371
+S'build'
+p372
+(dp373
+S'core'
+p374
+S'arduino'
+p375
+sS'mcu'
+p376
+S'atmega328p'
+p377
+sS'f_cpu'
+p378
+S'16000000L'
+p379
+sS'variant'
+p380
+S'eightanaloginputs'
+p381
+ssS'bootloader'
+p382
+(dp383
+S'extended_fuses'
+p384
+S'0x05'
+p385
+sS'high_fuses'
+p386
+S'0xd8'
+p387
+sS'low_fuses'
+p388
+S'0xff'
+p389
+sS'lock_bits'
+p390
+S'0x0F'
+p391
+sS'file'
+p392
+S'optiboot_atmega328-Mini.hex'
+p393
+sS'path'
+p394
+S'optiboot'
+p395
+sS'unlock_bits'
+p396
+S'0x3F'
+p397
+ssS'name'
+p398
+S'Arduino Mini w/ ATmega328'
+p399
+sS'upload'
+p400
+(dp401
+S'speed'
+p402
+S'115200'
+p403
+sS'maximum_size'
+p404
+S'28672'
+p405
+sS'protocol'
+p406
+S'stk500'
+p407
+ssaa(lp408
+S'mini'
+p409
+a(dp410
+S'build'
+p411
+(dp412
+S'core'
+p413
+S'arduino'
+p414
+sS'mcu'
+p415
+S'atmega168'
+p416
+sS'f_cpu'
+p417
+S'16000000L'
+p418
+sS'variant'
+p419
+S'eightanaloginputs'
+p420
+ssS'bootloader'
+p421
+(dp422
+S'extended_fuses'
+p423
+S'0x00'
+p424
+sS'high_fuses'
+p425
+S'0xdd'
+p426
+sS'low_fuses'
+p427
+S'0xff'
+p428
+sS'lock_bits'
+p429
+S'0x0F'
+p430
+sS'file'
+p431
+S'ATmegaBOOT_168_ng.hex'
+p432
+sS'path'
+p433
+S'atmega'
+p434
+sS'unlock_bits'
+p435
+S'0x3F'
+p436
+ssS'name'
+p437
+S'Arduino Mini w/ ATmega168'
+p438
+sS'upload'
+p439
+(dp440
+S'speed'
+p441
+S'19200'
+p442
+sS'maximum_size'
+p443
+S'14336'
+p444
+sS'protocol'
+p445
+S'arduino'
+p446
+ssaa(lp447
+S'ethernet'
+p448
+a(dp449
+S'build'
+p450
+(dp451
+S'f_cpu'
+p452
+S'16000000L'
+p453
+sS'mcu'
+p454
+S'atmega328p'
+p455
+sS'variant'
+p456
+S'standard'
+p457
+sS'core'
+p458
+S'arduino'
+p459
+ssS'bootloader'
+p460
+(dp461
+S'extended_fuses'
+p462
+S'0x05'
+p463
+sS'high_fuses'
+p464
+S'0xde'
+p465
+sS'low_fuses'
+p466
+S'0xff'
+p467
+sS'lock_bits'
+p468
+S'0x0F'
+p469
+sS'file'
+p470
+S'optiboot_atmega328.hex'
+p471
+sS'path'
+p472
+S'optiboot'
+p473
+sS'unlock_bits'
+p474
+S'0x3F'
+p475
+ssS'name'
+p476
+S'Arduino Ethernet'
+p477
+sS'upload'
+p478
+(dp479
+S'speed'
+p480
+S'115200'
+p481
+sS'maximum_size'
+p482
+S'32256'
+p483
+sS'protocol'
+p484
+S'arduino'
+p485
+ssaa(lp486
+S'fio'
+p487
+a(dp488
+S'build'
+p489
+(dp490
+S'core'
+p491
+S'arduino'
+p492
+sS'mcu'
+p493
+S'atmega328p'
+p494
+sS'f_cpu'
+p495
+S'8000000L'
+p496
+sS'variant'
+p497
+S'eightanaloginputs'
+p498
+ssS'bootloader'
+p499
+(dp500
+S'extended_fuses'
+p501
+S'0x05'
+p502
+sS'high_fuses'
+p503
+S'0xDA'
+p504
+sS'low_fuses'
+p505
+S'0xFF'
+p506
+sS'lock_bits'
+p507
+S'0x0F'
+p508
+sS'file'
+p509
+S'ATmegaBOOT_168_atmega328_pro_8MHz.hex'
+p510
+sS'path'
+p511
+S'arduino:atmega'
+p512
+sS'unlock_bits'
+p513
+S'0x3F'
+p514
+ssS'name'
+p515
+S'Arduino Fio'
+p516
+sS'upload'
+p517
+(dp518
+S'speed'
+p519
+S'57600'
+p520
+sS'maximum_size'
+p521
+S'30720'
+p522
+sS'protocol'
+p523
+S'arduino'
+p524
+ssaa(lp525
+S'bt328'
+p526
+a(dp527
+S'build'
+p528
+(dp529
+S'core'
+p530
+S'arduino'
+p531
+sS'mcu'
+p532
+S'atmega328p'
+p533
+sS'f_cpu'
+p534
+S'16000000L'
+p535
+sS'variant'
+p536
+S'eightanaloginputs'
+p537
+ssS'bootloader'
+p538
+(dp539
+S'extended_fuses'
+p540
+S'0x05'
+p541
+sS'high_fuses'
+p542
+S'0xd8'
+p543
+sS'low_fuses'
+p544
+S'0xff'
+p545
+sS'lock_bits'
+p546
+S'0x0F'
+p547
+sS'file'
+p548
+S'ATmegaBOOT_168_atmega328_bt.hex'
+p549
+sS'path'
+p550
+S'bt'
+p551
+sS'unlock_bits'
+p552
+S'0x3F'
+p553
+ssS'name'
+p554
+S'Arduino BT w/ ATmega328'
+p555
+sS'upload'
+p556
+(dp557
+S'speed'
+p558
+S'19200'
+p559
+sS'maximum_size'
+p560
+S'28672'
+p561
+sS'protocol'
+p562
+S'arduino'
+p563
+sS'disable_flushing'
+p564
+S'true'
+p565
+ssaa(lp566
+S'bt'
+p567
+a(dp568
+S'build'
+p569
+(dp570
+S'core'
+p571
+S'arduino'
+p572
+sS'mcu'
+p573
+S'atmega168'
+p574
+sS'f_cpu'
+p575
+S'16000000L'
+p576
+sS'variant'
+p577
+S'eightanaloginputs'
+p578
+ssS'bootloader'
+p579
+(dp580
+S'extended_fuses'
+p581
+S'0x00'
+p582
+sS'high_fuses'
+p583
+S'0xdd'
+p584
+sS'low_fuses'
+p585
+S'0xff'
+p586
+sS'lock_bits'
+p587
+S'0x0F'
+p588
+sS'file'
+p589
+S'ATmegaBOOT_168.hex'
+p590
+sS'path'
+p591
+S'bt'
+p592
+sS'unlock_bits'
+p593
+S'0x3F'
+p594
+ssS'name'
+p595
+S'Arduino BT w/ ATmega168'
+p596
+sS'upload'
+p597
+(dp598
+S'speed'
+p599
+S'19200'
+p600
+sS'maximum_size'
+p601
+S'14336'
+p602
+sS'protocol'
+p603
+S'arduino'
+p604
+sS'disable_flushing'
+p605
+S'true'
+p606
+ssaa(lp607
+S'lilypad328'
+p608
+a(dp609
+S'build'
+p610
+(dp611
+S'core'
+p612
+S'arduino'
+p613
+sS'mcu'
+p614
+S'atmega328p'
+p615
+sS'f_cpu'
+p616
+S'8000000L'
+p617
+sS'variant'
+p618
+S'standard'
+p619
+ssS'bootloader'
+p620
+(dp621
+S'extended_fuses'
+p622
+S'0x05'
+p623
+sS'high_fuses'
+p624
+S'0xDA'
+p625
+sS'low_fuses'
+p626
+S'0xFF'
+p627
+sS'lock_bits'
+p628
+S'0x0F'
+p629
+sS'file'
+p630
+S'ATmegaBOOT_168_atmega328_pro_8MHz.hex'
+p631
+sS'path'
+p632
+S'atmega'
+p633
+sS'unlock_bits'
+p634
+S'0x3F'
+p635
+ssS'name'
+p636
+S'LilyPad Arduino w/ ATmega328'
+p637
+sS'upload'
+p638
+(dp639
+S'speed'
+p640
+S'57600'
+p641
+sS'maximum_size'
+p642
+S'30720'
+p643
+sS'protocol'
+p644
+S'arduino'
+p645
+ssaa(lp646
+S'lilypad'
+p647
+a(dp648
+S'build'
+p649
+(dp650
+S'core'
+p651
+S'arduino'
+p652
+sS'mcu'
+p653
+S'atmega168'
+p654
+sS'f_cpu'
+p655
+S'8000000L'
+p656
+sS'variant'
+p657
+S'standard'
+p658
+ssS'bootloader'
+p659
+(dp660
+S'extended_fuses'
+p661
+S'0x00'
+p662
+sS'high_fuses'
+p663
+S'0xdd'
+p664
+sS'low_fuses'
+p665
+S'0xe2'
+p666
+sS'lock_bits'
+p667
+S'0x0F'
+p668
+sS'file'
+p669
+S'LilyPadBOOT_168.hex'
+p670
+sS'path'
+p671
+S'lilypad'
+p672
+sS'unlock_bits'
+p673
+S'0x3F'
+p674
+ssS'name'
+p675
+S'LilyPad Arduino w/ ATmega168'
+p676
+sS'upload'
+p677
+(dp678
+S'speed'
+p679
+S'19200'
+p680
+sS'maximum_size'
+p681
+S'14336'
+p682
+sS'protocol'
+p683
+S'arduino'
+p684
+ssaa(lp685
+S'pro5v328'
+p686
+a(dp687
+S'build'
+p688
+(dp689
+S'core'
+p690
+S'arduino'
+p691
+sS'mcu'
+p692
+S'atmega328p'
+p693
+sS'f_cpu'
+p694
+S'16000000L'
+p695
+sS'variant'
+p696
+S'standard'
+p697
+ssS'bootloader'
+p698
+(dp699
+S'extended_fuses'
+p700
+S'0x05'
+p701
+sS'high_fuses'
+p702
+S'0xDA'
+p703
+sS'low_fuses'
+p704
+S'0xFF'
+p705
+sS'lock_bits'
+p706
+S'0x0F'
+p707
+sS'file'
+p708
+S'ATmegaBOOT_168_atmega328.hex'
+p709
+sS'path'
+p710
+S'atmega'
+p711
+sS'unlock_bits'
+p712
+S'0x3F'
+p713
+ssS'name'
+p714
+S'Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328'
+p715
+sS'upload'
+p716
+(dp717
+S'speed'
+p718
+S'57600'
+p719
+sS'maximum_size'
+p720
+S'30720'
+p721
+sS'protocol'
+p722
+S'arduino'
+p723
+ssaa(lp724
+S'pro5v'
+p725
+a(dp726
+S'build'
+p727
+(dp728
+S'core'
+p729
+S'arduino'
+p730
+sS'mcu'
+p731
+S'atmega168'
+p732
+sS'f_cpu'
+p733
+S'16000000L'
+p734
+sS'variant'
+p735
+S'standard'
+p736
+ssS'bootloader'
+p737
+(dp738
+S'extended_fuses'
+p739
+S'0x00'
+p740
+sS'high_fuses'
+p741
+S'0xdd'
+p742
+sS'low_fuses'
+p743
+S'0xff'
+p744
+sS'lock_bits'
+p745
+S'0x0F'
+p746
+sS'file'
+p747
+S'ATmegaBOOT_168_diecimila.hex'
+p748
+sS'path'
+p749
+S'atmega'
+p750
+sS'unlock_bits'
+p751
+S'0x3F'
+p752
+ssS'name'
+p753
+S'Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168'
+p754
+sS'upload'
+p755
+(dp756
+S'speed'
+p757
+S'19200'
+p758
+sS'maximum_size'
+p759
+S'14336'
+p760
+sS'protocol'
+p761
+S'arduino'
+p762
+ssaa(lp763
+S'pro328'
+p764
+a(dp765
+S'build'
+p766
+(dp767
+S'core'
+p768
+S'arduino'
+p769
+sS'mcu'
+p770
+S'atmega328p'
+p771
+sS'f_cpu'
+p772
+S'8000000L'
+p773
+sS'variant'
+p774
+S'standard'
+p775
+ssS'bootloader'
+p776
+(dp777
+S'extended_fuses'
+p778
+S'0x05'
+p779
+sS'high_fuses'
+p780
+S'0xDA'
+p781
+sS'low_fuses'
+p782
+S'0xFF'
+p783
+sS'lock_bits'
+p784
+S'0x0F'
+p785
+sS'file'
+p786
+S'ATmegaBOOT_168_atmega328_pro_8MHz.hex'
+p787
+sS'path'
+p788
+S'atmega'
+p789
+sS'unlock_bits'
+p790
+S'0x3F'
+p791
+ssS'name'
+p792
+S'Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328'
+p793
+sS'upload'
+p794
+(dp795
+S'speed'
+p796
+S'57600'
+p797
+sS'maximum_size'
+p798
+S'30720'
+p799
+sS'protocol'
+p800
+S'arduino'
+p801
+ssaa(lp802
+S'pro'
+p803
+a(dp804
+S'build'
+p805
+(dp806
+S'core'
+p807
+S'arduino'
+p808
+sS'mcu'
+p809
+S'atmega168'
+p810
+sS'f_cpu'
+p811
+S'8000000L'
+p812
+sS'variant'
+p813
+S'standard'
+p814
+ssS'bootloader'
+p815
+(dp816
+S'extended_fuses'
+p817
+S'0x00'
+p818
+sS'high_fuses'
+p819
+S'0xdd'
+p820
+sS'low_fuses'
+p821
+S'0xc6'
+p822
+sS'lock_bits'
+p823
+S'0x0F'
+p824
+sS'file'
+p825
+S'ATmegaBOOT_168_pro_8MHz.hex'
+p826
+sS'path'
+p827
+S'atmega'
+p828
+sS'unlock_bits'
+p829
+S'0x3F'
+p830
+ssS'name'
+p831
+S'Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168'
+p832
+sS'upload'
+p833
+(dp834
+S'speed'
+p835
+S'19200'
+p836
+sS'maximum_size'
+p837
+S'14336'
+p838
+sS'protocol'
+p839
+S'arduino'
+p840
+ssaa(lp841
+S'atmega168'
+p842
+a(dp843
+S'build'
+p844
+(dp845
+S'core'
+p846
+S'arduino'
+p847
+sS'mcu'
+p848
+S'atmega168'
+p849
+sS'f_cpu'
+p850
+S'16000000L'
+p851
+sS'variant'
+p852
+S'standard'
+p853
+ssS'bootloader'
+p854
+(dp855
+S'extended_fuses'
+p856
+S'0x00'
+p857
+sS'high_fuses'
+p858
+S'0xdd'
+p859
+sS'low_fuses'
+p860
+S'0xff'
+p861
+sS'lock_bits'
+p862
+S'0x0F'
+p863
+sS'file'
+p864
+S'ATmegaBOOT_168_ng.hex'
+p865
+sS'path'
+p866
+S'atmega'
+p867
+sS'unlock_bits'
+p868
+S'0x3F'
+p869
+ssS'name'
+p870
+S'Arduino NG or older w/ ATmega168'
+p871
+sS'upload'
+p872
+(dp873
+S'speed'
+p874
+S'19200'
+p875
+sS'maximum_size'
+p876
+S'14336'
+p877
+sS'protocol'
+p878
+S'arduino'
+p879
+ssaa(lp880
+S'atmega8'
+p881
+a(dp882
+S'build'
+p883
+(dp884
+S'core'
+p885
+S'arduino'
+p886
+sS'mcu'
+p887
+S'atmega8'
+p888
+sS'f_cpu'
+p889
+S'16000000L'
+p890
+sS'variant'
+p891
+S'standard'
+p892
+ssS'bootloader'
+p893
+(dp894
+S'high_fuses'
+p895
+S'0xca'
+p896
+sS'low_fuses'
+p897
+S'0xdf'
+p898
+sS'lock_bits'
+p899
+S'0x0F'
+p900
+sS'file'
+p901
+S'ATmegaBOOT.hex'
+p902
+sS'path'
+p903
+S'atmega8'
+p904
+sS'unlock_bits'
+p905
+S'0x3F'
+p906
+ssS'name'
+p907
+S'Arduino NG or older w/ ATmega8'
+p908
+sS'upload'
+p909
+(dp910
+S'speed'
+p911
+S'19200'
+p912
+sS'maximum_size'
+p913
+S'7168'
+p914
+sS'protocol'
+p915
+S'arduino'
+p916
+ssaatp917
+Rp918
+(dp919
+S'default'
+p920
+S'uno'
+p921
+sbtp922
+a(S'cxx'
+p923
+S'/usr/bin/avr-g++'
+p924
+tp925
+a.

+ 47 - 0
ino-cobra.ino/.build/pro328/Makefile

@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.build/pro328/firmware.elf : 
+	@echo Linking firmware.elf
+	@/usr/bin/avr-gcc -mmcu=atmega328p -Wl,-Os -Wl,--gc-sections -o $@ $^ -lm
+
+
+.build/pro328/firmware.hex : .build/pro328/firmware.elf
+	@echo Converting to firmware.hex
+	@/usr/bin/avr-objcopy -O ihex -R .eeprom $^ $@
+
+include .build/pro328/src/dependencies.d
+
+all : .build/pro328/firmware.hex
+	@true
+

+ 22 - 0
ino-cobra.ino/.build/pro328/Makefile.deps

@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+	
+
+
+
+
+
+.build/pro328/src/dependencies.d : 
+	@echo Scanning dependencies of src
+	@mkdir -p .build/pro328/src
+	@touch $@;
+
+all : .build/pro328/src/dependencies.d
+	@true
+

+ 9 - 0
ino-cobra.ino/.build/pro328/Makefile.sketch

@@ -0,0 +1,9 @@
+
+
+
+
+
+
+all : 
+	@true
+

+ 0 - 0
ino-cobra.ino/.build/pro328/src/dependencies.d


+ 1 - 0
ino-cobra.ino/lib/Gameduino2

@@ -0,0 +1 @@
+/home/james/Arduino/libraries/Gameduino2

+ 1196 - 0
invaders.ino

@@ -0,0 +1,1196 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#define UART_SPEED 1000000
+
+#include "invaders_assets.h"
+
+/*---------------------------------------------
+  Trivia: There is NO random number generator
+  anywhere in Space Invaders....
+---------------------------------------------*/
+
+/*---------------------------------------------
+  Global definitions
+---------------------------------------------*/
+enum graphic_id {
+  // Invader sprites - Top, Middle, Bottom, two animation frames each...
+  GR_INVADER_T,
+  GR_INVADER_M,
+  GR_INVADER_B,
+  GR_BOMB_ZIGZAG,  // Zigzag bomb
+  GR_BOMB_BARS,    // The bomb with rolling horizontal bars across it
+  GR_BOMB_DIAG,    // The bomb with diagonal bars across it
+  GR_BOMB_OTHER,   // Other bomb graphics (explosion and blank)
+  // The player (with bullet)
+  GR_PLAYER,
+  GR_BULLET,       // nb. Has a '0' in frame 2 (for the saucer...)
+  // The saucer at the top
+  GR_SAUCER,
+  GR_SAUCER_SCORE,
+  // Shields
+  GR_SHIELD1,
+  GR_SHIELD2,
+  GR_SHIELD3,
+  GR_SHIELD4
+};
+
+#define invaderRows 5
+#define invadersPerRow 11
+#define numInvaders (invaderRows*invadersPerRow)
+
+// Positions of things on screen
+// nb. Space Invaders screen is 256x224 pixels
+#define screenTop 8
+#define screenWidth 224
+#define screenHeight 256
+#define screenLeft ((480 - screenWidth) / 2)
+// Player
+#define playerMinLeft 18
+#define playerMaxRight 188
+#define playerYpos 216
+#define playerSpeed 1
+// Bullet
+#define bulletHeight 4
+#define bulletSpeed 4
+#define bulletTop 35
+// Invaders
+#define invaderAppearX 26
+#define invaderAppearY 64
+#define invaderXspacing 16
+#define invaderYspacing 16
+#define invaderXstep 2
+#define invaderYstep 8
+#define invaderXmin 10
+#define invaderXmax 202
+// Saucer
+#define saucerYpos 42
+#define saucerSpeed 1
+#define saucerXmin 0
+#define saucerXmax (screenWidth-16)
+#define saucerSkip 3
+#define saucerFrequency (1*60)
+// Shields
+#define numShields 4
+#define shieldXpos 32
+#define shieldYpos 192 
+#define shieldXstep 45
+// Bombs
+#define bombSpeed 1
+#define bombYmax 230
+
+/*---------------------------------------------
+  Global vars
+---------------------------------------------*/
+// This increments once per frame
+static unsigned int frameCounter;
+
+// The current wave of invaders [0..n]
+static unsigned int invaderWave;
+
+// Number of lives the player has left...
+static byte numLives;
+
+// Player's score...
+static unsigned int playerScore;
+
+// High score
+static unsigned int highScore;
+
+// Number of living space invaders
+static unsigned int remainingInvaders;
+
+// Timer for the background heartbeat sound
+static int beatCounter;
+
+/*---------------------------------------------
+  General functions
+---------------------------------------------*/
+void printScore(int8_t x, const char *m, unsigned int s, int8_t xoff)
+{
+  GD.cmd_text(screenLeft + 8 * x, screenTop, 16, 0, m);
+  GD.cmd_number(screenLeft + 8 * (x + xoff), screenTop + 16, 16, 4, s);
+}
+
+void updateScore()
+{
+  highScore = max(highScore, playerScore);
+  printScore(0, "SCORE", playerScore, 0);
+  printScore(20, "HI-SCORE", highScore, 4);
+}
+
+void drawBases()
+{
+  GD.cmd_number(screenLeft, screenTop + 240, 16, 0, numLives);
+  for (int i = 1; i < numLives; i++)
+    GD.Vertex2ii(screenLeft + 16 * i, screenTop + 240, 0, CELL_PLAYER);
+}
+
+/*---------------------------------------------
+  A generic object in the game
+---------------------------------------------*/
+enum object_status {
+  S_WAITING,
+  S_ALIVE,
+  S_DYING,
+  S_DEAD
+};
+
+struct GameObject {
+  byte sprite;     // Which sprite to use for my graphic (see "sprite_id")
+  byte status;     // What I'm doing at the moment
+  int xpos,ypos;   // Position on screen
+  byte frame;      // Animation frame
+  byte handle;     // Bitmap handle
+  // State of objects in the game
+  void initialize(object_status t=S_WAITING, int x=400, int y=0) {
+    status = t;
+    xpos = x;
+    ypos = y;
+    handle = 0;
+    frame = 0;
+  }
+  void draw() {
+    if ((status != S_WAITING) && (status != S_DEAD))
+      GD.Vertex2ii(xpos + screenLeft, ypos + screenTop, handle, frame);
+  }
+  byte collision() {
+    return 0xff;
+    // return GD.rd(0x2900+sprite);
+  }
+};
+
+/*---------------------------------------------
+ Player's bullet
+---------------------------------------------*/
+// Forward references to functions
+bool killInvader(byte spriteNumber);
+void shootShield(byte spriteNumber, int bulletX);
+void shootSaucer();
+void shootBomb(byte spriteNumber);
+void incSaucerCounter();
+
+class BulletObject : public GameObject {
+  byte timer;
+  bool visibleDeath;
+  void die(bool v) {
+    visibleDeath = v;
+    status = S_DYING;
+    timer = 12;
+  }
+public:
+  void reset() {
+    initialize();
+    timer = 0;
+  }
+  void fire(GameObject& p) {
+    if (status == S_WAITING){
+      status = S_ALIVE;
+      xpos = p.xpos;
+      ypos = p.ypos+bulletSpeed-bulletHeight;
+      // playerShootSound = true;
+    }
+  }
+  void update() {
+    switch (status) {
+      case S_ALIVE:  ypos -= bulletSpeed;
+                     if (ypos <= bulletTop) {
+                       ypos = bulletTop;
+                       die(true);
+                     }
+                     else {
+                       frame = CELL_BULLET;
+                     }
+                     break;
+      case S_DYING:  if (!--timer) {
+                       status = S_WAITING;
+                       incSaucerCounter();
+                     }
+                     else if (visibleDeath) {
+                       frame = CELL_BULLET_BLAST;
+                     }
+                     break;
+    }
+    GD.wr16(REG_TAG_X, screenLeft + xpos + 6);
+    GD.wr16(REG_TAG_Y, screenTop + ypos);
+  }
+  void setY(int y) {
+    if (status == S_DYING) {
+      ypos = y;
+    }
+  }
+  // See if the bullet hit anything
+  void collide() {
+#if 0
+    if (status == S_ALIVE) {
+      byte b = collision();
+      if (b != 0xff) {
+        if ((b >= SP_FIRST_INVADER) and (b <= SP_LAST_INVADER)) {
+          if (killInvader(b)) {
+            die(false);
+          }
+        }
+        if ((b >= SP_FIRST_SHIELD) and (b <= SP_LAST_SHIELD)) {
+          shootShield(b,xpos);
+          die(true);
+        }
+        if ((b >= SP_SAUCER1) and (b <= SP_SAUCER2)) {
+          shootSaucer();
+          die(false);
+        }
+        if ((b >= SP_BOMB1) and (b <= SP_BOMB3)) {
+          shootBomb(b);
+          die(false);
+        }
+      }
+    }
+#endif
+  }
+} bullet;
+
+/*---------------------------------------------
+ The player
+---------------------------------------------*/
+class Player : public GameObject {
+  byte timer;
+  int fake;
+public:
+  void reset() {
+    timer = 2*numInvaders;
+    initialize(S_WAITING,playerMinLeft,playerYpos);
+    frame = CELL_PLAYER;
+  }
+
+  void update() {
+    int frame = 3;
+    switch (status) {
+      case S_WAITING: xpos = playerMinLeft;
+                      ypos = playerYpos;
+                      if (!--timer) {
+                        status = S_ALIVE;
+                      }
+                      break;
+      case S_ALIVE:   /* if (joystick.left()) {
+                        xpos -= playerSpeed;
+                        if (xpos < playerMinLeft) {
+                          xpos = playerMinLeft;
+                        }
+                      }
+                      if (joystick.right()) {
+                        xpos += playerSpeed;
+                        if (xpos > playerMaxRight) {
+                          xpos = playerMaxRight;
+                        }
+                      }
+                      { byte n = Joystick::buttonA|Joystick::buttonB;
+                        if (joystick.isPressed(n) and joystick.changed(n)) {
+                          bullet.fire(*this);
+                        }
+                      }
+                      */
+
+                      {
+                        byte control_left = 0, control_right = 0, control_fire = 0;
+                        fake = (fake + 1) & 511;
+                        control_right = fake < 256;
+                        control_left  = 256 <= fake;
+                        control_fire = (random() % 70) == 0;
+
+                        if (control_left) {
+                        xpos -= playerSpeed;
+                        if (xpos < playerMinLeft) {
+                          xpos = playerMinLeft;
+                        }
+                        }
+                        if (control_right) {
+                          xpos += playerSpeed;
+                          if (xpos > playerMaxRight) {
+                            xpos = playerMaxRight;
+                          }
+                        }
+                        if (control_fire) {
+                          bullet.fire(*this);
+                        }
+                      }
+                        
+                      frame = CELL_PLAYER;
+                      break;
+      case S_DYING:   if (!--timer) {
+                        timer = 3 * remainingInvaders;
+                        status = (--numLives > 0) ? S_WAITING : S_DEAD;
+                      }
+                      else {
+                        frame = CELL_PLAYER + ((frameCounter & 4) == 0) ? 1 : 2;
+                      }
+                      break;
+    }
+  }
+  void kill() {
+    if (status == S_ALIVE) {
+      status = S_DYING;
+      timer = 50;
+      // playerDeathSound = true;
+    }
+  }
+  bool isAlive() {
+    return (status==S_ALIVE);
+  }
+  bool isDying() {
+    return (status==S_DYING);
+  }
+  bool isDead() {
+    return (status==S_DEAD);
+  }
+  void wakeUp() {
+  }
+} player;
+
+/*---------------------------------------------
+  "Shields" for the player to hide behind
+---------------------------------------------*/
+static const PROGMEM uint8_t bomb_blast[] = {
+  0x08, 0x22, 0x0d, 0x1e, 0x2e, 0x1f, 0x2e, 0x15
+};
+static const PROGMEM uint8_t bullet_blast[] = {
+  0x89, 0x22, 0x7e, 0xff, 0xff, 0x7e, 0x24, 0x91
+};
+
+class Shields {
+  struct BlastInfo {
+    byte sprite;
+    int xpos;
+    void reset() {
+      sprite = 255;
+    }
+    bool hasBlast() const {
+      return (sprite!=255);
+    }
+    void blast(byte s, int x) {
+      sprite = s;
+      xpos = x;
+    }
+  };
+  BlastInfo bulletBlast, bombBlast[3];
+  void blastShield(BlastInfo& n, bool asBullet) {
+    if (n.hasBlast()) {
+      /*
+      byte s = (n.sprite-SP_FIRST_SHIELD)>>1;
+      int8_t x = int8_t(n.xpos-(shieldXpos+(s*shieldXstep)));
+      int8_t y = zapShield(s,x,asBullet);
+      if (asBullet) {
+        bullet.setY(shieldYpos+y);
+      }
+      */
+      n.reset();
+    }
+  }
+public:
+  void reset() {
+    // remakeShields();
+    int x = shieldXpos;
+    for (int i=0; i<numShields; ++i) {
+      x += shieldXstep;
+    }
+    bulletBlast.reset();
+    for (int8_t i=0; i<3; ++i) {
+      bombBlast[i].reset();
+    }
+  }
+  void update() {
+    blastShield(bulletBlast,true);
+    for (int8_t i=0; i<3; ++i) {
+      blastShield(bombBlast[i],false);
+    }    
+  }
+  // Zap them in various ways
+  // nb. We defer the action because updating the sprites
+  // might be slow and we want to make sure all collision
+  // detection happens in the vertical blank
+  void shoot(byte s, int x) {
+    bulletBlast.blast(s,x);
+  }
+  void bomb(byte s, int x) {
+    for (int8_t i=0; i<3; ++i) {
+      BlastInfo& b = bombBlast[i];
+      if (!b.hasBlast()) {
+        b.blast(s,x);
+        break;
+      }
+    }
+  }
+  void draw() {
+    GD.Tag(1);
+    GD.Vertex2ii(screenLeft, shieldYpos+screenTop, 4, 0);
+  }
+  byte testpixel(int x, int y) {
+    int s = SHIELDS + (x >> 3) + (y * (SHIELDS_WIDTH / 8));
+    byte mask = 0x80 >> (x & 7);
+    return GD.rd(s) & mask;
+  }
+  void clearpixel(int x, int y) {
+    int s = SHIELDS + (x >> 3) + (y * (SHIELDS_WIDTH / 8));
+    byte mask = 0x80 >> (x & 7);
+    return GD.wr(s, GD.rd(s) & ~mask);
+  }
+  int zap(int x, int y, bool withBullet) {
+    y -= shieldYpos;
+    if ((y < 0) || (SHIELDS_HEIGHT <= y))
+      return 0;
+    x += 6;    // The pixels in the bullet are in column 6 of the graphic
+    
+    int hy = 99;   // collision y coordinate
+    const PROGMEM uint8_t* blastMap;
+
+    if (withBullet) {
+      // Bullet, so want to find a set pixel below (x,y)
+      for (int r=SHIELDS_HEIGHT-1; r >= y; --r) {
+        if (testpixel(x, r)) {
+          hy = r;
+          break;
+        }
+      }
+      blastMap = bullet_blast;
+    } else {
+      // Bomb, so want to find a set pixel above (x,y)
+      // XXX - Bombs are wider...we check three columns
+      for (int r = 0; r < y; ++r) {
+        if (testpixel(x, r)) {
+          hy = r - 2;
+          break;
+        }
+      }
+      blastMap = bomb_blast;
+    }
+    if (hy != 99) {
+      x -= 3;
+      // Blast a hole in it
+      for (int j=0; j<8; ++j) {  // 8 lines tall
+        const int py = hy+j;
+        if ((0 <= py) && (py < SHIELDS_HEIGHT)) {
+          byte blastMask = 0x80;
+          byte blastGraphic = pgm_read_word_near(blastMap);
+          for (int i=0; i<8; ++i) {    // 8 pixels wide...
+            if ((blastGraphic & blastMask) != 0) {
+              // Set shield pixel to 0 where there's a 1 in the source graphic
+              clearpixel(x + i, py);
+            }
+            blastMask >>= 1;
+          }
+        }
+        ++blastMap;
+      }
+    }
+    return hy != 99;
+  }
+} shields;
+
+void shootShield(byte sprite, int bulletX)
+{
+  shields.shoot(sprite,bulletX);
+}
+
+/*---------------------------------------------
+  Flying saucer
+  
+  The score for the saucer depends on how
+  many bullets you've fired. If you want
+  a good score hit it with bullet 22 and
+  every 15th bullet after that.
+  
+  The direction of the saucer also depends
+  on the bullet count. If you're counting
+  bullets then note the the saucer will
+  appear on alternate sides and you can
+  be ready for it.
+ 
+  Repeat after me: There are NO random
+  numbers in Space Invaders.
+---------------------------------------------*/
+static const PROGMEM uint8_t saucerScores[15] = {
+  // nb. There's only one '300' here...
+  10,5,10,15,10,10,5,30,10,10,10,5,15,10,5
+};
+class Saucer : public GameObject {
+  byte timer, scoreTimer;
+  byte score;
+  byte bulletCounter;
+  unsigned int timeUntilNextSaucer;
+  bool leftRight,goingRight,showingScore;
+  void startWaiting() {
+    status = S_WAITING;
+    timeUntilNextSaucer = saucerFrequency;
+  }
+public:
+  void reset() {
+    initialize();
+    timer = 1;
+    ypos = saucerYpos;
+    showingScore = false;
+    bulletCounter = 0;
+    leftRight = true;
+    timeUntilNextSaucer = saucerFrequency;
+    handle = 1;
+  }
+  void update() {
+    int8_t xoff=0;
+    byte gr1=GR_SAUCER, gr2=gr1;
+    byte fr1=3, fr2=fr1;  // Blank sprite
+    switch (status) {
+      case S_WAITING: if ((remainingInvaders>7) and !--timeUntilNextSaucer) {
+                        status = S_ALIVE;
+                        timer = saucerSkip;
+                        goingRight = leftRight;
+                        if (goingRight) {
+                          xpos = saucerXmin-saucerSpeed;
+                        }
+                        else {
+                          xpos = saucerXmax+saucerSpeed;
+                        }
+                        // saucerSound = true;
+                      }
+                      else {
+                        // stopSaucerSnd = true;
+                      }
+                      break;
+      case S_ALIVE:   if (!--timer) {
+                        // The player has to go faster then the saucer so we skip frames...
+                        timer = saucerSkip;
+                      }
+                      else {
+                        if (goingRight) {
+                          xpos += saucerSpeed;
+                          if (xpos > saucerXmax) {
+                            startWaiting();
+                          }
+                        }
+                        else {
+                          xpos -= saucerSpeed;
+                          if (xpos < saucerXmin) {
+                            startWaiting();
+                          }
+                        }
+                      }
+                      frame = 0;    // Normal saucer
+                      break;
+      case S_DYING:   if (!--timer) {
+                        if (showingScore) {
+                          startWaiting();
+                        }
+                        else {
+                          timer = 60;
+                          showingScore = true;
+                          playerScore += score*10;
+                        }
+                      }
+                      else {
+                        if (showingScore) {
+                          xoff = -5;
+                          gr1 = GR_SAUCER_SCORE;
+                          gr2 = GR_BULLET;    fr2 = 2;
+                          if (score == 5) { fr1=0; xoff-=4;}
+                          else if (score == 10) { fr1 = 1; }
+                          else if (score == 15) { fr1 = 2; }
+                          else if (score == 30) { fr1 = 3; }
+                        }
+                        else {
+                          fr1 = 1;    // Explosion left
+                          fr2 = 2;    // Explosion right
+                          xoff = -5;  // Move it a bit to the left
+                        }
+                      }
+                      frame = 1;    // Dying saucer
+                      break;
+    }
+  }
+  void incCounter() {
+    if (++bulletCounter == 15) {
+      bulletCounter = 0;
+    }
+    leftRight = !leftRight;
+  }
+  void kill() {
+    status = S_DYING;
+    timer = 36;
+    // saucerDieSound = true;
+    showingScore = false;
+    score = pgm_read_byte(saucerScores+bulletCounter);
+  }
+} saucer;
+
+void incSaucerCounter()
+{
+  saucer.incCounter();
+}
+void shootSaucer()
+{
+  saucer.kill();
+}
+/*---------------------------------------------
+  A space invader...
+---------------------------------------------*/
+enum invader_type {
+  INVADER_T,    // Top-row invader
+  INVADER_M,    // Middle-row invader
+  INVADER_B,    // Bottom-row invader
+  NUM_INVADER_TYPES
+};
+static const PROGMEM uint8_t invaderGraphic[NUM_INVADER_TYPES] = {
+  CELL_INVADERS + 0, CELL_INVADERS + 2, CELL_INVADERS + 4
+};
+
+static const PROGMEM uint8_t invaderScore[NUM_INVADER_TYPES] = {
+  30, 20, 10
+};
+
+class Invader : public GameObject {
+  // Bitmasks for my vars
+  enum var_bits {
+    TYPEMASK = 0x0003,    // Type of invader, 0=top row, 1=middle row, 2=bottom row
+    ANIM     = 0x0010,    // Flip-flop for animation frame
+    GO_RIGHT = 0x0020,    // Horizontal direction
+    GO_DOWN  = 0x0040,    // If I should go downwards next time
+  };
+  byte vars;      // All my vars, packed together
+
+  byte readTable(const PROGMEM uint8_t *t) {
+    return pgm_read_byte_near(t + (vars&TYPEMASK));
+  }
+  void updateTheSprite() {
+    byte img = readTable(invaderGraphic);
+    switch (status) {
+      case S_ALIVE:   frame = img + ((vars&ANIM)? 0:1);  // Two frame animation
+                      break;
+      case S_DYING:   frame = CELL_INVADER_EXPLOSION;             // Explosion graphic
+                      break;
+    }
+  }
+public:
+  
+  bool isAlive() const {
+    return ((status==S_WAITING) or (status==S_ALIVE));
+  }
+  void goDown() {
+    vars |= GO_DOWN;
+  }
+
+  // Put me on screen at (x,y), set my type and sprite number.
+  // I will be invisible and appear next frame (ie. when you call "update()")
+  void reset(int x, int y, invader_type t) {
+    initialize(S_WAITING,x,y);
+    frame = CELL_INVADERS + (2 * t);
+    vars = t|GO_RIGHT;
+    updateTheSprite();
+  }
+
+  // Update me, return "true" if I reach the edge of the screen
+  bool update() {
+    bool hitTheEdge = false;
+    switch (status) {
+      case S_WAITING: status = S_ALIVE;
+                      break;
+      case S_ALIVE:   if (vars&GO_DOWN) {
+                        ypos += invaderYstep;
+                        vars &= ~GO_DOWN;
+                        vars ^= GO_RIGHT;
+                      }
+                      else {
+                        if (vars&GO_RIGHT) {
+                          xpos += invaderXstep;
+                          hitTheEdge = (xpos >= invaderXmax);
+                        }
+                        else {
+                          xpos -= invaderXstep;
+                          hitTheEdge = (xpos <= invaderXmin);
+                        }
+                      }
+                      vars = vars^ANIM;  // Animation flipflop
+                      break;
+    }
+    updateTheSprite();
+    return hitTheEdge;
+  }
+  bool die() {
+    bool result = (status==S_ALIVE);
+    if (result) {
+      status = S_DYING;
+      updateTheSprite();
+      playerScore += readTable(invaderScore);
+      // alienDeathSound = true;
+    }
+    return result;
+  }
+  void kill() {
+    status = S_DEAD;
+    updateTheSprite();
+    --remainingInvaders;
+  }
+};
+
+/*---------------------------------------------
+  The array of invaders
+---------------------------------------------*/
+// Table for starting height of invaders on each level
+static const PROGMEM int8_t invaderHeightTable[] = {
+  1,2,3,3,3,4,4,4
+};
+
+class InvaderList {
+  byte nextInvader;              // The invader to update on the next frame
+  int8_t dyingInvader;             // Which invader is currently dying
+  int8_t deathTimer;               // COuntdown during death phase
+  bool anInvaderHitTheEdge;      // When "true" the invaders should go down a line and change direction
+  bool anInvaderReachedTheBottom;// When "true" an invader has landed... Game Over!
+  Invader invader[numInvaders];  // The invaders
+  
+  bool findNextLivingInvader() {
+    // Find next living invader in the array
+    bool foundOne = false;
+    for (int8_t i=0; i<numInvaders; ++i) {
+      if (++nextInvader == numInvaders) {
+        // Actions taken after all the invaders have moved
+        nextInvader = 0;
+        if (anInvaderHitTheEdge) {
+          for (int8_t j=0; j<numInvaders; ++j) {
+            invader[j].goDown();
+          }
+          anInvaderHitTheEdge = false;
+        }
+      }
+      if (invader[nextInvader].isAlive()) {
+        foundOne = true;
+        break;
+      }
+    }
+    return foundOne;
+  }
+public:
+  void reset(int8_t level) {
+    int y = invaderAppearY+(invaderRows*invaderYspacing);
+    if (invaderWave > 0) {
+      int8_t w = pgm_read_byte(invaderHeightTable+((invaderWave-1)&7));
+      y += w*invaderYstep;
+    }
+    for (int8_t row=0; row<invaderRows; ++row) {
+      int x = invaderAppearX;
+      for (int8_t col=0; col<invadersPerRow; ++col) {
+        const int8_t index = (row*invadersPerRow)+col;
+        Invader& n = invader[index];
+        invader_type t = INVADER_B;
+        if (row > 1) {  t = INVADER_M;   }
+        if (row > 3) {  t = INVADER_T;   }
+        n.reset(x, y, t);
+        x += invaderXspacing;
+      }
+      y -= invaderYspacing;
+    }
+    remainingInvaders = numInvaders;
+    nextInvader = 0;    // Start updating them here...
+    dyingInvader = -1;
+    deathTimer = 0;
+    anInvaderHitTheEdge = false;
+    anInvaderReachedTheBottom = false;
+  }
+  void update() {
+    if (dyingInvader != -1) {
+      // We stop marching when an invader dies
+      if (!--deathTimer) {
+        invader[dyingInvader].kill();
+        dyingInvader = -1;
+      }
+    }
+    else if (!player.isDying() and (remainingInvaders>0)) {
+      // Update an invader
+      Invader& n = invader[nextInvader];
+      if (n.isAlive()) {
+        // Move the invader
+        if (n.update()) {
+          anInvaderHitTheEdge = true;
+        }
+        if ((n.ypos+8) > player.ypos) {
+          anInvaderReachedTheBottom = true;
+        }
+      }
+      findNextLivingInvader();
+    }
+  }
+  // Kill invader 'n'
+  bool kill(byte n) {
+    bool result = invader[n].die();
+    if (result) {
+      if (dyingInvader != -1) {
+        invader[dyingInvader].kill();
+      }
+      dyingInvader = n;
+      deathTimer = 16;
+    }
+    return result;
+  }
+  int8_t nearestColumnToPlayer() {
+    Invader& n = invader[nextInvader];  // We know this invader is alive so use it as a reference
+    int r = nextInvader%invadersPerRow; // The column this invader is in
+    int left = n.xpos-(r*invaderXspacing);
+    int c = (((player.xpos-left)+(invaderXspacing/2))/invaderXspacing);
+    if ((c>=0) and (c<invadersPerRow)) {
+      return c;
+    }
+    return -1;
+  }
+  const Invader *getColumn(int8_t c) {
+    while ((c>=0) and (c<numInvaders)) {
+      const Invader *v = invader+c;
+      if (v->isAlive()) {
+        return v;
+      }
+      c += invadersPerRow;
+    }
+    return 0;
+  }
+  bool haveLanded() {
+    return anInvaderReachedTheBottom;
+  }
+  void draw() {
+    for (int i = 0; i < numInvaders; i++) {
+      GD.Tag(100 + i);
+      invader[i].draw();
+    }
+  }
+  void hit(int tag) {
+    int c = tag - 100;
+    if ((0 <= c) && (c < numInvaders)) {
+      kill(c);
+      bullet.reset();
+    }
+  }
+} invaders;
+
+bool killInvader(byte n)
+{
+  return invaders.kill(n);
+}
+
+/*---------------------------------------------------------
+  Space invader bombs
+  
+  There's three bombs in Space Invaders. Two of them
+  follow a pattern of columns, the other one always
+  appears right above the player (to stop you getting
+  bored...!)
+  
+  Mantra: There are NO random numbers in Space Invaders...
+
+  nb. Column 1 is the most dangerous and column 5
+      isn't in either table... :-)
+---------------------------------------------------------*/
+// Column table for the 'zigzag' bomb
+static const PROGMEM int8_t zigzagBombColumns[] = {
+  11,1,6,3,1,1,11,9,2,8,2,11,4,7,10,-1
+};
+// Column table for the bomb with horizontal bars across it
+static const PROGMEM int8_t barBombColumns[] = {
+  1,7,1,1,1,4,11,1,6,3,1,1,11,9,2,8,-1
+};
+byte bombTimer;    // Countdown until next bomb can be dropped
+void resetBombTimer()
+{
+  if (!player.isAlive()) {
+    bombTimer = 60;    // We don't drop for this long after you reanimate
+  }
+  else {
+    // You get more bombs as the game progresses :-)
+    if (playerScore < 200)       { bombTimer = 48;  }
+    else if (playerScore < 1000) { bombTimer = 16;  }
+    else if (playerScore < 2000) { bombTimer = 11;  }
+    else if (playerScore < 3000) { bombTimer = 8;   }
+    else                         { bombTimer = 7;   }
+  }
+}
+class Bomb : public GameObject {
+  byte graphic;
+  byte timer;
+  byte cycle;
+  const PROGMEM int8_t *columnTable, *tablePtr;
+  bool readyToDrop() {
+    return (bombTimer==0);
+  }
+  int8_t getNextColumn() {
+    int8_t c = pgm_read_byte(tablePtr);
+    if (c == -1) {
+      tablePtr = columnTable;
+      c = pgm_read_byte(tablePtr);
+    }
+    else {
+      ++tablePtr;
+    }
+    return c-1;
+  }
+public:
+  Bomb() {
+    tablePtr = 0;
+  }
+  bool isAlive() {
+    return (status!=S_WAITING);
+  }
+  void die() {
+    status = S_DYING;
+    timer = 12;
+  }
+  void reset(byte gr, const int8_t *ct) {
+    initialize();
+    graphic = gr;
+    columnTable = ct;
+    if (!tablePtr) {
+      tablePtr = ct;  // Only set this the first time...
+    }
+    cycle = timer = 0;
+  }
+  void update() {
+    switch (status) {
+      case S_WAITING: if (bombTimer == 0) {
+                        int8_t c = -1;
+                        if (columnTable) {
+                          // Follow sequence of columns
+                          c = getNextColumn();
+                        }
+                        else {
+                          // Drop me above the player
+                          c = invaders.nearestColumnToPlayer();
+                        }
+                        const Invader *v = invaders.getColumn(c);
+                        if (v) {
+                          status = S_ALIVE;
+                          xpos = v->xpos;
+                          ypos = v->ypos+8;
+                          resetBombTimer();
+                        }
+                      }
+                      break;
+      case S_ALIVE:   ypos += bombSpeed;
+                      if (ypos < bombYmax) {
+                        if (shields.zap(xpos, ypos, false))
+                          die();
+                      } else {
+                        ypos = bombYmax;
+                        die();
+                      }
+                      if (++timer==2) {
+                        ++cycle;
+                        timer = 0;
+                      }
+                      frame = graphic + (cycle & 3);
+                      break;
+      case S_DYING:   if (!--timer) {
+                        status = S_WAITING;
+                      }
+                      else {
+                        frame = CELL_BOMB_BLAST;
+                      }
+                      break;
+    }
+  }
+  void collide() {
+    if (status==S_ALIVE) {
+      byte b = collision();
+      /*
+      if (b == SP_PLAYER) {
+        player.kill();
+        status = S_DYING;
+      }
+      if ((b>=SP_FIRST_SHIELD) and (b<=SP_LAST_SHIELD)) {
+        shields.bomb(b,xpos);
+        die();
+      }
+      */
+    }
+  }
+};
+
+class Bombs {
+  Bomb zigzag,bar,diag;
+public:
+  void reset() {
+    resetBombTimer();
+    zigzag.reset(CELL_ZIGZAGBOMB, zigzagBombColumns);
+    bar   .reset(CELL_BARBOMB,    barBombColumns);
+    diag  .reset(CELL_DIAGBOMB,   0);
+  }
+  void update() {
+    if (player.isAlive()) {
+      if (bombTimer > 0) {
+        --bombTimer;
+      }
+      zigzag.update();
+      bar   .update();
+      diag  .update();
+    }
+  }
+  void collide() {
+    zigzag.collide();
+    bar   .collide();
+    diag  .collide();
+  }
+  void draw() {
+    zigzag.draw();
+    bar   .draw();
+    diag  .draw();
+  }
+  void shoot(byte s) {
+    if (zigzag.sprite==s) zigzag.die();
+    if (bar.sprite   ==s) bar.die();
+    if (diag.sprite  ==s) diag.die();
+  }
+} bombs;
+
+void shootBomb(byte s)
+{
+  bombs.shoot(s);
+}
+/*---------------------------------------------
+  Start next wave of invaders
+---------------------------------------------*/
+void startNextWave()
+{
+  beatCounter = 0;
+  player.reset();
+  bullet.reset();
+  saucer.reset();
+  bombs.reset();
+  shields.reset();
+  invaders.reset(invaderWave);
+  if (++invaderWave == 0) {
+    invaderWave = 1;
+  }
+}
+
+/*---------------------------------------------
+  Reset the game
+---------------------------------------------*/
+void resetGame()
+{
+  numLives = 3;
+  playerScore = 0;
+  invaderWave = 0;
+  startNextWave();
+  // GD.fill((64*((screenTop+239)>>3))+(screenLeft>>3),CH_FLOOR,screenWidth>>3);
+}
+
+uint32_t clock() {
+  return micros();
+  return GD.rd32(REG_CLOCK);
+}
+
+void loop()
+{
+  ++frameCounter;
+
+  GD.get_inputs();
+  int x, y, z;
+  GD.get_accel(x, y, z);
+  byte tag = GD.rd(REG_TAG);
+  // tag = GD.rd(REG_TOUCH_TAG);
+  long t0 = clock();
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  GD.ColorMask(1, 1, 1, 0);
+  GD.ColorRGB(0x686868);
+  GD.Vertex2ii(screenLeft - (248 - screenWidth) / 2, 0, 2, 0);
+  GD.ColorMask(0, 0, 0, 1);
+  GD.BlendFunc(ONE, ONE);
+  GD.AlphaFunc(GREATER, 0);
+
+  // Collision detection first (we have to do it all during vertical blanking!)
+  bullet.collide();
+  bombs.collide();
+  // The rest of the game logic
+  // joystick.read();
+  player.update();
+  bullet.update();
+  saucer.update();
+  bombs.update();
+  shields.update();
+  invaders.update();
+  if (!remainingInvaders) {
+    startNextWave();
+  }
+  if (player.isDying()) {
+    bombs.reset();
+    bullet.reset();
+  }
+  if (player.isDead()) {
+    resetGame();
+  }
+  if (invaders.haveLanded()) {
+    numLives = 1;
+    player.kill();
+  }
+
+  saucer.draw();
+  invaders.draw();
+  invaders.hit(tag);
+  bombs.draw();
+  shields.draw();
+  GD.TagMask(0);
+  player.draw();
+  bullet.draw();
+
+  updateScore();
+  drawBases();
+
+  GD.ColorRGB(0xc0c0c0);
+  GD.ColorMask(1, 1, 1, 0);
+  GD.BlendFunc(DST_ALPHA, ONE);
+
+  GD.cmd_loadidentity();
+  GD.cmd_scale(F16(8), F16(8));
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(screenLeft, screenTop, 3, 0);
+
+  if (--beatCounter < 0) {
+    // alienBeatSound = true;
+    beatCounter = remainingInvaders+4;
+  }
+
+  static long tprev;
+  GD.RestoreContext();
+  // GD.cmd_number(60, 0, 26, OPT_RIGHTX, clock() - t0);
+  // GD.cmd_number(60, 0, 26, OPT_RIGHTX, tag);
+  tprev = t0;
+  GD.swap();
+}
+
+void setup()
+{
+  Serial.begin(UART_SPEED);
+  GD.begin();
+
+  GD.cmd_inflate(0);
+  GD.copy(invaders_assets, sizeof(invaders_assets));
+
+  GD.BitmapHandle(0);
+  GD.BitmapSource(SPR16);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 16, 8);
+  GD.BitmapLayout(L1, 2, 8);
+
+  GD.BitmapHandle(1);
+  GD.BitmapSource(SAUCER);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 16, SAUCER_HEIGHT);
+  GD.BitmapLayout(L1, SAUCER_WIDTH / 8, 8);
+
+  GD.BitmapHandle(2);
+  GD.cmd_loadimage(ASSETS_END, 0);
+  GD.copy(background_jpg, sizeof(background_jpg));
+
+  GD.BitmapHandle(3);
+  GD.BitmapSource(OVERLAY);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 8 * OVERLAY_WIDTH, 8 * OVERLAY_HEIGHT);
+  GD.BitmapLayout(RGB332, OVERLAY_WIDTH, OVERLAY_HEIGHT);
+
+  GD.BitmapHandle(4);
+  GD.BitmapSource(SHIELDS);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, SHIELDS_WIDTH, SHIELDS_HEIGHT);
+  GD.BitmapLayout(L1, SHIELDS_WIDTH / 8, SHIELDS_HEIGHT);
+
+  resetGame();
+
+  highScore = 0;
+}

+ 173 - 0
jnr.ino

@@ -0,0 +1,173 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+class scroller {
+public:
+  signed short dragprev;
+  int vel;      // velocity
+  long base;    // screen x coordinate, in 1/16ths pixel
+  long limit;
+  void init(uint32_t lim) {
+    dragprev = -32768;
+    vel = 0;      // velocity
+    base = 0;     // screen x coordinate, in 1/16ths pixel
+    limit = lim;
+  }
+  void run(bool touching, int16_t sx) {
+    if (touching & (dragprev != -32768)) {
+      vel = (dragprev - sx) << 4;
+    } else {
+      int change = max(1, abs(vel) >> 5);
+      if (vel < 0)
+        vel += change;
+      if (vel > 0)
+        vel -= change;
+    }
+    dragprev = touching ? sx : -32768;
+    base += vel;
+    base = max(0, min(base, limit));
+  }
+  uint16_t getval() {
+    return base >> 4;
+  }
+};
+
+scroller xscroll;
+
+#include "jnr_assets.h"
+
+static byte level[240] = {
+  0xff,
+  0xe2,
+  0xe2,
+  0xc0,
+  0x44,
+  0x40,
+  0x04,
+  0x40,
+  0x44,
+  0x00,
+  0x04,
+  0x40,
+  0x5c,
+  0x08,
+};
+
+int mapxy(int x, int y)
+{
+  if (x < 0)
+    return 0;
+  if (y < 0)
+    return 0;
+  if (8 <= y)
+    return 0;
+  if (240 <= y)
+    return 0;
+  return 1 & (level[x] >> y);
+}
+
+static void parallax(int x, int y)
+{
+  x %= 400;
+  GD.Vertex2f(16 * -x, 16 * y);
+  GD.Vertex2f(16 * (-x + 400), 16 * y);
+}
+
+static void draw(int xx)
+{
+  GD.Clear();
+  GD.ScissorSize(480, 240);
+
+  GD.ClearColorRGB(0x2578c5);
+  GD.Clear();
+  GD.Begin(BITMAPS);
+
+  GD.BitmapHandle(LAYER1_HANDLE);
+  GD.ColorRGB(0x9ae8ff);
+  parallax(xx >> 4, 0);
+
+  GD.BitmapHandle(LAYER2_HANDLE);
+  GD.ColorRGB(0x85d2e9);
+  parallax(xx >> 3, 240 - LAYER2_HEIGHT);
+
+  GD.BitmapHandle(LAYER3_HANDLE);
+  GD.ColorRGB(0x67b0c5);
+  parallax(xx >> 2, 240 - LAYER3_HEIGHT);
+
+  GD.BitmapHandle(LAYER4_HANDLE);
+  GD.ColorRGB(0x549faa);
+  parallax(xx >> 1, 240 - LAYER4_HEIGHT);
+
+  GD.ColorRGB(0xffffff);
+  GD.BitmapHandle(TILES_HANDLE);
+  int bx = xx / 32;
+  for (int x = 0; x < 16; x++)
+    for (int y = 0; y < 8; y++) {
+      byte index = 0;
+      if (mapxy(bx + x, y)) {
+        if (mapxy(bx + x, y - 1))
+          index += 1;
+        if (mapxy(bx + x + 1, y))
+          index += 2;
+        if (mapxy(bx + x, y + 1))
+          index += 4;
+        if (mapxy(bx + x - 1, y))
+          index += 8;
+      } else {
+        index = 17;
+      }
+      GD.Tag(128 + 8 * x + y);
+      GD.Cell(index);
+      GD.Vertex2f(16 * (-(xx & 31) + 32 * x), 16 * 32 * y);
+    }
+
+  GD.RestoreContext();
+  GD.cmd_scale(F16(16), F16(16));
+  GD.cmd_setmatrix();
+  GD.BitmapHandle(CHECKER_HANDLE);
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 512, 32);
+  GD.Cell(0);
+  GD.Vertex2f(16 * -(xx & 31), 16 * 240);
+}
+
+void setup()
+{
+  GD.begin();
+
+  LOAD_ASSETS();
+
+  xscroll.init((240UL * 32) << 4);
+  Serial.begin(1000000);    // JCB
+}
+
+void loop()
+{
+  static int prevtag;
+  uint16_t bx = xscroll.base >> 4;
+
+  GD.get_inputs();
+  int touching = (GD.inputs.x != -32768);
+  byte tag = GD.inputs.tag;
+
+  if (prevtag != tag && (128 <= tag)) {
+    level[(bx >> 5) + (tag - 128) / 8] |= 1 << (tag & 7);
+  }
+  prevtag = tag;
+
+  xscroll.run(GD.inputs.y > 240 && touching, GD.inputs.x);
+  draw(bx);
+#ifdef EMUPC  // JCB{
+  GD.RestoreContext();
+  GD.ColorA(128);
+  GD.Begin(POINTS);
+  if (touching) {
+    int size = 512 - GD.inputs.rz / 3;
+    GD.PointSize(min(512, max(size, 0)));
+    GD.Vertex2ii(GD.inputs.x, GD.inputs.y, 0, 0);
+  }
+#endif  // }JCB
+  int t;
+  caption(t++, "Graphics by http://www.robotality.com");  // JCB
+  GD.swap();
+}

+ 19 - 0
jpeg.ino

@@ -0,0 +1,19 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+void setup() //' A{
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  GD.cmd_loadimage(0, 0);
+  GD.safeload("healsky3.jpg");
+}
+
+void loop()
+{
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0);
+  GD.swap();
+} //' }A

+ 26 - 0
jpeg2.ino

@@ -0,0 +1,26 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+void setup() //' A{
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+
+  GD.BitmapHandle(0);
+  GD.cmd_loadimage(0, 0);
+  GD.load("sunrise.jpg");
+
+  GD.BitmapHandle(1);
+  GD.cmd_loadimage(-1, 0);
+  GD.load("healsky3.jpg");
+}
+
+void loop()
+{
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0,   0,   0);    // handle 0: sunrise
+  GD.Vertex2ii(200, 100, 1);    // handle 1: healsky3
+  GD.swap();
+} //' }A

+ 275 - 0
kenney.ino

@@ -0,0 +1,275 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "kenney_assets.h"
+
+#define PLAYER1_SIZE  (PLAYER1_HEIGHT + 8)
+#define HEART_SZ    (HEART_HEIGHT + 14)
+
+static void rotate_player(int a)
+{
+    GD.cmd_loadidentity();
+    GD.cmd_translate(F16(PLAYER1_SIZE / 2),F16(PLAYER1_SIZE / 2));
+    GD.cmd_rotate(a);
+    GD.cmd_translate(F16(-PLAYER1_WIDTH / 2),F16(-PLAYER1_HEIGHT / 2));
+    GD.cmd_setmatrix();
+}
+
+static void rotate_heart(int a)
+{
+    GD.cmd_loadidentity();
+    GD.cmd_translate(F16(HEART_SZ / 2),F16(HEART_SZ / 2));
+    GD.cmd_rotate(a);
+    GD.cmd_translate(F16(-HEART_WIDTH / 2),F16(-HEART_HEIGHT / 2));
+    GD.cmd_setmatrix();
+}
+
+#define BLOBS 32
+class Trail {
+  public:
+    int idx;
+    int x[BLOBS];
+    int y[BLOBS];
+    int sz[BLOBS];
+    void add(int nx, int ny) {
+      x[idx] = nx;
+      y[idx] = ny;
+      sz[idx] = 192;
+      idx = (idx + 1) % BLOBS;
+    }
+    void draw(int sy) {
+      for (int i = 0; i < BLOBS; i++) {
+        if (sz[i]) {
+          GD.PointSize(sz[i]);
+          GD.Vertex2f(x[i], -(sy << 4) + y[i]);
+          sz[i] -= 1;
+          y[i] += 12;
+        }
+      }
+    }
+};
+
+struct xy {
+  int x, y;
+};
+
+struct {
+  xy p[3];
+  Trail trail[3];
+  xy hearts[20];
+  xy clouds[20];
+} state;
+
+static void polar(uint16_t th, int r)
+{
+  int x, y;
+  GD.polar(x, y, r, th);
+  GD.Vertex2f(16 * 240 + x, 16 * 136 + y);
+}
+
+#define RAYS    7
+#define RAYSIZE (65536 / RAYS)
+#define RAYEDGE (4 * 16)
+
+static void ray(uint16_t th, int r0, int r1)
+{
+  polar(th, r0);
+  polar(th, r1);
+  polar(th + RAYSIZE / 2, r1);
+  polar(th + RAYSIZE / 2, r0);
+  polar(th, r0);
+}
+
+// c1 is edge color, c2 is interior color
+
+static void burst(uint16_t th, int r, uint32_t c1, uint32_t c2)
+{
+  GD.Clear(0,1,0);
+  GD.ColorMask(0,0,0,0);
+  GD.StencilOp(KEEP, INVERT);
+  GD.StencilFunc(ALWAYS, 255, 255);
+  for (int i = 0; i < RAYS; i++) {
+    GD.Begin(EDGE_STRIP_A);
+    ray(th + (i * RAYSIZE), r / 4, r + (r >> 4));
+  }
+  GD.ColorMask(1,1,1,1);
+  GD.StencilFunc(EQUAL, 255, 255);
+  GD.StencilOp(KEEP, KEEP);
+
+  GD.Begin(POINTS);
+  GD.ColorRGB(c1);
+  GD.PointSize(r);
+  GD.Vertex2ii(240, 136);
+  GD.ColorRGB(c2);
+  GD.PointSize(r - RAYEDGE);
+  GD.Vertex2ii(240, 136);
+  GD.ColorRGB(c1);
+  GD.PointSize((r / 4) + RAYEDGE);
+  GD.Vertex2ii(240, 136);
+
+  GD.StencilFunc(ALWAYS, 255, 255);
+  GD.LineWidth(RAYEDGE / 2);
+  for (int i = 0; i < RAYS; i++) {
+    GD.Begin(LINES);
+    ray(th + (i * RAYSIZE), r / 4 + (RAYEDGE / 2), r - (RAYEDGE / 2));
+  }
+}
+
+static void sunrise(int t)
+{
+  static int r = 0, v = 0;
+  // yellow   0xffcc00
+  // reddish  0xe86a17
+  // blue     0x1ea7e1
+  // green    0x73cd4b
+
+  GD.ColorRGB(C1B);
+  GD.PointSize((r * 3) >> 4);
+  GD.Begin(POINTS);
+  GD.Vertex2f(16 * 240, 16 * 136);
+
+  // GD.ColorA(min(255, t * 6));
+  if (t == 0) {
+    r = 0;
+    v = 0;
+  }
+  burst(t * -261, r + (r >> 1), C2B, C2);
+  burst(t * 335, r, C1B, C1);
+  int f = ((16L * 130) - r) / 29;
+  v = ((v + f) * 243L) >> 8;
+  r += v;
+}
+
+static void draw(int t)
+{
+  int y = 1648 - t;
+  // GD.finish(); long t0 = micros();
+
+  // GD.ClearColorRGB(0xd0f4f7); GD.Clear();
+  GD.cmd_gradient(0,   0, 0xa0a4f7,     //' gradient{
+                  0, 272, 0xd0f4f7);  //' }gradient
+
+  if (360 <= t) {
+    GD.RestoreContext();
+    sunrise(t - 360);
+  }
+
+  GD.Begin(BITMAPS);  //' clouds{
+  GD.BlendFunc(ONE, ONE_MINUS_SRC_ALPHA);
+  GD.BitmapHandle(CLOUD_HANDLE);
+  GD.Cell(0);
+  for (int i = 0; i < 20; i++) {
+    byte lum = 128 + 5 * i;
+    GD.ColorA(lum);
+    GD.ColorRGB(lum, lum, lum);
+    GD.Vertex2f(state.clouds[i].x, state.clouds[i].y);
+    state.clouds[i].y += (4 + (i >> 3));
+    if (state.clouds[i].y > (16 * 272))
+      state.clouds[i].y -= 16 * (272 + CLOUD_HEIGHT);
+  } //' }clouds
+
+  GD.RestoreContext();
+  GD.BlendFunc(ONE, ONE_MINUS_SRC_ALPHA);
+  GD.Begin(BITMAPS); //' tiles{
+  GD.BitmapHandle(TILES_HANDLE);
+  const PROGMEM uint8_t *src = layer1_map + (y >> 5) * 15;
+  byte yo = y & 31;
+  for (byte j = 0; j < 10; j++)
+    for (byte i = 0; i < 15; i++) {
+      byte t = pgm_read_byte_near(src++);
+      if (t != 0) {
+        GD.Cell(t - 1);
+        GD.Vertex2f(16 * 32 * i, 16 * ((32 * j) - yo));
+      }
+    } //' }tiles
+  // GD.BlendFunc(SRC_ALPHA, ZERO);
+
+  uint16_t a = t * 100;
+
+  uint16_t a2 = a << 1;
+  uint16_t a3 = a2 << 1;
+
+  state.p[0].x = 16 * 240 + GD.rsin(16 * 120, a) + GD.rsin(16 * 120, a2);
+  state.p[0].y = 16 * 136 + GD.rsin(16 * 70, a3);
+
+  state.p[1].x = 16 * 240 + GD.rsin(16 * 240, a);
+  state.p[1].y = 16 * 100 + GD.rsin(16 * 36, a2);
+
+  state.p[2].x = 16 * 240 + GD.rsin(16 * 240, a2);
+  state.p[2].y = 16 * 135 + GD.rsin(16 * 10, a) + GD.rsin(16 * 18, a3);
+
+  for (int i = 0; i < 3; i++) {
+    if ((t & 3) == 0) {
+      state.trail[i].add(state.p[i].x, (y << 4) + state.p[i].y);
+    }
+
+    GD.BlendFunc(SRC_ALPHA, ONE_MINUS_SRC_ALPHA);
+    GD.Begin(POINTS);
+    GD.ColorA(0x90);
+    uint32_t colors[3] = {0x8bcfba, 0x8db5e7, 0xf19cb7};
+    GD.ColorRGB(colors[i]);
+    state.trail[i].draw(y);
+  }
+
+  GD.ColorRGB(0xffffff);
+  GD.ColorA(0xff);
+  GD.BlendFunc(ONE, ONE_MINUS_SRC_ALPHA);
+  GD.BitmapHandle(PLAYER1_HANDLE);  //' player{
+  GD.Begin(BITMAPS);
+  for (int i = 0; i < 3; i++) {
+    rotate_player(a + i * 0x7000);
+    GD.Cell(i);
+    GD.Vertex2f(state.p[i].x - (16 * PLAYER1_SIZE / 2),
+                state.p[i].y - (16 * PLAYER1_SIZE / 2));
+  } //' }player
+
+  if (t > 480) {
+    GD.BlendFunc(SRC_ALPHA, ONE_MINUS_SRC_ALPHA);
+    GD.ColorA(min((t - 480) * 4, 255));
+    GD.Begin(BITMAPS);
+    GD.BitmapHandle(HEART_HANDLE);
+    GD.Cell(0);
+
+    for (int i = 0; i < 20; i++) {
+      if ((i & 3) == 0)
+        rotate_heart(a + (i << 12));
+      GD.Vertex2f(state.hearts[i].x - (16 * HEART_SZ / 2), state.hearts[i].y);
+      state.hearts[i].y += 30 + (i << 2);
+      if (state.hearts[i].y > (16 * 272))
+        state.hearts[i].y -= 16 * (272 + HEART_SZ);
+    }
+  }
+
+  // GD.RestoreContext(); GD.cmd_number(0, 0, 26, 6, micros() - t0);
+
+  GD.swap();
+}
+
+void setup()
+{
+  GD.begin();
+  Serial.begin(1000000);
+  // GD.wr32(REG_PWM_HZ, 18000); GD.wr(REG_PWM_DUTY, 64);
+
+  GD.Clear();
+  LOAD_ASSETS();
+
+  // Handle     Graphic
+  //   0        Tiles
+
+  byte hy[] = {36, 12, 144, 204, 216, 120, 48, 168, 192, 84, 72, 60, 24, 180, 0, 108, 228, 132, 156, 96};
+  for (int i = 0; i < 20; i++) {
+    state.hearts[i].x = random(16 * 480);
+    state.hearts[i].y = 16 * hy[i];
+    state.clouds[i].x = 16 * (random(480) - (CLOUD_WIDTH / 2));
+    state.clouds[i].y = 16 * hy[i];
+  }
+}
+
+void loop()
+{
+  for (int t = 0; t < 720; t++) {
+    draw(t);
+  }
+}

+ 31 - 0
keywords.txt

@@ -0,0 +1,31 @@
+#######################################
+# Syntax Coloring Map For Gameduino2
+#######################################
+
+#######################################
+# Datatypes (KEYWORD1)
+#######################################
+
+#######################################
+# Methods and Functions (KEYWORD2)
+#######################################
+
+begin	KEYWORD2
+beginTransmission	KEYWORD2
+endTransmission	KEYWORD2
+requestFrom	KEYWORD2
+send	KEYWORD2
+receive	KEYWORD2
+onReceive	KEYWORD2
+onRequest	KEYWORD2
+
+#######################################
+# Instances (KEYWORD2)
+#######################################
+
+Gameduino	KEYWORD2
+
+#######################################
+# Constants (LITERAL1)
+#######################################
+

+ 29 - 0
lines.ino

@@ -0,0 +1,29 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+}
+
+static void zigzag(int x) //' a{
+{
+  GD.Vertex2ii(x - 10,   10); GD.Vertex2ii(x + 10,   60);
+  GD.Vertex2ii(x - 10,  110); GD.Vertex2ii(x + 10,  160);
+  GD.Vertex2ii(x - 10,  210); GD.Vertex2ii(x + 10,  260);
+}
+
+void loop()
+{
+  GD.Clear();
+  GD.Begin(LINES);
+  zigzag(140);
+  GD.Begin(LINE_STRIP);
+  zigzag(240);
+  GD.LineWidth(16 * 10);
+  GD.Begin(LINE_STRIP);
+  zigzag(340);
+  GD.swap();
+} //' }a

+ 100 - 0
logo.ino

@@ -0,0 +1,100 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "logo_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000);    // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+byte clamp255(int x)
+{
+  if (x < 0)
+    return 0;
+  if (255 < x)
+    return 255;
+  return x;
+}
+
+struct xy {
+  int x, y;
+};
+
+#define NSTARS 256
+
+void loop()
+{
+  byte fade;
+  xy stars[NSTARS];
+  for (int i = 0; i < NSTARS; i++) {
+    stars[i].x = GD.random(16 * 480);
+    stars[i].y = GD.random(16 * 272);
+  }
+
+  for (int t = 0; t < 464; t++) {
+    GD.cmd_gradient(0, 0, 0x120000, 0, 272, 0x480000);
+    GD.BlendFunc(SRC_ALPHA, ONE);
+    GD.Begin(POINTS);
+    for (int i = 0; i < NSTARS; i++) {
+      GD.ColorA(64 + (i >> 2));
+      GD.PointSize(8 + (i >> 5));
+      GD.Vertex2f(stars[i].x, stars[i].y);
+      // stars drift left, then wrap around
+      stars[i].x -= 1 + (i >> 5);
+      if (stars[i].x < -256) {
+        stars[i].x += (16 * 500);
+        stars[i].y = GD.random(16 * 272);
+      }
+    }
+    GD.RestoreContext();
+    GD.Begin(BITMAPS);
+
+    // Main logo fades up from black
+    fade = clamp255(5 * (t - 15));
+    GD.ColorRGB(fade, fade, fade);
+    GD.Vertex2ii(240 - GAMEDUINO_WIDTH/2, 65, GAMEDUINO_HANDLE, 0);
+    GD.RestoreContext();
+
+    // The '2' and its glow
+    fade = clamp255(8 * (t - 120));
+    GD.ColorA(fade);
+    GD.Vertex2ii(270, 115, TWO_HANDLE, 0);
+    fade = clamp255(5 * (t - 144));
+
+    GD.BlendFunc(SRC_ALPHA, ONE);
+    GD.ColorA(fade);
+    GD.ColorRGB(85,85,85);
+    GD.Vertex2ii(270, 115, TWO_HANDLE, 1);
+
+    GD.RestoreContext();
+
+    // The text fades up. Its glow is a full-screen bitmap
+    fade = clamp255(8 * (t - 160));
+    GD.ColorA(fade);
+    GD.cmd_text(140, 200, 29, OPT_CENTER, "This time");
+    GD.cmd_text(140, 225, 29, OPT_CENTER, "it's personal");
+    fade = clamp255(5 * (t - 184));
+    GD.BlendFunc(SRC_ALPHA, ONE);
+    GD.ColorA(fade);
+    GD.ColorRGB(85,85,85);
+    GD.Vertex2ii(0, 0, PERSONAL_HANDLE, 0);
+
+    // OSHW logo fades in
+    GD.ColorRGB(0, 153 * 160 / 255, 176 * 160 / 255);
+    GD.Vertex2ii(2, 2, OSHW_HANDLE, 0);
+    GD.RestoreContext();
+
+    // Fade to white at the end by drawing a white rectangle on top
+    fade = clamp255(5 * (t - 400));
+    GD.ColorA(fade);
+    GD.Begin(RECTS);
+    GD.Vertex2ii(0, 0, 0, 0);
+    GD.Vertex2ii(480, 272, 0, 0);
+
+    GD.swap();
+  }
+}

+ 14 - 0
mkino

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# INO_PORT=/dev/ttyUSB0
+INO_CPU=pro328
+
+DIR=ino-$1
+
+mkdir -p $DIR/src $DIR/lib
+[ ! -h $DIR/lib/Gameduino2 ] && ln -s ~/Arduino/libraries/Gameduino2 $DIR/lib
+cp $1.ino $DIR/src/
+cp converted-assets/${1}_assets.h $DIR/src/
+cd $DIR &&
+ino build -m $INO_CPU || exit
+# ino upload -m $INO_CPU -p $INO_PORT

+ 25 - 0
mono.ino

@@ -0,0 +1,25 @@
+#include <EEPROM.h> //' a{
+#include <SPI.h>
+#include <GD2.h>
+
+#include "mono_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+void loop()
+{
+  GD.ClearColorRGB(0x375e03);
+  GD.Clear();
+  // GD.ClearColorRGB(GD.random(255), GD.random(255), GD.random(255)); // JCB
+  GD.Begin(BITMAPS);
+  GD.ColorRGB(0x68b203);
+  // GD.ColorRGB(GD.random(255), GD.random(255), GD.random(255)); // JCB
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272);
+  GD.Vertex2ii(0, 0);
+  GD.swap();
+} //' }a

+ 945 - 0
nightstrike.ino

@@ -0,0 +1,945 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+// For random events.
+// PROB(1, 50)    One time in 50
+// PROB(7, 8)     7 times in 8
+#define PROB(num, denom) (GD.random() < (uint16_t)(65535UL * (num) / (denom)))
+
+#include "nightstrike_welcome_assets.h"
+#include "nightstrike_1_assets.h"
+
+static uint32_t t;
+
+void draw_dxt1(byte color_handle, byte bit_handle)  //' dxt1{
+{
+  GD.Begin(BITMAPS);
+
+  GD.BlendFunc(ONE, ZERO);
+  GD.ColorA(0x55);
+  GD.Vertex2ii(0, 0, bit_handle, 0);
+
+  GD.BlendFunc(ONE, ONE);
+  GD.ColorA(0xaa);
+  GD.Vertex2ii(0, 0, bit_handle, 1);
+
+  GD.ColorMask(1,1,1,0);
+  GD.cmd_scale(F16(4), F16(4));
+  GD.cmd_setmatrix();
+
+  GD.BlendFunc(DST_ALPHA, ZERO);
+  GD.Vertex2ii(0, 0, color_handle, 1);
+
+  GD.BlendFunc(ONE_MINUS_DST_ALPHA, ONE);
+  GD.Vertex2ii(0, 0, color_handle, 0);
+
+  GD.RestoreContext();
+} //' }dxt1
+
+struct Element {
+public:
+  int16_t x, y;
+  const shape_t *shape;
+  void set(const shape_t *_shape) {
+    shape = _shape;
+  }
+  void setxy(int _x, int _y) {
+    x = _x;
+    y = _y;
+  }
+  void vertex(byte cell, byte scale) {
+    int x0, y0;
+    x0 = x - (shape->w >> 1) * scale;
+    y0 = y - (shape->h >> 1) * scale;
+    if (((x0 | y0) & 511) == 0) {
+      GD.Vertex2ii(x0, y0, shape->handle, cell);
+    } else {
+      GD.BitmapHandle(shape->handle);
+      GD.Cell(cell);
+      GD.Vertex2f(x0 << 4, y0 << 4);
+    }
+  }
+  void draw(byte cell, byte flip = 0, byte scale = 1) {
+    if (!flip && scale == 1) {
+      vertex(cell, scale);
+    } else {
+      GD.SaveContext();
+      GD.cmd_loadidentity();
+      GD.cmd_translate(F16(scale * shape->w / 2), F16(scale * shape->h / 2));
+      if (flip)
+        GD.cmd_scale(F16(-scale), F16(scale));
+      else
+        GD.cmd_scale(F16(scale), F16(scale));
+      GD.cmd_translate(F16(-(shape->w / 2)), F16(-(shape->h / 2)));
+      GD.cmd_setmatrix();
+      vertex(cell, scale);
+      GD.RestoreContext();
+    }
+  }
+};
+
+struct RotatingElement : public Element {
+public:
+  uint16_t angle;
+  void set(const shape_t *_shape) {
+    shape = _shape;
+  }
+  void setxy(int _x, int _y) {
+    x = _x << 4;
+    y = _y << 4;
+  }
+  void setxy_16ths(int _x, int _y) {
+    x = _x;
+    y = _y;
+  }
+  void draw(byte cell) {
+    GD.SaveContext();
+    GD.cmd_loadidentity();
+    GD.cmd_translate(F16(shape->size / 2), F16(shape->size / 2));
+    GD.cmd_rotate(angle);
+    GD.cmd_translate(F16(-(shape->w / 2)), F16(-(shape->h / 2)));
+    GD.cmd_setmatrix();
+
+    int x0, y0;
+    x0 = x - (shape->size << 3);
+    y0 = y - (shape->size << 3);
+    GD.BitmapHandle(shape->handle);
+    GD.Cell(cell);
+    GD.Vertex2f(x0, y0);
+
+    GD.RestoreContext();
+  }
+};
+
+class Stack {
+  int8_t n;
+  int8_t *s;  // 0 means free
+public:
+  void initialize(int8_t *_s, size_t _n) {
+    s = _s;
+    n = _n;
+    memset(s, 0, n);
+  }
+  int8_t alloc(void) {
+    for (int8_t i = 0; i < n; i++)
+      if (s[i] == 0) {
+        s[i] = 1;
+        return i;
+      }
+    return -1;
+  }
+  void free(int8_t i) {
+    s[i] = 0;
+  }
+  int8_t alive() {
+    return next(-1);
+  }
+  int8_t next(int8_t i) {
+    i++;
+    for (; i < n; i++) {
+      if (t > 148000UL) {
+        REPORT(n);
+        REPORT(i);
+      }
+      if (s[i])
+        return i;
+    }
+    return -1;
+  }
+};
+
+
+#define NUM_MISSILES    8
+#define MISSILE_TRAIL   8
+#define NUM_FIRES      16
+#define NUM_EXPLOSIONS 16
+
+static const PROGMEM uint8_t fire_a[] = {0,1,2,3,4,5,6,7,8, 9,9, 10,10, 11,11, 12,12, 13,13, 14,14, 15,15, 16,16};
+
+class Fires {
+  int8_t ss[NUM_FIRES];
+  Stack stack;
+  Element e[NUM_FIRES];
+  byte anim[NUM_FIRES];
+public:
+  void initialize() {
+    stack.initialize(ss, sizeof(ss));
+  }
+  void create(int x, int y) {
+    int8_t i = stack.alloc();
+    if (i >= 0) {
+      e[i].set(&FIRE_SHAPE);
+      e[i].setxy(x, y);
+      anim[i] = 0;
+    }
+  }
+  void draw() {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      e[i].draw(pgm_read_byte(fire_a + anim[i]));
+  }
+  void update(int t) {
+    if ((t & 1) == 0) {
+      for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+        if (++anim[i] == sizeof(fire_a))
+          stack.free(i);
+      }
+    }
+  }
+};
+
+static const PROGMEM uint8_t explode_a[] = {0,1,2,3,4,5,5,6,6,7,7,8,8,9,9};
+
+class Explosions {
+  int8_t ss[NUM_EXPLOSIONS];
+  Stack stack;
+  RotatingElement e[NUM_EXPLOSIONS];
+  byte anim[NUM_EXPLOSIONS];
+public:
+  void initialize() {
+    stack.initialize(ss, sizeof(ss));
+  }
+  void create(int x, int y, uint16_t angle) {
+    int8_t i = stack.alloc();
+    if (i >= 0) {
+      e[i].set(&EXPLODE_BIG_SHAPE);
+      e[i].setxy_16ths(x, y);
+      e[i].angle = angle;
+      anim[i] = 0;
+    }
+    GD.play(KICKDRUM);
+  }
+  void draw() {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      e[i].draw(pgm_read_byte(explode_a + anim[i]));
+  }
+  void update(int t) {
+    if ((t & 1) == 0) {
+      for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+        if (++anim[i] == sizeof(explode_a))
+          stack.free(i);
+      }
+    }
+  }
+};
+
+#define NUM_SOLDIERS  3
+
+#define SOLDIER_LEFT   (-SOLDIER_RUN_WIDTH / 2)
+#define SOLDIER_RIGHT  (480 + (SOLDIER_RUN_WIDTH / 2))
+
+static const PROGMEM uint8_t soldier_a[] = {0,0,0,1,1,2,2,3,3,4,4,4,5,5,6,6,7,7};
+
+class SoldierObject {
+  Element e;
+  int8_t vx;
+  byte a;
+public:
+  void initialize(int8_t _vx) {
+    a = 0;
+    vx = _vx;
+    e.set(&SOLDIER_RUN_SHAPE);
+    e.setxy((e.x < 0) ? SOLDIER_RIGHT : SOLDIER_LEFT, 272 - SOLDIER_RUN_HEIGHT / 2);
+  }
+  void draw() {
+    e.draw(pgm_read_byte(soldier_a + a), vx > 0);
+  }
+  byte update(int t);
+};
+
+class Soldiers {
+  int8_t ss[NUM_SOLDIERS];
+  Stack stack;
+  SoldierObject soldiers[NUM_SOLDIERS];
+public:
+  void initialize() {
+    stack.initialize(ss, sizeof(ss));
+  }
+  void create() {
+    int8_t i = stack.alloc();
+    if (i >= 0) {
+      soldiers[i].initialize(PROB(1, 2) ? -1 : 1);
+    }
+  }
+  void draw() {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      soldiers[i].draw();
+  }
+  void update(int t) {
+    if ((t & 1) == 0) {
+      for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+        if (soldiers[i].update(t))
+          stack.free(i);
+      }
+    }
+    if (PROB(1, 100))
+      create();
+  }
+};
+
+
+#define HOMING_SPEED  32
+#define HOMING_SLEW  400
+
+class MissileObject {
+  RotatingElement e;
+  union {
+    struct { int16_t x, y; } trail[MISSILE_TRAIL];
+    int dir;
+  };
+  int8_t th, ts;
+  int16_t vx, vy;
+public:
+  void initialize(uint16_t angle, uint16_t vel) {
+    e.set(&MISSILE_A_SHAPE);
+    e.angle = angle;
+    e.setxy_16ths(16*240 - GD.rsin(16*110, angle),
+                  16*265 + GD.rcos(16*110, angle));
+    vx = -GD.rsin(vel, e.angle);
+    vy =  GD.rcos(vel, e.angle);
+    th = 0;
+    ts = 0;
+  }
+  void air(Element &o) {
+    e.set(&MISSILE_C_SHAPE);
+    e.setxy(o.x, o.y);
+    ts = -1;
+    trail[0].x = (vx < 0) ? -1 : 1;
+  }
+  void draw() {
+    byte player = (0 <= ts);
+    if (player) {
+      GD.Begin(LINE_STRIP);
+      for (int i = 0; i < ts; i++) {
+        GD.ColorA(255 - (i << 5));
+        GD.LineWidth(48 - (i << 2));
+        int j = (th - i) & (MISSILE_TRAIL - 1);
+        GD.Vertex2f(trail[j].x, trail[j].y);
+      }
+      GD.ColorA(255);
+      GD.Begin(BITMAPS);
+      e.angle = GD.atan2(vy, vx);
+    }
+    e.draw(0);
+    // if (!player) GD.cmd_number(e.x >> 4, e.y >>4, 26, OPT_CENTER | OPT_SIGNED, trail[0].x);
+  }
+  byte update(int t);
+  void blowup();
+  byte collide(Element &other) {
+    if (ts == -1)
+      return 0;
+    int dx = abs((e.x >> 4) - other.x);
+    int dy = abs((e.y >> 4) - other.y);
+    return (dx < 32) && (dy < 32);
+  }
+  byte hitbase() {
+    if (0 <= ts)
+      return 0;
+    int dx = abs((e.x >> 4) - 240);
+    int dy = abs((e.y >> 4) - 270);
+    return (dx < 50) && (dy < 50);
+  }
+  void tailpipe(int &x, int &y) {
+    uint16_t a = 0x8000 + e.angle;
+    x = e.x - GD.rsin(22 * 16, a);
+    y = e.y + GD.rcos(22 * 16, a);
+  }
+};
+
+class Missiles {
+  int8_t ss[NUM_MISSILES];
+  Stack stack;
+  MissileObject m[NUM_MISSILES];
+public:
+  void initialize() {
+    stack.initialize(ss, sizeof(ss));
+  }
+  void launch(uint16_t angle, uint16_t vel) {
+    int8_t i = stack.alloc();
+    if (i >= 0) {
+      m[i].initialize(angle, vel);
+    }
+  }
+  void airlaunch(Element &e, uint16_t angle, uint16_t vel) {
+    int8_t i = stack.alloc();
+    if (i >= 0) {
+      m[i].initialize(angle, 10);
+      m[i].air(e);
+    }
+  }
+  void draw() {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      m[i].draw();
+  }
+  byte collide(Element &e) {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      if (m[i].collide(e)) {
+        stack.free(i);
+        m[i].blowup();
+        return 1;
+      }
+    return 0;
+  }
+  byte hitbase() {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      if (m[i].hitbase()) {
+        stack.free(i);
+        m[i].blowup();
+        return 1;
+      }
+    return 0;
+  }
+  void update(int t) {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+      // REPORT(i);
+      if (m[i].update(t)) {
+        stack.free(i);
+        m[i].blowup();
+      }
+    }
+  }
+};
+
+#define NUM_SPLATS 10
+
+#define RED     0
+#define YELLOW  1
+
+class Sparks {
+  int x[NUM_SPLATS];
+  int y[NUM_SPLATS];
+  int8_t xv[NUM_SPLATS];
+  int8_t yv[NUM_SPLATS];
+  byte age[NUM_SPLATS];
+  byte kind[NUM_SPLATS];
+  int8_t ss[NUM_SPLATS];
+  Stack stack;
+public:
+  void initialize() {
+    stack.initialize(ss, sizeof(ss));
+  }
+  void launch(byte n, byte _kind, int _x, int _y) {
+    while (n--) {
+      int8_t i = stack.alloc();
+      if (i >= 0) {
+        uint16_t angle = 0x5000 + GD.random(0x6000);
+        byte v = 64 + (GD.random() & 63);
+        xv[i] = -GD.rsin(v, angle);
+        yv[i] =  GD.rcos(v, angle);
+        x[i] = _x - (xv[i] << 2);
+        y[i] = _y - (yv[i] << 2);
+        kind[i] = _kind;
+        age[i] = 0;
+      }
+    }
+  }
+  void draw() {
+    GD.Begin(LINES);
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+      byte size;
+      if (kind[i] == YELLOW) {
+        GD.ColorRGB(0xffe000);
+        size = 60;
+      } else {
+        GD.ColorRGB(0xc00000);
+        size = 100;
+      }
+      GD.LineWidth(GD.rsin(size, age[i] << 11)); //' sparks{
+      GD.Vertex2f(x[i], y[i]);
+      GD.Vertex2f(x[i] + xv[i], y[i] + yv[i]);  //' }sparks
+    }
+    GD.Begin(BITMAPS);
+  }
+  void update() {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+      x[i] += xv[i];
+      y[i] += yv[i];
+      yv[i] += 3;
+      if (++age[i] == 16)
+        stack.free(i);
+    }
+  }
+};
+
+#define NUM_REWARDS 3
+#define REWARDS_FONT INFOFONT_HANDLE
+
+class Rewards {
+  int x[NUM_REWARDS];
+  int y[NUM_REWARDS];
+  const char *amount[NUM_REWARDS];
+  byte age[NUM_REWARDS];
+  int8_t ss[NUM_REWARDS];
+  Stack stack;
+public:
+  void initialize() {
+    stack.initialize(ss, sizeof(ss));
+  }
+  void create(int _x, int _y, const char *_amount) {
+    int8_t i = stack.alloc();
+    if (i >= 0) {
+      x[i] = _x;
+      y[i] = _y;
+      amount[i] = _amount;
+      age[i] = 0;
+    }
+  }
+  void draw() {
+    GD.PointSize(24 * 16);
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+      GD.ColorA(255 - age[i] * 4);
+      GD.ColorRGB(0x000000);
+      GD.cmd_text(x[i] - 1, y[i] - 1, REWARDS_FONT, OPT_CENTER, amount[i]);
+      GD.ColorRGB(0xffffff);
+      GD.cmd_text(x[i], y[i], REWARDS_FONT, OPT_CENTER, amount[i]);
+    }
+  }
+  void update() {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i)) {
+      y[i]--;
+      if (++age[i] == 60)
+        stack.free(i);
+    }
+  }
+};
+
+#define THRESH  20
+
+class BaseObject {
+public:
+  RotatingElement turret;
+  Element front;
+  byte power;
+  byte prev_touching;
+  uint32_t cash;
+  byte life;
+  byte hurting;
+  void initialize() {
+    front.set(&DEFENSOR_FRONT_SHAPE);
+    front.setxy(240, 272 - 30);
+    turret.set(&DEFENSOR_TURRET_SHAPE);
+    turret.angle = 0x7000;
+    power = 0;
+    cash = 0;
+    life = 100;
+    hurting = 0;
+  }
+  void draw_base() {
+    // turret.angle += 200;
+    // if (turret.angle > 0xb800)
+    //   turret.angle = 0x4800;
+    turret.setxy_16ths(16*240 - GD.rsin(16*77, turret.angle),
+                16*265 + GD.rcos(16*77, turret.angle));
+    if (hurting && (hurting < 16)) {
+      GD.ColorA(255 - hurting * 16);
+      GD.ColorRGB(0xff0000);
+      GD.PointSize(50 * 16 + hurting * 99);
+      GD.Begin(POINTS);
+      GD.Vertex2ii(240, 270);
+      GD.ColorA(255);
+      GD.ColorRGB(0xffffff);
+      GD.Begin(BITMAPS);
+    }
+    turret.draw(0);
+    GD.ColorRGB(0x000000);
+    front.draw(0);
+    if (hurting)
+      GD.ColorRGB(0xff0000);
+    else
+      GD.ColorRGB(0xffffff);
+    front.draw(1);
+    GD.ColorRGB(0xffffff);
+  }
+  void draw_status() {
+    GD.SaveContext();
+    GD.Begin(LINES);
+
+    GD.ColorA(0x70);
+
+    GD.ColorRGB(0x000000);
+    GD.LineWidth(5 * 16);
+    GD.Vertex2ii(10, 10);
+    GD.Vertex2ii(10 + 460, 10);
+
+    if (power > THRESH) {
+      int x0 = (240 - power);
+      int x1 = (240 + power);
+
+      GD.ColorRGB(0xff6040);
+      GD.Vertex2ii(x0, 10);
+      GD.Vertex2ii(x1, 10);
+
+      GD.ColorA(0xff);
+      GD.ColorRGB(0xffd0a0);
+      GD.LineWidth(2 * 16);
+      GD.Vertex2ii(x0, 10);
+      GD.Vertex2ii(x1, 10);
+    }
+    GD.RestoreContext();
+    GD.ColorA(0xf0);
+    GD.ColorRGB(0xd7f2fd);
+    GD.Begin(BITMAPS);
+    GD.cmd_text(3, 16, INFOFONT_HANDLE, 0, "$");
+    GD.cmd_number(15, 16, INFOFONT_HANDLE, 0, cash);
+
+    GD.cmd_number(30, 32, INFOFONT_HANDLE, OPT_RIGHTX, life);
+    GD.cmd_text(30, 32, INFOFONT_HANDLE, 0, "/100");
+  }
+  void reward(uint16_t amt) {
+    cash += amt;
+  }
+  void damage() {
+    life = max(0, life - 9);
+    hurting = 1;
+  }
+  byte update(Missiles &missiles) {
+    byte touching = (GD.inputs.x != -32768);
+    if (touching)
+      power = min(230, power + 3);
+    if (!touching && prev_touching && (power > THRESH)) {
+      GD.play(HIHAT);
+      missiles.launch(turret.angle, power);
+      power = 0;
+    }
+    prev_touching = touching;
+    if ((GD.inputs.track_tag & 0xff) == 1)    //' track{
+      turret.angle = GD.inputs.track_val;     //' }track
+    if (hurting) {
+      if (++hurting == 30)
+        hurting = 0;
+    }
+    if (missiles.hitbase())
+      damage();
+    return (life != 0);
+  }
+};
+
+#define NUM_HELIS 5
+
+#define HELI_LEFT   (-HELI_WIDTH / 2)
+#define HELI_RIGHT  (480 + (HELI_WIDTH / 2))
+
+class HeliObject {
+  Element e;
+  int8_t vx, vy;
+  int8_t state;  // -1 means alive, 0..n is death anim
+public:
+  void initialize() {
+    e.set(&HELI_SHAPE);
+    int x;
+    if (PROB(1, 2)) {
+      vx = 1 + GD.random(2);
+      x = HELI_LEFT;
+    } else {
+      vx = -1 - GD.random(2);
+      x = HELI_RIGHT;
+    }
+    e.setxy(x, (HELI_HEIGHT / 2) + GD.random(100));
+    state = -1;
+    vy = 0;
+  }
+  void draw(byte anim) {
+    if (state == -1)
+      e.draw(anim, vx > 0);
+    else {
+      byte aframes[] = {0x00, 0x01, 0x02, 0x81, 0x80, 0x03, 0x83};
+      byte a = aframes[(state >> 1) % sizeof(aframes)];
+      e.draw(a & 0x7f, a & 0x80, 2);
+    }
+  }
+  byte update();
+};
+
+class Helis {
+  int8_t ss[NUM_HELIS];
+  Stack stack;
+  HeliObject m[NUM_HELIS];
+public:
+  void initialize() {
+    stack.initialize(ss, sizeof(ss));
+  }
+  void launch() {
+    int8_t i = stack.alloc();
+    if (i >= 0) {
+      m[i].initialize();
+    }
+  }
+  void draw(int t) {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      m[i].draw(((i + t) >> 2) & 1);
+  }
+  void update(byte level) {
+    for (int8_t i = stack.alive(); i >= 0; i = stack.next(i))
+      if (m[i].update())
+        stack.free(i);
+  }
+};
+
+class GameObject {
+public:
+  BaseObject base;
+  Missiles missiles;
+  Fires fires;
+  Explosions explosions;
+  Helis helis;
+  Soldiers soldiers;
+  Sparks sparks;
+  Rewards rewards;
+  byte level;
+  int t;
+  void load_level(byte n) {
+
+    level = n;
+    GD.Clear();
+    GD.cmd_text(240, 110, 29, OPT_CENTER, "LEVEL");
+    GD.cmd_number(240, 145, 31, OPT_CENTER, n + 1);
+    GD.swap();
+    GD.finish();
+
+    char filename[] = "night#.gd2";
+    filename[5] = '0' + (n % 5);
+    GD.load(filename);
+
+    if (n == 0)
+      base.initialize();
+    missiles.initialize();
+    fires.initialize();
+    explosions.initialize();
+    helis.initialize();
+    soldiers.initialize();
+    sparks.initialize();
+    rewards.initialize();
+    t = 0;
+  }
+  void draw() {
+    GD.Tag(1);
+    draw_dxt1(BACKGROUND_COLOR_HANDLE, BACKGROUND_BITS_HANDLE);
+    GD.TagMask(0);
+    GD.Begin(BITMAPS);
+    base.draw_base();
+    helis.draw(t);
+    soldiers.draw();
+    fires.draw();
+    missiles.draw();
+    explosions.draw();
+    sparks.draw();
+    rewards.draw();
+    base.draw_status();
+  }
+  byte update(byte playing) {
+    byte alive = base.update(missiles);
+    // if ((t % 30) == 29) missiles.launch(base.turret.angle, 120);
+    uint16_t launch;
+    launch = min(1024, 128 + level * 64);
+    if (GD.random() < launch)
+      helis.launch();
+    helis.update(level);
+    soldiers.update(t);
+    fires.update(t);
+    explosions.update(t);
+    sparks.update();
+    rewards.update();
+    missiles.update(t);
+    t++;
+
+    byte leveltime = min(50, 10 + level * 5);
+    if (playing && (t == (leveltime * 60))) {
+      load_level(level + 1);
+    }
+    return alive;
+  }
+};
+
+static GameObject game;
+
+void MissileObject::blowup() {
+  game.explosions.create(e.x, e.y /* - 16 * 40 */, e.angle);
+}
+
+byte MissileObject::update(int t)
+{
+  if (0 <= ts) {
+    if ((t & 1) == 0) {
+      th = (th + 1) & (MISSILE_TRAIL - 1);
+      trail[th].x = e.x;
+      trail[th].y = e.y;
+      ts = min(MISSILE_TRAIL, ts + 1);
+    }
+    vy += 4;
+  } else {
+    vx = -GD.rsin(HOMING_SPEED, e.angle);
+    vy = GD.rcos(HOMING_SPEED, e.angle);
+    int16_t dy = (16 * 272) - e.y;
+    int16_t dx = (16 * 240) - e.x;
+    uint16_t seek = GD.atan2(dy, dx);
+    int16_t steer = seek - e.angle;
+    if (abs(steer) > HOMING_SLEW)
+      e.angle -= dir * HOMING_SLEW;
+    else
+      dir = 0;
+    if (((t & 7) == 0) && PROB(7, 8)) {
+      int x, y;
+      tailpipe(x, y);
+      if ((0 <= y) && (0 <= x) && (x < (16 * 480)))
+        game.fires.create(x >> 4, y >> 4);
+    }
+  }
+  e.setxy_16ths(e.x + vx, e.y + vy);
+  // Return true if way offscreen
+  return (e.x < (16 * -200)) ||
+         (e.x > (16 * 680)) ||
+         (e.y > (16 * 262));
+}
+
+byte HeliObject::update()
+{
+  e.x += vx;
+  if (0 <= state) {
+    e.y += vy;
+    vy = min(vy + 1, 6);
+    state++;
+  }
+  if (PROB(1, 300)) {
+    game.missiles.airlaunch(e, (vx < 0) ? 0x4000 : 0xc000, vx);
+  }
+  if ((state == -1) && game.missiles.collide(e)) {
+    game.rewards.create(e.x, e.y, "+$100");
+    game.base.reward(100);
+    game.sparks.launch(8, YELLOW, e.x << 4, e.y << 4);
+    e.set(&COPTER_FALL_SHAPE);
+    state = 0;
+    vy = -4;
+    GD.play(TUBA, 36);
+  }
+  if ((0 <= state) && e.y > 252) {
+    game.sparks.launch(5, YELLOW, e.x << 4, e.y << 4);
+    game.explosions.create(e.x << 4, e.y << 4, 0x0000);
+    return 1;
+  }
+  return ((e.x < HELI_LEFT) || (e.x > HELI_RIGHT));
+}
+
+byte SoldierObject::update(int t)
+{
+  if ((t & 1) == 0) {
+    a = (a + 1) % sizeof(soldier_a);
+    e.x += vx;
+  }
+  if (game.missiles.collide(e)) {
+    game.fires.create(e.x, e.y);
+    game.rewards.create(e.x, e.y, "+$50");
+    game.base.reward(50);
+    game.sparks.launch(6, RED, e.x << 4, e.y << 4);
+    GD.play(TUBA, 108);
+    return 1;
+  }
+  return ((e.x < SOLDIER_LEFT) || (e.x > SOLDIER_RIGHT));
+}
+
+static void blocktext(int x, int y, byte font, const char *s)  //' context{
+{
+  GD.SaveContext();
+  GD.ColorRGB(0x000000);
+  GD.cmd_text(x-1, y-1, font, 0, s);
+  GD.cmd_text(x+1, y-1, font, 0, s);
+  GD.cmd_text(x-1, y+1, font, 0, s);
+  GD.cmd_text(x+1, y+1, font, 0, s);
+  GD.RestoreContext();
+
+  GD.cmd_text(x, y, font, 0, s);
+} //' }context
+
+static void draw_fade(byte fade)
+{
+  GD.TagMask(0);  //' fade{
+  GD.ColorA(fade);
+  GD.ColorRGB(0x000000);
+  GD.Begin(RECTS);
+  GD.Vertex2ii(0, 0);
+  GD.Vertex2ii(480, 272); //' }fade
+}
+
+static void welcome()
+{
+  Streamer stream;
+
+  GD.load("nightw.gd2");
+  byte fade = 0;
+  int t;
+
+  const char song[] = "mesmeriz.ima";
+  stream.begin(song);
+  byte playing = 1;
+  do {
+    GD.get_inputs();
+    if (GD.inputs.tag == 100)
+      fade = 1;
+    if (fade != 0)
+      fade = min(255, fade + 30);
+    draw_dxt1(BACKGROUND_COLOR_HANDLE, BACKGROUND_BITS_HANDLE);
+    GD.ColorRGB(0xd7f2fd);
+
+    blocktext(25, 16, WELCOME_DISPLAYFONT_HANDLE, "NIGHTSTRIKE");
+
+    byte flash = 128 + GD.rsin(127, t);
+    t += 1000;
+    GD.ColorA(flash);
+    GD.Tag(100);
+    blocktext(51, 114, WELCOME_DISPLAYFONT_HANDLE, "START");
+
+    draw_fade(fade);
+    GD.swap();
+    GD.random();
+    if (!stream.feed()) {
+      playing = 0;
+      GD.sample(0, 0, 0, 0);
+    }
+  } while (fade != 255);
+  GD.sample(0, 0, 0, 0);
+  // GD.play(MUTE); GD.play(UNMUTE);
+}
+
+void setup()
+{
+  Serial.begin(1000000);  // JCB
+  GD.begin();
+
+  GD.cmd_track(240, 271, 1, 1, 0x01);  //' cmd_track{ }cmd_track
+}
+
+void loop()
+{
+  static byte in_welcome = 1;
+  if (in_welcome) {
+    welcome();
+    game.load_level(0);
+    in_welcome = 0;
+  } else {
+    GD.get_inputs();
+    uint32_t t0 = millis();
+    byte alive = game.update(true);
+    game.draw();
+
+    if (!alive) {
+      for (byte i = 255; i; i--) {
+        game.draw();
+        draw_fade(255 - i);
+        GD.ColorA(255);
+        GD.ColorRGB(0xffffff);
+        blocktext(200, 136, INFOFONT_HANDLE, "GAME OVER");
+        GD.swap();
+        game.update(false);
+      }
+      in_welcome = 1;
+      GD.Clear();
+      GD.swap();
+      return;
+    }
+    // uint32_t took = millis() - t0;   // JCB
+    // GD.cmd_number(479, 100, 27, 3 | OPT_RIGHTX, took);   // JCB
+    // caption(t - 428, "Graphics by MindChamber");  // JCB
+    t++;  // JCB
+    GD.swap();
+  }
+  // GD.dumpscreen(); // JCB
+}

+ 41 - 0
noisy.ino

@@ -0,0 +1,41 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+#include "noisy_assets.h"
+
+void setup()
+{
+  Serial.begin(115200); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+static void saydigit(byte n)
+{
+  GD.ClearColorRGB(0x101000); // JCB{
+  GD.Clear();
+  GD.cmd_number(240, 136, 31, OPT_CENTER, n);
+  GD.swap();
+  GD.flush();
+// }JCB
+  uint32_t base, len;
+  switch (n) {
+    case 0: base = DIGIT_0; len = DIGIT_0_LENGTH; break;
+    case 1: base = DIGIT_1; len = DIGIT_1_LENGTH; break;
+    case 2: base = DIGIT_2; len = DIGIT_2_LENGTH; break;
+    case 3: base = DIGIT_3; len = DIGIT_3_LENGTH; break;
+    case 4: base = DIGIT_4; len = DIGIT_4_LENGTH; break;
+    case 5: base = DIGIT_5; len = DIGIT_5_LENGTH; break;
+    case 6: base = DIGIT_6; len = DIGIT_6_LENGTH; break;
+    case 7: base = DIGIT_7; len = DIGIT_7_LENGTH; break;
+    case 8: base = DIGIT_8; len = DIGIT_8_LENGTH; break;
+    case 9: base = DIGIT_9; len = DIGIT_9_LENGTH; break;
+  }
+  GD.sample(base, len, 8000, ADPCM_SAMPLES);
+}
+
+void loop()
+{
+  saydigit(GD.random(10)); delay(1000);
+} //' }A

+ 52 - 0
publish.py

@@ -0,0 +1,52 @@
+#!/usr/bin/python
+#
+# This program assembles the distribution file Gameduino2.zip
+# from the source .ino files, and the asset files in
+# converted-assets.
+#
+
+inventory = {
+    '1.Basics'      : "helloworld fizz blobs simon jpeg",
+    '2.Graphics'    : "logo walk tiled mono slotgag reflection",
+    '3.Peripherals' : "sketch tilt noisy song",
+    '4.Utilities'   : "viewer radarchart selftest",
+    '5.Demos'       : "cobra jnr kenney sprites widgets",
+    '6.Games'       : "nightstrike chess invaders frogger",
+}
+
+import zipfile
+
+def clean(src):
+    vis = 1
+    dst = []
+    for l in src:
+        assert not chr(9) in l, "Tab found in source"
+        if "//'" in l:
+            l = l[:l.index("//'")]
+        if vis and not "JCB" in l:
+            dst.append(l.rstrip() + "\n")
+        else:
+            if "JCB{" in l:
+                vis = 0
+            if "}JCB" in l:
+                vis = 1
+    return "".join(dst)
+
+z = zipfile.ZipFile("Gameduino2.zip", "w", zipfile.ZIP_DEFLATED)
+
+for f in "keywords.txt GD2.cpp GD2.h transports/wiring.h".split():
+    z.write(f, "Gameduino2/%s" % f)
+
+for d,projs in inventory.items():
+    dir = "Gameduino2" + "/" + d
+    for p in projs.split():
+        pd = dir + "/" + p
+        z.writestr("%s/%s.ino" % (pd, p), clean(open("%s.ino" % p)))
+        for l in open("%s.ino" % p):
+            if '#include "' in l:
+                hdr = l[10:l.rindex('"')]
+                z.write("converted-assets/%s" % hdr, "%s/%s" % (pd, hdr))
+
+z.close()
+
+# print ["./mkino %s" % s for s in " ".join(inventory.values()).split()]

+ 95 - 0
radarchart.ino

@@ -0,0 +1,95 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+void setup()
+{
+  Serial.begin(1000000); 
+  GD.begin();
+}
+
+static void ray(int &x, int &y, int r, int i)
+{
+  uint16_t th = 0x8000 + 65536UL * i / 7;
+  GD.polar(x, y, r, th);
+  x += 16 * 240;
+  y += 16 * 136;
+}
+
+static void drawdata(int *data)
+{
+  int x, y;
+  for (int i = 0; i < 7; i++) {
+    ray(x, y, data[i], i);
+    GD.Vertex2f(x, y);
+  }
+}
+
+void loop()
+{
+  GD.ClearColorRGB(0xffffff);
+  GD.Clear();
+  int x, y;
+  
+  GD.Begin(POINTS);
+  GD.ColorRGB(0x000000);
+
+  const char *labels[] = {"Eating","Drinking","Sleeping","Designing","Coding","Partying","Running"};
+  int align[7] = { OPT_CENTERX, 0, 0, 0, OPT_RIGHTX, OPT_RIGHTX, OPT_RIGHTX };
+
+  for (int i = 0; i < 7; i++) {
+    ray(x, y, 16 * 128, i);
+    GD.cmd_text(x >> 4, y >> 4, 26, OPT_CENTERY | align[i], labels[i]);
+  }
+
+  GD.ColorRGB(220, 220, 200);
+  GD.LineWidth(8);
+  GD.Begin(LINES);
+  for (int i = 0; i < 7; i++) {
+    GD.Vertex2ii(240, 136);
+    ray(x, y, 16 * 114, i);
+    GD.Vertex2f(x, y);
+  }
+  for (int r = 19; r <= 114; r += 19) {
+    GD.Begin(LINE_STRIP);
+    for (int i = 0; i < 8; i++) {
+      ray(x, y, 16 * r, i);
+      GD.Vertex2f(x, y);
+    }
+  }
+
+  int data[7];
+  for (int i = 0; i < 7; i++) {
+    int speed[] = { 5, 7, 6, 3, 4, 8, 2 };
+    data[i] = 900 + GD.rsin(700, 2 * speed[i] * millis());
+  }
+
+  GD.ColorRGB(151,187,205);
+
+  GD.SaveContext();
+  GD.ColorA(128);
+  Poly po;
+  po.begin();
+  for (int i = 0; i < 7; i++) {
+    ray(x, y, data[i], i);
+    po.v(x, y);
+  }
+  po.draw();
+  GD.RestoreContext();
+
+  GD.LineWidth(1 * 16);
+  GD.Begin(LINE_STRIP);
+  drawdata(data);
+  ray(x, y, data[0], 0);
+  GD.Vertex2f(x, y);
+
+  GD.Begin(POINTS);
+  GD.ColorRGB(0xffffff);
+  GD.PointSize(3.5 * 16);
+  drawdata(data);
+  GD.ColorRGB(151,187,205);
+  GD.PointSize(2.5 * 16);
+  drawdata(data);
+
+  GD.swap();
+} //' }A

+ 95 - 0
reflection.ino

@@ -0,0 +1,95 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "reflection_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+static void showit()
+{
+  GD.ColorMask(1,1,1,1);
+  GD.BlendFunc(DST_ALPHA, ZERO);
+  GD.Begin(RECTS);
+  GD.Vertex2ii(0, 0);
+  GD.Vertex2ii(480, 272);
+  GD.swap();
+}
+
+#define MASK_ALPHA()   GD.BlendFunc(ZERO, SRC_ALPHA)  //' A{
+
+void loop()
+{
+  int x = 240 - GAMEDUINO_WIDTH / 2;
+
+  GD.BitmapHandle(GRADIENT_HANDLE);
+  GD.BitmapSize(NEAREST, REPEAT, BORDER, 480, 272);
+
+  GD.Clear();
+  GD.ColorMask(1, 1, 1, 0);            // don't touch A yet
+  GD.cmd_gradient(0, 40, 0x505060,
+                  0, 272, 0xc0c080);
+
+  GD.Begin(BITMAPS);                   // top bitmap
+  GD.Vertex2ii(x, 80, GAMEDUINO_HANDLE);
+
+  GD.ColorMask(0, 0, 0, 1);
+  GD.BlendFunc(ONE, ZERO);
+  GD.Vertex2ii(0, 180, GRADIENT_HANDLE);
+
+                                       // invert the image
+  GD.cmd_translate(0, F16(GAMEDUINO_HEIGHT / 2));
+  GD.cmd_scale(F16(1), F16(-1));
+  GD.cmd_translate(0, -F16(GAMEDUINO_HEIGHT / 2));
+  GD.cmd_setmatrix();
+
+  MASK_ALPHA();                        // mask with gradient
+  GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
+
+  GD.ColorMask(1, 1, 1, 0);            // draw the reflection
+  GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
+  GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
+  GD.swap();
+// JCB{
+  return;
+  for (int i = 0; i < 100; i++) {
+    GD.Clear();
+    GD.ColorMask(0,0,0,1);
+    GD.BlendFunc(ONE, ZERO);
+    GD.Begin(BITMAPS);
+    GD.Vertex2ii(0, 180, GRADIENT_HANDLE);
+
+    showit();
+
+    GD.Clear();
+    GD.ColorMask(0,0,0,1);
+    GD.BlendFunc(ONE, ZERO);
+    GD.Begin(BITMAPS);
+    GD.Vertex2ii(0, 190, GRADIENT_HANDLE);
+    MASK_ALPHA();                                       // mask with gradient
+    GD.cmd_translate(0, F16(GAMEDUINO_HEIGHT / 2));
+    GD.cmd_scale(F16(1), F16(-1));
+    GD.cmd_translate(0, -F16(GAMEDUINO_HEIGHT / 2));
+    GD.cmd_setmatrix();
+    GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
+
+    showit();
+
+    GD.Clear();
+    GD.ColorMask(0,0,0,1);
+    GD.BlendFunc(ONE, ZERO);
+    GD.Begin(BITMAPS);
+    GD.cmd_translate(0, F16(GAMEDUINO_HEIGHT / 2));
+    GD.cmd_scale(F16(1), F16(-1));
+    GD.cmd_translate(0, -F16(GAMEDUINO_HEIGHT / 2));
+    GD.cmd_setmatrix();
+    GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
+
+    showit();
+  } // }JCB
+} //' }A

+ 479 - 0
selftest.ino

@@ -0,0 +1,479 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#define UART_SPEED 9600
+
+#include "selftest_assets.h"
+
+#define SCREEN_ADDR 0x30000UL
+
+byte x, y;
+
+static void log(const char*s)
+{
+  while (*s) {
+    char c = *s++;
+#ifndef RASPBERRY_PI
+    Serial.write(c);
+#endif
+    if (c == '\n') {
+      x = 0;
+      y++;
+    } else {
+      uint32_t dst = SCREEN_ADDR + (((x + (y * 48)) << 1));
+      GD.wr16(dst, 0x0f00 | c);
+      x++;
+    }
+  };
+}
+
+void setup()
+{
+  Serial.begin(UART_SPEED);
+  Serial.println("---- GAMEDUINO 2 SELFTEST ----");
+  GD.begin(0);
+}
+
+static void ramp(int y, uint32_t color)
+{
+  GD.ScissorSize(400, 8);
+  GD.ScissorXY(40, y);
+  GD.cmd_gradient(40, 0, 0x000000, 440, 0, color);
+}
+
+void testcard(int pass, const char *message)
+{
+  // GD.ClearColorRGB(0x204060);
+
+  GD.Clear();
+  GD.cmd_text(240, 12, 28, OPT_CENTER, "Gameduino2 Self test");
+
+  int y;
+
+  y = 50;
+  GD.Begin(POINTS);
+  for (int i = 0; i < 6; i++) {
+    byte l = 4 << i;
+    GD.PointSize(280);
+    GD.ColorRGB(0xffffff);
+    GD.Vertex2ii(68 * (i + 1), y, 0, 0);
+
+    GD.PointSize(240);
+    GD.ColorRGB(l, l, l);
+    GD.Vertex2ii(68 * (i + 1), y, 0, 0);
+  }
+  y += 30;
+
+  ramp(y, 0xff0000);  y += 12;
+  ramp(y, 0x00ff00);  y += 12;
+  ramp(y, 0x0000ff);  y += 12;
+  ramp(y, 0xffffff);  y += 12;
+  GD.RestoreContext();
+
+  // GD.Begin(BITMAPS);
+  // GD.Vertex2ii(0, 272 - (8 * 16), 1, 0);
+  // GD.Vertex2ii(480 - LENA_WIDTH, 272 - LENA_WIDTH, 0, 0);
+
+  if (pass == -1)
+    GD.ColorRGB(0x808000);
+  else
+    GD.ColorRGB(pass ? 0x40ff40 : 0xff4040);
+  GD.cmd_text(120, 180, 31, OPT_CENTERY, message);
+
+  GD.swap();
+
+}
+
+#define SCREENTEST(NAME) \
+  do { \
+  Serial.println(#NAME); \
+  testcard(-1, #NAME); \
+  r = test_##NAME(); \
+  const char* msg = r ? (#NAME ": pass") : (#NAME ": FAIL"); \
+  Serial.println(msg); \
+  testcard(r, msg); \
+  while (!r) ; \
+  } while (0)
+
+int test_ident()
+{
+  byte id = GD.rd(REG_ID);
+  if (id != 0x7c) {
+    Serial.println(id, HEX);
+    return 0;
+  }
+  return 1;
+}
+
+int test_clock()
+{
+  int SPEEDUP = 8;
+
+  GD.rd32(REG_CLOCK); // warm-up
+  delay(10);
+  long t1 = GD.rd32(REG_CLOCK);
+  delay(1000 / SPEEDUP);
+  long t2 = GD.rd32(REG_CLOCK);
+
+  float measured = float(t2 - t1);
+  // measured should be 48e6, within 2%
+  float expected = 48e6 / SPEEDUP;
+  Serial.println(measured, DEC);
+  Serial.println(expected, DEC);
+  float diff = measured - expected;
+  float percent = fabs(100 * (diff / expected));
+  return percent < 5.0;
+}
+
+int test_tune()
+{
+  GD.tune();
+  return 1;
+}
+
+static byte test_RAM(void)
+{
+  uint32_t a;
+  for (a = 0; a < 0x40000U; a += 947)
+    GD.wr(a, a);
+  for (a = 0; a < 0x40000U; a += 947)
+    if (GD.rd(a) != (a & 0xff))
+      return 0;
+  return 1;
+}
+
+static byte test_PWM(void)
+{
+  for (int i = 128; i >= 0; i--) {
+    GD.wr(REG_PWM_DUTY, i);
+    delay(2);
+  }
+  GD.wr(REG_PWM_DUTY, 128);
+  return 1;
+}
+
+static byte test_storage(void)
+{
+  GD.storage();
+  return test_ident();
+}
+
+static byte test_SDcard(void)
+{
+  for (byte i = 0; i < 2; i++) {
+    if (!GD.load("selftest.gd2"))
+      return 0;
+    uint32_t pcrc = GD.cmd_memcrc(0, ASSETS_END);
+    GD.finish();
+    uint32_t crc = GD.rd32(pcrc);
+    if (crc != KITTEN_CRC)
+      return 0;
+  }
+  return 1;
+}
+
+static int collect(int &rx, int &ry, int &rz)
+{
+  uint16_t ax = 0, ay = 0, az = 0;
+  for (byte i = 32; i; i--) {
+    int x = analogRead(A2);
+    int y = analogRead(A1);
+    int z = analogRead(A0);
+    ax += x;
+    ay += y;
+    az += z;
+  }
+  rx = ax >> 5;
+  ry = ay >> 5;
+  rz = az >> 5;
+}
+
+static byte test_accel2(void)
+{
+  while (1) {
+    GD.finish();
+    if ((millis() % 2000) < 1000)
+      GD.wr(REG_GPIO, 0x80);
+    else
+      GD.wr(REG_GPIO, 0x81);
+    int x, y, z;
+    collect(x, y, z);
+    GD.Clear();
+    GD.cmd_number(0,  40, 26, 3, x);
+    GD.cmd_slider(50,  40, 400, 10, 0, x, 512);
+
+    GD.cmd_number(0,   70, 26, 3, y);
+    GD.cmd_slider(50,  70, 400, 10, 0, y, 512);
+
+    GD.cmd_number(0,  100, 26, 3, GD.rd(REG_GPIO));
+    GD.cmd_slider(50, 100, 400, 10, 0, z, 512);
+    GD.swap();
+  }
+  return 1;
+}
+
+static byte test_accel(void)
+{
+  int x0, y0, z0;
+  int x1, y1, z1;
+
+  GD.wr(REG_GPIO, 0x80);
+  collect(x0, y0, z0);
+  delay(100);
+  GD.wr(REG_GPIO, 0x81);
+  delay(100);
+  collect(x1, y1, z1);
+
+  Serial.print(x0); Serial.print(" "); Serial.print(y0); Serial.print(" "); Serial.println(z0);
+  Serial.print(x1); Serial.print(" "); Serial.print(y1); Serial.print(" "); Serial.println(z1);
+
+  // if ((x0 > x1) || (y0 > y1) || (z0 > z1)) return 0;
+
+  int d;
+  d = abs(x0 - x1);
+  if ((d < 30) || (120 < d))
+    return 0;
+
+  d = abs(y0 - y1);
+  if ((d < 30) || (120 < d))
+    return 0;
+
+  d = abs(z0 - z1);
+  if ((d < 50) || (200 < d))
+    return 0;
+  
+  z0 %= 37;
+  while (z0--)
+    GD.random();
+
+  return 1;
+}
+
+static void play(uint16_t n)
+{
+  GD.wr16(REG_SOUND, n);
+  GD.wr(REG_PLAY, 1);
+}
+
+static void play_wait(uint16_t n)
+{
+  play(n);
+  while (GD.rd(REG_PLAY))
+    ;
+}
+
+static byte test_touch(void)
+{
+  GD.Clear();
+  GD.cmd_text(240, 100, 30, OPT_CENTERX, "please tap on the dot");
+  GD.self_calibrate();
+  // write the new calibration back to EEPROM
+
+#ifndef RASPBERRY_PI
+  for (int i = 0; i < 24; i++)
+    EEPROM.write(1 + i, GD.rd(REG_TOUCH_TRANSFORM_A + i));
+#endif
+
+  byte hit = 0;
+  while (hit != 0x0f) {
+    GD.finish();
+    byte tag = GD.rd(REG_TOUCH_TAG);
+    if ((1 <= tag) && (tag <= 4)) {
+      play(0x50);
+      hit |= (1 << (tag - 1));
+    }
+    if (tag == 77)
+      return 0;
+    GD.ClearTag(77);
+    GD.Clear();
+    GD.PointSize(20 * 16);
+    GD.Begin(POINTS);
+    for (byte i = 1; i <= 4; i++) {
+      if (hit & (1 << (i - 1))) {
+        GD.ColorRGB(0x00ff00);
+        GD.Tag(0xff);
+      } else {
+        GD.ColorRGB(0x808080);
+        GD.Tag(i);
+      }
+      switch (i) {
+        case 1: GD.Vertex2ii(20,  20, 0, 0);  break;
+        case 2: GD.Vertex2ii(460, 20, 0, 0);  break;
+        case 3: GD.Vertex2ii(20,  250, 0, 0);  break;
+        case 4: GD.Vertex2ii(460, 250, 0, 0);  break;
+      }
+    }
+    GD.random();  // scramble PRN state for later
+    GD.swap();
+  }
+  return 1;
+}
+
+static const PROGMEM uint32_t digits[11] = {
+  DIGIT_0,
+  DIGIT_1,
+  DIGIT_2,
+  DIGIT_3,
+  DIGIT_4,
+  DIGIT_5,
+  DIGIT_6,
+  DIGIT_7,
+  DIGIT_8,
+  DIGIT_9,
+  DIGIT_9 + DIGIT_9_LENGTH
+};
+
+static void saydigit(byte n)
+{
+  GD.wr32(REG_PLAYBACK_FREQ, 8000);
+  GD.wr32(REG_PLAYBACK_FORMAT, ADPCM_SAMPLES);
+
+  uint32_t dstart = pgm_read_dword(digits + n);
+  uint32_t dend = pgm_read_dword(digits + n + 1);
+  GD.wr32(REG_PLAYBACK_START, dstart);
+  GD.wr32(REG_PLAYBACK_LENGTH, dend - dstart);
+
+  GD.wr(REG_PLAYBACK_PLAY, 1);
+}
+
+static void blank(int n)
+{
+  for (int i = 0; i < n; i++) {
+    GD.get_inputs();
+    GD.cmd_gradient(0, 0, 0xb0b0a0, 0, 272, 0x404040);
+    GD.swap();
+  }
+}
+
+static byte getkey()
+{
+  byte prev_tag;
+  do {
+    prev_tag = GD.inputs.tag;
+    GD.get_inputs();
+    if (GD.inputs.x & 1)
+      GD.random();
+    GD.cmd_gradient(0, 0, 0xb0b0a0, 0, 272, 0x404040);
+    for (int i = 0; i < 9; i++) {
+      byte digit = i + 1;
+      int x = 120 + 80 * (i % 3);
+      int y = 20 + 80 * (i / 3);
+      GD.Tag(digit);
+      char msg[2] = { '0' + digit, 0 };
+      GD.cmd_fgcolor((digit == GD.inputs.tag) ? 0xc08000 : 0x003870);
+      GD.cmd_button(x, y, 70, 70, 31, 0, msg);
+    }
+    GD.swap();
+  } while (!((GD.inputs.tag == 0) && (1 <= prev_tag) && (prev_tag <= 9)));
+  return prev_tag;
+}
+
+static byte test_audio(void)
+{
+  // Stir up the PRN
+  for (int i = micros() % 97; i; i--)
+    GD.random();
+  blank(20);
+
+  for (int i = 0; i < 3; i++) {
+    byte d = 1 + GD.random(9);
+    saydigit(d);
+    blank(12);
+    if (getkey() != d)
+      return 0;
+  }
+
+  return 1;
+}
+
+static struct {
+  byte t, note;
+} pacman[]  = {
+  { 0, 71 },
+  { 2, 83 },
+  { 4, 78 },
+  { 6, 75 },
+  { 8, 83 },
+  { 9, 78 },
+  { 12, 75 },
+  { 16, 72 },
+  { 18, 84 },
+  { 20, 79 },
+  { 22, 76 },
+  { 24, 84 },
+  { 25, 79 },
+  { 28, 76 },
+  { 32, 71 },
+  { 34, 83 },
+  { 36, 78 },
+  { 38, 75 },
+  { 40, 83 },
+  { 41, 78 },
+  { 44, 75 },
+  { 48, 75 },
+  { 49, 76 },
+  { 50, 77 },
+  { 52, 77 },
+  { 53, 78 },
+  { 54, 79 },
+  { 56, 79 },
+  { 57, 80 },
+  { 58, 81 },
+  { 60, 83 },
+  { 255, 255 }
+};
+
+void loop()
+{
+  x = y = 0;
+  testcard(1, "Starting tests");
+  GD.finish();
+
+  Serial.println("Starting self-test");
+
+  byte r, pass = 1;
+
+  {
+    SCREENTEST(ident);
+    SCREENTEST(tune);
+    SCREENTEST(clock);
+    SCREENTEST(RAM);
+    SCREENTEST(PWM);
+    if (1) {
+      SCREENTEST(storage);
+      SCREENTEST(SDcard);
+    }
+    // SCREENTEST(accel);
+    if (1) {
+      SCREENTEST(touch);
+      SCREENTEST(audio);
+    }
+    testcard(1, "* ALL PASS *");
+    {
+      byte i = 0, t = 0;
+      for (;;) {
+        if (t == pacman[i].t)
+          GD.play(HARP, pacman[i++].note - 12);
+        delay(65);
+        if (++t == 64) {
+          t = 0;
+          i = 0;
+        }
+      }
+    }
+  }
+
+  if (pass) {
+    char msg[60];
+    log("All tests passed\n");
+    long seconds = millis() / 1000;
+    int minutes = seconds / 60;
+    sprintf(msg, "%d minutes", minutes);
+    log(msg);
+  } else {
+    for (;;)
+      ;
+  }
+  delay(5000);
+}

+ 115 - 0
simon.ino

@@ -0,0 +1,115 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+}
+
+#define DARK_GREEN      0x007000  //' a{
+#define LIGHT_GREEN     0x33ff33
+#define DARK_RED        0x700000
+#define LIGHT_RED       0xff3333
+#define DARK_YELLOW     0x707000
+#define LIGHT_YELLOW    0xffff33
+#define DARK_BLUE       0x007070
+#define LIGHT_BLUE      0x33ffff  //' }a
+
+void drawscreen(int pressed)  //' b{
+{
+  GD.get_inputs();  //' touch{
+  GD.Clear();       //' }touch
+
+  GD.PointSize(16 * 60);  // 60-pixel radius points
+  GD.Begin(POINTS);
+  GD.Tag(1);
+  if (pressed == 1)
+    GD.ColorRGB(LIGHT_GREEN);
+  else
+    GD.ColorRGB(DARK_GREEN);
+  GD.Vertex2ii(240 - 70, 136 - 70);
+
+  GD.Tag(2);
+  if (pressed == 2)
+    GD.ColorRGB(LIGHT_RED);
+  else
+    GD.ColorRGB(DARK_RED);
+  GD.Vertex2ii(240 + 70, 136 - 70);
+
+  GD.Tag(3);
+  if (pressed == 3)
+    GD.ColorRGB(LIGHT_YELLOW);
+  else
+    GD.ColorRGB(DARK_YELLOW);
+  GD.Vertex2ii(240 - 70, 136 + 70);
+
+  GD.Tag(4);
+  if (pressed == 4)
+    GD.ColorRGB(LIGHT_BLUE);
+  else
+    GD.ColorRGB(DARK_BLUE);
+  GD.Vertex2ii(240 + 70, 136 + 70);
+
+  GD.swap();
+} //' }b
+
+void play(int pressed) //' play{
+{
+  //                 G   R   Y   B
+  //                 E3  A4  C#4 E4
+  byte note[] = { 0, 52, 69, 61, 64 };
+  GD.play(BELL, note[pressed]);
+  for (int i = 0; i < 30; i++)
+    drawscreen(pressed);
+  for (int i = 0; i < 15; i++)
+    drawscreen(0);
+} //' }play
+
+static int get_note() //' getnote{
+{
+  byte pressed = 0;
+  while (pressed == 0) {
+    GD.random();
+    drawscreen(0);
+    if ((1 <= GD.inputs.tag) && (GD.inputs.tag <= 4))
+      pressed = GD.inputs.tag;
+#ifdef EMUPC    // JCB{
+    pressed = 1;
+#endif          // }JCB
+  }
+  play(pressed);
+  return pressed;
+} //' }getnote
+
+static int random_note()
+{
+  return 1 + GD.random(4);
+}
+
+void loop() //' loop{
+{
+  int sequence[100];
+  int length = 0;
+
+  while (1) {
+    delay(500);
+
+    sequence[length++] = random_note();
+
+    for (int i = 0; i < length; i++)
+      play(sequence[i]);
+
+    for (int i = 0; i < length; i++) {
+      int pressed = get_note();
+      if (pressed != sequence[i]) {
+        for (int i = 69; i > 49; i--) {
+          GD.play(BELL, i);
+          delay(50);
+        }
+        return;
+      }
+    }
+  }
+} //' }loop

+ 25 - 0
sketch.ino

@@ -0,0 +1,25 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+void setup() //' a{
+{
+  Serial.begin(115200); // JCB
+  GD.begin();
+  GD.cmd_memset(0, 0, 480UL * 272UL);   // clear the bitmap
+  GD.Clear();                           // draw the bitmap
+  GD.BitmapLayout(L8, 480, 272);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, 480, 272);
+  GD.Begin(BITMAPS);
+  GD.Vertex2ii(0, 0);
+  GD.swap();
+  GD.cmd_sketch(0, 0, 480, 272, 0, L8); // start sketching
+  GD.finish();                          // flush all commands
+}
+
+void loop() { } //' }a
+/* JCB{
+  delay(60000);
+  GD.cmd_stop();
+  GD.dumpscreen();
+} }JCB */ 

+ 38 - 0
slotgag.ino

@@ -0,0 +1,38 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+#include "slotgag_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+void loop()
+{
+  GD.Clear();
+  GD.ColorMask(1, 1, 1, 0);
+  GD.Begin(BITMAPS);
+  GD.BitmapHandle(BACKGROUND_HANDLE);
+  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272);
+  GD.Vertex2ii(0, 0, BACKGROUND_HANDLE);
+
+  GD.ColorMask(1, 1, 1, 1);
+  GD.ColorRGB(0xa0a0a0);  
+  GD.Vertex2ii(240 - GAMEDUINO_WIDTH / 2, //' a{
+               136 - GAMEDUINO_HEIGHT / 2,
+               GAMEDUINO_HANDLE);
+
+  static int x = 0;
+  GD.LineWidth(20 * 16);
+  GD.BlendFunc(DST_ALPHA, ONE);
+  GD.Begin(LINES);
+  GD.Vertex2ii(x, 0);
+  GD.Vertex2ii(x + 100, 272);
+  x = (x + 20) % 480; //' }a
+
+  GD.swap();
+} //' }A

+ 28 - 0
song.ino

@@ -0,0 +1,28 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+#define MUSICFILE   "mesmeriz.ima"
+
+static Streamer stream;
+
+void setup()
+{
+  Serial.begin(115200); // JCB
+  GD.begin();
+  stream.begin(MUSICFILE);
+}
+
+void loop()
+{
+  GD.cmd_gradient(0, 40, 0x282830,
+                  0, 272, 0x606040);
+  GD.cmd_text(240, 100, 31, OPT_CENTER, MUSICFILE);
+  uint16_t val, range;
+  stream.progress(val, range);
+  GD.cmd_slider(30, 160, 420, 8, 0, val, range);
+  GD.swap();
+  GD.finish();
+  stream.feed();
+  // static int t; if (++t == 3600) GD.dumpscreen(); // JCB
+} //' }A

+ 46 - 0
sprites.ino

@@ -0,0 +1,46 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#include "sprites_assets.h"
+
+void setup()
+{
+  GD.begin();
+
+  LOAD_ASSETS();
+}
+
+static byte t;
+
+void loop()
+{
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  byte j = t;
+  uint32_t v, r;
+
+  int nspr = min(2001, max(256, 19 * t));
+
+  const PROGMEM uint32_t *pv = sprites;
+  for (int i = 0; i < nspr; i++) {
+    v = pgm_read_dword(pv++);
+    r = pgm_read_dword(circle + j++);
+    GD.cmd32(v + r);
+  }
+
+  GD.ColorRGB(0x000000);  //' line{
+  GD.ColorA(140);
+  GD.LineWidth(28 * 16);
+  GD.Begin(LINES);
+  GD.Vertex2ii(240 - 110, 136, 0, 0);
+  GD.Vertex2ii(240 + 110, 136, 0, 0); //' }line
+
+  GD.RestoreContext();
+
+  GD.cmd_number(215, 110, 31, OPT_RIGHTX, nspr);
+  GD.cmd_text(  229, 110, 31, 0, "sprites");
+
+  GD.swap();
+  t++;
+}

+ 72 - 0
tempest.ino

@@ -0,0 +1,72 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+static int x0[17], yy0[17];
+static int x1[17], yy1[17];
+
+void setup()
+{
+  Serial.begin(115200); // JCB
+  GD.begin();
+  for (byte th = 0; th < 17; th++) {
+    int x, y;
+    GD.polar(x, y, 16 * 128, th << 12);
+    x0[th] = 16 * 240 + x;
+    yy0[th] = 16 * 136 + y;
+    GD.polar(x, y, 16 * 16, th << 12);
+    x1[th] = 16 * 240 + x;
+    yy1[th] = 16 * 190 + y;
+  }
+}
+
+static void polar(int r, uint16_t th)
+{
+  int x, y;
+  GD.polar(x, y, 16 * r, th);
+  GD.Vertex2f(16 * 240 + x, 16 * 136 + y);
+}
+
+static void drawgame()
+{
+  GD.ColorRGB(0x2020ff);
+  GD.Begin(LINE_STRIP);
+  for (byte i = 0; i < 17; i++)
+    GD.Vertex2f(x0[i], yy0[i]);
+  GD.Begin(LINE_STRIP);
+  for (byte i = 0; i < 17; i++)
+    GD.Vertex2f(x1[i], yy1[i]);
+  GD.Begin(LINES);
+  for (byte i = 0; i < 17; i++) {
+    GD.Vertex2f(x0[i], yy0[i]);
+    GD.Vertex2f(x1[i], yy1[i]);
+  }
+  GD.ColorRGB(0xffff00);
+  GD.Begin(LINE_STRIP);
+  polar(128, 0x3000);
+  polar(142, 0x3900);
+  polar(128, 0x4000);
+  polar(118, 0x3c00);
+  polar(128, 0x3e00);
+  polar(134, 0x3900);
+  polar(128, 0x3300);
+  polar(118, 0x3400);
+  polar(128, 0x3000);
+}
+
+void loop()
+{
+  GD.Clear();                   // Clear to black //' draw{
+
+  GD.ColorA(0x30);              // Draw background glows
+  GD.LineWidth(48);
+  drawgame();
+
+  GD.ColorA(0xff);              // Draw foreground vectors
+  GD.LineWidth(10);
+  GD.BlendFunc(SRC_ALPHA, ONE); // additive blending
+  drawgame(); //' }draw
+
+  GD.swap();  
+  // GD.dumpscreen();    // JCB
+}

+ 23 - 0
tiled.ino

@@ -0,0 +1,23 @@
+#include <EEPROM.h> //' a{
+#include <SPI.h>
+#include <GD2.h>
+
+#include "tiled_assets.h"
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+}
+
+void loop()
+{
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  GD.BitmapSize(BILINEAR, REPEAT, REPEAT, 480, 272);
+  GD.cmd_rotate(3333);
+  GD.cmd_setmatrix();
+  GD.Vertex2ii(0, 0);
+  GD.swap();
+} //' }a

+ 30 - 0
tilt.ino

@@ -0,0 +1,30 @@
+#include <EEPROM.h> //' A{
+#include <SPI.h>
+#include <GD2.h>
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+}
+
+void loop()
+{
+  GD.get_inputs();
+  int x, y, z;
+  GD.get_accel(x, y, z);
+
+  GD.Clear();
+  GD.LineWidth(16 * 3);
+  int xp = 240 + x;
+  int yp = 136 + y;
+  GD.Begin(LINES);
+  GD.Vertex2f(16 * 240, 16 * 136);
+  GD.Vertex2f(16 * xp, 16 * yp);
+
+  GD.PointSize(16 * 40);
+  GD.Begin(POINTS);
+  GD.Vertex2f(16 * xp, 16 * yp);
+
+  GD.swap();
+} //' }A

+ 39 - 0
transports/dump.h

@@ -0,0 +1,39 @@
+class GDTransport {
+  FILE *dumpfile;
+public:
+  void begin(void) {
+    dumpfile = fopen("dump", "wb");
+    if (!dumpfile) {
+      perror("dump");
+      exit(1);
+    }
+  }
+  void cmdbyte(byte x) {
+    putc(x, dumpfile);
+  }
+  void cmd32(uint32_t x) {
+    putc(x & 0xff, dumpfile);
+    putc((x >> 8) & 0xff, dumpfile);
+    putc((x >> 16) & 0xff, dumpfile);
+    putc((x >> 24) & 0xff, dumpfile);
+  }
+  void cmd_n(byte *s, size_t n) {
+    while (n--)
+      putc(*s++, dumpfile);
+  }
+  uint8_t rd(uint32_t a) { return 0xff; }
+  void wr(uint32_t a, uint8_t v) { }
+  uint16_t rd16(uint32_t a) { return 0xff; }
+  void wr16(uint32_t a, uint16_t v) { }
+  uint32_t rd32(uint32_t a) { return 0xff; }
+  void rd_n(byte *dst, uint32_t addr, uint16_t n) { }
+  void wr_n(uint32_t addr, byte *src, uint16_t n) { }
+  void wr32(uint32_t a, uint32_t v) { }
+  void flush() { }
+  void finish() { }
+  void __end() { }
+  uint32_t getwp(void) { return 0; }
+  void bulk(uint32_t addr) {}
+  void resume(void) {}
+};
+

+ 34 - 0
transports/serial.h

@@ -0,0 +1,34 @@
+class GDTransport {
+public:
+  void begin(void) {
+    Serial.begin(115200);
+    // Serial.println("----- START -----");
+  }
+  void cmdbyte(byte x) {
+    Serial.println(x, HEX);
+  }
+  void cmd32(uint32_t x) {
+    Serial.println(x & 0xff, HEX);
+    Serial.println((x >> 8) & 0xff, HEX);
+    Serial.println((x >> 16) & 0xff, HEX);
+    Serial.println((x >> 24) & 0xff, HEX);
+  }
+  void cmd_n(byte *s, size_t n) {
+    while (n--)
+      Serial.println(*s++, HEX);
+  }
+  uint8_t rd(uint32_t a) { return 0xff; }
+  void wr(uint32_t a, uint8_t v) { }
+  uint16_t rd16(uint32_t a) { return 0xff; }
+  void wr16(uint32_t a, uint16_t v) { }
+  uint32_t rd32(uint32_t a) { return 0xff; }
+  void rd_n(byte *dst, uint32_t addr, uint16_t n) { }
+  void wr32(uint32_t a, uint32_t v) { }
+  void flush() { }
+  void finish() { }
+  void __end() { }
+  uint32_t getwp(void) { return 0; }
+  void bulk(uint32_t addr) {}
+  void resume(void) {}
+};
+

+ 275 - 0
transports/spidev.h

@@ -0,0 +1,275 @@
+class GDTransport {
+  int fd;
+  uint8_t writebuf[4096];
+  size_t nwrite;
+
+public:
+  void begin() {
+    const char *DEV = "/dev/spidev0.0";
+    fd = open(DEV, O_RDWR);
+    if (fd <= 0) {
+      perror(DEV);
+      exit(1);
+    }
+
+    uint32_t speed = 500000;
+    ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
+
+    scu(0, 0, 0);
+#if PROTO == 0
+    scu(0x44, 0, 0); // from external crystal
+#endif
+#if PROTO == 1
+    scu(0x48, 0, 0);    // from internal oscillator
+#endif
+    scu(0x68, 0, 0);
+    delay(50);
+
+    wp = 0;
+    freespace = 4096 - 4;
+
+    stream();
+  }
+
+  static void default_spi_ioc(struct spi_ioc_transfer *ps) {
+    memset(ps, 0, sizeof(*ps));
+    ps->speed_hz = 20000000;
+    ps->bits_per_word = 8;
+  }
+
+  // Raw read from GD2 memory
+  void __read(void *dst, uint32_t addr, uint32_t n) {
+    struct spi_ioc_transfer mesg[2];
+    default_spi_ioc(&mesg[0]);
+    default_spi_ioc(&mesg[1]);
+
+    uint8_t tx[] = {(addr >> 16) & 0xff, (addr >> 8) & 0xff, (addr >> 0) & 0xff, 0xff};
+
+    mesg[0].tx_buf = (__u64)tx;
+    mesg[0].len = 4;
+    mesg[0].cs_change = 0;
+
+    mesg[1].rx_buf = (__u64)dst;
+    mesg[1].len = n;
+    mesg[1].cs_change = 1;
+
+    ioctl(fd, SPI_IOC_MESSAGE(2), mesg);
+    // printf("__read(%x %d) %x\n", addr, n, *(byte*)dst);
+  }
+
+  // Raw write to GD2 memory
+  void __write(uint32_t addr, void *src, uint32_t n) {
+    // printf("__write(%x %d)\n", addr, n);
+    fflush(stdout);
+    struct spi_ioc_transfer mesg[2];
+    default_spi_ioc(&mesg[0]);
+    default_spi_ioc(&mesg[1]);
+
+    uint8_t tx[] = {0x80 | ((addr >> 16) & 0xff), (addr >> 8) & 0xff, (addr >> 0) & 0xff};
+
+    mesg[0].tx_buf = (__u64)tx;
+    mesg[0].len = 3;
+    mesg[0].cs_change = 0;
+
+    mesg[1].tx_buf = (__u64)src;
+    mesg[1].len = n;
+    mesg[1].cs_change = 1;
+
+    ioctl(fd, SPI_IOC_MESSAGE(2), mesg);
+  }
+
+  void spisend(uint8_t b) {
+    writebuf[nwrite++] = b;
+  }
+  void cmd32(uint32_t x) {
+    if (freespace < 4) {
+      getfree(4);
+    }
+    wp += 4;
+    freespace -= 4;
+    union {
+      uint32_t c;
+      uint8_t b[4];
+    };
+    c = x;
+    spisend(b[0]);
+    spisend(b[1]);
+    spisend(b[2]);
+    spisend(b[3]);
+  }
+  void cmdbyte(byte x) {
+    if (freespace == 0) {
+      getfree(1);
+    }
+    wp++;
+    freespace--;
+    spisend(x);
+  }
+  void cmd_n(byte *s, uint16_t n) {
+    if (freespace < n) {
+      getfree(n);
+    }
+    wp += n;
+    freespace -= n;
+    while (n) {
+      n --;
+      spisend(*s++);
+    }
+  }
+
+  void flush() {
+    getfree(0);
+  }
+  uint16_t rp() {
+    uint16_t r = __rd16(REG_CMD_READ);
+    if (r == 0xfff) {
+      REPORT(/*EXCEPTION*/r);
+      for (;;) ;
+    }
+    return r;
+  }
+  void finish() {
+    wp &= 0xffc;
+    stopstream();
+    __wr16(REG_CMD_WRITE, wp);
+    while (rp() != wp)
+      ;
+    stream();
+  }
+
+  byte rd(uint32_t addr)
+  {
+    stopstream(); // stop streaming
+    byte r;
+    __read(&r, addr, 1);
+    stream();
+    return r;
+  }
+
+  void wr(uint32_t addr, byte v)
+  {
+    stopstream(); // stop streaming
+    __write(addr, &v, 1);
+    stream();
+  }
+
+  uint16_t rd16(uint32_t addr)
+  {
+    stopstream(); // stop streaming
+    uint16_t r = 0;
+    __read(&r, addr, 2);
+    stream();
+    return r;
+  }
+
+  void wr16(uint32_t addr, uint32_t v)
+  {
+    stopstream(); // stop streaming
+    __write(addr, &v, 2);
+    stream();
+  }
+
+  uint32_t rd32(uint32_t addr)
+  {
+    stopstream(); // stop streaming
+    uint32_t r = 0;
+    __read(&r, addr, 4);
+    stream();
+    return r;
+  }
+  void rd_n(byte *dst, uint32_t addr, uint32_t n)
+  {
+    stopstream(); // stop streaming
+    __read(dst, addr, n);
+    stream();
+  }
+  void wr_n(uint32_t addr, byte *src, uint32_t n)
+  {
+    stopstream(); // stop streaming
+    __write(addr, src, n);
+    stream();
+  }
+
+  void wr32(uint32_t addr, unsigned long v)
+  {
+    stopstream(); // stop streaming
+    __write(addr, &v, 4);
+    stream();
+  }
+
+  uint32_t getwp(void) {
+    return RAM_CMD + (wp & 0xffc);
+  }
+
+  void bulk(uint32_t addr) {
+    /*
+    __end(); // stop streaming
+    __start(addr);
+    */
+  }
+  void resume(void) {
+    stream();
+  }
+
+  void stopstream() // flush any streamed output
+  {
+    if (nwrite != 0) {
+      __write(wptr0, writebuf, nwrite);
+      nwrite = 0;
+    }
+  }
+
+  void stop() // end the SPI transaction
+  {
+    wp &= 0xffc;
+    stopstream();
+    __wr16(REG_CMD_WRITE, wp);
+    // while (__rd16(REG_CMD_READ) != wp) ;
+  }
+  void __end() // end the SPI transaction
+  {
+    stopstream();
+  }
+
+  void stream(void) {
+    nwrite = 0;
+    wptr0 = RAM_CMD + wp;
+  }
+
+  uint16_t __rd16(uint32_t addr)
+  {
+    uint16_t r;
+    __read(&r, addr, sizeof(r));
+    return r;
+  }
+
+  void __wr16(uint32_t addr, uint16_t v)
+  {
+    __write(addr, &v, sizeof(v));
+  }
+
+  void scu(byte a, byte b, byte c)
+  {
+    uint8_t scu0[3] = { a, 0x00, 0x00 };
+    write(fd, scu0, 3);
+    delay(4);
+  }
+
+  void getfree(uint16_t n)
+  {
+    wp &= 0xfff;
+    stopstream();
+    __wr16(REG_CMD_WRITE, wp & 0xffc);
+    do {
+      uint16_t fullness = (wp - rp()) & 4095;
+      freespace = (4096 - 4) - fullness;
+    } while (freespace < n);
+    stream();
+  }
+
+  byte streaming;
+  uint16_t wp;
+  uint16_t freespace;
+  uint32_t wptr0;
+};
+

+ 275 - 0
transports/wiring.h

@@ -0,0 +1,275 @@
+#ifndef CS
+#define CS 8
+#endif
+
+class GDTransport {
+public:
+  void ios() {
+    pinMode(CS, OUTPUT);
+    digitalWrite(CS, HIGH);
+    pinMode(9, OUTPUT);
+    digitalWrite(9, HIGH);
+    SPI.begin();
+  }
+  void begin() {
+    ios();
+
+    SPI.begin();
+    SPI.setClockDivider(SPI_CLOCK_DIV2);
+    SPSR = (1 << SPI2X);
+
+    hostcmd(0x00);
+#if PROTO == 0
+    hostcmd(0x44); // from external crystal
+#endif
+    hostcmd(0x68);
+
+    wp = 0;
+    freespace = 4096 - 4;
+
+    stream();
+  }
+
+  void cmd32(uint32_t x) {
+    if (freespace < 4) {
+      getfree(4);
+    }
+    wp += 4;
+    freespace -= 4;
+    union {
+      uint32_t c;
+      uint8_t b[4];
+    };
+    c = x;
+    SPI.transfer(b[0]);
+    SPI.transfer(b[1]);
+    SPI.transfer(b[2]);
+    SPI.transfer(b[3]);
+  }
+  void cmdbyte(byte x) {
+    if (freespace == 0) {
+      getfree(1);
+    }
+    wp++;
+    freespace--;
+    SPI.transfer(x);
+  }
+  void cmd_n(byte *s, uint16_t n) {
+    if (freespace < n) {
+      getfree(n);
+    }
+    wp += n;
+    freespace -= n;
+    while (n > 8) {
+      n -= 8;
+      SPI.transfer(*s++);
+      SPI.transfer(*s++);
+      SPI.transfer(*s++);
+      SPI.transfer(*s++);
+      SPI.transfer(*s++);
+      SPI.transfer(*s++);
+      SPI.transfer(*s++);
+      SPI.transfer(*s++);
+    }
+    while (n--)
+      SPI.transfer(*s++);
+  }
+
+  void flush() {
+    getfree(0);
+  }
+  uint16_t rp() {
+    uint16_t r = __rd16(REG_CMD_READ);
+    if (r == 0xfff) {
+      REPORT(/*EXCEPTION*/r);
+      for (;;) ;
+    }
+    return r;
+  }
+  void finish() {
+    wp &= 0xffc;
+    __end();
+    __wr16(REG_CMD_WRITE, wp);
+    while (rp() != wp)
+      ;
+    stream();
+  }
+
+  byte rd(uint32_t addr)
+  {
+    __end(); // stop streaming
+    __start(addr);
+    SPI.transfer(0);  // dummy
+    byte r = SPI.transfer(0);
+    stream();
+    return r;
+  }
+
+  void wr(uint32_t addr, byte v)
+  {
+    __end(); // stop streaming
+    __wstart(addr);
+    SPI.transfer(v);
+    stream();
+  }
+
+  uint16_t rd16(uint32_t addr)
+  {
+    uint16_t r = 0;
+    __end(); // stop streaming
+    __start(addr);
+    SPI.transfer(0);
+    r = SPI.transfer(0);
+    r |= (SPI.transfer(0) << 8);
+    stream();
+    return r;
+  }
+
+  void wr16(uint32_t addr, uint32_t v)
+  {
+    __end(); // stop streaming
+    __wstart(addr);
+    SPI.transfer(v);
+    SPI.transfer(v >> 8);
+    stream();
+  }
+
+  uint32_t rd32(uint32_t addr)
+  {
+    __end(); // stop streaming
+    __start(addr);
+    SPI.transfer(0);
+    union {
+      uint32_t c;
+      uint8_t b[4];
+    };
+    b[0] = SPI.transfer(0);
+    b[1] = SPI.transfer(0);
+    b[2] = SPI.transfer(0);
+    b[3] = SPI.transfer(0);
+    stream();
+    return c;
+  }
+  void rd_n(byte *dst, uint32_t addr, uint16_t n)
+  {
+    __end(); // stop streaming
+    __start(addr);
+    SPI.transfer(0);
+    while (n--)
+      *dst++ = SPI.transfer(0);
+    stream();
+  }
+  void wr_n(uint32_t addr, byte *src, uint16_t n)
+  {
+    __end(); // stop streaming
+    __wstart(addr);
+    while (n--)
+      SPI.transfer(*src++);
+    stream();
+  }
+
+  void wr32(uint32_t addr, unsigned long v)
+  {
+    __end(); // stop streaming
+    __wstart(addr);
+    SPI.transfer(v);
+    SPI.transfer(v >> 8);
+    SPI.transfer(v >> 16);
+    SPI.transfer(v >> 24);
+    stream();
+  }
+
+  uint32_t getwp(void) {
+    return RAM_CMD + (wp & 0xffc);
+  }
+
+  void bulk(uint32_t addr) {
+    __end(); // stop streaming
+    __start(addr);
+  }
+  void resume(void) {
+    // REPORT(__rd16(REG_ID));
+    stream();
+  }
+
+  static void __start(uint32_t addr) // start an SPI transaction to addr
+  {
+    digitalWrite(CS, LOW);
+    SPI.transfer(addr >> 16);
+    SPI.transfer(highByte(addr));
+    SPI.transfer(lowByte(addr));  
+  }
+
+  static void __wstart(uint32_t addr) // start an SPI write transaction to addr
+  {
+    digitalWrite(CS, LOW);
+    SPI.transfer(0x80 | (addr >> 16));
+    SPI.transfer(highByte(addr));
+    SPI.transfer(lowByte(addr));  
+  }
+
+  static void __end() // end the SPI transaction
+  {
+    digitalWrite(CS, HIGH);
+  }
+
+  void stop() // end the SPI transaction
+  {
+    wp &= 0xffc;
+    __end();
+    __wr16(REG_CMD_WRITE, wp);
+    // while (__rd16(REG_CMD_READ) != wp) ;
+  }
+
+  void stream(void) {
+    __end();
+    __wstart(RAM_CMD + (wp & 0xfff));
+  }
+
+  static unsigned int __rd16(uint32_t addr)
+  {
+    unsigned int r;
+
+    __start(addr);
+    SPI.transfer(0);  // dummy
+    r = SPI.transfer(0);
+    r |= (SPI.transfer(0) << 8);
+    __end();
+    return r;
+  }
+
+  static void __wr16(uint32_t addr, unsigned int v)
+  {
+    __wstart(addr);
+    SPI.transfer(lowByte(v));
+    SPI.transfer(highByte(v));
+    __end();
+  }
+
+  static void hostcmd(byte a)
+  {
+    digitalWrite(CS, LOW);
+    SPI.transfer(a);
+    SPI.transfer(0x00);
+    SPI.transfer(0x00);
+    digitalWrite(CS, HIGH);
+    delay(60);
+  }
+
+  void getfree(uint16_t n)
+  {
+    wp &= 0xfff;
+    __end();
+    __wr16(REG_CMD_WRITE, wp & 0xffc);
+    do {
+      uint16_t fullness = (wp - rp()) & 4095;
+      freespace = (4096 - 4) - fullness;
+    } while (freespace < n);
+    stream();
+  }
+
+  byte streaming;
+  uint16_t wp;
+  uint16_t freespace;
+};
+

+ 301 - 0
viewer.ino

@@ -0,0 +1,301 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+
+class scroller {
+public:
+  signed short dragprev;
+  int vel;      // velocity
+  long base;    // screen x coordinate, in 1/16ths pixel
+  long limit;
+  void init(uint32_t lim) {
+    dragprev = -32768;
+    vel = 0;      // velocity
+    base = 0;     // screen x coordinate, in 1/16ths pixel
+    limit = lim;
+  }
+  void run(bool touching, int16_t sx) {
+    if (touching & (dragprev != -32768)) {
+      vel = (dragprev - sx) << 4;
+    } else {
+      int change = max(1, abs(vel) >> 5);
+      if (vel < 0)
+        vel += change;
+      if (vel > 0)
+        vel -= change;
+    }
+    dragprev = touching ? sx : -32768;
+    base += vel;
+    base = max(0, min(base, limit));
+  }
+  uint16_t getval() {
+    return base >> 4;
+  }
+};
+
+void setup()
+{
+  Serial.begin(115200);
+  GD.begin();
+}
+
+#define PROGRESS_Y  136
+
+static void progress(long a, long b)
+{
+    GD.wr32(REG_MACRO_0, VERTEX2II(40 + 399 * a / b, PROGRESS_Y, 0, 0));
+}
+
+static void draw_progress()
+{
+  GD.Begin(LINES);
+
+  GD.ColorRGB(0xc0c0c0);
+  GD.LineWidth(16 * 5);
+  GD.Vertex2ii(40, PROGRESS_Y);
+  GD.Vertex2ii(440, PROGRESS_Y);
+
+  GD.ColorRGB(0x000000);
+  GD.LineWidth(16 * 3);
+  GD.Vertex2ii(40, PROGRESS_Y);
+  GD.Vertex2ii(440, PROGRESS_Y);
+
+  GD.ColorRGB(0xffffff);
+  GD.LineWidth(16 * 2);
+  GD.Vertex2ii(40, PROGRESS_Y);
+  GD.Macro(0);
+  GD.swap();
+}
+
+static void paint_alpha()
+{
+  GD.ColorMask(0, 0, 0, 1);
+  GD.Clear();
+}
+
+static void use_alpha()
+{
+  GD.ColorMask(1, 1, 1, 1);
+  GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
+}
+
+static char *getdir(char directory[60][8], int i)
+{
+  static char nm[8 + 1 + 3 + 1];
+  nm[8] = 0;
+  strncpy(nm, directory[i], 8);
+  strcat(nm, ".jpg");
+  return nm;
+}
+
+static void showdir0(char directory[60][8], int num_jpgs, int yb, int sel)
+{
+  GD.Tag(0);
+  GD.SaveContext();
+  GD.ScissorSize(480, 136);
+  GD.cmd_gradient(0, 0, 0x3030c0, 0, 136, 0x000000);
+  GD.ScissorXY(0, 136);
+  GD.cmd_gradient(0, 136, 0x080800, 0, 272, 0x908880);
+  GD.RestoreContext();
+
+  GD.LineWidth(48);
+  GD.Begin(RECTS);
+  GD.ColorRGB(0xffffff);
+  for (int j = 0; j < num_jpgs; j++) {
+    int y = 40 * j - yb;
+    if ((-50 < y) && (y < 272)) {
+      GD.ColorA((sel == j) ? 0xff : 0xa0);
+      GD.Vertex2f(16 * (240 - 100), 16 * (y + 6));
+      GD.Vertex2f(16 * (240 + 100), 16 * (y + 40 - 6));
+    }
+  }
+}
+
+static void showdir1(char directory[60][8], int num_jpgs, int yb, int sel)
+{
+  GD.ColorA(0xff);
+  GD.ColorRGB(0x000000);
+  for (int j = 0; j < num_jpgs; j++) {
+    int y = 40 * j - yb;
+    if ((-50 < y) && (y < 272)) {
+      GD.Tag(128 + j);
+      GD.cmd_text(240, y + 18, 28, OPT_CENTER, getdir(directory, j));
+    }
+  }
+}
+
+#ifdef EMUPC  // JCB{
+extern FILE *stimfile;
+#endif        // }JCB
+
+void loop()
+{
+  char directory[60][8];
+  int num_jpgs = 0;
+  int picked;
+
+  scroller yscroll;
+
+  {
+#ifdef EMUPC  // JCB{
+    char fn[9];
+    for (int i = 1; i < 40; i++) {
+      sprintf(fn, "kitten%02d", i);
+      memcpy(directory[num_jpgs++], fn , 8);
+    }
+    memcpy(directory[num_jpgs++], "selfie" , 8);
+#else       // }JCB
+    int j = 0;
+    dirent de;
+    GD.__end();
+    do {
+      GD.SD.rdn((byte*)&de, GD.SD.o_root + j * 32, sizeof(de));
+      if ((0x20 < de.name[0]) && (de.name[0] < 0x80)) {
+        if (memcmp(de.ext, "JPG", 3) == 0) {
+          if (num_jpgs < 60) {
+            char *pd = directory[num_jpgs++];
+            byte i;
+            for (i = 0; i < 8 && de.name[i] != ' '; i++)
+              *pd++ = tolower(de.name[i]);
+            if (i != 8)
+              *pd = 0;
+          }
+        }
+      }
+      j++;
+    } while (de.name[0]);
+    GD.resume();
+#endif  // JCB
+
+    yscroll.init((40L * (num_jpgs - 4)) << 4);
+
+    do {
+      GD.get_inputs();
+      byte touching = (GD.inputs.x != -32768) && (GD.inputs.tag < 128);
+      yscroll.run(touching, GD.inputs.y);
+
+      showdir0(directory, num_jpgs, yscroll.base >> 4, -1);
+      showdir1(directory, num_jpgs, yscroll.base >> 4, -1);
+      GD.swap();
+    } while (GD.inputs.tag < 128);
+    picked = GD.inputs.tag - 128;
+  }
+
+#ifndef EMUPC // JCB
+  GD.Clear();
+  draw_progress();
+#else         // JCB{
+  for (int i = 0; i < 30; i++) {
+    showdir0(directory, num_jpgs, yscroll.base >> 4, picked);
+    showdir1(directory, num_jpgs, yscroll.base >> 4, picked);
+    GD.swap();
+  }
+#endif        // }JCB
+  GD.cmd_loadimage(0, 0);
+  int ok = GD.load(getdir(directory, picked), progress);
+
+  uint32_t m_ptr, m_w, m_h;
+  GD.cmd_getprops(m_ptr, m_w, m_h);
+  GD.finish();
+
+#ifndef EMUPC // JCB
+  uint16_t w = GD.rd16(m_w);
+  uint16_t h = GD.rd16(m_h);
+#else         // JCB{
+  uint16_t w = 335;
+  uint16_t h = 272;
+#endif        // }JCB
+
+  byte prev_touching = 0;
+  int cx, cy;
+  float smooth_r;
+
+  GD.BitmapSize(BILINEAR, BORDER, BORDER, w, h);
+  float zoom = 0.3;
+  int fadeout = 0;
+
+#ifdef EMUPC  // JCB{
+  while (!feof(stimfile)) {
+#else         // }JCB
+  while (1) {
+#endif        // JCB
+    GD.get_inputs();
+    byte touching = GD.inputs.x != -32768;
+
+    showdir0(directory, num_jpgs, yscroll.base >> 4, picked);
+    showdir1(directory, num_jpgs, yscroll.base >> 4, picked);
+
+    GD.ColorRGB(0xffffff);
+    int zw = zoom * w / 2;
+    int zh = zoom * h / 2;
+    GD.Begin(BITMAPS);
+    GD.cmd_scale(F16(zoom), F16(zoom));
+    GD.cmd_setmatrix();
+    GD.Vertex2ii(240 - zw, 136 - zh, 0, 0);
+
+    zoom = min(1.0, zoom * 1.2);
+
+    if (touching) {
+      if (!prev_touching) {
+        cx = GD.inputs.x;
+        cy = GD.inputs.y;
+        smooth_r = 0;
+      } else {
+        int dx = cx - GD.inputs.x;
+        int dy = cy - GD.inputs.y;
+        float r = sqrt(dx * dx + dy * dy);
+        smooth_r = .75 * smooth_r + 0.25 * r;
+      }
+      fadeout = 15;
+    }
+
+    if (fadeout) {
+      fadeout--;
+      smooth_r += 1;
+    }
+
+    if (touching || fadeout) {
+      int r0 = int(15 * smooth_r);
+      int r1 = int(16 * smooth_r);
+      float fade = min(fadeout / 15., smooth_r / 40);
+
+      GD.SaveContext();
+      GD.ClearColorA(128 * fade);
+      paint_alpha();
+
+      GD.Begin(POINTS);
+      GD.BlendFunc(ZERO, ONE_MINUS_SRC_ALPHA);
+      GD.PointSize(r1);
+      GD.Vertex2ii(cx, cy);
+
+      use_alpha();
+      GD.ColorRGB(0x000000);
+      GD.Begin(RECTS);
+      GD.Vertex2ii(0, 0);
+      GD.Vertex2ii(480, 272);
+      GD.RestoreContext();
+
+      paint_alpha();
+
+      GD.Begin(POINTS);
+
+      GD.ColorA(255 * fadeout / 15);
+      GD.BlendFunc(ONE, ONE_MINUS_SRC_ALPHA);
+      GD.PointSize(r1);
+      GD.Vertex2ii(cx, cy);
+
+      GD.ColorA(255);
+      GD.BlendFunc(ZERO, ONE_MINUS_SRC_ALPHA);
+      GD.PointSize(r0);
+      GD.Vertex2ii(cx, cy);
+
+      use_alpha();
+      GD.PointSize(r1);
+      GD.Vertex2ii(cx, cy);
+    }
+    GD.swap();
+
+    prev_touching = touching;
+  }
+}

+ 33 - 0
walk.ino

@@ -0,0 +1,33 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+static int a[256]; //' A{
+
+#include "walk_assets.h" //' load{
+
+void setup() 
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();     
+  LOAD_ASSETS();  //' }load
+  for (int i = 0; i < 256; i++)
+    a[i] = GD.random(512);
+}
+
+void loop()
+{
+  GD.ClearColorRGB(0x000050);
+  GD.Clear();
+  GD.Begin(BITMAPS);
+  for (int i = 0; i < 256; i++) {
+    GD.ColorRGB(i, i, i);
+    GD.Vertex2ii(a[i], i, WALK_HANDLE, (a[i] >> 2) & 7);
+    a[i] = (a[i] + 1) & 511;
+  }
+  GD.swap();
+} //' }A
+
+/*
+    GD.Vertex2ii(x, y, WALK_HANDLE);   //' asset{ }asset
+*/

+ 111 - 0
widgets.ino

@@ -0,0 +1,111 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+static uint16_t value = 15000;
+static char message[41];
+static uint16_t options = OPT_FLAT;
+static byte prevkey;
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  memset(message, 7, 40);
+  GD.begin();
+}
+
+#define TAG_DIAL      200
+#define TAG_SLIDER    201
+#define TAG_TOGGLE    202
+#define TAG_BUTTON1   203
+#define TAG_BUTTON2   204
+
+void loop()
+{
+
+  GD.get_inputs();
+
+  switch (GD.inputs.track_tag & 0xff) {   //' track{
+  case TAG_DIAL:
+  case TAG_SLIDER:
+  case TAG_TOGGLE:
+    value = GD.inputs.track_val;
+  } //' }track
+  switch (GD.inputs.tag) {
+  case TAG_BUTTON1:
+    options = OPT_FLAT;
+    break;
+  case TAG_BUTTON2:
+    options = 0;
+    break;
+  }
+  byte key = GD.inputs.tag;
+  if ((prevkey == 0x00) && (' ' <= key) && (key < 0x7f)) {
+    memmove(message, message + 1, 39);
+    message[39] = key;
+  }
+  prevkey = key;
+
+  GD.cmd_gradient(0, 0,   0x404044,
+                  480, 480, 0x606068);
+  GD.ColorRGB(0x707070);
+
+  GD.LineWidth(4 * 16);
+  GD.Begin(RECTS);
+
+  GD.Vertex2ii(8, 8);
+  GD.Vertex2ii(128, 128);
+
+  GD.Vertex2ii(8, 136 + 8);
+  GD.Vertex2ii(128, 136 + 128);
+
+  GD.Vertex2ii(144, 136 + 8);
+  GD.Vertex2ii(472, 136 + 128);
+  GD.ColorRGB(0xffffff);
+
+  GD.Tag(TAG_DIAL); //' dial{
+  GD.cmd_dial(68, 68, 50, options, value);
+  GD.cmd_track(68, 68, 1, 1, TAG_DIAL);   //' }dial
+
+  GD.Tag(TAG_SLIDER); //' linear{
+  GD.cmd_slider(16, 199, 104, 10, options, value, 65535);
+  GD.cmd_track(16, 199, 104, 10, TAG_SLIDER);
+
+  GD.Tag(TAG_TOGGLE);
+  GD.cmd_toggle(360, 62, 80, 29, options, value,
+                "that" "\xff" "this");
+  GD.cmd_track(360, 62, 80, 20, TAG_TOGGLE); //' }linear
+
+  GD.Tag(255);
+  GD.cmd_number(68, 136, 30, OPT_CENTER | 5, value);
+
+  GD.cmd_clock(184, 48, 40, options | OPT_NOSECS, 0, 0, value, 0);
+  GD.cmd_gauge(280, 48, 40, options, 4, 3, value, 65535);
+
+  GD.Tag(TAG_BUTTON1);
+  GD.cmd_button(352, 12, 40, 30, 28, options,  "2D");
+  GD.Tag(TAG_BUTTON2);
+  GD.cmd_button(400, 12, 40, 30, 28, options,  "3D");
+
+  GD.Tag(255);
+  GD.cmd_progress(144, 100, 320, 10, options, value, 65535);
+  GD.cmd_scrollbar(144, 120, 320, 10, options, value / 2, 32768, 65535);
+
+  GD.cmd_keys(144, 168,      320, 24, 28, options | OPT_CENTER | key, "qwertyuiop");
+  GD.cmd_keys(144, 168 + 26, 320, 24, 28, options | OPT_CENTER | key,   "asdfghjkl");
+  GD.cmd_keys(144, 168 + 52, 320, 24, 28, options | OPT_CENTER | key,   "zxcvbnm,.");
+  GD.Tag(' ');
+  GD.cmd_button(308 - 60, 172 + 74, 120, 20, 28, options,   "");
+
+  GD.BlendFunc(SRC_ALPHA, ZERO);
+  GD.cmd_text(149, 146, 18, 0, message);
+
+  // GD.cmd_button(240 - 100, 136 - 40, 200, 80, 31, 0, "1 UP");
+
+  /*
+  GD.cmd_text(240, 136, 26, OPT_CENTER, "Hello world");
+  GD.cmd_scrollbar(30, 136, 420, 30, 0, 25333, 10000, 65535);
+  GD.cmd_button(240 - 100, 136 - 40, 200, 80, 31, 0, "1 UP");
+  */
+  GD.swap();
+}

Some files were not shown because too many files changed in this diff