
/* DO NOT EDIT! This is an autogenerated file. See scripts/buildcommands.py. */

#include "board/irq.h"
#include "board/pgm.h"
#include "command.h"
#include "compiler.h"
#include "initial_pins.h"

void
ctr_run_initfuncs(void)
{
    extern void alloc_init(void);
    alloc_init();
    extern void initial_pins_setup(void);
    initial_pins_setup();
    extern void timer_init(void);
    timer_init();
}

void
ctr_run_shutdownfuncs(void)
{
    extern void sendf_shutdown(void);
    sendf_shutdown();
    extern void move_reset(void);
    move_reset();
    extern void digital_out_shutdown(void);
    digital_out_shutdown();
    extern void stepper_shutdown(void);
    stepper_shutdown();
    extern void trsync_shutdown(void);
    trsync_shutdown();
    extern void analog_in_shutdown(void);
    analog_in_shutdown();
    extern void spidev_shutdown(void);
    spidev_shutdown();
    extern void pwm_shutdown(void);
    pwm_shutdown();
    extern void st7920_shutdown(void);
    st7920_shutdown();
    extern void hd44780_shutdown(void);
    hd44780_shutdown();
    extern void tmcuart_shutdown(void);
    tmcuart_shutdown();
    extern void pca9685_shutdown(void);
    pca9685_shutdown();
}

void
ctr_run_taskfuncs(void)
{
    irq_poll();
    extern void trsync_task(void);
    trsync_task();
    irq_poll();
    extern void analog_in_task(void);
    analog_in_task();
    irq_poll();
    extern void thermocouple_task(void);
    thermocouple_task();
    irq_poll();
    extern void adxl345_task(void);
    adxl345_task();
    irq_poll();
    extern void spi_angle_task(void);
    spi_angle_task();
    irq_poll();
    extern void mpu9250_task(void);
    mpu9250_task();
    irq_poll();
    extern void buttons_task(void);
    buttons_task();
    irq_poll();
    extern void tmcuart_task(void);
    tmcuart_task();
    irq_poll();
    extern void counter_task(void);
    counter_task();
    irq_poll();
    extern void console_task(void);
    console_task();
    irq_poll();
    extern void watchdog_task(void);
    watchdog_task();
    irq_poll();
    extern void ds18_task(void);
    ds18_task();
    irq_poll();
}

uint8_t __always_inline
ctr_lookup_static_string(const char *str)
{
    if (__builtin_strcmp(str, "Shutdown cleared when not shutdown") == 0)
        return 2;
    if (__builtin_strcmp(str, "Timer too close") == 0)
        return 3;
    if (__builtin_strcmp(str, "sentinel timer called") == 0)
        return 4;
    if (__builtin_strcmp(str, "Invalid command") == 0)
        return 5;
    if (__builtin_strcmp(str, "Message encode error") == 0)
        return 6;
    if (__builtin_strcmp(str, "Command parser error") == 0)
        return 7;
    if (__builtin_strcmp(str, "Command request") == 0)
        return 8;
    if (__builtin_strcmp(str, "config_reset only available when shutdown") == 0)
        return 9;
    if (__builtin_strcmp(str, "oids already allocated") == 0)
        return 10;
    if (__builtin_strcmp(str, "Can't assign oid") == 0)
        return 11;
    if (__builtin_strcmp(str, "Invalid oid type") == 0)
        return 12;
    if (__builtin_strcmp(str, "Already finalized") == 0)
        return 13;
    if (__builtin_strcmp(str, "Invalid move request size") == 0)
        return 14;
    if (__builtin_strcmp(str, "Move queue overflow") == 0)
        return 15;
    if (__builtin_strcmp(str, "alloc_chunks failed") == 0)
        return 16;
    if (__builtin_strcmp(str, "alloc_chunk failed") == 0)
        return 17;
    if (__builtin_strcmp(str, "update_digital_out not valid with active queue") == 0)
        return 18;
    if (__builtin_strcmp(str, "Scheduled digital out event will exceed max_duration") == 0)
        return 19;
    if (__builtin_strcmp(str, "Can not set soft pwm cycle ticks while updates pending") == 0)
        return 20;
    if (__builtin_strcmp(str, "Missed scheduling of next digital out event") == 0)
        return 21;
    if (__builtin_strcmp(str, "Can't reset time when stepper active") == 0)
        return 22;
    if (__builtin_strcmp(str, "Invalid count parameter") == 0)
        return 23;
    if (__builtin_strcmp(str, "Stepper too far in past") == 0)
        return 24;
    if (__builtin_strcmp(str, "Can't add signal that is already active") == 0)
        return 25;
    if (__builtin_strcmp(str, "ADC out of range") == 0)
        return 26;
    if (__builtin_strcmp(str, "Invalid spi config") == 0)
        return 27;
    if (__builtin_strcmp(str, "Thermocouple reader fault") == 0)
        return 28;
    if (__builtin_strcmp(str, "Thermocouple ADC out of range") == 0)
        return 29;
    if (__builtin_strcmp(str, "Invalid thermocouple chip type") == 0)
        return 30;
    if (__builtin_strcmp(str, "i2c_modify_bits: Odd number of bits!") == 0)
        return 31;
    if (__builtin_strcmp(str, "Scheduled pwm event will exceed max_duration") == 0)
        return 32;
    if (__builtin_strcmp(str, "Missed scheduling of next hard pwm event") == 0)
        return 33;
    if (__builtin_strcmp(str, "angle sensor requires cs pin") == 0)
        return 34;
    if (__builtin_strcmp(str, "Invalid spi_angle chip type") == 0)
        return 35;
    if (__builtin_strcmp(str, "Invalid buttons retransmit count") == 0)
        return 36;
    if (__builtin_strcmp(str, "Set button past maximum button count") == 0)
        return 37;
    if (__builtin_strcmp(str, "Max of 8 buttons") == 0)
        return 38;
    if (__builtin_strcmp(str, "tmcuart data too large") == 0)
        return 39;
    if (__builtin_strcmp(str, "Invalid neopixel update command") == 0)
        return 40;
    if (__builtin_strcmp(str, "Invalid neopixel data_size") == 0)
        return 41;
    if (__builtin_strcmp(str, "Rescheduled timer in the past") == 0)
        return 42;
    if (__builtin_strcmp(str, "Force shutdown command") == 0)
        return 43;
    if (__builtin_strcmp(str, "Invalid pca9685 channel or value") == 0)
        return 44;
    if (__builtin_strcmp(str, "Scheduled pca9685 event will exceed max_duration") == 0)
        return 45;
    if (__builtin_strcmp(str, "Invalid pca9685 value") == 0)
        return 46;
    if (__builtin_strcmp(str, "Missed scheduling of next pca9685 event") == 0)
        return 47;
    if (__builtin_strcmp(str, "Unable to open and init PCA9685 device") == 0)
        return 48;
    if (__builtin_strcmp(str, "Too many i2c devices") == 0)
        return 49;
    if (__builtin_strcmp(str, "All PCA9685 channels must have the same cycle_ticks") == 0)
        return 50;
    if (__builtin_strcmp(str, "Unable to update PCA9685 value") == 0)
        return 51;
    if (__builtin_strcmp(str, "Unable to write to spi") == 0)
        return 52;
    if (__builtin_strcmp(str, "Unable to issue spi ioctl") == 0)
        return 53;
    if (__builtin_strcmp(str, "Unable to set SPI mode") == 0)
        return 54;
    if (__builtin_strcmp(str, "Unable to set SPI speed") == 0)
        return 55;
    if (__builtin_strcmp(str, "Unable to set non-blocking on spi device") == 0)
        return 56;
    if (__builtin_strcmp(str, "Unable to open spi device") == 0)
        return 57;
    if (__builtin_strcmp(str, "Too many spi devices") == 0)
        return 58;
    if (__builtin_strcmp(str, "Error on analog read") == 0)
        return 59;
    if (__builtin_strcmp(str, "Unable to open adc device") == 0)
        return 60;
    if (__builtin_strcmp(str, "Unable to config pwm device") == 0)
        return 61;
    if (__builtin_strcmp(str, "Unable to read i2c device") == 0)
        return 62;
    if (__builtin_strcmp(str, "Unable write i2c device") == 0)
        return 63;
    if (__builtin_strcmp(str, "Unable to open i2c device") == 0)
        return 64;
    if (__builtin_strcmp(str, "Unable to open in GPIO chip line") == 0)
        return 65;
    if (__builtin_strcmp(str, "Unable to open out GPIO chip line") == 0)
        return 66;
    if (__builtin_strcmp(str, "Unable to open GPIO chip device") == 0)
        return 67;
    if (__builtin_strcmp(str, "GPIO chip device not found") == 0)
        return 68;
    if (__builtin_strcmp(str, "DS18B20 sensor didn't respond in time") == 0)
        return 69;
    if (__builtin_strcmp(str, "DS18B20 out of range") == 0)
        return 70;
    if (__builtin_strcmp(str, "Error reading DS18B20 sensor") == 0)
        return 71;
    if (__builtin_strcmp(str, "Error getting monotonic clock time") == 0)
        return 72;
    if (__builtin_strcmp(str, "Could not start DS18B20 reader thread") == 0)
        return 73;
    if (__builtin_strcmp(str, "Could not start DS18B20 reader thread (cond init)") == 0)
        return 74;
    if (__builtin_strcmp(str, "Could not start DS18B20 reader thread (mutex init)") == 0)
        return 75;
    if (__builtin_strcmp(str, "Invalid DS18B20 serial id, could not open for reading") == 0)
        return 76;
    if (__builtin_strcmp(str, "Invalid DS18B20 serial id, must not contain '/'") == 0)
        return 77;
    return 0xff;
}

const struct initial_pin_s initial_pins[] PROGMEM = {
};
const int initial_pins_size PROGMEM = ARRAY_SIZE(initial_pins);

static const uint8_t command_parameters0[] PROGMEM = {
    PT_uint16 };
static const uint8_t command_parameters1[] PROGMEM = {
    PT_uint32, PT_uint16 };
static const uint8_t command_parameters2[] PROGMEM = {
    PT_uint32, PT_progmem_buffer };
static const uint8_t command_parameters3[] PROGMEM = {
    PT_uint32, PT_uint32, PT_uint32 };
static const uint8_t command_parameters4[] PROGMEM = {
    PT_uint32, PT_uint32 };
static const uint8_t command_parameters5[] PROGMEM = {
    PT_uint32 };
static const uint8_t command_parameters6[] PROGMEM = {
    PT_byte, PT_uint32, PT_byte, PT_uint16 };
static const uint8_t command_parameters7[] PROGMEM = {
    PT_buffer };
static const uint8_t command_parameters8[] PROGMEM = {
    PT_byte, PT_int32 };
static const uint8_t command_parameters9[] PROGMEM = {
    PT_byte, PT_byte, PT_uint32, PT_byte };
static const uint8_t command_parameters10[] PROGMEM = {
    PT_byte, PT_byte, PT_byte, PT_uint32 };
static const uint8_t command_parameters11[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint16 };
static const uint8_t command_parameters12[] PROGMEM = {
    PT_byte, PT_buffer };
static const uint8_t command_parameters13[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_byte };
static const uint8_t command_parameters14[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_uint16, PT_byte, PT_byte, PT_uint16 };
static const uint8_t command_parameters15[] PROGMEM = {
    PT_byte, PT_uint16, PT_buffer };
static const uint8_t command_parameters16[] PROGMEM = {
    PT_byte, PT_uint32, PT_buffer };
static const uint8_t command_parameters17[] PROGMEM = {
    PT_byte, PT_uint16 };
static const uint8_t command_parameters18[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_uint16, PT_byte, PT_uint32, PT_uint16 };
static const uint8_t command_parameters19[] PROGMEM = {
    PT_byte, PT_byte, PT_buffer };
static const uint8_t command_parameters20[] PROGMEM = {
    PT_byte, PT_byte };
static const uint8_t command_parameters21[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_uint32 };
static const uint8_t command_parameters22[] PROGMEM = {
    PT_byte, PT_uint32, PT_int32, PT_uint32 };
static const uint8_t command_parameters23[] PROGMEM = {
    PT_uint32, PT_byte };
static const uint8_t command_parameters24[] PROGMEM = {
    PT_byte };
static const uint8_t command_parameters25[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32 };
static const uint8_t command_parameters26[] PROGMEM = {
    PT_byte, PT_uint32 };
static const uint8_t command_parameters27[] PROGMEM = {
    PT_byte, PT_uint32, PT_byte, PT_byte, PT_uint32 };
static const uint8_t command_parameters28[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint16, PT_int16 };
static const uint8_t command_parameters29[] PROGMEM = {
    PT_byte, PT_byte, PT_byte, PT_byte, PT_uint32 };
static const uint8_t command_parameters30[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_byte, PT_uint32, PT_byte, PT_byte, PT_byte };
static const uint8_t command_parameters31[] PROGMEM = {
    PT_byte, PT_byte, PT_byte };
static const uint8_t command_parameters32[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_byte, PT_uint32, PT_uint16, PT_uint16, PT_byte };
static const uint8_t command_parameters33[] PROGMEM = {
    PT_byte, PT_uint32, PT_byte };
static const uint8_t command_parameters34[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_uint32, PT_uint32 };
static const uint8_t command_parameters35[] PROGMEM = {
    PT_byte, PT_buffer, PT_buffer };
static const uint8_t command_parameters36[] PROGMEM = {
    PT_byte, PT_buffer, PT_uint32 };
static const uint8_t command_parameters37[] PROGMEM = {
    PT_uint32, PT_uint32, PT_uint16 };
static const uint8_t command_parameters38[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_uint16, PT_uint16, PT_uint32 };
static const uint8_t command_parameters39[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_uint32, PT_uint32, PT_uint32 };
static const uint8_t command_parameters40[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_uint32, PT_uint32, PT_uint32, PT_uint32, PT_uint32 };
static const uint8_t command_parameters41[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_byte, PT_byte };
static const uint8_t command_parameters42[] PROGMEM = {
    PT_byte, PT_buffer, PT_byte };
static const uint8_t command_parameters43[] PROGMEM = {
    PT_byte, PT_uint32, PT_byte, PT_uint32, PT_uint32 };
static const uint8_t command_parameters44[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint16, PT_uint32, PT_uint32 };
static const uint8_t command_parameters45[] PROGMEM = {
    PT_byte, PT_byte, PT_byte, PT_uint32, PT_uint16 };
static const uint8_t command_parameters46[] PROGMEM = {
    PT_byte, PT_byte, PT_byte, PT_byte, PT_uint32, PT_uint16, PT_uint16, PT_uint32 };
static const uint8_t command_parameters47[] PROGMEM = {
    PT_byte, PT_uint32, PT_uint32, PT_int32, PT_int32 };

const struct command_encoder command_encoder_81 PROGMEM = {    
    // starting
    .msg_id=81,
    .num_params=0,
    .param_types = 0,
    .max_size=6,
};
const struct command_encoder command_encoder_82 PROGMEM = {    
    // is_shutdown static_string_id=%hu
    .msg_id=82,
    .num_params=1,
    .param_types = command_parameters0,
    .max_size=9,
};
const struct command_encoder command_encoder_83 PROGMEM = {    
    // shutdown clock=%u static_string_id=%hu
    .msg_id=83,
    .num_params=2,
    .param_types = command_parameters1,
    .max_size=14,
};
const struct command_encoder command_encoder_0 PROGMEM = {    
    // identify_response offset=%u data=%.*s
    .msg_id=0,
    .num_params=2,
    .param_types = command_parameters2,
    .max_size=64,
};
const struct command_encoder command_encoder_84 PROGMEM = {    
    // stats count=%u sum=%u sumsq=%u
    .msg_id=84,
    .num_params=3,
    .param_types = command_parameters3,
    .max_size=21,
};
const struct command_encoder command_encoder_85 PROGMEM = {    
    // uptime high=%u clock=%u
    .msg_id=85,
    .num_params=2,
    .param_types = command_parameters4,
    .max_size=16,
};
const struct command_encoder command_encoder_86 PROGMEM = {    
    // clock clock=%u
    .msg_id=86,
    .num_params=1,
    .param_types = command_parameters5,
    .max_size=11,
};
const struct command_encoder command_encoder_87 PROGMEM = {    
    // config is_config=%c crc=%u is_shutdown=%c move_count=%hu
    .msg_id=87,
    .num_params=4,
    .param_types = command_parameters6,
    .max_size=18,
};
const struct command_encoder command_encoder_88 PROGMEM = {    
    // pong data=%*s
    .msg_id=88,
    .num_params=1,
    .param_types = command_parameters7,
    .max_size=64,
};
const struct command_encoder command_encoder_89 PROGMEM = {    
    // debug_result val=%u
    .msg_id=89,
    .num_params=1,
    .param_types = command_parameters5,
    .max_size=11,
};
const struct command_encoder command_encoder_90 PROGMEM = {    
    // stepper_position oid=%c pos=%i
    .msg_id=90,
    .num_params=2,
    .param_types = command_parameters8,
    .max_size=13,
};
const struct command_encoder command_encoder_91 PROGMEM = {    
    // endstop_state oid=%c homing=%c next_clock=%u pin_value=%c
    .msg_id=91,
    .num_params=4,
    .param_types = command_parameters9,
    .max_size=17,
};
const struct command_encoder command_encoder_92 PROGMEM = {    
    // trsync_state oid=%c can_trigger=%c trigger_reason=%c clock=%u
    .msg_id=92,
    .num_params=4,
    .param_types = command_parameters10,
    .max_size=17,
};
const struct command_encoder command_encoder_93 PROGMEM = {    
    // analog_in_state oid=%c next_clock=%u value=%hu
    .msg_id=93,
    .num_params=3,
    .param_types = command_parameters11,
    .max_size=16,
};
const struct command_encoder command_encoder_94 PROGMEM = {    
    // spi_transfer_response oid=%c response=%*s
    .msg_id=94,
    .num_params=2,
    .param_types = command_parameters12,
    .max_size=64,
};
const struct command_encoder command_encoder_95 PROGMEM = {    
    // thermocouple_result oid=%c next_clock=%u value=%u fault=%c
    .msg_id=95,
    .num_params=4,
    .param_types = command_parameters13,
    .max_size=20,
};
const struct command_encoder command_encoder_96 PROGMEM = {    
    // i2c_read_response oid=%c response=%*s
    .msg_id=96,
    .num_params=2,
    .param_types = command_parameters12,
    .max_size=64,
};
const struct command_encoder command_encoder_97 PROGMEM = {    
    // adxl345_status oid=%c clock=%u query_ticks=%u next_sequence=%hu buffered=%c fifo=%c limit_count=%hu
    .msg_id=97,
    .num_params=7,
    .param_types = command_parameters14,
    .max_size=28,
};
const struct command_encoder command_encoder_98 PROGMEM = {    
    // adxl345_data oid=%c sequence=%hu data=%*s
    .msg_id=98,
    .num_params=3,
    .param_types = command_parameters15,
    .max_size=64,
};
const struct command_encoder command_encoder_99 PROGMEM = {    
    // spi_angle_transfer_response oid=%c clock=%u response=%*s
    .msg_id=99,
    .num_params=3,
    .param_types = command_parameters16,
    .max_size=64,
};
const struct command_encoder command_encoder_100 PROGMEM = {    
    // spi_angle_end oid=%c sequence=%hu
    .msg_id=100,
    .num_params=2,
    .param_types = command_parameters17,
    .max_size=11,
};
const struct command_encoder command_encoder_101 PROGMEM = {    
    // spi_angle_data oid=%c sequence=%hu data=%*s
    .msg_id=101,
    .num_params=3,
    .param_types = command_parameters15,
    .max_size=64,
};
const struct command_encoder command_encoder_102 PROGMEM = {    
    // mpu9250_status oid=%c clock=%u query_ticks=%u next_sequence=%hu buffered=%c fifo=%u limit_count=%hu
    .msg_id=102,
    .num_params=7,
    .param_types = command_parameters18,
    .max_size=31,
};
const struct command_encoder command_encoder_103 PROGMEM = {    
    // mpu9250_data oid=%c sequence=%hu data=%*s
    .msg_id=103,
    .num_params=3,
    .param_types = command_parameters15,
    .max_size=64,
};
const struct command_encoder command_encoder_104 PROGMEM = {    
    // buttons_state oid=%c ack_count=%c state=%*s
    .msg_id=104,
    .num_params=3,
    .param_types = command_parameters19,
    .max_size=64,
};
const struct command_encoder command_encoder_105 PROGMEM = {    
    // tmcuart_response oid=%c read=%*s
    .msg_id=105,
    .num_params=2,
    .param_types = command_parameters12,
    .max_size=64,
};
const struct command_encoder command_encoder_106 PROGMEM = {    
    // neopixel_result oid=%c success=%c
    .msg_id=106,
    .num_params=2,
    .param_types = command_parameters20,
    .max_size=10,
};
const struct command_encoder command_encoder_107 PROGMEM = {    
    // counter_state oid=%c next_clock=%u count=%u count_clock=%u
    .msg_id=107,
    .num_params=4,
    .param_types = command_parameters21,
    .max_size=23,
};
const struct command_encoder command_encoder_108 PROGMEM = {    
    // ds18b20_result oid=%c next_clock=%u value=%i fault=%u
    .msg_id=108,
    .num_params=4,
    .param_types = command_parameters22,
    .max_size=23,
};

const __always_inline struct command_encoder *
ctr_lookup_encoder(const char *str)
{
    if (__builtin_strcmp(str, "starting") == 0)
        return &command_encoder_81;
    if (__builtin_strcmp(str, "is_shutdown static_string_id=%hu") == 0)
        return &command_encoder_82;
    if (__builtin_strcmp(str, "shutdown clock=%u static_string_id=%hu") == 0)
        return &command_encoder_83;
    if (__builtin_strcmp(str, "identify_response offset=%u data=%.*s") == 0)
        return &command_encoder_0;
    if (__builtin_strcmp(str, "stats count=%u sum=%u sumsq=%u") == 0)
        return &command_encoder_84;
    if (__builtin_strcmp(str, "uptime high=%u clock=%u") == 0)
        return &command_encoder_85;
    if (__builtin_strcmp(str, "clock clock=%u") == 0)
        return &command_encoder_86;
    if (__builtin_strcmp(str, "config is_config=%c crc=%u is_shutdown=%c move_count=%hu") == 0)
        return &command_encoder_87;
    if (__builtin_strcmp(str, "pong data=%*s") == 0)
        return &command_encoder_88;
    if (__builtin_strcmp(str, "debug_result val=%u") == 0)
        return &command_encoder_89;
    if (__builtin_strcmp(str, "stepper_position oid=%c pos=%i") == 0)
        return &command_encoder_90;
    if (__builtin_strcmp(str, "endstop_state oid=%c homing=%c next_clock=%u pin_value=%c") == 0)
        return &command_encoder_91;
    if (__builtin_strcmp(str, "trsync_state oid=%c can_trigger=%c trigger_reason=%c clock=%u") == 0)
        return &command_encoder_92;
    if (__builtin_strcmp(str, "analog_in_state oid=%c next_clock=%u value=%hu") == 0)
        return &command_encoder_93;
    if (__builtin_strcmp(str, "spi_transfer_response oid=%c response=%*s") == 0)
        return &command_encoder_94;
    if (__builtin_strcmp(str, "thermocouple_result oid=%c next_clock=%u value=%u fault=%c") == 0)
        return &command_encoder_95;
    if (__builtin_strcmp(str, "i2c_read_response oid=%c response=%*s") == 0)
        return &command_encoder_96;
    if (__builtin_strcmp(str, "adxl345_status oid=%c clock=%u query_ticks=%u next_sequence=%hu buffered=%c fifo=%c limit_count=%hu") == 0)
        return &command_encoder_97;
    if (__builtin_strcmp(str, "adxl345_data oid=%c sequence=%hu data=%*s") == 0)
        return &command_encoder_98;
    if (__builtin_strcmp(str, "spi_angle_transfer_response oid=%c clock=%u response=%*s") == 0)
        return &command_encoder_99;
    if (__builtin_strcmp(str, "spi_angle_end oid=%c sequence=%hu") == 0)
        return &command_encoder_100;
    if (__builtin_strcmp(str, "spi_angle_data oid=%c sequence=%hu data=%*s") == 0)
        return &command_encoder_101;
    if (__builtin_strcmp(str, "mpu9250_status oid=%c clock=%u query_ticks=%u next_sequence=%hu buffered=%c fifo=%u limit_count=%hu") == 0)
        return &command_encoder_102;
    if (__builtin_strcmp(str, "mpu9250_data oid=%c sequence=%hu data=%*s") == 0)
        return &command_encoder_103;
    if (__builtin_strcmp(str, "buttons_state oid=%c ack_count=%c state=%*s") == 0)
        return &command_encoder_104;
    if (__builtin_strcmp(str, "tmcuart_response oid=%c read=%*s") == 0)
        return &command_encoder_105;
    if (__builtin_strcmp(str, "neopixel_result oid=%c success=%c") == 0)
        return &command_encoder_106;
    if (__builtin_strcmp(str, "counter_state oid=%c next_clock=%u count=%u count_clock=%u") == 0)
        return &command_encoder_107;
    if (__builtin_strcmp(str, "ds18b20_result oid=%c next_clock=%u value=%i fault=%u") == 0)
        return &command_encoder_108;
    return NULL;
}

const __always_inline struct command_encoder *
ctr_lookup_output(const char *str)
{
    
    return NULL;
}

extern void command_allocate_oids(uint32_t*);
extern void command_buttons_ack(uint32_t*);
extern void command_buttons_add(uint32_t*);
extern void command_buttons_query(uint32_t*);
extern void command_clear_shutdown(uint32_t*);
extern void command_config_adxl345(uint32_t*);
extern void command_config_analog_in(uint32_t*);
extern void command_config_buttons(uint32_t*);
extern void command_config_counter(uint32_t*);
extern void command_config_digital_out(uint32_t*);
extern void command_config_ds18b20(uint32_t*);
extern void command_config_endstop(uint32_t*);
extern void command_config_hd44780(uint32_t*);
extern void command_config_i2c(uint32_t*);
extern void command_config_mpu9250(uint32_t*);
extern void command_config_neopixel(uint32_t*);
extern void command_config_pca9685(uint32_t*);
extern void command_config_pwm_out(uint32_t*);
extern void command_config_reset(uint32_t*);
extern void command_config_spi(uint32_t*);
extern void command_config_spi_angle(uint32_t*);
extern void command_config_spi_shutdown(uint32_t*);
extern void command_config_spi_without_cs(uint32_t*);
extern void command_config_st7920(uint32_t*);
extern void command_config_stepper(uint32_t*);
extern void command_config_thermocouple(uint32_t*);
extern void command_config_tmcuart(uint32_t*);
extern void command_config_trsync(uint32_t*);
extern void command_debug_nop(uint32_t*);
extern void command_debug_ping(uint32_t*);
extern void command_debug_read(uint32_t*);
extern void command_debug_write(uint32_t*);
extern void command_emergency_stop(uint32_t*);
extern void command_endstop_home(uint32_t*);
extern void command_endstop_query_state(uint32_t*);
extern void command_finalize_config(uint32_t*);
extern void command_get_clock(uint32_t*);
extern void command_get_config(uint32_t*);
extern void command_get_uptime(uint32_t*);
extern void command_hd44780_send_cmds(uint32_t*);
extern void command_hd44780_send_data(uint32_t*);
extern void command_i2c_modify_bits(uint32_t*);
extern void command_i2c_read(uint32_t*);
extern void command_i2c_write(uint32_t*);
extern void command_identify(uint32_t*);
extern void command_neopixel_send(uint32_t*);
extern void command_neopixel_update(uint32_t*);
extern void command_query_adxl345(uint32_t*);
extern void command_query_adxl345_status(uint32_t*);
extern void command_query_analog_in(uint32_t*);
extern void command_query_counter(uint32_t*);
extern void command_query_ds18b20(uint32_t*);
extern void command_query_mpu9250(uint32_t*);
extern void command_query_mpu9250_status(uint32_t*);
extern void command_query_spi_angle(uint32_t*);
extern void command_query_thermocouple(uint32_t*);
extern void command_queue_digital_out(uint32_t*);
extern void command_queue_pca9685_out(uint32_t*);
extern void command_queue_pwm_out(uint32_t*);
extern void command_queue_step(uint32_t*);
extern void command_reset_step_clock(uint32_t*);
extern void command_set_digital_out(uint32_t*);
extern void command_set_digital_out_pwm_cycle(uint32_t*);
extern void command_set_next_step_dir(uint32_t*);
extern void command_set_pca9685_out(uint32_t*);
extern void command_set_pwm_out(uint32_t*);
extern void command_spi_angle_transfer(uint32_t*);
extern void command_spi_send(uint32_t*);
extern void command_spi_set_bus(uint32_t*);
extern void command_spi_set_software_bus(uint32_t*);
extern void command_spi_transfer(uint32_t*);
extern void command_st7920_send_cmds(uint32_t*);
extern void command_st7920_send_data(uint32_t*);
extern void command_stepper_get_position(uint32_t*);
extern void command_stepper_stop_on_trigger(uint32_t*);
extern void command_tmcuart_send(uint32_t*);
extern void command_trsync_set_timeout(uint32_t*);
extern void command_trsync_start(uint32_t*);
extern void command_trsync_trigger(uint32_t*);
extern void command_update_digital_out(uint32_t*);

const struct command_parser command_index[] PROGMEM = {
{
}, {
    // identify offset=%u count=%c
    .msg_id=1,
    .num_params=2,
    .param_types = command_parameters23,
    .num_args=2,
    .flags=0x01,
    .func=command_identify
}, {
    // clear_shutdown
    .msg_id=2,
    .num_params=0,
    .param_types = 0,
    .num_args=0,
    .flags=0x01,
    .func=command_clear_shutdown
}, {
    // emergency_stop
    .msg_id=3,
    .num_params=0,
    .param_types = 0,
    .num_args=0,
    .flags=0x01,
    .func=command_emergency_stop
}, {
    // get_uptime
    .msg_id=4,
    .num_params=0,
    .param_types = 0,
    .num_args=0,
    .flags=0x01,
    .func=command_get_uptime
}, {
    // get_clock
    .msg_id=5,
    .num_params=0,
    .param_types = 0,
    .num_args=0,
    .flags=0x01,
    .func=command_get_clock
}, {
    // finalize_config crc=%u
    .msg_id=6,
    .num_params=1,
    .param_types = command_parameters5,
    .num_args=1,
    .flags=0,
    .func=command_finalize_config
}, {
    // get_config
    .msg_id=7,
    .num_params=0,
    .param_types = 0,
    .num_args=0,
    .flags=0x01,
    .func=command_get_config
}, {
    // allocate_oids count=%c
    .msg_id=8,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_allocate_oids
}, {
    // debug_nop
    .msg_id=9,
    .num_params=0,
    .param_types = 0,
    .num_args=0,
    .flags=0x01,
    .func=command_debug_nop
}, {
    // debug_ping data=%*s
    .msg_id=10,
    .num_params=1,
    .param_types = command_parameters7,
    .num_args=2,
    .flags=0x01,
    .func=command_debug_ping
}, {
    // debug_write order=%c addr=%u val=%u
    .msg_id=11,
    .num_params=3,
    .param_types = command_parameters25,
    .num_args=3,
    .flags=0x01,
    .func=command_debug_write
}, {
    // debug_read order=%c addr=%u
    .msg_id=12,
    .num_params=2,
    .param_types = command_parameters26,
    .num_args=2,
    .flags=0x01,
    .func=command_debug_read
}, {
    // set_digital_out pin=%u value=%c
    .msg_id=13,
    .num_params=2,
    .param_types = command_parameters23,
    .num_args=2,
    .flags=0,
    .func=command_set_digital_out
}, {
    // update_digital_out oid=%c value=%c
    .msg_id=14,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_update_digital_out
}, {
    // queue_digital_out oid=%c clock=%u on_ticks=%u
    .msg_id=15,
    .num_params=3,
    .param_types = command_parameters25,
    .num_args=3,
    .flags=0,
    .func=command_queue_digital_out
}, {
    // set_digital_out_pwm_cycle oid=%c cycle_ticks=%u
    .msg_id=16,
    .num_params=2,
    .param_types = command_parameters26,
    .num_args=2,
    .flags=0,
    .func=command_set_digital_out_pwm_cycle
}, {
    // config_digital_out oid=%c pin=%u value=%c default_value=%c max_duration=%u
    .msg_id=17,
    .num_params=5,
    .param_types = command_parameters27,
    .num_args=5,
    .flags=0,
    .func=command_config_digital_out
}, {
    // stepper_stop_on_trigger oid=%c trsync_oid=%c
    .msg_id=18,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_stepper_stop_on_trigger
}, {
    // stepper_get_position oid=%c
    .msg_id=19,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_stepper_get_position
}, {
    // reset_step_clock oid=%c clock=%u
    .msg_id=20,
    .num_params=2,
    .param_types = command_parameters26,
    .num_args=2,
    .flags=0,
    .func=command_reset_step_clock
}, {
    // set_next_step_dir oid=%c dir=%c
    .msg_id=21,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_set_next_step_dir
}, {
    // queue_step oid=%c interval=%u count=%hu add=%hi
    .msg_id=22,
    .num_params=4,
    .param_types = command_parameters28,
    .num_args=4,
    .flags=0,
    .func=command_queue_step
}, {
    // config_stepper oid=%c step_pin=%c dir_pin=%c invert_step=%c step_pulse_ticks=%u
    .msg_id=23,
    .num_params=5,
    .param_types = command_parameters29,
    .num_args=5,
    .flags=0,
    .func=command_config_stepper
}, {
    // endstop_query_state oid=%c
    .msg_id=24,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_endstop_query_state
}, {
    // endstop_home oid=%c clock=%u sample_ticks=%u sample_count=%c rest_ticks=%u pin_value=%c trsync_oid=%c trigger_reason=%c
    .msg_id=25,
    .num_params=8,
    .param_types = command_parameters30,
    .num_args=8,
    .flags=0,
    .func=command_endstop_home
}, {
    // config_endstop oid=%c pin=%c pull_up=%c
    .msg_id=26,
    .num_params=3,
    .param_types = command_parameters31,
    .num_args=3,
    .flags=0,
    .func=command_config_endstop
}, {
    // trsync_trigger oid=%c reason=%c
    .msg_id=27,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_trsync_trigger
}, {
    // trsync_set_timeout oid=%c clock=%u
    .msg_id=28,
    .num_params=2,
    .param_types = command_parameters26,
    .num_args=2,
    .flags=0,
    .func=command_trsync_set_timeout
}, {
    // trsync_start oid=%c report_clock=%u report_ticks=%u expire_reason=%c
    .msg_id=29,
    .num_params=4,
    .param_types = command_parameters13,
    .num_args=4,
    .flags=0,
    .func=command_trsync_start
}, {
    // config_trsync oid=%c
    .msg_id=30,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_config_trsync
}, {
    // query_analog_in oid=%c clock=%u sample_ticks=%u sample_count=%c rest_ticks=%u min_value=%hu max_value=%hu range_check_count=%c
    .msg_id=31,
    .num_params=8,
    .param_types = command_parameters32,
    .num_args=8,
    .flags=0,
    .func=command_query_analog_in
}, {
    // config_analog_in oid=%c pin=%u
    .msg_id=32,
    .num_params=2,
    .param_types = command_parameters26,
    .num_args=2,
    .flags=0,
    .func=command_config_analog_in
}, {
    // config_spi_shutdown oid=%c spi_oid=%c shutdown_msg=%*s
    .msg_id=33,
    .num_params=3,
    .param_types = command_parameters19,
    .num_args=4,
    .flags=0,
    .func=command_config_spi_shutdown
}, {
    // spi_send oid=%c data=%*s
    .msg_id=34,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_spi_send
}, {
    // spi_transfer oid=%c data=%*s
    .msg_id=35,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_spi_transfer
}, {
    // spi_set_bus oid=%c spi_bus=%u mode=%u rate=%u
    .msg_id=36,
    .num_params=4,
    .param_types = command_parameters21,
    .num_args=4,
    .flags=0,
    .func=command_spi_set_bus
}, {
    // config_spi_without_cs oid=%c
    .msg_id=37,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_config_spi_without_cs
}, {
    // config_spi oid=%c pin=%u cs_active_high=%c
    .msg_id=38,
    .num_params=3,
    .param_types = command_parameters33,
    .num_args=3,
    .flags=0,
    .func=command_config_spi
}, {
    // query_thermocouple oid=%c clock=%u rest_ticks=%u min_value=%u max_value=%u
    .msg_id=39,
    .num_params=5,
    .param_types = command_parameters34,
    .num_args=5,
    .flags=0,
    .func=command_query_thermocouple
}, {
    // config_thermocouple oid=%c spi_oid=%c thermocouple_type=%c
    .msg_id=40,
    .num_params=3,
    .param_types = command_parameters31,
    .num_args=3,
    .flags=0,
    .func=command_config_thermocouple
}, {
    // i2c_modify_bits oid=%c reg=%*s clear_set_bits=%*s
    .msg_id=41,
    .num_params=3,
    .param_types = command_parameters35,
    .num_args=5,
    .flags=0,
    .func=command_i2c_modify_bits
}, {
    // i2c_read oid=%c reg=%*s read_len=%u
    .msg_id=42,
    .num_params=3,
    .param_types = command_parameters36,
    .num_args=4,
    .flags=0,
    .func=command_i2c_read
}, {
    // i2c_write oid=%c data=%*s
    .msg_id=43,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_i2c_write
}, {
    // config_i2c oid=%c i2c_bus=%u rate=%u address=%u
    .msg_id=44,
    .num_params=4,
    .param_types = command_parameters21,
    .num_args=4,
    .flags=0,
    .func=command_config_i2c
}, {
    // set_pwm_out pin=%u cycle_ticks=%u value=%hu
    .msg_id=45,
    .num_params=3,
    .param_types = command_parameters37,
    .num_args=3,
    .flags=0,
    .func=command_set_pwm_out
}, {
    // queue_pwm_out oid=%c clock=%u value=%hu
    .msg_id=46,
    .num_params=3,
    .param_types = command_parameters11,
    .num_args=3,
    .flags=0,
    .func=command_queue_pwm_out
}, {
    // config_pwm_out oid=%c pin=%u cycle_ticks=%u value=%hu default_value=%hu max_duration=%u
    .msg_id=47,
    .num_params=6,
    .param_types = command_parameters38,
    .num_args=6,
    .flags=0,
    .func=command_config_pwm_out
}, {
    // spi_set_software_bus oid=%c miso_pin=%u mosi_pin=%u sclk_pin=%u mode=%u rate=%u
    .msg_id=48,
    .num_params=6,
    .param_types = command_parameters39,
    .num_args=6,
    .flags=0,
    .func=command_spi_set_software_bus
}, {
    // query_adxl345_status oid=%c
    .msg_id=49,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_query_adxl345_status
}, {
    // query_adxl345 oid=%c clock=%u rest_ticks=%u
    .msg_id=50,
    .num_params=3,
    .param_types = command_parameters25,
    .num_args=3,
    .flags=0,
    .func=command_query_adxl345
}, {
    // config_adxl345 oid=%c spi_oid=%c
    .msg_id=51,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_config_adxl345
}, {
    // spi_angle_transfer oid=%c data=%*s
    .msg_id=52,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_spi_angle_transfer
}, {
    // query_spi_angle oid=%c clock=%u rest_ticks=%u time_shift=%c
    .msg_id=53,
    .num_params=4,
    .param_types = command_parameters13,
    .num_args=4,
    .flags=0,
    .func=command_query_spi_angle
}, {
    // config_spi_angle oid=%c spi_oid=%c spi_angle_type=%c
    .msg_id=54,
    .num_params=3,
    .param_types = command_parameters31,
    .num_args=3,
    .flags=0,
    .func=command_config_spi_angle
}, {
    // query_mpu9250_status oid=%c
    .msg_id=55,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_query_mpu9250_status
}, {
    // query_mpu9250 oid=%c clock=%u rest_ticks=%u
    .msg_id=56,
    .num_params=3,
    .param_types = command_parameters25,
    .num_args=3,
    .flags=0,
    .func=command_query_mpu9250
}, {
    // config_mpu9250 oid=%c i2c_oid=%c
    .msg_id=57,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_config_mpu9250
}, {
    // st7920_send_data oid=%c data=%*s
    .msg_id=58,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_st7920_send_data
}, {
    // st7920_send_cmds oid=%c cmds=%*s
    .msg_id=59,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_st7920_send_cmds
}, {
    // config_st7920 oid=%c cs_pin=%u sclk_pin=%u sid_pin=%u sync_delay_ticks=%u cmd_delay_ticks=%u
    .msg_id=60,
    .num_params=6,
    .param_types = command_parameters39,
    .num_args=6,
    .flags=0,
    .func=command_config_st7920
}, {
    // hd44780_send_data oid=%c data=%*s
    .msg_id=61,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_hd44780_send_data
}, {
    // hd44780_send_cmds oid=%c cmds=%*s
    .msg_id=62,
    .num_params=2,
    .param_types = command_parameters12,
    .num_args=3,
    .flags=0,
    .func=command_hd44780_send_cmds
}, {
    // config_hd44780 oid=%c rs_pin=%u e_pin=%u d4_pin=%u d5_pin=%u d6_pin=%u d7_pin=%u delay_ticks=%u
    .msg_id=63,
    .num_params=8,
    .param_types = command_parameters40,
    .num_args=8,
    .flags=0,
    .func=command_config_hd44780
}, {
    // buttons_ack oid=%c count=%c
    .msg_id=64,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_buttons_ack
}, {
    // buttons_query oid=%c clock=%u rest_ticks=%u retransmit_count=%c invert=%c
    .msg_id=65,
    .num_params=5,
    .param_types = command_parameters41,
    .num_args=5,
    .flags=0,
    .func=command_buttons_query
}, {
    // buttons_add oid=%c pos=%c pin=%u pull_up=%c
    .msg_id=66,
    .num_params=4,
    .param_types = command_parameters9,
    .num_args=4,
    .flags=0,
    .func=command_buttons_add
}, {
    // config_buttons oid=%c button_count=%c
    .msg_id=67,
    .num_params=2,
    .param_types = command_parameters20,
    .num_args=2,
    .flags=0,
    .func=command_config_buttons
}, {
    // tmcuart_send oid=%c write=%*s read=%c
    .msg_id=68,
    .num_params=3,
    .param_types = command_parameters42,
    .num_args=4,
    .flags=0,
    .func=command_tmcuart_send
}, {
    // config_tmcuart oid=%c rx_pin=%u pull_up=%c tx_pin=%u bit_time=%u
    .msg_id=69,
    .num_params=5,
    .param_types = command_parameters43,
    .num_args=5,
    .flags=0,
    .func=command_config_tmcuart
}, {
    // neopixel_send oid=%c
    .msg_id=70,
    .num_params=1,
    .param_types = command_parameters24,
    .num_args=1,
    .flags=0,
    .func=command_neopixel_send
}, {
    // neopixel_update oid=%c pos=%hu data=%*s
    .msg_id=71,
    .num_params=3,
    .param_types = command_parameters15,
    .num_args=4,
    .flags=0,
    .func=command_neopixel_update
}, {
    // config_neopixel oid=%c pin=%u data_size=%hu bit_max_ticks=%u reset_min_ticks=%u
    .msg_id=72,
    .num_params=5,
    .param_types = command_parameters44,
    .num_args=5,
    .flags=0,
    .func=command_config_neopixel
}, {
    // query_counter oid=%c clock=%u poll_ticks=%u sample_ticks=%u
    .msg_id=73,
    .num_params=4,
    .param_types = command_parameters21,
    .num_args=4,
    .flags=0,
    .func=command_query_counter
}, {
    // config_counter oid=%c pin=%u pull_up=%c
    .msg_id=74,
    .num_params=3,
    .param_types = command_parameters33,
    .num_args=3,
    .flags=0,
    .func=command_config_counter
}, {
    // config_reset
    .msg_id=75,
    .num_params=0,
    .param_types = 0,
    .num_args=0,
    .flags=0x01,
    .func=command_config_reset
}, {
    // set_pca9685_out bus=%c addr=%c channel=%c cycle_ticks=%u value=%hu
    .msg_id=76,
    .num_params=5,
    .param_types = command_parameters45,
    .num_args=5,
    .flags=0,
    .func=command_set_pca9685_out
}, {
    // queue_pca9685_out oid=%c clock=%u value=%hu
    .msg_id=77,
    .num_params=3,
    .param_types = command_parameters11,
    .num_args=3,
    .flags=0,
    .func=command_queue_pca9685_out
}, {
    // config_pca9685 oid=%c bus=%c addr=%c channel=%c cycle_ticks=%u value=%hu default_value=%hu max_duration=%u
    .msg_id=78,
    .num_params=8,
    .param_types = command_parameters46,
    .num_args=8,
    .flags=0,
    .func=command_config_pca9685
}, {
    // query_ds18b20 oid=%c clock=%u rest_ticks=%u min_value=%i max_value=%i
    .msg_id=79,
    .num_params=5,
    .param_types = command_parameters47,
    .num_args=5,
    .flags=0,
    .func=command_query_ds18b20
}, {
    // config_ds18b20 oid=%c serial=%*s max_error_count=%c
    .msg_id=80,
    .num_params=3,
    .param_types = command_parameters42,
    .num_args=4,
    .flags=0,
    .func=command_config_ds18b20
},
};

const uint8_t command_index_size PROGMEM = ARRAY_SIZE(command_index);

// version: v0.10.0-530-g3387a9c2
// build_versions: gcc: (Debian 8.3.0-6) 8.3.0 binutils: (GNU Binutils for Debian) 2.31.1

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

// Identify size = 3073 (9189 uncompressed)
const uint32_t command_identify_size PROGMEM
    = ARRAY_SIZE(command_identify_data);
