From 935cd172603a1019a8c8adbf6f0032959c32d2ef Mon Sep 17 00:00:00 2001 From: ertunc-ozbay Date: Sun, 18 Oct 2026 03:40:30 +0300 Subject: [PATCH] feat: bundle local downloadable firmware, schematic & RLE compiler in assets/downloads --- assets/downloads/desk_rave_16track_esp32.c | 2583 ++++++++++++++++++++ assets/downloads/mfc-1.kicad_sch | 2441 ++++++++++++++++++ assets/downloads/mfc_esp32s3_firmware.c | 367 +++ assets/downloads/midi_to_c.py | 107 + lab.html | 6 +- projects/midi-breadboard-instrument.html | 5 +- projects/multi-functional-controller.html | 7 +- 7 files changed, 5509 insertions(+), 7 deletions(-) create mode 100644 assets/downloads/desk_rave_16track_esp32.c create mode 100644 assets/downloads/mfc-1.kicad_sch create mode 100644 assets/downloads/mfc_esp32s3_firmware.c create mode 100644 assets/downloads/midi_to_c.py diff --git a/assets/downloads/desk_rave_16track_esp32.c b/assets/downloads/desk_rave_16track_esp32.c new file mode 100644 index 0000000..6a78d96 --- /dev/null +++ b/assets/downloads/desk_rave_16track_esp32.c @@ -0,0 +1,2583 @@ +#include +#include +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "driver/ledc.h" +#include "driver/pulse_cnt.h" +#include "driver/spi_master.h" + +// ========================================== +// 1. HARDWARE DEFINITIONS +// ========================================== +#define ROTARY_SW_PIN 16 +#define PASSIVE_BUZZER_PIN 25 +#define ACTIVE_BUZZER_1_PIN 26 +#define ACTIVE_BUZZER_2_PIN 27 +#define LED_KICK_PIN 21 +#define LED_HAT_PIN 22 +#define ROTARY_CLK_PIN 32 +#define ROTARY_DT_PIN 33 + +#define BTN_PAUSE_PIN 13 +#define BTN_NEXT_PIN 14 + +#define OLED_CS_PIN 5 +#define OLED_DC_PIN 2 +#define OLED_RES_PIN 4 +#define OLED_MOSI_PIN 23 +#define OLED_CLK_PIN 18 + +#define BUZZER_LEDC_TIMER LEDC_TIMER_0 +#define BUZZER_LEDC_MODE LEDC_LOW_SPEED_MODE +#define BUZZER_LEDC_CHANNEL LEDC_CHANNEL_0 +#define BUZZER_LEDC_DUTY (4095) + +pcnt_unit_handle_t pcnt_unit = NULL; +spi_device_handle_t spi = NULL; + +// ========================================== +// 2. INTER-PROCESS COMMUNICATION (IPC) +// ========================================== +volatile bool encoder_mode_volume = false; +volatile float current_volume = 1.0; +volatile uint32_t current_freq = 0; +volatile bool current_kick = false; +volatile bool current_hat = false; +volatile float current_speed = 1.0; + +volatile bool is_paused = false; +volatile int current_song_idx = 0; +volatile bool trigger_song_change = false; + +// ========================================== +// 3. GRAPHICS ENGINE & 1.3" OLED DRIVER +// ========================================== +uint8_t oled_buffer[1024]; + +const uint8_t font5x7[59][5] = { + {0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x5f,0x00,0x00}, {0x00,0x07,0x00,0x07,0x00}, {0x14,0x7f,0x14,0x7f,0x14}, + {0x24,0x2a,0x7f,0x2a,0x12}, {0x23,0x13,0x08,0x64,0x62}, {0x36,0x49,0x55,0x22,0x50}, {0x00,0x05,0x03,0x00,0x00}, + {0x00,0x1c,0x22,0x41,0x00}, {0x00,0x41,0x22,0x1c,0x00}, {0x14,0x08,0x3e,0x08,0x14}, {0x08,0x08,0x3e,0x08,0x08}, + {0x00,0x50,0x30,0x00,0x00}, {0x08,0x08,0x08,0x08,0x08}, {0x00,0x60,0x60,0x00,0x00}, {0x20,0x10,0x08,0x04,0x02}, + {0x3e,0x51,0x49,0x45,0x3e}, {0x00,0x42,0x7f,0x40,0x00}, {0x42,0x61,0x51,0x49,0x46}, {0x21,0x41,0x45,0x4b,0x31}, + {0x18,0x14,0x12,0x7f,0x10}, {0x27,0x45,0x45,0x45,0x39}, {0x3c,0x4a,0x49,0x49,0x30}, {0x01,0x71,0x09,0x05,0x03}, + {0x36,0x49,0x49,0x49,0x36}, {0x06,0x49,0x49,0x29,0x1e}, {0x00,0x36,0x36,0x00,0x00}, {0x00,0x56,0x36,0x00,0x00}, + {0x08,0x14,0x22,0x41,0x00}, {0x14,0x14,0x14,0x14,0x14}, {0x00,0x41,0x22,0x14,0x08}, {0x02,0x01,0x51,0x09,0x06}, + {0x32,0x49,0x79,0x41,0x3e}, {0x7e,0x11,0x11,0x11,0x7e}, {0x7f,0x49,0x49,0x49,0x36}, {0x3e,0x41,0x41,0x41,0x22}, + {0x7f,0x41,0x41,0x22,0x1c}, {0x7f,0x49,0x49,0x49,0x41}, {0x7f,0x09,0x09,0x09,0x01}, {0x3e,0x41,0x49,0x49,0x7a}, + {0x7f,0x08,0x08,0x08,0x7f}, {0x00,0x41,0x7f,0x41,0x00}, {0x20,0x40,0x41,0x3f,0x01}, {0x7f,0x08,0x14,0x22,0x41}, + {0x7f,0x40,0x40,0x40,0x40}, {0x7f,0x02,0x0c,0x02,0x7f}, {0x7f,0x04,0x08,0x10,0x7f}, {0x3e,0x41,0x41,0x41,0x3e}, + {0x7f,0x09,0x09,0x09,0x06}, {0x3e,0x41,0x51,0x21,0x5e}, {0x7f,0x09,0x19,0x29,0x46}, {0x46,0x49,0x49,0x49,0x31}, + {0x01,0x01,0x7f,0x01,0x01}, {0x3f,0x40,0x40,0x40,0x3f}, {0x1f,0x20,0x40,0x20,0x1f}, {0x3f,0x40,0x38,0x40,0x3f}, + {0x63,0x14,0x08,0x14,0x63}, {0x07,0x08,0x70,0x08,0x07}, {0x61,0x51,0x49,0x45,0x43} +}; + +void oled_send_cmd(uint8_t cmd) { + gpio_set_level(OLED_DC_PIN, 0); spi_transaction_t t; memset(&t, 0, sizeof(t)); + uint8_t cmd_ram = cmd; t.length = 8; t.tx_buffer = &cmd_ram; spi_device_polling_transmit(spi, &t); +} + +void oled_send_data(const uint8_t *data, int len) { + gpio_set_level(OLED_DC_PIN, 1); spi_transaction_t t; memset(&t, 0, sizeof(t)); + t.length = len * 8; t.tx_buffer = data; spi_device_polling_transmit(spi, &t); +} + +void draw_pixel(int x, int y, int color) { + if (x < 0 || x >= 128 || y < 0 || y >= 64) return; + if (color) oled_buffer[x + (y / 8) * 128] |= (1 << (y % 8)); + else oled_buffer[x + (y / 8) * 128] &= ~(1 << (y % 8)); +} + +void draw_filled_rect(int x, int y, int w, int h, int color) { + for (int i = x; i < x + w; i++) for (int j = y; j < y + h; j++) draw_pixel(i, j, color); +} + +void draw_rect(int x, int y, int w, int h, int color) { + for (int i = x; i < x + w; i++) { draw_pixel(i, y, color); draw_pixel(i, y + h - 1, color); } + for (int j = y; j < y + h; j++) { draw_pixel(x, j, color); draw_pixel(x + w - 1, j, color); } +} + +void draw_string(int x, int y, const char* str) { + while(*str) { + char c = *str; + if (c >= 32 && c <= 90) { + for(int i=0; i<5; i++) for(int j=0; j<8; j++) if((font5x7[c-32][i] >> j) & 1) draw_pixel(x+i, y+j, 1); + } else if (c >= 97 && c <= 122) { + for(int i=0; i<5; i++) for(int j=0; j<8; j++) if((font5x7[c-64][i] >> j) & 1) draw_pixel(x+i, y+j, 1); + } + x += 6; str++; + } +} + +void oled_push_framebuffer(void) { + for(int page = 0; page < 8; page++) { + oled_send_cmd(0xB0 + page); oled_send_cmd(0x02); oled_send_cmd(0x10); + oled_send_data(&oled_buffer[page * 128], 128); + } +} + +// ========================================== +// 4. THE ULTIMATE 8-TRACK PLAYLIST (FLASH MEMORY STORAGE) +// ========================================== +typedef struct { uint32_t frequency; uint32_t duration; bool kick_drum; bool hi_hat; } SequenceStep; + +#define REST 0 +#define NOTE_G3 196 +#define NOTE_GS3 208 +#define NOTE_A3 220 +#define NOTE_AS3 233 +#define NOTE_B3 247 +#define NOTE_C4 262 +#define NOTE_CS4 277 +#define NOTE_D4 294 +#define NOTE_DS4 311 +#define NOTE_E4 330 +#define NOTE_F4 349 +#define NOTE_FS4 370 +#define NOTE_G4 392 +#define NOTE_GS4 415 +#define NOTE_A4 440 +#define NOTE_AS4 466 +#define NOTE_B4 494 +#define NOTE_C5 523 +#define NOTE_CS5 554 +#define NOTE_D5 587 +#define NOTE_DS5 622 +#define NOTE_E5 659 +#define NOTE_F5 698 +#define NOTE_FS5 740 +#define NOTE_G5 784 +#define NOTE_GS5 831 +#define NOTE_A5 880 +#define NOTE_AS5 932 +#define NOTE_B5 988 +#define NOTE_C6 1047 +#define NOTE_CS6 1109 +#define NOTE_D6 1175 +#define NOTE_DS6 1245 +#define NOTE_E6 1319 + + +// Converted from: mario.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_mario[] = { + {659, 209, true, false}, {659, 214, true, false}, {0, 218, false, false}, {659, 209, true, false}, + {0, 218, false, false}, {523, 209, true, false}, {659, 361, true, false}, {0, 71, false, false}, + {783, 357, true, false}, {0, 500, false, false}, {391, 357, true, false}, {0, 500, false, false}, + {391, 146, true, false}, {587, 150, false, false}, {587, 150, false, false}, {440, 150, false, false}, + {0, 153, false, false}, {587, 146, false, false}, {493, 553, false, false}, {0, 200, false, false}, + {587, 75, false, false}, {587, 71, false, false}, {493, 150, false, false}, {523, 150, false, false}, + {587, 253, false, false}, {0, 50, false, false}, {391, 146, true, false}, {587, 150, false, false}, + {587, 150, false, false}, {440, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, + {493, 553, false, false}, {0, 275, false, false}, {0, 675, false, false}, {391, 146, true, false}, + {587, 150, false, false}, {587, 150, false, false}, {440, 150, false, false}, {0, 153, false, false}, + {587, 146, false, false}, {493, 553, false, false}, {0, 200, false, false}, {587, 75, false, false}, + {587, 71, false, false}, {493, 150, false, false}, {523, 150, false, false}, {587, 253, false, false}, + {0, 50, false, false}, {391, 146, true, false}, {587, 150, false, false}, {587, 150, false, false}, + {440, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, {493, 553, false, false}, + {0, 275, false, false}, {0, 675, false, false}, {587, 146, true, false}, {523, 150, false, false}, + {587, 150, false, false}, {493, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, + {783, 828, false, false}, {0, 675, false, false}, {587, 146, true, false}, {523, 150, false, false}, + {587, 150, false, false}, {493, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, + {523, 828, false, false}, {0, 675, false, false}, {587, 146, true, false}, {523, 150, false, false}, + {587, 150, false, false}, {493, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, + {783, 828, false, false}, {0, 675, false, false}, {880, 146, false, true}, {783, 150, false, false}, + {880, 150, false, false}, {783, 150, false, false}, {0, 153, false, false}, {987, 146, false, false}, + {783, 828, false, false}, {0, 675, false, false}, {0, 2000, true, false}, {329, 244, false, false}, + {329, 250, false, false}, {0, 755, false, false}, {329, 244, false, false}, {329, 250, false, false}, + {329, 125, false, false}, {329, 125, false, false}, {349, 250, true, false}, {349, 250, false, false}, + {0, 755, false, false}, {349, 244, false, false}, {349, 250, false, false}, {349, 125, false, false}, + {349, 125, false, false}, {391, 250, true, false}, {391, 250, false, false}, {0, 755, false, false}, + {391, 244, false, false}, {391, 250, false, false}, {391, 125, false, false}, {391, 125, false, false}, + {349, 250, true, false}, {349, 250, false, false}, {0, 755, false, false}, {349, 244, false, false}, + {349, 250, false, false}, {349, 125, false, false}, {349, 125, false, false}, {329, 672, true, false}, + {0, 83, false, false}, {329, 494, false, false}, {391, 250, false, false}, {440, 250, false, false}, + {391, 130, false, false}, {391, 119, false, false}, {261, 1881, true, false}, {0, 125, false, false}, + {349, 666, true, true}, {0, 83, false, false}, {349, 494, false, false}, {440, 250, false, false}, + {493, 250, false, false}, {440, 130, false, false}, {440, 119, false, false}, {311, 1881, true, true}, + {0, 125, false, false}, {391, 666, true, true}, {0, 83, false, false}, {391, 494, false, false}, + {523, 250, false, false}, {587, 250, false, false}, {523, 130, false, false}, {523, 119, false, false}, + {783, 672, true, true}, {0, 83, false, false}, {698, 494, false, false}, {523, 250, false, false}, + {391, 250, false, false}, {349, 130, false, false}, {349, 119, false, false}, {659, 672, true, true}, + {0, 83, false, false}, {523, 494, false, false}, {440, 250, false, false}, {349, 250, false, false}, + {329, 130, false, false}, {329, 119, false, false}, {311, 1380, true, false}, {0, 125, false, false}, + {277, 2376, false, false}, {0, 125, false, false}, {261, 244, true, false}, {0, 250, true, true}, + {261, 250, true, false}, {293, 62, false, false}, {0, 62, false, true}, {261, 125, true, false}, + {0, 130, false, false}, {0, 369, true, true}, {0, 250, true, true}, {0, 250, true, true}, + {0, 422, true, true}, {0, 83, false, false}, {0, 119, true, true}, {0, 250, true, true}, + {0, 125, true, true}, {0, 755, false, false}, {293, 182, false, false}, {0, 67, false, false}, + {329, 119, false, true}, {311, 125, false, false}, {329, 125, false, false}, {391, 46, false, false}, + {391, 83, false, false}, {391, 119, false, true}, {440, 125, false, false}, {391, 250, false, true}, + {261, 255, false, false}, {261, 166, false, true}, {0, 78, false, false}, {0, 255, false, true}, + {0, 119, false, true}, {0, 46, false, true}, {0, 78, false, false}, {0, 125, false, true}, + {0, 125, false, true}, {0, 125, false, true}, {261, 46, false, false}, {261, 83, false, false}, + {261, 119, false, true}, {293, 125, false, false}, {261, 125, false, false}, {261, 125, false, true}, + {0, 255, false, true}, {0, 166, false, true}, {0, 333, false, false}, {0, 166, false, true}, + {0, 78, false, false}, {0, 125, false, true}, {0, 125, false, true}, {0, 125, false, true}, + {391, 46, false, false}, {391, 83, false, false}, {391, 244, false, true}, {0, 125, false, true}, + {0, 125, false, true}, {0, 125, false, true}, {391, 130, false, false}, {391, 244, false, true}, + {0, 313, false, true}, {391, 108, false, false}, {391, 78, false, false}, {349, 250, false, true}, + {391, 171, false, false}, {391, 78, false, false}, {440, 125, false, true}, {391, 250, false, false}, + {293, 125, false, true}, {293, 255, false, false}, {293, 166, false, true}, {0, 328, false, false}, + {293, 187, false, true}, {0, 62, false, false}, {329, 125, false, true}, {311, 125, false, false}, + {329, 125, false, false}, {391, 46, false, false}, {391, 83, false, false}, {391, 119, false, true}, + {440, 125, false, false}, {391, 250, false, true}, {466, 255, false, false}, {466, 166, false, true}, + {0, 78, false, false}, {0, 255, false, true}, {415, 166, false, false}, {415, 78, false, false}, + {440, 125, false, true}, {415, 125, false, false}, {440, 125, false, false}, {523, 46, false, false}, + {523, 83, false, false}, {523, 119, false, true}, {587, 125, false, false}, {523, 125, false, false}, + {523, 125, false, true}, {440, 255, false, false}, {440, 166, false, true}, {0, 78, false, false}, + {0, 255, false, true}, {440, 166, false, false}, {440, 78, false, false}, {391, 125, false, true}, + {369, 125, false, false}, {391, 125, false, false}, {0, 46, false, true}, {0, 83, false, false}, + {0, 244, false, true}, {391, 125, false, true}, {369, 125, false, false}, {391, 125, false, false}, + {0, 130, false, true}, {0, 119, false, true}, {0, 125, false, true}, {349, 250, false, true}, + {329, 171, false, false}, {329, 78, false, false}, {261, 422, true, true}, {261, 83, false, false}, + {261, 119, false, true}, {261, 250, false, true}, {261, 125, false, false}, {0, 380, false, false}, + {0, 375, false, false}, {293, 119, false, false}, {311, 125, false, false}, {329, 125, false, true}, + {311, 125, false, false}, {329, 125, false, true}, {391, 125, false, false}, {391, 125, false, false}, + {440, 125, false, false}, {391, 130, false, false}, {391, 119, false, true}, {261, 255, false, false}, + {261, 166, false, true}, {0, 78, false, false}, {391, 250, false, false}, {349, 62, false, true}, + {329, 62, false, false}, {293, 62, false, true}, {0, 62, false, false}, {0, 62, false, true}, + {0, 62, false, true}, {0, 62, false, true}, {0, 62, false, true}, {0, 125, false, true}, + {261, 125, false, false}, {261, 125, false, false}, {293, 125, false, false}, {261, 130, false, false}, + {261, 119, false, true}, {0, 255, false, true}, {0, 166, false, true}, {0, 78, false, false}, + {349, 250, false, false}, {329, 62, false, true}, {293, 62, false, false}, {261, 62, false, false}, + {0, 62, false, false}, {0, 62, false, true}, {0, 62, false, true}, {0, 62, false, true}, + {0, 62, false, true}, {0, 125, false, true}, {391, 125, false, true}, {391, 255, false, false}, + {391, 57, false, true}, {0, 62, false, true}, {0, 125, false, true}, {0, 125, false, true}, + {0, 375, false, true}, {0, 313, false, true}, {391, 67, false, false}, {391, 119, false, false}, + {349, 250, false, true}, {391, 125, false, false}, {391, 62, false, false}, {391, 62, false, true}, + {440, 125, false, false}, {391, 130, false, false}, {391, 119, false, true}, {293, 437, false, false}, + {261, 62, false, false}, {0, 46, false, true}, {0, 15, false, false}, {0, 62, false, true}, + {0, 62, false, true}, {0, 62, false, true}, {0, 125, false, true}, {293, 187, true, true}, + {0, 62, false, false}, {329, 125, false, true}, {311, 125, false, false}, {329, 125, false, false}, + {391, 125, false, true}, {391, 125, false, false}, {440, 125, false, false}, {391, 250, false, true}, + {466, 255, false, false}, {466, 166, false, true}, {261, 78, false, false}, {293, 125, false, false}, + {329, 130, false, false}, {415, 119, false, false}, {415, 125, false, false}, {440, 125, false, true}, + {415, 125, false, false}, {440, 125, false, false}, {523, 46, false, false}, {523, 78, false, false}, + {0, 130, false, true}, {587, 119, false, false}, {523, 125, false, false}, {523, 125, false, true}, + {440, 255, false, false}, {440, 166, false, true}, {261, 78, false, false}, {311, 125, false, false}, + {293, 130, false, false}, {440, 119, false, false}, {440, 125, false, true}, {391, 125, false, false}, + {369, 125, false, false}, {391, 125, false, true}, {0, 125, false, true}, {0, 250, false, false}, + {391, 125, false, false}, {369, 125, false, true}, {391, 125, false, false}, {0, 130, false, true}, + {0, 119, false, true}, {0, 125, false, true}, {349, 250, false, false}, {329, 250, false, true}, + {261, 422, false, true}, {261, 83, false, false}, {261, 119, false, true}, {261, 250, false, true}, + {261, 547, false, false}, {0, 83, false, false}, {329, 182, false, false}, {349, 62, false, false}, + {391, 125, false, false}, {415, 125, false, false}, {880, 672, false, false}, {0, 83, false, false}, + {698, 244, false, false}, {783, 672, false, false}, {0, 83, false, false}, {659, 244, false, false}, + {698, 375, false, false}, {783, 125, false, false}, {0, 318, false, false}, {659, 103, false, false}, + {0, 83, false, false}, {659, 182, false, false}, {698, 62, false, false}, {783, 125, false, false}, + {830, 125, false, false}, {0, 505, false, false}, {880, 666, false, false}, {0, 83, false, false}, + {830, 244, false, false}, {783, 672, false, false}, {0, 83, false, false}, {739, 244, false, false}, + {698, 375, false, false}, {659, 375, false, false}, {523, 672, false, false}, {0, 583, false, false}, + {880, 244, false, false}, {880, 250, false, false}, {830, 250, false, false}, {830, 250, false, false}, + {783, 250, false, false}, {783, 250, false, false}, {739, 250, false, false}, {739, 250, false, false}, + {698, 375, false, false}, {783, 125, false, false}, {0, 255, false, false}, {659, 1125, false, false}, + {0, 125, false, false}, {880, 244, false, false}, {880, 250, false, false}, {830, 250, false, false}, + {830, 250, false, false}, {783, 250, false, false}, {783, 250, false, false}, {739, 250, false, false}, + {739, 250, false, false}, {698, 375, false, false}, {659, 125, false, false}, {0, 255, false, false}, + {523, 1125, false, true}, {0, 125, false, false}, {523, 119, false, false}, {329, 250, false, true}, + {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, {329, 250, false, true}, + {466, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, {261, 250, true, false}, + {311, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, {261, 250, true, false}, + {311, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, {329, 250, false, true}, + {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, {329, 250, false, true}, + {466, 125, false, true}, {0, 505, false, false}, {440, 244, false, true}, {440, 250, false, true}, + {440, 250, false, true}, {440, 250, false, true}, {415, 422, false, true}, {0, 83, false, false}, + {391, 57, false, true}, {349, 62, false, true}, {329, 62, false, true}, {293, 62, false, true}, + {261, 62, true, false}, {0, 62, true, true}, {0, 125, true, true}, {523, 125, false, false}, + {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, + {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, + {261, 250, true, false}, {311, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, + {261, 250, true, false}, {311, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, + {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, + {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {783, 357, false, true}, + {0, 285, false, false}, {880, 209, false, true}, {0, 218, false, false}, {783, 209, false, true}, + {0, 218, false, false}, {739, 209, false, true}, {783, 214, false, true}, {1046, 214, false, true}, + {1318, 361, false, false}, {0, 500, false, false}, {391, 209, false, false}, {523, 214, false, false}, + {698, 361, false, true}, {0, 285, false, false}, {783, 209, false, true}, {0, 218, false, false}, + {698, 209, false, true}, {0, 218, false, false}, {659, 209, true, true}, {698, 214, false, true}, + {987, 214, false, true}, {1174, 361, false, true}, {0, 500, false, false}, {391, 209, false, false}, + {493, 214, false, false}, {659, 361, true, true}, {0, 285, false, false}, {698, 209, false, true}, + {0, 218, false, false}, {659, 209, true, true}, {0, 218, false, false}, {622, 209, true, true}, + {659, 214, true, true}, {880, 214, false, true}, {1046, 361, false, true}, {0, 285, false, false}, + {880, 209, true, true}, {987, 214, false, true}, {1046, 214, false, true}, {1174, 214, false, true}, + {1046, 214, false, true}, {1174, 214, false, true}, {1046, 428, false, true}, {880, 214, false, true}, + {739, 214, true, true}, {587, 214, true, true}, {523, 214, true, true}, {440, 214, true, true}, + {0, 214, true, true}, {0, 969, false, true}, {0, 107, false, false}, {0, 209, true, false}, + {0, 214, false, true}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, + {0, 218, false, false}, {0, 209, false, true}, {0, 218, false, false}, {293, 209, false, false}, + {391, 214, true, false}, {391, 147, false, true}, {0, 66, false, false}, {0, 218, false, true}, + {783, 142, false, false}, {783, 66, false, false}, {0, 862, false, false}, {0, 209, true, false}, + {0, 214, true, false}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, + {0, 218, false, false}, {0, 209, false, true}, {0, 218, false, false}, {293, 209, false, false}, + {391, 214, true, false}, {391, 147, true, false}, {0, 66, false, false}, {0, 218, false, true}, + {783, 142, false, false}, {783, 66, false, false}, {0, 433, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 209, true, false}, {0, 214, false, true}, {0, 218, false, true}, + {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, + {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, false, true}, + {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, + {0, 862, false, false}, {0, 209, true, false}, {0, 214, true, false}, {0, 218, false, true}, + {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, + {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, true, false}, + {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, + {0, 862, false, false}, {0, 209, true, false}, {0, 214, true, false}, {0, 218, false, true}, + {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, + {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, true, false}, + {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, + {0, 862, false, false}, {0, 209, true, false}, {0, 214, true, false}, {0, 218, false, true}, + {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, + {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, true, false}, + {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, + {0, 433, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, false}, + {293, 214, false, true}, {391, 214, false, false}, {440, 214, false, false}, {493, 214, false, false}, + {523, 214, false, false}, {493, 214, false, true}, {440, 214, false, true}, {391, 214, true, false}, + {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, {0, 71, false, false}, + {261, 357, false, false}, {0, 71, false, false}, {391, 357, false, false}, {0, 71, false, false}, + {293, 209, true, false}, {293, 147, true, false}, {0, 66, false, false}, {0, 218, false, true}, + {0, 142, false, true}, {0, 66, false, false}, {0, 433, false, false}, {0, 214, false, true}, + {0, 142, false, true}, {0, 66, false, false}, {0, 214, true, false}, {0, 214, true, false}, + {0, 361, false, true}, {0, 285, false, false}, {261, 209, false, false}, {0, 214, true, false}, + {261, 214, false, true}, {0, 214, true, true}, {293, 214, false, true}, {391, 361, false, true}, + {0, 285, false, false}, {0, 209, false, true}, {0, 218, false, false}, {0, 209, false, true}, + {0, 214, true, false}, {0, 214, false, true}, {0, 218, false, true}, {293, 142, false, false}, + {293, 66, false, false}, {0, 218, false, false}, {391, 209, false, false}, {0, 433, false, false}, + {0, 209, true, false}, {293, 214, false, true}, {391, 214, false, false}, {440, 214, false, false}, + {493, 214, false, false}, {523, 214, false, false}, {493, 214, false, true}, {440, 214, false, true}, + {391, 214, true, false}, {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, + {0, 71, false, false}, {261, 357, false, false}, {0, 71, false, false}, {391, 357, false, false}, + {0, 71, false, false}, {293, 209, true, false}, {293, 147, true, false}, {0, 66, false, false}, + {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, + {0, 209, false, true}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, + {0, 214, true, false}, {0, 214, true, false}, {0, 218, false, false}, {261, 209, false, true}, + {0, 218, false, false}, {261, 209, false, false}, {0, 218, true, false}, {261, 142, false, false}, + {261, 66, false, false}, {0, 214, true, true}, {293, 214, false, true}, {391, 218, false, false}, + {391, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, + {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, {0, 214, true, false}, + {0, 214, false, true}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, + {0, 862, false, false}, {0, 209, true, false}, {0, 214, false, true}, {261, 218, false, false}, + {391, 142, false, false}, {391, 66, false, false}, {659, 214, false, false}, {587, 214, false, false}, + {523, 214, false, false}, {659, 214, false, false}, {587, 214, true, false}, {587, 147, false, true}, + {0, 66, false, false}, {0, 218, false, true}, {391, 142, false, false}, {391, 66, false, false}, + {0, 218, false, false}, {0, 209, false, true}, {0, 361, false, true}, {0, 71, false, false}, + {0, 209, true, false}, {0, 214, false, true}, {0, 218, false, true}, {329, 142, false, false}, + {329, 66, false, false}, {587, 214, false, false}, {523, 214, false, false}, {493, 214, false, true}, + {523, 147, false, false}, {523, 66, false, false}, {493, 214, true, false}, {493, 147, false, true}, + {0, 66, false, false}, {0, 218, false, true}, {391, 142, false, false}, {391, 66, false, false}, + {0, 433, false, false}, {0, 357, false, true}, {0, 71, false, false}, {0, 209, true, false}, + {0, 214, false, true}, {261, 218, false, false}, {391, 142, false, false}, {391, 66, false, false}, + {659, 214, false, false}, {587, 214, false, false}, {523, 214, false, false}, {659, 214, false, false}, + {587, 214, true, false}, {587, 147, false, true}, {0, 66, false, false}, {0, 218, false, true}, + {391, 142, false, false}, {391, 66, false, false}, {0, 433, false, false}, {0, 357, false, true}, + {0, 71, false, false}, {0, 209, true, false}, {0, 214, false, true}, {0, 361, false, true}, + {0, 71, false, false}, {523, 209, false, false}, {587, 214, false, false}, {523, 214, false, true}, + {493, 147, false, false}, {493, 66, false, false}, {0, 214, true, false}, {0, 214, false, true}, + {391, 361, false, false}, {0, 71, false, false}, {329, 209, false, true}, {329, 147, false, true}, + {0, 66, false, false}, {0, 433, false, false}, {0, 209, true, false}, {293, 214, false, true}, + {391, 214, false, false}, {440, 214, false, false}, {493, 214, false, false}, {523, 214, false, false}, + {493, 214, false, true}, {440, 147, false, false}, {440, 66, false, false}, {391, 214, true, false}, + {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, {0, 71, false, false}, + {261, 214, false, false}, {261, 142, true, false}, {0, 66, false, false}, {391, 361, false, true}, + {0, 71, false, false}, {293, 209, true, false}, {293, 147, true, false}, {0, 66, false, false}, + {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, {0, 433, false, false}, + {0, 214, true, false}, {0, 142, false, true}, {0, 66, false, false}, {0, 214, true, false}, + {0, 214, true, false}, {0, 361, false, true}, {0, 500, false, false}, {0, 214, true, false}, + {261, 142, false, false}, {261, 66, false, false}, {0, 214, true, true}, {293, 214, false, true}, + {391, 361, false, true}, {0, 285, false, false}, {0, 209, false, true}, {0, 218, false, true}, + {0, 142, false, true}, {0, 66, false, false}, {0, 361, true, false}, {0, 71, false, false}, + {0, 214, false, true}, {293, 142, false, false}, {293, 66, false, false}, {0, 862, false, false}, + {0, 209, true, false}, {293, 214, false, true}, {391, 214, false, false}, {440, 214, false, false}, + {493, 214, false, false}, {523, 214, false, false}, {493, 214, false, true}, {440, 214, false, true}, + {391, 214, true, false}, {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, + {0, 71, false, false}, {261, 214, false, false}, {261, 142, true, false}, {0, 66, false, false}, + {391, 361, false, false}, {0, 71, false, false}, {293, 209, true, false}, {293, 147, true, false}, + {0, 66, false, false}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, + {0, 218, false, false}, {261, 209, false, false}, {0, 218, false, true}, {0, 142, false, true}, + {0, 66, false, false}, {0, 214, true, false}, {0, 214, true, false}, {0, 361, false, true}, + {0, 285, false, false}, {261, 209, false, false}, {0, 218, true, false}, {261, 142, false, false}, + {261, 66, false, false}, {0, 214, true, true}, {293, 214, false, true}, {391, 361, false, true}, + {0, 285, false, false}, {0, 209, false, true}, {0, 218, false, true}, {0, 142, false, true}, + {0, 66, false, false}, {0, 214, true, false}, {0, 214, false, true}, {0, 361, false, true}, + {0, 285, false, false}, {391, 209, false, true}, {0, 433, false, false}, {0, 209, true, false}, + {0, 214, true, false}, {0, 218, false, true}, {349, 142, false, true}, {349, 66, false, false}, + {0, 218, false, false}, {349, 209, false, true}, {349, 214, false, true}, {349, 214, false, true}, + {0, 218, true, false}, {349, 142, false, true}, {349, 66, false, false}, {349, 214, false, true}, + {349, 214, false, true}, {0, 218, true, false}, {349, 142, false, true}, {349, 66, false, false}, + {349, 214, false, true}, {349, 147, false, true}, {349, 66, false, false}, {0, 214, true, false}, + {0, 214, true, false}, {0, 218, false, true}, {391, 142, false, true}, {391, 66, false, false}, + {0, 218, false, false}, {391, 209, false, true}, {0, 218, false, true}, {391, 142, false, true}, + {391, 66, false, false}, {0, 218, true, false}, {391, 142, false, true}, {391, 66, false, false}, + {0, 214, false, true}, {391, 111, false, true}, {391, 102, false, true}, {391, 214, false, true}, + {391, 214, false, true}, {391, 214, false, true}, {391, 214, false, true}, {0, 214, true, false}, + {0, 214, true, false}, {0, 218, false, true}, {391, 142, false, false}, {391, 66, false, false}, + {0, 218, false, false}, {391, 209, false, false}, {0, 218, false, true}, {391, 142, false, false}, + {391, 66, false, false}, {0, 218, true, false}, {440, 142, false, false}, {440, 66, false, false}, + {0, 218, false, true}, {440, 142, false, false}, {440, 66, false, false}, {0, 218, false, false}, + {440, 209, false, true}, {0, 218, false, false}, {0, 209, false, true}, {0, 371, true, true}, + {0, 375, true, true}, {0, 375, true, true}, {0, 1133, true, true}, {293, 625, false, true}, + {0, 125, false, false}, {587, 156, false, false}, {523, 160, false, false}, {391, 107, false, true}, + {293, 160, false, true}, {261, 160, true, false}, {0, 107, true, true}, {0, 361, true, true}, + {0, 2108, false, false}, {0, 107, false, false}, {293, 1607, true, true}, {0, 107, false, false}, + {329, 1607, false, true}, {0, 107, false, false}, {349, 1607, false, false}, {0, 107, false, false}, + {391, 1607, false, false}, {0, 107, false, false}, {293, 1607, true, true}, {0, 107, false, false}, + {329, 1607, false, true}, {0, 107, false, false}, {349, 1607, false, false}, {0, 107, false, false}, + {391, 750, false, false}, {0, 964, false, false}, {293, 357, false, true}, {0, 71, false, false}, + {293, 357, false, true}, {0, 281, false, false}, {293, 214, false, true}, {293, 107, false, true}, + {293, 107, false, true}, {523, 107, false, true}, {523, 107, false, true}, {493, 214, false, true}, + {391, 147, false, false}, {391, 66, false, false}, {329, 361, false, true}, {293, 285, false, false}, + {329, 209, false, true}, {329, 107, false, true}, {329, 107, false, true}, {329, 107, false, true}, + {329, 107, false, true}, {349, 361, false, true}, {293, 71, false, false}, {349, 142, false, true}, + {349, 71, false, false}, {349, 142, false, false}, {0, 281, false, false}, {349, 214, false, true}, + {391, 107, false, true}, {391, 107, false, true}, {349, 107, false, true}, {349, 107, false, true}, + {391, 361, false, true}, {0, 71, false, false}, {391, 357, false, true}, {0, 285, false, false}, + {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, {391, 107, false, true}, + {391, 107, false, true}, {293, 361, false, true}, {0, 71, false, false}, {293, 357, false, true}, + {0, 281, false, false}, {293, 214, false, true}, {293, 107, false, true}, {293, 107, false, true}, + {523, 107, false, true}, {523, 107, false, true}, {493, 214, false, true}, {391, 147, false, false}, + {391, 66, false, false}, {329, 361, false, true}, {293, 214, false, false}, {0, 71, false, false}, + {329, 209, false, true}, {329, 107, false, true}, {329, 107, false, true}, {587, 107, false, true}, + {587, 107, false, true}, {523, 361, false, true}, {0, 71, false, false}, {493, 357, false, true}, + {493, 285, false, false}, {493, 209, false, true}, {493, 107, false, true}, {493, 107, false, true}, + {440, 107, false, true}, {440, 107, false, true}, {493, 361, false, true}, {493, 71, false, false}, + {493, 357, false, true}, {493, 285, false, false}, {493, 209, false, true}, {493, 107, false, true}, + {493, 107, false, true}, {493, 107, false, true}, {391, 107, false, true}, {349, 361, false, true}, + {311, 71, false, false}, {349, 357, false, true}, {311, 281, false, false}, {349, 214, false, true}, + {349, 107, false, true}, {349, 107, false, true}, {622, 107, false, true}, {622, 107, false, true}, + {587, 214, false, true}, {466, 147, false, false}, {466, 66, false, false}, {391, 361, false, true}, + {349, 285, false, false}, {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, + {391, 107, false, true}, {391, 107, false, true}, {415, 214, false, true}, {415, 147, false, false}, + {349, 71, false, false}, {415, 357, false, true}, {349, 285, false, false}, {415, 209, false, true}, + {415, 107, false, true}, {415, 107, false, true}, {415, 107, false, true}, {415, 107, false, true}, + {466, 361, false, true}, {0, 71, false, false}, {466, 357, false, true}, {0, 285, false, false}, + {466, 209, false, true}, {466, 107, false, true}, {466, 107, false, true}, {466, 107, false, true}, + {466, 107, false, true}, {293, 361, false, true}, {0, 71, false, false}, {293, 357, false, true}, + {0, 281, false, false}, {293, 214, false, true}, {293, 107, false, true}, {293, 107, false, true}, + {523, 107, false, true}, {523, 107, false, true}, {493, 214, false, true}, {391, 147, false, false}, + {391, 66, false, false}, {329, 361, false, true}, {293, 285, false, false}, {329, 209, false, true}, + {329, 107, false, true}, {329, 107, false, true}, {329, 107, false, true}, {329, 107, false, true}, + {391, 361, false, true}, {391, 71, false, false}, {391, 357, false, true}, {391, 285, false, false}, + {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, {391, 107, false, true}, + {349, 107, false, true}, {391, 361, false, true}, {349, 71, false, false}, {391, 357, false, true}, + {349, 285, false, false}, {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, + {391, 107, false, true}, {391, 107, false, true}, {523, 754, false, false}, {0, 107, false, false}, + {783, 750, false, false}, {0, 107, false, false}, {698, 357, false, false}, {0, 71, false, false}, + {587, 1179, false, false}, {0, 107, false, false}, {523, 750, false, false}, {0, 107, false, false}, + {783, 750, false, false}, {0, 107, false, false}, {698, 357, false, false}, {0, 71, false, false}, + {587, 750, false, false}, {0, 107, false, false}, {987, 357, false, false}, {0, 71, false, false}, + {523, 750, false, false}, {0, 107, false, false}, {783, 750, false, false}, {0, 107, false, false}, + {698, 750, false, false}, {0, 107, false, false}, {587, 750, false, false}, {0, 107, false, false}, + {622, 2465, false, false}, {0, 107, false, false}, {523, 750, false, false}, {0, 107, false, false}, + {587, 3322, false, false}, {0, 107, false, false}, {622, 1607, false, false}, {0, 107, false, false}, + {830, 750, false, false}, {0, 107, false, false}, {622, 750, false, false}, {0, 107, false, false}, + {587, 1607, false, false}, {0, 107, false, false}, {783, 1067, false, false}, {391, 53, false, false}, + {349, 53, false, false}, {329, 53, false, false}, {293, 53, false, false}, {391, 53, false, false}, + {349, 53, false, false}, {329, 53, false, false}, {293, 53, false, false}, {391, 53, false, false}, + {349, 53, false, false}, {329, 53, false, false}, {0, 58, false, false}, {0, 244, true, false}, + {0, 250, true, false}, {0, 250, true, false}, {0, 1130, true, false}, {0, 125, false, false}, + {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 1130, true, false}, + {0, 125, false, false}, {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, + {0, 500, true, false}, {0, 500, true, false}, {0, 500, true, false}, {0, 1631, true, false}, + {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, {880, 171, true, false}, + {0, 78, false, false}, {830, 1130, true, false}, {0, 125, false, false}, {783, 244, true, false}, + {783, 250, true, false}, {783, 171, true, false}, {0, 78, false, false}, {698, 1130, true, false}, + {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, {880, 171, true, false}, + {0, 78, false, false}, {830, 500, true, false}, {783, 500, true, false}, {698, 500, true, false}, + {587, 1631, true, false}, {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, + {880, 171, true, false}, {0, 78, false, false}, {830, 1130, true, false}, {0, 125, false, false}, + {783, 244, true, false}, {783, 250, true, false}, {783, 171, true, false}, {0, 78, false, false}, + {698, 1130, true, false}, {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, + {880, 171, true, false}, {0, 78, false, false}, {830, 500, true, false}, {783, 500, true, false}, + {698, 500, true, false}, {587, 1631, true, false}, {0, 125, false, false}, {587, 244, true, false}, + {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 1130, true, false}, + {0, 125, false, false}, {523, 244, true, false}, {523, 250, true, false}, {523, 171, true, false}, + {0, 78, false, false}, {493, 1130, true, false}, {0, 125, false, false}, {587, 244, true, false}, + {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 1130, true, false}, + {0, 125, false, false}, {523, 244, true, false}, {523, 250, true, false}, {523, 171, true, false}, + {0, 78, false, false}, {493, 1130, true, false}, {0, 125, false, false}, {587, 244, true, false}, + {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 500, true, false}, + {554, 630, true, false}, {0, 41, false, false}, {0, 83, false, false}, {587, 244, true, false}, + {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 1130, true, false}, + {0, 125, false, false}, {587, 244, true, false}, {587, 250, true, false}, {587, 171, true, false}, + {0, 78, false, false}, {554, 1130, true, false}, {0, 125, false, false}, {523, 244, true, false}, + {523, 250, true, false}, {523, 171, true, false}, {0, 78, false, false}, {493, 1130, true, false}, + {0, 125, false, false}, {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, + {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, + {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, + {0, 250, true, false}, {0, 250, true, false}, {0, 672, true, false}, {0, 83, false, false}, + {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, + {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, + {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, + {0, 250, true, false}, {0, 672, true, false}, {0, 83, false, false}, {0, 357, true, false}, + {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, + {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 214, true, false}, {523, 142, false, false}, {523, 71, false, false}, + {523, 209, true, false}, {523, 147, false, false}, {523, 66, false, false}, {440, 214, false, false}, + {440, 214, false, false}, {466, 214, true, false}, {466, 147, false, false}, {466, 66, false, false}, + {0, 361, true, false}, {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, + {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, + {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, + {0, 214, true, false}, {523, 142, false, false}, {523, 71, false, false}, {523, 209, true, false}, + {523, 147, false, false}, {523, 66, false, false}, {440, 214, false, false}, {440, 214, false, false}, + {466, 214, true, false}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 214, true, false}, {349, 142, false, false}, {349, 71, false, false}, + {349, 209, true, false}, {349, 147, false, false}, {349, 66, false, false}, {293, 214, false, false}, + {293, 214, false, false}, {311, 214, true, false}, {311, 147, false, false}, {311, 66, false, false}, + {0, 361, true, false}, {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, + {0, 357, true, false}, {0, 71, false, false}, {0, 214, true, false}, {349, 142, false, false}, + {349, 71, false, false}, {349, 209, true, false}, {349, 147, false, false}, {349, 66, false, false}, + {293, 214, false, false}, {293, 214, false, false}, {311, 214, true, false}, {311, 147, false, false}, + {311, 66, false, false}, {0, 361, true, false}, {0, 71, false, false}, {0, 357, true, false}, + {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, + {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, + {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, + {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, + {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, + {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, + {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, + {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, + {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 107, true, false}, {311, 102, false, false}, {293, 107, false, false}, + {277, 40, false, false}, {277, 66, false, false}, {261, 361, true, false}, {0, 71, false, false}, + {311, 357, false, false}, {0, 71, false, false}, {293, 357, true, false}, {0, 71, false, false}, + {0, 357, true, true}, {0, 71, false, false}, {0, 357, true, true}, {0, 71, false, false}, + {277, 357, false, false}, {0, 71, false, false}, {261, 156, true, false}, {369, 160, false, false}, + {349, 40, false, false}, {349, 66, false, false}, {329, 160, true, false}, {493, 160, false, false}, + {466, 40, false, false}, {466, 66, false, false}, {440, 321, true, false}, {311, 40, false, false}, + {311, 66, false, false}, {0, 111, false, false}, {0, 316, false, true}, {0, 321, true, true}, + {0, 40, false, true}, {0, 66, false, false}, {0, 218, true, false}, {0, 142, false, true}, + {0, 66, false, false}, {0, 361, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, + {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, + {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, + {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, + {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, + {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, + {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, + {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, + {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 107, true, false}, {311, 102, false, false}, {293, 107, false, false}, + {277, 40, false, false}, {277, 66, false, false}, {261, 361, true, false}, {0, 71, false, false}, + {311, 357, false, false}, {0, 71, false, false}, {293, 357, true, false}, {0, 71, false, false}, + {0, 357, true, true}, {0, 71, false, false}, {0, 357, true, true}, {0, 71, false, false}, + {277, 357, false, false}, {0, 71, false, false}, {261, 156, true, false}, {369, 160, false, false}, + {349, 40, false, false}, {349, 66, false, false}, {329, 160, true, false}, {493, 160, false, false}, + {466, 40, false, false}, {466, 66, false, false}, {440, 321, true, false}, {311, 40, false, false}, + {311, 66, false, false}, {0, 111, false, false}, {0, 316, false, true}, {0, 321, true, true}, + {0, 40, false, true}, {0, 66, false, false}, {0, 218, true, false}, {0, 142, false, true}, + {0, 66, false, false}, {0, 361, true, false}, {0, 500, false, false}, {0, 357, true, false}, + {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {783, 357, false, true}, + {0, 285, false, false}, {880, 209, false, true}, {0, 218, false, false}, {783, 209, false, true}, + {0, 218, false, false}, {739, 209, false, true}, {783, 214, false, true}, {1046, 214, false, true}, + {1318, 361, false, false}, {0, 500, false, false}, {391, 209, false, false}, {523, 214, false, false}, + {698, 361, false, true}, {0, 285, false, false}, {783, 209, false, true}, {0, 218, false, false}, + {698, 209, false, true}, {0, 218, false, false}, {659, 209, true, true}, {698, 214, false, true}, + {987, 214, false, true}, {1174, 361, false, true}, {0, 500, false, false}, {391, 209, false, false}, + {493, 214, false, false}, {659, 361, true, true}, {0, 285, false, false}, {698, 209, false, true}, + {0, 218, false, false}, {659, 209, true, true}, {0, 218, false, false}, {622, 209, true, true}, + {659, 214, true, true}, {880, 214, false, true}, {1046, 361, false, true}, {0, 285, false, false}, + {880, 209, true, true}, {987, 214, false, true}, {1046, 214, false, true}, {1174, 214, false, true}, + {1046, 214, false, true}, {1174, 214, false, true}, {1046, 428, false, true}, {880, 214, false, true}, + {739, 214, true, true}, {587, 214, true, true}, {523, 214, true, true}, {440, 214, true, true}, + {0, 214, true, true}, {0, 969, false, true}, {0, 107, false, false}, {659, 308, false, false}, + {0, 61, false, false}, {0, 308, false, true}, {0, 61, false, false}, {659, 308, false, false}, + {0, 61, false, false}, {0, 308, false, true}, {0, 61, false, false}, {659, 308, false, false}, + {0, 61, false, false}, {554, 181, false, true}, {0, 127, false, true}, {0, 57, false, false}, + {493, 185, false, true}, {493, 127, false, true}, {0, 57, false, false}, {466, 185, false, false}, + {466, 127, false, false}, {261, 57, false, false}, {440, 185, false, true}, {440, 185, false, true}, + {440, 185, false, true}, {440, 96, false, true}, {0, 88, false, false}, {493, 312, false, true}, + {0, 61, false, false}, {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, + {293, 185, false, true}, {293, 185, false, true}, {293, 185, false, true}, {293, 185, false, true}, + {293, 281, false, true}, {0, 30, false, false}, {0, 61, false, false}, {0, 181, false, true}, + {0, 185, true, false}, {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, + {0, 92, true, true}, {0, 220, false, true}, {0, 57, false, false}, {329, 277, true, true}, + {329, 34, false, true}, {0, 57, false, false}, {293, 185, true, false}, {293, 127, false, true}, + {0, 57, false, false}, {0, 185, true, true}, {0, 185, false, true}, {0, 185, true, false}, + {0, 185, false, true}, {0, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, + {0, 308, true, true}, {0, 61, false, false}, {0, 181, true, true}, {0, 185, false, true}, + {0, 127, true, false}, {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, false}, + {0, 127, false, true}, {0, 57, false, false}, {440, 185, true, false}, {440, 185, false, true}, + {440, 185, true, false}, {0, 185, false, true}, {0, 185, true, false}, {0, 127, false, true}, + {0, 57, false, false}, {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, + {440, 185, true, false}, {440, 127, false, true}, {0, 57, false, false}, {0, 185, true, true}, + {0, 185, false, true}, {0, 185, true, false}, {0, 96, false, true}, {0, 88, false, false}, + {0, 185, true, false}, {0, 185, false, true}, {440, 185, true, false}, {440, 127, false, true}, + {0, 57, false, false}, {329, 185, false, true}, {329, 185, true, true}, {329, 185, true, false}, + {329, 185, true, true}, {329, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, + {0, 181, true, true}, {0, 185, true, true}, {369, 92, false, true}, {369, 92, false, true}, + {369, 92, false, true}, {369, 92, false, true}, {369, 185, false, true}, {369, 96, false, true}, + {0, 88, false, false}, {493, 185, false, true}, {493, 127, false, true}, {0, 57, false, false}, + {440, 185, false, true}, {440, 127, false, true}, {0, 57, false, false}, {523, 92, false, true}, + {523, 92, false, true}, {523, 92, false, true}, {523, 92, false, true}, {523, 185, false, true}, + {523, 185, false, true}, {523, 185, false, true}, {523, 96, false, true}, {0, 88, false, false}, + {0, 185, false, true}, {0, 185, false, true}, {493, 92, false, true}, {493, 92, false, true}, + {493, 92, false, true}, {493, 34, false, true}, {0, 57, false, false}, {493, 185, false, true}, + {493, 127, false, true}, {0, 57, false, false}, {659, 185, false, true}, {659, 127, false, true}, + {0, 57, false, false}, {587, 185, false, true}, {587, 127, false, true}, {0, 57, false, false}, + {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, + {493, 185, false, true}, {493, 185, false, true}, {493, 185, false, false}, {493, 96, false, true}, + {293, 88, false, false}, {0, 185, false, true}, {293, 185, false, true}, {440, 312, false, true}, + {440, 61, false, false}, {440, 123, false, true}, {0, 61, false, false}, {440, 123, false, false}, + {440, 61, false, false}, {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, + {0, 185, false, true}, {0, 185, false, true}, {0, 185, false, true}, {440, 185, false, true}, + {440, 185, false, true}, {440, 127, false, true}, {0, 57, false, false}, {0, 185, false, true}, + {0, 127, false, true}, {0, 57, false, false}, {329, 312, false, true}, {0, 61, false, false}, + {293, 308, false, true}, {293, 61, false, false}, {293, 308, false, true}, {293, 61, false, false}, + {293, 181, true, false}, {293, 185, false, true}, {293, 185, true, false}, {293, 185, false, true}, + {293, 185, true, false}, {293, 185, false, true}, {293, 185, true, false}, {293, 96, false, true}, + {0, 88, false, false}, {0, 185, false, true}, {0, 185, false, true}, {0, 312, false, true}, + {0, 61, false, false}, {440, 181, false, true}, {440, 185, false, true}, {440, 185, false, true}, + {440, 96, false, true}, {0, 88, false, false}, {493, 312, false, true}, {0, 61, false, false}, + {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, {293, 185, false, true}, + {293, 185, false, true}, {293, 185, false, true}, {293, 185, false, true}, {293, 281, false, true}, + {0, 30, false, false}, {0, 61, false, false}, {0, 181, false, true}, {0, 185, true, false}, + {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, {0, 92, true, true}, + {0, 220, false, true}, {0, 57, false, false}, {329, 277, true, true}, {329, 34, false, true}, + {0, 57, false, false}, {293, 185, true, false}, {293, 127, false, true}, {0, 57, false, false}, + {0, 185, true, true}, {0, 185, false, true}, {0, 185, true, false}, {0, 185, false, true}, + {0, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, {0, 308, true, true}, + {0, 61, false, false}, {0, 181, true, true}, {0, 185, false, true}, {0, 127, true, false}, + {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, false}, {0, 127, false, true}, + {0, 57, false, false}, {440, 185, true, false}, {440, 185, false, true}, {440, 185, true, false}, + {0, 185, false, true}, {0, 185, true, false}, {0, 127, false, true}, {0, 57, false, false}, + {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, {440, 185, true, false}, + {440, 127, false, true}, {0, 57, false, false}, {0, 185, true, true}, {0, 185, false, true}, + {0, 185, true, false}, {0, 96, false, true}, {0, 88, false, false}, {0, 185, true, false}, + {0, 185, false, true}, {440, 185, true, false}, {440, 127, false, true}, {0, 57, false, false}, + {329, 185, false, true}, {329, 185, true, true}, {329, 185, true, false}, {329, 185, true, true}, + {329, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, {0, 181, true, true}, + {0, 185, true, true}, {369, 92, false, true}, {369, 92, false, true}, {369, 92, false, true}, + {369, 92, false, true}, {369, 185, false, true}, {369, 96, false, true}, {0, 88, false, false}, + {493, 185, false, true}, {493, 127, false, true}, {0, 57, false, false}, {440, 185, false, true}, + {440, 127, false, true}, {0, 57, false, false}, {523, 92, false, true}, {523, 92, false, true}, + {523, 92, false, true}, {523, 92, false, true}, {523, 185, false, true}, {523, 185, false, true}, + {523, 185, false, true}, {523, 96, false, true}, {0, 88, false, false}, {0, 185, false, true}, + {0, 185, false, true}, {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, + {493, 34, false, true}, {0, 57, false, false}, {493, 185, false, true}, {493, 127, false, true}, + {0, 57, false, false}, {659, 185, false, true}, {659, 127, false, true}, {0, 57, false, false}, + {587, 185, false, true}, {587, 127, false, true}, {0, 57, false, false}, {493, 92, false, true}, + {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, {493, 185, false, true}, + {493, 185, false, true}, {493, 185, false, false}, {493, 96, false, true}, {293, 88, false, false}, + {0, 185, false, true}, {293, 185, false, true}, {440, 312, false, true}, {440, 61, false, false}, + {440, 123, false, true}, {0, 61, false, false}, {440, 123, false, false}, {440, 61, false, false}, + {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, {0, 185, false, true}, + {0, 185, false, true}, {0, 185, false, true}, {440, 185, false, true}, {440, 185, false, true}, + {440, 127, false, true}, {0, 57, false, false}, {0, 185, false, true}, {0, 127, false, true}, + {0, 57, false, false}, {329, 312, false, true}, {0, 61, false, false}, {293, 308, false, true}, + {293, 61, false, false}, {293, 181, true, true}, {293, 185, true, false}, {293, 185, false, true}, + {293, 185, false, true}, {293, 185, true, false}, {293, 96, false, true}, {0, 88, false, false}, + {0, 185, false, true}, {587, 185, false, true}, {554, 185, true, false}, {587, 185, true, true}, + {659, 185, false, true}, {739, 185, false, true}, {783, 185, false, true}, {880, 185, false, true}, + {987, 277, false, true}, {987, 92, false, true}, {987, 185, false, true}, {987, 96, false, true}, + {0, 88, false, false}, {932, 312, false, true}, {932, 61, false, false}, {932, 277, false, true}, + {0, 30, false, false}, {0, 61, false, false}, {880, 273, false, true}, {880, 92, false, true}, + {880, 185, false, true}, {880, 96, false, true}, {0, 88, false, false}, {987, 185, false, true}, + {987, 127, false, true}, {0, 57, false, false}, {739, 92, false, true}, {739, 220, false, true}, + {0, 57, false, false}, {783, 277, false, true}, {783, 92, true, true}, {783, 185, false, true}, + {783, 96, true, true}, {0, 88, false, false}, {880, 312, true, true}, {880, 61, false, false}, + {880, 277, false, true}, {0, 30, false, false}, {0, 61, false, false}, {739, 181, false, true}, + {739, 185, true, true}, {739, 185, true, false}, {739, 96, true, true}, {0, 88, false, false}, + {0, 185, false, true}, {880, 185, true, true}, {987, 185, false, true}, {1108, 185, true, true}, + {1174, 312, true, true}, {1174, 61, false, false}, {1174, 277, false, true}, {0, 30, false, false}, + {0, 61, false, false}, {0, 185, true, true}, {1108, 123, false, false}, {1108, 57, false, false}, + {1174, 185, true, true}, {1318, 127, false, false}, {1318, 57, false, false}, {1479, 185, false, true}, + {1479, 185, true, true}, {1479, 185, true, false}, {1479, 96, false, true}, {0, 88, false, false}, + {880, 312, true, true}, {0, 61, false, false}, {1479, 308, true, true}, {0, 61, false, false}, + {1318, 181, false, true}, {1318, 185, true, true}, {1318, 185, false, true}, {1318, 96, true, true}, + {0, 88, false, false}, {1174, 185, false, true}, {1174, 127, true, true}, {0, 57, false, false}, + {1108, 185, false, true}, {1108, 127, true, true}, {0, 57, false, false}, {1174, 312, true, true}, + {1174, 61, false, false}, {1174, 308, true, false}, {1174, 61, false, false}, {1174, 181, false, true}, + {1174, 185, true, true}, {1174, 92, true, false}, {1174, 189, true, true}, {0, 88, false, false}, + {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {329, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {277, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {329, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {391, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {440, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {391, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, + {277, 92, true, true}, {293, 92, false, false}, {277, 92, false, false}, {293, 34, false, false}, + {293, 57, false, false}, {329, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, + {293, 92, false, false}, {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, + {293, 92, false, false}, {329, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, + {293, 92, false, false}, {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, + {293, 92, false, false}, {391, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, + {293, 92, false, false}, {440, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, + {293, 92, false, true}, {391, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, + {293, 92, false, false}, {880, 277, true, true}, {880, 34, true, true}, {0, 57, false, false}, + {0, 185, true, false}, {0, 185, true, true}, {880, 185, true, false}, {880, 127, true, true}, + {0, 57, false, false}, {0, 185, true, false}, {0, 185, true, true}, {880, 312, true, true}, + {0, 61, false, false}, {739, 181, true, false}, {739, 127, true, true}, {0, 57, false, false}, + {659, 185, false, true}, {659, 127, true, true}, {0, 57, false, false}, {622, 185, false, true}, + {622, 127, true, true}, {0, 57, false, false}, {587, 277, true, true}, {587, 34, true, true}, + {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, true}, {587, 185, false, true}, + {587, 127, true, true}, {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, true}, + {587, 185, false, true}, {587, 127, true, true}, {0, 57, false, false}, {0, 185, false, true}, + {493, 92, true, true}, {523, 92, false, false}, {587, 185, false, true}, {587, 127, true, true}, + {0, 57, false, false}, {659, 185, false, true}, {659, 127, true, true}, {0, 57, false, false}, + {587, 312, true, true}, {0, 61, false, false}, {0, 185, true, false}, {587, 123, false, false}, + {587, 57, false, false}, {739, 185, false, true}, {739, 127, true, true}, {0, 57, false, false}, + {880, 92, true, false}, {880, 220, true, true}, {0, 57, false, false}, {830, 312, true, true}, + {0, 61, false, false}, {880, 181, true, false}, {880, 127, true, true}, {0, 57, false, false}, + {830, 92, false, true}, {880, 92, false, false}, {830, 92, true, true}, {739, 92, false, false}, + {587, 185, false, true}, {440, 185, true, true}, {493, 277, true, true}, {554, 34, false, false}, + {554, 57, false, false}, {587, 185, false, true}, {587, 92, true, true}, {659, 92, false, false}, + {739, 92, true, true}, {698, 92, false, false}, {739, 92, false, false}, {783, 34, false, false}, + {783, 57, false, false}, {880, 92, true, true}, {783, 92, false, false}, {739, 92, false, false}, + {659, 34, false, false}, {659, 57, false, false}, {587, 92, false, true}, {554, 92, false, false}, + {587, 92, true, true}, {880, 92, false, false}, {554, 92, false, true}, {523, 92, false, false}, + {554, 92, true, true}, {880, 92, false, false}, {554, 92, false, true}, {523, 92, false, false}, + {493, 92, true, true}, {466, 92, false, false}, {440, 92, false, true}, {415, 92, false, false}, + {391, 92, true, true}, {329, 92, false, false}, {0, 2405, true, true}, {440, 293, false, false}, + {1174, 300, false, false}, {880, 300, false, false}, {830, 2557, false, false}, {0, 4251, false, false}, + {0, 100, false, false}, {0, 1800, true, true}, {440, 293, false, false}, {1174, 300, false, false}, + {880, 300, false, false}, {830, 2007, false, false}, {0, 100, false, false}, {1975, 500, false, false}, + {0, 3551, false, false}, {0, 150, false, false}, {0, 2401, true, true}, {440, 293, false, false}, + {1174, 300, false, false}, {880, 300, false, false}, {830, 1357, false, false}, {0, 150, false, false}, + {0, 150, true, true}, {440, 143, false, false}, {587, 150, false, false}, {880, 150, false, false}, + {830, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {783, 150, false, false}, + {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, + {659, 150, false, false}, {391, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, + {587, 300, false, false}, {440, 150, false, false}, {587, 56, false, false}, {587, 93, false, false}, + {554, 300, true, true}, {391, 150, false, false}, {466, 56, false, false}, {466, 93, false, false}, + {440, 300, true, true}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, + {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, {466, 150, true, false}, + {391, 150, false, false}, {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, + {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {698, 150, true, false}, + {880, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, + {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {659, 150, true, false}, + {783, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, + {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, {587, 150, true, true}, + {698, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, + {880, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, {554, 300, true, true}, + {783, 300, true, false}, {932, 300, true, false}, {880, 300, true, false}, {783, 1056, true, false}, + {0, 150, false, false}, {0, 150, true, true}, {1174, 143, false, false}, {1108, 150, false, false}, + {1174, 150, false, false}, {1244, 150, false, false}, {1174, 150, false, false}, {1108, 150, false, false}, + {830, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, + {698, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, + {554, 150, false, false}, {587, 506, false, false}, {0, 543, false, false}, {0, 150, false, true}, + {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, {0, 150, false, true}, + {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, {0, 150, true, false}, + {0, 300, true, true}, {0, 300, false, true}, {0, 300, true, true}, {391, 300, false, true}, + {0, 300, true, true}, {466, 300, false, true}, {440, 300, true, false}, {554, 300, false, true}, + {587, 150, true, false}, {440, 150, false, false}, {587, 150, false, false}, {880, 56, false, false}, + {880, 93, false, false}, {830, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, + {783, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, + {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, {554, 150, false, false}, + {659, 150, false, false}, {587, 300, false, false}, {440, 150, false, false}, {587, 150, false, false}, + {554, 300, false, false}, {391, 150, false, false}, {466, 150, false, false}, {440, 300, false, false}, + {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, + {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, + {659, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {880, 150, false, false}, + {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {1174, 150, false, false}, + {880, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {783, 150, false, false}, + {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, {1108, 150, false, false}, + {783, 150, false, false}, {659, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, + {587, 150, false, false}, {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {440, 150, false, false}, {622, 150, true, true}, {391, 150, false, false}, + {587, 150, true, true}, {440, 150, false, false}, {622, 150, true, false}, {440, 150, false, false}, + {587, 150, true, false}, {440, 150, false, false}, {0, 156, true, false}, {391, 143, false, false}, + {554, 150, false, false}, {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, + {554, 150, false, false}, {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, + {554, 150, false, false}, {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, + {554, 150, false, false}, {391, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, + {493, 150, false, false}, {415, 150, false, false}, {587, 150, false, false}, {415, 150, false, false}, + {493, 150, false, false}, {415, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, + {493, 150, true, false}, {415, 150, false, false}, {554, 150, true, false}, {391, 150, false, false}, + {466, 150, true, false}, {391, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, + {587, 150, false, false}, {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {440, 150, false, false}, {0, 156, false, false}, {440, 143, false, false}, + {587, 150, false, false}, {440, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, + {698, 150, false, false}, {880, 150, false, false}, {1174, 150, true, true}, {587, 150, false, false}, + {698, 150, false, false}, {587, 150, false, false}, {880, 150, false, false}, {587, 150, false, false}, + {698, 150, false, false}, {587, 150, false, false}, {880, 150, false, true}, {587, 150, false, false}, + {698, 300, false, true}, {880, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, + {587, 150, false, false}, {440, 150, true, true}, {554, 150, false, false}, {659, 150, false, false}, + {554, 150, false, false}, {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, + {554, 150, false, false}, {440, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, + {554, 150, false, false}, {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, + {554, 150, false, false}, {493, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, + {587, 150, false, false}, {830, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, + {587, 150, false, false}, {493, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, + {587, 150, false, false}, {783, 150, true, true}, {466, 150, false, false}, {554, 150, true, false}, + {466, 150, false, false}, {440, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, + {587, 150, false, false}, {880, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, + {698, 150, false, false}, {880, 300, false, false}, {880, 300, false, false}, {880, 300, false, false}, + {880, 156, false, false}, {880, 143, false, false}, {0, 156, false, false}, {349, 143, false, true}, + {349, 150, false, true}, {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, + {277, 150, false, true}, {277, 150, false, true}, {293, 150, false, true}, {293, 150, false, true}, + {349, 150, false, true}, {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, + {261, 150, false, true}, {261, 150, false, true}, {0, 156, false, false}, {466, 143, false, false}, + {466, 150, false, false}, {466, 150, false, false}, {587, 150, false, false}, {587, 150, false, false}, + {466, 150, false, false}, {466, 150, false, false}, {932, 150, false, false}, {932, 150, false, false}, + {783, 150, false, false}, {783, 150, false, false}, {1108, 150, false, false}, {1108, 150, false, false}, + {932, 150, false, false}, {932, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, + {587, 150, false, false}, {880, 150, false, false}, {830, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, + {554, 150, false, false}, {659, 150, false, false}, {587, 300, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {554, 300, true, true}, {391, 150, false, false}, {466, 56, false, false}, + {466, 93, false, false}, {440, 300, true, true}, {440, 150, false, false}, {587, 150, false, false}, + {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, + {466, 150, true, false}, {391, 150, false, false}, {466, 150, false, false}, {554, 150, false, false}, + {659, 150, false, false}, {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, + {698, 150, true, false}, {880, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, + {698, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, + {659, 150, true, false}, {783, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, + {659, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, + {587, 150, true, true}, {698, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, + {587, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, + {554, 300, true, true}, {783, 300, true, false}, {932, 300, true, false}, {880, 300, true, false}, + {783, 1056, true, false}, {0, 150, false, false}, {0, 150, true, true}, {1174, 143, false, false}, + {1046, 150, false, false}, {1174, 150, false, false}, {1244, 150, false, false}, {1174, 150, false, false}, + {1046, 150, false, false}, {830, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, + {659, 150, false, false}, {698, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, + {659, 150, false, false}, {554, 150, false, false}, {587, 506, false, false}, {0, 543, false, false}, + {0, 150, false, true}, {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, + {0, 150, false, true}, {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, + {0, 150, true, false}, {0, 300, true, true}, {0, 300, false, true}, {0, 300, true, true}, + {391, 300, false, true}, {0, 300, true, true}, {466, 300, false, true}, {440, 300, true, false}, + {554, 300, false, true}, {587, 150, true, false}, {440, 150, false, false}, {587, 150, false, false}, + {880, 56, false, false}, {880, 93, false, false}, {830, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, + {554, 150, false, false}, {659, 150, false, false}, {587, 150, false, false}, {349, 150, false, false}, + {440, 150, false, false}, {587, 150, false, false}, {554, 300, false, false}, {391, 150, false, false}, + {466, 150, false, false}, {440, 150, false, false}, {349, 150, false, false}, {440, 150, false, false}, + {587, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, + {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, {466, 150, false, false}, + {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, + {783, 150, false, false}, {698, 150, false, false}, {880, 150, false, false}, {1174, 150, false, false}, + {880, 150, false, false}, {698, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, + {698, 150, false, false}, {659, 150, false, false}, {783, 150, false, false}, {1108, 150, false, false}, + {783, 150, false, false}, {659, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, + {659, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, {587, 150, false, false}, + {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, + {440, 150, false, false}, {622, 150, true, true}, {391, 150, false, false}, {587, 150, true, true}, + {440, 150, false, false}, {622, 150, true, false}, {440, 150, false, false}, {587, 150, true, false}, + {440, 150, false, false}, {0, 156, true, false}, {391, 143, false, false}, {554, 150, false, false}, + {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, {554, 150, false, false}, + {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, {554, 150, false, false}, + {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, {554, 150, false, false}, + {391, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, {493, 150, false, false}, + {415, 150, false, false}, {587, 150, false, false}, {415, 150, false, false}, {493, 150, false, false}, + {415, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, {493, 150, true, false}, + {415, 150, false, false}, {554, 150, true, false}, {391, 150, false, false}, {466, 150, true, false}, + {391, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, {587, 150, false, false}, + {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, + {440, 150, false, false}, {0, 156, false, false}, {440, 143, false, false}, {587, 150, false, false}, + {440, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, + {880, 150, false, false}, {1174, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, + {587, 150, false, false}, {880, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, + {587, 150, false, false}, {880, 150, false, true}, {587, 150, false, false}, {698, 300, false, true}, + {880, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, {587, 150, false, false}, + {440, 150, true, true}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, + {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, + {440, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, + {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, + {493, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, + {830, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, + {493, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, {587, 150, false, false}, + {783, 150, true, true}, {466, 150, false, false}, {554, 150, true, false}, {466, 150, false, false}, + {440, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, + {880, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, + {880, 300, false, false}, {880, 300, false, false}, {880, 300, false, false}, {880, 156, false, false}, + {880, 143, false, false}, {0, 156, false, false}, {349, 143, false, true}, {349, 150, false, true}, + {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, {277, 150, false, true}, + {277, 150, false, true}, {293, 150, false, true}, {293, 150, false, true}, {349, 150, false, true}, + {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, {277, 150, false, true}, + {277, 150, false, true}, {0, 156, false, false}, {440, 143, false, false}, {440, 150, false, false}, + {440, 150, false, false}, {587, 150, false, false}, {587, 150, false, false}, {440, 150, false, false}, + {440, 150, false, false}, {932, 150, false, false}, {932, 150, false, false}, {783, 150, false, false}, + {783, 150, false, false}, {1108, 150, false, false}, {1108, 150, false, false}, {932, 150, false, false}, + {932, 150, false, false}, {0, 906, false, false}, {293, 195, false, false}, {349, 200, false, false}, + {369, 100, false, false}, {391, 200, false, false}, {261, 200, false, true}, {261, 200, false, true}, + {261, 200, false, true}, {0, 100, false, true}, {261, 100, false, true}, {0, 104, false, false}, + {261, 195, false, true}, {0, 100, false, true}, {261, 100, false, true}, {0, 100, false, true}, + {261, 200, false, true}, {0, 200, false, true}, {0, 200, false, true}, {0, 200, false, true}, + {0, 100, false, true}, {0, 100, false, true}, {0, 104, false, false}, {0, 195, false, true}, + {0, 100, false, true}, {0, 100, false, true}, {0, 100, false, true}, {0, 200, false, true}, + {261, 200, false, true}, {261, 200, false, true}, {261, 200, false, true}, {0, 100, false, true}, + {261, 100, false, true}, {0, 104, false, false}, {261, 195, false, true}, {0, 100, false, true}, + {261, 100, false, true}, {0, 100, false, true}, {261, 200, false, true}, {0, 200, false, true}, + {0, 200, false, true}, {0, 200, false, true}, {0, 100, false, true}, {0, 100, false, true}, + {0, 104, false, false}, {0, 195, false, true}, {0, 100, false, true}, {0, 100, false, true}, + {0, 100, false, true}, {0, 200, false, true}, {261, 1504, false, true}, {0, 100, false, false}, + {329, 954, true, true}, {0, 409, false, false}, {329, 266, false, false}, {349, 204, false, false}, + {391, 210, false, false}, {391, 130, false, false}, {440, 960, true, false}, {0, 409, false, false}, + {440, 266, false, false}, {391, 204, false, false}, {349, 210, false, false}, {349, 130, false, false}, + {329, 960, true, true}, {0, 409, false, false}, {329, 266, false, false}, {349, 204, false, false}, + {391, 210, false, false}, {391, 130, false, false}, {440, 960, true, false}, {0, 136, false, false}, + {0, 272, true, false}, {493, 266, false, false}, {523, 204, false, false}, {587, 210, false, false}, + {587, 130, false, false}, {329, 960, true, true}, {0, 409, false, false}, {329, 266, false, false}, + {349, 204, false, false}, {391, 210, false, false}, {391, 130, false, false}, {440, 960, true, false}, + {0, 136, false, false}, {493, 266, true, false}, {493, 272, true, false}, {0, 210, false, false}, + {493, 335, true, false}, {329, 272, true, false}, {329, 272, true, false}, {329, 187, true, false}, + {0, 85, false, false}, {329, 272, true, false}, {349, 272, true, false}, {329, 272, true, false}, + {349, 272, true, false}, {391, 272, true, false}, {329, 272, true, false}, {329, 272, true, false}, + {329, 272, true, false}, {329, 142, true, false}, {0, 130, false, false}, {261, 272, true, false}, + {261, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, {391, 272, true, false}, + {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, {440, 272, true, false}, + {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, {0, 85, false, false}, + {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, + {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 142, true, false}, + {0, 130, false, false}, {0, 136, true, false}, {0, 409, true, false}, {440, 272, true, false}, + {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, {440, 272, true, false}, + {493, 272, true, false}, {493, 187, true, false}, {0, 85, false, false}, {587, 272, true, false}, + {523, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, + {391, 142, true, false}, {0, 130, false, false}, {523, 272, true, false}, {523, 187, true, false}, + {0, 85, false, false}, {261, 272, true, false}, {293, 272, true, false}, {349, 272, true, false}, + {349, 272, true, false}, {349, 187, true, false}, {0, 85, false, false}, {391, 272, true, false}, + {391, 68, true, false}, {349, 204, false, false}, {349, 68, true, false}, {329, 204, false, false}, + {293, 272, true, false}, {261, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, + {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, + {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, {329, 272, true, false}, + {329, 272, true, false}, {329, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, + {349, 272, true, false}, {329, 272, true, false}, {349, 272, true, false}, {391, 272, true, false}, + {329, 272, true, false}, {329, 272, true, false}, {329, 272, true, false}, {329, 142, true, false}, + {0, 130, false, false}, {261, 272, true, false}, {261, 187, true, false}, {0, 85, false, false}, + {329, 272, true, false}, {391, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, + {0, 85, false, false}, {440, 272, true, false}, {440, 272, true, false}, {493, 272, true, false}, + {493, 187, true, false}, {0, 85, false, false}, {587, 272, true, false}, {523, 272, true, false}, + {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, + {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, {0, 136, true, false}, + {0, 409, true, false}, {440, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, + {0, 85, false, false}, {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, + {0, 85, false, false}, {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, + {391, 272, true, false}, {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, + {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, + {587, 272, true, false}, {698, 272, true, false}, {698, 187, true, false}, {0, 85, false, false}, + {659, 272, true, false}, {659, 187, true, false}, {0, 85, false, false}, {493, 272, true, false}, + {493, 187, true, false}, {0, 85, false, false}, {0, 272, true, false}, {523, 272, true, false}, + {523, 272, true, false}, {523, 272, true, false}, {523, 272, true, false}, {523, 142, true, false}, + {0, 130, false, false}, {0, 272, true, false}, {0, 272, true, false}, {0, 272, true, false}, + {0, 272, true, false}, {523, 460, true, false}, {0, 272, false, false}, {0, 91, false, false}, + {587, 266, true, false}, {0, 551, false, false}, {659, 409, false, false}, {659, 45, false, false}, + {0, 91, false, false}, {493, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, + {391, 266, true, false}, {0, 551, false, false}, {329, 409, false, false}, {329, 45, false, false}, + {0, 91, false, false}, {440, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, + {493, 266, true, false}, {0, 551, false, false}, {523, 409, false, false}, {523, 45, false, false}, + {0, 91, false, false}, {391, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, + {0, 1227, true, false}, {0, 136, false, false}, {349, 454, true, false}, {0, 363, false, false}, + {391, 266, false, false}, {0, 415, false, false}, {0, 136, false, false}, {440, 454, true, false}, + {0, 91, false, false}, {391, 454, true, false}, {0, 363, false, false}, {493, 266, false, false}, + {0, 415, false, false}, {0, 136, false, false}, {523, 454, true, false}, {0, 91, false, false}, + {440, 454, true, false}, {0, 1046, false, false}, {0, 136, false, false}, {523, 454, true, false}, + {0, 91, false, false}, {587, 454, true, false}, {0, 1591, false, false}, {0, 136, false, false}, + {659, 266, true, false}, {587, 272, true, false}, {659, 272, true, false}, {698, 272, true, false}, + {783, 272, true, false}, {783, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, + {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 187, true, false}, + {0, 85, false, false}, {523, 272, true, false}, {523, 272, true, false}, {523, 187, true, false}, + {0, 85, false, false}, {659, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, + {783, 272, true, false}, {880, 272, true, false}, {987, 272, true, false}, {1046, 272, true, false}, + {1046, 187, true, false}, {0, 85, false, false}, {783, 272, true, false}, {698, 272, true, false}, + {659, 272, true, false}, {659, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, + {698, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, + {587, 142, true, false}, {0, 130, false, false}, {659, 272, true, false}, {587, 272, true, false}, + {659, 272, true, false}, {698, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, + {0, 85, false, false}, {659, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, + {587, 272, true, false}, {587, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, + {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, + {783, 272, true, false}, {880, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, + {987, 272, true, false}, {1046, 272, true, false}, {1046, 187, true, false}, {0, 85, false, false}, + {783, 272, true, false}, {698, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, + {587, 272, true, false}, {523, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, + {0, 85, false, false}, {391, 272, true, false}, {391, 187, true, false}, {0, 85, false, false}, + {659, 272, true, false}, {659, 272, true, false}, {659, 187, true, false}, {0, 85, false, false}, + {659, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, {698, 272, true, false}, + {783, 272, true, false}, {659, 272, true, false}, {659, 272, true, false}, {659, 272, true, false}, + {659, 142, true, false}, {0, 130, false, false}, {523, 272, true, false}, {523, 187, true, false}, + {0, 85, false, false}, {659, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, + {880, 187, true, false}, {0, 85, false, false}, {880, 272, true, false}, {880, 272, true, false}, + {987, 272, true, false}, {987, 187, true, false}, {0, 85, false, false}, {1174, 272, true, false}, + {1046, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, + {783, 272, true, false}, {783, 272, true, false}, {783, 142, true, false}, {0, 130, false, false}, + {0, 136, true, false}, {0, 409, true, false}, {880, 272, true, false}, {880, 272, true, false}, + {880, 187, true, false}, {0, 85, false, false}, {880, 272, true, false}, {987, 272, true, false}, + {987, 187, true, false}, {0, 85, false, false}, {1174, 272, true, false}, {1046, 272, true, false}, + {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 142, true, false}, + {0, 130, false, false}, {1046, 272, true, false}, {1046, 187, true, false}, {0, 85, false, false}, + {523, 272, true, false}, {587, 272, true, false}, {698, 272, true, false}, {698, 272, true, false}, + {698, 187, true, false}, {0, 85, false, false}, {783, 272, true, false}, {783, 68, true, false}, + {698, 204, false, false}, {698, 68, true, false}, {659, 204, false, false}, {587, 272, true, false}, + {523, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, + {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, + {783, 142, true, false}, {0, 130, false, false}, {329, 272, true, false}, {329, 272, true, false}, + {329, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, {349, 272, true, false}, + {329, 272, true, false}, {349, 272, true, false}, {391, 272, true, false}, {329, 272, true, false}, + {329, 272, true, false}, {329, 272, true, false}, {329, 142, true, false}, {0, 130, false, false}, + {261, 272, true, false}, {261, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, + {391, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, + {440, 272, true, false}, {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, + {0, 85, false, false}, {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, + {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, + {391, 142, true, false}, {0, 130, false, false}, {0, 136, true, false}, {0, 409, true, false}, + {440, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, + {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, {0, 85, false, false}, + {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, + {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, {523, 272, true, false}, + {523, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, {587, 272, true, false}, + {698, 272, true, false}, {698, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, + {659, 187, true, false}, {0, 85, false, false}, {493, 272, true, false}, {493, 187, true, false}, + {0, 85, false, false}, {0, 272, true, false}, {523, 272, true, false}, {523, 272, true, false}, + {523, 272, true, false}, {523, 272, true, false}, {523, 142, true, false}, {0, 130, false, false}, + {0, 272, true, false}, {0, 272, true, false}, {0, 272, true, false}, {0, 272, true, false}, + {523, 460, true, false}, {0, 272, false, false}, {0, 91, false, false}, {587, 266, true, false}, + {0, 551, false, false}, {659, 409, false, false}, {659, 45, false, false}, {0, 91, false, false}, + {493, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, {391, 266, true, false}, + {0, 551, false, false}, {329, 409, false, false}, {329, 45, false, false}, {0, 91, false, false}, + {440, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, {493, 266, true, false}, + {0, 551, false, false}, {523, 409, false, false}, {523, 45, false, false}, {0, 91, false, false}, + {391, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, {0, 1227, true, false}, + {0, 136, false, false}, {349, 454, true, false}, {0, 363, false, false}, {391, 266, false, false}, + {0, 415, false, false}, {0, 136, false, false}, {440, 454, true, false}, {0, 91, false, false}, + {391, 454, true, false}, {0, 363, false, false}, {493, 266, false, false}, {0, 415, false, false}, + {0, 136, false, false}, {523, 454, true, false}, {0, 91, false, false}, {440, 454, true, false}, + {0, 1046, false, false}, {0, 136, false, false}, {523, 454, true, false}, {0, 91, false, false}, + {587, 454, true, false}, {0, 1591, false, false}, {0, 136, false, false}, {659, 266, true, false}, + {587, 272, true, false}, {659, 272, true, false}, {698, 272, true, false}, {783, 272, true, false}, + {783, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, {587, 272, true, false}, + {587, 272, true, false}, {587, 272, true, false}, {587, 187, true, false}, {0, 85, false, false}, + {523, 272, true, false}, {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, + {659, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, {783, 272, true, false}, + {880, 272, true, false}, {987, 272, true, false}, {1046, 272, true, false}, {1046, 187, true, false}, + {0, 85, false, false}, {783, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, + {659, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, {698, 272, true, false}, + {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 142, true, false}, + {0, 130, false, false}, {659, 272, true, false}, {587, 272, true, false}, {659, 272, true, false}, + {698, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, {0, 85, false, false}, + {659, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, + {587, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, {523, 272, true, false}, + {523, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, {783, 272, true, false}, + {880, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, {987, 272, true, false}, + {1046, 272, true, false}, {1046, 187, true, false}, {0, 85, false, false}, {783, 272, true, false}, + {698, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, {587, 272, true, false}, + {523, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, {0, 85, false, false}, + {391, 272, true, false}, {391, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, + {622, 272, true, false}, {698, 272, true, false}, {739, 272, true, false}, {830, 272, true, false}, + {830, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, {622, 272, true, false}, + {622, 272, true, false}, {622, 272, true, false}, {622, 187, true, false}, {0, 85, false, false}, + {554, 272, true, false}, {554, 272, true, false}, {554, 187, true, false}, {0, 85, false, false}, + {698, 272, true, false}, {830, 272, true, false}, {932, 272, true, false}, {830, 272, true, false}, + {932, 272, true, false}, {1046, 272, true, false}, {1108, 272, true, false}, {1108, 187, true, false}, + {0, 85, false, false}, {830, 272, true, false}, {739, 272, true, false}, {698, 272, true, false}, + {698, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, {739, 272, true, false}, + {622, 272, true, false}, {622, 272, true, false}, {622, 272, true, false}, {622, 142, true, false}, + {0, 130, false, false}, {698, 272, true, false}, {622, 272, true, false}, {698, 272, true, false}, + {739, 272, true, false}, {830, 272, true, false}, {830, 187, true, false}, {0, 85, false, false}, + {698, 272, true, false}, {622, 272, true, false}, {622, 272, true, false}, {622, 272, true, false}, + {622, 187, true, false}, {0, 85, false, false}, {554, 272, true, false}, {554, 272, true, false}, + {554, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, {830, 272, true, false}, + {932, 272, true, false}, {830, 272, true, false}, {932, 272, true, false}, {1046, 272, true, false}, + {1108, 272, true, false}, {1108, 187, true, false}, {0, 85, false, false}, {830, 272, true, false}, + {739, 272, true, false}, {739, 272, true, false}, {698, 272, true, false}, {622, 272, true, false}, + {554, 272, true, false}, {830, 272, true, false}, {830, 187, true, false}, {0, 85, false, false}, + {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, {349, 960, true, true}, + {0, 409, false, false}, {349, 266, false, false}, {369, 204, false, false}, {415, 210, false, false}, + {415, 130, false, false}, {466, 960, true, false}, {0, 409, false, false}, {466, 266, false, false}, + {415, 204, false, false}, {369, 210, false, false}, {369, 130, false, false}, {349, 960, true, true}, + {0, 409, false, false}, {349, 266, false, false}, {369, 204, false, false}, {415, 210, false, false}, + {415, 130, false, false}, {466, 960, true, false}, {0, 409, false, false}, {466, 266, false, false}, + {415, 204, false, false}, {369, 210, false, false}, {369, 130, false, false}, {349, 960, true, true}, + {0, 409, false, false}, {349, 266, false, false}, {369, 204, false, false}, {415, 210, false, false}, + {415, 130, false, false}, {466, 960, true, false}, {0, 136, false, false}, {554, 954, false, false}, + {554, 341, false, false}, {554, 62, true, false}, {415, 68, false, false}, {554, 210, false, false}, + {554, 954, false, false}, {0, 682, false, false}, {0, 454, true, false}, + {0, 2000, false, false} +}; + +// Converted from: potc_3.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_potc_3[] = { + {293, 249, false, false}, {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, + {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, {0, 49, false, false}, + {293, 146, false, false}, {293, 149, false, false}, {293, 149, false, false}, {293, 149, false, false}, + {293, 253, false, false}, {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, + {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, {0, 49, false, false}, + {293, 146, false, false}, {293, 149, false, false}, {293, 149, false, false}, {293, 149, false, false}, + {293, 253, true, false}, {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, + {0, 49, false, false}, {293, 75, false, false}, {293, 71, false, false}, {293, 253, true, false}, + {0, 49, false, false}, {293, 99, false, false}, {293, 46, false, false}, {293, 149, true, false}, + {0, 149, false, true}, {261, 103, false, false}, {261, 46, false, false}, {293, 253, true, true}, + {0, 49, false, false}, {293, 146, true, true}, {293, 103, true, true}, {0, 49, false, false}, + {293, 99, false, true}, {293, 46, false, false}, {329, 149, true, true}, {349, 253, true, true}, + {0, 49, false, false}, {349, 146, true, true}, {349, 103, true, false}, {0, 49, false, false}, + {349, 99, false, true}, {349, 46, false, false}, {391, 149, true, false}, {329, 253, true, true}, + {0, 49, false, false}, {329, 146, true, true}, {329, 103, true, false}, {0, 49, false, false}, + {293, 99, false, true}, {293, 46, false, false}, {261, 149, true, true}, {261, 149, true, true}, + {293, 103, false, true}, {293, 49, false, false}, {293, 99, true, true}, {0, 46, false, false}, + {0, 153, true, true}, {0, 99, false, true}, {0, 46, false, false}, {261, 149, true, true}, + {293, 253, true, true}, {0, 49, false, false}, {293, 146, true, true}, {293, 103, true, false}, + {0, 49, false, false}, {293, 99, false, true}, {293, 46, false, false}, {329, 149, true, true}, + {349, 253, true, true}, {0, 49, false, false}, {349, 146, true, true}, {349, 103, true, false}, + {0, 49, false, false}, {349, 99, false, false}, {349, 46, false, false}, {391, 149, true, false}, + {329, 253, true, false}, {0, 49, false, false}, {329, 146, true, false}, {329, 103, true, false}, + {0, 49, false, false}, {293, 99, false, true}, {293, 46, false, false}, {261, 149, true, false}, + {293, 253, true, true}, {0, 49, false, false}, {0, 146, true, true}, {0, 153, true, true}, + {0, 99, false, true}, {0, 46, false, false}, {261, 149, true, true}, {293, 253, true, true}, + {0, 49, false, false}, {293, 146, true, true}, {293, 103, true, true}, {0, 49, false, false}, + {293, 99, false, true}, {293, 46, false, false}, {349, 149, true, true}, {391, 253, true, true}, + {0, 49, false, false}, {391, 146, true, true}, {391, 103, true, false}, {0, 49, false, false}, + {391, 99, false, false}, {391, 46, false, false}, {440, 149, true, false}, {466, 253, true, false}, + {0, 49, false, false}, {466, 146, true, false}, {466, 103, true, false}, {0, 49, false, false}, + {440, 99, false, false}, {440, 46, false, false}, {391, 149, true, false}, {440, 149, true, true}, + {293, 103, false, false}, {293, 49, false, false}, {293, 99, true, true}, {0, 46, false, false}, + {0, 153, true, true}, {293, 99, false, false}, {293, 46, false, false}, {329, 149, true, true}, + {349, 253, true, true}, {0, 49, false, false}, {349, 146, true, true}, {349, 103, true, false}, + {0, 49, false, false}, {391, 99, false, true}, {391, 49, false, false}, {391, 99, true, false}, + {0, 46, false, false}, {440, 149, true, true}, {293, 103, false, false}, {293, 49, false, false}, + {293, 99, true, true}, {0, 46, false, false}, {0, 153, true, true}, {293, 99, false, false}, + {293, 46, false, false}, {349, 149, true, true}, {329, 253, true, true}, {0, 49, false, false}, + {329, 146, true, true}, {329, 103, true, false}, {0, 49, false, false}, {349, 99, false, false}, + {349, 46, false, false}, {293, 149, true, true}, {329, 149, true, true}, {0, 103, false, false}, + {0, 49, false, false}, {0, 146, true, false}, {0, 153, true, false}, {440, 99, false, false}, + {440, 46, false, false}, {523, 149, true, false}, {587, 253, true, true}, {0, 49, false, false}, + {587, 146, true, true}, {587, 103, true, true}, {0, 49, false, false}, {587, 99, false, false}, + {587, 46, false, false}, {659, 149, true, false}, {698, 253, true, false}, {0, 49, false, false}, + {698, 146, true, false}, {698, 103, true, false}, {0, 49, false, false}, {698, 99, false, false}, + {698, 46, false, false}, {783, 149, true, false}, {659, 253, true, false}, {0, 49, false, false}, + {659, 146, true, false}, {659, 103, true, false}, {0, 49, false, false}, {587, 99, false, false}, + {587, 46, false, false}, {523, 149, true, false}, {523, 149, true, true}, {587, 103, false, false}, + {587, 49, false, false}, {587, 99, true, true}, {0, 46, false, false}, {0, 153, true, true}, + {440, 99, false, false}, {440, 46, false, false}, {523, 149, true, true}, {587, 253, true, false}, + {0, 49, false, false}, {587, 146, true, false}, {587, 103, true, false}, {0, 49, false, false}, + {587, 99, false, false}, {587, 46, false, false}, {659, 149, true, false}, {698, 253, true, false}, + {0, 49, false, false}, {698, 146, true, false}, {698, 103, true, false}, {0, 49, false, false}, + {698, 99, false, false}, {698, 46, false, false}, {783, 149, true, false}, {659, 253, true, false}, + {0, 49, false, false}, {659, 146, true, false}, {659, 103, true, false}, {0, 49, false, false}, + {587, 99, false, false}, {587, 46, false, false}, {523, 149, true, false}, {587, 253, true, true}, + {0, 49, false, false}, {0, 146, true, true}, {0, 153, true, true}, {440, 99, false, false}, + {440, 46, false, false}, {523, 149, true, true}, {587, 253, true, true}, {0, 49, false, false}, + {587, 146, true, true}, {587, 103, true, true}, {0, 49, false, false}, {587, 99, false, false}, + {587, 46, false, false}, {698, 149, true, true}, {783, 253, true, false}, {0, 49, false, false}, + {783, 146, true, false}, {783, 103, true, false}, {0, 49, false, false}, {783, 99, false, false}, + {783, 46, false, false}, {880, 149, true, false}, {932, 253, true, false}, {0, 49, false, false}, + {932, 146, true, false}, {932, 103, true, false}, {0, 49, false, false}, {880, 99, false, false}, + {880, 46, false, false}, {783, 149, true, false}, {880, 149, true, true}, {587, 103, false, false}, + {587, 49, false, false}, {587, 99, true, true}, {0, 46, false, false}, {0, 153, true, true}, + {587, 99, false, false}, {587, 46, false, false}, {659, 149, true, true}, {698, 253, true, false}, + {0, 49, false, false}, {698, 146, true, false}, {698, 103, true, false}, {0, 49, false, false}, + {783, 99, false, false}, {783, 49, false, false}, {783, 99, true, false}, {0, 46, false, false}, + {880, 149, true, true}, {587, 103, false, false}, {587, 49, false, false}, {587, 99, true, true}, + {0, 46, false, false}, {0, 153, true, true}, {587, 99, false, false}, {587, 46, false, false}, + {698, 149, true, true}, {659, 253, true, false}, {0, 49, false, false}, {659, 146, true, false}, + {659, 103, true, false}, {0, 49, false, false}, {587, 99, false, false}, {587, 46, false, false}, + {554, 149, true, false}, {587, 253, true, true}, {0, 49, false, false}, {587, 249, true, true}, + {0, 49, false, false}, {659, 249, true, false}, {0, 49, false, false}, {698, 249, true, false}, + {0, 49, false, false}, {698, 146, true, false}, {698, 103, false, false}, {698, 46, false, false}, + {783, 253, true, false}, {0, 49, false, false}, {880, 146, true, false}, {698, 103, false, false}, + {698, 46, false, false}, {0, 149, true, false}, {0, 153, true, false}, {698, 99, false, false}, + {698, 46, false, false}, {587, 149, true, false}, {440, 149, true, false}, {0, 103, false, false}, + {0, 49, false, false}, {0, 146, true, false}, {0, 253, true, false}, {0, 49, false, false}, + {0, 146, true, false}, {932, 149, true, false}, {0, 103, false, false}, {0, 49, false, false}, + {0, 146, true, false}, {0, 153, true, false}, {783, 99, false, false}, {783, 46, false, false}, + {587, 149, true, false}, {466, 149, true, false}, {0, 103, false, false}, {0, 49, false, false}, + {0, 146, true, false}, {0, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, + {329, 149, true, false}, {329, 103, false, false}, {329, 49, false, false}, {329, 99, true, false}, + {0, 46, false, false}, {293, 253, true, true}, {293, 49, false, false}, {293, 99, true, false}, + {0, 46, false, false}, {349, 253, true, true}, {349, 49, false, false}, {349, 99, true, false}, + {0, 46, false, false}, {0, 153, true, false}, {349, 99, false, false}, {349, 46, false, false}, + {391, 149, true, false}, {440, 253, true, true}, {0, 49, false, false}, {440, 146, true, true}, + {440, 103, true, true}, {0, 49, false, false}, {440, 99, false, false}, {440, 49, false, false}, + {440, 99, true, true}, {0, 46, false, false}, {466, 149, true, true}, {440, 103, false, false}, + {440, 46, false, false}, {0, 149, true, true}, {0, 149, true, true}, {0, 149, true, true}, + {0, 149, true, true}, {391, 253, true, false}, {0, 49, false, false}, {391, 146, true, false}, + {391, 103, true, false}, {0, 49, false, false}, {391, 99, false, false}, {391, 49, false, false}, + {391, 99, true, false}, {0, 46, false, false}, {391, 149, true, true}, {440, 103, false, false}, + {440, 46, false, false}, {0, 149, true, true}, {0, 149, true, true}, {0, 149, true, true}, + {0, 149, true, true}, {440, 253, true, true}, {0, 49, false, false}, {440, 146, true, true}, + {440, 103, true, true}, {0, 49, false, false}, {440, 99, false, false}, {440, 49, false, false}, + {440, 99, true, true}, {0, 46, false, false}, {466, 149, true, true}, {440, 103, false, false}, + {440, 46, false, false}, {0, 149, true, true}, {0, 149, true, true}, {0, 149, true, true}, + {0, 149, true, true}, {391, 253, true, false}, {0, 49, false, false}, {349, 146, true, false}, + {349, 103, true, false}, {0, 49, false, false}, {329, 99, false, true}, {329, 49, false, false}, + {329, 99, true, false}, {0, 46, false, false}, {293, 253, true, true}, {0, 49, false, false}, + {0, 146, true, true}, {0, 153, true, true}, {293, 99, false, false}, {293, 46, false, false}, + {329, 149, true, true}, {349, 253, true, true}, {349, 49, false, false}, {349, 146, true, true}, + {349, 78, true, true}, {0, 75, false, false}, {391, 99, false, false}, {391, 46, false, false}, + {440, 149, true, true}, {391, 253, true, false}, {0, 49, false, false}, {349, 146, true, false}, + {349, 103, true, false}, {0, 46, false, false}, {329, 149, true, false}, {329, 103, true, false}, + {0, 46, false, false}, {349, 253, true, true}, {0, 49, false, false}, {391, 146, true, true}, + {391, 103, true, true}, {0, 46, false, false}, {440, 149, true, true}, {440, 103, true, true}, + {0, 46, false, false}, {391, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, + {0, 149, true, false}, {349, 149, true, false}, {391, 149, true, false}, {440, 253, true, true}, + {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {391, 149, true, true}, + {349, 149, true, true}, {329, 253, true, false}, {0, 49, false, false}, {349, 146, true, false}, + {349, 103, true, false}, {0, 46, false, false}, {329, 149, true, false}, {329, 103, true, false}, + {0, 46, false, false}, {293, 253, true, true}, {0, 49, false, false}, {0, 146, true, true}, + {0, 153, true, true}, {329, 99, false, false}, {329, 46, false, false}, {261, 149, true, true}, + {293, 149, true, true}, {0, 103, false, false}, {0, 49, false, false}, {0, 146, true, true}, + {0, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, {698, 253, true, true}, + {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {659, 149, true, true}, + {698, 149, true, true}, {783, 253, true, false}, {0, 49, false, false}, {698, 146, true, false}, + {698, 103, true, false}, {0, 46, false, false}, {783, 149, true, false}, {783, 103, true, false}, + {0, 46, false, false}, {880, 253, true, true}, {0, 49, false, false}, {783, 146, true, true}, + {783, 103, true, true}, {0, 46, false, false}, {698, 149, true, true}, {698, 103, true, true}, + {0, 46, false, false}, {587, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, + {0, 149, true, false}, {587, 149, true, false}, {659, 149, true, false}, {698, 253, true, true}, + {0, 49, false, false}, {783, 146, true, true}, {783, 103, true, true}, {0, 46, false, false}, + {880, 149, true, true}, {880, 103, true, true}, {0, 46, false, false}, {932, 253, true, false}, + {0, 49, false, false}, {587, 146, true, false}, {587, 103, true, false}, {0, 46, false, false}, + {783, 149, true, false}, {783, 103, true, false}, {0, 46, false, false}, {698, 253, true, false}, + {0, 49, false, false}, {0, 146, true, false}, {0, 149, true, false}, {783, 149, true, false}, + {659, 149, true, false}, {587, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, + {0, 149, true, false}, {659, 149, true, false}, {554, 149, true, false}, {880, 253, true, true}, + {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {0, 149, true, true}, + {0, 149, true, true}, {932, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, + {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {880, 253, true, true}, + {0, 49, false, false}, {880, 146, true, true}, {880, 103, true, true}, {0, 49, false, false}, + {880, 99, false, false}, {880, 49, false, false}, {880, 99, true, true}, {0, 46, false, false}, + {880, 149, true, false}, {783, 103, false, false}, {783, 46, false, false}, {0, 149, true, false}, + {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {783, 253, true, false}, + {0, 49, false, false}, {0, 146, true, false}, {0, 149, true, false}, {0, 149, true, false}, + {0, 149, true, false}, {698, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, + {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {698, 253, true, false}, + {0, 49, false, false}, {783, 146, true, false}, {783, 103, true, false}, {0, 46, false, false}, + {659, 149, true, false}, {659, 103, true, false}, {0, 46, false, false}, {587, 253, true, true}, + {587, 49, false, false}, {587, 99, true, true}, {0, 46, false, false}, {587, 149, true, true}, + {659, 149, true, true}, {698, 149, true, true}, {880, 253, true, true}, {880, 49, false, false}, + {880, 99, true, true}, {0, 46, false, false}, {587, 149, true, true}, {659, 149, true, true}, + {698, 149, true, true}, {932, 253, true, false}, {932, 49, false, false}, {932, 99, true, false}, + {0, 46, false, false}, {587, 149, true, false}, {659, 149, true, false}, {698, 149, true, false}, + {880, 253, true, true}, {0, 49, false, false}, {880, 146, true, true}, {880, 103, true, true}, + {0, 46, false, false}, {1046, 149, true, true}, {1046, 103, true, true}, {0, 46, false, false}, + {880, 149, true, false}, {783, 103, false, false}, {783, 46, false, false}, {0, 149, true, false}, + {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {783, 253, true, false}, + {0, 49, false, false}, {0, 146, true, false}, {0, 149, true, false}, {0, 149, true, false}, + {0, 149, true, false}, {698, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, + {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {698, 253, true, false}, + {0, 49, false, false}, {783, 146, true, false}, {783, 103, true, false}, {0, 46, false, false}, + {659, 149, true, false}, {659, 103, true, false}, {0, 46, false, false}, {587, 403, true, true}, + {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {0, 149, true, true}, + {293, 1128, true, false}, + {0, 2000, false, false} +}; + + +// Converted from: potc_2.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_potc_2[] = { + {0, 296, false, true}, {0, 149, false, true}, {0, 300, false, true}, {0, 149, false, true}, + {0, 300, false, true}, {0, 149, false, true}, {0, 149, false, true}, {0, 149, false, true}, + {0, 149, false, true}, {0, 300, false, true}, {0, 149, false, true}, {0, 300, false, true}, + {0, 149, false, true}, {0, 300, false, true}, {0, 149, false, true}, {0, 149, false, true}, + {0, 149, false, true}, {0, 149, false, true}, {293, 300, false, true}, {293, 149, false, true}, + {293, 300, false, true}, {293, 149, false, true}, {293, 300, false, true}, {293, 149, false, true}, + {293, 149, false, true}, {293, 149, false, true}, {293, 149, false, true}, {293, 300, false, true}, + {293, 149, false, true}, {293, 300, false, true}, {293, 149, false, true}, {293, 300, false, true}, + {293, 149, true, true}, {293, 149, true, true}, {293, 149, false, true}, {293, 149, false, true}, + {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, + {293, 149, true, false}, {329, 149, true, false}, {349, 149, true, true}, {349, 149, true, false}, + {349, 149, true, true}, {349, 149, true, true}, {391, 149, true, false}, {391, 149, true, true}, + {329, 149, true, true}, {329, 149, true, false}, {329, 149, true, true}, {329, 149, true, true}, + {293, 149, true, false}, {261, 149, true, true}, {293, 149, true, true}, {587, 149, true, true}, + {523, 149, true, true}, {587, 149, true, true}, {0, 149, true, true}, {293, 149, true, true}, + {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, + {293, 149, true, false}, {329, 149, true, true}, {349, 149, true, true}, {349, 149, true, false}, + {349, 149, true, true}, {349, 149, true, true}, {391, 149, true, false}, {391, 149, true, true}, + {329, 149, true, true}, {329, 149, true, false}, {329, 149, true, false}, {329, 149, true, true}, + {293, 149, true, false}, {261, 149, true, true}, {293, 149, true, true}, {587, 149, true, true}, + {523, 149, true, true}, {587, 149, true, true}, {0, 149, true, true}, {293, 149, true, true}, + {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, + {293, 149, true, false}, {349, 149, true, true}, {391, 149, true, true}, {391, 149, true, false}, + {391, 149, true, true}, {391, 149, true, true}, {440, 149, true, false}, {466, 149, true, true}, + {466, 149, true, true}, {466, 149, true, false}, {466, 149, true, true}, {440, 149, true, true}, + {440, 149, true, false}, {391, 149, true, true}, {440, 149, true, true}, {293, 149, true, true}, + {293, 149, true, true}, {293, 149, true, true}, {293, 149, true, false}, {329, 149, true, true}, + {349, 149, true, true}, {349, 149, true, false}, {391, 149, true, true}, {391, 149, true, true}, + {440, 149, true, false}, {440, 149, true, true}, {293, 149, true, true}, {293, 149, true, false}, + {293, 149, true, true}, {293, 149, true, true}, {349, 149, true, false}, {329, 149, true, true}, + {329, 149, true, true}, {329, 149, true, false}, {329, 149, true, true}, {349, 149, true, true}, + {293, 149, true, true}, {329, 149, true, true}, {329, 149, true, true}, {329, 149, true, true}, + {329, 149, true, true}, {329, 149, true, true}, {440, 149, true, true}, {523, 149, true, true}, + {587, 149, true, true}, {587, 149, true, false}, {587, 149, true, true}, {587, 149, true, true}, + {587, 149, true, false}, {659, 149, true, false}, {698, 149, true, true}, {698, 149, true, false}, + {698, 149, true, true}, {698, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, + {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, true}, {659, 149, true, true}, + {587, 149, true, false}, {523, 149, true, true}, {587, 149, true, true}, {1174, 149, true, true}, + {1046, 149, true, true}, {1174, 149, true, true}, {440, 149, true, false}, {523, 149, true, true}, + {587, 149, true, true}, {587, 149, true, false}, {587, 149, true, true}, {587, 149, true, true}, + {587, 149, true, false}, {659, 149, true, true}, {698, 149, true, true}, {698, 149, true, false}, + {698, 149, true, true}, {698, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, + {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, false}, {659, 149, true, true}, + {587, 149, true, false}, {523, 149, true, true}, {587, 149, true, true}, {1174, 149, true, true}, + {1046, 149, true, true}, {1174, 149, true, true}, {440, 149, true, false}, {523, 149, true, true}, + {587, 149, true, true}, {587, 149, true, false}, {587, 149, true, true}, {587, 149, true, true}, + {587, 149, true, false}, {698, 149, true, true}, {783, 149, true, true}, {783, 149, true, false}, + {783, 149, true, true}, {783, 149, true, true}, {880, 149, true, false}, {932, 149, true, true}, + {932, 149, true, true}, {932, 149, true, false}, {932, 149, true, true}, {880, 149, true, true}, + {880, 149, true, false}, {783, 149, true, true}, {880, 149, true, true}, {587, 149, true, true}, + {587, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, {659, 149, true, true}, + {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {880, 149, true, false}, {880, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, + {587, 149, true, true}, {587, 149, true, true}, {698, 149, true, false}, {659, 149, true, true}, + {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, true}, {659, 149, true, true}, + {587, 149, true, false}, {554, 149, true, true}, {587, 300, true, true}, {587, 300, true, true}, + {659, 300, true, false}, {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, + {698, 149, true, true}, {783, 149, true, true}, {783, 149, true, true}, {880, 149, true, true}, + {698, 149, false, false}, {698, 149, true, false}, {698, 149, true, false}, {698, 149, false, false}, + {587, 149, true, false}, {440, 300, true, false}, {440, 149, true, false}, {440, 300, true, false}, + {440, 149, true, false}, {932, 149, true, true}, {932, 150, false, false}, {932, 149, true, false}, + {932, 149, true, false}, {783, 149, false, false}, {587, 149, true, false}, {466, 300, true, false}, + {466, 149, true, false}, {466, 300, true, false}, {466, 149, true, false}, {329, 149, true, true}, + {329, 149, true, true}, {329, 149, true, true}, {293, 149, true, true}, {293, 149, true, true}, + {293, 149, true, true}, {349, 149, true, true}, {349, 149, true, false}, {349, 149, true, true}, + {349, 149, true, true}, {349, 149, true, false}, {391, 149, true, true}, {440, 149, true, true}, + {440, 149, true, false}, {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, false}, + {440, 149, true, true}, {466, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, + {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, {391, 149, true, true}, + {391, 149, true, false}, {391, 149, true, false}, {391, 149, true, true}, {391, 149, true, false}, + {391, 149, true, false}, {440, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, + {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, + {440, 149, true, false}, {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, false}, + {440, 149, true, true}, {466, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, + {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, {391, 149, true, true}, + {391, 149, true, false}, {349, 149, true, true}, {349, 149, true, true}, {329, 149, true, false}, + {329, 149, true, true}, {293, 149, true, true}, {293, 149, true, true}, {293, 149, true, true}, + {293, 149, true, true}, {293, 149, true, true}, {329, 149, true, true}, {349, 149, true, true}, + {349, 150, false, false}, {349, 149, false, true}, {349, 149, false, true}, {391, 149, false, false}, + {440, 149, false, true}, {391, 300, true, false}, {349, 149, true, false}, {349, 149, true, false}, + {329, 149, true, false}, {329, 149, true, false}, {349, 300, false, true}, {391, 149, false, true}, + {391, 149, false, true}, {440, 149, false, true}, {440, 149, false, true}, {391, 300, true, false}, + {391, 149, true, false}, {391, 149, true, false}, {349, 149, true, false}, {391, 149, true, false}, + {440, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, {440, 149, true, true}, + {391, 149, true, true}, {349, 149, true, true}, {329, 149, true, true}, {329, 149, true, false}, + {349, 149, true, true}, {349, 149, true, true}, {329, 149, true, true}, {329, 149, true, true}, + {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, + {329, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, {293, 149, true, false}, + {293, 149, true, true}, {293, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, + {698, 149, true, true}, {698, 149, true, false}, {698, 149, true, true}, {698, 149, true, true}, + {659, 149, true, true}, {698, 149, true, true}, {783, 149, true, true}, {783, 149, true, false}, + {698, 149, true, false}, {698, 149, true, true}, {783, 149, true, false}, {783, 149, true, false}, + {880, 149, true, true}, {880, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {698, 149, true, true}, {698, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, + {587, 149, true, true}, {587, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, + {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {880, 149, true, true}, {880, 149, true, true}, {932, 149, true, true}, {932, 149, true, false}, + {587, 149, true, true}, {587, 149, true, true}, {783, 149, true, true}, {783, 149, true, true}, + {698, 149, true, true}, {698, 149, true, false}, {698, 149, true, true}, {698, 149, true, true}, + {783, 149, true, true}, {659, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, + {587, 149, true, true}, {554, 149, true, true}, {554, 149, true, true}, {554, 149, true, true}, + {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {880, 149, true, true}, + {880, 149, true, true}, {880, 149, true, true}, {932, 149, true, true}, {932, 149, true, false}, + {932, 149, true, true}, {932, 149, true, true}, {932, 149, true, true}, {932, 149, true, true}, + {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {880, 149, true, false}, + {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {783, 149, true, false}, + {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, false}, + {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {783, 149, true, true}, {783, 149, true, true}, {698, 149, true, true}, {698, 149, true, false}, + {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, + {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {659, 149, true, true}, {659, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, + {587, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, {698, 149, true, true}, + {880, 149, true, true}, {698, 149, true, false}, {659, 149, true, true}, {587, 149, true, true}, + {659, 149, true, true}, {698, 149, true, true}, {932, 149, true, true}, {698, 149, true, false}, + {659, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, {698, 149, true, true}, + {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {880, 149, true, true}, + {1046, 149, true, true}, {1046, 149, true, true}, {880, 149, true, true}, {783, 149, true, false}, + {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, false}, + {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {783, 149, true, true}, {783, 149, true, true}, {698, 149, true, true}, {698, 149, true, false}, + {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, + {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {659, 149, true, true}, {659, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, + {293, 149, true, false}, {293, 149, true, true}, {587, 149, true, false}, {659, 149, true, true}, + {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, + {880, 149, true, false}, {880, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, + {587, 149, true, true}, {587, 149, true, true}, {698, 149, true, false}, {659, 149, true, true}, + {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, true}, {659, 149, true, true}, + {587, 149, true, false}, {554, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, + {587, 149, true, true}, {587, 149, true, true}, {0, 300, false, false}, + {0, 2000, false, false} +}; + + + +// Converted from: alla_turca_8.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_alla_turca[] = { + {493, 136, false, false}, {440, 136, false, false}, {415, 136, false, false}, {440, 136, false, false}, + {523, 272, false, true}, {329, 272, false, false}, {587, 136, false, false}, {523, 136, false, false}, + {493, 136, false, false}, {523, 136, false, false}, {659, 272, false, true}, {329, 272, false, false}, + {698, 136, false, false}, {659, 136, false, false}, {622, 136, false, false}, {659, 136, false, false}, + {987, 136, false, true}, {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, + {987, 136, false, true}, {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, + {1046, 272, false, true}, {1046, 272, false, false}, {880, 272, false, false}, {1046, 272, false, false}, + {987, 272, false, true}, {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, + {987, 272, false, true}, {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, + {987, 272, false, true}, {880, 272, false, true}, {783, 272, true, false}, {739, 272, false, true}, + {659, 545, false, true}, {659, 272, false, false}, {698, 272, false, false}, {783, 272, true, false}, + {783, 272, false, false}, {880, 136, false, true}, {783, 136, false, false}, {698, 136, false, false}, + {659, 136, false, false}, {587, 272, false, true}, {391, 272, false, false}, {659, 272, false, false}, + {698, 272, false, false}, {783, 272, true, false}, {783, 272, false, false}, {880, 136, false, true}, + {783, 136, false, false}, {698, 136, false, false}, {659, 136, false, false}, {587, 545, false, true}, + {523, 272, false, false}, {587, 272, false, false}, {659, 272, true, false}, {659, 272, false, true}, + {698, 136, true, false}, {659, 136, false, false}, {587, 136, false, false}, {523, 136, false, false}, + {493, 272, false, true}, {329, 272, false, false}, {523, 272, false, false}, {587, 272, false, false}, + {659, 272, true, false}, {659, 272, false, true}, {698, 136, true, false}, {659, 136, false, false}, + {587, 136, false, false}, {523, 136, false, false}, {493, 545, false, true}, {493, 136, false, false}, + {440, 136, false, false}, {415, 136, false, false}, {440, 136, false, false}, {523, 272, false, true}, + {329, 272, false, false}, {587, 136, false, false}, {523, 136, false, false}, {493, 136, false, false}, + {523, 136, false, false}, {659, 272, false, true}, {329, 272, false, false}, {698, 136, false, false}, + {659, 136, false, false}, {622, 136, false, false}, {659, 136, false, false}, {987, 136, false, true}, + {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {987, 136, false, true}, + {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {1046, 272, false, true}, + {311, 272, false, true}, {880, 272, false, true}, {987, 272, false, true}, {1046, 272, false, true}, + {987, 272, false, true}, {880, 272, false, true}, {830, 272, false, true}, {880, 272, true, false}, + {659, 272, false, true}, {698, 272, false, true}, {587, 272, false, true}, {523, 272, false, true}, + {523, 272, false, true}, {493, 272, false, true}, {493, 136, false, true}, {440, 68, false, false}, + {493, 68, false, false}, {493, 68, true, true}, {440, 477, false, false}, {880, 272, false, false}, + {987, 272, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, + {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {880, 272, false, true}, + {830, 272, false, true}, {739, 272, false, true}, {830, 272, false, true}, {880, 272, false, true}, + {987, 272, false, true}, {830, 272, false, true}, {659, 272, false, true}, {880, 272, false, true}, + {987, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, + {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {880, 272, false, true}, + {830, 272, false, true}, {739, 272, false, true}, {987, 272, false, true}, {830, 272, false, true}, + {659, 272, false, true}, {880, 545, true, false}, {1108, 136, false, false}, {1174, 136, false, false}, + {1108, 136, false, false}, {987, 136, false, false}, {880, 136, false, true}, {987, 136, false, false}, + {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, true}, {880, 136, false, false}, + {830, 136, false, true}, {739, 136, false, false}, {698, 136, false, true}, {739, 136, false, false}, + {830, 136, false, true}, {698, 136, false, false}, {554, 136, false, true}, {622, 136, false, false}, + {698, 136, false, true}, {554, 136, false, false}, {739, 136, false, true}, {698, 136, false, false}, + {739, 136, false, true}, {830, 136, false, false}, {880, 136, false, true}, {830, 136, false, false}, + {880, 136, false, true}, {987, 136, false, false}, {1108, 136, false, true}, {1046, 136, false, false}, + {1108, 136, false, true}, {1046, 136, false, false}, {1108, 136, false, true}, {1174, 136, false, false}, + {1108, 136, false, true}, {987, 136, false, false}, {880, 136, false, true}, {987, 136, false, false}, + {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, true}, {880, 136, false, false}, + {830, 136, false, true}, {739, 136, false, false}, {659, 136, false, true}, {739, 136, false, false}, + {830, 136, false, false}, {659, 136, false, false}, {554, 136, false, false}, {622, 136, false, false}, + {659, 136, false, false}, {554, 136, false, false}, {622, 136, false, true}, {659, 136, false, false}, + {739, 136, false, false}, {622, 136, false, false}, {523, 136, false, false}, {554, 136, false, false}, + {622, 136, false, false}, {523, 136, false, false}, {554, 545, false, false}, {659, 136, false, false}, + {587, 136, false, false}, {554, 136, false, false}, {493, 136, false, false}, {440, 136, false, true}, + {493, 136, false, false}, {554, 136, false, false}, {587, 136, false, false}, {659, 136, false, false}, + {739, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {880, 136, false, true}, + {830, 136, false, false}, {739, 136, false, false}, {659, 136, false, false}, {659, 136, false, true}, + {587, 136, false, false}, {554, 136, false, false}, {493, 136, false, false}, {440, 136, false, true}, + {493, 136, false, false}, {554, 136, false, false}, {587, 136, false, false}, {659, 136, false, false}, + {739, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {932, 272, false, true}, + {987, 272, false, true}, {659, 136, false, true}, {587, 136, false, false}, {554, 136, false, true}, + {493, 136, false, false}, {440, 136, false, true}, {493, 136, false, false}, {554, 136, false, false}, + {587, 136, false, false}, {659, 136, false, false}, {739, 136, false, false}, {830, 136, false, false}, + {880, 136, false, false}, {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, false}, + {659, 136, false, false}, {659, 136, false, true}, {587, 136, false, false}, {554, 136, false, false}, + {493, 136, false, false}, {554, 136, false, true}, {659, 136, false, false}, {440, 136, false, true}, + {554, 136, false, false}, {493, 136, false, true}, {587, 136, false, false}, {415, 136, false, true}, + {493, 136, false, false}, {440, 272, true, false}, {440, 272, false, true}, {1108, 136, false, false}, + {1174, 136, false, false}, {1108, 136, false, false}, {987, 136, false, false}, {880, 136, false, true}, + {987, 136, false, false}, {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, true}, + {880, 136, false, false}, {830, 136, false, true}, {739, 136, false, false}, {698, 136, false, true}, + {739, 136, false, false}, {830, 136, false, true}, {698, 136, false, false}, {554, 136, false, true}, + {622, 136, false, false}, {698, 136, false, true}, {554, 136, false, false}, {739, 136, false, true}, + {698, 136, false, false}, {739, 136, false, true}, {830, 136, false, false}, {880, 136, false, true}, + {830, 136, false, false}, {880, 136, false, true}, {987, 136, false, false}, {1108, 136, true, false}, + {1046, 136, false, false}, {1108, 136, false, true}, {1046, 136, false, false}, {1108, 136, false, true}, + {1046, 136, false, false}, {1108, 136, false, true}, {932, 136, false, false}, {1174, 136, true, false}, + {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, + {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, {1174, 136, true, false}, + {1108, 136, false, false}, {987, 136, false, true}, {880, 136, false, false}, {830, 136, false, true}, + {880, 136, false, false}, {987, 136, false, true}, {830, 136, false, false}, {880, 136, true, false}, + {987, 136, false, false}, {1108, 136, false, true}, {739, 136, false, false}, {698, 136, true, false}, + {739, 136, false, false}, {830, 136, false, true}, {698, 136, false, false}, {739, 545, false, true}, + {880, 272, false, false}, {987, 272, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, + {880, 272, false, true}, {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, + {880, 272, false, true}, {830, 272, false, true}, {739, 272, false, true}, {830, 272, false, true}, + {880, 272, false, true}, {987, 272, false, true}, {830, 272, false, true}, {659, 272, false, true}, + {880, 272, false, true}, {987, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {880, 272, false, true}, {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, + {880, 272, false, true}, {830, 272, false, true}, {739, 272, false, true}, {987, 272, false, true}, + {830, 272, false, true}, {659, 272, false, true}, {880, 545, true, false}, {493, 136, false, false}, + {440, 136, false, false}, {415, 136, false, false}, {440, 136, false, false}, {523, 272, false, true}, + {329, 272, false, false}, {587, 136, false, false}, {523, 136, false, false}, {493, 136, false, false}, + {523, 136, false, false}, {659, 272, false, true}, {329, 272, false, false}, {698, 136, false, false}, + {659, 136, false, false}, {622, 136, false, false}, {659, 136, false, false}, {987, 136, false, true}, + {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {987, 136, false, true}, + {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {1046, 272, false, true}, + {1046, 272, false, false}, {880, 272, false, false}, {1046, 272, false, false}, {987, 272, false, true}, + {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, {987, 272, false, true}, + {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, {987, 272, false, true}, + {880, 272, false, true}, {783, 272, true, false}, {739, 272, false, true}, {659, 545, false, true}, + {659, 272, false, false}, {698, 272, false, false}, {783, 272, true, false}, {783, 272, false, false}, + {880, 136, false, true}, {783, 136, false, false}, {698, 136, false, false}, {659, 136, false, false}, + {587, 272, false, true}, {391, 272, false, false}, {659, 272, false, false}, {698, 272, false, false}, + {783, 272, true, false}, {783, 272, false, false}, {880, 136, false, true}, {783, 136, false, false}, + {698, 136, false, false}, {659, 136, false, false}, {587, 545, false, true}, {523, 272, false, false}, + {587, 272, false, false}, {659, 272, true, false}, {659, 272, false, true}, {698, 136, true, false}, + {659, 136, false, false}, {587, 136, false, false}, {523, 136, false, false}, {493, 272, false, true}, + {493, 272, false, false}, {523, 272, false, false}, {587, 272, false, false}, {659, 272, true, false}, + {659, 272, false, true}, {698, 136, true, false}, {659, 136, false, false}, {587, 136, false, false}, + {523, 136, false, false}, {493, 545, false, true}, {493, 136, false, false}, {440, 136, false, false}, + {415, 136, false, false}, {440, 136, false, false}, {523, 272, false, true}, {329, 272, false, false}, + {587, 136, false, false}, {523, 136, false, false}, {493, 136, false, false}, {523, 136, false, false}, + {659, 272, false, true}, {329, 272, false, false}, {698, 136, false, false}, {659, 136, false, false}, + {622, 136, false, false}, {659, 136, false, false}, {987, 136, false, true}, {880, 136, false, false}, + {830, 136, false, false}, {880, 136, false, false}, {987, 136, false, true}, {880, 136, false, false}, + {830, 136, false, false}, {880, 136, false, false}, {1046, 272, false, true}, {311, 272, false, true}, + {880, 272, false, true}, {987, 272, false, true}, {1046, 272, false, true}, {987, 272, false, true}, + {880, 272, false, true}, {830, 272, false, true}, {880, 272, true, false}, {659, 272, false, true}, + {698, 272, false, true}, {587, 272, false, true}, {523, 272, false, true}, {523, 272, false, true}, + {493, 272, false, true}, {493, 136, false, true}, {440, 68, false, false}, {493, 68, false, false}, + {493, 68, true, true}, {440, 477, false, false}, {440, 136, false, false}, {880, 136, false, false}, + {493, 136, false, false}, {987, 136, false, false}, {554, 136, false, true}, {1108, 136, false, false}, + {0, 272, false, true}, {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, + {987, 136, false, false}, {554, 136, false, true}, {1108, 136, false, false}, {493, 136, false, true}, + {987, 136, false, false}, {440, 136, false, true}, {880, 136, false, false}, {415, 136, false, true}, + {830, 136, false, false}, {369, 136, false, true}, {739, 136, false, false}, {415, 136, false, true}, + {830, 136, false, false}, {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, + {987, 136, false, false}, {415, 136, false, true}, {830, 136, false, false}, {329, 136, false, true}, + {659, 136, false, false}, {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, + {987, 136, false, false}, {554, 136, false, true}, {1108, 136, false, false}, {0, 272, false, true}, + {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, {987, 136, false, false}, + {554, 136, false, true}, {1108, 136, false, false}, {493, 136, false, true}, {987, 136, false, false}, + {440, 136, false, true}, {880, 136, false, false}, {415, 136, false, true}, {830, 136, false, false}, + {369, 136, false, true}, {739, 136, false, false}, {493, 136, false, true}, {987, 136, false, false}, + {415, 136, false, true}, {830, 136, false, false}, {329, 136, false, true}, {659, 136, false, false}, + {880, 545, true, false}, {880, 272, false, true}, {880, 272, false, true}, {1108, 272, false, true}, + {1108, 136, false, true}, {1108, 136, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, true}, {1108, 136, false, false}, {1174, 272, false, true}, {1174, 272, false, true}, + {0, 272, false, true}, {0, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {987, 272, false, true}, + {987, 272, false, true}, {1318, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, true}, {1108, 136, false, false}, {1174, 272, false, true}, {1174, 272, false, true}, + {1174, 272, false, true}, {1174, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {987, 272, false, true}, + {987, 272, false, true}, {987, 272, false, true}, {880, 136, false, true}, {880, 136, false, false}, + {880, 136, false, false}, {880, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, + {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, + {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, + {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, + {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, + {1108, 136, false, false}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, false}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, false}, {1108, 136, false, false}, {1174, 136, false, true}, {1174, 136, false, false}, + {1174, 136, false, false}, {1174, 136, false, false}, {1174, 136, false, true}, {1174, 136, false, false}, + {1174, 136, false, false}, {1174, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, + {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, + {1108, 136, false, false}, {1108, 136, false, false}, {987, 136, false, true}, {987, 136, false, false}, + {987, 136, false, true}, {987, 136, false, false}, {987, 136, false, true}, {987, 136, false, false}, + {1318, 136, false, true}, {1318, 136, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, + {987, 136, false, true}, {1108, 136, false, false}, {1174, 272, false, true}, {1174, 272, false, true}, + {1174, 272, false, true}, {1174, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, + {1108, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {987, 272, false, true}, + {987, 272, false, true}, {987, 272, false, true}, {880, 272, false, true}, {880, 272, false, true}, + {880, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, {880, 272, false, true}, + {880, 272, false, true}, {1318, 272, false, true}, {880, 272, false, true}, {880, 272, false, true}, + {880, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, {1108, 272, false, true}, + {880, 272, false, true}, {1318, 272, false, true}, {880, 545, true, false}, {880, 545, true, true}, + {880, 545, true, true}, + {0, 2000, false, false} +}; + + +// Converted from: tetris_1.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_tetris_1[] = { + {659, 266, false, true}, {659, 14, false, false}, {659, 232, false, false}, {493, 15, false, true}, + {493, 216, false, false}, {0, 15, false, false}, {523, 14, false, false}, {523, 219, false, false}, + {329, 15, false, false}, {587, 14, false, true}, {587, 236, false, false}, {587, 14, false, false}, + {587, 236, false, false}, {523, 15, false, true}, {523, 223, false, false}, {0, 15, false, false}, + {493, 15, false, false}, {493, 226, false, false}, {329, 17, false, false}, {440, 13, true, false}, + {440, 256, false, false}, {440, 14, false, true}, {440, 232, false, false}, {440, 15, true, false}, + {440, 216, false, false}, {0, 15, false, false}, {523, 14, false, true}, {523, 219, false, false}, + {0, 15, false, false}, {659, 14, true, false}, {659, 234, false, false}, {659, 14, false, true}, + {659, 231, false, false}, {587, 15, true, false}, {587, 216, false, false}, {0, 15, false, false}, + {523, 14, false, true}, {523, 217, false, false}, {0, 17, false, false}, {493, 12, true, false}, + {493, 251, false, false}, {493, 14, false, true}, {493, 232, false, false}, {493, 15, true, false}, + {493, 216, false, false}, {0, 15, false, false}, {523, 14, false, true}, {523, 219, false, false}, + {0, 15, false, false}, {587, 14, true, false}, {587, 234, false, false}, {587, 14, false, true}, + {587, 231, false, false}, {659, 15, true, false}, {659, 231, false, false}, {659, 14, false, true}, + {659, 232, false, false}, {523, 15, true, false}, {523, 251, false, false}, {523, 14, false, true}, + {523, 232, false, false}, {440, 15, true, false}, {440, 231, false, false}, {440, 14, false, true}, + {440, 233, false, false}, {440, 15, true, false}, {440, 234, false, false}, {440, 14, false, true}, + {440, 231, false, false}, {0, 15, true, true}, {0, 201, false, false}, {0, 30, false, false}, + {261, 14, true, false}, {261, 202, false, false}, {0, 32, false, false}, {0, 12, false, true}, + {0, 251, false, false}, {293, 14, false, false}, {293, 233, false, false}, {587, 14, false, true}, + {587, 231, false, false}, {587, 14, false, false}, {587, 233, false, false}, {698, 15, false, true}, + {698, 219, false, false}, {0, 15, false, false}, {880, 14, false, false}, {880, 231, false, false}, + {880, 14, false, true}, {880, 216, false, false}, {0, 15, false, false}, {293, 14, false, false}, + {293, 234, false, false}, {783, 12, false, true}, {783, 236, false, false}, {0, 15, false, false}, + {698, 14, false, false}, {698, 218, false, false}, {293, 15, false, false}, {659, 14, true, false}, + {659, 231, false, false}, {659, 14, false, false}, {659, 234, false, false}, {659, 14, true, false}, + {659, 234, false, false}, {659, 14, false, false}, {659, 231, false, false}, {523, 15, true, false}, + {523, 216, false, false}, {0, 15, false, false}, {659, 14, false, false}, {659, 234, false, false}, + {659, 12, true, false}, {659, 251, false, false}, {659, 14, false, false}, {659, 232, false, false}, + {587, 15, true, false}, {587, 220, false, false}, {0, 11, false, false}, {523, 14, false, false}, + {523, 219, false, false}, {261, 15, false, false}, {493, 14, true, false}, {493, 234, false, false}, + {493, 14, false, true}, {493, 231, false, false}, {493, 14, true, false}, {493, 229, false, false}, + {523, 17, false, true}, {523, 217, false, false}, {0, 17, false, false}, {587, 12, true, false}, + {587, 251, false, false}, {587, 14, false, true}, {587, 218, false, false}, {0, 15, false, false}, + {659, 14, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, + {523, 15, true, false}, {523, 234, false, false}, {523, 14, false, true}, {523, 231, false, false}, + {440, 15, true, false}, {440, 231, false, false}, {440, 14, false, true}, {440, 232, false, false}, + {440, 15, true, false}, {440, 251, false, false}, {440, 14, false, true}, {440, 232, false, false}, + {0, 15, true, false}, {0, 231, false, false}, {0, 14, false, true}, {0, 249, false, false}, + {0, 977, false, false}, {659, 264, true, false}, {659, 14, false, true}, {659, 233, false, false}, + {659, 14, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, + {523, 15, true, false}, {523, 234, false, false}, {523, 14, false, true}, {523, 231, false, false}, + {523, 14, true, false}, {523, 231, false, false}, {523, 14, false, true}, {523, 232, false, false}, + {587, 15, true, false}, {587, 251, false, false}, {587, 14, false, true}, {587, 233, false, false}, + {587, 14, true, false}, {587, 231, false, false}, {587, 14, false, true}, {587, 233, false, false}, + {493, 15, true, false}, {493, 234, false, false}, {493, 14, false, true}, {493, 231, false, false}, + {493, 14, true, false}, {493, 231, false, false}, {493, 14, false, true}, {493, 232, false, false}, + {523, 15, true, false}, {523, 251, false, false}, {523, 14, false, true}, {523, 233, false, false}, + {523, 14, true, false}, {523, 231, false, false}, {523, 14, false, true}, {523, 233, false, false}, + {440, 15, true, false}, {440, 234, false, false}, {440, 14, false, true}, {440, 231, false, false}, + {440, 14, true, false}, {440, 231, false, false}, {440, 14, false, true}, {440, 232, false, false}, + {415, 15, true, false}, {415, 251, false, false}, {415, 14, false, true}, {415, 233, false, false}, + {415, 14, true, false}, {415, 231, false, false}, {415, 14, false, true}, {415, 233, false, false}, + {493, 15, true, false}, {493, 234, false, false}, {493, 14, false, true}, {493, 231, false, false}, + {493, 14, true, false}, {493, 231, false, false}, {493, 14, false, true}, {493, 232, false, false}, + {659, 15, true, false}, {659, 251, false, false}, {659, 14, false, true}, {659, 233, false, false}, + {659, 14, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, + {523, 15, true, false}, {523, 234, false, false}, {523, 14, false, true}, {523, 231, false, false}, + {523, 14, true, false}, {523, 231, false, false}, {523, 14, false, true}, {523, 232, false, false}, + {587, 15, true, false}, {587, 251, false, false}, {587, 14, false, true}, {587, 233, false, false}, + {587, 14, true, false}, {587, 231, false, false}, {587, 14, false, true}, {587, 233, false, false}, + {493, 15, true, false}, {493, 234, false, false}, {493, 14, false, true}, {493, 231, false, false}, + {493, 14, true, false}, {493, 231, false, false}, {493, 14, false, true}, {493, 232, false, false}, + {523, 15, true, false}, {523, 251, false, false}, {523, 14, false, true}, {523, 232, false, false}, + {659, 15, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, + {880, 15, true, false}, {880, 234, false, false}, {880, 14, false, true}, {880, 231, false, false}, + {880, 14, true, false}, {880, 231, false, false}, {880, 14, false, true}, {880, 232, false, false}, + {830, 15, true, false}, {830, 251, false, false}, {830, 14, false, true}, {830, 233, false, false}, + {830, 14, true, false}, {830, 231, false, false}, {830, 14, false, true}, {830, 234, false, false}, + {830, 14, true, false}, {830, 234, false, false}, {830, 14, false, true}, {830, 231, false, false}, + {830, 14, true, false}, {830, 231, false, false}, {830, 14, false, true}, {830, 232, false, false}, + {0, 15, false, false}, + {0, 2000, false, false} +}; + +// Converted from: sonic.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_sonic[] = { + {880, 114, false, false}, {698, 95, false, false}, {880, 95, true, false}, {698, 87, false, false}, + {698, 11, false, false}, {987, 99, true, false}, {783, 83, false, false}, {783, 11, false, false}, + {987, 95, true, false}, {783, 89, false, false}, {783, 11, false, false}, {1046, 101, true, false}, + {880, 83, false, false}, {880, 11, false, false}, {1046, 95, true, false}, {880, 87, false, false}, + {880, 11, false, false}, {1174, 99, true, false}, {987, 83, false, false}, {987, 11, false, false}, + {1174, 95, true, false}, {987, 87, false, false}, {987, 13, false, false}, {493, 90, true, false}, + {493, 118, false, false}, {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, + {493, 118, false, false}, {440, 78, true, false}, {440, 118, false, false}, {440, 77, true, false}, + {440, 118, false, false}, {440, 75, true, false}, {440, 118, false, false}, {493, 76, true, false}, + {493, 118, false, false}, {493, 76, true, false}, {493, 120, false, false}, {493, 90, true, false}, + {493, 106, false, false}, {493, 11, false, false}, {440, 77, true, false}, {440, 118, false, false}, + {440, 75, true, false}, {440, 118, false, false}, {440, 77, true, false}, {440, 118, false, false}, + {493, 78, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, + {440, 76, true, false}, {440, 118, false, false}, {440, 76, true, false}, {440, 118, false, false}, + {523, 92, true, false}, {523, 118, false, false}, {523, 77, true, false}, {523, 118, false, false}, + {523, 75, true, false}, {523, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, + {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, + {440, 76, true, false}, {440, 118, false, false}, {440, 76, true, false}, {440, 120, false, false}, + {440, 90, true, false}, {440, 118, false, false}, {440, 195, true, false}, {440, 23, true, false}, + {440, 52, false, false}, {440, 118, false, false}, {440, 196, true, false}, {440, 23, true, false}, + {440, 54, false, false}, {440, 118, false, false}, {440, 194, true, false}, {440, 23, true, false}, + {440, 52, false, false}, {440, 118, false, false}, {440, 76, true, false}, {440, 118, false, false}, + {440, 92, true, false}, {440, 118, false, false}, {440, 77, true, false}, {440, 118, false, false}, + {440, 75, true, false}, {440, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, + {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, + {523, 76, true, false}, {523, 118, false, false}, {523, 76, true, false}, {523, 118, false, false}, + {440, 92, true, false}, {440, 118, false, false}, {440, 77, true, false}, {440, 118, false, false}, + {440, 75, true, false}, {440, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, + {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, + {523, 76, true, false}, {523, 118, false, false}, {523, 76, true, false}, {523, 118, false, false}, + {523, 92, true, false}, {523, 118, false, false}, {523, 77, true, false}, {523, 118, false, false}, + {523, 75, true, false}, {523, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, + {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, + {493, 75, true, false}, {493, 118, false, false}, {493, 76, true, false}, {493, 120, false, false}, + {493, 90, true, false}, {493, 118, false, false}, {493, 77, true, false}, {493, 118, false, false}, + {493, 75, true, false}, {493, 118, false, false}, {493, 77, true, false}, {493, 118, false, false}, + {0, 78, true, false}, {0, 118, false, false}, {0, 194, true, false}, {0, 23, true, false}, + {0, 171, false, false}, {0, 23, true, false}, {0, 173, false, false}, {0, 21, true, false}, + {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, + {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, + {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, + {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, + {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, + {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, + {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {0, 75, true, false}, {0, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, + {1318, 11, true, false}, {1318, 66, false, false}, {1318, 118, false, false}, {1318, 11, true, false}, + {1174, 64, false, false}, {1174, 118, false, false}, {1174, 75, true, false}, {1174, 118, false, false}, + {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, + {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, + {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, + {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, + {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, + {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, + {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, + {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, + {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 75, true, false}, + {783, 118, false, false}, {783, 75, true, false}, {783, 118, false, false}, {783, 195, true, false}, + {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {880, 77, true, false}, + {880, 118, false, false}, {880, 78, true, false}, {880, 118, false, false}, {880, 11, true, false}, + {698, 64, false, false}, {698, 118, false, false}, {698, 75, true, false}, {698, 118, false, false}, + {880, 183, true, false}, {0, 13, false, false}, {783, 21, true, false}, {783, 68, false, false}, + {783, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, {880, 76, true, false}, + {880, 106, false, false}, {0, 11, false, false}, {783, 77, true, false}, {783, 118, false, false}, + {783, 77, true, false}, {783, 106, false, false}, {0, 11, false, false}, {523, 194, true, false}, + {523, 23, true, false}, {523, 171, false, false}, {523, 23, true, false}, {523, 171, false, false}, + {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, + {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, + {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, + {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, + {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, + {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, + {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {783, 77, true, false}, + {783, 118, false, false}, {1318, 11, true, false}, {1318, 66, false, false}, {1318, 118, false, false}, + {1318, 11, true, false}, {1174, 64, false, false}, {1174, 118, false, false}, {1174, 75, true, false}, + {1174, 118, false, false}, {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, + {987, 68, false, false}, {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, + {1046, 76, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, + {987, 118, false, false}, {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, + {783, 194, true, false}, {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, + {783, 171, false, false}, {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, + {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, + {0, 77, true, false}, {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, + {0, 11, false, false}, {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, + {880, 118, false, false}, {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, + {987, 68, false, false}, {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, + {1046, 76, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, + {987, 118, false, false}, {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, + {783, 75, true, false}, {783, 118, false, false}, {783, 75, true, false}, {783, 118, false, false}, + {783, 195, true, false}, {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, + {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, + {880, 77, true, false}, {880, 118, false, false}, {880, 78, true, false}, {880, 118, false, false}, + {880, 11, true, false}, {698, 64, false, false}, {698, 118, false, false}, {698, 75, true, false}, + {698, 118, false, false}, {880, 183, true, false}, {0, 13, false, false}, {783, 21, true, false}, + {783, 68, false, false}, {783, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, + {880, 76, true, false}, {880, 106, false, false}, {0, 11, false, false}, {783, 77, true, false}, + {783, 118, false, false}, {783, 77, true, false}, {783, 107, false, false}, {0, 12, false, false}, + {523, 76, true, false}, {523, 120, false, false}, {523, 78, true, false}, {523, 109, false, false}, + {0, 12, false, false}, {659, 79, true, false}, {659, 110, false, false}, {0, 13, false, false}, + {587, 602, true, true}, {587, 587, true, true}, {587, 589, true, true}, {587, 11, false, false}, + {587, 587, true, true}, {587, 391, true, true}, {440, 183, true, true}, {349, 11, false, false}, + {523, 183, false, false}, {349, 11, false, false}, {659, 601, true, true}, {659, 591, true, true}, + {659, 604, true, true}, {659, 11, false, false}, {659, 587, false, true}, {659, 196, false, true}, + {659, 194, false, false}, {880, 183, false, true}, {880, 11, false, false}, {880, 183, false, false}, + {880, 11, false, false}, {830, 601, true, true}, {783, 587, true, true}, {698, 390, true, true}, + {698, 198, false, false}, {0, 11, false, false}, {622, 587, true, true}, {587, 391, true, true}, + {523, 183, true, false}, {0, 11, false, false}, {622, 183, false, false}, {0, 11, false, false}, + {587, 601, true, false}, {587, 587, true, true}, {587, 390, true, false}, {587, 198, true, false}, + {587, 11, false, false}, {587, 184, true, false}, {587, 11, false, false}, {587, 182, true, false}, + {587, 11, false, false}, {587, 184, true, false}, {587, 11, false, false}, {587, 185, true, false}, + {587, 11, false, false}, {587, 182, true, false}, {587, 11, false, false}, {587, 183, true, false}, + {587, 11, false, false}, {587, 183, true, false}, {587, 11, false, false}, {0, 92, true, false}, + {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, + {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, {1046, 77, true, false}, + {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, {880, 118, false, false}, + {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, {0, 13, false, false}, + {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, {987, 77, true, false}, + {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, {0, 11, false, false}, + {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, {987, 106, false, false}, + {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, {783, 171, false, false}, + {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, {0, 68, false, false}, + {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, + {0, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, {1318, 11, true, false}, + {1318, 66, false, false}, {1318, 118, false, false}, {1318, 11, true, false}, {1174, 64, false, false}, + {1174, 118, false, false}, {1174, 75, true, false}, {1174, 118, false, false}, {1046, 183, true, false}, + {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, + {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, + {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, + {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, + {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, + {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, + {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, + {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, + {987, 106, false, false}, {0, 11, false, false}, {783, 75, true, false}, {783, 118, false, false}, + {783, 75, true, false}, {783, 118, false, false}, {783, 195, true, false}, {0, 23, true, false}, + {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {0, 75, true, false}, {0, 118, false, false}, {880, 77, true, false}, {880, 118, false, false}, + {880, 78, true, false}, {880, 118, false, false}, {880, 11, true, false}, {698, 64, false, false}, + {698, 118, false, false}, {698, 75, true, false}, {698, 118, false, false}, {880, 183, true, false}, + {0, 13, false, false}, {783, 21, true, false}, {783, 68, false, false}, {783, 118, false, false}, + {783, 77, true, false}, {783, 118, false, false}, {880, 76, true, false}, {880, 106, false, false}, + {0, 11, false, false}, {783, 77, true, false}, {783, 118, false, false}, {783, 77, true, false}, + {783, 106, false, false}, {0, 11, false, false}, {523, 194, true, false}, {523, 23, true, false}, + {523, 171, false, false}, {523, 23, true, false}, {523, 171, false, false}, {0, 23, true, false}, + {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, + {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, + {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, + {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, + {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, + {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, + {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, + {0, 75, true, false}, {0, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, + {1318, 11, true, false}, {1318, 66, false, false}, {1318, 118, false, false}, {1318, 11, true, false}, + {1174, 64, false, false}, {1174, 118, false, false}, {1174, 75, true, false}, {1174, 118, false, false}, + {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, + {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, + {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, + {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, + {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, + {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, + {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, + {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, + {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, + {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 75, true, false}, + {783, 118, false, false}, {783, 75, true, false}, {783, 118, false, false}, {783, 195, true, false}, + {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, + {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {880, 77, true, false}, + {880, 118, false, false}, {880, 78, true, false}, {880, 118, false, false}, {880, 11, true, false}, + {698, 64, false, false}, {698, 118, false, false}, {698, 75, true, false}, {698, 118, false, false}, + {880, 183, true, false}, {0, 13, false, false}, {783, 21, true, false}, {783, 68, false, false}, + {783, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, {880, 76, true, false}, + {880, 106, false, false}, {0, 11, false, false}, {783, 77, true, false}, {783, 118, false, false}, + {783, 77, true, false}, {783, 107, false, false}, {0, 12, false, false}, {523, 76, true, false}, + {523, 120, false, false}, {523, 78, true, false}, {523, 109, false, false}, {0, 12, false, false}, + {659, 79, true, false}, {659, 110, false, false}, {0, 13, false, false}, {587, 602, true, true}, + {587, 587, true, true}, {587, 589, true, true}, {587, 11, false, false}, {587, 587, true, true}, + {587, 391, true, true}, {440, 183, true, true}, {349, 11, false, false}, {523, 183, false, false}, + {349, 11, false, false}, {659, 601, true, true}, {659, 591, true, true}, {659, 604, true, true}, + {659, 11, false, false}, {659, 587, false, true}, {659, 196, false, true}, {659, 194, false, false}, + {880, 183, false, true}, {880, 11, false, false}, {880, 183, false, false}, {880, 11, false, false}, + {830, 601, true, true}, {783, 587, true, true}, {698, 390, true, true}, {698, 198, false, false}, + {0, 11, false, false}, {622, 587, true, true}, {587, 391, true, true}, {523, 183, true, false}, + {0, 11, false, false}, {622, 183, false, false}, {0, 11, false, false}, {587, 601, true, false}, + {587, 587, true, true}, {587, 390, true, false}, {587, 198, true, false}, {587, 11, false, false}, + {587, 184, true, false}, {587, 11, false, false}, {587, 182, true, false}, {587, 11, false, false}, + {587, 184, true, false}, {587, 11, false, false}, {587, 185, true, false}, {587, 11, false, false}, + {587, 182, true, false}, {587, 11, false, false}, {587, 183, true, false}, {587, 11, false, false}, + {587, 183, true, false}, {587, 11, false, false}, + {0, 2000, false, false} +}; + +// Converted from: cast.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_cast[] = { + {587, 144, true, false}, {587, 228, true, false}, {587, 14, false, false}, {523, 119, true, false}, + {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, {493, 121, true, false}, + {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, {329, 113, true, false}, + {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, {440, 259, false, false}, + {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, {293, 14, false, false}, + {440, 234, false, false}, {440, 14, false, false}, {391, 121, true, false}, {523, 128, true, false}, + {523, 231, true, false}, {523, 15, false, false}, {523, 246, true, false}, {523, 232, true, false}, + {523, 14, false, false}, {587, 145, true, false}, {587, 228, true, false}, {587, 14, false, false}, + {523, 119, true, false}, {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, + {493, 121, true, false}, {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, + {329, 113, true, false}, {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, + {440, 259, false, false}, {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, + {293, 14, false, false}, {440, 234, false, false}, {440, 14, false, false}, {391, 128, true, false}, + {391, 121, true, false}, {391, 231, true, false}, {391, 15, false, false}, {391, 246, true, false}, + {391, 232, true, false}, {391, 14, false, false}, {0, 266, true, false}, {587, 121, true, false}, + {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, + {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, + {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, + {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, + {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, + {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, + {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, + {698, 119, false, false}, {0, 17, false, false}, {0, 264, true, false}, {587, 121, true, false}, + {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, + {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, + {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, + {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, + {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, + {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, + {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, + {698, 126, false, false}, {554, 22, true, false}, {554, 373, false, false}, {659, 358, false, false}, + {659, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, + {698, 357, false, false}, {698, 14, false, false}, {587, 232, false, false}, {587, 14, false, false}, + {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, + {932, 14, false, false}, {880, 370, true, false}, {587, 118, false, false}, {0, 501, false, false}, + {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, + {932, 14, false, false}, {880, 370, true, false}, {698, 357, false, false}, {698, 14, false, false}, + {587, 232, false, false}, {587, 14, false, false}, {659, 388, true, false}, {783, 358, false, false}, + {783, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, + {987, 357, false, false}, {987, 14, false, false}, {1108, 232, false, false}, {1108, 14, false, false}, + {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, + {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, + {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, + {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, + {261, 246, true, true}, {329, 15, false, false}, {329, 103, false, false}, {391, 375, false, false}, + {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, + {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, + {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, + {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, + {261, 246, true, false}, {0, 15, true, false}, {0, 103, false, false}, {0, 375, true, false}, + {587, 145, true, false}, {587, 228, true, false}, {587, 14, false, false}, {523, 119, true, false}, + {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, {493, 121, true, false}, + {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, {329, 113, true, false}, + {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, {440, 259, false, false}, + {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, {293, 14, false, false}, + {440, 234, false, false}, {440, 14, false, false}, {391, 121, true, false}, {523, 128, true, false}, + {523, 231, true, false}, {523, 15, false, false}, {523, 246, true, false}, {523, 232, true, false}, + {523, 14, false, false}, {587, 145, true, false}, {587, 228, true, false}, {587, 14, false, false}, + {523, 119, true, false}, {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, + {493, 121, true, false}, {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, + {329, 113, true, false}, {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, + {440, 259, false, false}, {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, + {293, 14, false, false}, {440, 234, false, false}, {440, 14, false, false}, {391, 128, true, false}, + {391, 121, true, false}, {391, 231, true, false}, {391, 15, false, false}, {391, 246, true, false}, + {391, 232, true, false}, {391, 14, false, false}, {0, 266, true, false}, {587, 121, true, false}, + {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, + {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, + {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, + {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, + {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, + {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, + {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, + {698, 119, false, false}, {0, 17, false, false}, {0, 264, true, false}, {587, 121, true, false}, + {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, + {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, + {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, + {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, + {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, + {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, + {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, + {698, 126, false, false}, {554, 22, true, false}, {554, 373, false, false}, {659, 358, false, false}, + {659, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, + {698, 357, false, false}, {698, 14, false, false}, {587, 232, false, false}, {587, 14, false, false}, + {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, + {932, 14, false, false}, {880, 370, true, false}, {587, 118, false, false}, {0, 501, false, false}, + {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, + {932, 14, false, false}, {880, 370, true, false}, {698, 357, false, false}, {698, 14, false, false}, + {587, 232, false, false}, {587, 14, false, false}, {659, 388, true, false}, {783, 358, false, false}, + {783, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, + {987, 357, false, false}, {987, 14, false, false}, {1108, 232, false, false}, {1108, 14, false, false}, + {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, + {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, + {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, + {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, + {261, 246, true, true}, {329, 15, false, false}, {329, 103, false, false}, {391, 375, false, false}, + {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, + {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, + {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, + {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, + {261, 246, true, false}, {0, 15, true, false}, {0, 103, false, false}, {0, 375, true, false}, + {0, 2000, false, false} +}; + +// Converted from: seven.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_seven[] = { + {NOTE_E4, 750, true, false}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, false}, + {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, false, false}, {NOTE_B3, 250, true, false}, + {NOTE_E4, 1000, true, false}, {NOTE_E4, 1000, true, false}, {NOTE_E4, 750, true, false}, {NOTE_E4, 125, true, false}, + {REST, 125, false, false}, {NOTE_G4, 125, true, false}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, + {NOTE_C4, 250, false, false}, {NOTE_D4, 250, true, false}, {NOTE_C4, 1000, true, false}, {NOTE_B3, 1000, true, false}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, + {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, + {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, + {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, + {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, + {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, + {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, + {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, + {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, + {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, + {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, + {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, + {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, + {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, + {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, + {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, + {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, + {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, + {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, + {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, + {NOTE_E4, 250, true, true}, {NOTE_E4, 218, true, true}, {NOTE_E4, 30, true, true}, {NOTE_E4, 501, true, true}, + {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, + {NOTE_G4, 125, false, false}, {REST, 125, false, false}, {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, + {REST, 125, false, false}, {NOTE_D4, 250, true, true}, {NOTE_C4, 500, true, true}, {NOTE_C4, 500, true, true}, + {REST, 500, true, true}, {REST, 468, true, true}, {REST, 30, true, true}, {NOTE_E4, 501, true, true}, + {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, + {NOTE_G4, 125, false, false}, {REST, 125, false, false}, {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, + {REST, 125, false, false}, {NOTE_D4, 250, true, true}, {NOTE_C4, 375, true, true}, {NOTE_D4, 125, true, true}, + {NOTE_D4, 250, true, true}, {NOTE_C4, 250, true, true}, {REST, 500, true, true}, {REST, 468, true, true}, + {REST, 30, true, true}, {NOTE_E4, 501, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, + {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_G4, 125, false, false}, {REST, 125, false, false}, + {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_D4, 250, true, true}, + {NOTE_C4, 500, true, true}, {NOTE_C4, 500, true, true}, {REST, 500, true, true}, {REST, 468, true, true}, + {REST, 30, true, true}, {NOTE_E4, 501, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, + {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_G4, 125, false, false}, {REST, 125, false, false}, + {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_D4, 250, true, true}, + {NOTE_C4, 375, true, true}, {NOTE_D4, 125, true, true}, {NOTE_D4, 250, true, true}, {NOTE_C4, 250, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, + {NOTE_E4, 250, true, true}, {NOTE_E4, 250, true, true}, {REST, 750, true, true}, {REST, 125, true, false}, + {REST, 125, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 125, true, false}, + {REST, 250, false, false}, {REST, 250, true, false}, {REST, 1000, true, false}, {REST, 1000, true, false}, + {REST, 750, true, false}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, false}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 250, true, false}, + {REST, 1000, true, false}, {REST, 1000, true, false}, {REST, 500, true, true}, {REST, 250, true, true}, + {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, + {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, + {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, + {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, + {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, + {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, + {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, + {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, + {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, + {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, + {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, + {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, + {NOTE_E4, 250, true, true}, {NOTE_E4, 250, true, true}, {REST, 750, true, true}, {REST, 125, true, false}, + {REST, 125, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 125, true, false}, + {REST, 250, false, false}, {REST, 250, true, false}, {REST, 1000, true, false}, {REST, 1000, true, false}, + {REST, 750, true, false}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, false}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 250, true, false}, + {REST, 1000, true, false}, {REST, 1000, true, false}, {REST, 500, true, true}, {REST, 250, true, true}, + {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, + {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, + {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, + {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, + {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, + {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, + {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, + {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, false}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 250, true, true}, + {REST, 750, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, false}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 250, true, false}, + {REST, 1000, true, false}, {REST, 1000, true, false}, {REST, 500, true, true}, {REST, 250, true, true}, + {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, + {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, + {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, + {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, + {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, + {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, + {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, + {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, + {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, + {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {REST, 250, true, false}, {REST, 250, true, true}, {REST, 250, true, true}, + {REST, 250, true, true}, {NOTE_E4, 2000, true, true}, + {REST, 2000, false, false} +}; + +// Converted from: mega.mid (Clean Melody & Bass-Routed Edition) +const SequenceStep midi_mega[] = { + {659, 125, true, true}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {659, 125, true, true}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, + {0, 2000, false, false} +}; + + + +// TRACK 1: Careless Whisper (Extended Club Edit) +const SequenceStep careless_song[] = { + // Phrase 1: Smooth Intro + {NOTE_D5, 600, false, false}, {NOTE_C5, 300, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 1200, false, true}, {REST, 200, false, false}, + {NOTE_F4, 300, false, false}, {NOTE_A4, 300, false, false}, {NOTE_D5, 600, false, false}, {NOTE_C5, 300, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 1200, false, true}, {REST, 200, false, false}, + {NOTE_F4, 300, false, false}, {NOTE_A4, 300, false, false}, {NOTE_D5, 600, false, false}, {NOTE_C5, 300, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 1200, false, false}, {REST, 200, false, false}, + {NOTE_E4, 300, false, false}, {NOTE_G4, 300, false, false}, {NOTE_C5, 600, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 300, false, false}, {NOTE_G4, 1200, false, true}, {REST, 600, false, false}, + {NOTE_D4, 200, false, false}, {NOTE_F4, 200, false, false}, {NOTE_A4, 200, false, false}, {NOTE_D5, 400, false, false}, {NOTE_C5, 200, false, false}, {NOTE_A4, 200, false, false}, {NOTE_F4, 200, false, false}, {NOTE_D4, 400, false, false}, + {REST, 500, false, false}, + // Phrase 2: The Beat Drop (Heavy Kick + Hat) + {NOTE_D5, 600, true, false}, {NOTE_C5, 300, false, true}, {NOTE_AS4, 300, true, false}, {NOTE_A4, 1200, true, true}, {REST, 200, false, false}, + {NOTE_F4, 300, true, false}, {NOTE_A4, 300, false, true}, {NOTE_D5, 600, true, false}, {NOTE_C5, 300, false, true}, {NOTE_AS4, 300, true, false}, {NOTE_A4, 1200, true, true}, {REST, 200, false, false}, + {NOTE_F4, 300, false, true}, {NOTE_A4, 300, true, false}, {NOTE_D5, 600, false, true}, {NOTE_C5, 300, true, false}, {NOTE_AS4, 300, false, true}, {NOTE_A4, 1200, true, false}, {REST, 200, false, false}, + {NOTE_E4, 300, false, true}, {NOTE_G4, 300, true, false}, {NOTE_C5, 600, false, true}, {NOTE_AS4, 300, true, false}, {NOTE_A4, 300, false, true}, {NOTE_G4, 1200, true, true}, {REST, 600, false, false}, + {NOTE_D4, 200, true, true}, {NOTE_F4, 200, false, false}, {NOTE_A4, 200, false, true}, {NOTE_D5, 400, true, false}, {NOTE_C5, 200, false, true}, {NOTE_A4, 200, true, false}, {NOTE_F4, 200, false, true}, {NOTE_D4, 400, true, true}, + {REST, 1000, false, false} +}; + +// TRACK 2: Take On Me (Extended Build-Up) +const SequenceStep takeonme_song[] = { + // Loop 1: Bass and Hat only + {NOTE_FS5, 200, false, true}, {NOTE_FS5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_D5, 200, false, false}, + {NOTE_CS5, 200, false, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, false, false}, {NOTE_A4, 200, false, true}, + {NOTE_B4, 200, false, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, false, false}, {NOTE_D5, 200, false, true}, + {NOTE_E5, 200, false, true}, {NOTE_E5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_GS5, 200, false, false}, + {NOTE_GS5, 200, false, true}, {NOTE_A5, 200, false, false}, {NOTE_B5, 200, false, true}, {REST, 400, false, false}, + // Loop 2: Add the Kick Drum + {NOTE_FS5, 200, true, true}, {NOTE_FS5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_D5, 200, true, false}, + {NOTE_CS5, 200, true, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, false, false}, {NOTE_A4, 200, true, true}, + {NOTE_B4, 200, true, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, true, false}, {NOTE_D5, 200, false, true}, + {NOTE_E5, 200, true, true}, {NOTE_E5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_GS5, 200, true, false}, + {NOTE_GS5, 200, false, true}, {NOTE_A5, 200, false, false}, {NOTE_B5, 200, true, true}, {REST, 400, false, false}, + // Loop 3: Full Rave + {NOTE_FS5, 200, true, true}, {NOTE_FS5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_D5, 200, false, true}, + {NOTE_CS5, 200, true, true}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, true, true}, {NOTE_A4, 200, false, true}, + {NOTE_B4, 200, true, true}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, true, true}, {NOTE_D5, 200, false, true}, + {NOTE_E5, 200, true, true}, {NOTE_E5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_GS5, 200, false, true}, + {NOTE_GS5, 200, true, true}, {NOTE_A5, 200, false, true}, {NOTE_B5, 200, true, true}, {REST, 1000, false, false} +}; + +// TRACK 3: Rickroll (Extended Double Chorus) +const SequenceStep rickroll_song[] = { + // Chorus 1 + {NOTE_CS5, 300, true, false}, {NOTE_D5, 300, false, true}, {NOTE_CS5, 300, true, false}, {NOTE_B4, 300, false, true}, {NOTE_FS4, 600, true, true}, {REST, 600, false, false}, + {NOTE_A4, 150, true, false}, {NOTE_B4, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_B4, 150, false, true}, {NOTE_FS5, 300, true, false}, {NOTE_FS5, 300, false, true}, {NOTE_E5, 600, true, false}, + {NOTE_A4, 150, false, true}, {NOTE_B4, 150, true, false}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, false}, {NOTE_E5, 300, true, true}, {NOTE_E5, 300, false, false}, {NOTE_D5, 300, true, false}, {NOTE_CS5, 150, false, true}, {NOTE_B4, 150, false, false}, + {NOTE_A4, 150, true, true}, {NOTE_B4, 150, false, false}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, false}, {NOTE_D5, 300, true, false}, {NOTE_E5, 300, false, true}, {NOTE_CS5, 300, true, false}, {NOTE_A4, 300, false, true}, {NOTE_A4, 300, true, false}, {NOTE_E5, 300, false, true}, {NOTE_D5, 900, true, true}, + {REST, 600, false, false}, + // Chorus 2 (Faster Hat) + {NOTE_CS5, 300, true, true}, {NOTE_D5, 300, false, true}, {NOTE_CS5, 300, true, true}, {NOTE_B4, 300, false, true}, {NOTE_FS4, 600, true, true}, {REST, 600, false, false}, + {NOTE_A4, 150, true, true}, {NOTE_B4, 150, false, true}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, true}, {NOTE_FS5, 300, true, true}, {NOTE_FS5, 300, false, true}, {NOTE_E5, 600, true, true}, + {NOTE_A4, 150, false, true}, {NOTE_B4, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, true}, {NOTE_E5, 300, true, true}, {NOTE_E5, 300, false, true}, {NOTE_D5, 300, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_B4, 150, false, true}, + {NOTE_A4, 150, true, true}, {NOTE_B4, 150, false, true}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, true}, {NOTE_D5, 300, true, true}, {NOTE_E5, 300, false, true}, {NOTE_CS5, 300, true, true}, {NOTE_A4, 300, false, true}, {NOTE_A4, 300, true, true}, {NOTE_E5, 300, false, true}, {NOTE_D5, 900, true, true}, + {REST, 1000, false, false} +}; + +// TRACK 4: Can't Help Falling In Love (Extended Wedding Mix) +const SequenceStep elvis_song[] = { + // Verse 1 + {NOTE_C4, 400, true, false}, {NOTE_G4, 400, false, true}, {NOTE_C5, 800, true, false}, {NOTE_G4, 400, false, true}, {NOTE_E4, 400, true, false}, + {NOTE_A4, 400, true, true}, {NOTE_B4, 400, false, false}, {NOTE_C5, 400, true, false}, {NOTE_D5, 400, false, true}, {NOTE_E5, 400, true, false}, {NOTE_F5, 400, false, true}, {NOTE_E5, 800, true, true}, {NOTE_D5, 800, false, true}, + {NOTE_G4, 400, true, false}, {NOTE_A4, 400, false, true}, {NOTE_B4, 400, true, false}, {NOTE_C5, 800, true, true}, {NOTE_D5, 400, false, true}, + {NOTE_E5, 400, true, false}, {NOTE_F5, 400, false, true}, {NOTE_G5, 400, true, false}, {NOTE_F5, 400, true, true}, {NOTE_E5, 400, false, true}, {NOTE_D5, 400, true, false}, {NOTE_C5, 1200, true, true}, + {REST, 800, false, false}, + // Verse 2 (Double Drums) + {NOTE_C4, 400, true, true}, {NOTE_G4, 400, false, true}, {NOTE_C5, 800, true, true}, {NOTE_G4, 400, false, true}, {NOTE_E4, 400, true, true}, + {NOTE_A4, 400, true, true}, {NOTE_B4, 400, false, true}, {NOTE_C5, 400, true, true}, {NOTE_D5, 400, false, true}, {NOTE_E5, 400, true, true}, {NOTE_F5, 400, false, true}, {NOTE_E5, 800, true, true}, {NOTE_D5, 800, false, true}, + {NOTE_G4, 400, true, true}, {NOTE_A4, 400, false, true}, {NOTE_B4, 400, true, true}, {NOTE_C5, 800, true, true}, {NOTE_D5, 400, false, true}, + {NOTE_E5, 400, true, true}, {NOTE_F5, 400, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 400, true, true}, {NOTE_E5, 400, false, true}, {NOTE_D5, 400, true, true}, {NOTE_C5, 1200, true, true}, + {REST, 1500, false, false} +}; + +// TRACK 5: Gimme! Gimme! Gimme! (Extended Midnight Rave) +const SequenceStep abba_song[] = { + // Loop 1 + {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, false}, {NOTE_F5, 400, true, false}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, false}, {NOTE_E5, 200, true, false}, {NOTE_F5, 200, false, true}, {NOTE_D5, 600, true, true}, {REST, 200, false, false}, + {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, false}, {NOTE_F5, 400, true, false}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, false}, {NOTE_E5, 200, true, false}, {NOTE_D5, 200, false, true}, {NOTE_CS5, 600, true, true}, {REST, 400, false, false}, + {NOTE_D4, 200, true, true}, {REST, 100, false, false}, {NOTE_D4, 200, false, true}, {NOTE_F4, 200, true, false}, {NOTE_A4, 200, false, true}, {NOTE_G4, 200, true, true}, {REST, 100, false, false}, {NOTE_E4, 200, false, true}, {NOTE_C4, 200, true, false}, {NOTE_D4, 400, true, true}, + {REST, 400, false, false}, + // Loop 2 (More High Hats) + {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, true}, {NOTE_F5, 400, true, true}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_F5, 200, false, true}, {NOTE_D5, 600, true, true}, {REST, 200, false, false}, + {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, true}, {NOTE_F5, 400, true, true}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_D5, 200, false, true}, {NOTE_CS5, 600, true, true}, {REST, 400, false, false}, + {NOTE_D4, 200, true, true}, {REST, 100, false, true}, {NOTE_D4, 200, false, true}, {NOTE_F4, 200, true, true}, {NOTE_A4, 200, false, true}, {NOTE_G4, 200, true, true}, {REST, 100, false, true}, {NOTE_E4, 200, false, true}, {NOTE_C4, 200, true, true}, {NOTE_D4, 400, true, true}, + {REST, 1000, false, false} +}; + + +// TRACK 7: Für Elise (Beethoven Extended Trance) +const SequenceStep elise_song[] = { + // Loop 1 + {NOTE_E5, 200, true, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, false, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, false}, + {NOTE_B4, 200, false, true}, {NOTE_D5, 200, false, false}, {NOTE_C5, 200, false, true}, {NOTE_A4, 600, true, true}, {REST, 200, false, false}, + {NOTE_C4, 200, false, true}, {NOTE_E4, 200, false, false}, {NOTE_A4, 200, false, true}, {NOTE_B4, 600, true, true}, {REST, 200, false, false}, + {NOTE_E4, 200, false, true}, {NOTE_GS4, 200, false, false}, {NOTE_B4, 200, false, true}, {NOTE_C5, 600, true, true}, {REST, 200, false, false}, + // Loop 2 + {NOTE_E5, 200, true, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, false, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, false}, + {NOTE_B4, 200, false, true}, {NOTE_D5, 200, false, false}, {NOTE_C5, 200, false, true}, {NOTE_A4, 600, true, true}, {REST, 200, false, false}, + {NOTE_C4, 200, false, true}, {NOTE_E4, 200, false, false}, {NOTE_A4, 200, false, true}, {NOTE_B4, 600, true, true}, {REST, 200, false, false}, + {NOTE_E4, 200, false, true}, {NOTE_C5, 200, false, false}, {NOTE_B4, 200, false, true}, {NOTE_A4, 800, true, true}, {REST, 200, false, false}, + // Loop 3 (Heavy Beat Drop) + {NOTE_E5, 200, true, true}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, true}, + {NOTE_B4, 200, false, true}, {NOTE_D5, 200, true, true}, {NOTE_C5, 200, false, true}, {NOTE_A4, 600, true, true}, {REST, 200, false, false}, + {NOTE_C4, 200, true, true}, {NOTE_E4, 200, false, true}, {NOTE_A4, 200, true, true}, {NOTE_B4, 600, true, true}, {REST, 200, false, false}, + {NOTE_E4, 200, true, true}, {NOTE_C5, 200, false, true}, {NOTE_B4, 200, true, true}, {NOTE_A4, 800, true, true}, + {REST, 1000, false, false} +}; + +// TRACK 8: Symphony No. 40 (Mozart Extended) +const SequenceStep mozart_song[] = { + // Loop 1 + {NOTE_DS5, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_D5, 300, true, false}, + {NOTE_DS5, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_D5, 300, true, false}, + {NOTE_DS5, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_D5, 300, true, false}, + {NOTE_AS5, 600, true, true}, {REST, 300, false, false}, + {NOTE_D5, 150, false, true}, {NOTE_CS5, 150, false, false}, {NOTE_CS5, 300, true, false}, + {NOTE_D5, 150, false, true}, {NOTE_CS5, 150, false, false}, {NOTE_CS5, 300, true, false}, + {NOTE_D5, 150, false, true}, {NOTE_CS5, 150, false, false}, {NOTE_CS5, 300, true, false}, + {NOTE_A5, 600, true, true}, {REST, 300, false, false}, + {NOTE_CS5, 150, false, true}, {NOTE_C5, 150, false, false}, {NOTE_C5, 300, true, false}, + {NOTE_CS5, 150, false, true}, {NOTE_C5, 150, false, false}, {NOTE_C5, 300, true, false}, + {NOTE_CS5, 150, false, true}, {NOTE_C5, 150, false, false}, {NOTE_C5, 300, true, false}, + {NOTE_GS5, 600, true, true}, {REST, 300, false, false}, + // Loop 2 (Intense Drums) + {NOTE_DS5, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_D5, 300, true, true}, + {NOTE_DS5, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_D5, 300, true, true}, + {NOTE_DS5, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_D5, 300, true, true}, + {NOTE_AS5, 600, true, true}, {REST, 300, false, false}, + {NOTE_D5, 150, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_CS5, 300, true, true}, + {NOTE_D5, 150, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_CS5, 300, true, true}, + {NOTE_D5, 150, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_CS5, 300, true, true}, + {NOTE_A5, 600, true, true}, {REST, 300, false, false}, + {NOTE_CS5, 150, true, true}, {NOTE_C5, 150, false, true}, {NOTE_C5, 300, true, true}, + {NOTE_CS5, 150, true, true}, {NOTE_C5, 150, false, true}, {NOTE_C5, 300, true, true}, + {NOTE_CS5, 150, true, true}, {NOTE_C5, 150, false, true}, {NOTE_C5, 300, true, true}, + {NOTE_GS5, 600, true, true}, + {REST, 1000, false, false} +}; + +// ========================================== +// 5. HARDWARE INITIALIZATION +// ========================================== +void init_hardware(void) { + gpio_set_direction(ACTIVE_BUZZER_1_PIN, GPIO_MODE_OUTPUT); gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); + gpio_set_direction(ACTIVE_BUZZER_2_PIN, GPIO_MODE_OUTPUT); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); + gpio_set_direction(LED_KICK_PIN, GPIO_MODE_OUTPUT); gpio_set_level(LED_KICK_PIN, 0); + gpio_set_direction(LED_HAT_PIN, GPIO_MODE_OUTPUT); gpio_set_level(LED_HAT_PIN, 0); + + gpio_reset_pin(BTN_PAUSE_PIN); gpio_reset_pin(BTN_NEXT_PIN); gpio_reset_pin(ROTARY_SW_PIN); + gpio_set_direction(BTN_PAUSE_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(BTN_PAUSE_PIN, GPIO_PULLUP_ONLY); + gpio_set_direction(BTN_NEXT_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(BTN_NEXT_PIN, GPIO_PULLUP_ONLY); + gpio_set_direction(ROTARY_SW_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(ROTARY_SW_PIN, GPIO_PULLUP_ONLY); + + ledc_timer_config_t timer_cfg = { .speed_mode = BUZZER_LEDC_MODE, .timer_num = BUZZER_LEDC_TIMER, .duty_resolution = LEDC_TIMER_13_BIT, .freq_hz = 440, .clk_cfg = LEDC_AUTO_CLK }; + ledc_timer_config(&timer_cfg); + ledc_channel_config_t ch_cfg = { .speed_mode = BUZZER_LEDC_MODE, .channel = BUZZER_LEDC_CHANNEL, .timer_sel = BUZZER_LEDC_TIMER, .intr_type = LEDC_INTR_DISABLE, .gpio_num = PASSIVE_BUZZER_PIN, .duty = 0, .hpoint = 0 }; + ledc_channel_config(&ch_cfg); + + pcnt_unit_config_t unit_config = { .high_limit = 1000, .low_limit = -1000 }; + pcnt_new_unit(&unit_config, &pcnt_unit); + pcnt_glitch_filter_config_t filter_config = { .max_glitch_ns = 1000 }; + pcnt_unit_set_glitch_filter(pcnt_unit, &filter_config); + pcnt_chan_config_t chan_a_config = { .edge_gpio_num = ROTARY_CLK_PIN, .level_gpio_num = ROTARY_DT_PIN }; + pcnt_channel_handle_t pcnt_chan_a = NULL; pcnt_new_channel(pcnt_unit, &chan_a_config, &pcnt_chan_a); + pcnt_chan_config_t chan_b_config = { .edge_gpio_num = ROTARY_DT_PIN, .level_gpio_num = ROTARY_CLK_PIN }; + pcnt_channel_handle_t pcnt_chan_b = NULL; pcnt_new_channel(pcnt_unit, &chan_b_config, &pcnt_chan_b); + pcnt_channel_set_edge_action(pcnt_chan_a, PCNT_CHANNEL_EDGE_ACTION_DECREASE, PCNT_CHANNEL_EDGE_ACTION_INCREASE); + pcnt_channel_set_level_action(pcnt_chan_a, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE); + pcnt_channel_set_edge_action(pcnt_chan_b, PCNT_CHANNEL_EDGE_ACTION_INCREASE, PCNT_CHANNEL_EDGE_ACTION_DECREASE); + pcnt_channel_set_level_action(pcnt_chan_b, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE); + pcnt_unit_enable(pcnt_unit); pcnt_unit_clear_count(pcnt_unit); pcnt_unit_start(pcnt_unit); + + gpio_set_direction(OLED_DC_PIN, GPIO_MODE_OUTPUT); gpio_set_direction(OLED_RES_PIN, GPIO_MODE_OUTPUT); + spi_bus_config_t buscfg = { .miso_io_num = -1, .mosi_io_num = OLED_MOSI_PIN, .sclk_io_num = OLED_CLK_PIN, .quadwp_io_num = -1, .quadhd_io_num = -1, .max_transfer_sz = 1024 }; + spi_device_interface_config_t devcfg = { .clock_speed_hz = 10 * 1000 * 1000, .mode = 0, .spics_io_num = OLED_CS_PIN, .queue_size = 7 }; + spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO); spi_bus_add_device(SPI2_HOST, &devcfg, &spi); + gpio_set_level(OLED_RES_PIN, 0); vTaskDelay(pdMS_TO_TICKS(10)); gpio_set_level(OLED_RES_PIN, 1); vTaskDelay(pdMS_TO_TICKS(50)); + const uint8_t init_cmds[] = { 0xAE, 0xD5, 0x80, 0xA8, 0x3F, 0xD3, 0x00, 0x40, 0x8D, 0x14, 0x20, 0x02, 0xA1, 0xC8, 0xDA, 0x12, 0x81, 0xCF, 0xD9, 0xF1, 0xDB, 0x40, 0xA4, 0xA6, 0xAF }; + for(int i=0; i 15) current_song_idx = 0; // 16 Total Songs + trigger_song_change = true; + is_paused = false; + } + + // Toggle Knob Mode (Volume vs Speed) + if(sw_btn == 0 && sw_last == 1) { + encoder_mode_volume = !encoder_mode_volume; + } + + pause_last = pause_btn; + next_last = next_btn; + sw_last = sw_btn; + vTaskDelay(pdMS_TO_TICKS(50)); + } +} + +// ========================================== +// 7. CORE 0: OLED GRAPHICS ENGINE +// ========================================== +void oled_visualizer_task(void *pvParameters) { + char ui_buf[16]; + + while(1) { + memset(oled_buffer, 0, 1024); + + if (current_song_idx == 0) draw_string(2, 2, "WHISP"); + else if (current_song_idx == 1) draw_string(2, 2, "TAKE "); + else if (current_song_idx == 2) draw_string(2, 2, "RICK "); + else if (current_song_idx == 3) draw_string(2, 2, "ELVIS"); + else if (current_song_idx == 4) draw_string(2, 2, "GIMME"); + else if (current_song_idx == 5) draw_string(2, 2, "ELISE"); + else if (current_song_idx == 6) draw_string(2, 2, "MOZRT"); + else if (current_song_idx == 7) draw_string(2, 2, "MARIO"); + else if (current_song_idx == 8) draw_string(2, 2, "PIRT1"); + else if (current_song_idx == 9) draw_string(2, 2, "PIRT2"); + else if (current_song_idx == 10) draw_string(2, 2, "ALLA "); + else if (current_song_idx == 11) draw_string(2, 2, "TETRS"); + else if (current_song_idx == 12) draw_string(2, 2, "SONIC"); + else if (current_song_idx == 13) draw_string(2, 2, "CAST "); + else if (current_song_idx == 14) draw_string(2, 2, "SEVEN"); + else if (current_song_idx == 15) draw_string(2, 2, "MEGA "); + + if (is_paused) draw_string(40, 2, "PAUSE"); + + // Dynamic UI for Rotary Mode + if (encoder_mode_volume) { + sprintf(ui_buf, "VOL %d%%", (int)(current_volume * 100)); + } else { + sprintf(ui_buf, "SPD %.1fx", current_speed); + } + draw_string(80, 2, ui_buf); + + draw_filled_rect(0, 11, 128, 1, 1); + + if(current_kick) draw_filled_rect(10, 25, 20, 30, 1); + else { draw_filled_rect(10, 45, 20, 10, 1); draw_rect(10, 25, 20, 30, 1); } + + if(current_hat) draw_filled_rect(98, 30, 16, 25, 1); + else { draw_filled_rect(98, 45, 16, 10, 1); draw_rect(98, 30, 16, 25, 1); } + + if(current_freq > 0 && !is_paused) { + int h = (current_freq - 200) / 12; + if (h < 5) h = 5; + if (h > 40) h = 40; + + draw_filled_rect(50, 60 - (h/2), 6, (h/2), 1); + draw_filled_rect(60, 60 - h, 8, h, 1); + draw_filled_rect(72, 60 - (h/1.5), 6, (h/1.5), 1); + } else { + draw_filled_rect(50, 58, 28, 2, 1); + } + + oled_push_framebuffer(); + vTaskDelay(pdMS_TO_TICKS(33)); // ~30 FPS + } +} + +// ========================================== +// 8. CORE 1: THE MUSIC ENGINE +// ========================================== +void buzzer_sequence_task(void *pvParameters) { + const SequenceStep* active_song = careless_song; + int num_steps = sizeof(careless_song) / sizeof(SequenceStep); + + int last_encoder_count = 0; + int encoder_count = 0; + + while(1) { + for (int i = 0; i < num_steps; i++) { + + while (is_paused) { + ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, 0); ledc_update_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL); + gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); + gpio_set_level(LED_KICK_PIN, 0); gpio_set_level(LED_HAT_PIN, 0); + current_freq = 0; current_kick = false; current_hat = false; + + vTaskDelay(pdMS_TO_TICKS(50)); + if (trigger_song_change) break; + } + + if (trigger_song_change) { + if (current_song_idx == 0) { active_song = careless_song; num_steps = sizeof(careless_song) / sizeof(SequenceStep); } + else if (current_song_idx == 1) { active_song = takeonme_song; num_steps = sizeof(takeonme_song) / sizeof(SequenceStep); } + else if (current_song_idx == 2) { active_song = rickroll_song; num_steps = sizeof(rickroll_song) / sizeof(SequenceStep); } + else if (current_song_idx == 3) { active_song = elvis_song; num_steps = sizeof(elvis_song) / sizeof(SequenceStep); } + else if (current_song_idx == 4) { active_song = abba_song; num_steps = sizeof(abba_song) / sizeof(SequenceStep); } + else if (current_song_idx == 5) { active_song = elise_song; num_steps = sizeof(elise_song) / sizeof(SequenceStep); } + else if (current_song_idx == 6) { active_song = mozart_song; num_steps = sizeof(mozart_song) / sizeof(SequenceStep); } + else if (current_song_idx == 7) { active_song = midi_mario; num_steps = sizeof(midi_mario) / sizeof(SequenceStep); } + else if (current_song_idx == 8) { active_song = midi_potc_2; num_steps = sizeof(midi_potc_2) / sizeof(SequenceStep); } + else if (current_song_idx == 9) { active_song = midi_potc_3; num_steps = sizeof(midi_potc_3) / sizeof(SequenceStep); } + else if (current_song_idx == 10){ active_song = midi_alla_turca; num_steps = sizeof(midi_alla_turca) / sizeof(SequenceStep); } + else if (current_song_idx == 11){ active_song = midi_tetris_1; num_steps = sizeof(midi_tetris_1) / sizeof(SequenceStep); } + else if (current_song_idx == 12){ active_song = midi_sonic; num_steps = sizeof(midi_sonic) / sizeof(SequenceStep); } + else if (current_song_idx == 13){ active_song = midi_cast; num_steps = sizeof(midi_cast) / sizeof(SequenceStep); } + else if (current_song_idx == 14){ active_song = midi_seven; num_steps = sizeof(midi_seven) / sizeof(SequenceStep); } + else if (current_song_idx == 15){ active_song = midi_mega; num_steps = sizeof(midi_mega) / sizeof(SequenceStep); } + trigger_song_change = false; + break; + } + + SequenceStep step = active_song[i]; + + pcnt_unit_get_count(pcnt_unit, &encoder_count); + int diff = encoder_count - last_encoder_count; + last_encoder_count = encoder_count; + + if (encoder_mode_volume) { + current_volume += diff * 0.05; + if (current_volume < 0.0) current_volume = 0.0; + if (current_volume > 1.0) current_volume = 1.0; + } else { + current_speed += diff * 0.05; + if (current_speed < 0.2) current_speed = 0.2; + if (current_speed > 3.0) current_speed = 3.0; + } + + int adj_duration = (int)(step.duration / current_speed); + int adj_drum_hit = (int)(45 / current_speed); + + current_freq = step.frequency; + uint32_t target_duty = (uint32_t)(BUZZER_LEDC_DUTY * current_volume); + + if (step.frequency > 0 && target_duty > 0) { + ledc_set_freq(BUZZER_LEDC_MODE, BUZZER_LEDC_TIMER, step.frequency); + ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, target_duty); + } else { + ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, 0); + } + ledc_update_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL); + + current_kick = step.kick_drum; + current_hat = step.hi_hat; + if (step.kick_drum) { gpio_set_level(ACTIVE_BUZZER_1_PIN, 1); gpio_set_level(LED_KICK_PIN, 1); } + if (step.hi_hat) { gpio_set_level(ACTIVE_BUZZER_2_PIN, 1); gpio_set_level(LED_HAT_PIN, 1); } + + if (adj_duration > adj_drum_hit) { + vTaskDelay(pdMS_TO_TICKS(adj_drum_hit)); + gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); + gpio_set_level(LED_KICK_PIN, 0); gpio_set_level(LED_HAT_PIN, 0); + current_kick = false; current_hat = false; + vTaskDelay(pdMS_TO_TICKS(adj_duration - adj_drum_hit)); + } else { + vTaskDelay(pdMS_TO_TICKS(adj_duration)); + gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); + gpio_set_level(LED_KICK_PIN, 0); gpio_set_level(LED_HAT_PIN, 0); + current_kick = false; current_hat = false; + } + + ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, 0); + ledc_update_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL); + current_freq = 0; + vTaskDelay(pdMS_TO_TICKS(15)); + } + } +} + +// ========================================== +// 9. MAIN APPLICATION ENTRY +// ========================================== +void app_main(void) { + printf("Desk Rave: 16-Track Symphony Edition Initializing...\n"); + init_hardware(); + + xTaskCreatePinnedToCore(oled_visualizer_task, "oled_task", 4096, NULL, 4, NULL, 0); + xTaskCreatePinnedToCore(button_task, "btn_task", 4096, NULL, 5, NULL, 0); + xTaskCreatePinnedToCore(buzzer_sequence_task, "music_task", 4096, NULL, 5, NULL, 1); +} diff --git a/assets/downloads/mfc-1.kicad_sch b/assets/downloads/mfc-1.kicad_sch new file mode 100644 index 0000000..b126e69 --- /dev/null +++ b/assets/downloads/mfc-1.kicad_sch @@ -0,0 +1,2441 @@ +(kicad_sch + (version 20260306) + (generator "eeschema") + (generator_version "10.0") + (uuid "859e05b1-62ca-4191-b0be-c155eab457bb") + (paper "A4") + (lib_symbols + (symbol "Device:C_Polarized" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (duplicate_pin_numbers_are_jumpers no) + (property "Reference" "C" + (at 0.635 2.54 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "C_Polarized" + (at 0.635 -2.54 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 0.9652 -3.81 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Polarized capacitor" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "cap capacitor" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_fp_filters" "CP_*" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (symbol "C_Polarized_0_1" + (rectangle + (start -2.286 0.508) + (end 2.286 1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.778 2.286) (xy -0.762 2.286) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 2.794) (xy -1.27 1.778) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start 2.286 -0.508) + (end -2.286 -1.016) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + ) + (symbol "C_Polarized_1_1" + (pin passive line + (at 0 3.81 270) + (length 2.794) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 2.794) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "MCU_Espressif:ESP32-S3" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (duplicate_pin_numbers_are_jumpers no) + (property "Reference" "U" + (at 10.16 -38.1 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ESP32-S3" + (at 13.97 -40.64 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP4x4mm" + (at 0 -48.26 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Microcontroller, Wi-Fi 802.11b/g/n, Bluetooth, 32bit" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "Microcontroller Wi-Fi BT ESP ESP32 Espressif" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_fp_filters" "QFN*1EP*7x7mm*P0.4mm*" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (symbol "ESP32-S3_0_1" + (rectangle + (start -20.32 35.56) + (end 20.32 -35.56) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "ESP32-S3_1_0" + (pin bidirectional line + (at 22.86 12.7 180) + (length 2.54) + (name "SPICLK_N" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "36" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -10.16 180) + (length 2.54) + (name "MTDO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "45" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -22.86 180) + (length 2.54) + (name "GPIO45" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "51" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 38.1 270) + (length 2.54) + (hide yes) + (name "VDDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "56" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "ESP32-S3_1_1" + (pin bidirectional line + (at 22.86 -30.48 180) + (length 2.54) + (name "LNA_IN" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -2.54 38.1 270) + (length 2.54) + (name "VDD3P3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -2.54 38.1 270) + (length 2.54) + (hide yes) + (name "VDD3P3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 22.86 -27.94 180) + (length 2.54) + (name "CHIP_PU" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 30.48 0) + (length 2.54) + (name "GPIO0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 27.94 0) + (length 2.54) + (name "GPIO1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 25.4 0) + (length 2.54) + (name "GPIO2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 22.86 0) + (length 2.54) + (name "GPIO3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 20.32 0) + (length 2.54) + (name "GPIO4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 17.78 0) + (length 2.54) + (name "GPIO5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 15.24 0) + (length 2.54) + (name "GPIO6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 12.7 0) + (length 2.54) + (name "GPIO7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 10.16 0) + (length 2.54) + (name "GPIO8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 7.62 0) + (length 2.54) + (name "GPIO9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 5.08 0) + (length 2.54) + (name "GPIO10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 2.54 0) + (length 2.54) + (name "GPIO11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 0 0) + (length 2.54) + (name "GPIO12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 -2.54 0) + (length 2.54) + (name "GPIO13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 -5.08 0) + (length 2.54) + (name "GPIO14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 38.1 270) + (length 2.54) + (name "VDD3P3_RTC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -22.86 -22.86 0) + (length 2.54) + (name "XTAL_32K_P" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -22.86 -25.4 0) + (length 2.54) + (name "XTAL_32K_N" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 -7.62 0) + (length 2.54) + (name "GPIO17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 -10.16 0) + (length 2.54) + (name "GPIO18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 -12.7 0) + (length 2.54) + (name "GPIO19/USB_D-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 -15.24 0) + (length 2.54) + (name "GPIO20/USB_D+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at -22.86 -17.78 0) + (length 2.54) + (name "GPIO21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 30.48 180) + (length 2.54) + (name "SPICS1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 2.54 38.1 270) + (length 2.54) + (name "VDD_SPI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "29" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 27.94 180) + (length 2.54) + (name "SPIHD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "30" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 25.4 180) + (length 2.54) + (name "SPIWP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "31" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 22.86 180) + (length 2.54) + (name "SPICS0" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "32" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 20.32 180) + (length 2.54) + (name "SPICLK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "33" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 17.78 180) + (length 2.54) + (name "SPIQ" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "34" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 15.24 180) + (length 2.54) + (name "SPID" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "35" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 10.16 180) + (length 2.54) + (name "SPICLK_P" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "37" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 7.62 180) + (length 2.54) + (name "GPIO33" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "38" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 5.08 180) + (length 2.54) + (name "GPIO34" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "39" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 2.54 180) + (length 2.54) + (name "GPIO35" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "40" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 0 180) + (length 2.54) + (name "GPIO36" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "41" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -2.54 180) + (length 2.54) + (name "GPIO37" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "42" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -5.08 180) + (length 2.54) + (name "GPIO38" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "43" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -7.62 180) + (length 2.54) + (name "MTCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "44" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 5.08 38.1 270) + (length 2.54) + (name "VDD3P3_CPU" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "46" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -12.7 180) + (length 2.54) + (name "MTDI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "47" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -15.24 180) + (length 2.54) + (name "MTMS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "48" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -17.78 180) + (length 2.54) + (name "U0TXD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "49" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -20.32 180) + (length 2.54) + (name "U0RXD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "50" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 22.86 -25.4 180) + (length 2.54) + (name "GPIO46" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "52" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -22.86 -30.48 0) + (length 2.54) + (name "XTAL_N" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "53" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -22.86 -27.94 0) + (length 2.54) + (name "XTAL_P" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "54" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 38.1 270) + (length 2.54) + (name "VDDA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "55" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 -38.1 90) + (length 2.54) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "57" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + (symbol "RF:NRF24L01_Breakout" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (duplicate_pin_numbers_are_jumpers no) + (property "Reference" "U" + (at -8.89 12.7 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "NRF24L01_Breakout" + (at 3.81 12.7 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "RF_Module:nRF24L01_Breakout" + (at 3.81 15.24 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + ) + ) + (property "Datasheet" "http://www.nordicsemi.com/eng/content/download/2730/34105/file/nRF24L01_Product_Specification_v2_0.pdf" + (at 0 -2.54 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Ultra low power 2.4GHz RF Transceiver, Carrier PCB" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "Low Power RF Transceiver breakout carrier" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_fp_filters" "nRF24L01*Breakout*" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (symbol "NRF24L01_Breakout_0_1" + (rectangle + (start -8.89 11.43) + (end 8.89 -11.43) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (arc + (start 3.175 5.08) + (mid 6.453 4.548) + (end 6.985 1.27) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (circle + (center 4.445 2.54) + (radius 0.635) + (stroke + (width 0.254) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 4.445 1.905) (xy 4.445 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 3.81 4.445) + (mid 5.8835 3.9785) + (end 6.35 1.905) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (arc + (start 4.445 3.81) + (mid 5.3558 3.4508) + (end 5.715 2.54) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "NRF24L01_Breakout_1_1" + (pin power_in line + (at 0 -15.24 90) + (length 3.81) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 0 15.24 270) + (length 3.81) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 -5.08 0) + (length 3.81) + (name "CE" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 0 0) + (length 3.81) + (name "~{CSN}" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input clock + (at -12.7 2.54 0) + (length 3.81) + (name "SCK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 7.62 0) + (length 3.81) + (name "MOSI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -12.7 5.08 0) + (length 3.81) + (name "MISO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -12.7 -7.62 0) + (length 3.81) + (name "IRQ" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (junction + (at 160.02 50.8) + (diameter 0) + (color 0 0 0 0) + (uuid "a1e90efb-aa3d-495a-a2d8-a137e20f5d7e") + ) + (junction + (at 190.5 101.6) + (diameter 0) + (color 0 0 0 0) + (uuid "d5a60490-a71b-4fe3-bef4-fbcca9b3e41f") + ) + (junction + (at 129.54 50.8) + (diameter 0) + (color 0 0 0 0) + (uuid "e477902a-64ae-4589-af4b-690312a2edf4") + ) + (wire + (pts + (xy 149.86 71.12) (xy 196.85 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "01abb415-025d-45a0-bf43-8be7ce0584d1") + ) + (wire + (pts + (xy 218.44 144.78) (xy 218.44 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "09f4516b-b950-4f76-99dd-76e975f7bafc") + ) + (wire + (pts + (xy 190.5 50.8) (xy 190.5 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1173aac9-fed4-4549-98d0-300c5dfa7bbf") + ) + (wire + (pts + (xy 144.78 139.7) (xy 226.06 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "140a4a36-22ec-4af4-8ff7-2d5287a24565") + ) + (wire + (pts + (xy 144.78 127) (xy 144.78 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "15dcfbb6-f334-4381-9c5f-a635a6ac23f6") + ) + (wire + (pts + (xy 147.32 127) (xy 147.32 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1a67d62c-22af-4ce4-8243-50a3f58cbac7") + ) + (wire + (pts + (xy 226.06 76.2) (xy 226.06 139.7) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1c6439e1-f9d6-4e7c-aa9e-a30507972ce0") + ) + (wire + (pts + (xy 214.63 77.47) (xy 214.63 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "1e0fa23c-7920-4b3a-8acd-0fc88659ce9c") + ) + (wire + (pts + (xy 140.97 29.21) (xy 129.54 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "33973519-7226-4527-aca3-92947b9f1d91") + ) + (wire + (pts + (xy 137.16 63.5) (xy 137.16 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3412159b-de30-475a-a478-c2edf4e6f361") + ) + (wire + (pts + (xy 144.78 77.47) (xy 214.63 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3424006f-ca9e-42b7-a256-6eb383409a93") + ) + (wire + (pts + (xy 190.5 101.6) (xy 182.88 101.6) + ) + (stroke + (width 0) + (type default) + ) + (uuid "392516b8-01db-4a81-aa6b-1e780440f613") + ) + (wire + (pts + (xy 162.56 132.08) (xy 196.85 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "3967ea1c-87d7-410e-a645-fdf0e860ca7a") + ) + (wire + (pts + (xy 190.5 101.6) (xy 190.5 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4125a129-9436-4b8b-9171-46082792d588") + ) + (wire + (pts + (xy 129.54 29.21) (xy 129.54 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "449d76f8-8f4b-40fa-a96b-aa7c24788f0b") + ) + (wire + (pts + (xy 95.25 106.68) (xy 106.68 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "4d188872-75fb-4f8e-84c0-8fec055007ec") + ) + (wire + (pts + (xy 95.25 50.8) (xy 95.25 106.68) + ) + (stroke + (width 0) + (type default) + ) + (uuid "513a9ce4-2629-49ba-8121-5c50dcba69ba") + ) + (wire + (pts + (xy 142.24 76.2) (xy 226.06 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "544b86b2-082f-43e6-85e6-f5f3c0ab7a72") + ) + (wire + (pts + (xy 220.98 135.89) (xy 147.32 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "597e9eb6-5292-44c5-918f-8842cc54f439") + ) + (wire + (pts + (xy 160.02 50.8) (xy 190.5 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "6b3c9d69-b3ba-46ea-8224-73677c3c4726") + ) + (wire + (pts + (xy 162.56 127) (xy 162.56 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "79594ace-6424-4945-940e-6bf426c95a1c") + ) + (wire + (pts + (xy 139.7 64.77) (xy 220.98 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "82b8c747-235c-4cd6-afc3-98ba3db3561a") + ) + (wire + (pts + (xy 149.86 63.5) (xy 149.86 71.12) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8da55ffe-23c1-4a3a-8fc8-c21cfc732bc2") + ) + (wire + (pts + (xy 142.24 127) (xy 142.24 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "931dfce8-65dd-4c07-94e4-980b46698d35") + ) + (wire + (pts + (xy 142.24 63.5) (xy 142.24 76.2) + ) + (stroke + (width 0) + (type default) + ) + (uuid "9a4f597f-8733-4940-b763-c6e560d4ea58") + ) + (wire + (pts + (xy 148.59 29.21) (xy 160.02 29.21) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a04e8f04-372b-4573-bc9d-e9398125358e") + ) + (wire + (pts + (xy 160.02 29.21) (xy 160.02 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "a1caeeeb-fbcc-4883-a297-91b60c6ac32a") + ) + (wire + (pts + (xy 182.88 104.14) (xy 190.5 104.14) + ) + (stroke + (width 0) + (type default) + ) + (uuid "beec8c10-d1de-43bd-9c32-2543b7b67e23") + ) + (wire + (pts + (xy 220.98 64.77) (xy 220.98 135.89) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c37ed5f2-8340-40f3-92a7-0c3cdfea6645") + ) + (wire + (pts + (xy 149.86 127) (xy 149.86 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cbb77b92-1b36-4d87-88c7-c688a46db3d3") + ) + (wire + (pts + (xy 196.85 71.12) (xy 196.85 132.08) + ) + (stroke + (width 0) + (type default) + ) + (uuid "d11f4ac9-b8a0-407c-823a-2c0713a447e6") + ) + (wire + (pts + (xy 218.44 68.58) (xy 137.16 68.58) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e85d5b1e-6a0b-4575-9ad4-dd7eebc4ce8a") + ) + (wire + (pts + (xy 129.54 50.8) (xy 95.25 50.8) + ) + (stroke + (width 0) + (type default) + ) + (uuid "eb976496-d658-4d4c-9c09-c7c6d9bfeb11") + ) + (wire + (pts + (xy 144.78 63.5) (xy 144.78 77.47) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f51c3cbc-fc31-4ec8-bf12-e5899cb6108b") + ) + (wire + (pts + (xy 139.7 63.5) (xy 139.7 64.77) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f60ae3b0-8d49-4339-94be-5a8659dbf9bf") + ) + (wire + (pts + (xy 149.86 133.35) (xy 214.63 133.35) + ) + (stroke + (width 0) + (type default) + ) + (uuid "f8ddaa5b-9de3-48c6-b302-f1f5275abd64") + ) + (wire + (pts + (xy 142.24 144.78) (xy 218.44 144.78) + ) + (stroke + (width 0) + (type default) + ) + (uuid "fda17b4b-f958-4cd2-aadb-2b9032f04a5a") + ) + (symbol + (lib_id "MCU_Espressif:ESP32-S3") + (at 144.78 104.14 90) + (unit 1) + (body_style 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (dnp no) + (fields_autoplaced yes) + (uuid "421343ee-4b89-48d7-8818-bf33051e8c34") + (property "Reference" "U1" + (at 186.69 98.6946 90) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "ESP32-S3" + (at 186.69 101.2346 90) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP4x4mm" + (at 193.04 104.14 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf" + (at 144.78 104.14 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Microcontroller, Wi-Fi 802.11b/g/n, Bluetooth, 32bit" + (at 144.78 104.14 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "57" + (uuid "4c8b94c9-5300-4e52-b446-163661a8ce0d") + ) + (pin "24" + (uuid "ffc28668-43bd-45bd-8bd5-22d3c58dbe80") + ) + (pin "55" + (uuid "dee39f40-8292-4bca-b627-acf32a2d55fb") + ) + (pin "25" + (uuid "f106ae5c-1d24-4946-b5d0-edb8b2e867fe") + ) + (pin "22" + (uuid "b6227470-7b76-43ae-9f16-d940f2308dcc") + ) + (pin "54" + (uuid "5e7dbae3-3458-48ce-89f0-e4a802ba8955") + ) + (pin "49" + (uuid "1d3e4fcd-f0ce-49a2-9313-528a91305970") + ) + (pin "26" + (uuid "6fe8b389-8366-4e61-99ad-3fc5ed1a7c6b") + ) + (pin "23" + (uuid "a7c0f214-362d-4c6c-b40e-be2f595b9ca7") + ) + (pin "21" + (uuid "9c6ec907-b0b8-4632-ad3a-2f42bd77cdba") + ) + (pin "20" + (uuid "3dc9cab9-53e7-479d-82ec-6fd33c5666f3") + ) + (pin "19" + (uuid "d8689e4f-e628-4b31-aa80-6d0da4af863a") + ) + (pin "17" + (uuid "50e1ae2e-59c4-4b79-ba02-338d4f2f1f96") + ) + (pin "18" + (uuid "7cd5a2e8-3fd5-4cc8-808c-9040e3bc3a6a") + ) + (pin "27" + (uuid "95e3a422-04c5-43e0-b751-0c2df37aa0e3") + ) + (pin "16" + (uuid "fd28c52e-e558-4a7c-bca7-2b00691a86a4") + ) + (pin "30" + (uuid "c77ea116-428e-4fcc-b141-67dc8b30267a") + ) + (pin "15" + (uuid "2cb4a25f-ddb2-401c-b418-1731e8ef1a09") + ) + (pin "14" + (uuid "d9745d4d-c856-47f3-86bb-23793a054727") + ) + (pin "48" + (uuid "a1eb5a40-0461-4495-890c-b65d9bafe9b0") + ) + (pin "47" + (uuid "48f0a478-2f23-4257-b9ce-f15b6f6370d7") + ) + (pin "46" + (uuid "462a637e-60fb-4854-b9aa-a1a4abea13fb") + ) + (pin "44" + (uuid "aec90152-be54-4c52-944e-5a67d6138116") + ) + (pin "43" + (uuid "e4f69ef0-3c42-4be7-bdb4-c5af1c1818c6") + ) + (pin "42" + (uuid "d5e40041-39ae-4ec6-b30c-21aa252dab79") + ) + (pin "40" + (uuid "5ab9e5e7-0fb5-4812-8efc-d380fe36798d") + ) + (pin "41" + (uuid "57fe86f5-db59-495b-9396-b732599d7787") + ) + (pin "39" + (uuid "60e5e85e-62d7-4150-a5d7-c1be58474abd") + ) + (pin "38" + (uuid "bc14d4b6-a704-49f4-9429-1ea425d31333") + ) + (pin "52" + (uuid "0d6662e5-eca1-49f9-a50d-de07a3ab5d7f") + ) + (pin "33" + (uuid "67637e0f-891e-438e-a8f3-8fc5dd5a46fb") + ) + (pin "13" + (uuid "a5c70482-2f4f-40e2-b746-89da26edcf18") + ) + (pin "29" + (uuid "40fe30ad-1e0b-4355-9a3c-6d636cdd07e1") + ) + (pin "53" + (uuid "32cdcc8e-70bd-46d8-baed-370db9639cfd") + ) + (pin "28" + (uuid "5732d5ed-dd85-410b-b8b7-9e7c122ee965") + ) + (pin "37" + (uuid "f3cae81f-e586-4eca-a230-86102b69177f") + ) + (pin "35" + (uuid "4f6697e2-175a-43cd-b452-a66680f2d81a") + ) + (pin "34" + (uuid "0325385d-fdc5-4cba-86ff-a1948e4dd6a0") + ) + (pin "50" + (uuid "df8f244b-4bbd-4d51-8348-9756bed95550") + ) + (pin "56" + (uuid "f5c8016d-e871-41dc-b2e1-fd0c9b8f8040") + ) + (pin "8" + (uuid "85fb1360-2b2a-455c-ad59-562815acee46") + ) + (pin "3" + (uuid "4679b37a-12ae-472c-93db-36d8c8f3a6af") + ) + (pin "12" + (uuid "f6ea147c-6cef-4c37-8436-c4a96d3ae0b4") + ) + (pin "10" + (uuid "3cc9d3a1-ec14-48a7-a489-a80772f4ca5b") + ) + (pin "51" + (uuid "bc72d644-0c58-4a5a-97d7-83a58af0ff30") + ) + (pin "7" + (uuid "4e3306ea-4714-4452-9d26-70fdf29a8888") + ) + (pin "2" + (uuid "a7006425-cf96-486b-ba49-7775e46a9a23") + ) + (pin "32" + (uuid "8e85f32c-f7df-4436-9b10-f113b13d6214") + ) + (pin "45" + (uuid "5b363082-ef07-472e-935c-7008c07f4361") + ) + (pin "36" + (uuid "53c1f680-2a62-4e00-9733-632c3a6e94a9") + ) + (pin "6" + (uuid "e201029a-4c6b-450b-a054-3fec7d1cac70") + ) + (pin "31" + (uuid "8d615ffa-6a22-4047-b148-68ea6d93cafc") + ) + (pin "1" + (uuid "e8bb9f9f-baff-43e2-990c-5a190661cfac") + ) + (pin "11" + (uuid "7af441ff-e8ff-4561-9a88-68652d822707") + ) + (pin "9" + (uuid "e4b56a56-331a-4fb5-9001-ba113dc7af51") + ) + (pin "4" + (uuid "bd13168a-9457-47fd-84b3-f7f540007d76") + ) + (pin "5" + (uuid "6f736c0e-2607-4ed8-9f89-aa5cfdafbd6b") + ) + (instances + (project "mfc-1" + (path "/859e05b1-62ca-4191-b0be-c155eab457bb" + (reference "U1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:C_Polarized") + (at 144.78 29.21 90) + (unit 1) + (body_style 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (dnp no) + (fields_autoplaced yes) + (uuid "5c30b8ba-1e2c-4566-8af2-4dedf700bd68") + (property "Reference" "C1" + (at 143.891 21.59 90) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "100 microfarad" + (at 143.891 24.13 90) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" + (at 148.59 28.2448 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 144.78 29.21 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Polarized capacitor" + (at 144.78 29.21 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "2" + (uuid "9b998cd6-e570-42d7-aa20-254f6340a49f") + ) + (pin "1" + (uuid "bd1cc6e2-dc6e-407d-9ad8-0538b77d786a") + ) + (instances + (project "mfc-1" + (path "/859e05b1-62ca-4191-b0be-c155eab457bb" + (reference "C1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "RF:NRF24L01_Breakout") + (at 144.78 50.8 90) + (unit 1) + (body_style 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (dnp no) + (fields_autoplaced yes) + (uuid "7f4e1b34-0388-40f4-80a0-0343a4c66fd2") + (property "Reference" "U2" + (at 144.78 36.83 90) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "NRF24L01_Breakout" + (at 144.78 39.37 90) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "RF_Module:nRF24L01_Breakout" + (at 129.54 46.99 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + ) + ) + (property "Datasheet" "http://www.nordicsemi.com/eng/content/download/2730/34105/file/nRF24L01_Product_Specification_v2_0.pdf" + (at 147.32 50.8 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Ultra low power 2.4GHz RF Transceiver, Carrier PCB" + (at 144.78 50.8 0) + (hide yes) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (pin "1" + (uuid "5078ef4d-fccd-4b3e-905a-c243d4f2e911") + ) + (pin "2" + (uuid "97d40f6a-137c-4b5f-b3a9-39e1c5a8fb96") + ) + (pin "3" + (uuid "e28ea01f-d588-40d0-9ec6-54767e515a2d") + ) + (pin "4" + (uuid "a9658be7-2e9c-4565-9702-962acee35390") + ) + (pin "5" + (uuid "58968103-c34e-4f32-8e80-36fa53965eba") + ) + (pin "6" + (uuid "98e9f00d-9f76-4104-94e0-5dcac5d45d3f") + ) + (pin "7" + (uuid "38a69e0c-787d-497a-937f-baf4c4ebd49f") + ) + (pin "8" + (uuid "29dbe369-5a19-4117-8748-4b4e2074bfda") + ) + (instances + (project "mfc-1" + (path "/859e05b1-62ca-4191-b0be-c155eab457bb" + (reference "U2") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) + (embedded_fonts no) +) diff --git a/assets/downloads/mfc_esp32s3_firmware.c b/assets/downloads/mfc_esp32s3_firmware.c new file mode 100644 index 0000000..7c717d9 --- /dev/null +++ b/assets/downloads/mfc_esp32s3_firmware.c @@ -0,0 +1,367 @@ +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/spi_master.h" +#include "driver/gpio.h" +#include "driver/pulse_cnt.h" +#include "esp_system.h" +#include "esp_log.h" + +// ========================================== +// VERIFIED HARDWARE PIN MAPPINGS +// ========================================== +#define PIN_NUM_MOSI 11 +#define PIN_NUM_MISO 13 +#define PIN_NUM_CLK 12 + +#define NRF_PIN_CS 14 +#define NRF_PIN_CE 21 + +#define OLED_PIN_CS 10 +#define OLED_PIN_DC 9 +#define OLED_PIN_RES 8 + +#define PIN_ENCODER_CLK 15 +#define PIN_ENCODER_DT 16 +#define PIN_ENCODER_SW 17 + +#define NUM_MENU_ITEMS 4 + +static const char *TAG = "MFC_CORE"; +spi_device_handle_t oled_spi; +spi_device_handle_t nrf_spi; + +// Global Radio State +int current_radio_channel = 76; + +typedef enum { + SCREEN_MAIN_MENU = 0, + SCREEN_DRIVE, + SCREEN_RADIO_CONFIG, + SCREEN_CALIBRATE, + SCREEN_SYSTEM_INFO +} screen_state_t; + +// ========================================== +// 5x8 BARE-METAL FONT LIBRARY +// ========================================== +const uint8_t font_AZ[26][5] = { + {0x7E, 0x11, 0x11, 0x11, 0x7E}, {0x7F, 0x49, 0x49, 0x49, 0x36}, {0x3E, 0x41, 0x41, 0x41, 0x22}, + {0x7F, 0x41, 0x41, 0x22, 0x1C}, {0x7F, 0x49, 0x49, 0x49, 0x41}, {0x7F, 0x09, 0x09, 0x09, 0x01}, + {0x3E, 0x41, 0x49, 0x49, 0x7A}, {0x7F, 0x08, 0x08, 0x08, 0x7F}, {0x00, 0x41, 0x7F, 0x41, 0x00}, + {0x20, 0x40, 0x41, 0x3F, 0x01}, {0x7F, 0x08, 0x14, 0x22, 0x41}, {0x7F, 0x40, 0x40, 0x40, 0x40}, + {0x7F, 0x02, 0x0C, 0x02, 0x7F}, {0x7F, 0x04, 0x08, 0x10, 0x7F}, {0x3E, 0x41, 0x41, 0x41, 0x3E}, + {0x7F, 0x09, 0x09, 0x09, 0x06}, {0x3E, 0x41, 0x51, 0x21, 0x5E}, {0x7F, 0x09, 0x19, 0x29, 0x46}, + {0x46, 0x49, 0x49, 0x49, 0x31}, {0x01, 0x01, 0x7F, 0x01, 0x01}, {0x3F, 0x40, 0x40, 0x40, 0x3F}, + {0x1F, 0x20, 0x40, 0x20, 0x1F}, {0x3F, 0x40, 0x38, 0x40, 0x3F}, {0x63, 0x14, 0x08, 0x14, 0x63}, + {0x03, 0x04, 0x78, 0x04, 0x03}, {0x61, 0x51, 0x49, 0x45, 0x43} +}; + +const uint8_t font_nums[10][5] = { + {0x3E, 0x51, 0x49, 0x45, 0x3E}, {0x00, 0x42, 0x7F, 0x40, 0x00}, {0x42, 0x61, 0x51, 0x49, 0x46}, + {0x21, 0x41, 0x45, 0x4B, 0x31}, {0x18, 0x14, 0x12, 0x7F, 0x10}, {0x27, 0x45, 0x45, 0x45, 0x39}, + {0x3C, 0x4A, 0x49, 0x49, 0x30}, {0x01, 0x71, 0x09, 0x05, 0x03}, {0x36, 0x49, 0x49, 0x49, 0x36}, + {0x06, 0x49, 0x49, 0x29, 0x1E} +}; + +const uint8_t* get_font_data(char c) { + static const uint8_t f_spc[5] = {0,0,0,0,0}; + static const uint8_t f_ptr[5] = {0x08, 0x04, 0x7E, 0x04, 0x08}; // '>' + static const uint8_t f_lt[5] = {0x08, 0x14, 0x22, 0x41, 0x00}; // '<' + static const uint8_t f_lbr[5] = {0x00, 0x7F, 0x41, 0x41, 0x00}; // '[' + static const uint8_t f_rbr[5] = {0x00, 0x41, 0x41, 0x7F, 0x00}; // ']' + static const uint8_t f_lpar[5] = {0x00, 0x1C, 0x22, 0x41, 0x00}; // '(' + static const uint8_t f_rpar[5] = {0x00, 0x41, 0x22, 0x1C, 0x00}; // ')' + static const uint8_t f_slash[5] = {0x20, 0x10, 0x08, 0x04, 0x02}; // '/' + static const uint8_t f_dash[5] = {0x08, 0x08, 0x08, 0x08, 0x08}; // '-' + static const uint8_t f_col[5] = {0x00, 0x36, 0x36, 0x00, 0x00}; // ':' + static const uint8_t f_dot[5] = {0x00, 0x60, 0x60, 0x00, 0x00}; // '.' + + if (c >= 'A' && c <= 'Z') { return font_AZ[c - 'A']; } + if (c >= '0' && c <= '9') { return font_nums[c - '0']; } + if (c == '>') { return f_ptr; } + if (c == '<') { return f_lt; } + if (c == '[') { return f_lbr; } + if (c == ']') { return f_rbr; } + if (c == '(') { return f_lpar; } + if (c == ')') { return f_rpar; } + if (c == '/') { return f_slash; } + if (c == '-') { return f_dash; } + if (c == ':') { return f_col; } + if (c == '.') { return f_dot; } + return f_spc; +} + +// ========================================== +// OLED & NRF SPI DRIVERS +// ========================================== +void oled_cmd(uint8_t cmd) { + gpio_set_level(OLED_PIN_DC, 0); + spi_transaction_t t = { .length = 8, .tx_buffer = &cmd }; + spi_device_polling_transmit(oled_spi, &t); +} + +void oled_data(uint8_t data) { + gpio_set_level(OLED_PIN_DC, 1); + spi_transaction_t t = { .length = 8, .tx_buffer = &data }; + spi_device_polling_transmit(oled_spi, &t); +} + +void oled_draw_string(uint8_t page, uint8_t col, const char* str) { + oled_cmd(0xB0 + page); + uint8_t phys_col = col + 2; // SH1106 center offset + oled_cmd(0x00 | (phys_col & 0x0F)); + oled_cmd(0x10 | ((phys_col >> 4) & 0x0F)); + while (*str) { + const uint8_t* pixels = get_font_data(*str++); + for (int i = 0; i < 5; i++) { oled_data(pixels[i]); } + oled_data(0x00); + } +} + +void oled_clear() { + for (uint8_t p = 0; p < 8; p++) { + oled_cmd(0xB0 + p); oled_cmd(0x02); oled_cmd(0x10); + for (uint8_t c = 0; c < 128; c++) { oled_data(0x00); } + } +} + +void oled_init() { + gpio_set_level(OLED_PIN_RES, 0); vTaskDelay(pdMS_TO_TICKS(50)); + gpio_set_level(OLED_PIN_RES, 1); vTaskDelay(pdMS_TO_TICKS(50)); + uint8_t init_cmds[] = {0xAE,0xD5,0x80,0xA8,0x3F,0xD3,0x00,0x40,0x8D,0x14,0xA1,0xC8,0xDA,0x12,0x81,0xCF,0xD9,0xF1,0xDB,0x40,0xA4,0xA6,0xAF}; + for(int i = 0; i < sizeof(init_cmds); i++) { oled_cmd(init_cmds[i]); } +} + +bool nrf_check_connection() { + uint8_t tx[2] = { 0x03, 0xFF }; + uint8_t rx[2] = { 0 }; + spi_transaction_t t = { .length = 16, .tx_buffer = tx, .rx_buffer = rx }; + spi_device_polling_transmit(nrf_spi, &t); + return (rx[1] == 0x03); +} + +void set_nrf_channel(uint8_t channel) { + uint8_t tx[2] = { 0x25, channel }; // Write to RF_CH register (0x05) + spi_transaction_t t = { .length = 16, .tx_buffer = tx }; + spi_device_polling_transmit(nrf_spi, &t); +} + +// ========================================== +// UI SCREEN RENDERING +// ========================================== +void draw_menu(int selected_index) { + char* items[] = {"DRIVE VEHICLE", "RADIO CONFIG", "CALIBRATE", "SYSTEM INFO"}; + char buffer[32]; + + oled_draw_string(0, 20, "- MAIN MENU -"); + + for (int i = 0; i < NUM_MENU_ITEMS; i++) { + if (i == selected_index) { + sprintf(buffer, "> %-14s", items[i]); + } else { + sprintf(buffer, " %-14s", items[i]); + } + oled_draw_string(2 + (i * 2), 5, buffer); + } +} + +void draw_system_info() { + char buffer[32]; + oled_draw_string(0, 15, "- SYSTEM INFO -"); + + sprintf(buffer, "CHIP: ESP32-S3"); + oled_draw_string(2, 5, buffer); + + sprintf(buffer, "HEAP: %lu KB", (unsigned long)(esp_get_free_heap_size() / 1024)); + oled_draw_string(4, 5, buffer); + + oled_draw_string(6, 10, "[CLICK TO BACK]"); +} + +void draw_radio_config_screen(int channel) { + char buffer[32]; + oled_draw_string(0, 5, "- RADIO CONFIG -"); + + if (nrf_check_connection()) { + sprintf(buffer, "CH: <%03d> (2.4G)", channel); + oled_draw_string(2, 2, buffer); + oled_draw_string(4, 2, "TURN DIAL TO TUNE"); + } else { + oled_draw_string(2, 2, "STATUS: FAILED "); + oled_draw_string(4, 2, "CHECK WIRING "); + } + + oled_draw_string(6, 5, "[CLICK TO SAVE]"); +} + +void draw_placeholder_screen(const char* title) { + oled_draw_string(0, 15, title); + oled_draw_string(3, 20, "NOT CONNECTED"); + oled_draw_string(6, 10, "[CLICK TO BACK]"); +} + +// ========================================== +// MAIN APPLICATION ENTRY +// ========================================== +void app_main(void) { + // 1. Initialize Shared SPI Bus + spi_bus_config_t buscfg = { + .miso_io_num = PIN_NUM_MISO, + .mosi_io_num = PIN_NUM_MOSI, + .sclk_io_num = PIN_NUM_CLK, + .quadwp_io_num = -1, + .quadhd_io_num = -1, + .max_transfer_sz = 4096 + }; + spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO); + + // 2. Add OLED Device + spi_device_interface_config_t oled_cfg = { + .clock_speed_hz = 10 * 1000 * 1000, + .mode = 0, + .spics_io_num = OLED_PIN_CS, + .queue_size = 1 + }; + spi_bus_add_device(SPI2_HOST, &oled_cfg, &oled_spi); + gpio_reset_pin(OLED_PIN_DC); gpio_set_direction(OLED_PIN_DC, GPIO_MODE_OUTPUT); + gpio_reset_pin(OLED_PIN_RES); gpio_set_direction(OLED_PIN_RES, GPIO_MODE_OUTPUT); + + oled_init(); + oled_clear(); + + // 3. Add NRF24 Device + spi_device_interface_config_t nrf_cfg = { + .clock_speed_hz = 1 * 1000 * 1000, + .mode = 0, + .spics_io_num = NRF_PIN_CS, + .queue_size = 1 + }; + spi_bus_add_device(SPI2_HOST, &nrf_cfg, &nrf_spi); + + // 4. Init Rotary Encoder Switch + gpio_config_t sw_cfg = { + .pin_bit_mask = (1ULL << PIN_ENCODER_SW), + .mode = GPIO_MODE_INPUT, + .pull_up_en = GPIO_PULLUP_ENABLE, + .pull_down_en = GPIO_PULLDOWN_DISABLE, + .intr_type = GPIO_INTR_DISABLE + }; + gpio_config(&sw_cfg); + + // 5. Init PCNT Hardware Decoder for Quadrature Encoder + pcnt_unit_handle_t pcnt_unit = NULL; + pcnt_unit_config_t unit_config = { .high_limit = 10000, .low_limit = -10000 }; + pcnt_new_unit(&unit_config, &pcnt_unit); + + pcnt_glitch_filter_config_t filter_config = { .max_glitch_ns = 1000 }; + pcnt_unit_set_glitch_filter(pcnt_unit, &filter_config); + + pcnt_channel_handle_t pcnt_chan_a = NULL, pcnt_chan_b = NULL; + pcnt_chan_config_t chan_a_config = { .edge_gpio_num = PIN_ENCODER_CLK, .level_gpio_num = PIN_ENCODER_DT }; + pcnt_new_channel(pcnt_unit, &chan_a_config, &pcnt_chan_a); + pcnt_chan_config_t chan_b_config = { .edge_gpio_num = PIN_ENCODER_DT, .level_gpio_num = PIN_ENCODER_CLK }; + pcnt_new_channel(pcnt_unit, &chan_b_config, &pcnt_chan_b); + + pcnt_channel_set_edge_action(pcnt_chan_a, PCNT_CHANNEL_EDGE_ACTION_DECREASE, PCNT_CHANNEL_EDGE_ACTION_INCREASE); + pcnt_channel_set_level_action(pcnt_chan_a, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE); + pcnt_channel_set_edge_action(pcnt_chan_b, PCNT_CHANNEL_EDGE_ACTION_INCREASE, PCNT_CHANNEL_EDGE_ACTION_DECREASE); + pcnt_channel_set_level_action(pcnt_chan_b, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE); + + pcnt_unit_enable(pcnt_unit); + pcnt_unit_clear_count(pcnt_unit); + pcnt_unit_start(pcnt_unit); + + ESP_LOGI(TAG, "MFC Multi-Tasking OS State Machine Online."); + + // 6. Master UI State Machine Loop + int count = 0; + int last_menu_index = -1; + int last_sw_state = 1; + TickType_t last_button_press = 0; + + screen_state_t current_screen = SCREEN_MAIN_MENU; + bool screen_needs_redraw = true; + + int radio_start_count = 0; + int last_tuned_channel = current_radio_channel; + + while (1) { + pcnt_unit_get_count(pcnt_unit, &count); + int sw_state = gpio_get_level(PIN_ENCODER_SW); + + if (current_screen == SCREEN_MAIN_MENU) { + int raw_steps = count / 4; + int current_menu_index = ((raw_steps % NUM_MENU_ITEMS) + NUM_MENU_ITEMS) % NUM_MENU_ITEMS; + + if (current_menu_index != last_menu_index || screen_needs_redraw) { + oled_clear(); + draw_menu(current_menu_index); + last_menu_index = current_menu_index; + screen_needs_redraw = false; + } + + // Click to Select with 300ms Debounce + if (sw_state == 0 && last_sw_state == 1) { + if ((xTaskGetTickCount() - last_button_press) > pdMS_TO_TICKS(300)) { + current_screen = (screen_state_t)(current_menu_index + 1); + screen_needs_redraw = true; + + if (current_screen == SCREEN_RADIO_CONFIG) { + radio_start_count = count; + last_tuned_channel = current_radio_channel; + } + + last_button_press = xTaskGetTickCount(); + } + } + } + else { + // Sub-screen handling + if (current_screen == SCREEN_RADIO_CONFIG) { + int encoder_delta = (count - radio_start_count) / 4; + int target_channel = current_radio_channel + encoder_delta; + + if (target_channel < 0) target_channel = 0; + if (target_channel > 125) target_channel = 125; + + if (target_channel != last_tuned_channel || screen_needs_redraw) { + current_radio_channel = target_channel; + set_nrf_channel(current_radio_channel); + + oled_clear(); + draw_radio_config_screen(current_radio_channel); + last_tuned_channel = target_channel; + screen_needs_redraw = false; + } + } + else { + if (screen_needs_redraw) { + oled_clear(); + if (current_screen == SCREEN_SYSTEM_INFO) { + draw_system_info(); + } else if (current_screen == SCREEN_DRIVE) { + draw_placeholder_screen("- DRIVE VEHICLE -"); + } else if (current_screen == SCREEN_CALIBRATE) { + draw_placeholder_screen("- CALIBRATION -"); + } + screen_needs_redraw = false; + } + } + + // Click to return to Main Menu with 300ms Debounce + if (sw_state == 0 && last_sw_state == 1) { + if ((xTaskGetTickCount() - last_button_press) > pdMS_TO_TICKS(300)) { + current_screen = SCREEN_MAIN_MENU; + screen_needs_redraw = true; + last_button_press = xTaskGetTickCount(); + } + } + } + + last_sw_state = sw_state; + vTaskDelay(pdMS_TO_TICKS(30)); + } +} diff --git a/assets/downloads/midi_to_c.py b/assets/downloads/midi_to_c.py new file mode 100644 index 0000000..3cf8c43 --- /dev/null +++ b/assets/downloads/midi_to_c.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +import sys +import mido + +def convert_midi_to_c(midi_filename): + try: + mid = mido.MidiFile(midi_filename) + except Exception as e: + print(f"Error loading MIDI: {e}") + sys.exit(1) + + safe_name = midi_filename.split('/')[-1].replace('.mid', '').replace('-', '_').replace(' ', '_') + print(f"// Converted from: {midi_filename} (RLE Compressed & Bass-Routed Edition)") + print(f"const SequenceStep midi_{safe_name}[] = {{") + + active_melody_notes = set() + time_accum = 0.0 + + # Incoming MIDI drum triggers + trigger_kick = False + trigger_hat = False + + # === RLE COMPRESSION STATE === + rle_freq = -1 + rle_dur = 0 + rle_kick = False + rle_hat = False + + output_lines = [] + line_buffer = " " + items_on_line = 0 + + # Function to print the compressed note once it finally changes + def flush_rle(): + nonlocal rle_freq, rle_dur, rle_kick, rle_hat, line_buffer, items_on_line, output_lines + if rle_dur > 0: + k_str = "true" if rle_kick else "false" + h_str = "true" if rle_hat else "false" + line_buffer += f"{{{rle_freq}, {rle_dur}, {k_str}, {h_str}}}, " + items_on_line += 1 + if items_on_line >= 4: + output_lines.append(line_buffer) + line_buffer = " " + items_on_line = 0 + + for msg in mid: + time_accum += msg.time + + if msg.type in ['note_on', 'note_off'] and time_accum > 0.01: + duration_ms = int(time_accum * 1000) + + if active_melody_notes: + note = max(active_melody_notes) + freq = int(440.0 * (2.0 ** ((note - 69) / 12.0))) + else: + freq = 0 + + # === RLE ENGINE === + # If nothing changed, just add the time to the current note! + if freq == rle_freq and trigger_kick == rle_kick and trigger_hat == rle_hat: + rle_dur += duration_ms + else: + # The note changed! Flush the old one and start tracking the new one. + flush_rle() + rle_freq = freq + rle_dur = duration_ms + rle_kick = trigger_kick + rle_hat = trigger_hat + + # Reset triggers for the next loop + time_accum = 0.0 + trigger_kick = False + trigger_hat = False + + if hasattr(msg, 'note'): + if msg.type == 'note_on' and msg.velocity > 0: + if msg.channel == 9: + if msg.note in [35, 36, 38, 40]: trigger_kick = True + else: trigger_hat = True + else: + if msg.note >= 60: + active_melody_notes.add(msg.note) + elif msg.note < 50: + trigger_kick = True + else: + trigger_hat = True + + elif msg.type == 'note_off' or (msg.type == 'note_on' and msg.velocity == 0): + if msg.channel != 9 and msg.note >= 60: + active_melody_notes.discard(msg.note) + + # Flush the very last note + flush_rle() + + if items_on_line > 0: + output_lines.append(line_buffer) + + for line in output_lines: + print(line) + + print(" {0, 2000, false, false}\n};") + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: python midi_to_c.py ") + sys.exit(1) + convert_midi_to_c(sys.argv[1]) diff --git a/lab.html b/lab.html index f3039a6..ea5db1a 100644 --- a/lab.html +++ b/lab.html @@ -78,7 +78,8 @@

@@ -95,7 +96,8 @@

diff --git a/projects/midi-breadboard-instrument.html b/projects/midi-breadboard-instrument.html index a2384cb..7774d13 100644 --- a/projects/midi-breadboard-instrument.html +++ b/projects/midi-breadboard-instrument.html @@ -68,8 +68,9 @@

diff --git a/projects/multi-functional-controller.html b/projects/multi-functional-controller.html index d75f2a2..4095f18 100644 --- a/projects/multi-functional-controller.html +++ b/projects/multi-functional-controller.html @@ -68,8 +68,9 @@

@@ -199,7 +200,7 @@ idf.py -p /dev/ttyACM0 flash monitor
KiCad schematic diagram of the ESP32-S3 Multi-Functional Controller
- Early prototype KiCad schematic (mfc-1.kicad_sch) — click to zoom full-screen or download the raw KiCad 9.0 file. + Early prototype KiCad schematic (mfc-1.kicad_sch) — click to zoom full-screen or download the raw KiCad 9.0 file.