diff --git a/CMakeLists.txt b/CMakeLists.txt index 222c3577..168f1ff0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,13 +8,13 @@ include(pico_sdk_import.cmake) # project specific configuration from here add_definitions( - -DMRBC_USE_HAL_RP2040 -DMRBC_REQUIRE_32BIT_ALIGNMENT -DMAX_REGS_SIZE=256 -DMAX_VM_COUNT=255 -DMAX_SYMBOLS_COUNT=1800 -DMRBC_CONVERT_CRLF -DMRBC_USE_MATH + -DMRBC_USE_FLOAT=2 -DPICORBC_PTR_SIZE=4 -DNO_CLOCK_GETTIME=1 ) @@ -58,6 +58,7 @@ add_executable(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-i2c/ports/rp2040/i2c.c ${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-spi/ports/rp2040/spi.c ${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-adc/ports/rp2040/adc.c + ${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-io-console/ports/rp2040/io-console.c ) set(PICORBC ${CMAKE_SOURCE_DIR}/lib/picoruby/bin/picorbc) diff --git a/Rakefile b/Rakefile index 4dd2f993..b55efdfa 100644 --- a/Rakefile +++ b/Rakefile @@ -115,6 +115,7 @@ task :setup_test do FileUtils.ln_sf "../../lib/picoruby/mrbgems/picoruby-gpio/mrblib/gpio.rb", "gpio.rb" FileUtils.ln_sf "../../lib/picoruby/mrbgems/picoruby-float-ext/mrblib/float.rb", "float.rb" FileUtils.ln_sf "../../lib/picoruby/mrbgems/picoruby-music-macro-language/mrblib/mml.rb", "mml.rb" + FileUtils.ln_sf "../../lib/picoruby/mrbgems/picoruby-mml2midi/mrblib/mml2midi.rb", "mml2midi.rb" end end diff --git a/include/midi.h b/include/midi.h new file mode 100644 index 00000000..0012be1c --- /dev/null +++ b/include/midi.h @@ -0,0 +1,12 @@ +#ifndef MIDI_DEFINED_H_ +#define MIDI_DEFINED_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* MIDI_DEFINED_H_ */ \ No newline at end of file diff --git a/lib/picoruby b/lib/picoruby index 2eb394eb..3d0b4a7f 160000 --- a/lib/picoruby +++ b/lib/picoruby @@ -1 +1 @@ -Subproject commit 2eb394eb3427b9b20ccc0cb71fe8a8089b247b8b +Subproject commit 3d0b4a7f0b1452faa7433b6dca59e66c8be0e506 diff --git a/src/hal.c b/src/hal.c deleted file mode 100644 index 9f1507c7..00000000 --- a/src/hal.c +++ /dev/null @@ -1,118 +0,0 @@ -#include -#include - -/* pico-sdk and tinyusb */ -#include -#include -#include -#include -#include - -#include "../lib/picoruby/mrbgems/picoruby-io-console/src/hal/hal.h" - -/* mruby/c */ -#include - -#define ALARM_IRQ 0 - -#ifndef MRBC_TICK_UNIT -#define MRBC_TICK_UNIT 1 -#endif - -#ifndef MRBC_NO_TIMER -struct repeating_timer timer; - -bool -alarm_irq(struct repeating_timer *t) -{ - mrbc_tick(); - return true; -} - -void -hal_init(void) -{ - add_repeating_timer_ms(MRBC_TICK_UNIT, alarm_irq, NULL, &timer); - clocks_hw->sleep_en0 = 0; - clocks_hw->sleep_en1 = CLOCKS_SLEEP_EN1_CLK_SYS_TIMER_BITS - | CLOCKS_SLEEP_EN1_CLK_SYS_USBCTRL_BITS - | CLOCKS_SLEEP_EN1_CLK_USB_USBCTRL_BITS - | CLOCKS_SLEEP_EN1_CLK_SYS_UART0_BITS - | CLOCKS_SLEEP_EN1_CLK_PERI_UART0_BITS; -} - -void -hal_enable_irq() -{ - irq_set_enabled(ALARM_IRQ, true); -} - -void -hal_disable_irq() -{ - irq_set_enabled(ALARM_IRQ, false); -} - -void -hal_idle_cpu() -{ - __wfi(); -} - -#else // MRBC_NO_TIMER - -void -hal_idle_cpu() -{ - sleep_ms(MRBC_TICK_UNIT); - mrbc_tick(); -} -#endif - -int hal_write(int fd, const void *buf, int nbytes) -{ - tud_task(); - tud_cdc_write(buf, nbytes); - return tud_cdc_write_flush(); -} - -int hal_flush(int fd) { - return tud_cdc_write_flush(); -} - -int -hal_read_available(void) -{ - if (tud_cdc_available()) { - return 1; - } else { - return 0; - } -} - -int -hal_getchar(void) -{ - if (tud_cdc_available()) { - return tud_cdc_read_char(); - } else { - return -1; - } -} - -//================================================================ -/*!@brief - abort program - - @param s additional message. -*/ -void hal_abort(const char *s) -{ - if( s ) { - hal_write(1, s, strlen(s)); - } - - abort(); -} - - diff --git a/src/midi.c b/src/midi.c new file mode 100644 index 00000000..602d0cbf --- /dev/null +++ b/src/midi.c @@ -0,0 +1,18 @@ +#include + +#include "../include/midi.h" +#include "../include/usb_descriptors.h" +#include "picoruby-prk-midi/include/prk-midi.h" + +uint8_t const cable_num = 0; // MIDI jack associated with USB endpoint +uint8_t packet[4]; + +void Midi_init(void) +{ + while(tud_midi_available()) tud_midi_packet_read(packet); +} + +void Midi_stream_write(uint8_t* packet, uint8_t len) +{ + tud_midi_stream_write(cable_num, packet, len); +} \ No newline at end of file diff --git a/src/usb_descriptors.c b/src/usb_descriptors.c index 3fbf3688..e32473c4 100644 --- a/src/usb_descriptors.c +++ b/src/usb_descriptors.c @@ -33,7 +33,7 @@ tusb_desc_device_t desc_device = .bNumConfigurations = 0x01 }; -#define STRING_DESC_ARR_SIZE 6 +#define STRING_DESC_ARR_SIZE 7 #define PRK_CONF_SIZE 64 @@ -47,6 +47,7 @@ static char const *string_desc_arr[STRING_DESC_ARR_SIZE] = PRK_SERIAL, // 3: Serial "PRK CDC", // 4: CDC Interface "PRK MSC", // 5: MSC Interface + "PRK MIDI", // 6: MIDI Interface }; // Invoked when received GET DEVICE DESCRIPTOR @@ -61,9 +62,9 @@ tud_descriptor_device_cb(void) //--------------------------------------------------------------------+ #ifdef PICORUBY_NO_MSC -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_HID_INOUT_DESC_LEN + TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_HID_INOUT_DESC_LEN + TUD_HID_DESC_LEN + TUD_MIDI_DESC_LEN) #else -#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN + TUD_HID_INOUT_DESC_LEN + TUD_HID_DESC_LEN) +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_MSC_DESC_LEN + TUD_HID_INOUT_DESC_LEN + TUD_HID_DESC_LEN + TUD_MIDI_DESC_LEN) #endif #if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX @@ -112,6 +113,9 @@ tud_descriptor_device_cb(void) #define EPNUM_HID_IN 0x84 #define EPNUM_JOYSTICK_IN 0x85 +#define EPNUM_MIDI_OUT 0x06 +#define EPNUM_MIDI_IN 0x86 + uint8_t const desc_hid_report[] = { TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(REPORT_ID_KEYBOARD )), @@ -131,6 +135,8 @@ enum ITF_NUM_CDC_DATA, ITF_NUM_HID, ITF_NUM_JOYSTICK, + ITF_NUM_MIDI, + ITF_NUM_MIDI_STREAMING, #ifndef PICORUBY_NO_MSC ITF_NUM_MSC, #endif @@ -145,6 +151,9 @@ uint8_t const desc_fs_configuration[] = // Interface number, string index, EP notification address and size, EP data address (out, in) and size. TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 4, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64), + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 6, EPNUM_MIDI_OUT, EPNUM_MIDI_IN, 64), + #ifndef PICORUBY_NO_MSC // Interface number, string index, EP Out & EP In address, EP size TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, 5, EPNUM_MSC_OUT, EPNUM_MSC_IN, 64), diff --git a/test/models/midi.c b/test/models/midi.c new file mode 100644 index 00000000..cb7a60cb --- /dev/null +++ b/test/models/midi.c @@ -0,0 +1,572 @@ +#include +#ifdef __cplusplus +extern const uint8_t /tmp/midi[]; +#endif +const uint8_t /tmp/midi[] = { +0x52,0x49,0x54,0x45,0x30,0x33,0x30,0x30,0x00,0x00,0x23,0x58,0x4d,0x41,0x54,0x5a, +0x30,0x30,0x30,0x30,0x49,0x52,0x45,0x50,0x00,0x00,0x23,0x3c,0x30,0x33,0x30,0x30, +0x00,0x00,0x00,0x28,0x00,0x01,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x0d, +0x11,0x01,0x11,0x02,0x5c,0x01,0x00,0x5e,0x01,0x00,0x38,0x01,0x69,0x00,0x00,0x00, +0x01,0x00,0x04,0x4d,0x49,0x44,0x49,0x00,0x00,0x00,0x0b,0x02,0x00,0x01,0x00,0x43, +0x00,0x0f,0x00,0x00,0x00,0x00,0x04,0x7f,0x10,0x02,0x00,0x10,0x03,0x01,0x10,0x04, +0x02,0x10,0x05,0x03,0x10,0x06,0x04,0x10,0x07,0x05,0x10,0x08,0x06,0x2d,0x01,0x07, +0x07,0x03,0x01,0x80,0x1e,0x01,0x08,0x03,0x01,0x90,0x1e,0x01,0x09,0x03,0x01,0xe0, +0x1e,0x01,0x0a,0x03,0x01,0xb0,0x1e,0x01,0x0b,0x03,0x01,0xc0,0x1e,0x01,0x0c,0x03, +0x01,0x40,0x1e,0x01,0x0d,0x0e,0x01,0x3f,0xff,0x1e,0x01,0x0e,0x06,0x01,0x1e,0x01, +0x0f,0x0e,0x01,0x20,0x00,0x1e,0x01,0x10,0x10,0x01,0x12,0x03,0x02,0x19,0x10,0x03, +0x13,0x03,0x04,0x1a,0x10,0x05,0x14,0x03,0x06,0x1a,0x10,0x07,0x15,0x03,0x08,0x1b, +0x10,0x09,0x16,0x03,0x0a,0x1c,0x10,0x0b,0x17,0x03,0x0c,0x1c,0x10,0x0d,0x18,0x03, +0x0e,0x1d,0x10,0x0f,0x19,0x03,0x10,0x1e,0x10,0x11,0x1a,0x03,0x12,0x1f,0x10,0x13, +0x1b,0x03,0x14,0x1f,0x10,0x15,0x1c,0x03,0x16,0x20,0x10,0x17,0x1d,0x03,0x18,0x21, +0x10,0x19,0x1e,0x03,0x1a,0x21,0x10,0x1b,0x1f,0x03,0x1c,0x22,0x10,0x1d,0x20,0x03, +0x1e,0x23,0x10,0x1f,0x21,0x03,0x20,0x23,0x10,0x21,0x22,0x03,0x22,0x24,0x10,0x23, +0x23,0x03,0x24,0x25,0x10,0x25,0x24,0x03,0x26,0x26,0x10,0x27,0x25,0x03,0x28,0x26, +0x10,0x29,0x26,0x03,0x2a,0x27,0x10,0x2b,0x27,0x03,0x2c,0x28,0x10,0x2d,0x28,0x03, +0x2e,0x28,0x10,0x2f,0x29,0x03,0x30,0x29,0x10,0x31,0x2a,0x03,0x32,0x2a,0x10,0x33, +0x2b,0x03,0x34,0x2b,0x10,0x35,0x2c,0x03,0x36,0x2b,0x10,0x37,0x2d,0x03,0x38,0x2c, +0x10,0x39,0x2e,0x03,0x3a,0x2d,0x10,0x3b,0x2f,0x03,0x3c,0x2d,0x10,0x3d,0x30,0x03, +0x3e,0x2e,0x10,0x3f,0x31,0x03,0x40,0x2f,0x53,0x01,0x20,0x10,0x02,0x32,0x03,0x03, +0x2f,0x10,0x04,0x33,0x03,0x05,0x30,0x10,0x06,0x34,0x03,0x07,0x31,0x10,0x08,0x35, +0x03,0x09,0x32,0x10,0x0a,0x36,0x03,0x0b,0x32,0x10,0x0c,0x37,0x03,0x0d,0x33,0x10, +0x0e,0x38,0x03,0x0f,0x34,0x10,0x10,0x39,0x03,0x11,0x34,0x10,0x12,0x3a,0x03,0x13, +0x35,0x10,0x14,0x3b,0x03,0x15,0x36,0x10,0x16,0x3c,0x03,0x17,0x37,0x10,0x18,0x3d, +0x03,0x19,0x37,0x10,0x1a,0x3e,0x03,0x1b,0x38,0x10,0x1c,0x3f,0x03,0x1d,0x39,0x10, +0x1e,0x40,0x03,0x1f,0x39,0x10,0x20,0x41,0x03,0x21,0x3a,0x10,0x22,0x42,0x03,0x23, +0x3b,0x10,0x24,0x43,0x03,0x25,0x3b,0x10,0x26,0x44,0x03,0x27,0x3c,0x10,0x28,0x45, +0x03,0x29,0x4b,0x10,0x2a,0x46,0x03,0x2b,0x53,0x10,0x2c,0x47,0x03,0x2d,0x54,0x10, +0x2e,0x48,0x03,0x2f,0x5b,0x10,0x30,0x49,0x03,0x31,0x62,0x10,0x32,0x4a,0x03,0x33, +0x63,0x10,0x34,0x4b,0x03,0x35,0x6a,0x10,0x36,0x4c,0x03,0x37,0x6f,0x10,0x38,0x4d, +0x03,0x39,0x70,0x10,0x3a,0x4e,0x03,0x3b,0x71,0x10,0x3c,0x4f,0x03,0x3d,0x72,0x10, +0x3e,0x50,0x03,0x3f,0x73,0x10,0x40,0x51,0x03,0x41,0x74,0x54,0x01,0x20,0x10,0x02, +0x52,0x03,0x03,0x75,0x10,0x04,0x53,0x03,0x05,0x76,0x10,0x06,0x54,0x03,0x07,0x77, +0x10,0x08,0x55,0x03,0x09,0x78,0x10,0x0a,0x56,0x03,0x0b,0x79,0x10,0x0c,0x57,0x03, +0x0d,0x7a,0x10,0x0e,0x58,0x03,0x0f,0x7b,0x10,0x10,0x59,0x03,0x11,0x7c,0x10,0x12, +0x5a,0x03,0x13,0x7d,0x10,0x14,0x5b,0x03,0x15,0x7e,0x10,0x16,0x5c,0x03,0x17,0x7f, +0x10,0x18,0x5d,0x03,0x19,0x80,0x10,0x1a,0x5e,0x03,0x1b,0x81,0x10,0x1c,0x5f,0x03, +0x1d,0x82,0x10,0x1e,0x60,0x03,0x1f,0x83,0x10,0x20,0x61,0x03,0x21,0x8c,0x10,0x22, +0x62,0x03,0x23,0x8d,0x10,0x24,0x63,0x03,0x25,0x8e,0x10,0x26,0x64,0x03,0x27,0x8f, +0x10,0x28,0x65,0x03,0x29,0x90,0x10,0x2a,0x66,0x03,0x2b,0x91,0x10,0x2c,0x67,0x03, +0x2d,0x92,0x10,0x2e,0x68,0x03,0x2f,0x93,0x10,0x30,0x69,0x03,0x31,0x94,0x10,0x32, +0x6a,0x03,0x33,0x95,0x10,0x34,0x6b,0x03,0x35,0x96,0x10,0x36,0x6c,0x03,0x37,0x97, +0x10,0x38,0x6d,0x03,0x39,0x98,0x54,0x01,0x1c,0x1e,0x01,0x11,0x10,0x01,0x6f,0x07, +0x02,0x0b,0x03,0x03,0x04,0x08,0x47,0x02,0x03,0x10,0x03,0x70,0x07,0x04,0x0b,0x05, +0x03,0x06,0x08,0x03,0x07,0x0c,0x47,0x04,0x04,0x10,0x05,0x71,0x07,0x06,0x0b,0x07, +0x03,0x08,0x08,0x03,0x09,0x0c,0x03,0x0a,0x0f,0x47,0x06,0x05,0x10,0x07,0x72,0x07, +0x08,0x0b,0x09,0x03,0x0a,0x08,0x03,0x0b,0x0c,0x03,0x0c,0x0f,0x03,0x0d,0x13,0x47, +0x08,0x06,0x10,0x09,0x73,0x07,0x0a,0x0b,0x0b,0x03,0x0c,0x08,0x03,0x0d,0x0c,0x03, +0x0e,0x0f,0x03,0x0f,0x13,0x03,0x10,0x16,0x47,0x0a,0x07,0x10,0x0b,0x74,0x07,0x0c, +0x0a,0x0d,0x03,0x0e,0x08,0x47,0x0c,0x03,0x10,0x0d,0x75,0x07,0x0e,0x0a,0x0f,0x03, +0x10,0x08,0x03,0x11,0x0b,0x47,0x0e,0x04,0x10,0x0f,0x76,0x07,0x10,0x0a,0x11,0x03, +0x12,0x08,0x03,0x13,0x0b,0x03,0x14,0x0e,0x47,0x10,0x05,0x10,0x11,0x77,0x07,0x12, +0x0a,0x13,0x03,0x14,0x08,0x03,0x15,0x0b,0x03,0x16,0x0e,0x03,0x17,0x12,0x47,0x12, +0x06,0x10,0x13,0x78,0x07,0x14,0x0a,0x15,0x03,0x16,0x08,0x03,0x17,0x0b,0x03,0x18, +0x0e,0x03,0x19,0x12,0x03,0x1a,0x15,0x47,0x14,0x07,0x10,0x15,0x79,0x07,0x16,0x0b, +0x17,0x03,0x18,0x08,0x03,0x19,0x0a,0x47,0x16,0x04,0x10,0x17,0x7a,0x07,0x18,0x0b, +0x19,0x03,0x1a,0x08,0x03,0x1b,0x0a,0x03,0x1c,0x0e,0x47,0x18,0x05,0x10,0x19,0x7b, +0x07,0x1a,0x0b,0x1b,0x03,0x1c,0x08,0x03,0x1d,0x0a,0x03,0x1e,0x0e,0x03,0x1f,0x11, +0x47,0x1a,0x06,0x10,0x1b,0x7c,0x07,0x1c,0x0b,0x1d,0x03,0x1e,0x08,0x03,0x1f,0x0a, +0x03,0x20,0x0e,0x03,0x21,0x11,0x03,0x22,0x15,0x47,0x1c,0x07,0x10,0x1d,0x7d,0x07, +0x1e,0x0a,0x1f,0x0d,0x20,0x47,0x1e,0x03,0x10,0x1f,0x7e,0x07,0x20,0x0a,0x21,0x0d, +0x22,0x03,0x23,0x0a,0x47,0x20,0x04,0x10,0x21,0x7f,0x07,0x22,0x0b,0x23,0x03,0x24, +0x09,0x47,0x22,0x03,0x10,0x23,0x80,0x07,0x24,0x0b,0x25,0x03,0x26,0x09,0x03,0x27, +0x0d,0x47,0x24,0x04,0x53,0x01,0x12,0x1e,0x01,0x6e,0x06,0x01,0x03,0x02,0x0c,0x03, +0x03,0x19,0x03,0x04,0x26,0x03,0x05,0x33,0x03,0x06,0x40,0x03,0x07,0x4c,0x03,0x08, +0x59,0x03,0x09,0x66,0x03,0x0a,0x72,0x03,0x0b,0x7f,0x47,0x01,0x0b,0x1e,0x01,0x81, +0x0e,0x01,0x08,0x00,0x1e,0x01,0x82,0x12,0x01,0x62,0x01,0x58,0x02,0x00,0x5f,0x01, +0x83,0x12,0x01,0x62,0x01,0x58,0x02,0x01,0x5f,0x01,0x84,0x12,0x01,0x62,0x01,0x58, +0x02,0x02,0x5f,0x01,0x85,0x63,0x01,0x58,0x02,0x03,0x5f,0x01,0x86,0x63,0x01,0x58, +0x02,0x04,0x5f,0x01,0x87,0x63,0x01,0x58,0x02,0x05,0x5f,0x01,0x88,0x63,0x01,0x58, +0x02,0x06,0x5f,0x01,0x89,0x63,0x01,0x58,0x02,0x07,0x5f,0x01,0x8a,0x63,0x01,0x58, +0x02,0x08,0x5f,0x01,0x8b,0x63,0x01,0x58,0x02,0x09,0x5f,0x01,0x8c,0x63,0x01,0x58, +0x02,0x0a,0x5f,0x01,0x8d,0x63,0x01,0x58,0x02,0x0b,0x5f,0x01,0x8e,0x63,0x01,0x58, +0x02,0x0c,0x5f,0x01,0x8f,0x63,0x01,0x58,0x02,0x0d,0x5f,0x01,0x90,0x63,0x01,0x58, +0x02,0x0e,0x5f,0x01,0x91,0x38,0x01,0x00,0x00,0x00,0x92,0x00,0x07,0x63,0x68,0x61, +0x6e,0x6e,0x65,0x6c,0x00,0x00,0x0a,0x6b,0x65,0x79,0x5f,0x73,0x74,0x61,0x74,0x65, +0x73,0x00,0x00,0x0a,0x62,0x65,0x6e,0x64,0x5f,0x77,0x69,0x64,0x74,0x68,0x00,0x00, +0x09,0x62,0x65,0x6e,0x64,0x5f,0x73,0x74,0x65,0x70,0x00,0x00,0x03,0x62,0x70,0x6d, +0x00,0x00,0x0f,0x61,0x72,0x70,0x65,0x67,0x67,0x69,0x61,0x74,0x65,0x5f,0x6d,0x6f, +0x64,0x65,0x00,0x00,0x0a,0x63,0x68,0x6f,0x72,0x64,0x5f,0x6d,0x6f,0x64,0x65,0x00, +0x00,0x0d,0x61,0x74,0x74,0x72,0x5f,0x61,0x63,0x63,0x65,0x73,0x73,0x6f,0x72,0x00, +0x00,0x0e,0x4e,0x4f,0x54,0x45,0x5f,0x4f,0x46,0x46,0x5f,0x45,0x56,0x45,0x4e,0x54, +0x00,0x00,0x0d,0x4e,0x4f,0x54,0x45,0x5f,0x4f,0x4e,0x5f,0x45,0x56,0x45,0x4e,0x54, +0x00,0x00,0x10,0x50,0x49,0x54,0x43,0x48,0x5f,0x42,0x45,0x4e,0x44,0x5f,0x45,0x56, +0x45,0x4e,0x54,0x00,0x00,0x14,0x43,0x4f,0x4e,0x54,0x52,0x4f,0x4c,0x5f,0x43,0x48, +0x41,0x4e,0x47,0x45,0x5f,0x45,0x56,0x45,0x4e,0x54,0x00,0x00,0x14,0x50,0x52,0x4f, +0x47,0x52,0x41,0x4d,0x5f,0x43,0x48,0x41,0x4e,0x47,0x45,0x5f,0x45,0x56,0x45,0x4e, +0x54,0x00,0x00,0x09,0x4d,0x41,0x58,0x5f,0x45,0x56,0x45,0x4e,0x54,0x00,0x00,0x13, +0x4d,0x41,0x58,0x5f,0x50,0x49,0x54,0x43,0x48,0x42,0x45,0x4e,0x44,0x5f,0x56,0x41, +0x4c,0x55,0x45,0x00,0x00,0x13,0x4d,0x49,0x4e,0x5f,0x50,0x49,0x54,0x43,0x48,0x42, +0x45,0x4e,0x44,0x5f,0x56,0x41,0x4c,0x55,0x45,0x00,0x00,0x17,0x44,0x45,0x46,0x41, +0x55,0x4c,0x54,0x5f,0x50,0x49,0x54,0x43,0x48,0x42,0x45,0x4e,0x44,0x5f,0x56,0x41, +0x4c,0x55,0x45,0x00,0x00,0x07,0x4b,0x45,0x59,0x43,0x4f,0x44,0x45,0x00,0x00,0x05, +0x4d,0x49,0x5f,0x43,0x32,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43,0x73,0x32,0x00,0x00, +0x06,0x4d,0x49,0x5f,0x44,0x62,0x32,0x00,0x00,0x05,0x4d,0x49,0x5f,0x44,0x32,0x00, +0x00,0x06,0x4d,0x49,0x5f,0x44,0x73,0x32,0x00,0x00,0x06,0x4d,0x49,0x5f,0x45,0x62, +0x32,0x00,0x00,0x05,0x4d,0x49,0x5f,0x45,0x32,0x00,0x00,0x05,0x4d,0x49,0x5f,0x46, +0x32,0x00,0x00,0x06,0x4d,0x49,0x5f,0x46,0x73,0x32,0x00,0x00,0x06,0x4d,0x49,0x5f, +0x47,0x62,0x32,0x00,0x00,0x05,0x4d,0x49,0x5f,0x47,0x32,0x00,0x00,0x06,0x4d,0x49, +0x5f,0x47,0x73,0x32,0x00,0x00,0x06,0x4d,0x49,0x5f,0x41,0x62,0x32,0x00,0x00,0x05, +0x4d,0x49,0x5f,0x41,0x32,0x00,0x00,0x06,0x4d,0x49,0x5f,0x41,0x73,0x32,0x00,0x00, +0x06,0x4d,0x49,0x5f,0x42,0x62,0x32,0x00,0x00,0x05,0x4d,0x49,0x5f,0x42,0x32,0x00, +0x00,0x05,0x4d,0x49,0x5f,0x43,0x33,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43,0x73,0x33, +0x00,0x00,0x06,0x4d,0x49,0x5f,0x44,0x62,0x33,0x00,0x00,0x05,0x4d,0x49,0x5f,0x44, +0x33,0x00,0x00,0x06,0x4d,0x49,0x5f,0x44,0x73,0x33,0x00,0x00,0x06,0x4d,0x49,0x5f, +0x45,0x62,0x33,0x00,0x00,0x05,0x4d,0x49,0x5f,0x45,0x33,0x00,0x00,0x05,0x4d,0x49, +0x5f,0x46,0x33,0x00,0x00,0x06,0x4d,0x49,0x5f,0x46,0x73,0x33,0x00,0x00,0x06,0x4d, +0x49,0x5f,0x47,0x62,0x33,0x00,0x00,0x05,0x4d,0x49,0x5f,0x47,0x33,0x00,0x00,0x06, +0x4d,0x49,0x5f,0x47,0x73,0x33,0x00,0x00,0x06,0x4d,0x49,0x5f,0x41,0x62,0x33,0x00, +0x00,0x05,0x4d,0x49,0x5f,0x41,0x33,0x00,0x00,0x06,0x4d,0x49,0x5f,0x41,0x73,0x33, +0x00,0x00,0x06,0x4d,0x49,0x5f,0x42,0x62,0x33,0x00,0x00,0x05,0x4d,0x49,0x5f,0x42, +0x33,0x00,0x00,0x05,0x4d,0x49,0x5f,0x43,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43, +0x73,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x44,0x62,0x34,0x00,0x00,0x05,0x4d,0x49, +0x5f,0x44,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x44,0x73,0x34,0x00,0x00,0x06,0x4d, +0x49,0x5f,0x45,0x62,0x34,0x00,0x00,0x05,0x4d,0x49,0x5f,0x45,0x34,0x00,0x00,0x05, +0x4d,0x49,0x5f,0x46,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x46,0x73,0x34,0x00,0x00, +0x06,0x4d,0x49,0x5f,0x47,0x62,0x34,0x00,0x00,0x05,0x4d,0x49,0x5f,0x47,0x34,0x00, +0x00,0x06,0x4d,0x49,0x5f,0x47,0x73,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x41,0x62, +0x34,0x00,0x00,0x05,0x4d,0x49,0x5f,0x41,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x41, +0x73,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x42,0x62,0x34,0x00,0x00,0x05,0x4d,0x49, +0x5f,0x42,0x34,0x00,0x00,0x06,0x4d,0x49,0x5f,0x4f,0x43,0x30,0x00,0x00,0x07,0x4d, +0x49,0x5f,0x4f,0x43,0x54,0x44,0x00,0x00,0x07,0x4d,0x49,0x5f,0x4f,0x43,0x54,0x55, +0x00,0x00,0x06,0x4d,0x49,0x5f,0x54,0x52,0x30,0x00,0x00,0x07,0x4d,0x49,0x5f,0x54, +0x52,0x53,0x44,0x00,0x00,0x07,0x4d,0x49,0x5f,0x54,0x52,0x53,0x55,0x00,0x00,0x06, +0x4d,0x49,0x5f,0x56,0x4c,0x36,0x00,0x00,0x07,0x4d,0x49,0x5f,0x56,0x45,0x4c,0x44, +0x00,0x00,0x07,0x4d,0x49,0x5f,0x56,0x45,0x4c,0x55,0x00,0x00,0x06,0x4d,0x49,0x5f, +0x43,0x48,0x31,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43,0x48,0x32,0x00,0x00,0x06,0x4d, +0x49,0x5f,0x43,0x48,0x33,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43,0x48,0x34,0x00,0x00, +0x06,0x4d,0x49,0x5f,0x43,0x48,0x35,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43,0x48,0x36, +0x00,0x00,0x06,0x4d,0x49,0x5f,0x43,0x48,0x37,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43, +0x48,0x38,0x00,0x00,0x06,0x4d,0x49,0x5f,0x43,0x48,0x39,0x00,0x00,0x07,0x4d,0x49, +0x5f,0x43,0x48,0x31,0x30,0x00,0x00,0x07,0x4d,0x49,0x5f,0x43,0x48,0x31,0x31,0x00, +0x00,0x07,0x4d,0x49,0x5f,0x43,0x48,0x31,0x32,0x00,0x00,0x07,0x4d,0x49,0x5f,0x43, +0x48,0x31,0x33,0x00,0x00,0x07,0x4d,0x49,0x5f,0x43,0x48,0x31,0x34,0x00,0x00,0x07, +0x4d,0x49,0x5f,0x43,0x48,0x31,0x35,0x00,0x00,0x07,0x4d,0x49,0x5f,0x43,0x48,0x31, +0x36,0x00,0x00,0x07,0x4d,0x49,0x5f,0x43,0x48,0x4e,0x44,0x00,0x00,0x07,0x4d,0x49, +0x5f,0x43,0x48,0x4e,0x55,0x00,0x00,0x07,0x4d,0x49,0x5f,0x41,0x4f,0x46,0x46,0x00, +0x00,0x06,0x4d,0x49,0x5f,0x42,0x4e,0x44,0x00,0x00,0x07,0x4d,0x49,0x5f,0x42,0x4e, +0x44,0x55,0x00,0x00,0x07,0x4d,0x49,0x5f,0x50,0x52,0x47,0x30,0x00,0x00,0x07,0x4d, +0x49,0x5f,0x50,0x52,0x47,0x55,0x00,0x00,0x07,0x4d,0x49,0x5f,0x50,0x52,0x47,0x44, +0x00,0x00,0x09,0x4d,0x49,0x5f,0x43,0x52,0x44,0x54,0x47,0x4c,0x00,0x00,0x08,0x4d, +0x49,0x5f,0x43,0x52,0x44,0x4f,0x4e,0x00,0x00,0x09,0x4d,0x49,0x5f,0x43,0x52,0x44, +0x4f,0x46,0x46,0x00,0x00,0x0a,0x4d,0x49,0x5f,0x43,0x52,0x44,0x4e,0x50,0x54,0x4e, +0x00,0x00,0x0a,0x4d,0x49,0x5f,0x43,0x52,0x44,0x50,0x50,0x54,0x4e,0x00,0x00,0x0a, +0x4d,0x49,0x5f,0x41,0x52,0x50,0x47,0x54,0x47,0x4c,0x00,0x00,0x09,0x4d,0x49,0x5f, +0x41,0x52,0x50,0x47,0x4f,0x4e,0x00,0x00,0x0a,0x4d,0x49,0x5f,0x41,0x52,0x50,0x47, +0x4f,0x46,0x46,0x00,0x00,0x0e,0x43,0x48,0x4f,0x52,0x44,0x5f,0x50,0x41,0x54,0x54, +0x45,0x52,0x4e,0x53,0x00,0x00,0x05,0x6d,0x61,0x6a,0x6f,0x72,0x00,0x00,0x08,0x6d, +0x61,0x6a,0x6f,0x72,0x37,0x74,0x68,0x00,0x00,0x08,0x6d,0x61,0x6a,0x6f,0x72,0x39, +0x74,0x68,0x00,0x00,0x09,0x6d,0x61,0x6a,0x6f,0x72,0x31,0x31,0x74,0x68,0x00,0x00, +0x09,0x6d,0x61,0x6a,0x6f,0x72,0x31,0x33,0x74,0x68,0x00,0x00,0x05,0x6d,0x69,0x6e, +0x6f,0x72,0x00,0x00,0x08,0x6d,0x69,0x6e,0x6f,0x72,0x37,0x74,0x68,0x00,0x00,0x08, +0x6d,0x69,0x6e,0x6f,0x72,0x39,0x74,0x68,0x00,0x00,0x09,0x6d,0x69,0x6e,0x6f,0x72, +0x31,0x31,0x74,0x68,0x00,0x00,0x09,0x6d,0x69,0x6e,0x6f,0x72,0x31,0x33,0x74,0x68, +0x00,0x00,0x0b,0x64,0x6f,0x6d,0x69,0x6e,0x61,0x6e,0x74,0x37,0x74,0x68,0x00,0x00, +0x0b,0x64,0x6f,0x6d,0x69,0x6e,0x61,0x6e,0x74,0x39,0x74,0x68,0x00,0x00,0x0c,0x64, +0x6f,0x6d,0x69,0x6e,0x61,0x6e,0x74,0x31,0x31,0x74,0x68,0x00,0x00,0x0c,0x64,0x6f, +0x6d,0x69,0x6e,0x61,0x6e,0x74,0x31,0x33,0x74,0x68,0x00,0x00,0x0a,0x64,0x69,0x6d, +0x69,0x6e,0x69,0x73,0x68,0x65,0x64,0x00,0x00,0x0d,0x64,0x69,0x6d,0x69,0x6e,0x69, +0x73,0x68,0x65,0x64,0x37,0x74,0x68,0x00,0x00,0x09,0x61,0x75,0x67,0x6d,0x65,0x6e, +0x74,0x65,0x64,0x00,0x00,0x0c,0x61,0x75,0x67,0x6d,0x65,0x6e,0x74,0x65,0x64,0x37, +0x74,0x68,0x00,0x00,0x0f,0x56,0x45,0x4c,0x4f,0x43,0x49,0x54,0x59,0x5f,0x56,0x41, +0x4c,0x55,0x45,0x53,0x00,0x00,0x0a,0x4d,0x41,0x50,0x5f,0x4f,0x46,0x46,0x53,0x45, +0x54,0x00,0x00,0x07,0x6b,0x65,0x79,0x63,0x6f,0x64,0x65,0x00,0x00,0x14,0x6b,0x65, +0x79,0x63,0x6f,0x64,0x65,0x5f,0x66,0x72,0x6f,0x6d,0x5f,0x6d,0x61,0x70,0x63,0x6f, +0x64,0x65,0x00,0x00,0x16,0x6b,0x65,0x79,0x63,0x6f,0x64,0x65,0x5f,0x74,0x6f,0x5f, +0x6e,0x6f,0x74,0x65,0x5f,0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x00,0x0a,0x69,0x6e, +0x69,0x74,0x69,0x61,0x6c,0x69,0x7a,0x65,0x00,0x00,0x0c,0x75,0x70,0x64,0x61,0x74, +0x65,0x5f,0x65,0x76,0x65,0x6e,0x74,0x00,0x00,0x0f,0x70,0x72,0x6f,0x63,0x65,0x73, +0x73,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x00,0x00,0x07,0x6e,0x6f,0x74,0x65, +0x5f,0x6f,0x6e,0x00,0x00,0x08,0x6e,0x6f,0x74,0x65,0x5f,0x6f,0x66,0x66,0x00,0x00, +0x0e,0x73,0x65,0x6e,0x64,0x5f,0x70,0x69,0x74,0x63,0x68,0x62,0x65,0x6e,0x64,0x00, +0x00,0x07,0x73,0x65,0x6e,0x64,0x5f,0x70,0x63,0x00,0x00,0x07,0x73,0x65,0x6e,0x64, +0x5f,0x63,0x63,0x00,0x00,0x04,0x74,0x61,0x73,0x6b,0x00,0x00,0x10,0x70,0x72,0x65, +0x73,0x73,0x5f,0x62,0x65,0x6e,0x64,0x5f,0x65,0x76,0x65,0x6e,0x74,0x00,0x00,0x12, +0x72,0x65,0x6c,0x65,0x61,0x73,0x65,0x5f,0x62,0x65,0x6e,0x64,0x5f,0x65,0x76,0x65, +0x6e,0x74,0x00,0x00,0x14,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x63,0x6f,0x64, +0x65,0x5f,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x00,0x00,0x00,0x00,0x36,0x00,0x03, +0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x34,0x04,0x00,0x00,0x1d,0x03, +0x00,0x1f,0x03,0x01,0x01,0x04,0x01,0x23,0x03,0x38,0x03,0x00,0x00,0x00,0x02,0x00, +0x04,0x4d,0x49,0x44,0x49,0x00,0x00,0x07,0x4b,0x45,0x59,0x43,0x4f,0x44,0x45,0x00, +0x00,0x00,0x00,0x39,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11, +0x34,0x04,0x00,0x00,0x01,0x03,0x01,0x1d,0x04,0x00,0x1f,0x04,0x01,0x3e,0x03,0x38, +0x03,0x00,0x00,0x00,0x02,0x00,0x04,0x4d,0x49,0x44,0x49,0x00,0x00,0x0a,0x4d,0x41, +0x50,0x5f,0x4f,0x46,0x46,0x53,0x45,0x54,0x00,0x00,0x00,0x00,0x3d,0x00,0x03,0x00, +0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x34,0x04,0x00,0x00,0x01,0x03,0x01, +0x07,0x04,0x46,0x03,0x27,0x03,0x00,0x08,0x01,0x03,0x01,0x03,0x04,0x48,0x44,0x03, +0x27,0x03,0x00,0x0a,0x01,0x03,0x01,0x07,0x04,0x3e,0x03,0x25,0x00,0x02,0x05,0x03, +0x38,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x00,0x02,0x00,0x05,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x60,0x34,0x00,0x00,0x00,0x51,0x03,0x00,0x2d,0x02,0x00, +0x01,0x06,0x02,0x1a,0x02,0x01,0x47,0x02,0x00,0x1a,0x02,0x02,0x06,0x02,0x1a,0x02, +0x03,0x06,0x02,0x1a,0x02,0x04,0x0c,0x02,0x1a,0x02,0x05,0x06,0x02,0x1a,0x02,0x06, +0x1d,0x02,0x08,0x2f,0x02,0x09,0x00,0x1a,0x02,0x07,0x0e,0x02,0x05,0x55,0x1a,0x02, +0x0a,0x1d,0x02,0x0c,0x1a,0x02,0x0b,0x0e,0x02,0x07,0xd0,0x1a,0x02,0x0d,0x03,0x02, +0x78,0x1a,0x02,0x0e,0x14,0x02,0x1a,0x02,0x0f,0x10,0x02,0x11,0x1a,0x02,0x10,0x14, +0x02,0x1a,0x02,0x12,0x38,0x02,0x00,0x01,0x00,0x00,0x09,0x49,0x6e,0x69,0x74,0x20, +0x4d,0x49,0x44,0x49,0x00,0x00,0x13,0x00,0x04,0x70,0x75,0x74,0x73,0x00,0x00,0x08, +0x40,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x00,0x00,0x07,0x40,0x62,0x75,0x66,0x66, +0x65,0x72,0x00,0x00,0x0e,0x40,0x6f,0x63,0x74,0x61,0x76,0x65,0x5f,0x6f,0x66,0x66, +0x73,0x65,0x74,0x00,0x00,0x11,0x40,0x74,0x72,0x61,0x6e,0x73,0x70,0x6f,0x73,0x65, +0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x10,0x40,0x76,0x65,0x6c,0x6f,0x63, +0x69,0x74,0x79,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x0b,0x40,0x70,0x72, +0x6f,0x67,0x72,0x61,0x6d,0x5f,0x6e,0x6f,0x00,0x00,0x0b,0x40,0x6b,0x65,0x79,0x5f, +0x73,0x74,0x61,0x74,0x65,0x73,0x00,0x00,0x04,0x48,0x61,0x73,0x68,0x00,0x00,0x03, +0x6e,0x65,0x77,0x00,0x00,0x0b,0x40,0x62,0x65,0x6e,0x64,0x5f,0x77,0x69,0x64,0x74, +0x68,0x00,0x00,0x0b,0x40,0x62,0x65,0x6e,0x64,0x5f,0x76,0x61,0x6c,0x75,0x65,0x00, +0x00,0x17,0x44,0x45,0x46,0x41,0x55,0x4c,0x54,0x5f,0x50,0x49,0x54,0x43,0x48,0x42, +0x45,0x4e,0x44,0x5f,0x56,0x41,0x4c,0x55,0x45,0x00,0x00,0x0a,0x40,0x62,0x65,0x6e, +0x64,0x5f,0x73,0x74,0x65,0x70,0x00,0x00,0x04,0x40,0x62,0x70,0x6d,0x00,0x00,0x10, +0x40,0x61,0x72,0x70,0x65,0x67,0x67,0x69,0x61,0x74,0x65,0x5f,0x6d,0x6f,0x64,0x65, +0x00,0x00,0x0e,0x40,0x63,0x68,0x6f,0x72,0x64,0x5f,0x70,0x61,0x74,0x74,0x65,0x72, +0x6e,0x00,0x00,0x05,0x6d,0x61,0x6a,0x6f,0x72,0x00,0x00,0x0b,0x40,0x63,0x68,0x6f, +0x72,0x64,0x5f,0x6d,0x6f,0x64,0x65,0x00,0x00,0x00,0x03,0xe4,0x00,0x04,0x00,0x0a, +0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xef,0x34,0x08,0x00,0x00,0x01,0x04,0x01,0x07, +0x05,0x46,0x04,0x27,0x04,0x00,0x08,0x01,0x04,0x01,0x03,0x05,0x48,0x44,0x04,0x27, +0x04,0x01,0x24,0x01,0x04,0x02,0x10,0x05,0x00,0x01,0x06,0x04,0x2f,0x05,0x01,0x01, +0x26,0x05,0x00,0x03,0x25,0x00,0x3f,0x19,0x05,0x02,0x01,0x06,0x01,0x23,0x05,0x10, +0x06,0x03,0x01,0x07,0x05,0x2f,0x06,0x01,0x01,0x26,0x06,0x00,0x10,0x11,0x06,0x01, +0x07,0x05,0x2f,0x06,0x01,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x11,0x10,0x06,0x04, +0x19,0x07,0x02,0x01,0x08,0x01,0x01,0x09,0x06,0x24,0x07,0x25,0x00,0x02,0x11,0x06, +0x01,0x05,0x06,0x25,0x00,0xcb,0x10,0x05,0x05,0x01,0x06,0x04,0x2f,0x05,0x01,0x01, +0x26,0x05,0x00,0x03,0x25,0x00,0x32,0x19,0x05,0x02,0x01,0x06,0x01,0x23,0x05,0x10, +0x06,0x06,0x01,0x07,0x05,0x2f,0x06,0x01,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x11, +0x10,0x06,0x07,0x19,0x07,0x02,0x01,0x08,0x01,0x01,0x09,0x06,0x24,0x07,0x25,0x00, +0x02,0x11,0x06,0x01,0x05,0x06,0x25,0x00,0x88,0x10,0x05,0x08,0x01,0x06,0x04,0x2f, +0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x32,0x19,0x05,0x02,0x01,0x06,0x01, +0x23,0x05,0x10,0x06,0x04,0x01,0x07,0x05,0x2f,0x06,0x01,0x01,0x26,0x06,0x00,0x03, +0x25,0x00,0x11,0x10,0x06,0x06,0x19,0x07,0x02,0x01,0x08,0x01,0x01,0x09,0x06,0x24, +0x07,0x25,0x00,0x02,0x11,0x06,0x01,0x05,0x06,0x25,0x00,0x45,0x10,0x05,0x09,0x01, +0x06,0x04,0x2f,0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x32,0x19,0x05,0x02, +0x01,0x06,0x01,0x23,0x05,0x10,0x06,0x07,0x01,0x07,0x05,0x2f,0x06,0x01,0x01,0x26, +0x06,0x00,0x03,0x25,0x00,0x11,0x10,0x06,0x03,0x19,0x07,0x02,0x01,0x08,0x01,0x01, +0x09,0x06,0x24,0x07,0x25,0x00,0x02,0x11,0x06,0x01,0x05,0x06,0x25,0x00,0x02,0x11, +0x05,0x01,0x04,0x05,0x25,0x01,0xae,0x01,0x04,0x01,0x1d,0x05,0x0a,0x10,0x06,0x0b, +0x23,0x05,0x42,0x04,0x27,0x04,0x00,0x60,0x01,0x04,0x02,0x10,0x05,0x00,0x01,0x06, +0x04,0x2f,0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x1d,0x10,0x05,0x06,0x19, +0x06,0x02,0x1d,0x07,0x0a,0x10,0x08,0x0b,0x23,0x07,0x01,0x08,0x05,0x24,0x06,0x10, +0x06,0x0c,0x2d,0x05,0x0d,0x01,0x25,0x00,0x29,0x10,0x05,0x05,0x01,0x06,0x04,0x2f, +0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x16,0x19,0x05,0x02,0x1d,0x06,0x0a, +0x10,0x07,0x0b,0x23,0x06,0x2f,0x05,0x0e,0x01,0x2d,0x05,0x0f,0x00,0x25,0x00,0x02, +0x11,0x05,0x01,0x04,0x05,0x25,0x01,0x3d,0x01,0x04,0x01,0x1d,0x05,0x0a,0x10,0x06, +0x10,0x23,0x05,0x42,0x04,0x27,0x04,0x00,0x60,0x01,0x04,0x02,0x10,0x05,0x00,0x01, +0x06,0x04,0x2f,0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x1d,0x10,0x05,0x06, +0x19,0x06,0x02,0x1d,0x07,0x0a,0x10,0x08,0x10,0x23,0x07,0x01,0x08,0x05,0x24,0x06, +0x10,0x06,0x11,0x2d,0x05,0x0d,0x01,0x25,0x00,0x29,0x10,0x05,0x05,0x01,0x06,0x04, +0x2f,0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x16,0x19,0x05,0x02,0x1d,0x06, +0x0a,0x10,0x07,0x10,0x23,0x06,0x2f,0x05,0x0e,0x01,0x2d,0x05,0x0f,0x00,0x25,0x00, +0x02,0x11,0x05,0x01,0x04,0x05,0x25,0x00,0xcc,0x01,0x04,0x02,0x10,0x05,0x00,0x01, +0x06,0x04,0x2f,0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x31,0x19,0x05,0x02, +0x01,0x06,0x01,0x23,0x05,0x11,0x06,0x01,0x07,0x05,0x2f,0x06,0x01,0x01,0x26,0x06, +0x00,0x03,0x25,0x00,0x11,0x10,0x06,0x12,0x19,0x07,0x02,0x01,0x08,0x01,0x01,0x09, +0x06,0x24,0x07,0x25,0x00,0x02,0x11,0x06,0x01,0x05,0x06,0x25,0x00,0x84,0x10,0x05, +0x05,0x01,0x06,0x04,0x2f,0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x2e,0x19, +0x05,0x02,0x01,0x06,0x01,0x23,0x05,0x10,0x06,0x06,0x01,0x07,0x05,0x2f,0x06,0x01, +0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x0d,0x19,0x06,0x02,0x01,0x07,0x01,0x2f,0x06, +0x0e,0x01,0x25,0x00,0x02,0x11,0x06,0x01,0x05,0x06,0x25,0x00,0x45,0x10,0x05,0x13, +0x01,0x06,0x04,0x2f,0x05,0x01,0x01,0x26,0x05,0x00,0x03,0x25,0x00,0x32,0x19,0x05, +0x02,0x01,0x06,0x01,0x23,0x05,0x10,0x06,0x12,0x01,0x07,0x05,0x2f,0x06,0x01,0x01, +0x26,0x06,0x00,0x03,0x25,0x00,0x11,0x10,0x06,0x06,0x19,0x07,0x02,0x01,0x08,0x01, +0x01,0x09,0x06,0x24,0x07,0x25,0x00,0x02,0x11,0x06,0x01,0x05,0x06,0x25,0x00,0x02, +0x11,0x05,0x01,0x04,0x05,0x38,0x04,0x00,0x00,0x00,0x14,0x00,0x05,0x70,0x72,0x65, +0x73,0x73,0x00,0x00,0x03,0x3d,0x3d,0x3d,0x00,0x00,0x0b,0x40,0x6b,0x65,0x79,0x5f, +0x73,0x74,0x61,0x74,0x65,0x73,0x00,0x00,0x08,0x72,0x65,0x6c,0x65,0x61,0x73,0x65, +0x64,0x00,0x00,0x0b,0x77,0x61,0x69,0x74,0x5f,0x6e,0x6f,0x74,0x65,0x6f,0x6e,0x00, +0x00,0x07,0x72,0x65,0x6c,0x65,0x61,0x73,0x65,0x00,0x00,0x07,0x70,0x72,0x65,0x73, +0x73,0x65,0x64,0x00,0x00,0x0c,0x77,0x61,0x69,0x74,0x5f,0x6e,0x6f,0x74,0x65,0x6f, +0x66,0x66,0x00,0x00,0x06,0x6e,0x6f,0x74,0x65,0x6f,0x6e,0x00,0x00,0x07,0x6e,0x6f, +0x74,0x65,0x6f,0x66,0x66,0x00,0x00,0x07,0x4b,0x45,0x59,0x43,0x4f,0x44,0x45,0x00, +0x00,0x06,0x4d,0x49,0x5f,0x42,0x4e,0x44,0x00,0x00,0x04,0x64,0x6f,0x77,0x6e,0x00, +0x00,0x10,0x70,0x72,0x65,0x73,0x73,0x5f,0x62,0x65,0x6e,0x64,0x5f,0x65,0x76,0x65, +0x6e,0x74,0x00,0x00,0x06,0x64,0x65,0x6c,0x65,0x74,0x65,0x00,0x00,0x12,0x72,0x65, +0x6c,0x65,0x61,0x73,0x65,0x5f,0x62,0x65,0x6e,0x64,0x5f,0x65,0x76,0x65,0x6e,0x74, +0x00,0x00,0x07,0x4d,0x49,0x5f,0x42,0x4e,0x44,0x55,0x00,0x00,0x02,0x75,0x70,0x00, +0x00,0x0c,0x77,0x61,0x69,0x74,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x00,0x00, +0x0a,0x64,0x6f,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x00,0x00,0x00,0x07,0x33, +0x00,0x05,0x00,0x0a,0x00,0x01,0x00,0x00,0x00,0x00,0x04,0xc4,0x34,0x08,0x00,0x00, +0x01,0x05,0x01,0x1d,0x06,0x00,0x10,0x07,0x01,0x23,0x06,0x01,0x07,0x05,0x2f,0x06, +0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x08,0x06,0x06,0x1a,0x06,0x03,0x25,0x04, +0x9a,0x1d,0x06,0x00,0x10,0x07,0x04,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01, +0x26,0x06,0x00,0x03,0x25,0x00,0x26,0x19,0x06,0x03,0x07,0x07,0x3e,0x06,0x04,0x07, +0x02,0x43,0x06,0x27,0x06,0x00,0x07,0x11,0x06,0x38,0x06,0x25,0x00,0x02,0x11,0x06, +0x19,0x06,0x03,0x07,0x07,0x3e,0x06,0x1a,0x06,0x03,0x25,0x04,0x5e,0x1d,0x06,0x00, +0x10,0x07,0x05,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03, +0x25,0x00,0x25,0x19,0x06,0x03,0x07,0x07,0x3c,0x06,0x0d,0x07,0x45,0x06,0x27,0x06, +0x00,0x07,0x11,0x06,0x38,0x06,0x25,0x00,0x02,0x11,0x06,0x19,0x06,0x03,0x07,0x07, +0x3c,0x06,0x1a,0x06,0x03,0x25,0x04,0x23,0x1d,0x06,0x00,0x10,0x07,0x06,0x23,0x06, +0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x08,0x06,0x06, +0x1a,0x06,0x07,0x25,0x04,0x05,0x1d,0x06,0x00,0x10,0x07,0x08,0x23,0x06,0x01,0x07, +0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x26,0x19,0x06,0x07,0x07, +0x07,0x3e,0x06,0x04,0x07,0x06,0x43,0x06,0x27,0x06,0x00,0x07,0x11,0x06,0x38,0x06, +0x25,0x00,0x02,0x11,0x06,0x19,0x06,0x07,0x07,0x07,0x3e,0x06,0x1a,0x06,0x07,0x25, +0x03,0xc9,0x1d,0x06,0x00,0x10,0x07,0x09,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02, +0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x25,0x19,0x06,0x07,0x07,0x07,0x3c,0x06,0x0c, +0x07,0x45,0x06,0x27,0x06,0x00,0x07,0x11,0x06,0x38,0x06,0x25,0x00,0x02,0x11,0x06, +0x19,0x06,0x07,0x07,0x07,0x3c,0x06,0x1a,0x06,0x07,0x25,0x03,0x8e,0x1d,0x06,0x00, +0x10,0x07,0x0a,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03, +0x25,0x00,0x08,0x0c,0x06,0x1a,0x06,0x0b,0x25,0x03,0x70,0x1d,0x06,0x00,0x10,0x07, +0x0c,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00, +0x25,0x19,0x06,0x0b,0x07,0x07,0x3e,0x06,0x06,0x07,0x43,0x06,0x27,0x06,0x00,0x07, +0x11,0x06,0x38,0x06,0x25,0x00,0x02,0x11,0x06,0x19,0x06,0x0b,0x07,0x07,0x3e,0x06, +0x1a,0x06,0x0b,0x25,0x03,0x35,0x1d,0x06,0x00,0x10,0x07,0x0d,0x23,0x06,0x01,0x07, +0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x26,0x19,0x06,0x0b,0x07, +0x07,0x3c,0x06,0x03,0x07,0x0a,0x45,0x06,0x27,0x06,0x00,0x07,0x11,0x06,0x38,0x06, +0x25,0x00,0x02,0x11,0x06,0x19,0x06,0x0b,0x07,0x07,0x3c,0x06,0x1a,0x06,0x0b,0x25, +0x02,0xf9,0x1d,0x06,0x00,0x10,0x07,0x0e,0x23,0x06,0x1d,0x07,0x00,0x10,0x08,0x0f, +0x23,0x07,0x59,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25, +0x00,0x1f,0x01,0x06,0x01,0x03,0x07,0x71,0x3e,0x06,0x1a,0x06,0x10,0x51,0x07,0x00, +0x19,0x08,0x10,0x52,0x07,0x51,0x08,0x01,0x52,0x07,0x2d,0x06,0x11,0x01,0x25,0x02, +0xba,0x1d,0x06,0x00,0x10,0x07,0x12,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01, +0x26,0x06,0x00,0x03,0x25,0x00,0x20,0x06,0x06,0x1a,0x06,0x13,0x19,0x07,0x13,0x2d, +0x06,0x14,0x01,0x51,0x07,0x02,0x19,0x08,0x13,0x52,0x07,0x51,0x08,0x01,0x52,0x07, +0x2d,0x06,0x11,0x01,0x25,0x02,0x84,0x1d,0x06,0x00,0x10,0x07,0x15,0x23,0x06,0x01, +0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x43,0x19,0x06,0x13, +0x07,0x07,0x3e,0x06,0x06,0x07,0x43,0x06,0x27,0x06,0x00,0x0f,0x19,0x06,0x13,0x03, +0x07,0x80,0x3c,0x06,0x07,0x07,0x3e,0x06,0x25,0x00,0x07,0x19,0x06,0x13,0x07,0x07, +0x3e,0x06,0x1a,0x06,0x13,0x19,0x07,0x13,0x2d,0x06,0x14,0x01,0x51,0x07,0x02,0x19, +0x08,0x13,0x52,0x07,0x51,0x08,0x01,0x52,0x07,0x2d,0x06,0x11,0x01,0x25,0x02,0x2b, +0x1d,0x06,0x00,0x10,0x07,0x16,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26, +0x06,0x00,0x03,0x25,0x00,0x44,0x19,0x06,0x13,0x07,0x07,0x3c,0x06,0x03,0x07,0x80, +0x45,0x06,0x27,0x06,0x00,0x0f,0x19,0x06,0x13,0x07,0x07,0x3c,0x06,0x03,0x07,0x80, +0x3e,0x06,0x25,0x00,0x07,0x19,0x06,0x13,0x07,0x07,0x3c,0x06,0x1a,0x06,0x13,0x19, +0x07,0x13,0x2d,0x06,0x14,0x01,0x51,0x07,0x02,0x19,0x08,0x13,0x52,0x07,0x51,0x08, +0x01,0x52,0x07,0x2d,0x06,0x11,0x01,0x25,0x01,0xd1,0x1d,0x06,0x00,0x10,0x07,0x17, +0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x11, +0x06,0x06,0x03,0x07,0x80,0x59,0x06,0x57,0x07,0x00,0x30,0x06,0x18,0x00,0x25,0x01, +0xaa,0x1d,0x06,0x00,0x10,0x07,0x19,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01, +0x26,0x06,0x00,0x03,0x25,0x00,0x2b,0x19,0x06,0x1a,0x2f,0x06,0x1b,0x00,0x1a,0x06, +0x1a,0x51,0x07,0x03,0x19,0x08,0x1a,0x27,0x08,0x00,0x06,0x51,0x08,0x04,0x25,0x00, +0x03,0x51,0x08,0x05,0x52,0x07,0x51,0x08,0x01,0x52,0x07,0x2d,0x06,0x11,0x01,0x25, +0x01,0x69,0x1d,0x06,0x00,0x10,0x07,0x1c,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02, +0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x0f,0x13,0x06,0x1a,0x06,0x1a,0x51,0x07,0x06, +0x2d,0x06,0x11,0x01,0x25,0x01,0x44,0x1d,0x06,0x00,0x10,0x07,0x1d,0x23,0x06,0x01, +0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x0f,0x14,0x06,0x1a, +0x06,0x1a,0x51,0x07,0x07,0x2d,0x06,0x11,0x01,0x25,0x01,0x1f,0x1d,0x06,0x00,0x10, +0x07,0x1e,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25, +0x00,0x50,0x1d,0x06,0x1f,0x2f,0x06,0x20,0x00,0x19,0x07,0x21,0x2f,0x06,0x22,0x01, +0x01,0x04,0x06,0x27,0x06,0x00,0x27,0x1d,0x06,0x1f,0x2f,0x06,0x20,0x00,0x01,0x07, +0x04,0x07,0x08,0x3c,0x07,0x23,0x06,0x1a,0x06,0x21,0x51,0x07,0x08,0x19,0x08,0x21, +0x52,0x07,0x51,0x08,0x01,0x52,0x07,0x2d,0x06,0x11,0x01,0x25,0x00,0x11,0x51,0x07, +0x09,0x19,0x08,0x21,0x52,0x07,0x51,0x08,0x01,0x52,0x07,0x2d,0x06,0x11,0x01,0x25, +0x00,0xb9,0x1d,0x06,0x00,0x10,0x07,0x23,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02, +0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x50,0x1d,0x06,0x1f,0x2f,0x06,0x20,0x00,0x19, +0x07,0x21,0x2f,0x06,0x22,0x01,0x01,0x04,0x06,0x27,0x06,0x00,0x27,0x1d,0x06,0x1f, +0x2f,0x06,0x20,0x00,0x01,0x07,0x04,0x07,0x08,0x3e,0x07,0x23,0x06,0x1a,0x06,0x21, +0x51,0x07,0x08,0x19,0x08,0x21,0x52,0x07,0x51,0x08,0x01,0x52,0x07,0x2d,0x06,0x11, +0x01,0x25,0x00,0x11,0x51,0x07,0x09,0x19,0x08,0x21,0x52,0x07,0x51,0x08,0x01,0x52, +0x07,0x2d,0x06,0x11,0x01,0x25,0x00,0x53,0x1d,0x06,0x00,0x10,0x07,0x24,0x23,0x06, +0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x05,0x11,0x06, +0x25,0x00,0x38,0x1d,0x06,0x00,0x10,0x07,0x25,0x23,0x06,0x01,0x07,0x05,0x2f,0x06, +0x02,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x05,0x11,0x06,0x25,0x00,0x1d,0x1d,0x06, +0x00,0x10,0x07,0x26,0x23,0x06,0x01,0x07,0x05,0x2f,0x06,0x02,0x01,0x26,0x06,0x00, +0x03,0x25,0x00,0x05,0x11,0x06,0x25,0x00,0x02,0x11,0x06,0x01,0x05,0x06,0x38,0x05, +0x00,0x0a,0x00,0x00,0x0e,0x73,0x65,0x74,0x20,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c, +0x20,0x3d,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x73,0x65,0x74,0x20,0x70, +0x72,0x6f,0x67,0x72,0x61,0x6d,0x5f,0x6e,0x6f,0x20,0x3d,0x20,0x00,0x00,0x00,0x0f, +0x73,0x65,0x74,0x20,0x63,0x68,0x6f,0x72,0x64,0x20,0x6d,0x6f,0x64,0x65,0x20,0x00, +0x00,0x00,0x02,0x6f,0x6e,0x00,0x00,0x00,0x03,0x6f,0x66,0x66,0x00,0x00,0x00,0x11, +0x73,0x65,0x74,0x20,0x63,0x68,0x6f,0x72,0x64,0x20,0x6d,0x6f,0x64,0x65,0x20,0x6f, +0x6e,0x00,0x00,0x00,0x12,0x73,0x65,0x74,0x20,0x63,0x68,0x6f,0x72,0x64,0x20,0x6d, +0x6f,0x64,0x65,0x20,0x6f,0x66,0x66,0x00,0x00,0x00,0x14,0x73,0x65,0x74,0x20,0x63, +0x68,0x6f,0x72,0x64,0x5f,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x20,0x3d,0x20,0x00, +0x00,0x00,0x18,0x75,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x20,0x63,0x68,0x6f,0x72,0x64, +0x5f,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x20,0x3d,0x20,0x00,0x00,0x27,0x00,0x07, +0x4b,0x45,0x59,0x43,0x4f,0x44,0x45,0x00,0x00,0x06,0x4d,0x49,0x5f,0x4f,0x43,0x30, +0x00,0x00,0x03,0x3d,0x3d,0x3d,0x00,0x00,0x0e,0x40,0x6f,0x63,0x74,0x61,0x76,0x65, +0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x07,0x4d,0x49,0x5f,0x4f,0x43,0x54, +0x44,0x00,0x00,0x07,0x4d,0x49,0x5f,0x4f,0x43,0x54,0x55,0x00,0x00,0x06,0x4d,0x49, +0x5f,0x54,0x52,0x30,0x00,0x00,0x11,0x40,0x74,0x72,0x61,0x6e,0x73,0x70,0x6f,0x73, +0x65,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x07,0x4d,0x49,0x5f,0x54,0x52, +0x53,0x44,0x00,0x00,0x07,0x4d,0x49,0x5f,0x54,0x52,0x53,0x55,0x00,0x00,0x06,0x4d, +0x49,0x5f,0x56,0x4c,0x36,0x00,0x00,0x10,0x40,0x76,0x65,0x6c,0x6f,0x63,0x69,0x74, +0x79,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x07,0x4d,0x49,0x5f,0x56,0x45, +0x4c,0x44,0x00,0x00,0x07,0x4d,0x49,0x5f,0x56,0x45,0x4c,0x55,0x00,0x00,0x06,0x4d, +0x49,0x5f,0x43,0x48,0x31,0x00,0x00,0x07,0x4d,0x49,0x5f,0x43,0x48,0x31,0x36,0x00, +0x00,0x08,0x40,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x00,0x00,0x04,0x70,0x75,0x74, +0x73,0x00,0x00,0x07,0x4d,0x49,0x5f,0x50,0x52,0x47,0x30,0x00,0x00,0x0b,0x40,0x70, +0x72,0x6f,0x67,0x72,0x61,0x6d,0x5f,0x6e,0x6f,0x00,0x00,0x07,0x73,0x65,0x6e,0x64, +0x5f,0x70,0x63,0x00,0x00,0x07,0x4d,0x49,0x5f,0x50,0x52,0x47,0x44,0x00,0x00,0x07, +0x4d,0x49,0x5f,0x50,0x52,0x47,0x55,0x00,0x00,0x07,0x4d,0x49,0x5f,0x41,0x4f,0x46, +0x46,0x00,0x00,0x04,0x65,0x61,0x63,0x68,0x00,0x00,0x09,0x4d,0x49,0x5f,0x43,0x52, +0x44,0x54,0x47,0x4c,0x00,0x00,0x0b,0x40,0x63,0x68,0x6f,0x72,0x64,0x5f,0x6d,0x6f, +0x64,0x65,0x00,0x00,0x01,0x21,0x00,0x00,0x08,0x4d,0x49,0x5f,0x43,0x52,0x44,0x4f, +0x4e,0x00,0x00,0x09,0x4d,0x49,0x5f,0x43,0x52,0x44,0x4f,0x46,0x46,0x00,0x00,0x0a, +0x4d,0x49,0x5f,0x43,0x52,0x44,0x4e,0x50,0x54,0x4e,0x00,0x00,0x0e,0x43,0x48,0x4f, +0x52,0x44,0x5f,0x50,0x41,0x54,0x54,0x45,0x52,0x4e,0x53,0x00,0x00,0x04,0x6b,0x65, +0x79,0x73,0x00,0x00,0x0e,0x40,0x63,0x68,0x6f,0x72,0x64,0x5f,0x70,0x61,0x74,0x74, +0x65,0x72,0x6e,0x00,0x00,0x05,0x69,0x6e,0x64,0x65,0x78,0x00,0x00,0x0a,0x4d,0x49, +0x5f,0x43,0x52,0x44,0x50,0x50,0x54,0x4e,0x00,0x00,0x0a,0x4d,0x49,0x5f,0x41,0x52, +0x50,0x47,0x54,0x47,0x4c,0x00,0x00,0x09,0x4d,0x49,0x5f,0x41,0x52,0x50,0x47,0x4f, +0x4e,0x00,0x00,0x0a,0x4d,0x49,0x5f,0x41,0x52,0x50,0x47,0x4f,0x46,0x46,0x00,0x00, +0x00,0x00,0x2e,0x00,0x03,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x34, +0x04,0x00,0x00,0x01,0x04,0x01,0x11,0x05,0x2d,0x03,0x00,0x02,0x38,0x03,0x00,0x00, +0x00,0x01,0x00,0x08,0x6e,0x6f,0x74,0x65,0x5f,0x6f,0x66,0x66,0x00,0x00,0x00,0x01, +0x94,0x00,0x05,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc1,0x34,0x08,0x00, +0x00,0x01,0x05,0x02,0x26,0x05,0x00,0x0b,0x1d,0x05,0x00,0x19,0x06,0x01,0x23,0x05, +0x01,0x02,0x05,0x51,0x06,0x00,0x19,0x07,0x02,0x52,0x06,0x51,0x07,0x01,0x52,0x06, +0x01,0x07,0x01,0x52,0x06,0x51,0x07,0x02,0x52,0x06,0x01,0x07,0x02,0x52,0x06,0x51, +0x07,0x03,0x52,0x06,0x2d,0x05,0x03,0x01,0x01,0x05,0x01,0x06,0x06,0x43,0x05,0x26, +0x05,0x00,0x08,0x01,0x05,0x01,0x03,0x06,0x80,0x45,0x05,0x27,0x05,0x00,0x07,0x11, +0x05,0x38,0x05,0x25,0x00,0x02,0x11,0x05,0x01,0x05,0x02,0x06,0x06,0x43,0x05,0x26, +0x05,0x00,0x08,0x01,0x05,0x02,0x03,0x06,0x80,0x45,0x05,0x27,0x05,0x00,0x07,0x11, +0x05,0x38,0x05,0x25,0x00,0x02,0x11,0x05,0x01,0x05,0x01,0x19,0x06,0x04,0x03,0x07, +0x0c,0x40,0x06,0x3c,0x05,0x19,0x06,0x05,0x3c,0x05,0x01,0x04,0x05,0x19,0x05,0x06, +0x2f,0x05,0x07,0x00,0x03,0x06,0x40,0x44,0x05,0x27,0x05,0x00,0x1d,0x19,0x05,0x06, +0x1d,0x06,0x08,0x19,0x07,0x02,0x2f,0x06,0x09,0x01,0x01,0x07,0x04,0x01,0x08,0x02, +0x47,0x06,0x03,0x2f,0x05,0x0a,0x01,0x25,0x00,0x02,0x11,0x05,0x38,0x05,0x00,0x04, +0x00,0x00,0x11,0x6e,0x6f,0x74,0x65,0x2d,0x6f,0x6e,0x20,0x63,0x68,0x61,0x6e,0x6e, +0x65,0x6c,0x3a,0x20,0x00,0x00,0x00,0x0a,0x2c,0x20,0x6e,0x75,0x6d,0x62,0x65,0x72, +0x3a,0x20,0x00,0x00,0x00,0x0c,0x2c,0x20,0x76,0x65,0x6c,0x6f,0x63,0x69,0x74,0x79, +0x3a,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0x0f,0x56,0x45,0x4c,0x4f,0x43, +0x49,0x54,0x59,0x5f,0x56,0x41,0x4c,0x55,0x45,0x53,0x00,0x00,0x10,0x40,0x76,0x65, +0x6c,0x6f,0x63,0x69,0x74,0x79,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x08, +0x40,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x00,0x00,0x04,0x70,0x75,0x74,0x73,0x00, +0x00,0x0e,0x40,0x6f,0x63,0x74,0x61,0x76,0x65,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74, +0x00,0x00,0x11,0x40,0x74,0x72,0x61,0x6e,0x73,0x70,0x6f,0x73,0x65,0x5f,0x6f,0x66, +0x66,0x73,0x65,0x74,0x00,0x00,0x07,0x40,0x62,0x75,0x66,0x66,0x65,0x72,0x00,0x00, +0x06,0x6c,0x65,0x6e,0x67,0x74,0x68,0x00,0x00,0x0d,0x4e,0x4f,0x54,0x45,0x5f,0x4f, +0x4e,0x5f,0x45,0x56,0x45,0x4e,0x54,0x00,0x00,0x01,0x7c,0x00,0x00,0x02,0x3c,0x3c, +0x00,0x00,0x00,0x01,0x96,0x00,0x05,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xc1,0x34,0x08,0x00,0x00,0x01,0x05,0x02,0x26,0x05,0x00,0x0b,0x1d,0x05,0x00,0x19, +0x06,0x01,0x23,0x05,0x01,0x02,0x05,0x51,0x06,0x00,0x19,0x07,0x02,0x52,0x06,0x51, +0x07,0x01,0x52,0x06,0x01,0x07,0x01,0x52,0x06,0x51,0x07,0x02,0x52,0x06,0x01,0x07, +0x02,0x52,0x06,0x51,0x07,0x03,0x52,0x06,0x2d,0x05,0x03,0x01,0x01,0x05,0x01,0x06, +0x06,0x43,0x05,0x26,0x05,0x00,0x08,0x01,0x05,0x01,0x03,0x06,0x80,0x45,0x05,0x27, +0x05,0x00,0x07,0x11,0x05,0x38,0x05,0x25,0x00,0x02,0x11,0x05,0x01,0x05,0x02,0x06, +0x06,0x43,0x05,0x26,0x05,0x00,0x08,0x01,0x05,0x02,0x03,0x06,0x80,0x45,0x05,0x27, +0x05,0x00,0x07,0x11,0x05,0x38,0x05,0x25,0x00,0x02,0x11,0x05,0x01,0x05,0x01,0x19, +0x06,0x04,0x03,0x07,0x0c,0x40,0x06,0x3c,0x05,0x19,0x06,0x05,0x3c,0x05,0x01,0x04, +0x05,0x19,0x05,0x06,0x2f,0x05,0x07,0x00,0x03,0x06,0x40,0x44,0x05,0x27,0x05,0x00, +0x1d,0x19,0x05,0x06,0x1d,0x06,0x08,0x19,0x07,0x02,0x2f,0x06,0x09,0x01,0x01,0x07, +0x04,0x01,0x08,0x02,0x47,0x06,0x03,0x2f,0x05,0x0a,0x01,0x25,0x00,0x02,0x11,0x05, +0x38,0x05,0x00,0x04,0x00,0x00,0x12,0x6e,0x6f,0x74,0x65,0x2d,0x6f,0x66,0x66,0x20, +0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x3a,0x20,0x00,0x00,0x00,0x0a,0x2c,0x20,0x6e, +0x75,0x6d,0x62,0x65,0x72,0x3a,0x20,0x00,0x00,0x00,0x0c,0x2c,0x20,0x76,0x65,0x6c, +0x6f,0x63,0x69,0x74,0x79,0x3a,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x00,0x0f, +0x56,0x45,0x4c,0x4f,0x43,0x49,0x54,0x59,0x5f,0x56,0x41,0x4c,0x55,0x45,0x53,0x00, +0x00,0x10,0x40,0x76,0x65,0x6c,0x6f,0x63,0x69,0x74,0x79,0x5f,0x6f,0x66,0x66,0x73, +0x65,0x74,0x00,0x00,0x08,0x40,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x00,0x00,0x04, +0x70,0x75,0x74,0x73,0x00,0x00,0x0e,0x40,0x6f,0x63,0x74,0x61,0x76,0x65,0x5f,0x6f, +0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x11,0x40,0x74,0x72,0x61,0x6e,0x73,0x70,0x6f, +0x73,0x65,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x00,0x00,0x07,0x40,0x62,0x75,0x66, +0x66,0x65,0x72,0x00,0x00,0x06,0x6c,0x65,0x6e,0x67,0x74,0x68,0x00,0x00,0x0e,0x4e, +0x4f,0x54,0x45,0x5f,0x4f,0x46,0x46,0x5f,0x45,0x56,0x45,0x4e,0x54,0x00,0x00,0x01, +0x7c,0x00,0x00,0x02,0x3c,0x3c,0x00,0x00,0x00,0x00,0xfd,0x00,0x02,0x00,0x08,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x34,0x00,0x00,0x00,0x51,0x03,0x00,0x19,0x04, +0x00,0x52,0x03,0x51,0x04,0x01,0x52,0x03,0x19,0x04,0x01,0x52,0x03,0x51,0x04,0x02, +0x52,0x03,0x2d,0x02,0x02,0x01,0x19,0x02,0x03,0x2f,0x02,0x04,0x00,0x03,0x03,0x40, +0x44,0x02,0x27,0x02,0x00,0x31,0x19,0x02,0x03,0x1d,0x03,0x05,0x19,0x04,0x00,0x2f, +0x03,0x06,0x01,0x19,0x04,0x01,0x03,0x05,0x7f,0x2f,0x04,0x07,0x01,0x19,0x05,0x01, +0x0d,0x06,0x2f,0x05,0x08,0x01,0x03,0x06,0x7f,0x2f,0x05,0x07,0x01,0x47,0x03,0x03, +0x2f,0x02,0x09,0x01,0x25,0x00,0x02,0x11,0x02,0x38,0x02,0x00,0x03,0x00,0x00,0x18, +0x73,0x65,0x6e,0x64,0x2d,0x70,0x69,0x74,0x63,0x68,0x62,0x65,0x6e,0x64,0x20,0x63, +0x68,0x61,0x6e,0x6e,0x65,0x6c,0x3a,0x20,0x00,0x00,0x00,0x09,0x2c,0x20,0x76,0x61, +0x6c,0x75,0x65,0x3a,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x08,0x40,0x63, +0x68,0x61,0x6e,0x6e,0x65,0x6c,0x00,0x00,0x0b,0x40,0x62,0x65,0x6e,0x64,0x5f,0x76, +0x61,0x6c,0x75,0x65,0x00,0x00,0x04,0x70,0x75,0x74,0x73,0x00,0x00,0x07,0x40,0x62, +0x75,0x66,0x66,0x65,0x72,0x00,0x00,0x06,0x6c,0x65,0x6e,0x67,0x74,0x68,0x00,0x00, +0x10,0x50,0x49,0x54,0x43,0x48,0x5f,0x42,0x45,0x4e,0x44,0x5f,0x45,0x56,0x45,0x4e, +0x54,0x00,0x00,0x01,0x7c,0x00,0x00,0x01,0x26,0x00,0x00,0x02,0x3e,0x3e,0x00,0x00, +0x02,0x3c,0x3c,0x00,0x00,0x00,0x00,0xed,0x00,0x03,0x00,0x07,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x6d,0x34,0x04,0x00,0x00,0x51,0x04,0x00,0x19,0x05,0x00,0x52,0x04, +0x51,0x05,0x01,0x52,0x04,0x01,0x05,0x01,0x52,0x04,0x51,0x05,0x02,0x52,0x04,0x2d, +0x03,0x01,0x01,0x01,0x03,0x01,0x06,0x04,0x43,0x03,0x26,0x03,0x00,0x08,0x01,0x03, +0x01,0x03,0x04,0x80,0x45,0x03,0x27,0x03,0x00,0x07,0x11,0x03,0x38,0x03,0x25,0x00, +0x02,0x11,0x03,0x19,0x03,0x02,0x2f,0x03,0x03,0x00,0x03,0x04,0x40,0x44,0x03,0x27, +0x03,0x00,0x1a,0x19,0x03,0x02,0x1d,0x04,0x04,0x19,0x05,0x00,0x2f,0x04,0x05,0x01, +0x01,0x05,0x01,0x47,0x04,0x02,0x2f,0x03,0x06,0x01,0x25,0x00,0x02,0x11,0x03,0x38, +0x03,0x00,0x03,0x00,0x00,0x11,0x73,0x65,0x6e,0x64,0x2d,0x70,0x63,0x20,0x63,0x68, +0x61,0x6e,0x6e,0x65,0x6c,0x3a,0x20,0x00,0x00,0x00,0x0a,0x2c,0x20,0x6e,0x75,0x6d, +0x62,0x65,0x72,0x3a,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x08,0x40,0x63, +0x68,0x61,0x6e,0x6e,0x65,0x6c,0x00,0x00,0x04,0x70,0x75,0x74,0x73,0x00,0x00,0x07, +0x40,0x62,0x75,0x66,0x66,0x65,0x72,0x00,0x00,0x06,0x6c,0x65,0x6e,0x67,0x74,0x68, +0x00,0x00,0x14,0x50,0x52,0x4f,0x47,0x52,0x41,0x4d,0x5f,0x43,0x48,0x41,0x4e,0x47, +0x45,0x5f,0x45,0x56,0x45,0x4e,0x54,0x00,0x00,0x01,0x7c,0x00,0x00,0x02,0x3c,0x3c, +0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x85,0x34,0x08,0x00,0x00,0x51,0x05,0x00,0x19,0x06,0x00,0x52,0x05,0x51,0x06,0x01, +0x52,0x05,0x01,0x06,0x01,0x52,0x05,0x51,0x06,0x02,0x52,0x05,0x01,0x06,0x02,0x52, +0x05,0x51,0x06,0x03,0x52,0x05,0x2d,0x04,0x01,0x01,0x01,0x04,0x01,0x06,0x05,0x43, +0x04,0x26,0x04,0x00,0x08,0x01,0x04,0x01,0x03,0x05,0x80,0x45,0x04,0x27,0x04,0x00, +0x07,0x11,0x04,0x38,0x04,0x25,0x00,0x02,0x11,0x04,0x01,0x04,0x02,0x06,0x05,0x43, +0x04,0x26,0x04,0x00,0x08,0x01,0x04,0x02,0x03,0x05,0x80,0x45,0x04,0x27,0x04,0x00, +0x07,0x11,0x04,0x38,0x04,0x25,0x00,0x02,0x11,0x04,0x19,0x04,0x02,0x1d,0x05,0x03, +0x19,0x06,0x00,0x2f,0x05,0x04,0x01,0x01,0x06,0x01,0x01,0x07,0x02,0x47,0x05,0x03, +0x2f,0x04,0x05,0x01,0x38,0x04,0x00,0x04,0x00,0x00,0x11,0x73,0x65,0x6e,0x64,0x2d, +0x63,0x63,0x20,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x3a,0x20,0x00,0x00,0x00,0x0a, +0x2c,0x20,0x6e,0x75,0x6d,0x62,0x65,0x72,0x3a,0x20,0x00,0x00,0x00,0x09,0x2c,0x20, +0x76,0x61,0x6c,0x75,0x65,0x3a,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08, +0x40,0x63,0x68,0x61,0x6e,0x6e,0x65,0x6c,0x00,0x00,0x04,0x70,0x75,0x74,0x73,0x00, +0x00,0x07,0x40,0x62,0x75,0x66,0x66,0x65,0x72,0x00,0x00,0x14,0x43,0x4f,0x4e,0x54, +0x52,0x4f,0x4c,0x5f,0x43,0x48,0x41,0x4e,0x47,0x45,0x5f,0x45,0x56,0x45,0x4e,0x54, +0x00,0x00,0x01,0x7c,0x00,0x00,0x02,0x3c,0x3c,0x00,0x00,0x00,0x00,0x71,0x00,0x02, +0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x28,0x34,0x00,0x00,0x00,0x1d,0x02, +0x00,0x2f,0x02,0x01,0x00,0x19,0x02,0x02,0x57,0x03,0x00,0x30,0x02,0x03,0x00,0x19, +0x02,0x04,0x57,0x03,0x01,0x30,0x02,0x03,0x00,0x19,0x02,0x04,0x2f,0x02,0x05,0x00, +0x38,0x02,0x00,0x00,0x00,0x06,0x00,0x04,0x4d,0x49,0x44,0x49,0x00,0x00,0x04,0x69, +0x6e,0x69,0x74,0x00,0x00,0x0b,0x40,0x6b,0x65,0x79,0x5f,0x73,0x74,0x61,0x74,0x65, +0x73,0x00,0x00,0x04,0x65,0x61,0x63,0x68,0x00,0x00,0x07,0x40,0x62,0x75,0x66,0x66, +0x65,0x72,0x00,0x00,0x05,0x63,0x6c,0x65,0x61,0x72,0x00,0x00,0x00,0x01,0xb6,0x00, +0x05,0x00,0x0a,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xce,0x34,0x08,0x00,0x00,0x01, +0x05,0x02,0x10,0x06,0x00,0x01,0x07,0x05,0x2f,0x06,0x01,0x01,0x26,0x06,0x00,0x03, +0x25,0x00,0x3b,0x1d,0x06,0x02,0x01,0x07,0x01,0x2f,0x06,0x03,0x01,0x01,0x04,0x06, +0x19,0x06,0x04,0x27,0x06,0x00,0x11,0x01,0x07,0x04,0x2d,0x06,0x05,0x01,0x57,0x07, +0x00,0x30,0x06,0x06,0x00,0x25,0x00,0x09,0x01,0x07,0x04,0x11,0x08,0x2d,0x06,0x07, +0x02,0x01,0x07,0x01,0x10,0x08,0x08,0x2d,0x06,0x09,0x02,0x25,0x00,0x76,0x10,0x06, +0x0a,0x01,0x07,0x05,0x2f,0x06,0x01,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x3b,0x1d, +0x06,0x02,0x01,0x07,0x01,0x2f,0x06,0x03,0x01,0x01,0x04,0x06,0x19,0x06,0x04,0x27, +0x06,0x00,0x11,0x01,0x07,0x04,0x2d,0x06,0x05,0x01,0x57,0x07,0x01,0x30,0x06,0x06, +0x00,0x25,0x00,0x09,0x01,0x07,0x04,0x11,0x08,0x2d,0x06,0x0b,0x02,0x01,0x07,0x01, +0x10,0x08,0x0c,0x2d,0x06,0x09,0x02,0x25,0x00,0x2a,0x10,0x06,0x0d,0x01,0x07,0x05, +0x2f,0x06,0x01,0x01,0x26,0x06,0x00,0x03,0x25,0x00,0x17,0x01,0x07,0x01,0x53,0x08, +0x00,0x2d,0x06,0x0e,0x02,0x01,0x07,0x01,0x10,0x08,0x0f,0x2d,0x06,0x09,0x02,0x25, +0x00,0x02,0x11,0x06,0x01,0x05,0x06,0x38,0x05,0x00,0x00,0x00,0x10,0x00,0x0b,0x77, +0x61,0x69,0x74,0x5f,0x6e,0x6f,0x74,0x65,0x6f,0x6e,0x00,0x00,0x03,0x3d,0x3d,0x3d, +0x00,0x00,0x04,0x4d,0x49,0x44,0x49,0x00,0x00,0x16,0x6b,0x65,0x79,0x63,0x6f,0x64, +0x65,0x5f,0x74,0x6f,0x5f,0x6e,0x6f,0x74,0x65,0x5f,0x6e,0x75,0x6d,0x62,0x65,0x72, +0x00,0x00,0x0b,0x40,0x63,0x68,0x6f,0x72,0x64,0x5f,0x6d,0x6f,0x64,0x65,0x00,0x00, +0x14,0x63,0x6f,0x6e,0x76,0x65,0x72,0x74,0x5f,0x6e,0x6f,0x74,0x65,0x5f,0x70,0x61, +0x74,0x74,0x65,0x72,0x6e,0x00,0x00,0x04,0x65,0x61,0x63,0x68,0x00,0x00,0x07,0x6e, +0x6f,0x74,0x65,0x5f,0x6f,0x6e,0x00,0x00,0x06,0x6e,0x6f,0x74,0x65,0x6f,0x6e,0x00, +0x00,0x0c,0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x65,0x76,0x65,0x6e,0x74,0x00,0x00, +0x0c,0x77,0x61,0x69,0x74,0x5f,0x6e,0x6f,0x74,0x65,0x6f,0x66,0x66,0x00,0x00,0x08, +0x6e,0x6f,0x74,0x65,0x5f,0x6f,0x66,0x66,0x00,0x00,0x07,0x6e,0x6f,0x74,0x65,0x6f, +0x66,0x66,0x00,0x00,0x0c,0x77,0x61,0x69,0x74,0x5f,0x72,0x65,0x71,0x75,0x65,0x73, +0x74,0x00,0x00,0x0f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x72,0x65,0x71,0x75, +0x65,0x73,0x74,0x00,0x00,0x0a,0x64,0x6f,0x5f,0x72,0x65,0x71,0x75,0x65,0x73,0x74, +0x00,0x00,0x00,0x00,0x2d,0x00,0x03,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x0f,0x34,0x04,0x00,0x00,0x01,0x04,0x01,0x11,0x05,0x2d,0x03,0x00,0x02,0x38,0x03, +0x00,0x00,0x00,0x01,0x00,0x07,0x6e,0x6f,0x74,0x65,0x5f,0x6f,0x6e,0x00,0x00,0x00, +0x00,0x2e,0x00,0x03,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x34,0x04, +0x00,0x00,0x01,0x04,0x01,0x11,0x05,0x2d,0x03,0x00,0x02,0x38,0x03,0x00,0x00,0x00, +0x01,0x00,0x08,0x6e,0x6f,0x74,0x65,0x5f,0x6f,0x66,0x66,0x00,0x00,0x00,0x00,0x33, +0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x34,0x04,0x00,0x00, +0x1d,0x03,0x00,0x01,0x04,0x01,0x2f,0x03,0x01,0x01,0x38,0x03,0x00,0x00,0x00,0x02, +0x00,0x04,0x4d,0x49,0x44,0x49,0x00,0x00,0x05,0x77,0x72,0x69,0x74,0x65,0x00,0x00, +0x00,0x00,0xec,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x34, +0x04,0x00,0x00,0x01,0x03,0x01,0x10,0x04,0x00,0x42,0x03,0x27,0x03,0x00,0x28,0x19, +0x03,0x01,0x19,0x04,0x02,0x3c,0x03,0x1d,0x04,0x03,0x45,0x03,0x27,0x03,0x00,0x09, +0x1d,0x03,0x03,0x1a,0x03,0x01,0x25,0x00,0x0b,0x19,0x03,0x01,0x19,0x04,0x02,0x3c, +0x03,0x1a,0x03,0x01,0x25,0x00,0x36,0x01,0x03,0x01,0x10,0x04,0x04,0x42,0x03,0x27, +0x03,0x00,0x28,0x19,0x03,0x01,0x19,0x04,0x02,0x3e,0x03,0x1d,0x04,0x05,0x43,0x03, +0x27,0x03,0x00,0x09,0x1d,0x03,0x05,0x1a,0x03,0x01,0x25,0x00,0x0b,0x19,0x03,0x01, +0x19,0x04,0x02,0x3e,0x03,0x1a,0x03,0x01,0x25,0x00,0x02,0x11,0x03,0x2d,0x03,0x06, +0x00,0x38,0x03,0x00,0x00,0x00,0x07,0x00,0x02,0x75,0x70,0x00,0x00,0x0b,0x40,0x62, +0x65,0x6e,0x64,0x5f,0x76,0x61,0x6c,0x75,0x65,0x00,0x00,0x0a,0x40,0x62,0x65,0x6e, +0x64,0x5f,0x73,0x74,0x65,0x70,0x00,0x00,0x13,0x4d,0x41,0x58,0x5f,0x50,0x49,0x54, +0x43,0x48,0x42,0x45,0x4e,0x44,0x5f,0x56,0x41,0x4c,0x55,0x45,0x00,0x00,0x04,0x64, +0x6f,0x77,0x6e,0x00,0x00,0x13,0x4d,0x49,0x4e,0x5f,0x50,0x49,0x54,0x43,0x48,0x42, +0x45,0x4e,0x44,0x5f,0x56,0x41,0x4c,0x55,0x45,0x00,0x00,0x0e,0x73,0x65,0x6e,0x64, +0x5f,0x70,0x69,0x74,0x63,0x68,0x62,0x65,0x6e,0x64,0x00,0x00,0x00,0x00,0x48,0x00, +0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x34,0x00,0x00,0x00,0x1d, +0x02,0x01,0x1a,0x02,0x00,0x38,0x02,0x00,0x00,0x00,0x02,0x00,0x0b,0x40,0x62,0x65, +0x6e,0x64,0x5f,0x76,0x61,0x6c,0x75,0x65,0x00,0x00,0x17,0x44,0x45,0x46,0x41,0x55, +0x4c,0x54,0x5f,0x50,0x49,0x54,0x43,0x48,0x42,0x45,0x4e,0x44,0x5f,0x56,0x41,0x4c, +0x55,0x45,0x00,0x00,0x00,0x00,0x66,0x00,0x03,0x00,0x06,0x00,0x01,0x00,0x00,0x00, +0x00,0x00,0x2a,0x34,0x04,0x00,0x00,0x1d,0x03,0x00,0x19,0x04,0x01,0x23,0x03,0x27, +0x03,0x00,0x12,0x1d,0x03,0x00,0x19,0x04,0x01,0x23,0x03,0x57,0x04,0x00,0x30,0x03, +0x02,0x00,0x25,0x00,0x06,0x01,0x03,0x01,0x47,0x03,0x01,0x38,0x03,0x00,0x00,0x00, +0x03,0x00,0x0e,0x43,0x48,0x4f,0x52,0x44,0x5f,0x50,0x41,0x54,0x54,0x45,0x52,0x4e, +0x53,0x00,0x00,0x0e,0x40,0x63,0x68,0x6f,0x72,0x64,0x5f,0x70,0x61,0x74,0x74,0x65, +0x72,0x6e,0x00,0x00,0x03,0x6d,0x61,0x70,0x00,0x00,0x00,0x00,0x27,0x00,0x03,0x00, +0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x34,0x04,0x00,0x00,0x21,0x03,0x01, +0x00,0x01,0x04,0x01,0x3c,0x03,0x07,0x04,0x3e,0x03,0x38,0x03,0x00,0x00,0x00,0x00, +0x45,0x4e,0x44,0x00,0x00,0x00,0x00,0x08, +}; \ No newline at end of file diff --git a/test/models/midi.rb b/test/models/midi.rb new file mode 120000 index 00000000..92892996 --- /dev/null +++ b/test/models/midi.rb @@ -0,0 +1 @@ +../../lib/picoruby/mrbgems/picoruby-prk-midi/mrblib/midi.rb \ No newline at end of file diff --git a/test/models/mml2midi.rb b/test/models/mml2midi.rb new file mode 120000 index 00000000..21c975c8 --- /dev/null +++ b/test/models/mml2midi.rb @@ -0,0 +1 @@ +../../lib/picoruby/mrbgems/picoruby-mml2midi/mrblib/mml2midi.rb \ No newline at end of file diff --git a/test/tests/midi_test.rb b/test/tests/midi_test.rb new file mode 100644 index 00000000..cf95ee13 --- /dev/null +++ b/test/tests/midi_test.rb @@ -0,0 +1,103 @@ + +class Machine + def self.board_millis + 1000 + end +end + +class MIDI + attr_accessor :play_status, :previous_clock_time, :duration_per_clock +end + +class MidiTest < MrubycTestCase + def setup + @midi = MIDI.new + end + + ##### Tests from here + + description "note_on note_num, with velocity" + def note_on_with_nil_velocity_case + @midi.note_on(0, nil) + assert_equal [[MIDI::NOTE_ON_EVENT || 0, 0, 76]], @midi.instance_variable_get("@buffer") + end + + description "note_off note_num, with velocity" + def note_off_with_nil_velocity_case + @midi.note_off(0, nil) + assert_equal [[MIDI::NOTE_OFF_EVENT || 0, 0, 76]], @midi.instance_variable_get("@buffer") + end + + description "sustain on" + def sustain_on_case + @midi.send_sustain(1) + assert_equal [[MIDI::CONTROL_CHANGE_EVENT || 0, 0x7f]], @midi.instance_variable_get("@buffer") + end + + description "sustain off" + def sustain_off_case + @midi.send_sustain(0) + assert_equal [[MIDI::CONTROL_CHANGE_EVENT || 0, 0]], @midi.instance_variable_get("@buffer") + end + + description "task_when_chord_mode_on_with_major" + def convert_chord_pattern_with_major_case + assert_equal [0, 4, 7], @midi.convert_chord_pattern(0) + end + + description "toggle_chord_pattern_up_and_down" + def toggle_chord_pattern_case + # major -> major7th + @midi.update_event(MIDI::KEYCODE[:MI_NEXTCRD], :press) + @midi.process_request(MIDI::KEYCODE[:MI_NEXTCRD], {}) + assert_equal :major7th, @midi.chord_pattern + + # major7th -> major + @midi.update_event(MIDI::KEYCODE[:MI_PREVCRD], :press) + @midi.process_request(MIDI::KEYCODE[:MI_PREVCRD], {}) + assert_equal :major, @midi.chord_pattern + + # augmented7th -> major + @midi.chord_pattern = :augmented7th + @midi.update_event(MIDI::KEYCODE[:MI_NEXTCRD], :press) + @midi.process_request(MIDI::KEYCODE[:MI_NEXTCRD], {}) + assert_equal :major, @midi.chord_pattern + + # major -> augmented7th + @midi.update_event(MIDI::KEYCODE[:MI_PREVCRD], :press) + @midi.process_request(MIDI::KEYCODE[:MI_PREVCRD], {}) + assert_equal :augmented7th, @midi.chord_pattern + end + + description "midi realtime clock stop" + def send_midi_realtime_clock_stop_case + # @play_status :stop + @midi.play_status = :stop + @midi.send_srt_clock + assert_equal [], @midi.instance_variable_get("@buffer") + end + + description "midi realtime clock start first time" + def send_midi_realtime_clock_first_time_case + @midi.play_status = :start + @midi.previous_clock_time = nil + @midi.send_srt_clock + assert_equal 1000, @midi.previous_clock_time + assert_equal [[MIDI::SRT_TIMING_CLOCK]], @midi.instance_variable_get("@buffer") + end + + description "midi realtime clock start 2nd time" + def send_midi_realtime_clock_2nd_time_case + @midi.play_status = :start + @midi.previous_clock_time = 500 + @midi.duration_per_clock = 150 + @midi.send_srt_clock + # send midi clock 3 times + assert_equal [ + [MIDI::SRT_TIMING_CLOCK], + [MIDI::SRT_TIMING_CLOCK], + [MIDI::SRT_TIMING_CLOCK] + ], @midi.instance_variable_get("@buffer") + assert_equal 950, @midi.previous_clock_time + end +end diff --git a/test/tests/mml2midi_test.rb b/test/tests/mml2midi_test.rb new file mode 100644 index 00000000..838d0399 --- /dev/null +++ b/test/tests/mml2midi_test.rb @@ -0,0 +1,159 @@ +class Mml2midiTest < MrubycTestCase + def setup + @data = Array.new + end + + ######################################### + + description "Just an A" + def basic_case + duration = MML2MIDI.new.compile("a") { |p, d| @data << [p, d] } + assert_equal [[0, [:note, 69, 4]]], @data + assert_equal 4, duration + end + + description "A flat" + def a_flat_case + duration = MML2MIDI.new.compile("AA-") { |p, d| @data << [p, d] } + assert_equal [[0, [:note, 69, 4]], [4, [:note, 68, 4]]], @data + assert_equal 8, duration + end + + description "C flat" + def c_flat_case + duration = MML2MIDI.new.compile("CC-") { |p, d| @data << [p, d] } + assert_equal [[0, [:note, 60, 4]], [4, [:note, 59, 4]]], @data + assert_equal 8, duration + end + + description "Change tempo" + def tempo_case + duration = MML2MIDI.new.compile("T240a") { |p, d| @data << [p, d] } + assert_equal [[0, [:tempo, 240]], [0, [:note, 69, 4]]], @data + assert_equal 4, duration + end + + description "Rest octave" + def rest_case + duration = MML2MIDI.new.compile("ara") { |p, d| @data << [p, d] } + assert_equal [[0, [:note, 69, 4]], [8, [:note, 69, 4]]], @data + assert_equal 12, duration + end + + description "Specify octave" + def specify_octave_case + duration = MML2MIDI.new.compile("O5aO3a") { |p, d| @data << [p, d] } + assert_equal [[0, [:note, 81, 4]],[4, [:note, 57, 4]]], @data + assert_equal 8, duration + end + + description "Decrease octave" + def decrease_octave_case + duration = MML2MIDI.new.compile("a>a") { |p, d| @data << [p, d] } + assert_equal [[0, [:note, 69, 4]],[4, [:note, 57, 4]]], @data + assert_equal 8, duration + end + + description "Increase octave" + def increase_octave_case + duration = MML2MIDI.new.compile("a g r4.", + "T200 L8 Q6 < c r4 > g r4 e r4 a r b r b- a r", + "T200 L8 Q6 g6 < e6 g6 a r f g r e r c d > b r4", + "T200 L8 Q6 r4 l< g g- f d+ r e r > g+ a < c r > a < c d", + "T200 L8 Q6 r4 g g- f d+ r e r < c r c c r4.", + "T200 L8 Q6 r4 > g g- f d+ r e r > g+ a < c r > a < c d", + "T200 L8 Q6 r4 e-8 r4 d r4 c r r4 r2" + ].each_with_index do |measure, index| + duration = MML2MIDI.new.compile(measure) { |p, d| @data << [p, d] } + assert_equal durations[index], duration + end + end + + description "Super Mario B part" + def mario_b_case + durations = [92, 92, 90, 80, 104, 80, 92] + [ + "T200 L8 O3 Q4 d d r d r d d r g r4. > g r4.", + "T200 L8 Q6 < g r4 e r4 c r4 f r g r g- f r", + "T200 L8 Q6 e6 < c6 e6 f r d e r c r > a b g r4", + "T200 L8 Q6 c r4 g r4 < c r > f r4 < c r4 > f r", + "T200 L8 Q6 c r4 e r4 g < c r < f r f f r >> g r", + "T200 L8 Q6 c r4 g r4 < c r > f r4 < c r4 > f r", + "T200 L8 Q6 c r a- r4 b- r4 < c r4 > g g r c r" + ].each_with_index do |measure, index| + duration = MML2MIDI.new.compile(measure) { |p, d| @data << [p, d] } + assert_equal durations[index], duration + end + end + + description "Danger Zone" + def danger_zone_case + durations = [320, 362] + [ + "T120 Q6 L8 r O2 c d f g4 f4 < g a r4 a4. a r4 a a a4 a4 g a r4 a4. a r4 a a < c4 c4 > Q8 g1 Q6 g1 g a r4 a4. a r4 a a a4 a4 g a r4 a4. a r4 a a a4 a4", + "T120 Q6 L8 r O2 c d f g4 f4 d << d r4 d4. d >> r c d f g4 f4 d << d r4 d4. d >> r c d f g4 f4 c4. > g < c2 d c4 > g < c4 c4 d4. d d2 r c d f g4 f4 d4. d d2 r c d f g4 f4" + ].each_with_index do |measure, index| + duration = MML2MIDI.new.compile(measure) { |p, d| @data << [p, d] } + assert_equal durations[index], duration + end + end +end diff --git a/tinyusb/tusb_config.h b/tinyusb/tusb_config.h index 3efe86f9..286bdeb5 100644 --- a/tinyusb/tusb_config.h +++ b/tinyusb/tusb_config.h @@ -97,7 +97,7 @@ #define CFG_TUD_CDC 1 #define CFG_TUD_MSC 1 #define CFG_TUD_HID 2 -#define CFG_TUD_MIDI 0 +#define CFG_TUD_MIDI 1 #define CFG_TUD_VENDOR 0 // HID buffer size Should be sufficient to hold ID (if any) + Data @@ -118,6 +118,10 @@ // CDC Endpoint transfer buffer size, more is faster #define CFG_TUD_CDC_EP_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +// MIDI FIFO size of TX and RX +#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) +#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64) + #ifdef __cplusplus } #endif