From 89c875e38fca434e6b7aa44dcdc747af27ec65a7 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 26 Oct 2025 20:57:58 +0100 Subject: [PATCH] - First complete version of firmware. Currently being tested in the rehearsal room - Added bunch of screens, fonts and images - Added script to read out frame buffer (function currently disabled in Firmware) --- Firmware/.vscode/settings.json | 17 +- Firmware/CMakeLists.txt | 3 + Firmware/Command_Definition.h | 36 +- Firmware/Convert.c | 55 +++ Firmware/Convert.h | 30 ++ Firmware/Core1.c | 6 +- Firmware/Core1_LED_Enable.c | 23 +- Firmware/Core1_LED_Enable.h | 3 +- Firmware/Core1_Light_Controller.c | 67 ++- Firmware/Display.c | 10 +- Firmware/Display_Default_Configurations.c | 131 ++--- Firmware/Display_Default_Configurations.h | 2 - Firmware/Display_Objects.c | 46 +- Firmware/Display_Objects.h | 15 +- Firmware/Display_Objects_Datatypes.h | 40 +- Firmware/Display_Render_Complex.c | 280 +++++++---- Firmware/Display_Render_Complex.h | 11 +- Firmware/Display_Render_Simple.c | 2 +- Firmware/Display_Shapes.c | 12 +- Firmware/EEPROM_M24C64.c | 60 ++- Firmware/EEPROM_M24C64.h | 7 +- Firmware/Fonts/Font_DejaVu_Sans_Mono_15x25.c | 109 +++++ Firmware/Hierarchical_Menu.c | 279 ++++++++++- Firmware/Hierarchical_Menu.h | 36 +- Firmware/INA260.c | 62 ++- Firmware/INA260.h | 5 +- Firmware/Images/Image_Check_Green_128x128.c | 139 ++++++ Firmware/Images/Image_Check_Green_64x64.c | 75 +++ Firmware/Images/Image_Failed_Red_128x128.c | 139 ++++++ Firmware/Images/Image_Failed_Red_64x64.c | 75 +++ Firmware/Images/Image_Overcurrent_32x32.c | 43 ++ Firmware/Mode_Manager.c | 39 +- Firmware/Rotary_Encoder.c | 31 +- Firmware/Screen_Variables.c | 5 +- Firmware/Screens.h | 14 + .../Screens_Display/Common_Screen_Elements.c | 286 +++++++++++ .../Screens_Display/Common_Screen_Elements.h | 34 ++ .../Screens_Display/Screen_Default_Notes.c | 171 +++++++ Firmware/Screens_Display/Screen_EEPROM_Code.c | 218 +++++++++ .../Screens_Display/Screen_EEPROM_Write.c | 296 ++++++++++++ Firmware/Screens_Display/Screen_Graph.c | 70 ++- Firmware/Screens_Display/Screen_Idle.c | 161 +++++++ Firmware/Screens_Display/Screen_Loading.c | 6 +- Firmware/Screens_Display/Screen_Mode.c | 20 +- Firmware/Screens_Display/Screen_Mode_Change.c | 147 ++++++ Firmware/Screens_Display/Screen_Select_Bool.c | 2 + Firmware/Screens_Display/Screen_Select_Hue.c | 204 ++++++++ Firmware/Screens_Display/Screen_Select_List.c | 175 +++++++ .../Screens_Display/Screen_Select_MinMax.c | 267 +++++++++++ Firmware/Screens_Display/Screen_Select_RGB.c | 16 + .../Screens_Display/Screen_Select_Value.c | 16 +- Firmware/Screens_Display/Screen_Settings.c | 18 +- .../Screen_Settings_Hierarchical_Menu.c | 89 +++- .../Screens_Display/Screen_Settings_Reboot.c | 206 ++++++++ Firmware/Serial_Command.c | 232 +++++++++ Firmware/Serial_Command.h | 30 ++ Firmware/UI_Control.c | 8 +- Firmware/build/build_number.txt | 2 +- Firmware/main.c | 124 +++-- Python/Event_Compare/Event_Compare.py | 452 ++++++++++++++++++ Python/{ => Read_Buffer}/Buffer_Reader.cmd | 0 Python/{ => Read_Buffer}/Buffer_Reader.py | 0 62 files changed, 4668 insertions(+), 489 deletions(-) create mode 100644 Firmware/Convert.c create mode 100644 Firmware/Convert.h create mode 100644 Firmware/Fonts/Font_DejaVu_Sans_Mono_15x25.c create mode 100644 Firmware/Images/Image_Check_Green_128x128.c create mode 100644 Firmware/Images/Image_Check_Green_64x64.c create mode 100644 Firmware/Images/Image_Failed_Red_128x128.c create mode 100644 Firmware/Images/Image_Failed_Red_64x64.c create mode 100644 Firmware/Images/Image_Overcurrent_32x32.c create mode 100644 Firmware/Screens_Display/Common_Screen_Elements.c create mode 100644 Firmware/Screens_Display/Common_Screen_Elements.h create mode 100644 Firmware/Screens_Display/Screen_Default_Notes.c create mode 100644 Firmware/Screens_Display/Screen_EEPROM_Code.c create mode 100644 Firmware/Screens_Display/Screen_EEPROM_Write.c create mode 100644 Firmware/Screens_Display/Screen_Idle.c create mode 100644 Firmware/Screens_Display/Screen_Mode_Change.c create mode 100644 Firmware/Screens_Display/Screen_Select_Hue.c create mode 100644 Firmware/Screens_Display/Screen_Select_List.c create mode 100644 Firmware/Screens_Display/Screen_Select_MinMax.c create mode 100644 Firmware/Screens_Display/Screen_Settings_Reboot.c create mode 100644 Firmware/Serial_Command.c create mode 100644 Firmware/Serial_Command.h create mode 100644 Python/Event_Compare/Event_Compare.py rename Python/{ => Read_Buffer}/Buffer_Reader.cmd (100%) rename Python/{ => Read_Buffer}/Buffer_Reader.py (100%) diff --git a/Firmware/.vscode/settings.json b/Firmware/.vscode/settings.json index cad6e5e..bba8669 100644 --- a/Firmware/.vscode/settings.json +++ b/Firmware/.vscode/settings.json @@ -38,8 +38,17 @@ "raspberry-pi-pico.cmakePath": "${HOME}/.pico-sdk/cmake/v3.31.5/bin/cmake", "raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.12.1/ninja", "files.associations": { - "*.h": "c", - "compare": "c", - "cstdint": "c" - } + "*.h": "c", + "compare": "c", + "cstdint": "c", + "charconv": "c", + "optional": "c", + "format": "c", + "system_error": "c", + "array": "c", + "functional": "c", + "tuple": "c", + "type_traits": "c", + "utility": "c" + } } diff --git a/Firmware/CMakeLists.txt b/Firmware/CMakeLists.txt index 1a58985..fb3494c 100644 --- a/Firmware/CMakeLists.txt +++ b/Firmware/CMakeLists.txt @@ -58,8 +58,10 @@ add_executable(Firmware main.c PWM.c UART0.c + Convert.c I2C_Master.c USB_Serial.c + Serial_Command.c Hue.c Easings.c @@ -133,6 +135,7 @@ target_link_libraries(Firmware hardware_clocks hardware_uart pico_multicore + pico_rand ) pico_add_extra_outputs(Firmware) diff --git a/Firmware/Command_Definition.h b/Firmware/Command_Definition.h index d3318d7..fa0e385 100644 --- a/Firmware/Command_Definition.h +++ b/Firmware/Command_Definition.h @@ -79,6 +79,8 @@ #define MULTICORE_COMMAND_GET_ANALOG_VOLTAGE 'a' #define MULTICORE_COMMAND_GET_LED_POWER_ERROR 'b' +#define MULTICORE_COMMAND_GET_LED_ENABLE_PIN 'c' +#define MULTICORE_COMMAND_GET_LED_ALERT_PIN 'd' // ============================================================================================ @@ -118,6 +120,11 @@ typedef union uint32_t Pixel; } __packed LED_Data_t; +typedef struct { + int32_t Min; + int32_t Max; +} __packed MinMax_t; + typedef struct { int16_t Data; uint64_t Timestamp_ms; @@ -133,12 +140,14 @@ typedef struct { typedef struct { - uint8_t MIDI_Channel; - int8_t Octave; - uint8_t Note_Color_Red; - uint8_t Note_Color_Green; - uint8_t Note_Color_Blue; + int32_t MIDI_Channel; + int32_t Octave; + int32_t Note_Color_Red; + int32_t Note_Color_Green; + int32_t Note_Color_Blue; uint8_t Skip_Note_Off_Event; + uint8_t Note_Reset_Enabled; + int32_t Note_Reset_Timeout; } __packed Channel_MIDI_Configuration_s; typedef struct @@ -146,31 +155,28 @@ typedef struct uint8_t Enabled; LED_Data_t Color; uint32_t Timeout; - uint8_t Reset_Condition; - uint8_t Fade_Speed; + int32_t Reset_Condition; + int32_t Fade_Speed; } __packed Pause_Light_Configuration_s; typedef struct { - uint Timer; + uint32_t Timer; bool Is_Active; } Pause_Light_Timer_s; -typedef uint16_t Duration_t; - typedef struct { - Duration_t Duration_Min_s; - Duration_t Duration_Max_s; + MinMax_t Durations; int32_t Hue_Angle_Start_Color; - uint32_t Color_Change; - uint8_t Fade_Speed; + int32_t Color_Change; + int32_t Fade_Speed; } __packed Jam_Light_Configuration_s; typedef struct { LED_Data_t Color; - uint8_t Fade_Speed; + int32_t Fade_Speed; } __packed Const_Light_Configuration_s; diff --git a/Firmware/Convert.c b/Firmware/Convert.c new file mode 100644 index 0000000..eb15d67 --- /dev/null +++ b/Firmware/Convert.c @@ -0,0 +1,55 @@ +/* + * Convert.c + * + * Created: Tue Feb 22 2022 20:31:44 + * Author Chris + */ +// ============================================================================================ +// Includes +#include "Convert.h" + + +// ============================================================================================ +// Defines + + +// ============================================================================================ +// Variables + + +// ============================================================================================ +// Function Declarations + + +/******************************************************************* + Functions +*******************************************************************/ +int Convert_Char_To_Number(char input) +{ + int Result_Number = 0; + + if(input>='a' && input<='f') { Result_Number = (input-'a'+10); } + else if(input>='A' && input<='F') { Result_Number = (input-'A'+10); } + else if(input>='0' && input<='9') { Result_Number = (input-'0'); } + + return Result_Number; +} + +int Convert_CharArray_To_Number(char input[], int length) +{ + int i; + int Result_Number = 0; + + for(i=0;i +#include + + +// ============================================================================================ +// Defines + + +// ============================================================================================ +// Datatypes + + +// ============================================================================================ +// Function Declarations +int Convert_Char_To_Number(char input); +int Convert_CharArray_To_Number(char input[], int length); + + +#endif /* CONVERT_H_ */ diff --git a/Firmware/Core1.c b/Firmware/Core1.c index 22ca528..6e9d43b 100644 --- a/Firmware/Core1.c +++ b/Firmware/Core1.c @@ -105,8 +105,10 @@ void Core1_Parse_Command(uint8_t command, uint8_t parameter, int16_t value) /////////////////// // Get Functions // /////////////////// - case MULTICORE_COMMAND_GET_ANALOG_VOLTAGE: Core1_Send_Multicore_Answer(MULTICORE_COMMAND_GET_ANALOG_VOLTAGE , 0, (int16_t)Core1_ADC_Get_Result_mV()); break; - case MULTICORE_COMMAND_GET_LED_POWER_ERROR: Core1_Send_Multicore_Answer(MULTICORE_COMMAND_GET_LED_POWER_ERROR , 0, (int16_t)Core1_LED_Enable_Get_Error()); break; + case MULTICORE_COMMAND_GET_ANALOG_VOLTAGE: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_ADC_Get_Result_mV()); break; + case MULTICORE_COMMAND_GET_LED_POWER_ERROR: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_LED_Enable_Get_Error()); break; + case MULTICORE_COMMAND_GET_LED_ENABLE_PIN: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_LED_Enable_Get_Enable_Pin()); break; + case MULTICORE_COMMAND_GET_LED_ALERT_PIN: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_LED_Enable_Get_Alert_Pin()); break; default: break; } diff --git a/Firmware/Core1_LED_Enable.c b/Firmware/Core1_LED_Enable.c index 47677a5..a98e7c5 100644 --- a/Firmware/Core1_LED_Enable.c +++ b/Firmware/Core1_LED_Enable.c @@ -14,6 +14,8 @@ #include "hardware/gpio.h" +#include "USB_Serial.h" + // ============================================================================================ // Defines @@ -26,11 +28,10 @@ #define LEDG_OFF gpio_put(LEDG_PIN, 1) - #define LED_PWR_EN_GPIO 0 #define INA260_ALERT_GPIO 13 -#define ENABLE_LED_POWER() gpio_put(LED_PWR_EN_GPIO, 1); LEDG_ON; _Power_Was_Enabled_Before = true +#define ENABLE_LED_POWER() gpio_put(LED_PWR_EN_GPIO, 1); LEDG_ON; _Power_Was_Enabled_Before = true #define DISABLE_LED_POWER() gpio_put(LED_PWR_EN_GPIO, 0); LEDG_OFF @@ -54,13 +55,17 @@ void Core1_LED_Enable_Set_Error(LED_Power_Error error); *******************************************************************/ void Core1_LED_Enable_Init() { + gpio_init(LED_PWR_EN_GPIO); gpio_set_dir(LED_PWR_EN_GPIO, GPIO_OUT); DISABLE_LED_POWER(); + gpio_init(INA260_ALERT_GPIO); gpio_set_dir(INA260_ALERT_GPIO, GPIO_IN); _LED_Power_Error = UNDEFINED; _Power_Was_Enabled_Before = false; + _INA260_Alert_Last_State = gpio_get(INA260_ALERT_GPIO); + Core1_LED_Enable_Update_Alert_Status(); } @@ -92,11 +97,16 @@ void Core1_LED_Enable_Update_INA260_BusVoltage(uint16_t voltage_mV) _INA260_BusVoltage_mV = voltage_mV; } -bool Core1_LED_Enable_Get_Status() +bool Core1_LED_Enable_Get_Enable_Pin() { return gpio_get(LED_PWR_EN_GPIO); } +bool Core1_LED_Enable_Get_Alert_Pin() +{ + return gpio_get(INA260_ALERT_GPIO); +} + LED_Power_Error Core1_LED_Enable_Get_Error() { return _LED_Power_Error; @@ -108,11 +118,14 @@ LED_Power_Error Core1_LED_Enable_Get_Error() *******************************************************************/ void Core1_LED_Enable_Update_Alert_Status() { - if(_INA260_Alert_Last_State == true && gpio_get(LED_PWR_EN_GPIO) == false) { + // Falling edge detection if Alert pin -> Falling edge means Overcurrent detection triggered + bool Current_Alert_State = gpio_get(INA260_ALERT_GPIO); + if(_INA260_Alert_Last_State == true && Current_Alert_State == false) { Core1_LED_Enable_Set_Error(OVERCURRENT); + USB_SERIAL_SEND_STRING("OVERCURRENT"); USB_SERIAL_SEND_TERMINATOR(); } - _INA260_Alert_Last_State = gpio_get(LED_PWR_EN_GPIO); + _INA260_Alert_Last_State = Current_Alert_State; } void Core1_LED_Enable_Set_Error(LED_Power_Error error) diff --git a/Firmware/Core1_LED_Enable.h b/Firmware/Core1_LED_Enable.h index 0256164..79029fd 100644 --- a/Firmware/Core1_LED_Enable.h +++ b/Firmware/Core1_LED_Enable.h @@ -37,7 +37,8 @@ void Core1_LED_Enable_Tick(); void Core1_LED_Enable_Update_INA260_BusVoltage(uint16_t voltage_mV); -bool Core1_LED_Enable_Get_Status(); +bool Core1_LED_Enable_Get_Enable_Pin(); +bool Core1_LED_Enable_Get_Alert_Pin(); LED_Power_Error Core1_LED_Enable_Get_Error(); #endif // CORE1_LED_ENABLE_H \ No newline at end of file diff --git a/Firmware/Core1_Light_Controller.c b/Firmware/Core1_Light_Controller.c index c6f40b9..bb63bf2 100644 --- a/Firmware/Core1_Light_Controller.c +++ b/Firmware/Core1_Light_Controller.c @@ -25,7 +25,9 @@ #define NOTE_COLOR_GREEN_ALT NOTE_COLOR_GREEN + 1 #define NOTE_COLOR_BLUE_ALT NOTE_COLOR_BLUE + 1 -#define NOTE_COLOR_COUNT_RESET_THRESHOLD_TICKS 100 // 100 * 10 ms -> 1s +#define NOTE_COLOR_COUNT_RESET_THRESHOLD_TICKS (_EEPROM_Content.Channel_MIDI_Configuration[ch].Note_Reset_Timeout * (1000 / TIMER_INTERVALL_LED_UPDATE_ms)) + +// #define COUNT_APPLIED_NOTES // ============================================================================================ @@ -37,11 +39,14 @@ volatile bool _MIDI_To_Light_Enabled; extern volatile EEPROM_Content_t _EEPROM_Content; -volatile Info_Last_Received_Note_t _Info_Last_Received_Note[NUM_LED_CHANNELS]; -volatile Info_Last_Received_Note_t _Info_Last_Applied_Note[NUM_LED_CHANNELS]; -volatile Pause_Light_Timer_s _Pause_Light_Timer[NUM_LED_CHANNELS]; -volatile int _NoteOn_Color_Counter[NUM_LED_CHANNELS][NUM_LED_COLORS]; -volatile int _NoteOn_Color_Reset_Counter; +Info_Last_Received_Note_t _Info_Last_Received_Note[NUM_LED_CHANNELS]; +Info_Last_Received_Note_t _Info_Last_Applied_Note[NUM_LED_CHANNELS]; +volatile Pause_Light_Timer_s _Pause_Light_Timer[NUM_LED_CHANNELS]; +volatile int _NoteOn_Color_Counter[NUM_LED_CHANNELS][NUM_LED_COLORS]; +volatile int _NoteOn_Color_Reset_Counter; + + // 1 LED Channel, 3 LED Colors, 2 Event Types (Note On & Off) +int32_t _Event_Received_Counter[NUM_LED_CHANNELS][NUM_LED_COLORS][2]; static const uint8_t _PWM_Lookup[NUM_LED_COLORS][128] = { { // Red @@ -97,7 +102,7 @@ void Core1_Light_Controller_Init(void) { _MIDI_To_Light_Enabled = true; - for(uint ch=0;ch 0) + { + if(_NoteOn_Color_Reset_Counter < NOTE_COLOR_COUNT_RESET_THRESHOLD_TICKS) { + _NoteOn_Color_Reset_Counter++; + } + else { + Core1_Light_Controller_Reset_NoteOn_Counter(); + } + } } } @@ -217,6 +230,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t Core1_LED_Control_Set_DC_Direct(ch, R, DutyCycle); _NoteOn_Color_Counter[ch][R]++; + +#ifdef COUNT_APPLIED_NOTES + _Event_Received_Counter[ch][R][MIDI_EVENT_NOTE_ON - MIDI_EVENT_NOTE_OFF]++; +#endif } else if(midi_note_in_octave == NOTE_COLOR_GREEN || midi_note_in_octave == NOTE_COLOR_GREEN_ALT) { @@ -225,6 +242,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t Core1_LED_Control_Set_DC_Direct(ch, G, DutyCycle); _NoteOn_Color_Counter[ch][G]++; + +#ifdef COUNT_APPLIED_NOTES + _Event_Received_Counter[ch][G][MIDI_EVENT_NOTE_ON - MIDI_EVENT_NOTE_OFF]++; +#endif } else if(midi_note_in_octave == NOTE_COLOR_BLUE || midi_note_in_octave == NOTE_COLOR_BLUE_ALT) { @@ -233,6 +254,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t Core1_LED_Control_Set_DC_Direct(ch, B, DutyCycle); _NoteOn_Color_Counter[ch][B]++; + +#ifdef COUNT_APPLIED_NOTES + _Event_Received_Counter[ch][B][MIDI_EVENT_NOTE_ON - MIDI_EVENT_NOTE_OFF]++; +#endif } else { @@ -244,17 +269,29 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t if(midi_note_in_octave == NOTE_COLOR_RED || midi_note_in_octave == NOTE_COLOR_RED_ALT) { _NoteOn_Color_Counter[ch][R]--; - if(_NoteOn_Color_Counter[ch][R] == 0) { Core1_LED_Control_Set_DC_Direct(ch, R, 0); } + if(_NoteOn_Color_Counter[ch][R] == 0) { Core1_LED_Control_Set_DC_Direct(ch, R, 0); } + +#ifdef COUNT_APPLIED_NOTES + _Event_Received_Counter[ch][R][MIDI_EVENT_NOTE_OFF - MIDI_EVENT_NOTE_OFF]++; +#endif } else if(midi_note_in_octave == NOTE_COLOR_GREEN || midi_note_in_octave == NOTE_COLOR_GREEN_ALT) { _NoteOn_Color_Counter[ch][G]--; if(_NoteOn_Color_Counter[ch][G] == 0) { Core1_LED_Control_Set_DC_Direct(ch, G, 0); } + +#ifdef COUNT_APPLIED_NOTES + _Event_Received_Counter[ch][G][MIDI_EVENT_NOTE_OFF - MIDI_EVENT_NOTE_OFF]++; +#endif } else if(midi_note_in_octave == NOTE_COLOR_BLUE || midi_note_in_octave == NOTE_COLOR_BLUE_ALT) { _NoteOn_Color_Counter[ch][B]--; if(_NoteOn_Color_Counter[ch][B] == 0) { Core1_LED_Control_Set_DC_Direct(ch, B, 0); } + +#ifdef COUNT_APPLIED_NOTES + _Event_Received_Counter[ch][B][MIDI_EVENT_NOTE_OFF - MIDI_EVENT_NOTE_OFF]++; +#endif } else { @@ -349,7 +386,7 @@ void Core1_Light_Controller_Pause_Light_Trigger(uint8_t midi_event, uint8_t midi if(Match_Success) { if(_Pause_Light_Timer[ch].Is_Active == true) { - _Pause_Light_Timer[ch].Is_Active = false; + _Pause_Light_Timer[ch].Is_Active = false; Core1_LED_Control_Set_DC_Direct(ch, R, 0); Core1_LED_Control_Set_DC_Direct(ch, G, 0); diff --git a/Firmware/Display.c b/Firmware/Display.c index 3cbd726..bd01af6 100644 --- a/Firmware/Display.c +++ b/Firmware/Display.c @@ -446,7 +446,7 @@ void Display_Render_Objects(void) case SELECT_LIST: SL = (Object_Select_List*)(Object->Data); - Display_Render_Complex_Select_List(&Coordinates_Object, SL->List_Titles, SL->List_Entry_Count, SL->List_Char_Length, *SL->Selected_Entry, SL->Config); + Display_Render_Complex_Select_List(&Coordinates_Object, SL->List_Titles, SL->List_Entry_Count, SL->List_Char_Length, *SL->Selected_Entry, SL->Initial_Entry, SL->Config); break; case SELECT_VALUE: @@ -634,11 +634,13 @@ void Display_Draw_Style(Coordinates* coordinates, Style* style, uint32_t content void Display_Draw_Focused(Coordinates* coordinates, uint32_t width, uint32_t height) { - if(_Object_Selected == true) { - Display_Shapes_Draw_Rect_Filled(coordinates->X, coordinates->Y, 3, 3, DISPLAY_COLOR_RED); + // No focus indicator needed for this projects + + if(_Object_Selected == true) { + // Display_Shapes_Draw_Rect_Filled(coordinates->X, coordinates->Y, 3, 3, DISPLAY_COLOR_RED); } else { - Display_Shapes_Draw_Rect_Filled(coordinates->X, coordinates->Y, 3, 3, DISPLAY_COLOR_GREEN); + // Display_Shapes_Draw_Rect_Filled(coordinates->X, coordinates->Y, 3, 3, DISPLAY_COLOR_GREEN); } } diff --git a/Firmware/Display_Default_Configurations.c b/Firmware/Display_Default_Configurations.c index 6e5c34c..ee1b58d 100644 --- a/Firmware/Display_Default_Configurations.c +++ b/Firmware/Display_Default_Configurations.c @@ -47,9 +47,9 @@ const Message_Box_Style _Message_Box_Style_Regular = { Configuration_Menu_Select _Configuration_Default_Select_Menu = { - .X_Offset = 60, - .X_Indent = -4, - .Font = { _Font_DejaVu_Sans_Mono_Bold_7x15, _Font_DejaVu_Sans_Mono_7x15, _Font_DejaVu_Sans_Mono_6x12 }, + .X_Offset = 70, + .X_Indent = -6, + .Font = { _Font_DejaVu_Sans_Mono_10x17, _Font_DejaVu_Sans_Mono_7x15, _Font_DejaVu_Sans_Mono_6x12 }, .Color = { DISPLAY_COLOR_WHITE, DISPLAY_COLOR_LIGHTGREY, DISPLAY_COLOR_DARKGREY } }; @@ -104,9 +104,19 @@ Configuration_Select_YesNo _Configuration_Default_Select_YesNo = { Configuration_Select_List _Configuration_Default_Select_List = { .Font = _Font_DejaVu_Sans_Mono_10x17, - .List_Entry_Y_Gap = 10, .Color_Selected = DISPLAY_COLOR_WHITE, - .Color_Not_Selected = DISPLAY_COLOR_DARKGREY + .Color_Not_Selected = DISPLAY_COLOR_DARKGREY, + + .Y_Top = 80, + .List_Entry_Y_Gap = 10, + .Visible_Items = 5, // Show 5 items on screen + + .Show_Selection_Box = true, + .Selection_Box_Padding = 4, + .Selection_Box_Min_Width = 120, + .Selection_Box_Color = DISPLAY_COLOR_CYAN, + + .Mark_Initial_Entry = true }; Configuration_Select_Value _Configuration_Default_Select_Value = { @@ -129,116 +139,37 @@ Configuration_Select_RGB _Configuration_Default_Select_RGB = { .Ring_Color_Blue = DISPLAY_COLOR_FROM_RGB888(68, 68, 255), // Bright blue #4444ff // Geometry settings optimized for 240x240 circular display - .Center_Preview_Radius = 70, // 140px diameter color preview (leaves 50px margin) + .Center_Preview_Radius = 40, // 140px diameter color preview (leaves 50px margin) .Progress_Ring_Radius = 100, // 200px diameter progress ring (20px from edge) .Progress_Ring_Thickness = 8, // Substantial ring thickness for visibility .Indicator_Radius = 8, // 16px diameter indicator dot // Colors for UI elements - clean monochrome scheme - .Preview_Border_Color = DISPLAY_COLOR_WHITE, // White border for contrast - .Preview_Border_Thickness = 3, // Visible but not thick border - .Indicator_Core_Color = DISPLAY_COLOR_WHITE, // White indicator core - .Indicator_Glow_Color = DISPLAY_COLOR_FROM_RGB888(200, 200, 255), // Subtle blue glow + .Preview_Border_Color = DISPLAY_COLOR_WHITE, // White border for contrast + .Preview_Border_Thickness = 3, // Visible but not thick border + .Indicator_Core_Color = DISPLAY_COLOR_WHITE, // White indicator core + .Indicator_Glow_Color = DISPLAY_COLOR_FROM_RGB888(200, 200, 255), // Subtle blue glow .Background_Ring_Color = DISPLAY_COLOR_FROM_RGB888(64, 64, 64), // Dark gray background ring - .Background_Ring_Thickness = 2, // Thin background ring + .Background_Ring_Thickness = 2, // Thin background ring - // Previous marker settings - NEW + // Previous marker settings .Previous_Marker_Color = DISPLAY_COLOR_WHITE, .Previous_Marker_Radius = 3, .Previous_Marker_Ring_Offset = 15, // 15 pixels inside the main ring .Show_Previous_Markers = true, // Text display settings - clear hierarchy - .Component_Label_Font = _Font_DejaVu_Sans_Mono_Bold_7x15, // Bold for component labels (RED/GREEN/BLUE) - .Value_Font = _Font_DejaVu_Sans_Mono_10x17, // Large readable font for values - .Text_Color = DISPLAY_COLOR_WHITE, // High contrast white text - .Text_Y_Offset = 100, // 100px from bottom edge + .Component_Font = _Font_DejaVu_Sans_Mono_Bold_11x17, // Bold for component labels (RED/GREEN/BLUE) + .Value_Font = _Font_DejaVu_Sans_Mono_10x17, // Large readable font for values + .Text_Color = DISPLAY_COLOR_WHITE, // High contrast white text + .Component_Text_Y_Offset = DISPLAY_Y_CENTER - 60, + .Value_Text_Y_Offset = DISPLAY_Y_CENTER + 60, // Animation and interaction settings - .Smooth_Animation_Steps = 8, // Smooth but not too slow transitions - .Enable_Encoder_Acceleration = true, // Enable fast value changes - .Acceleration_Threshold = 3, // Trigger acceleration after 3 fast steps - .Acceleration_Multiplier = 5 // 5x speed during fast rotation -}; - -// Alternative configuration for smaller displays or different aesthetics -Configuration_Select_RGB _Configuration_Compact_Select_RGB = { - // More subdued colors for compact interface - .Ring_Color_Red = DISPLAY_COLOR_FROM_RGB888(220, 80, 80), // Softer red - .Ring_Color_Green = DISPLAY_COLOR_FROM_RGB888(80, 220, 80), // Softer green - .Ring_Color_Blue = DISPLAY_COLOR_FROM_RGB888(80, 80, 220), // Softer blue - - // Smaller geometry for compact displays - .Center_Preview_Radius = 50, // Smaller preview circle - .Progress_Ring_Radius = 80, // Closer to center - .Progress_Ring_Thickness = 6, // Thinner ring - .Indicator_Radius = 6, // Smaller indicator - - // Minimal UI colors - .Preview_Border_Color = DISPLAY_COLOR_LIGHTGREY, - .Preview_Border_Thickness = 2, - .Indicator_Core_Color = DISPLAY_COLOR_WHITE, - .Indicator_Glow_Color = DISPLAY_COLOR_LIGHTGREY, - .Background_Ring_Color = DISPLAY_COLOR_DARKGREY, - .Background_Ring_Thickness = 1, - - // Previous marker settings - NEW - .Previous_Marker_Color = DISPLAY_COLOR_WHITE, - .Previous_Marker_Radius = 3, - .Previous_Marker_Ring_Offset = 15, // 15 pixels inside the main ring - .Show_Previous_Markers = true, - - // Smaller fonts for compact layout - .Component_Label_Font = _Font_DejaVu_Sans_Mono_6x12, // Smaller label font - .Value_Font = _Font_DejaVu_Sans_Mono_Bold_7x15, // Medium value font - .Text_Color = DISPLAY_COLOR_LIGHTGREY, - .Text_Y_Offset = 25, - - // Faster, more responsive settings for compact interface - .Smooth_Animation_Steps = 4, // Faster transitions - .Enable_Encoder_Acceleration = true, - .Acceleration_Threshold = 2, // More sensitive acceleration - .Acceleration_Multiplier = 8 // Higher acceleration -}; - -// High contrast configuration for accessibility -Configuration_Select_RGB _Configuration_High_Contrast_Select_RGB = { - // Pure, high contrast colors - .Ring_Color_Red = DISPLAY_COLOR_RED, // Pure red - .Ring_Color_Green = DISPLAY_COLOR_GREEN, // Pure green - .Ring_Color_Blue = DISPLAY_COLOR_BLUE, // Pure blue - - // Standard geometry - .Center_Preview_Radius = 70, - .Progress_Ring_Radius = 100, - .Progress_Ring_Thickness = 10, // Thicker for better visibility - .Indicator_Radius = 10, // Larger indicator - - // High contrast UI - .Preview_Border_Color = DISPLAY_COLOR_WHITE, - .Preview_Border_Thickness = 4, // Thick border for definition - .Indicator_Core_Color = DISPLAY_COLOR_WHITE, - .Indicator_Glow_Color = DISPLAY_COLOR_WHITE, // No glow, just solid white - .Background_Ring_Color = DISPLAY_COLOR_BLACK, // Maximum contrast - .Background_Ring_Thickness = 3, - - // Previous marker settings - NEW - .Previous_Marker_Color = DISPLAY_COLOR_WHITE, - .Previous_Marker_Radius = 3, - .Previous_Marker_Ring_Offset = 15, // 15 pixels inside the main ring - .Show_Previous_Markers = true, - - // Large, clear fonts - .Component_Label_Font = _Font_DejaVu_Sans_Mono_10x17, // Larger labels - .Value_Font = _Font_DejaVu_Sans_Mono_Bold_7x15, // Bold values - .Text_Color = DISPLAY_COLOR_WHITE, - .Text_Y_Offset = 35, - - // Conservative animation for accessibility - .Smooth_Animation_Steps = 12, // Slower, more predictable - .Enable_Encoder_Acceleration = false, // Disable acceleration for precision - .Acceleration_Threshold = 5, - .Acceleration_Multiplier = 2 + .Smooth_Animation_Steps = 8, // Smooth but not too slow transitions + .Enable_Encoder_Acceleration = true, // Enable fast value changes + .Acceleration_Threshold = 3, // Trigger acceleration after 3 fast steps + .Acceleration_Multiplier = 5 // 5x speed during fast rotation }; Configuration_Entry_Indicator _Configuration_Default_Entry_Indicator_Arc = { diff --git a/Firmware/Display_Default_Configurations.h b/Firmware/Display_Default_Configurations.h index d78de07..91e55d9 100644 --- a/Firmware/Display_Default_Configurations.h +++ b/Firmware/Display_Default_Configurations.h @@ -33,8 +33,6 @@ extern Configuration_Select_List _Configuration_Default_Select_List; extern Configuration_Select_Value _Configuration_Default_Select_Value; extern Configuration_Select_RGB _Configuration_Default_Select_RGB; -extern Configuration_Select_RGB _Configuration_Compact_Select_RGB; -extern Configuration_Select_RGB _Configuration_High_Contrast_Select_RGB; extern Configuration_Entry_Indicator _Configuration_Default_Entry_Indicator_Arc; extern Configuration_Entry_Indicator _Configuration_Default_Entry_Indicator_Dot; diff --git a/Firmware/Display_Objects.c b/Firmware/Display_Objects.c index 190acf8..225f411 100644 --- a/Firmware/Display_Objects.c +++ b/Firmware/Display_Objects.c @@ -427,6 +427,7 @@ Object_ID Display_Objects_Add_Image(Anchor_Point anchor_point, Coordinates_Type Image->Image = image; Image->Rotation_Angle = Rotation_Angle; Image->Alpha = UINT8_MAX; + Image->Scale = 1.0f; return Display_Objects_Add(IMAGE, anchor_point, coordinates_type, x, y, selectable, (void *)Image, style_id, animation_id); } @@ -645,7 +646,7 @@ Object_ID Display_Objects_Add_Menu_Select(char* menu_titles, uint32_t menu_entry return Display_Objects_Add(MENU_SELECT, LEFT_TOP, BOTH_IN_PIXEL, 0, 0, NOT_SELECTABLE, (void *)Menu_Select, NO_STYLE, NO_ANIMATION); } -Object_ID Display_Objects_Add_Menu_Icon_Row(Icon_Row_Item* items, uint32_t item_count, uint32_t* selected_item, Configuration_Menu_Icon_Row* config) +Object_ID Display_Objects_Add_Menu_Icon_Row(Icon_Row_Item* items, uint32_t item_count, uint32_t* selected_item, const Configuration_Menu_Icon_Row* config) { Object_Menu_Icon_Row* Icon_Row = malloc(sizeof(Object_Menu_Icon_Row)); Icon_Row->Items = items; @@ -709,7 +710,7 @@ Object_ID Display_Objects_Add_Menu_Ring(Menu_Ring_Item_Config* items, uint32_t i return Display_Objects_Add(MENU_RING, LEFT_TOP, BOTH_IN_PIXEL, 0, 0, SELECTABLE, (void *)Menu_Ring, NO_STYLE, NO_ANIMATION); } -Object_ID Display_Objects_Add_Menu_Hierarchical(const Menu_List** current_list, int32_t* selected_item, int32_t* scroll_offset, Configuration_Menu_Hierarchical* config) +Object_ID Display_Objects_Add_Menu_Hierarchical(const Menu_List** current_list, int32_t* selected_item, int32_t* scroll_offset, const Configuration_Menu_Hierarchical* config) { Object_Menu_Hierarchical* Menu_Hierarchical = malloc(sizeof(Object_Menu_Hierarchical)); Menu_Hierarchical->Current_List = current_list; @@ -740,7 +741,7 @@ Object_ID Display_Objects_Add_Menu_Hierarchical(const Menu_List** current_list, return Display_Objects_Add(MENU_HIERARCHICAL, LEFT_TOP, BOTH_IN_PIXEL, 0, 0, NOT_SELECTABLE, (void *)Menu_Hierarchical, NO_STYLE, NO_ANIMATION); } -Object_ID Display_Objects_Add_Select_YesNo(char* title, uint32_t title_length, bool* value, Configuration_Select_YesNo* config) +Object_ID Display_Objects_Add_Select_YesNo(char* title, uint32_t title_length, bool* value, const Configuration_Select_YesNo* config) { Object_Select_YesNo* Select_YesNo = malloc(sizeof(Object_Select_YesNo)); Select_YesNo->Title = title; @@ -751,19 +752,20 @@ Object_ID Display_Objects_Add_Select_YesNo(char* title, uint32_t title_length, b return Display_Objects_Add(SELECT_YESNO, LEFT_TOP, BOTH_IN_PIXEL, 0, 0, NOT_SELECTABLE, (void *)Select_YesNo, NO_STYLE, NO_ANIMATION); } -Object_ID Display_Objects_Add_Select_List(char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t* selected_entry, Configuration_Select_List* config) +Object_ID Display_Objects_Add_Select_List(char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t* selected_entry, const Configuration_Select_List* config) { Object_Select_List* Select_List = malloc(sizeof(Object_Select_List)); Select_List->List_Titles = list_titles; Select_List->List_Entry_Count = list_entry_count; Select_List->List_Char_Length = list_char_length; Select_List->Selected_Entry = selected_entry; + Select_List->Initial_Entry = *selected_entry; Select_List->Config = config; return Display_Objects_Add(SELECT_LIST, LEFT_TOP, BOTH_IN_PIXEL, 0, 0, NOT_SELECTABLE, (void *)Select_List, NO_STYLE, NO_ANIMATION); } -Object_ID Display_Objects_Add_Select_Value(char* title, uint32_t title_length, int32_t* value, int32_t max, int32_t min, char* format, Configuration_Select_Value* config) +Object_ID Display_Objects_Add_Select_Value(char* title, uint32_t title_length, int32_t* value, int32_t max, int32_t min, char* format, const Configuration_Select_Value* config) { Object_Select_Value* Select_Value = malloc(sizeof(Object_Select_Value)); Select_Value->Title = title; @@ -777,7 +779,7 @@ Object_ID Display_Objects_Add_Select_Value(char* title, uint32_t title_length, i return Display_Objects_Add(SELECT_VALUE, LEFT_TOP, BOTH_IN_PIXEL, 0, 0, NOT_SELECTABLE, (void *)Select_Value, NO_STYLE, NO_ANIMATION); } -Object_ID Display_Objects_Add_Select_RGB(LED_Data_t* color_value, uint8_t* current_component, Configuration_Select_RGB* config) +Object_ID Display_Objects_Add_Select_RGB(LED_Data_t* color_value, uint8_t* current_component, const Configuration_Select_RGB* config) { if (color_value == NULL || config == NULL) { return -1; // Invalid parameters @@ -826,7 +828,7 @@ Object_ID Display_Objects_Add_Select_RGB(LED_Data_t* color_value, uint8_t* curre ); } -Object_ID Display_Objects_Add_Entry_Indicator(uint32_t entry_count, int32_t* entry_value, Configuration_Entry_Indicator* config) +Object_ID Display_Objects_Add_Entry_Indicator(uint32_t entry_count, int32_t* entry_value, const Configuration_Entry_Indicator* config) { Object_Entry_Indicator* Entry_Indicator = malloc(sizeof(Object_Entry_Indicator)); Entry_Indicator->Entry_Count = entry_count; @@ -894,6 +896,12 @@ void Display_Objects_Update_Color(Object_ID id, Display_Color color) ((Object_Shape*)(Object->Data))->Color = color; break; + case VALUE_BAR_ARC: + if(((Object_Value_Bar_Arc*)(Object->Data))->Arc != NULL) { + ((Object_Value_Bar_Arc*)(Object->Data))->Arc->Color = color; + } + break; + default: break; } @@ -948,11 +956,7 @@ void Display_Objects_Update_Alpha(Object_ID id, uint8_t new_alpha) { Display_Object* Object = Display_Objects_Get_By_ID(id); - if(Object == NULL) { - return; - } - - if(Object->Type != IMAGE) { + if(Object == NULL || Object->Type != IMAGE) { return; } @@ -961,6 +965,19 @@ void Display_Objects_Update_Alpha(Object_ID id, uint8_t new_alpha) IM->Alpha = new_alpha; } +void Display_Objects_Update_Scale(Object_ID id, float new_scale) +{ + Display_Object* Object = Display_Objects_Get_By_ID(id); + + if(Object == NULL || Object->Type != IMAGE || new_scale < 0.0f) { + return; + } + + Object_Image_Color* IM = (Object_Image_Color*)(Object->Data); + + IM->Scale = new_scale; +} + void Display_Objects_Update_Max_Min(Object_ID id, uint max, uint min) { Display_Object* Object = Display_Objects_Get_By_ID(id); @@ -976,6 +993,11 @@ void Display_Objects_Update_Max_Min(Object_ID id, uint max, uint min) ((Object_Value_Bar_Rect*)Object->Data)->Min = min; break; + case VALUE_BAR_ARC: + ((Object_Value_Bar_Arc*)Object->Data)->Max = max; + ((Object_Value_Bar_Arc*)Object->Data)->Min = min; + break; + case GRAPH: ((Object_Graph*)Object->Data)->Max = max; ((Object_Graph*)Object->Data)->Min = min; diff --git a/Firmware/Display_Objects.h b/Firmware/Display_Objects.h index 4266475..5fc90a7 100644 --- a/Firmware/Display_Objects.h +++ b/Firmware/Display_Objects.h @@ -81,14 +81,14 @@ Object_ID Dispaly_Objects_Add_Line_Rad ( Coordinates_Type coordinates_ Object_ID Display_Objects_Add_Canvas (Anchor_Point anchor_point, Coordinates_Type coordinates_type, int16_t x, int16_t y, bool selectable, Display_Color color, uint width, uint height , Style_ID style_id, Animation_ID animation_id); Object_ID Display_Objects_Add_Message_Box (Anchor_Point anchor_point, Coordinates_Type coordinates_type, int16_t x, int16_t y, char* text, Object_Message_Box_Icon icon, const Message_Box_Style* style); Object_ID Display_Objects_Add_Menu_Select (char* menu_titles, uint32_t menu_entry_count, uint32_t title_char_length, uint32_t* selected_entry, Configuration_Menu_Select* config); -Object_ID Display_Objects_Add_Menu_Icon_Row (Icon_Row_Item* items, uint32_t item_count, uint32_t* selected_item, Configuration_Menu_Icon_Row* config); +Object_ID Display_Objects_Add_Menu_Icon_Row (Icon_Row_Item* items, uint32_t item_count, uint32_t* selected_item, const Configuration_Menu_Icon_Row* config); Object_ID Display_Objects_Add_Menu_Ring (Menu_Ring_Item_Config* items, uint32_t item_count, uint32_t* selected_item, Configuration_Menu_Ring* config); -Object_ID Display_Objects_Add_Menu_Hierarchical (const Menu_List** current_list, int32_t* selected_item, int32_t* scroll_offset, Configuration_Menu_Hierarchical* config); -Object_ID Display_Objects_Add_Select_YesNo (char* title, uint32_t title_length, bool* value, Configuration_Select_YesNo* config); -Object_ID Display_Objects_Add_Select_List (char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t* selected_entry, Configuration_Select_List* config); -Object_ID Display_Objects_Add_Select_Value (char* title, uint32_t title_length, int32_t* value, int32_t max, int32_t min, char* format, Configuration_Select_Value* config); -Object_ID Display_Objects_Add_Select_RGB (LED_Data_t* color_value, uint8_t* current_component, Configuration_Select_RGB* config); -Object_ID Display_Objects_Add_Entry_Indicator (uint32_t entry_count, int32_t* entry_value, Configuration_Entry_Indicator* config); +Object_ID Display_Objects_Add_Menu_Hierarchical (const Menu_List** current_list, int32_t* selected_item, int32_t* scroll_offset, const Configuration_Menu_Hierarchical* config); +Object_ID Display_Objects_Add_Select_YesNo (char* title, uint32_t title_length, bool* value, const Configuration_Select_YesNo* config); +Object_ID Display_Objects_Add_Select_List (char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t* selected_entry, const Configuration_Select_List* config); +Object_ID Display_Objects_Add_Select_Value (char* title, uint32_t title_length, int32_t* value, int32_t max, int32_t min, char* format, const Configuration_Select_Value* config); +Object_ID Display_Objects_Add_Select_RGB (LED_Data_t* color_value, uint8_t* current_component, const Configuration_Select_RGB* config); +Object_ID Display_Objects_Add_Entry_Indicator (uint32_t entry_count, int32_t* entry_value, const Configuration_Entry_Indicator* config); void Display_Objects_Update_Coordinates (Object_ID id, Anchor_Point anchor_point, Coordinates_Type coordinates_type, int16_t x, int16_t y); @@ -97,6 +97,7 @@ void Display_Objects_Update_Color (Object_ID id, Display_Color color); void Display_Objects_Update_Text (Object_ID id, char* text); void Display_Objects_Update_Image (Object_ID id, Image_Color* new_image); void Display_Objects_Update_Alpha (Object_ID id, uint8_t new_alpha); +void Display_Objects_Update_Scale (Object_ID id, float new_scale); void Display_Objects_Update_Max_Min (Object_ID id, uint max, uint min); int Display_Objects_Update_Pixel (Object_ID id, int16_t x, int16_t y, Display_Color color); void Display_Objects_Show_Message_Box (Object_ID id, uint32_t ticks); diff --git a/Firmware/Display_Objects_Datatypes.h b/Firmware/Display_Objects_Datatypes.h index 603cf36..1759f22 100644 --- a/Firmware/Display_Objects_Datatypes.h +++ b/Firmware/Display_Objects_Datatypes.h @@ -297,6 +297,7 @@ typedef struct { Image_Color *Image; uint16_t Rotation_Angle; uint8_t Alpha; + float Scale; } Object_Image_Color; typedef struct { @@ -404,7 +405,7 @@ typedef struct { uint32_t Item_Count; uint32_t* Selected_Item; - Configuration_Menu_Icon_Row* Config; + const Configuration_Menu_Icon_Row* Config; } Object_Menu_Icon_Row; @@ -572,7 +573,7 @@ typedef struct { const Menu_List** Current_List; int32_t* Selected_Item; int32_t* Scroll_Offset; - Configuration_Menu_Hierarchical* Config; + const Configuration_Menu_Hierarchical* Config; // Internal state uint32_t Animation_Counter; @@ -605,15 +606,26 @@ typedef struct { bool* Value; - Configuration_Select_YesNo* Config; + const Configuration_Select_YesNo* Config; } Object_Select_YesNo; typedef struct { const unsigned char *Font; - int16_t List_Entry_Y_Gap; - Display_Color Color_Selected; + Display_Color Color_Selected; Display_Color Color_Not_Selected; + + int16_t Y_Top; + int16_t List_Entry_Y_Gap; + uint16_t Visible_Items; // Number of items visible on screen + + // Animation Parameters + bool Show_Selection_Box; + uint16_t Selection_Box_Padding; // Padding around selection + uint16_t Selection_Box_Min_Width; + Display_Color Selection_Box_Color; + + bool Mark_Initial_Entry; } Configuration_Select_List; typedef struct { @@ -621,7 +633,8 @@ typedef struct { uint32_t List_Entry_Count; uint32_t List_Char_Length; uint32_t* Selected_Entry; - Configuration_Select_List* Config; + uint32_t Initial_Entry; + const Configuration_Select_List* Config; } Object_Select_List; @@ -648,7 +661,7 @@ typedef struct { char Format[32]; - Configuration_Select_Value* Config; + const Configuration_Select_Value* Config; } Object_Select_Value; /******************************************************************* @@ -681,10 +694,11 @@ typedef struct { bool Show_Previous_Markers; // Enable/disable previous markers // Text display settings - const unsigned char* Component_Label_Font; // Font for "RED", "GREEN", "BLUE" labels - const unsigned char* Value_Font; // Font for numeric value display - Display_Color Text_Color; // Color for all text elements - int16_t Text_Y_Offset; // Vertical offset from bottom for text + const unsigned char* Component_Font; // Font for "RED", "GREEN", "BLUE" labels + const unsigned char* Value_Font; // Font for numeric value display + Display_Color Text_Color; // Color for all text elements + int16_t Component_Text_Y_Offset; // Vertical offset from bottom for text + int16_t Value_Text_Y_Offset; // Vertical offset from bottom for text // Animation settings uint16_t Smooth_Animation_Steps; // Steps for smooth value transitions @@ -711,7 +725,7 @@ typedef struct { uint16_t Progress_Start_Angle; // Starting angle for progress arc (270° = 12 o'clock) // Configuration pointer - Configuration_Select_RGB* Config; + const Configuration_Select_RGB* Config; } Object_Select_RGB; @@ -747,7 +761,7 @@ typedef struct { uint32_t Entry_Count; int32_t* Entry_Value; - Configuration_Entry_Indicator* Config; + const Configuration_Entry_Indicator* Config; } Object_Entry_Indicator; /******************************************************************* diff --git a/Firmware/Display_Render_Complex.c b/Firmware/Display_Render_Complex.c index f5b0bc2..bda09b0 100644 --- a/Firmware/Display_Render_Complex.c +++ b/Firmware/Display_Render_Complex.c @@ -27,17 +27,20 @@ static const int _LEFT = -1; static const int _UP = -1; static const int _DOWN = +1; -static int16_t _Menu_Hierarchical_Current_Y = 0; // Current animated Y position of menu -static int16_t _Menu_Hierarchical_Scroll_Y = 0; // Current animated scroll offset -static float _Menu_Hierarchical_Transition_Progress = 0.0f; // Selection transition progress (0.0-1.0) -static int32_t _Menu_Hierarchical_Last_Selected = -1; // Previous selected item for transition detection +static int16_t _Menu_Hierarchical_Current_Y = 0; // Current animated Y position of menu +static int16_t _Menu_Hierarchical_Scroll_Y = 0; // Current animated scroll offset +static float _Menu_Hierarchical_Transition_Progress = 0.0f; // Selection transition progress (0.0-1.0) +static int32_t _Menu_Hierarchical_Last_Selected = -1; // Previous selected item for transition detection -static int16_t _Menu_Select_Current_Y = 0; -static int16_t _Menu_Icon_Row_Current_X = 0; -static int16_t _Select_YesNo_Current_X = 0; -static int16_t _Select_List_Current_Y = 0; -static float _Entry_Indicator_Current_Angle = 0.0f; -static int16_t _Entry_Indicator_Current_X = 0; +static int16_t _Menu_Select_Current_Y = 0; +static int16_t _Menu_Icon_Row_Current_X = 0; +static int16_t _Select_YesNo_Current_X = 0; + +static int32_t _Select_List_Target_Scroll_Y = 0; +static int32_t _Select_List_Current_Scroll_Y = 0; + +static float _Entry_Indicator_Current_Angle = 0.0f; +static int16_t _Entry_Indicator_Current_X = 0; // ============================================================================================ @@ -49,17 +52,18 @@ static Menu_Transition_Direction Display_Render_Complex_Menu_Hierarchical_Detect static void Display_Render_Complex_Menu_Hierarchical_Auto_Detect_Changes(Object_Menu_Hierarchical* menu_hierarchical); static void Display_Render_Complex_Menu_Hierarchical_Update_Transition_Animation(Object_Menu_Hierarchical* menu_hierarchical); static void Display_Render_Complex_Menu_Hierarchical_Update_All_Animations(Object_Menu_Hierarchical* menu_hierarchical); -static void Display_Render_Complex_Menu_Hierarchical_Update_Animation(const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config); -static void Display_Render_Complex_Menu_Hierarchical_Single_Menu(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config, int16_t x_offset); -static void Display_Render_Complex_Menu_Hierarchical_Title(Coordinates* coordinates, const char* title, Configuration_Menu_Hierarchical* config); -static void Display_Render_Complex_Menu_Hierarchical_Items(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config); -static void Display_Render_Complex_Menu_Hierarchical_Single_Item(Coordinates* coordinates, const Menu_Item* item, int32_t item_index, int32_t selected_item, int16_t item_y, Display_Color item_color, float scale_factor, Configuration_Menu_Hierarchical* config); -static void Display_Render_Complex_Menu_Hierarchical_Selection_Box(Coordinates* coordinates, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config); -static void Display_Render_Complex_Menu_Hierarchical_Scroll_Indicators(Coordinates* coordinates, const Menu_List* current_list, int32_t scroll_offset, Configuration_Menu_Hierarchical* config); +static void Display_Render_Complex_Menu_Hierarchical_Update_Animation(const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config); +static void Display_Render_Complex_Menu_Hierarchical_Single_Menu(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config, int16_t x_offset); +static void Display_Render_Complex_Menu_Hierarchical_Title(Coordinates* coordinates, const char* title, const Configuration_Menu_Hierarchical* config); +static void Display_Render_Complex_Menu_Hierarchical_Items(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config); +static void Display_Render_Complex_Menu_Hierarchical_Single_Item(Coordinates* coordinates, const Menu_Item* item, int32_t item_index, int32_t selected_item, int16_t item_y, Display_Color item_color, float scale_factor, const Configuration_Menu_Hierarchical* config); +static void Display_Render_Complex_Menu_Hierarchical_Selection_Box(Coordinates* coordinates, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config); +static void Display_Render_Complex_Menu_Hierarchical_Scroll_Indicators(Coordinates* coordinates, const Menu_List* current_list, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config); +static int32_t Display_Render_Complex_Select_List_Calculate_Scroll_Offset(uint32_t selected_entry, uint32_t total_entries, uint16_t visible_items); static float Display_Render_Complex_Select_RGB_Calculate_Progress_Ring_Angle(uint8_t value, uint8_t min_value, uint8_t max_value); -static void Display_Render_Complex_Entry_Indicator_Arc(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, Configuration_Entry_Indicator* config); -static void Display_Render_Complex_Entry_Indicator_Dot(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, Configuration_Entry_Indicator* config); +static void Display_Render_Complex_Entry_Indicator_Arc(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, const Configuration_Entry_Indicator* config); +static void Display_Render_Complex_Entry_Indicator_Dot(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, const Configuration_Entry_Indicator* config); /******************************************************************* @@ -115,13 +119,13 @@ void Display_Render_Complex_Value_Bar_Arc(Coordinates* coordinates, Object_Value { Object_Value_Bar_Arc* V = value_bar; - if(*V->Value != V->Current) + if(*(V->Value )!= V->Current) { - // Need to drcrease - if(*V->Value < V->Current) + // Need to decrease + if(*(V->Value) < V->Current) { - if(abs(*V->Value - V->Current) <= V->Delta_Dec) { - V->Current = *V->Value; + if((V->Current - *(V->Value)) <= V->Delta_Dec) { + V->Current = *(V->Value); } else { V->Current -= V->Delta_Dec; @@ -130,8 +134,8 @@ void Display_Render_Complex_Value_Bar_Arc(Coordinates* coordinates, Object_Value // Need to increase else { - if(abs(*V->Value - V->Current) <= V->Delta_Inc) { - V->Current = *V->Value; + if((*(V->Value) - V->Current) <= V->Delta_Inc) { + V->Current = *(V->Value); } else { V->Current += V->Delta_Inc; @@ -335,7 +339,7 @@ void Display_Render_Complex_Menu_Icon_Row_Set(uint32_t initially_selected_item, _Menu_Icon_Row_Current_X = (DISPLAY_WIDTH >> 1) - initially_selected_item * icon_space_width; } -void Display_Render_Complex_Menu_Icon_Row(Coordinates* coordinates, Icon_Row_Item* items, uint32_t item_count, uint32_t selected_item, Configuration_Menu_Icon_Row* config) +void Display_Render_Complex_Menu_Icon_Row(Coordinates* coordinates, Icon_Row_Item* items, uint32_t item_count, uint32_t selected_item, const Configuration_Menu_Icon_Row* config) { int16_t X_Target = coordinates->X + DISPLAY_X_CENTER - selected_item * config->Icon_Space_Width; @@ -545,7 +549,7 @@ void Display_Render_Complex_Menu_Ring(Coordinates* coordinates, Object_Menu_Ring void Display_Render_Complex_Menu_Hierarchical(Coordinates* coordinates, Object_Menu_Hierarchical* menu_hierarchical) { - Configuration_Menu_Hierarchical* Config = menu_hierarchical->Config; + const Configuration_Menu_Hierarchical* Config = menu_hierarchical->Config; if (menu_hierarchical->Current_List == NULL || Config == NULL) { return; @@ -587,9 +591,31 @@ void Display_Render_Complex_Menu_Hierarchical(Coordinates* coordinates, Object_M } } -void Display_Render_Complex_Select_YesNo(Coordinates* coordinates, char* title, uint32_t title_length, bool value, Configuration_Select_YesNo* config) +void Display_Render_Complex_Select_YesNo_Set(bool value, const Configuration_Select_YesNo* config) { - if(config == NULL) { + if(config == NULL || config->Value_Font == NULL) { + return; + } + + Display_Font_Set_Font(config->Value_Font); + + int16_t Width_Yes = Display_Font_Width_String("Yes", 3, DISPLAY_DEFAULT_CHAR_SPACING); + int16_t Width_No = Display_Font_Width_String("No", 2, DISPLAY_DEFAULT_CHAR_SPACING); + + int16_t Width_Diff = Width_Yes - Width_No; + + int16_t X_Yes = DISPLAY_X_CENTER - Width_Yes - config->Value_Center_X_Offset; + int16_t X_No = DISPLAY_X_CENTER + config->Value_Center_X_Offset; + + int16_t Center_Yes = X_Yes + (Width_Yes >> 1); + int16_t Center_No = X_No + (Width_No >> 1); + + _Select_YesNo_Current_X = value ? Center_Yes : Center_No; +} + +void Display_Render_Complex_Select_YesNo(Coordinates* coordinates, char* title, uint32_t title_length, bool value, const Configuration_Select_YesNo* config) +{ + if(config == NULL || config->Value_Font == NULL) { return; } @@ -603,10 +629,6 @@ void Display_Render_Complex_Select_YesNo(Coordinates* coordinates, char* title, Display_Font_Print_String(Title_X, Title_Y, title, title_length, DISPLAY_DEFAULT_CHAR_SPACING, config->Title_Color); } - if(config->Value_Font == NULL) { - return; - } - Display_Font_Set_Font(config->Value_Font); int16_t YesNo_Y = coordinates->Y + config->Value_Y_Center - (Display_Font_Get_Font_Height() >> 1); @@ -669,64 +691,108 @@ void Display_Render_Complex_Select_YesNo(Coordinates* coordinates, char* title, } } -void Display_Render_Complex_Select_List(Coordinates* coordinates, char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t selected_entry, Configuration_Select_List* config) +void Display_Render_Complex_Select_List(Coordinates* coordinates, char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t selected_entry, uint32_t initial_entry, const Configuration_Select_List* config) { - if(config == NULL) { - return; - } - - if(config->Font == NULL) { - return; - } + if (config == NULL || config->Font == NULL || list_titles == NULL) { + return; + } Display_Font_Set_Font(config->Font); - int16_t Entry_Height = Display_Font_Get_Font_Height(); - int16_t Total_Height = Entry_Height * list_entry_count + config->List_Entry_Y_Gap * (list_entry_count-1); - - int16_t Entry_Width = Display_Font_Width_String(&list_titles[0], list_char_length, DISPLAY_DEFAULT_CHAR_SPACING); + int16_t Entry_Height = Display_Font_Get_Font_Height(); + int16_t Item_Full_Height = Entry_Height + config->List_Entry_Y_Gap; + int16_t Entry_Width = Display_Font_Width_String(&list_titles[0], list_char_length, DISPLAY_DEFAULT_CHAR_SPACING); - int16_t X_Entires = coordinates->X + DISPLAY_X_CENTER - (Entry_Width >> 1); - int16_t Y = coordinates->Y + DISPLAY_Y_CENTER - (Total_Height >> 1); + // Calculate scroll offset for current selection + int32_t Offset_Items = Display_Render_Complex_Select_List_Calculate_Scroll_Offset(selected_entry, list_entry_count, config->Visible_Items); + _Select_List_Target_Scroll_Y = -Offset_Items * Item_Full_Height; - int16_t Y_Target = Y + selected_entry * (Entry_Height + config->List_Entry_Y_Gap); - - for(int16_t i=0;iColor_Not_Selected; - if(i==selected_entry) { - if(_Select_List_Current_Y == Y_Target) { - Color = config->Color_Selected; - } - else { - Color = Display_Color_Interpolate_Float(config->Color_Selected, config->Color_Not_Selected, (float)abs(_Select_List_Current_Y - Y_Target) / (float)Entry_Height); - } - } - - Display_Font_Print_String(X_Entires, Y, &list_titles[i*list_char_length], list_char_length, DISPLAY_DEFAULT_CHAR_SPACING, Color); - - Y += (Entry_Height + config->List_Entry_Y_Gap); - } - - if(coordinates->X > 0 || coordinates->Y > 0) { - return; - } - - Display_Shapes_Draw_Round_Rect_Frame(X_Entires-4, _Select_List_Current_Y-4, Entry_Width+8, Entry_Height+8, 5, 1, config->Color_Selected); - // Display_Shapes_Draw_Rect_Frame(X_Entires-6, _Select_List_Current_Y-2, Entry_Width+8, Entry_Height+8, 1, config->Color_Selected); - - int Move_Direction = _NONE; - if(_Select_List_Current_Y < Y_Target) { + int Move_Direction = _NONE; + if(_Select_List_Target_Scroll_Y > _Select_List_Current_Scroll_Y) { Move_Direction = _DOWN; - } else if(_Select_List_Current_Y > Y_Target) { + } else if(_Select_List_Target_Scroll_Y < _Select_List_Current_Scroll_Y) { Move_Direction = _UP; } - int16_t Distance = abs(Y_Target - _Select_List_Current_Y); - _Select_List_Current_Y += (((Distance >> 1) + 1) * Move_Direction); + int16_t Distance = abs(_Select_List_Target_Scroll_Y - _Select_List_Current_Scroll_Y); + _Select_List_Current_Scroll_Y += (((Distance >> 1) + 1) * Move_Direction); + + + int16_t X_Entries = coordinates->X + DISPLAY_X_CENTER - (Entry_Width >> 1); + int16_t Base_Y = coordinates->Y + config->Y_Top + _Select_List_Current_Scroll_Y; + + int16_t List_Y_Top = config->Y_Top; + int16_t List_Y_Bottom = config->Y_Top + config->Visible_Items * Item_Full_Height; + + for (int32_t i = -1; i <= config->Visible_Items; i++) + { + int32_t Item_Index = Offset_Items + i; + + if (Item_Index < 0 || Item_Index >= (int32_t)list_entry_count) { + continue; + } + + // Calculate item position relative to visible area + int32_t Item_Offset_From_Base = Item_Index - Offset_Items; + int16_t Text_Y = Base_Y + Item_Index * Item_Full_Height; + + bool Item_In_Visible_Range = (Text_Y >= List_Y_Top) && (Text_Y + Item_Full_Height <= List_Y_Bottom); + float Alpha = 1.0f; + + if(Item_In_Visible_Range == false) + { + if(Text_Y < List_Y_Top && (List_Y_Top - Text_Y) < Item_Full_Height) { + Alpha = 1.0 - (float)(List_Y_Top - Text_Y) / (float)Item_Full_Height; + } + else if(Text_Y < List_Y_Bottom && (List_Y_Bottom - Text_Y) < Item_Full_Height) { + Alpha = (float)(List_Y_Bottom - Text_Y) / (float)Item_Full_Height; + } + else { + continue; + } + } + + if (Alpha <= 0.01f) { + continue; + } + + Display_Color Base_Color = (Item_Index == (int32_t)selected_entry) ? config->Color_Selected : config->Color_Not_Selected; + Display_Color Item_Color = Base_Color; + + if (Alpha < 1.0f) { + uint16_t Alpha_Fixed = (uint16_t)(Alpha * 256.0f); + Item_Color = Display_Color_Interpolate_Fixpoint(DISPLAY_COLOR_BLACK, Base_Color, Alpha_Fixed); + } + + // Selection box with fade + if (config->Show_Selection_Box && Item_Index == (int32_t)selected_entry) + { + Display_Color Box_Color = config->Selection_Box_Color; + if (Alpha < 1.0f) { + uint16_t Alpha_Fixed = (uint16_t)(Alpha * 256.0f); + Box_Color = Display_Color_Interpolate_Fixpoint(DISPLAY_COLOR_BLACK, Box_Color, Alpha_Fixed); + } + + int16_t Selection_Y = Text_Y - config->Selection_Box_Padding - 1; + int16_t Selection_Width = MAX(Entry_Width + (config->Selection_Box_Padding * 2), config->Selection_Box_Min_Width); + int16_t Selection_Height = Entry_Height + (config->Selection_Box_Padding * 2); + + Display_Color Fill_Color = Display_Color_Interpolate_Float(Box_Color, config->Color_Not_Selected, 0.9f); + Display_Shapes_Draw_Round_Rect_Filled(DISPLAY_X_CENTER - Selection_Width/2 + 1, Selection_Y + 1, Selection_Width - 2, Selection_Height - 2, 3, Fill_Color); + Display_Shapes_Draw_Round_Rect_Frame(DISPLAY_X_CENTER - Selection_Width/2, Selection_Y, Selection_Width, Selection_Height, 4, 2, Box_Color); + } + + if(config->Mark_Initial_Entry && Item_Index == (int32_t)initial_entry) { + Display_Shapes_Draw_Circle_Filled(X_Entries - 15, Text_Y + Display_Font_Get_Font_Height()/2 - 1, 3, DISPLAY_COLOR_DARKGREEN); + } + + // Render text + char* Item_Text = &list_titles[Item_Index * list_char_length]; + Display_Font_Print_String(X_Entries, Text_Y, Item_Text, list_char_length, DISPLAY_DEFAULT_CHAR_SPACING, Item_Color); + } } -void Display_Render_Complex_Select_Value(Coordinates* coordinates, char* title, uint32_t title_length, int32_t value, int32_t max, int32_t min, char* format, Configuration_Select_Value* config) +void Display_Render_Complex_Select_Value(Coordinates* coordinates, char* title, uint32_t title_length, int32_t value, int32_t max, int32_t min, char* format, const Configuration_Select_Value* config) { if(config == NULL) { return; @@ -770,7 +836,7 @@ void Display_Render_Complex_Select_RGB(Coordinates* coordinates, Object_Select_R return; } - Configuration_Select_RGB* Config = rgb_selector->Config; + const Configuration_Select_RGB* Config = rgb_selector->Config; // Calculate center position int16_t Center_X = coordinates->X + DISPLAY_X_CENTER; @@ -834,15 +900,15 @@ void Display_Render_Complex_Select_RGB(Coordinates* coordinates, Object_Select_R // Component label (e.g., "RED") - if (Config->Component_Label_Font != NULL) + if (Config->Component_Font != NULL) { // Get component label char* Component_Label = (char*)rgb_selector->Component_Labels[*rgb_selector->Current_Component]; - Display_Font_Set_Font(Config->Component_Label_Font); + Display_Font_Set_Font(Config->Component_Font); uint16_t Label_Width = Display_Font_Width_String(Component_Label, strlen(Component_Label), DISPLAY_DEFAULT_CHAR_SPACING); int16_t Label_X = Center_X - (Label_Width / 2); - int16_t Label_Y = coordinates->Y + Config->Text_Y_Offset - 3; + int16_t Label_Y = coordinates->Y + Config->Component_Text_Y_Offset - Display_Font_Get_Font_Height() / 2; Display_Font_Print_String(Label_X, Label_Y, Component_Label, strlen(Component_Label), DISPLAY_DEFAULT_CHAR_SPACING, Config->Text_Color); } @@ -860,13 +926,13 @@ void Display_Render_Complex_Select_RGB(Coordinates* coordinates, Object_Select_R // Center both value and range as a group int16_t Value_X = Center_X - (Value_Width / 2); - int16_t Value_Y = coordinates->Y + Config->Text_Y_Offset + 3 + Display_Font_Get_Font_Height(); + int16_t Value_Y = coordinates->Y + Config->Value_Text_Y_Offset - Display_Font_Get_Font_Height() / 2; Display_Font_Print_String(Value_X, Value_Y, Value_String, strlen(Value_String), DISPLAY_DEFAULT_CHAR_SPACING, Config->Text_Color); } } -void Display_Render_Complex_Entry_Indicator(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, Configuration_Entry_Indicator* config) +void Display_Render_Complex_Entry_Indicator(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, const Configuration_Entry_Indicator* config) { if(config->Type == INDICATOR_ARC) { Display_Render_Complex_Entry_Indicator_Arc(coordinates, entry_count, entry_value, config); @@ -1232,7 +1298,7 @@ void Display_Render_Complex_Menu_Hierarchical_Update_All_Animations(Object_Menu_ } } -void Display_Render_Complex_Menu_Hierarchical_Update_Animation(const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config) +void Display_Render_Complex_Menu_Hierarchical_Update_Animation(const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config) { // Calculate target positions int16_t Target_Y = config->Menu_Start_Y; @@ -1277,7 +1343,7 @@ void Display_Render_Complex_Menu_Hierarchical_Update_Animation(const Menu_List* _Menu_Hierarchical_Scroll_Y += (((Distance_Scroll >> 2) + 1) * Move_Direction_Scroll); } -void Display_Render_Complex_Menu_Hierarchical_Single_Menu(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config, int16_t x_offset) +void Display_Render_Complex_Menu_Hierarchical_Single_Menu(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config, int16_t x_offset) { // Create offset coordinates Coordinates Offset_Coordinates = *coordinates; @@ -1308,7 +1374,7 @@ void Display_Render_Complex_Menu_Hierarchical_Single_Menu(Coordinates* coordinat } } -void Display_Render_Complex_Menu_Hierarchical_Title(Coordinates* coordinates, const char* title, Configuration_Menu_Hierarchical* config) +void Display_Render_Complex_Menu_Hierarchical_Title(Coordinates* coordinates, const char* title, const Configuration_Menu_Hierarchical* config) { if (title == NULL || config->Title_Font == NULL) { return; @@ -1331,7 +1397,7 @@ void Display_Render_Complex_Menu_Hierarchical_Title(Coordinates* coordinates, co Display_Shapes_Draw_Line_XY(Separator_X, Separator_Y, Separator_X + Separator_Width, Separator_Y, 1, config->Border_Color); } -void Display_Render_Complex_Menu_Hierarchical_Items(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config) +void Display_Render_Complex_Menu_Hierarchical_Items(Coordinates* coordinates, const Menu_List* current_list, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config) { if (current_list->Items == NULL) { return; @@ -1394,7 +1460,7 @@ void Display_Render_Complex_Menu_Hierarchical_Items(Coordinates* coordinates, co } } -void Display_Render_Complex_Menu_Hierarchical_Single_Item(Coordinates* coordinates, const Menu_Item* item, int32_t item_index, int32_t selected_item, int16_t item_y, Display_Color item_color, float scale_factor, Configuration_Menu_Hierarchical* config) +void Display_Render_Complex_Menu_Hierarchical_Single_Item(Coordinates* coordinates, const Menu_Item* item, int32_t item_index, int32_t selected_item, int16_t item_y, Display_Color item_color, float scale_factor, const Configuration_Menu_Hierarchical* config) { char Display_Text[64]; @@ -1456,7 +1522,7 @@ void Display_Render_Complex_Menu_Hierarchical_Single_Item(Coordinates* coordinat } } -void Display_Render_Complex_Menu_Hierarchical_Selection_Box(Coordinates* coordinates, int32_t selected_item, int32_t scroll_offset, Configuration_Menu_Hierarchical* config) +void Display_Render_Complex_Menu_Hierarchical_Selection_Box(Coordinates* coordinates, int32_t selected_item, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config) { if (selected_item < 0) { return; @@ -1485,7 +1551,7 @@ void Display_Render_Complex_Menu_Hierarchical_Selection_Box(Coordinates* coordin Display_Shapes_Draw_Round_Rect_Filled(Box_X + 1, Box_Y + 1, Box_Width - 2, Box_Height - 2, 4, Fill_Color); } -void Display_Render_Complex_Menu_Hierarchical_Scroll_Indicators(Coordinates* coordinates, const Menu_List* current_list, int32_t scroll_offset, Configuration_Menu_Hierarchical* config) +void Display_Render_Complex_Menu_Hierarchical_Scroll_Indicators(Coordinates* coordinates, const Menu_List* current_list, int32_t scroll_offset, const Configuration_Menu_Hierarchical* config) { if (current_list->Item_Count <= config->Visible_Items) { return; // No scrolling needed @@ -1525,6 +1591,30 @@ void Display_Render_Complex_Menu_Hierarchical_Scroll_Indicators(Coordinates* coo } } +int32_t Display_Render_Complex_Select_List_Calculate_Scroll_Offset(uint32_t selected_entry, uint32_t total_entries, uint16_t visible_items) +{ + if (total_entries <= visible_items) { + return 0; // No scrolling needed + } + + int32_t Scroll_Offset = 0; + + // Keep selected item in center of visible area when possible + int32_t Center_Position = visible_items / 2; + + if (selected_entry >= Center_Position) { + Scroll_Offset = selected_entry - Center_Position; + } + + // Ensure we don't scroll past the end + int32_t Max_Scroll = total_entries - visible_items; + if (Scroll_Offset > Max_Scroll) { + Scroll_Offset = Max_Scroll; + } + + return Scroll_Offset; +} + float Display_Render_Complex_Select_RGB_Calculate_Progress_Ring_Angle(uint8_t value, uint8_t min_value, uint8_t max_value) { // Convert value (0-255) to angle (0-360 degrees) @@ -1559,7 +1649,7 @@ float Display_Render_Complex_Select_RGB_Calculate_Progress_Ring_Angle(uint8_t va return Angle_Degrees; } -void Display_Render_Complex_Entry_Indicator_Arc(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, Configuration_Entry_Indicator* config) +void Display_Render_Complex_Entry_Indicator_Arc(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, const Configuration_Entry_Indicator* config) { if(config->Type != INDICATOR_ARC) { return; @@ -1617,7 +1707,7 @@ void Display_Render_Complex_Entry_Indicator_Arc(Coordinates* coordinates, uint32 Display_Shapes_Draw_Arc_Frame(DISPLAY_X_CENTER, DISPLAY_Y_CENTER, config->Options.Arc.Radius, config->Options.Arc.Thickness, _Entry_Indicator_Current_Angle, _Entry_Indicator_Current_Angle+Angle_Step_Per_Entry, 10, config->Color_Selected); } -void Display_Render_Complex_Entry_Indicator_Dot(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, Configuration_Entry_Indicator* config) +void Display_Render_Complex_Entry_Indicator_Dot(Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, const Configuration_Entry_Indicator* config) { if(config->Type != INDICATOR_DOT) { return; diff --git a/Firmware/Display_Render_Complex.h b/Firmware/Display_Render_Complex.h index 434bddb..8e10065 100644 --- a/Firmware/Display_Render_Complex.h +++ b/Firmware/Display_Render_Complex.h @@ -33,14 +33,15 @@ void Display_Render_Complex_Canvas (Coordinates* coordinates, Object_Canvas* void Display_Render_Complex_Message_Box (Coordinates* coordinates, Object_Message_Box* message_box, int16_t width, int16_t height); void Display_Render_Complex_Menu_Select (Coordinates* coordinates, char* menu_titles, uint32_t menu_entry_count, uint32_t title_char_length, uint32_t selected_entry, Configuration_Menu_Select* config); void Display_Render_Complex_Menu_Icon_Row_Set (uint32_t initially_selected_item, uint32_t icon_space_width); -void Display_Render_Complex_Menu_Icon_Row (Coordinates* coordinates, Icon_Row_Item* items, uint32_t item_count, uint32_t selected_item, Configuration_Menu_Icon_Row* config); +void Display_Render_Complex_Menu_Icon_Row (Coordinates* coordinates, Icon_Row_Item* items, uint32_t item_count, uint32_t selected_item, const Configuration_Menu_Icon_Row* config); void Display_Render_Complex_Menu_Ring (Coordinates* coordinates, Object_Menu_Ring* ring_menu); void Display_Render_Complex_Menu_Hierarchical (Coordinates* coordinates, Object_Menu_Hierarchical* menu_hierarchical); -void Display_Render_Complex_Select_YesNo (Coordinates* coordinates, char* title, uint32_t title_length, bool value, Configuration_Select_YesNo* config); -void Display_Render_Complex_Select_List (Coordinates* coordinates, char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t selected_entry, Configuration_Select_List* config); -void Display_Render_Complex_Select_Value (Coordinates* coordinates, char* title, uint32_t title_length, int32_t value, int32_t max, int32_t min, char* format, Configuration_Select_Value* config); +void Display_Render_Complex_Select_YesNo_Set (bool value, const Configuration_Select_YesNo* config); +void Display_Render_Complex_Select_YesNo (Coordinates* coordinates, char* title, uint32_t title_length, bool value, const Configuration_Select_YesNo* config); +void Display_Render_Complex_Select_List (Coordinates* coordinates, char* list_titles, uint32_t list_entry_count, uint32_t list_char_length, uint32_t selected_entry, uint32_t initial_entry, const Configuration_Select_List* config); +void Display_Render_Complex_Select_Value (Coordinates* coordinates, char* title, uint32_t title_length, int32_t value, int32_t max, int32_t min, char* format, const Configuration_Select_Value* config); void Display_Render_Complex_Select_RGB (Coordinates* coordinates, Object_Select_RGB* rgb_selector); -void Display_Render_Complex_Entry_Indicator (Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, Configuration_Entry_Indicator* config); +void Display_Render_Complex_Entry_Indicator (Coordinates* coordinates, uint32_t entry_count, int32_t entry_value, const Configuration_Entry_Indicator* config); #endif // DISPLAY_RENDER_COMPLEX_H \ No newline at end of file diff --git a/Firmware/Display_Render_Simple.c b/Firmware/Display_Render_Simple.c index c13f3ce..f2a9fff 100644 --- a/Firmware/Display_Render_Simple.c +++ b/Firmware/Display_Render_Simple.c @@ -68,7 +68,7 @@ void Display_Render_Simple_Text(Coordinates* coordinates_object, Object_Text* te void Display_Render_Simple_Image(Coordinates* coordinates_object, Object_Image_Color* image) { if(image->Rotation_Angle == 0) { - Display_Image_Draw_Color_Alpha(coordinates_object->X, coordinates_object->Y, image->Image, image->Alpha); + Display_Image_Draw_Color_Scaled_Alpha(coordinates_object->X, coordinates_object->Y, image->Image, image->Scale, image->Alpha); } else { Display_Image_Draw_Color_Rotated_Alpha(coordinates_object->X, coordinates_object->Y, image->Image, image->Rotation_Angle, image->Alpha); diff --git a/Firmware/Display_Shapes.c b/Firmware/Display_Shapes.c index eadaf65..a7aae34 100644 --- a/Firmware/Display_Shapes.c +++ b/Firmware/Display_Shapes.c @@ -526,16 +526,18 @@ void Display_Shapes_Draw_Arc_Frame(int16_t center_x, int16_t center_y, int16_t r } float Angle_Step = (float)(angle_end - angle_start) / (float)steps; - - for (float i = angle_start; i <= angle_end; i = i + Angle_Step) - { + float Angle = angle_start; + for (int i = 0; i <= steps; i++) + { if(thickness == 1) { - Display_Shapes_Draw_Pixel_Safe(center_x + cos(i*DEG2RAD) * radius, center_y + sin(i*DEG2RAD) * radius, color); + Display_Shapes_Draw_Pixel_Safe(center_x + cos(Angle*DEG2RAD) * radius, center_y + sin(Angle*DEG2RAD) * radius, color); } else { - Display_Shapes_Draw_Circle_Filled(center_x + cos(i*DEG2RAD) * radius, center_y + sin(i*DEG2RAD) * radius, thickness >> 1, color); + Display_Shapes_Draw_Circle_Filled(center_x + cos(Angle*DEG2RAD) * radius, center_y + sin(Angle*DEG2RAD) * radius, thickness >> 1, color); } + + Angle += Angle_Step; } } diff --git a/Firmware/EEPROM_M24C64.c b/Firmware/EEPROM_M24C64.c index 7b9b7f4..71c4776 100644 --- a/Firmware/EEPROM_M24C64.c +++ b/Firmware/EEPROM_M24C64.c @@ -140,17 +140,27 @@ bool EEPROM_Write_Data(uint section) void EEPROM_Check_Content_Valid() { - if(_EEPROM_Content.Device_Configuration.Idle_Screen > IDLE_SCREEN_MODE_ACTIVITY) { + if((uint32_t)_EEPROM_Content.Device_Configuration.Idle_Screen > IDLE_SCREEN_MODE_ACTIVITY) { _EEPROM_Content.Device_Configuration.Idle_Screen = IDLE_SCREEN_BLACK; } if(_EEPROM_Content.Device_Configuration.Screen_Timeout > SCREEN_TIMEOUT_MAX_s) { _EEPROM_Content.Device_Configuration.Screen_Timeout = SCREEN_TIMEOUT_MAX_s; } + + if(_EEPROM_Content.Device_Configuration.Screen_Timeout < SCREEN_TIMEOUT_MIN_s) { + _EEPROM_Content.Device_Configuration.Screen_Timeout = SCREEN_TIMEOUT_MIN_s; + } - // Reverse Scrolling no need, as bool is compared with equal to 0 + if((uint32_t)_EEPROM_Content.Device_Configuration.Reverse_List_Scrolling > 1) { + _EEPROM_Content.Device_Configuration.Reverse_List_Scrolling = 1; + } - if(_EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].MIDI_Channel > MIDI_CHANNEL_16) { + if((uint32_t)_EEPROM_Content.Device_Configuration.Use_Color_Correction > 1) { + _EEPROM_Content.Device_Configuration.Use_Color_Correction = 1; + } + + if((uint32_t)_EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].MIDI_Channel > MIDI_CHANNEL_16) { _EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].MIDI_Channel = MIDI_CHANNEL_1; } @@ -161,25 +171,33 @@ void EEPROM_Check_Content_Valid() // Note Colors no need, as full range of UINT8 is valid - if(_EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Skip_Note_Off_Event > 1) { + if((uint32_t)_EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Skip_Note_Off_Event > 1) { _EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Skip_Note_Off_Event = 1; } - if(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Enabled > 1) { + if((uint32_t)_EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Note_Reset_Enabled > 1) { + _EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Note_Reset_Enabled = 1; + } + + if((uint32_t)_EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Note_Reset_Timeout > 600) { + _EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Note_Reset_Timeout = 600; + } + + if((uint32_t)_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Enabled > 1) { _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Enabled = 1; } // Pause Light Color no need, as full range of UINT8 is valid - if(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Timeout > PAUSE_LIGHT_DELAY_MAX_s) { + if((uint32_t)_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Timeout > PAUSE_LIGHT_DELAY_MAX_s) { _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Timeout = PAUSE_LIGHT_DELAY_MIN_s; } - if(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Reset_Condition > CHANNEL_AND_EVENT_MATCH) { + if((uint32_t)_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Reset_Condition > CHANNEL_AND_EVENT_MATCH) { _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Reset_Condition = ANY_TRAFFIC; } - if(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Fade_Speed > FADE_SPEED_MAX) { + if((uint32_t)_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Fade_Speed > FADE_SPEED_MAX) { _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Fade_Speed = FADE_SPEED_MIN; } @@ -187,16 +205,16 @@ void EEPROM_Check_Content_Valid() // Note Stack Enabled no need, as bool is compared with equal to 0 - if(_EEPROM_Content.Jam_Light_Configuration.Duration_Max_s > DURATION_MAX_s) { - _EEPROM_Content.Jam_Light_Configuration.Duration_Max_s = DURATION_MAX_s; + if((uint32_t)_EEPROM_Content.Jam_Light_Configuration.Durations.Max > DURATION_MAX_s) { + _EEPROM_Content.Jam_Light_Configuration.Durations.Max = DURATION_MAX_s; } - if(_EEPROM_Content.Jam_Light_Configuration.Duration_Min_s > _EEPROM_Content.Jam_Light_Configuration.Duration_Max_s || _EEPROM_Content.Jam_Light_Configuration.Duration_Min_s < DURATION_MIN_s) { - _EEPROM_Content.Jam_Light_Configuration.Duration_Min_s = DURATION_MIN_s; + if((uint32_t)_EEPROM_Content.Jam_Light_Configuration.Durations.Min > _EEPROM_Content.Jam_Light_Configuration.Durations.Max || _EEPROM_Content.Jam_Light_Configuration.Durations.Min < DURATION_MIN_s) { + _EEPROM_Content.Jam_Light_Configuration.Durations.Min = DURATION_MIN_s; } - if(_EEPROM_Content.Jam_Light_Configuration.Duration_Max_s <= _EEPROM_Content.Jam_Light_Configuration.Duration_Min_s) { - _EEPROM_Content.Jam_Light_Configuration.Duration_Max_s = DURATION_MAX_s; + if(_EEPROM_Content.Jam_Light_Configuration.Durations.Max <= _EEPROM_Content.Jam_Light_Configuration.Durations.Min) { + _EEPROM_Content.Jam_Light_Configuration.Durations.Max = DURATION_MAX_s; } while(_EEPROM_Content.Jam_Light_Configuration.Hue_Angle_Start_Color < 0) { @@ -205,25 +223,17 @@ void EEPROM_Check_Content_Valid() _EEPROM_Content.Jam_Light_Configuration.Hue_Angle_Start_Color %= HUE_MAX_ANGLE; - if(_EEPROM_Content.Jam_Light_Configuration.Color_Change > COLOR_CHANGE_MAX) { + if((uint32_t)_EEPROM_Content.Jam_Light_Configuration.Color_Change > COLOR_CHANGE_MAX) { _EEPROM_Content.Jam_Light_Configuration.Color_Change = COLOR_CHANGE_MIN; } - if(_EEPROM_Content.Jam_Light_Configuration.Fade_Speed > FADE_SPEED_MAX) { + if((uint32_t)_EEPROM_Content.Jam_Light_Configuration.Fade_Speed > FADE_SPEED_MAX) { _EEPROM_Content.Jam_Light_Configuration.Fade_Speed = FADE_SPEED_MIN; } // Const Color no need, as full range of UINT8 is valid - if(_EEPROM_Content.Const_Light_Configuration.Fade_Speed > FADE_SPEED_MAX) { + if((uint32_t)_EEPROM_Content.Const_Light_Configuration.Fade_Speed > FADE_SPEED_MAX) { _EEPROM_Content.Const_Light_Configuration.Fade_Speed = FADE_SPEED_MIN; } - - if(_EEPROM_Content.Device_Configuration.Transition_Type >= 0) { - _EEPROM_Content.Device_Configuration.Transition_Type = 0; - } - - if(_EEPROM_Content.Device_Configuration.Transition_Frames == 0) { - _EEPROM_Content.Device_Configuration.Transition_Frames = 16; - } } \ No newline at end of file diff --git a/Firmware/EEPROM_M24C64.h b/Firmware/EEPROM_M24C64.h index daa1a84..1feea3f 100644 --- a/Firmware/EEPROM_M24C64.h +++ b/Firmware/EEPROM_M24C64.h @@ -30,12 +30,11 @@ // Datatypes typedef struct { - uint8_t Idle_Screen; - uint Screen_Timeout; + int32_t Idle_Screen; + int32_t Screen_Timeout; uint8_t Reverse_List_Scrolling; - uint8_t Transition_Type; - uint8_t Transition_Frames; uint8_t Use_Color_Correction; + int32_t Current_Threshold; } __packed Device_Configuration_s; typedef struct diff --git a/Firmware/Fonts/Font_DejaVu_Sans_Mono_15x25.c b/Firmware/Fonts/Font_DejaVu_Sans_Mono_15x25.c new file mode 100644 index 0000000..88e5624 --- /dev/null +++ b/Firmware/Fonts/Font_DejaVu_Sans_Mono_15x25.c @@ -0,0 +1,109 @@ +#include + +const uint8_t _Font_DejaVu_Sans_Mono_15x25[] = { + 0x00, 0x00, // Size of zero indicates fixed width font, actual length is width * height + 0x0f, // Width + 0x19, // Height + 0x20, // First Character + 0x5f, // Character Count + + // Fixed width; char width table not used !!!! + + // Font Data + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ! + 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // " + 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xfe, 0xc2, 0xc0, 0xc0, 0xfe, 0xde, 0xc0, 0xc0, 0x00, 0x30, 0x30, 0x30, 0xf0, 0x7f, 0x37, 0x30, 0xf0, 0xfc, 0x3f, 0x31, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // # + 0x00, 0x00, 0xc0, 0xe0, 0x60, 0x30, 0x30, 0xfe, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x0c, 0x0c, 0xff, 0x18, 0x18, 0x38, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x06, 0x06, 0x06, 0x7f, 0x06, 0x06, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // $ + 0x38, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x20, 0x30, 0x18, 0x08, 0x0c, 0x04, 0xc2, 0xe3, 0x31, 0x31, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x06, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // % + 0x00, 0x00, 0x00, 0x78, 0xfc, 0x8e, 0x06, 0x06, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0x86, 0x03, 0x03, 0x07, 0x1c, 0x38, 0x70, 0xe0, 0xc0, 0xe0, 0x7c, 0x3c, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x07, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // & + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0x7c, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1f, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ( + 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x7c, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x38, 0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ) + 0x00, 0x00, 0x08, 0x98, 0x90, 0xf0, 0x60, 0xfe, 0x60, 0xf0, 0x90, 0x98, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // * + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xff, 0xff, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // , + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // - + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // . + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0x7c, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x78, 0x1e, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1c, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // / + 0x00, 0x00, 0xe0, 0xf8, 0x3c, 0x0e, 0x06, 0x06, 0x06, 0x0e, 0x3c, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x06, 0x06, 0x06, 0x00, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0 + 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x06, 0x06, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1 + 0x00, 0x00, 0x0c, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0c, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x38, 0x0e, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2 + 0x00, 0x00, 0x00, 0x0c, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0c, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x0f, 0x0f, 0xf9, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3 + 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x70, 0x1c, 0x06, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x7c, 0x6e, 0x63, 0x61, 0x60, 0x60, 0x60, 0xff, 0xff, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 4 + 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x86, 0x86, 0x86, 0x86, 0x86, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x87, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5 + 0x00, 0x00, 0xc0, 0xf0, 0x3c, 0x0c, 0x8e, 0x86, 0x86, 0x86, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x86, 0x03, 0x01, 0x01, 0x01, 0x03, 0x87, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6 + 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xe6, 0xfe, 0x3e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xfc, 0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7 + 0x00, 0x00, 0xf8, 0xfc, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0c, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf9, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0f, 0xf9, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 + 0x00, 0x00, 0xf0, 0xfc, 0x1c, 0x0e, 0x06, 0x06, 0x06, 0x0e, 0x1c, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x0c, 0xc6, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 9 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // : + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x87, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // < + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // = + 0x00, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0xc3, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // > + 0x00, 0x00, 0x00, 0x18, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x8e, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3e, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ? + 0x00, 0x00, 0x80, 0xe0, 0x60, 0x30, 0x38, 0x18, 0x18, 0x18, 0x18, 0x38, 0x70, 0xe0, 0xc0, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xfe, 0x87, 0x03, 0x03, 0x03, 0x86, 0xff, 0xff, 0x00, 0x01, 0x07, 0x0f, 0x1c, 0x38, 0x30, 0x61, 0x63, 0x63, 0x63, 0x63, 0x61, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // @ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0x3e, 0x3e, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfe, 0x7f, 0x63, 0x60, 0x60, 0x63, 0x7f, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // A + 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0c, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x0f, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // B + 0x00, 0xc0, 0xf0, 0x38, 0x0c, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // C + 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x0c, 0x38, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // D + 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // E + 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // F + 0x00, 0xc0, 0xf0, 0x38, 0x0c, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // G + 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // H + 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // I + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // J + 0x00, 0xfe, 0xfe, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x03, 0x07, 0x0e, 0x3c, 0x70, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // K + 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // L + 0x00, 0xfe, 0xfe, 0x1e, 0xf8, 0xc0, 0x00, 0x00, 0xc0, 0xf8, 0x1e, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x07, 0x1e, 0x1e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // M + 0x00, 0xfe, 0xfe, 0x1e, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x03, 0x0f, 0x7c, 0xf0, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // N + 0x00, 0xe0, 0xf8, 0x3c, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x3c, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // O + 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x0c, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // P + 0x00, 0xe0, 0xf8, 0x3c, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x3c, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x06, 0x06, 0x06, 0x0e, 0x1f, 0x3b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Q + 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x0c, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x3f, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // R + 0x00, 0xf0, 0xfc, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x06, 0x06, 0x06, 0x0c, 0x1c, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // S + 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // T + 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // U + 0x00, 0x06, 0x7e, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0x7e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3f, 0xfc, 0xc0, 0xc0, 0xfc, 0x7f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // V + 0x1e, 0xfe, 0xf0, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0xf0, 0xfe, 0x1e, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0xf0, 0x7f, 0x07, 0x07, 0x7f, 0xf0, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // W + 0x00, 0x02, 0x0e, 0x1e, 0x78, 0xe0, 0x80, 0x80, 0xe0, 0x78, 0x1e, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0x3d, 0x0f, 0x1f, 0x7d, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // X + 0x02, 0x06, 0x1e, 0x78, 0xe0, 0xc0, 0x00, 0x00, 0xc0, 0xe0, 0x78, 0x1e, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Y + 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x86, 0xc6, 0xf6, 0x7e, 0x1e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x70, 0x3c, 0x1e, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Z + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // [ + 0x00, 0x02, 0x0e, 0x7c, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1e, 0x78, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // "\" + 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ] + 0x00, 0x80, 0xc0, 0xe0, 0x38, 0x1c, 0x0e, 0x06, 0x0e, 0x1c, 0x38, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ^ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, // _ + 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x06, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ` + 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf1, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x99, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x03, 0x01, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // a + 0x00, 0x00, 0xfe, 0xfe, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x83, 0x01, 0x00, 0x00, 0x00, 0x01, 0x83, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x03, 0x03, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // b + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xff, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // c + 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x83, 0x01, 0x00, 0x00, 0x00, 0x01, 0x83, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x03, 0x03, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // d + 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x9b, 0x19, 0x18, 0x18, 0x18, 0x18, 0x19, 0x1f, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // e + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // f + 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x83, 0x01, 0x00, 0x00, 0x00, 0x01, 0x83, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xc3, 0xc7, 0xc6, 0xc6, 0xc6, 0xc3, 0x63, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // g + 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // h + 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // i + 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // j + 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x1c, 0x1e, 0x7f, 0xe3, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // k + 0x00, 0x06, 0x06, 0x06, 0x06, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // l + 0x00, 0x00, 0xc0, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // m + 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // n + 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x83, 0x01, 0x00, 0x00, 0x00, 0x01, 0x83, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // o + 0x00, 0x00, 0xc0, 0xc0, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x83, 0x01, 0x00, 0x00, 0x00, 0x01, 0x83, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x03, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // p + 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x83, 0x01, 0x00, 0x00, 0x00, 0x01, 0x83, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x03, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // q + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // r + 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x1d, 0x18, 0x18, 0x18, 0x38, 0x30, 0x30, 0xf1, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // s + 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // t + 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x03, 0x01, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // u + 0x00, 0x00, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3f, 0xfc, 0xe0, 0x00, 0xe0, 0xfc, 0x3f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // v + 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0xf0, 0x3c, 0x3c, 0xf0, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x01, 0x00, 0x00, 0x01, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // w + 0x00, 0x00, 0x40, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc7, 0xfe, 0x3c, 0xfe, 0xc7, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x07, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // x + 0x00, 0x00, 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1f, 0xfc, 0xf0, 0x80, 0xe0, 0xfc, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xe0, 0x7b, 0x3f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // y + 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // z + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x3c, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x7f, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // | + 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0xff, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // } + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ~ +}; + diff --git a/Firmware/Hierarchical_Menu.c b/Firmware/Hierarchical_Menu.c index 46bdeb6..8cb9244 100644 --- a/Firmware/Hierarchical_Menu.c +++ b/Firmware/Hierarchical_Menu.c @@ -26,23 +26,187 @@ static const Menu_List _Menu_List_MIDI_Pause; static const Menu_List _Menu_List_MIDI; const Hierarchical_Menu _Hierarchical_Menu_MIDI; + +static const Menu_Item _Menu_Items_Jam[]; +static const Menu_List _Menu_List_Jam; +const Hierarchical_Menu _Hierarchical_Menu_Jam; + + +static const Menu_Item _Menu_Items_Const_Light[]; +static const Menu_List _Menu_List_Const_Light; +const Hierarchical_Menu _Hierarchical_Menu_Const_Light; + + +static const Menu_Item _Menu_Items_Device[]; +static const Menu_List _Menu_List_Device; +const Hierarchical_Menu _Hierarchical_Menu_Device; + + // ============================================================================================ // Variables Configuration +static const Menu_Configuration_Select_Value _Select_Value_Octave = { + .Min = -2, + .Max = 8, + .Value_Display_Ratio = 1, + .Format = "Octave %+d", + .Use_Acceleration = false, + .Cycle_Selector = false +}; + static const Menu_Configuration_Select_Value _Select_Value_Fade_Speed = { .Min = 1, .Max = UINT8_MAX, - .Format = "%u" + .Value_Display_Ratio = 1, + .Format = "%u", + .Use_Acceleration = true, + .Cycle_Selector = true }; +static const Menu_Configuration_Select_Value _Select_Value_Jam_Start_Color = { + .Min = 0, + .Max = 359, + .Value_Display_Ratio = 1, + .Format = "%u Deg", + .Use_Acceleration = true, + .Cycle_Selector = true +}; + +static const Menu_Configuration_Select_Value _Select_Value_Jam_Color_Change = { + .Min = COLOR_CHANGE_MIN, + .Max = COLOR_CHANGE_MAX, + .Value_Display_Ratio = 1, + .Format = "%u Deg", + .Use_Acceleration = false, + .Cycle_Selector = false +}; + +static const Menu_Configuration_Select_MinMax _Select_MinMax_Jam_Durations = { + .Min = DURATION_MIN_s, + .Max = DURATION_MAX_s, + .Format_Max = "Max: %03us", + .Format_Min = "Min: %03us", + .Use_Acceleration = false, + .Cycle_Selector = false +}; + +static const Menu_Configuration_Select_Value _Select_Value_Timeout = { + .Min = 1, + .Max = 600, + .Value_Display_Ratio = 1, + .Format = "%u Seconds", + .Use_Acceleration = true, + .Cycle_Selector = false +}; + +static const Menu_Configuration_Select_Value _Select_Value_Timeout_Device = { + .Min = SCREEN_TIMEOUT_MIN_s, + .Max = SCREEN_TIMEOUT_MAX_s, + .Value_Display_Ratio = 1, + .Format = "%u Seconds", + .Use_Acceleration = true, + .Cycle_Selector = false +}; + +static const Menu_Configuration_Select_Value _Select_Value_Current_Threshold = { + .Min = 0, + .Max = 1000, + .Value_Display_Ratio = 5, + .Format = "%u mA", + .Use_Acceleration = true, + .Cycle_Selector = false +}; + +static const char _Note_Names[NOTES_PER_OCTAVE][2] = { + "C ", + "C#", + "D ", + "D#", + "E ", + "F ", + "F#", + "G ", + "G#", + "A ", + "A#", + "B " +}; + +const Menu_Configuration_Select_List _Select_List_Note_Names = { + .Item_Names = &(_Note_Names[0][0]), + .Name_Length = 2, + .Item_Count = NOTES_PER_OCTAVE, + .Use_Acceleration = false, + .Cycle_Selector = false +}; + + +static const char _MIDI_Channel_Names[16][10] = { + "Channel 1", + "Channel 2", + "Channel 3", + "Channel 4", + "Channel 5", + "Channel 6", + "Channel 7", + "Channel 8", + "Channel 9", + "Channel 10", + "Channel 11", + "Channel 12", + "Channel 13", + "Channel 14", + "Channel 15", + "Channel 16" +}; + +const Menu_Configuration_Select_List _Select_List_MIDI_Channel = { + .Item_Names = &(_MIDI_Channel_Names[0][0]), + .Name_Length = 10, + .Item_Count = 16, + .Use_Acceleration = false, + .Cycle_Selector = false +}; + +static const char _Pause_Light_Reset[4][21] = { + " Any Traffic ", + " Channel Match ", + " Event Match ", + "Channel & Event" +}; + +const Menu_Configuration_Select_List _Select_List_Pause_Light_Reset = { + .Item_Names = &(_Pause_Light_Reset[0][0]), + .Name_Length = 21, + .Item_Count = 4, + .Use_Acceleration = false, + .Cycle_Selector = false +}; + +static const char _Device_Idle_Screen[4][13] = { + "Black ", + "FAD Logo ", + "Current Mode ", + "Mode Activity" +}; + +const Menu_Configuration_Select_List _Select_List_Device_Idle_Screen = { + .Item_Names = &(_Device_Idle_Screen[0][0]), + .Name_Length = 13, + .Item_Count = 4, + .Use_Acceleration = false, + .Cycle_Selector = false +}; // ============================================================================================ // Variables Hierarchical Menu static const Menu_Item _Menu_Items_MIDI_Config[] = { - { "MIDI Channel" , NULL, false, &_Menu_List_MIDI_Config, NONE, "", NULL, NULL }, - { "Select Octave" , NULL, false, &_Menu_List_MIDI_Config, NONE, "", NULL, NULL }, - { "Skip Note Off" , NULL, false, &_Menu_List_MIDI_Config, BOOL, "Skip Note Off", (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Skip_Note_Off_Event), NULL }, - { "Back" , NULL, true , &_Menu_List_MIDI_Config, NONE, "", NULL, NULL } + { "MIDI Channel" , NULL, false, &_Menu_List_MIDI_Config, LIST, "MIDI Channel" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].MIDI_Channel) , (void*)(&_Select_List_MIDI_Channel) }, + { "Select Octave" , NULL, false, &_Menu_List_MIDI_Config, VALUE, "Select Octave" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Octave) , (void*)(&_Select_Value_Octave) }, + { "Skip Note Off" , NULL, false, &_Menu_List_MIDI_Config, BOOL, "Skip Note Off" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Skip_Note_Off_Event) , NULL }, + { "Note Reset Enable" , NULL, false, &_Menu_List_MIDI_Config, BOOL, "Note Reset Enable" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Reset_Enabled) , NULL }, + { "Note Reset Timeout" , NULL, false, &_Menu_List_MIDI_Config, VALUE, "Note Reset Timeout" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Reset_Timeout) , (void*)(&_Select_Value_Timeout) }, + { "Back" , NULL, true , &_Menu_List_MIDI_Config, NONE, "", NULL, NULL } }; static const Menu_List _Menu_List_MIDI_Config = { @@ -55,10 +219,10 @@ static const Menu_List _Menu_List_MIDI_Config = { static const Menu_Item _Menu_Items_MIDI_Notes[] = { - { "Red" , NULL, false, &_Menu_List_MIDI_Notes, NONE, "", NULL, NULL }, - { "Green" , NULL, false, &_Menu_List_MIDI_Notes, NONE, "", NULL, NULL }, - { "Blue" , NULL, false, &_Menu_List_MIDI_Notes, NONE, "", NULL, NULL }, - { "Default Notes" , NULL, false, &_Menu_List_MIDI_Notes, NONE, "", NULL, NULL }, + { "Red" , NULL, false, &_Menu_List_MIDI_Notes, LIST, "Note for Red" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Color_Red) , (void*)(&_Select_List_Note_Names) }, + { "Green" , NULL, false, &_Menu_List_MIDI_Notes, LIST, "Note for Green" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Color_Green) , (void*)(&_Select_List_Note_Names) }, + { "Blue" , NULL, false, &_Menu_List_MIDI_Notes, LIST, "Note for Blue" , (void*)(&_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Color_Blue) , (void*)(&_Select_List_Note_Names) }, + { "Default Notes" , NULL, false, &_Menu_List_MIDI_Notes, DEFAULT_NOTES, "Reset Color Notes", NULL, NULL }, { "Back" , NULL, true , &_Menu_List_MIDI_Notes, NONE, "", NULL, NULL } }; @@ -72,12 +236,12 @@ static const Menu_List _Menu_List_MIDI_Notes = { static const Menu_Item _Menu_Items_MIDI_Pause[] = { - { "Enable" , NULL, false, &_Menu_List_MIDI_Pause, BOOL, "Enable Pause Light", (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Enabled), NULL }, - { "Color" , NULL, false, &_Menu_List_MIDI_Pause, RGB , "Pause Light Color", (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Color), NULL }, - { "Fade Speed" , NULL, false, &_Menu_List_MIDI_Pause, VALUE, "Pause Light Fade Speed", (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Fade_Speed), (void*)(&_Select_Value_Fade_Speed)}, - { "Timeout" , NULL, false, &_Menu_List_MIDI_Pause, NONE, "", NULL, NULL }, - { "Reset" , NULL, false, &_Menu_List_MIDI_Pause, NONE, "", NULL, NULL }, - { "Back" , NULL, true , &_Menu_List_MIDI_Pause, NONE, "", NULL, NULL } + { "Enable" , NULL, false, &_Menu_List_MIDI_Pause, BOOL , "Enable Pause Light" , (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Enabled) , NULL }, + { "Color" , NULL, false, &_Menu_List_MIDI_Pause, RGB , "Pause Light Color" , (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Color) , NULL }, + { "Fade Speed" , NULL, false, &_Menu_List_MIDI_Pause, VALUE, "Pause Light Fade Speed" , (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Fade_Speed) , (void*)(&_Select_Value_Fade_Speed)}, + { "Timeout" , NULL, false, &_Menu_List_MIDI_Pause, VALUE, "Pause Light Timeout" , (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Timeout) , (void*)(&_Select_Value_Timeout) }, + { "Reset" , NULL, false, &_Menu_List_MIDI_Pause, LIST , "Pause Light Reset" , (void*)(&_EEPROM_Content.Pause_Light_Configuration[0].Reset_Condition), (void*)(&_Select_List_Pause_Light_Reset) }, + { "Back" , NULL, true , &_Menu_List_MIDI_Pause, NONE , "", NULL, NULL } }; static const Menu_List _Menu_List_MIDI_Pause = { @@ -90,10 +254,10 @@ static const Menu_List _Menu_List_MIDI_Pause = { static const Menu_Item _Menu_Items_MIDI[] = { - { "MIDI Config" , &_Menu_List_MIDI_Config , false, &_Menu_List_MIDI }, - { "Color Notes" , &_Menu_List_MIDI_Notes , false, &_Menu_List_MIDI }, - { "Pause Light" , &_Menu_List_MIDI_Pause , false, &_Menu_List_MIDI }, - { "Back" , NULL , true , &_Menu_List_MIDI } + { "MIDI Config" , &_Menu_List_MIDI_Config , false, &_Menu_List_MIDI, NONE, "", NULL, NULL }, + { "Color Notes" , &_Menu_List_MIDI_Notes , false, &_Menu_List_MIDI, NONE, "", NULL, NULL }, + { "Pause Light" , &_Menu_List_MIDI_Pause , false, &_Menu_List_MIDI, NONE, "", NULL, NULL }, + { "Back" , NULL , true , &_Menu_List_MIDI, NONE, "", NULL, NULL } }; static const Menu_List _Menu_List_MIDI = { @@ -112,6 +276,83 @@ const Hierarchical_Menu _Hierarchical_Menu_MIDI = { }; + +static const Menu_Item _Menu_Items_Jam[] = { + { "Start Color" , NULL, false, &_Menu_List_Jam, HUE, "Hue Angle Start Color", (void*)(&_EEPROM_Content.Jam_Light_Configuration.Hue_Angle_Start_Color), (void*)(&_Select_Value_Jam_Start_Color) }, + { "Color Change" , NULL, false, &_Menu_List_Jam, VALUE, "Max Color Change", (void*)(&_EEPROM_Content.Jam_Light_Configuration.Color_Change), (void*)(&_Select_Value_Jam_Color_Change) }, + { "Durations" , NULL, false, &_Menu_List_Jam, MINMAX, "Set Durations", (void*)(&_EEPROM_Content.Jam_Light_Configuration.Durations), (void*)(&_Select_MinMax_Jam_Durations) }, + { "Fade Speed" , NULL, false, &_Menu_List_Jam, VALUE, "Jam Fade Speed", (void*)(&_EEPROM_Content.Jam_Light_Configuration.Fade_Speed), (void*)(&_Select_Value_Fade_Speed) }, + { "Back" , NULL, true , &_Menu_List_Jam, NONE, "", NULL, NULL } +}; + +static const Menu_List _Menu_List_Jam = { + .Title = "Jam Mode", + .Items = _Menu_Items_Jam, + .Item_Count = sizeof(_Menu_Items_Jam) / sizeof(Menu_Item), + .Parent = NULL, + .Root = &_Hierarchical_Menu_Jam +}; + + +const Hierarchical_Menu _Hierarchical_Menu_Jam = { + .List = &_Menu_List_Jam, + .Parent_Function = &Screen_Setup_Settings, + .Parent_Selected_Setting = 1 +}; + + + +static const Menu_Item _Menu_Items_Const_Light[] = { + { "Color" , NULL, false, &_Menu_List_Const_Light, RGB , "Constant Light Color", (void*)(&_EEPROM_Content.Const_Light_Configuration.Color), NULL }, + { "Fade Speed" , NULL, false, &_Menu_List_Const_Light, VALUE , "Constant Light Fade" , (void*)(&_EEPROM_Content.Const_Light_Configuration.Fade_Speed), (void*)(&_Select_Value_Fade_Speed) }, + { "Back" , NULL, true , &_Menu_List_Const_Light, NONE , "", NULL, NULL } +}; + +static const Menu_List _Menu_List_Const_Light = { + .Title = "Constant Light", + .Items = _Menu_Items_Const_Light, + .Item_Count = sizeof(_Menu_Items_Const_Light) / sizeof(Menu_Item), + .Parent = NULL, + .Root = &_Hierarchical_Menu_Const_Light +}; + + +const Hierarchical_Menu _Hierarchical_Menu_Const_Light = { + .List = &_Menu_List_Const_Light, + .Parent_Function = &Screen_Setup_Settings, + .Parent_Selected_Setting = 2 +}; + + + +static const Menu_Item _Menu_Items_Device[] = { + { "Idle Screen " , NULL, false, &_Menu_List_Device, LIST, "Idle Screen" , (void*)(&_EEPROM_Content.Device_Configuration.Idle_Screen) , (void*)(&_Select_List_Device_Idle_Screen) }, + { "Screen Timeout" , NULL, false, &_Menu_List_Device, VALUE, "Screen Timeout" , (void*)(&_EEPROM_Content.Device_Configuration.Screen_Timeout) , (void*)(&_Select_Value_Timeout_Device) }, + { "Rev. List Scroll" , NULL, false, &_Menu_List_Device, BOOL, "Reverse Scrolling" , (void*)(&_EEPROM_Content.Device_Configuration.Reverse_List_Scrolling) , NULL }, + { "Color Correction" , NULL, false, &_Menu_List_Device, BOOL, "Color Correction" , (void*)(&_EEPROM_Content.Device_Configuration.Use_Color_Correction) , NULL }, + { "Current Threshold" , NULL, false, &_Menu_List_Device, VALUE, "Current Threshold" , (void*)(&_EEPROM_Content.Device_Configuration.Current_Threshold) , (void*)(&_Select_Value_Current_Threshold) }, + { "Reboot Device" , NULL, false, &_Menu_List_Device, REBOOT, "", NULL, NULL }, + { "Back" , NULL, true , &_Menu_List_Device, NONE, "", NULL, NULL } +}; + +static const Menu_List _Menu_List_Device = { + .Title = "Device Settings", + .Items = _Menu_Items_Device, + .Item_Count = sizeof(_Menu_Items_Device) / sizeof(Menu_Item), + .Parent = NULL, + .Root = &_Hierarchical_Menu_Device +}; + + +const Hierarchical_Menu _Hierarchical_Menu_Device = { + .List = &_Menu_List_Device, + .Parent_Function = &Screen_Setup_Settings, + .Parent_Selected_Setting = 3 +}; + + + + // ============================================================================================ // Function Declarations diff --git a/Firmware/Hierarchical_Menu.h b/Firmware/Hierarchical_Menu.h index 7878f1b..cf82630 100644 --- a/Firmware/Hierarchical_Menu.h +++ b/Firmware/Hierarchical_Menu.h @@ -34,15 +34,43 @@ typedef enum { NONE, BOOL, RGB, - VALUE + VALUE, + LIST, + DEFAULT_NOTES, + REBOOT, + HUE, + MINMAX } Variable_Type; typedef struct { - int32_t Min; - int32_t Max; - char* Format; + const int32_t Min; + const int32_t Max; + const int32_t Value_Display_Ratio; + const char* Format; + const bool Use_Acceleration; + const bool Cycle_Selector; } Menu_Configuration_Select_Value; +typedef struct { + const char* Item_Names; + const uint32_t Name_Length; + const uint32_t Item_Count; + + const bool Use_Acceleration; + const bool Cycle_Selector; +} Menu_Configuration_Select_List; + +typedef struct { + const int32_t Min; + const int32_t Max; + const int32_t Value_Display_Ratio; + const char* Format_Min; + const char* Format_Max; + const bool Use_Acceleration; + const bool Cycle_Selector; +} Menu_Configuration_Select_MinMax; + + typedef struct Menu_Item_s { const char* Text; diff --git a/Firmware/INA260.c b/Firmware/INA260.c index 89a4b4b..47a58f0 100644 --- a/Firmware/INA260.c +++ b/Firmware/INA260.c @@ -10,6 +10,7 @@ // ============================================================================================ // Includes #include "I2C_Master.h" +#include "EEPROM_M24C64.h" // ============================================================================================ @@ -27,6 +28,7 @@ #define INA260_ENABLE_LEN_BIT 0 #define UINT8_ARR_TO_UINT16(_U8_) ((uint16_t)(_U8_[0]) << 8) | (uint16_t)(_U8_[1]) +#define UINT16_SWAP_BYTES(_U16_) ((_U16_ << 8) | (_U16_ >> 8 )) // ============================================================================================ @@ -84,10 +86,14 @@ typedef enum _INA260_AlertLatch { // Variables static uint16_t _INA260_BusVoltage_mV; static uint16_t _INA260_Current_mA; +static uint16_t _INA260_Threshold; + +static int32_t _Written_Current_Threshold; // ============================================================================================ // Function Declarations +void INA260_Write_Register(uint8_t reg_address, uint16_t reg_data); uint16_t INA260_Read_Register(uint8_t reg_address); @@ -98,22 +104,42 @@ void INA260_Init() { _INA260_BusVoltage_mV = 0; _INA260_Current_mA = 0; + _Written_Current_Threshold = -1; - uint16_t Configuration_Register_Value = - (0 << INA260_CONGIG_RST_BIT) | // No Reset - (INA260_COUNT_1 << INA260_CONGIG_AVG0_BIT) | // Averaging Count - (INA260_TIME_8_244_ms << INA260_CONGIG_VBUSCT0_BIT) | // Bus Voltage Conversion Time - (INA260_TIME_8_244_ms << INA260_CONGIG_ISHCT0_BIT) | // Shunt Current Conversion Time - (INA260_MODE_CONTINUOUS << INA260_CONGIG_MODE1_BIT); // Operating Mode + uint16_t Configuration_Register_Value_Reset = (1 << INA260_CONGIG_RST_BIT); + INA260_Write_Register(INA260_REG_CONFIG, Configuration_Register_Value_Reset); - I2CM_Packet_Transmit(INA260_I2CADDR_DEFAULT, INA260_REG_CONFIG, 1, (uint8_t*)(&Configuration_Register_Value), 2); + uint16_t Enable_Register_Value = (1 << INA260_ENABLE_OCL_BIT) | // Over Current Limit (0 << INA260_ENABLE_APOL_BIT) | // Alert Polarity Bit (1 << INA260_ENABLE_LEN_BIT); // Alert Latch Enable - I2CM_Packet_Transmit(INA260_I2CADDR_DEFAULT, INA260_REG_MASK_ENABLE, 1, (uint8_t*)(&Enable_Register_Value), 2); + uint16_t Configuration_Register_Value = + (0 << INA260_CONGIG_RST_BIT) | // No Reset + (INA260_COUNT_4 << INA260_CONGIG_AVG0_BIT) | // Averaging Count + (INA260_TIME_8_244_ms << INA260_CONGIG_VBUSCT0_BIT) | // Bus Voltage Conversion Time + (INA260_TIME_8_244_ms << INA260_CONGIG_ISHCT0_BIT) | // Shunt Current Conversion Time + (INA260_MODE_CONTINUOUS << INA260_CONGIG_MODE1_BIT); // Operating Mode + + sleep_ms(20); + INA260_Update_Current_Threshold(); + sleep_ms(20); + INA260_Write_Register(INA260_REG_CONFIG, Configuration_Register_Value); + sleep_ms(20); + INA260_Write_Register(INA260_REG_MASK_ENABLE, Enable_Register_Value); +} + +void INA260_Update_Current_Threshold() +{ + if(_Written_Current_Threshold == _EEPROM_Content.Device_Configuration.Current_Threshold) { + return; + } + + INA260_Write_Register(INA260_REG_ALERT_LIMIT, (uint16_t)(_EEPROM_Content.Device_Configuration.Current_Threshold * 4)); + + _Written_Current_Threshold = _EEPROM_Content.Device_Configuration.Current_Threshold; } void INA260_Read_BusVoltage() @@ -130,6 +156,13 @@ void INA260_Read_Current() _INA260_Current_mA = (int16_t)((INA260_Current * 1250) / 1000); } +void INA260_Read_Threshold() +{ + uint16_t INA260_Threshold = (uint16_t)INA260_Read_Register(INA260_REG_ALERT_LIMIT); + + _INA260_Threshold = (uint16_t)(INA260_Threshold); +} + uint16_t INA260_Get_BusVoltage_mV() { return _INA260_BusVoltage_mV; @@ -140,10 +173,21 @@ uint16_t INA260_Get_Current_mA() return _INA260_Current_mA; } +uint16_t INA260_Get_Threshold() +{ + return _INA260_Threshold; +} + /******************************************************************* Internal Functions *******************************************************************/ +void INA260_Write_Register(uint8_t reg_address, uint16_t reg_data) +{ + uint16_t Swapped_Data = UINT16_SWAP_BYTES(reg_data); + I2CM_Packet_Transmit(INA260_I2CADDR_DEFAULT, reg_address, 1, (uint8_t*)(&Swapped_Data), 2); +} + uint16_t INA260_Read_Register(uint8_t reg_address) { uint8_t Receive_Data[2]; @@ -151,4 +195,4 @@ uint16_t INA260_Read_Register(uint8_t reg_address) I2CM_Packet_Receive(INA260_I2CADDR_DEFAULT, reg_address, 1, Receive_Data, 2); return UINT8_ARR_TO_UINT16(Receive_Data); -} +} \ No newline at end of file diff --git a/Firmware/INA260.h b/Firmware/INA260.h index afd7c81..c134781 100644 --- a/Firmware/INA260.h +++ b/Firmware/INA260.h @@ -20,7 +20,7 @@ #define INA260_REG_BUSVOLTAGE 0x02 ///< Bus voltage measurement register in mV #define INA260_REG_POWER 0x03 ///< Power calculation register in mW #define INA260_REG_MASK_ENABLE 0x06 ///< Interrupt/Alert setting and checking register -#define INA260_REG_ALERT_LIMIT 0x00 ///< Alert limit value register +#define INA260_REG_ALERT_LIMIT 0x07 ///< Alert limit value register #define INA260_REG_MFG_UID 0xFE ///< Manufacturer ID Register #define INA260_REG_DIE_UID 0xFF ///< Die ID and Revision Register @@ -32,12 +32,15 @@ // ============================================================================================ // Function Declarations void INA260_Init(); +void INA260_Update_Current_Threshold(); void INA260_Read_BusVoltage(); void INA260_Read_Current(); +void INA260_Read_Threshold(); uint16_t INA260_Get_BusVoltage_mV(); uint16_t INA260_Get_Current_mA(); +uint16_t INA260_Get_Threshold(); diff --git a/Firmware/Images/Image_Check_Green_128x128.c b/Firmware/Images/Image_Check_Green_128x128.c new file mode 100644 index 0000000..f75b23a --- /dev/null +++ b/Firmware/Images/Image_Check_Green_128x128.c @@ -0,0 +1,139 @@ +#include + + + +const uint16_t _Image_Check_Green_128x128[3 + 16384] = { + 128, // Image Width + 128, // Image Height + 16, // Image Data Size + + // Image Data + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; diff --git a/Firmware/Images/Image_Check_Green_64x64.c b/Firmware/Images/Image_Check_Green_64x64.c new file mode 100644 index 0000000..4663feb --- /dev/null +++ b/Firmware/Images/Image_Check_Green_64x64.c @@ -0,0 +1,75 @@ +#include + + + +const uint16_t _Image_Check_Green_64x64[3 + 4096] = { + 64, // Image Width + 64, // Image Height + 16, // Image Data Size + + // Image Data + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, + 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0xad75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; diff --git a/Firmware/Images/Image_Failed_Red_128x128.c b/Firmware/Images/Image_Failed_Red_128x128.c new file mode 100644 index 0000000..6b44698 --- /dev/null +++ b/Firmware/Images/Image_Failed_Red_128x128.c @@ -0,0 +1,139 @@ +#include + + + +const uint16_t _Image_Failed_Red_128x128[3 + 16384] = { + 128, // Image Width + 128, // Image Height + 16, // Image Data Size + + // Image Data + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4400, 0xa908, 0xec10, 0x3019, 0x7421, 0x9629, 0xb929, 0xfb31, 0xfc31, 0x1d32, 0x1e32, 0x1e32, 0x1d32, 0xfc31, 0xfb31, 0xb929, 0x9629, 0x7421, 0x3019, 0xcc10, 0xa908, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0xaa10, 0x3119, 0x9729, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x9729, 0x3119, 0xaa10, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8808, 0x3019, 0xd929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xd929, 0x3019, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8808, 0x5321, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x5221, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0xee18, 0xda29, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x3019, 0x4400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, 0x8708, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa908, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb729, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0xb729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x8708, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0x5321, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7521, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xed10, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, 0xee18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6608, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3019, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0x9621, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9629, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, 0x7521, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7521, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb729, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9521, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7521, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9621, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9621, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6608, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xed18, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, 0x4408, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8708, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa908, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7521, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0xbe4a, 0x3e3a, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e3a, 0xbe4a, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x4300, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e7c, 0xdfde, 0xdfff, 0xdfff, 0x7fef, 0x7ead, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0x7ead, 0x7fef, 0xdfff, 0xdfff, 0xdfde, 0x3e7c, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7ead, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x1fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x1fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7ead, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xfb29, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e7c, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3e7c, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xdb31, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x8808, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xdfde, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfd6, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8808, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x5321, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5221, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe4a, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbe4a, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8808, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e3a, 0x7fef, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7fef, 0x3e3a, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8708, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3119, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7ead, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7ea5, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1019, 0x0000, 0x0000, + 0x0000, 0x0000, 0xd929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0x1fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x1fe7, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x0000, 0x0000, + 0x0000, 0x2300, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x2200, 0x0000, + 0x0000, 0xaa10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xa910, 0x0000, + 0x0000, 0x3119, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3019, 0x0000, + 0x0000, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x0000, + 0x0000, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x0000, + 0x4400, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x4300, + 0x8910, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8808, + 0xec10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xec10, + 0x3019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3fe7, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1019, + 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5421, + 0x9629, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9629, + 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, + 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xdb31, + 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, + 0x1d32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, + 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, + 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, + 0x1d32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, + 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, + 0xfb29, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xdb31, + 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, + 0x9621, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9621, + 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, + 0x3019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1019, + 0xec10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xcc10, + 0xa908, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8808, + 0x4300, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x2300, + 0x0000, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x0000, + 0x0000, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x0000, + 0x0000, 0x3119, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3019, 0x0000, + 0x0000, 0xaa10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xa910, 0x0000, + 0x0000, 0x2300, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x3fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fef, 0x1e53, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x2200, 0x0000, + 0x0000, 0x0000, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0x1fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x1fe7, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7ead, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7ea5, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3019, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8808, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e3a, 0x7fef, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7fef, 0x3e3a, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8708, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe4a, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbe4a, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x5221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7e42, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5219, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x8808, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xdfde, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfd6, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8708, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xdb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e7c, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x5fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x5fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x3e7c, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xdb31, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7ead, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x1fe7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x1fe7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x7ead, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x4300, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e7c, 0xdfde, 0xdfff, 0xdfff, 0x7fef, 0x7ead, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0x7ead, 0x7fef, 0xdfff, 0xdfff, 0xdfde, 0x3e7c, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7e42, 0xbe4a, 0x3e3a, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3e3a, 0xbe4a, 0x7e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8808, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7321, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xed10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0e19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6608, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0e19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9629, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9629, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0e19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7521, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb729, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb729, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7521, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0e19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0x9621, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9629, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xee18, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6608, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f19, 0x1d32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0x5321, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7521, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9629, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8808, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6608, 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0xee18, 0xda29, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb29, 0x3019, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8808, 0x5221, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x3221, 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8708, 0x3019, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0x1019, 0x8708, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0xa910, 0x3019, 0x9729, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x9729, 0x3019, 0xa910, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4300, 0x8808, 0xec10, 0x3019, 0x5321, 0x9629, 0xb829, 0xdb31, 0xfc31, 0xfc31, 0x1e32, 0x1e32, 0xfc31, 0xfc31, 0xdb31, 0xb829, 0x9629, 0x5321, 0x3019, 0xec10, 0x8808, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; diff --git a/Firmware/Images/Image_Failed_Red_64x64.c b/Firmware/Images/Image_Failed_Red_64x64.c new file mode 100644 index 0000000..83c4f40 --- /dev/null +++ b/Firmware/Images/Image_Failed_Red_64x64.c @@ -0,0 +1,75 @@ +#include + + + +const uint16_t _Image_Failed_Red_64x64[3 + 4096] = { + 64, // Image Width + 64, // Image Height + 16, // Image Data Size + + // Image Data + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0xa910, 0x0f19, 0x5321, 0xb829, 0xda29, 0xfc31, 0x1d32, 0x1d32, 0xfc31, 0xda29, 0xb829, 0x7321, 0x0f19, 0xa910, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6608, 0x3019, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x3019, 0x6608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, 0xed18, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0xed10, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0x0f19, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x0f19, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcb10, 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0xcc10, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4400, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9729, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa910, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0xaa10, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1019, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7521, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7521, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5321, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1019, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xa910, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4400, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9621, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xcb10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xcb10, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2200, 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x2100, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xee18, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0100, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x0100, 0x0000, 0x0000, + 0x0000, 0x0000, 0xed18, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0xbe8c, 0xfe94, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0xfe94, 0xbe8c, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xed18, 0x0000, 0x0000, + 0x0000, 0x0000, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0x3fe7, 0xdfff, 0xdfff, 0x9ff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0x9ff7, 0xdfff, 0xdfff, 0x3fe7, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x0000, 0x0000, + 0x0000, 0x6608, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe8c, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbe8c, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x6508, 0x0000, + 0x0000, 0x3019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe94, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xfe94, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x3019, 0x0000, + 0x0000, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x9ff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x9ff7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0x0000, + 0x2200, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x2200, + 0xa910, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xa910, + 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0e19, + 0x7321, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, + 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, + 0xda29, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xda29, + 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, + 0x1d32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, + 0x1d32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1d32, + 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, + 0xda29, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xda29, + 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, + 0x7321, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, + 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0e19, + 0xa910, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xa910, + 0x2200, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe6b, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x2200, + 0x0000, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0x9ff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x9ff7, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0x0000, + 0x0000, 0x3019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe94, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xfe94, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1019, 0x0000, + 0x0000, 0x6608, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xbe8c, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0xbff7, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xbe8c, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x6508, 0x0000, + 0x0000, 0x0000, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0x3fe7, 0xdfff, 0xdfff, 0x9ff7, 0xde73, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xde73, 0x9ff7, 0xdfff, 0xdfff, 0x3fe7, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb929, 0x0000, 0x0000, + 0x0000, 0x0000, 0xed10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9e42, 0xbe8c, 0xde94, 0xfe52, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfe52, 0xfe94, 0xbe8c, 0x9e42, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xed10, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0100, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x0100, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0f19, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xee18, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2100, 0xfb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x0100, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xcb10, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xaa10, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9729, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9629, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4300, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8910, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xa910, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7421, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x7421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5221, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x5321, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1019, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x0f19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8910, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfc31, 0xaa10, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4300, 0x9629, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x9629, 0x4300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8910, 0xdb31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0xcb10, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0x0e19, 0xfc31, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xfb31, 0x0e19, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, 0xed18, 0xb929, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0xed10, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6508, 0x3019, 0xb829, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0x1e32, 0xb829, 0x1019, 0x4508, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2200, 0xa910, 0x0e19, 0x5321, 0xb829, 0xda29, 0xfc31, 0x1d32, 0x1d32, 0xfc31, 0xda29, 0xb829, 0x5321, 0x0e19, 0xa910, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; diff --git a/Firmware/Images/Image_Overcurrent_32x32.c b/Firmware/Images/Image_Overcurrent_32x32.c new file mode 100644 index 0000000..5ff9f28 --- /dev/null +++ b/Firmware/Images/Image_Overcurrent_32x32.c @@ -0,0 +1,43 @@ +#include + + + +const uint16_t _Image_Overcurrent_32x32[3 + 1024] = { + 32, // Image Width + 32, // Image Height + 16, // Image Data Size + + // Image Data + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0200, 0x0900, 0x0c00, 0x0b00, 0x0800, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1800, 0x1f00, 0x1e00, 0x1b00, 0x1c00, 0x1f00, 0x1f00, 0x1500, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, 0x1600, 0x1f00, 0x1200, 0x0700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1600, 0x1f00, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0200, 0x1a00, 0x1b00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x1d00, 0x1500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1700, 0x1a00, 0x0200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0500, 0x1d00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b00, 0x1e00, 0x0400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1f00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a00, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1700, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0500, 0x1f00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0600, 0x0400, 0x0000, 0x0000, 0x0a00, 0x1e00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b00, 0x1c00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1400, 0x1c00, 0x0400, 0x0000, 0x0200, 0x1f00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1900, 0x1800, 0x0000, 0x0000, 0x1000, 0x1700, 0x1700, 0x1700, 0x1700, 0x1700, 0x1700, 0x1700, 0x1700, 0x1800, 0x1f00, 0x1c00, 0x0200, 0x0000, 0x1e00, 0x1600, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1500, 0x1500, 0x1a00, 0x1800, 0x0000, 0x0000, 0x0c00, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1100, 0x1800, 0x1f00, 0x1000, 0x0000, 0x0000, 0x1e00, 0x1800, 0x1500, 0x1500, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b00, 0x1c00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x1100, 0x0000, 0x0000, 0x0200, 0x1f00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0500, 0x1f00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a00, 0x1e00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1a00, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1700, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b00, 0x1e00, 0x0400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1f00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1600, 0x1a00, 0x0200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0500, 0x1d00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, 0x1a00, 0x1b00, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1d00, 0x1500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0200, 0x1600, 0x1f00, 0x1300, 0x0700, 0x0000, 0x0000, 0x0000, 0x0100, 0x0900, 0x1600, 0x1f00, 0x1100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1800, 0x1f00, 0x1e00, 0x1b00, 0x1c00, 0x1f00, 0x1f00, 0x1600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0900, 0x0d00, 0x0c00, 0x0900, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; diff --git a/Firmware/Mode_Manager.c b/Firmware/Mode_Manager.c index 3581302..d7ad31c 100644 --- a/Firmware/Mode_Manager.c +++ b/Firmware/Mode_Manager.c @@ -11,9 +11,11 @@ #include "Hue.h" #include "Command.h" #include "Screens.h" -// #include "OLED_SSD1306.h" #include "EEPROM_M24C64.h" #include "Command_Definition.h" +#include "Display_Default_Configurations.h" + +#include "pico/rand.h" // ============================================================================================ @@ -26,19 +28,19 @@ // Variables static volatile Mode _Current_Mode; -static volatile uint _Jam_Current_Angle; -static volatile uint _Jam_Next_Angle; +static volatile uint32_t _Jam_Current_Angle; +static volatile uint32_t _Jam_Next_Angle; -static volatile uint _Jam_Duration_Until_Next_s; -static volatile uint _Jam_Timer; +static volatile uint32_t _Jam_Duration_Until_Next_s; +static volatile uint32_t _Jam_Timer; // ============================================================================================ // Function Declarations void Mode_Manager_Jam_Mode_Init(void); -uint Mode_Manager_Jam_Select_Next_Angle(uint current_angle); -uint Mode_Manager_Jam_Get_Duration(void); -void Mode_Manager_Jam_Set_Color(uint angle); +uint32_t Mode_Manager_Jam_Select_Next_Angle(uint32_t current_angle); +uint32_t Mode_Manager_Jam_Get_Duration(void); +void Mode_Manager_Jam_Set_Color(uint32_t angle); void Mode_Manager_Jam_Step(void); @@ -72,8 +74,7 @@ void Mode_Manager_Cycle_Mode(void) Mode_Manager_Set_Mode(_Current_Mode); - // ToDo - // Screen_Setup_0_Mode_Change(TRANSITION_NONE, _Current_Mode); + Screen_Setup_Mode_Change(TRANSITION_NONE, TRANSITION_NONE, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Current_Mode); } void Mode_Manager_Set_Mode(Mode mode) @@ -174,27 +175,27 @@ void Mode_Manager_Jam_Mode_Init(void) Mode_Manager_Jam_Set_Color(_Jam_Current_Angle); } -uint Mode_Manager_Jam_Select_Next_Angle(uint current_angle) +uint32_t Mode_Manager_Jam_Select_Next_Angle(uint32_t current_angle) { - uint ADC_Value = 5;//ADC_Get_Result_Oldest(); - uint Angle_Step = ((ADC_Value & 0x07) + 1) * _EEPROM_Content.Jam_Light_Configuration.Color_Change; + uint32_t Random_Value = get_rand_32(); + uint32_t Angle_Step = ((Random_Value & 0x07) + 1) * _EEPROM_Content.Jam_Light_Configuration.Color_Change; return (current_angle + Angle_Step) % 360; } -uint Mode_Manager_Jam_Get_Duration(void) +uint32_t Mode_Manager_Jam_Get_Duration(void) { - uint Duration_Span_s = _EEPROM_Content.Jam_Light_Configuration.Duration_Max_s - _EEPROM_Content.Jam_Light_Configuration.Duration_Min_s; + uint32_t Duration_Span_s = _EEPROM_Content.Jam_Light_Configuration.Durations.Max - _EEPROM_Content.Jam_Light_Configuration.Durations.Min; - uint ADC_Value = 5;//ADC_Get_Result_Newest(); - uint Factor = ((ADC_Value & 0x07) << 4); + uint32_t Random_Value = get_rand_32(); + uint32_t Factor = ((Random_Value & 0x07) << 4); Duration_Span_s = (Duration_Span_s * Factor) / 112; - return _EEPROM_Content.Jam_Light_Configuration.Duration_Min_s + Duration_Span_s; + return _EEPROM_Content.Jam_Light_Configuration.Durations.Min + Duration_Span_s; } -void Mode_Manager_Jam_Set_Color(uint angle) +void Mode_Manager_Jam_Set_Color(uint32_t angle) { LED_Data_t Color; Color.Pixel = Hue_Get_Color_From_Angle(angle); diff --git a/Firmware/Rotary_Encoder.c b/Firmware/Rotary_Encoder.c index 56f542c..6741b71 100644 --- a/Firmware/Rotary_Encoder.c +++ b/Firmware/Rotary_Encoder.c @@ -32,6 +32,9 @@ #define DEBOUNCE_TIME_ENCODER_MS 50 #define DEBOUNCE_TIME_SWITCH_MS 300 +// Separate Switch Define +#define SWITCH_GPIO 23 + // ============================================================================================ // Variables @@ -40,7 +43,10 @@ static volatile uint32_t _Debounce_Time_Switch_ms = 0; static volatile bool _Rotation_CW_Occurred; static volatile bool _Rotation_CCW_Occurred; -static volatile bool _Switch_Press_Occurred; +static volatile bool _Rotary_Encoder_Switch_Press_Occurred; + +extern volatile uint32_t _Debounce_Time_Switch_ms; +extern volatile bool _Switch_Press_Occurred; // Other switch - not from the Rotary Encoder static volatile uint8_t _Rotary_Encoder_Previous_NextCode = 0; static volatile uint16_t _Rotary_Encoder_Store_State = 0; @@ -74,6 +80,19 @@ void ISR_Rotary_Encoder(uint gpio, uint32_t events) } } else if(gpio == ENCODER_SWITCH_GPIO) + { + uint32_t Current_Time_ms = to_ms_since_boot(get_absolute_time()); + + if(Current_Time_ms < _Debounce_Time_Switch_ms) + { + return; + } + + _Rotary_Encoder_Switch_Press_Occurred = true; + + _Debounce_Time_Switch_ms = Current_Time_ms + DEBOUNCE_TIME_SWITCH_MS; + } + else if(gpio == SWITCH_GPIO) { uint32_t Current_Time_ms = to_ms_since_boot(get_absolute_time()); @@ -94,9 +113,9 @@ void ISR_Rotary_Encoder(uint gpio, uint32_t events) *******************************************************************/ void Rotary_Encoder_Init(void) { - _Rotation_CW_Occurred = false; - _Rotation_CCW_Occurred = false; - _Switch_Press_Occurred = false; + _Rotation_CW_Occurred = false; + _Rotation_CCW_Occurred = false; + _Rotary_Encoder_Switch_Press_Occurred = false; gpio_init(ENCODER_PIN_A_GPIO); gpio_set_dir(ENCODER_PIN_A_GPIO, false); @@ -128,9 +147,9 @@ bool Rotary_Encoder_Rotation_CCW_Occurred(void) bool Rotary_Encoder_Switch_Press_Occurred(void) { - bool Return_Value = _Switch_Press_Occurred; + bool Return_Value = _Rotary_Encoder_Switch_Press_Occurred; - _Switch_Press_Occurred = false; + _Rotary_Encoder_Switch_Press_Occurred = false; return Return_Value; } diff --git a/Firmware/Screen_Variables.c b/Firmware/Screen_Variables.c index 079734f..e8b03e6 100644 --- a/Firmware/Screen_Variables.c +++ b/Firmware/Screen_Variables.c @@ -22,4 +22,7 @@ void (*_Screen_Action_CCW)(Object_ID object_id); void (*_Screen_On_Objects_Focused)(Object_ID object_id); void (*_Screen_On_Objects_Defocused)(Object_ID object_id); void (*_Screen_On_Object_Select)(Object_ID object_id); -void (*_Screen_On_Object_Deselect)(Object_ID object_id); \ No newline at end of file +void (*_Screen_On_Object_Deselect)(Object_ID object_id); + +bool _Screen_Idle_Active = false; +bool _Screen_Idle_Counter_Disable = false; \ No newline at end of file diff --git a/Firmware/Screens.h b/Firmware/Screens.h index 64b6efc..19e9ca3 100644 --- a/Firmware/Screens.h +++ b/Firmware/Screens.h @@ -15,6 +15,7 @@ #include #include "Easings.h" +#include "Mode_Manager.h" #include "Hierarchical_Menu.h" #include "Command_Definition.h" #include "Display_Objects_Datatypes.h" @@ -37,9 +38,15 @@ extern void (*_Screen_On_Objects_Defocused)(Object_ID object_id); extern void (*_Screen_On_Object_Select)(Object_ID object_id); extern void (*_Screen_On_Object_Deselect)(Object_ID object_id); +extern bool _Screen_Idle_Active; +extern bool _Screen_Idle_Counter_Disable; + // ============================================================================================ // List of all Screen Setups as extern +extern void Screen_Setup_Idle(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +extern void Screen_Setup_Mode_Change(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, Mode mode); + extern void Screen_Setup_Loading(); extern void Screen_Setup_Menu_Main(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, bool do_menu_animation, uint32_t selected_entry); extern void Screen_Setup_Mode(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); @@ -49,11 +56,18 @@ extern void Screen_Setup_Graph(Screen_Transition_Direction direction_out, Screen extern void Screen_Setup_Settings(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, int32_t selected_item); extern void Screen_Setup_Settings_Hierarchical_Menu(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, const Hierarchical_Menu* menu, const Menu_List* list, int32_t selected_item); +extern void Screen_Setup_EEPROM_Code(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +extern void Screen_Setup_EEPROM_Write(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, bool code_correct); extern void Screen_Setup_Settings_About(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); extern void Screen_Setup_Select_Bool(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, uint8_t *value, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); extern void Screen_Setup_Select_RGB(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, LED_Data_t* rgb_color, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); extern void Screen_Setup_Select_Value(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, int32_t* value, const Menu_Configuration_Select_Value* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); +extern void Screen_Setup_Select_List(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, int32_t* value, const Menu_Configuration_Select_List* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); +extern void Screen_Setup_Default_Notes(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); +extern void Screen_Setup_Settings_Reboot(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); +extern void Screen_Setup_Select_Hue(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, int32_t* hue_value, const Menu_Configuration_Select_Value* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); +extern void Screen_Setup_Select_MinMax(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, MinMax_t* value, const Menu_Configuration_Select_MinMax* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); #endif /* SCREENS_H_ */ \ No newline at end of file diff --git a/Firmware/Screens_Display/Common_Screen_Elements.c b/Firmware/Screens_Display/Common_Screen_Elements.c new file mode 100644 index 0000000..daf5338 --- /dev/null +++ b/Firmware/Screens_Display/Common_Screen_Elements.c @@ -0,0 +1,286 @@ +/* + * File: Common_Screen_Elements.c + * + * Created: Created: Sunday October 2025 19:57:27 + * Author: Chris + */ +#include "Common_Screen_Elements.h" + +// ============================================================================================ +// Includes +#include "../Display_Color.h" +#include "../Display_Config.h" +#include "../Display_Shapes.h" +#include "../Display_Objects.h" + +#include "../Hue.h" +#include "../EEPROM_M24C64.h" +#include "../MIDI_Note_List.h" +#include "../Command_Definition.h" + + +// ============================================================================================ +// Defines +#define PAUSE_LIGHT_COLOR_RGB565 DISPLAY_COLOR_FROM_RGB888(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Color.R, _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Color.G, _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Color.B) + + +// ============================================================================================ +// Variables +extern const uint8_t _Font_DejaVu_Sans_Mono_10x17[]; +extern const uint8_t _Font_DejaVu_Sans_Mono_15x25[]; +extern const uint8_t _Font_DejaVu_Sans_Mono_Bold_11x17[]; +extern const uint8_t _Font_DejaVu_Sans_Mono_Bold_15x26[]; + +extern const uint16_t _Image_Forest_Pine_Midi_64x64[]; +extern const uint16_t _Image_Steel_Blue_Jam_Happy_64x64[]; +extern const uint16_t _Image_Stone_Blue_Light_On_64x64[]; + +extern volatile bool _MIDI_To_Light_Enabled; +extern Info_Last_Received_Note_t _Info_Last_Applied_Note[NUM_LED_CHANNELS]; +extern uint8_t _Current_Duty_Cylces[NUM_LED_CHANNELS][NUM_LED_COLORS]; +extern volatile Pause_Light_Timer_s _Pause_Light_Timer[NUM_LED_CHANNELS]; + + +// Variables and Objects IDs for the MIDI Mode Activity +static Object_ID _Object_Midi_Text_MIDI_Enabled; +static Object_ID _Object_Midi_Text_MIDI_Last_Applied; +static Object_ID _Object_Midi_Text_Pause_Light_Enabled; +static Object_ID _Object_Midi_Text_Pause_Light_Active; +static Object_ID _Object_Midi_Text_Pause_Light_Counter; +static Object_ID _Object_Midi_Text_Pause_Light_ValueBar; + +static float _Pause_Light_Timeout_s; +static uint32_t _Pause_Light_Timeout_Ticks; +static uint32_t _Pause_Light_FadeOut_Counter; + +// Variables and Objects IDs for the JAM Mode Activity +static Object_ID _Object_Jam_Current_Hue_Angle; +static Object_ID _Object_Jam_Timeout_ValueBar; + +static uint32_t _Jam_Hue_Angle_Now; +static uint32_t _Jam_Hue_Angle_Next; +static float _Jam_Hue_Angle_Timer_s; +static uint32_t _Jam_Hue_Angle_Timer_Ticks; + +// Objects IDs for the Const Mode Activity +static Object_ID _Object_Const_Color_Circle; +static Object_ID _Object_Const_Color_Text_1, _Object_Const_Color_Text_2; + + +// ============================================================================================ +// Function Declarations +void Common_Screen_Element_Init_Mode_Activity_Midi(); +void Common_Screen_Element_Init_Mode_Activity_Jam(); +void Common_Screen_Element_Init_Mode_Activity_Const(); + +void Common_Screen_Element_Tick_Mode_Activity_Midi(); +void Common_Screen_Element_Tick_Mode_Activity_Jam(); +void Common_Screen_Element_Tick_Mode_Activity_Const(); + + +/******************************************************************* + Functions +*******************************************************************/ +void Common_Screen_Element_Init_Current_Mode(Mode mode) +{ + uint16_t* Image = NULL; + char Mode_Name[20]; + + switch (mode) + { + case MIDI: sprintf(Mode_Name, "MIDI"); Image = (uint16_t*)_Image_Forest_Pine_Midi_64x64; break; + case JAM: sprintf(Mode_Name, "Jam"); Image = (uint16_t*)_Image_Steel_Blue_Jam_Happy_64x64; break; + case CONSTANT: sprintf(Mode_Name, "Constant"); Image = (uint16_t*)_Image_Stone_Blue_Light_On_64x64; break; + } + + Display_Objects_Add_Image(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 40, NOT_SELECTABLE, Image, 0, NO_STYLE, NO_ANIMATION); + + char Title[30]; + sprintf(Title, "Mode: %s", Mode_Name); + + Font_ID Font_Title = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_15x25, 0); + Display_Objects_Add_Text(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 65, NOT_SELECTABLE, Title, Font_Title, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); +} + +void Common_Screen_Element_Init_Mode_Activity(Mode mode) +{ + switch (mode) + { + case MIDI: Common_Screen_Element_Init_Mode_Activity_Midi(); break; + case JAM: Common_Screen_Element_Init_Mode_Activity_Jam(); break; + case CONSTANT: Common_Screen_Element_Init_Mode_Activity_Const(); break; + } +} + +void Common_Screen_Element_Tick_Mode_Activity(Mode mode) +{ + switch (mode) + { + case MIDI: Common_Screen_Element_Tick_Mode_Activity_Midi(); break; + case JAM: Common_Screen_Element_Tick_Mode_Activity_Jam(); break; + case CONSTANT: Common_Screen_Element_Tick_Mode_Activity_Const(); break; + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ +void Common_Screen_Element_Init_Mode_Activity_Midi() +{ + _Pause_Light_Timeout_s = 0.0f; + _Pause_Light_Timeout_Ticks = 0; + + const int16_t Text_Y_Percent_Distance = 8; + + char MIDI_Settings[100]; + + sprintf(MIDI_Settings, "Ch %02u / Octave %+d", _EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].MIDI_Channel+1, _EEPROM_Content.Channel_MIDI_Configuration[LED_Channel_1].Octave); + + Font_ID Font_Regular = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_10x17, 0); + Font_ID Font_Bold = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_11x17, 0); + + int16_t Midi_Y_Percent = 20; + Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Midi_Y_Percent, NOT_SELECTABLE, "Midi to Light", Font_Bold, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + Midi_Y_Percent += Text_Y_Percent_Distance; + + _Object_Midi_Text_MIDI_Enabled = Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Midi_Y_Percent, NOT_SELECTABLE, "", Font_Regular, DISPLAY_COLOR_BLACK, NO_STYLE, NO_ANIMATION); + Midi_Y_Percent += Text_Y_Percent_Distance; + + Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Midi_Y_Percent, NOT_SELECTABLE, MIDI_Settings, Font_Regular, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + Midi_Y_Percent += Text_Y_Percent_Distance; + + _Object_Midi_Text_MIDI_Last_Applied = Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Midi_Y_Percent, NOT_SELECTABLE, "", Font_Regular, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + + + + int16_t Pause_Light_Y_Percent = 57; + Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Pause_Light_Y_Percent, NOT_SELECTABLE, "Pause Light", Font_Bold, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + Pause_Light_Y_Percent += Text_Y_Percent_Distance; + + _Object_Midi_Text_Pause_Light_Enabled = Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Pause_Light_Y_Percent, NOT_SELECTABLE, "", Font_Regular, DISPLAY_COLOR_BLACK, NO_STYLE, NO_ANIMATION); + Pause_Light_Y_Percent += Text_Y_Percent_Distance; + + _Object_Midi_Text_Pause_Light_Active = Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Pause_Light_Y_Percent, NOT_SELECTABLE, "", Font_Regular, DISPLAY_COLOR_BLACK, NO_STYLE, NO_ANIMATION); + Pause_Light_Y_Percent += Text_Y_Percent_Distance; + + _Object_Midi_Text_Pause_Light_ValueBar = Display_Objects_Add_Value_Bar_Arc(BOTH_IN_PERCENT, 50, 50, NOT_SELECTABLE, &_Pause_Light_Timeout_Ticks, + (uint32_t)(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Timeout * 1000 / TIMER_INTERVALL_LED_UPDATE_ms), 1, + (uint32_t)(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Timeout * 1000 / TIMER_INTERVALL_LED_UPDATE_ms), 10, + PAUSE_LIGHT_COLOR_RGB565, 110, 4, ARC_FRAME_AUTO_STEPS, -90, 270, NO_STYLE, NO_ANIMATION); + + _Object_Midi_Text_Pause_Light_Counter = Display_Objects_Add_Float(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Pause_Light_Y_Percent, NOT_SELECTABLE, &_Pause_Light_Timeout_s, "%04.2fs", Font_Regular, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); +} + +void Common_Screen_Element_Init_Mode_Activity_Jam() +{ + _Jam_Hue_Angle_Now = 0; + _Jam_Hue_Angle_Next = 0; + _Jam_Hue_Angle_Timer_s = 0.0; + _Jam_Hue_Angle_Timer_Ticks = 0; + + const int16_t Text_Y_Percent_Distance = 8; + + Font_ID Font_Regular = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_10x17, 0); + Font_ID Font_Bold = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_11x17, 0); + + int16_t Text_Y_Percent = 35; + Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Text_Y_Percent, NOT_SELECTABLE, "Jam Mode", Font_Bold, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + Text_Y_Percent += Text_Y_Percent_Distance; + + Display_Objects_Add_Integer(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Text_Y_Percent, NOT_SELECTABLE, (int*)&_Jam_Hue_Angle_Now, "Now: %d Deg", Font_Regular, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + Text_Y_Percent += Text_Y_Percent_Distance; + + Display_Objects_Add_Integer(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Text_Y_Percent, NOT_SELECTABLE, (int*)&_Jam_Hue_Angle_Next, "Next: %d Deg", Font_Regular, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + Text_Y_Percent += Text_Y_Percent_Distance; + + Display_Objects_Add_Float(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Text_Y_Percent, NOT_SELECTABLE, &_Jam_Hue_Angle_Timer_s, "%04.2fs", Font_Regular, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + + _Object_Jam_Current_Hue_Angle = Display_Objects_Add_Value_Bar_Arc(BOTH_IN_PERCENT, 50, 50, NOT_SELECTABLE, &_Jam_Hue_Angle_Now, 359, 0, 1, 400, DISPLAY_COLOR_RED, 115, 4, ARC_FRAME_AUTO_STEPS, -90, 270, NO_STYLE, NO_ANIMATION); + _Object_Jam_Timeout_ValueBar = Display_Objects_Add_Value_Bar_Arc(BOTH_IN_PERCENT, 50, 50, NOT_SELECTABLE, &_Jam_Hue_Angle_Timer_Ticks, Mode_Manager_Jam_Get_Duration_Tick(), 0, 1000, 1000, DISPLAY_COLOR_LIGHTGREY, 105, 4, ARC_FRAME_AUTO_STEPS, -90, 270, NO_STYLE, NO_ANIMATION); +} + +void Common_Screen_Element_Init_Mode_Activity_Const() +{ + Font_ID Font = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_11x17, 0); + + _Object_Const_Color_Circle = Display_Objects_Add_Circle_Filled(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 35, NOT_SELECTABLE, DISPLAY_COLOR_BLACK, 40, NO_STYLE, NO_ANIMATION); + _Object_Const_Color_Text_1 = Display_Objects_Add_Text(CENTER_BOTTOM, BOTH_IN_PERCENT, 50, 68, NOT_SELECTABLE, "Constant Light", Font, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + _Object_Const_Color_Text_2 = Display_Objects_Add_Text(CENTER_TOP, BOTH_IN_PERCENT, 50, 70, NOT_SELECTABLE, "is on", Font, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); +} + +void Common_Screen_Element_Tick_Mode_Activity_Midi() +{ + char MIDI_Last_Applied[100]; + char Event[4]; + char Note[3]; + + if(_Info_Last_Applied_Note[LED_Channel_1].Event == MIDI_EVENT_NOTE_ON) { + sprintf(Event, "On"); + } + else if(_Info_Last_Applied_Note[LED_Channel_1].Event == MIDI_EVENT_NOTE_OFF) { + sprintf(Event, "Off"); + } else + { + sprintf(Event, "-"); + } + + if(_Info_Last_Applied_Note[LED_Channel_1].Note_In_Octave != NO_NOTE) { + sprintf(Note, "%s", _MIDI_Note_List[_Info_Last_Applied_Note[LED_Channel_1].Note_In_Octave].Tone_Name); + } + else { + sprintf(Note, "-"); + } + + sprintf(MIDI_Last_Applied, "Note %s %s (%u)", Note, Event, _Info_Last_Applied_Note[LED_Channel_1].Velocity); + + Display_Objects_Update_Text(_Object_Midi_Text_MIDI_Enabled, _MIDI_To_Light_Enabled == true ? "Enabled" : "Disabled"); + Display_Objects_Update_Text(_Object_Midi_Text_MIDI_Last_Applied, MIDI_Last_Applied); + Display_Objects_Update_Text(_Object_Midi_Text_Pause_Light_Enabled, _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Enabled > 0 ? "Enabled" : "Disabled"); + Display_Objects_Update_Text(_Object_Midi_Text_Pause_Light_Active, _Pause_Light_Timer[LED_Channel_1].Is_Active == true ? "On" : "Off"); + + Display_Objects_Update_Color(_Object_Midi_Text_MIDI_Enabled, _MIDI_To_Light_Enabled == true ? DISPLAY_COLOR_GREEN : DISPLAY_COLOR_RED); + Display_Objects_Update_Color(_Object_Midi_Text_Pause_Light_Enabled, _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Enabled > 0 ? DISPLAY_COLOR_GREEN : DISPLAY_COLOR_RED); + Display_Objects_Update_Color(_Object_Midi_Text_Pause_Light_Active, _Pause_Light_Timer[LED_Channel_1].Is_Active == true ? DISPLAY_COLOR_GREEN : DISPLAY_COLOR_RED); + + _Pause_Light_Timeout_s = _EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Timeout - ((float)(_Pause_Light_Timer[LED_Channel_1].Timer * TIMER_INTERVALL_LED_UPDATE_ms)) / 1000.0f; + + if(_Pause_Light_Timeout_s < 0.01f) { + if(_Pause_Light_FadeOut_Counter < 60) { + _Pause_Light_FadeOut_Counter++; + } + if(_Pause_Light_FadeOut_Counter >= 20) { + // Display_Objects_Update_Color(_Object_Midi_Text_MIDI_Last_Applied, Display_Color_Interpolate_Float(DISPLAY_COLOR_LIGHTGREY, DISPLAY_COLOR_BLACK, (float)(_Pause_Light_FadeOut_Counter-20) / 40.0f)); + Display_Objects_Update_Color(_Object_Midi_Text_Pause_Light_Counter, Display_Color_Interpolate_Float(DISPLAY_COLOR_LIGHTGREY, DISPLAY_COLOR_BLACK, (float)(_Pause_Light_FadeOut_Counter-20) / 40.0f)); + Display_Objects_Update_Color(_Object_Midi_Text_Pause_Light_ValueBar, Display_Color_Interpolate_Float(PAUSE_LIGHT_COLOR_RGB565, DISPLAY_COLOR_BLACK, (float)(_Pause_Light_FadeOut_Counter-20) / 40.0f)); + } + } + else { + _Pause_Light_FadeOut_Counter = 0; + // Display_Objects_Update_Color(_Object_Midi_Text_MIDI_Last_Applied, DISPLAY_COLOR_LIGHTGREY); + Display_Objects_Update_Color(_Object_Midi_Text_Pause_Light_Counter, DISPLAY_COLOR_LIGHTGREY); + Display_Objects_Update_Color(_Object_Midi_Text_Pause_Light_ValueBar, PAUSE_LIGHT_COLOR_RGB565); + } + + uint32_t Total_Pause_Light_Timeout_Ticks = (uint32_t)(_EEPROM_Content.Pause_Light_Configuration[LED_Channel_1].Timeout * 1000 / TIMER_INTERVALL_LED_UPDATE_ms); + _Pause_Light_Timeout_Ticks = Total_Pause_Light_Timeout_Ticks - _Pause_Light_Timer[LED_Channel_1].Timer; +} + +void Common_Screen_Element_Tick_Mode_Activity_Jam() +{ + LED_Data_t Hue_Color; + + _Jam_Hue_Angle_Now = Mode_Manager_Jam_Get_Current_Angle(); + _Jam_Hue_Angle_Next = Mode_Manager_Jam_Get_Next_Angle(); + _Jam_Hue_Angle_Timer_Ticks = Mode_Manager_Jam_Get_Time_Left_Tick(); + _Jam_Hue_Angle_Timer_s = (float)(_Jam_Hue_Angle_Timer_Ticks * 40) / 1000.0f; + + Hue_Color.Pixel = Hue_Get_Color_From_Angle(_Jam_Hue_Angle_Now); + Display_Objects_Update_Color(_Object_Jam_Current_Hue_Angle, DISPLAY_COLOR_FROM_RGB888(Hue_Color.R, Hue_Color.G, Hue_Color.B)); + Display_Objects_Update_Max_Min(_Object_Jam_Timeout_ValueBar, Mode_Manager_Jam_Get_Duration_Tick(), 0); +} + +void Common_Screen_Element_Tick_Mode_Activity_Const() +{ + Display_Objects_Update_Color(_Object_Const_Color_Circle, DISPLAY_COLOR_FROM_RGB888(_Current_Duty_Cylces[LED_Channel_1][R], _Current_Duty_Cylces[LED_Channel_1][G], _Current_Duty_Cylces[LED_Channel_1][B])); +} diff --git a/Firmware/Screens_Display/Common_Screen_Elements.h b/Firmware/Screens_Display/Common_Screen_Elements.h new file mode 100644 index 0000000..3cfda75 --- /dev/null +++ b/Firmware/Screens_Display/Common_Screen_Elements.h @@ -0,0 +1,34 @@ +/* + * File: Common_Screen_Elements.h + * Created: Created: Sunday October 2025 19:57:22 + * Author: Chris + */ +#ifndef COMMON_SCREEN_ELEMENTS_H +#define COMMON_SCREEN_ELEMENTS_H + +// ============================================================================================ +// Includes +#include +#include +#include + +#include "../Mode_Manager.h" + + +// ============================================================================================ +// Defines + + +// ============================================================================================ +// Datatypes + + +// ============================================================================================ +// Function Declarations +void Common_Screen_Element_Init_Current_Mode(Mode mode); +void Common_Screen_Element_Init_Mode_Activity(Mode mode); + +void Common_Screen_Element_Tick_Mode_Activity(Mode mode); + + +#endif // COMMON_SCREEN_ELEMENTS_H \ No newline at end of file diff --git a/Firmware/Screens_Display/Screen_Default_Notes.c b/Firmware/Screens_Display/Screen_Default_Notes.c new file mode 100644 index 0000000..93bce6a --- /dev/null +++ b/Firmware/Screens_Display/Screen_Default_Notes.c @@ -0,0 +1,171 @@ +/* + * File: Screen_Default_Notes.c + * + * Created: Created: Sunday September 2025 21:09:49 + * Author: Chris + */ + + +// ============================================================================================ +// Includes +#include "../Screens.h" +#include "../UI_Control.h" +#include "../Mode_Manager.h" + +#include "../Display.h" +#include "../Display_Objects.h" +#include "../Display_Render_Complex.h" +#include "../Display_Default_Configurations.h" + +// ============================================================================================ +// Defines + + +// ============================================================================================ +// Variables +static Object_ID _Object_Message_Box; + +static const Hierarchical_Menu* _Return_Menu = NULL; +static const Menu_List* _Return_List = NULL; +static int32_t _Return_Selected_Item; + +static char* _Title; +static uint32_t _Title_Length; +static bool _Bool_Value; +static bool _Decision_Made; +static uint32_t _Counter; + + +// ============================================================================================ +// Function Declarations +void Screen_Setup_Default_Notes(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); + +static void Screen_Init (Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +static void Screen_Tick (void); +static void Screen_Click (uint button_return_value); +static void Screen_Touch_Event (int16_t x, int16_t y); +static void Screen_Action_CW (Object_ID object_id); +static void Screen_Action_CCW (Object_ID object_id); +static void Screen_On_Object_Focused (Object_ID object_id); +static void Screen_On_Object_Defocused (Object_ID object_id); +static void Screen_On_Object_Select (Object_ID object_id); +static void Screen_On_Object_Deselect (Object_ID object_id); + + +/******************************************************************* + Functions +*******************************************************************/ +void Screen_Setup_Default_Notes(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item) +{ + _Title = title; + _Title_Length = title_length; + _Bool_Value = false; + + Screen_Init(direction_out, direction_in, type, frame_duration); + + _Return_Menu = return_menu; + _Return_List = return_list; + _Return_Selected_Item = return_selected_item; + + _Decision_Made = false; + _Counter = 0; +} + +void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + _Screen_Last = Screen_Init; + _Screen_Tick = Screen_Tick; + _Screen_Click = Screen_Click; + _Screen_Touch_Event = Screen_Touch_Event; + _Screen_Action_CW = Screen_Action_CW; + _Screen_Action_CCW = Screen_Action_CCW; + _Screen_On_Objects_Focused = Screen_On_Object_Focused; + _Screen_On_Objects_Defocused = Screen_On_Object_Defocused; + _Screen_On_Object_Select = Screen_On_Object_Select; + _Screen_On_Object_Deselect = Screen_On_Object_Deselect; + + Display_Objects_Clear(); + Display_Screen_Transition_Start(direction_out, direction_in, type, frame_duration); + + + ////////////////////////////// + // Add Display Objects here // + ////////////////////////////// + Display_Render_Complex_Select_YesNo_Set(_Bool_Value, &_Configuration_Default_Select_YesNo); + Display_Objects_Add_Select_YesNo(_Title, _Title_Length, &_Bool_Value, &_Configuration_Default_Select_YesNo); + _Object_Message_Box = Display_Objects_Add_Message_Box(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, "Notes Set", MESSAGE_BOX_ICON_CIRCLE_CHECKMARK, &_Message_Box_Style_Regular); + + Display_Select_Object(); +} + +void Screen_Tick(void) +{ + if(_Decision_Made) { + _Counter++; + } + + if(_Counter == MESSAGE_BOX_DEFAULT_TICKS) { + Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_DOWN, TRANSITION_RIGHT, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Return_Menu, _Return_List, _Return_Selected_Item); + } +} + +void Screen_Click(uint button_return_value) +{ + +} + +void Screen_Touch_Event(int16_t x, int16_t y) +{ + +} + +void Screen_Action_CW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + _Bool_Value = !_Bool_Value; +} + +void Screen_Action_CCW(Object_ID object_id) +{ + Screen_Action_CW(object_id); +} + +void Screen_On_Object_Focused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Defocused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Select(Object_ID object_id) +{ + +} + +void Screen_On_Object_Deselect(Object_ID object_id) +{ + if(!_Decision_Made) { + + if(_Bool_Value) { + Mode_Manager_Set_Default_Color_Notes(); + + Display_Objects_Show_Message_Box(_Object_Message_Box, MESSAGE_BOX_DEFAULT_TICKS); + } + else { + Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_DOWN, TRANSITION_RIGHT, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Return_Menu, _Return_List, _Return_Selected_Item); + } + _Decision_Made = true; + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ + diff --git a/Firmware/Screens_Display/Screen_EEPROM_Code.c b/Firmware/Screens_Display/Screen_EEPROM_Code.c new file mode 100644 index 0000000..fc5875c --- /dev/null +++ b/Firmware/Screens_Display/Screen_EEPROM_Code.c @@ -0,0 +1,218 @@ +/* + * File: Screen_EEPROM_Code.c + * + * Created: Created: Monday September 2025 16:11:48 + * Author: Chris + */ + + +// ============================================================================================ +// Includes +#include "../Screens.h" +#include "../UI_Control.h" + +#include "../Display.h" +#include "../Display_Objects.h" +#include "../Display_Default_Configurations.h" + +// ============================================================================================ +// Defines +#define BOX_X_TARGET (DISPLAY_X_CENTER + (_Character_Select - 1) * _Character_X_Distance - 1) + + +// ============================================================================================ +// Variables +extern const unsigned char _Font_DejaVu_Sans_Mono_Bold_11x17[]; +extern const uint8_t _Font_DejaVu_Sans_Mono_20x34[]; + +static Object_ID _Object_Code[3]; +static Object_ID _Object_Box; + +static int32_t _Code[3] = { 4, 4, 12 }; +static int32_t _Input[3]; +static int32_t _Character_Select; +static char _Character[3][2]; + +static const int16_t _Character_X_Distance = 50; +static int16_t _Box_X_Current; +static int16_t _Box_X_Target; + + +// ============================================================================================ +// Function Declarations +void Screen_Setup_EEPROM_Code(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); + +static char HexNumber_To_ASCII (char hex_number); + +static void Screen_Init (Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +static void Screen_Tick (void); +static void Screen_Click (uint button_return_value); +static void Screen_Touch_Event (int16_t x, int16_t y); +static void Screen_Action_CW (Object_ID object_id); +static void Screen_Action_CCW (Object_ID object_id); +static void Screen_On_Object_Focused (Object_ID object_id); +static void Screen_On_Object_Defocused (Object_ID object_id); +static void Screen_On_Object_Select (Object_ID object_id); +static void Screen_On_Object_Deselect (Object_ID object_id); + + +/******************************************************************* + Functions +*******************************************************************/ +void Screen_Setup_EEPROM_Code(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + _Input[0] = 0; + _Input[1] = 0; + _Input[2] = 0; + + _Character_Select = 0; + + _Box_X_Target = BOX_X_TARGET; + _Box_X_Current = _Box_X_Target; + + + Screen_Init(direction_out, direction_in, type, frame_duration); +} + +void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + _Screen_Last = Screen_Init; + _Screen_Tick = Screen_Tick; + _Screen_Click = Screen_Click; + _Screen_Touch_Event = Screen_Touch_Event; + _Screen_Action_CW = Screen_Action_CW; + _Screen_Action_CCW = Screen_Action_CCW; + _Screen_On_Objects_Focused = Screen_On_Object_Focused; + _Screen_On_Objects_Defocused = Screen_On_Object_Defocused; + _Screen_On_Object_Select = Screen_On_Object_Select; + _Screen_On_Object_Deselect = Screen_On_Object_Deselect; + + Display_Objects_Clear(); + Display_Screen_Transition_Start(direction_out, direction_in, type, frame_duration); + + + ////////////////////////////// + // Add Display Objects here // + ////////////////////////////// + Font_ID Font_Title = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_11x17, DISPLAY_DEFAULT_CHAR_SPACING); + Font_ID Font_Characters = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_20x34, 0); + + Display_Objects_Add_Text(CENTER_TOP, X_IN_PERCENT_Y_IN_PIXEL, 50, 45, NOT_SELECTABLE, "Enter Code", Font_Title, DISPLAY_COLOR_WHITE, NO_STYLE, NO_ANIMATION); + + for(int i=0;i<3;i++) { + _Character[i][0] = HexNumber_To_ASCII(_Input[i]); + _Character[i][1] = '\0'; + _Object_Code[i] = Display_Objects_Add_Text(CENTER_MIDDLE, X_IN_PIXEL_Y_IN_PERCENT, DISPLAY_X_CENTER + (i-1)*_Character_X_Distance, 50, NOT_SELECTABLE, &(_Character[i][0]), Font_Characters, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + } + + _Object_Box = Display_Objects_Add_Rounded_Rectangle_Frame(CENTER_MIDDLE, X_IN_PIXEL_Y_IN_PERCENT, _Box_X_Current, 49, NOT_SELECTABLE, DISPLAY_COLOR_LIGHTGREY, 33, 39, 6, 2, NO_STYLE, NO_ANIMATION); + + UI_Control_Acceleration_Reset(); + UI_Control_Acceleration_Set_Enabled(false); + + Display_Select_Object(); +} + +void Screen_Tick(void) +{ + for(int i=0;i<3;i++) { + Display_Color Color = i == _Character_Select ? DISPLAY_COLOR_LIGHTGREY : DISPLAY_COLOR_DARKGREY; + _Character[i][0] = HexNumber_To_ASCII(_Input[i]); + + Display_Objects_Update_Text(_Object_Code[i], &_Character[i][0]); + Display_Objects_Update_Color(_Object_Code[i], Color); + } + + + _Box_X_Target = BOX_X_TARGET; + + if(_Box_X_Target > _Box_X_Current) { + int16_t Distance = abs(_Box_X_Current - _Box_X_Target); + _Box_X_Current += ((Distance >> 1) + 1); + } + + Display_Objects_Update_Coordinates(_Object_Box, CENTER_MIDDLE, X_IN_PIXEL_Y_IN_PERCENT, _Box_X_Current, 49); +} + +void Screen_Click(uint button_return_value) +{ + +} + +void Screen_Touch_Event(int16_t x, int16_t y) +{ + +} + +void Screen_Action_CW(Object_ID object_id) +{ + if(_Character_Select >= (sizeof(_Input) / sizeof(int32_t))) { + return; + } + + UI_Control_Selector_Inc(&_Input[_Character_Select], 0, 15, true); +} + +void Screen_Action_CCW(Object_ID object_id) +{ + if(_Character_Select >= (sizeof(_Input) / sizeof(int32_t))) { + return; + } + + UI_Control_Selector_Dec(&_Input[_Character_Select], 0, 15, true); +} + +void Screen_On_Object_Focused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Defocused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Select(Object_ID object_id) +{ + +} + +void Screen_On_Object_Deselect(Object_ID object_id) +{ + Display_Select_Object(); + + if(_Character_Select < (sizeof(_Input) / sizeof(int32_t))) { + _Character_Select++; + } + + if(_Character_Select < (sizeof(_Input) / sizeof(int32_t))) { + return; + } + + bool Code_Correct = (_Input[0] == _Code[0]) && (_Input[1] == _Code[1]) && (_Input[2] == _Code[2]); + + _Input[0] = 0; + _Input[1] = 0; + _Input[2] = 0; + + // Move to write screen instead directly to settings menu + Screen_Setup_EEPROM_Write(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, Code_Correct); +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ +char HexNumber_To_ASCII(char hex_number) +{ + if(hex_number >=0 && hex_number <= 9) + { + return '0' + hex_number; + } + else if(hex_number >= 10 && hex_number <= 15) + { + return 'A' + hex_number - 10; + } + + return '0'; +} \ No newline at end of file diff --git a/Firmware/Screens_Display/Screen_EEPROM_Write.c b/Firmware/Screens_Display/Screen_EEPROM_Write.c new file mode 100644 index 0000000..7eda617 --- /dev/null +++ b/Firmware/Screens_Display/Screen_EEPROM_Write.c @@ -0,0 +1,296 @@ +/* + * File: Screen_EEPROM_Write.c + * + * Created: Created: Monday September 2025 16:12:05 + * Author: Chris + */ + + +// ============================================================================================ +// Includes +#include "../Screens.h" +#include "../Easings.h" +#include "../UI_Control.h" +#include "../EEPROM_M24C64.h" + +#include "../Display.h" +#include "../Display_Color.h" +#include "../Display_Objects.h" +#include "../Display_Default_Configurations.h" + + +// ============================================================================================ +// Defines +#define COLOR_DOT_ACTIVE 0xFFFF // Pure White #FFFFFF +#define COLOR_DOT_INACTIVE 0x0842 // Dark Gray #404450 + +#define DOT_ANIMATION_SPEED 8 + +// Animation timing configuration +#define TEXT_FADE_START_FRAME 70 // Start fading text earlier for overlap +#define TEXT_FADE_DURATION 30 // Longer fade for smoother transition +#define IMAGE_FADE_START_FRAME 80 // Image starts fading in +#define IMAGE_FADE_DURATION 20 // Longer fade for smoother appearance +#define ANIMATION_END_FRAME 160 // Total animation duration + + +// ============================================================================================ +// Variables +extern const uint8_t _Font_DejaVu_Sans_Mono_Bold_15x26[]; + +extern const uint16_t _Image_Check_Green_64x64[]; +extern const uint16_t _Image_Check_Green_128x128[]; +extern const uint16_t _Image_Failed_Red_64x64[]; +extern const uint16_t _Image_Failed_Red_128x128[]; + +static Object_ID _Object_Text_Writing; +static Object_ID _Object_Dots[3]; +static Object_ID _Object_Image; + +static bool _Code_Correct; +static int _Counter; +static uint32_t _EEPROM_Write_Status; +static int32_t _Dot_Animation_Phase; + +static Display_Color _Text_Original_Color; +static Display_Color _Dot_Active_Original_Color; +static Display_Color _Dot_Inactive_Original_Color; + + +// ============================================================================================ +// Function Declarations +void Screen_Setup_EEPROM_Write(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, bool code_correct); + +static void Update_Dot_Animation(void); + +static void Screen_Init (Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +static void Screen_Tick (void); +static void Screen_Click (uint button_return_value); +static void Screen_Touch_Event (int16_t x, int16_t y); +static void Screen_Action_CW (Object_ID object_id); +static void Screen_Action_CCW (Object_ID object_id); +static void Screen_On_Object_Focused (Object_ID object_id); +static void Screen_On_Object_Defocused (Object_ID object_id); +static void Screen_On_Object_Select (Object_ID object_id); +static void Screen_On_Object_Deselect (Object_ID object_id); + + +/******************************************************************* + Functions +*******************************************************************/ +void Screen_Setup_EEPROM_Write(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, bool code_correct) +{ + _Code_Correct = code_correct; + + Screen_Init(direction_out, direction_in, type, frame_duration); + + _Counter = 0; + _Dot_Animation_Phase = 0; + + if(_Code_Correct) { + EEPROM_Trigger_Update(); + } + + _EEPROM_Write_Status = EEPROM_STATUS_NONE; +} + +void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + // _Screen_Last = Screen_Init; // I don't want that here... + _Screen_Tick = Screen_Tick; + _Screen_Click = Screen_Click; + _Screen_Touch_Event = Screen_Touch_Event; + _Screen_Action_CW = Screen_Action_CW; + _Screen_Action_CCW = Screen_Action_CCW; + _Screen_On_Objects_Focused = Screen_On_Object_Focused; + _Screen_On_Objects_Defocused = Screen_On_Object_Defocused; + _Screen_On_Object_Select = Screen_On_Object_Select; + _Screen_On_Object_Deselect = Screen_On_Object_Deselect; + + Display_Objects_Clear(); + Display_Screen_Transition_Start(direction_out, direction_in, type, frame_duration); + + + ////////////////////////////// + // Add Display Objects here // + ////////////////////////////// + _Text_Original_Color = DISPLAY_COLOR_LIGHTGREY; + _Dot_Active_Original_Color = COLOR_DOT_ACTIVE; + _Dot_Inactive_Original_Color = COLOR_DOT_INACTIVE; + + Font_ID Font_Text = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_15x26, 0); + + if(_Code_Correct) { + _Object_Text_Writing = Display_Objects_Add_Text(CENTER_BOTTOM, BOTH_IN_PERCENT, 50, 50, NOT_SELECTABLE, "Writing EEPROM", Font_Text, _Text_Original_Color, NO_STYLE, NO_ANIMATION); + + for(int i = 0; i < 3; i++) { + _Object_Dots[i] = Display_Objects_Add_Circle_Frame(CENTER_MIDDLE, BOTH_IN_PERCENT, 50 + (i-1) * 6, 60, NOT_SELECTABLE, _Dot_Inactive_Original_Color, 4, 1, NO_STYLE, NO_ANIMATION); + } + + _Object_Image = Display_Objects_Add_Image(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, NOT_SELECTABLE, _Image_Check_Green_128x128, 0, NO_STYLE, NO_ANIMATION); + Display_Objects_Update_Enabled(_Object_Image, false); + } + else { + Display_Objects_Add_Text(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, NOT_SELECTABLE, "Code Incorrect", Font_Text, _Text_Original_Color, NO_STYLE, NO_ANIMATION); + } + + _Screen_Idle_Counter_Disable = true; + + Display_Select_Object(); +} + +void Screen_Tick(void) +{ + if(_Code_Correct) { + Update_Dot_Animation(); + } + + if(_Counter == IMAGE_FADE_START_FRAME && _Code_Correct) + { + if(_EEPROM_Write_Status == EEPROM_STATUS_NONE) { + _EEPROM_Write_Status = EEPROM_Get_Write_Status(); + } + + Display_Objects_Update_Enabled(_Object_Text_Writing, false); + for(int i = 0; i < 3; i++) { + Display_Objects_Update_Enabled(_Object_Dots[i], false); + } + + if(_EEPROM_Write_Status == EEPROM_STATUS_WRITE_OK) { + Display_Objects_Update_Enabled(_Object_Image, true); + } else if(_EEPROM_Write_Status == EEPROM_STATUS_WRITE_FAILED) { + Display_Objects_Update_Image(_Object_Image, _Image_Failed_Red_128x128); + Display_Objects_Update_Enabled(_Object_Image, true); + } + + // Display_Objects_Update_Alpha(_Object_Image, 0); + Display_Objects_Update_Scale(_Object_Image, 0); + } + + // Smooth text and dots fade-out (overlapping with image fade-in) + if(_Counter >= TEXT_FADE_START_FRAME && _Counter < (TEXT_FADE_START_FRAME + TEXT_FADE_DURATION) && _Code_Correct) + { + float Fade_Progress = (float)(_Counter - TEXT_FADE_START_FRAME) / (float)TEXT_FADE_DURATION; + + // Use Ease_Out_Cubic for smooth, natural fade (accelerates at start, decelerates at end) + float Eased_Progress = Ease_Out_Cubic(Fade_Progress); + + // Calculate inverse progress for fade-out (1.0 -> 0.0) + float Fade_Out = 1.0f - Eased_Progress; + + // Fade text to background color + Display_Color Faded_Text = Display_Color_Interpolate_Float(_Text_Original_Color, DISPLAY_COLOR_BLACK, Eased_Progress); + Display_Objects_Update_Color(_Object_Text_Writing, Faded_Text); + + // Fade dots to background + Display_Color Faded_Dot_Active = Display_Color_Interpolate_Float(_Dot_Active_Original_Color, DISPLAY_COLOR_BLACK, Eased_Progress); + Display_Color Faded_Dot_Inactive = Display_Color_Interpolate_Float(_Dot_Inactive_Original_Color, DISPLAY_COLOR_BLACK, Eased_Progress); + + // Apply faded colors while maintaining animation state + int Active_Dot = _Dot_Animation_Phase / DOT_ANIMATION_SPEED; + for(int i = 0; i < 3; i++) { + Display_Color Dot_Color = (i == Active_Dot) ? Faded_Dot_Active : Faded_Dot_Inactive; + Display_Objects_Update_Color(_Object_Dots[i], Dot_Color); + } + } + + // Disable text and dots after fade-out completes + if(_Counter == (TEXT_FADE_START_FRAME + TEXT_FADE_DURATION) && _Code_Correct) + { + Display_Objects_Update_Enabled(_Object_Text_Writing, false); + for(int i = 0; i < 3; i++) { + Display_Objects_Update_Enabled(_Object_Dots[i], false); + } + } + + // Smooth image fade-in with extended duration and better easing + if(_Counter >= IMAGE_FADE_START_FRAME && _Counter < (IMAGE_FADE_START_FRAME + IMAGE_FADE_DURATION) && _Code_Correct) + { + float Fade_Progress = (float)(_Counter - IMAGE_FADE_START_FRAME) / (float)IMAGE_FADE_DURATION; + + // Use Ease_Out_Cubic for smooth, elegant appearance + // This creates a fast start that gradually slows down - feels very natural + float Eased_Progress = Ease_Out_Cubic(Fade_Progress); + + // Convert to alpha value (0-255) + uint8_t Alpha_Value = (uint8_t)(Eased_Progress * 255.0f); + + Display_Objects_Update_Scale(_Object_Image, Eased_Progress); + + // Apply alpha to the appropriate image + // Display_Objects_Update_Alpha(_Object_Image, Alpha_Value); + } + + // Transition to next screen after animation completes + if(_Counter >= ANIMATION_END_FRAME) { + _Screen_Idle_Counter_Disable = false; + Screen_Setup_Settings(TRANSITION_DOWN, TRANSITION_DOWN, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, 4); + } + + _Counter++; +} + +void Screen_Click(uint button_return_value) +{ + +} + +void Screen_Touch_Event(int16_t x, int16_t y) +{ + +} + +void Screen_Action_CW(Object_ID object_id) +{ + +} + +void Screen_Action_CCW(Object_ID object_id) +{ + +} + +void Screen_On_Object_Focused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Defocused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Select(Object_ID object_id) +{ + +} + +void Screen_On_Object_Deselect(Object_ID object_id) +{ + if(_Counter >= 120) { + _Screen_Idle_Counter_Disable = false; + Screen_Setup_Settings(TRANSITION_DOWN, TRANSITION_DOWN, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, 4); + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ +void Update_Dot_Animation(void) +{ + _Dot_Animation_Phase++; + + if(_Dot_Animation_Phase >= (DOT_ANIMATION_SPEED * 3)) { + _Dot_Animation_Phase = 0; + } + + // Determine which dot should be active + int Active_Dot = _Dot_Animation_Phase / DOT_ANIMATION_SPEED; + + // Update dot colors + for(int i = 0; i < 3; i++) { + Display_Color Dot_Color = (i == Active_Dot) ? _Dot_Active_Original_Color : _Dot_Inactive_Original_Color; + Display_Objects_Update_Color(_Object_Dots[i], Dot_Color); + } +} \ No newline at end of file diff --git a/Firmware/Screens_Display/Screen_Graph.c b/Firmware/Screens_Display/Screen_Graph.c index d6f8b82..6484b80 100644 --- a/Firmware/Screens_Display/Screen_Graph.c +++ b/Firmware/Screens_Display/Screen_Graph.c @@ -10,27 +10,37 @@ #include "../Screens.h" #include "../UI_Control.h" #include "../Command_Definition.h" -#include "../Display_Default_Configurations.h" #include "../Display.h" +#include "../Display_Font.h" #include "../Display_Objects.h" +#include "../Display_Default_Configurations.h" #include "../INA260.h" +#include "../EEPROM_M24C64.h" // ============================================================================================ // Defines #define GRAPH_DATA_WDITH 200 +#define COLOR_DARKGREEN DISPLAY_COLOR_FROM_RGB888(0, 100, 0) // ============================================================================================ // Variables +extern const unsigned char _Font_DejaVu_Sans_Mono_6x12[]; extern const unsigned char _Font_DejaVu_Sans_Mono_10x17[]; +extern const unsigned char _Font_DejaVu_Sans_Mono_Bold_7x15[]; +extern const unsigned char _Font_DejaVu_Sans_Mono_Bold_11x17[]; + +static Object_ID _Object_Value_BusVoltage; +static Object_ID _Object_Value_Current; static uint16_t _Data_BusVoltage[GRAPH_DATA_WDITH]; -static uint16_t _Data_BusVoltage_Threshold_Overvoltage[GRAPH_DATA_WDITH]; -static uint16_t _Data_BusVoltage_Threshold_Undervoltage[GRAPH_DATA_WDITH]; -static float _Current_BusVoltage_V; +static uint16_t _Data_Current[GRAPH_DATA_WDITH]; +static uint16_t _Data_Threshold_Current[GRAPH_DATA_WDITH]; +static float _Actual_BusVoltage_V; +static float _Actual_Current_A; // ============================================================================================ @@ -58,8 +68,8 @@ void Screen_Setup_Graph(Screen_Transition_Direction direction_out, Screen_Transi for(int i=0;i= 149)) { + Current_Threshold_Label_Y += (Font_6_1_Height + 1); + } + else if((Current_Threshold_Label_Y <= 149) && (Current_Threshold_Label_Y >= 141)) { + Current_Threshold_Label_Y = 141; + } + + + Font_ID Font_6_1 = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_6x12, 1); Font_ID Font_10_1 = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_10x17, 1); + Font_ID Font_7_1_B = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_7x15, 1); + Font_ID Font_11_1_B = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_11x17, 1); - Display_Objects_Add_Graph(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, false, _Data_BusVoltage, GRAPH_DATA_WDITH, 32000, 0, DISPLAY_COLOR_WHITE, 200, NO_STYLE, NO_ANIMATION); - Display_Objects_Add_Graph(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, false, _Data_BusVoltage_Threshold_Overvoltage, GRAPH_DATA_WDITH, 32000, 0, DISPLAY_COLOR_RED, 200, NO_STYLE, NO_ANIMATION); - Display_Objects_Add_Graph(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, false, _Data_BusVoltage_Threshold_Undervoltage, GRAPH_DATA_WDITH, 32000, 0, DISPLAY_COLOR_RED, 200, NO_STYLE, NO_ANIMATION); + // Threshold Lines / Areas + Display_Objects_Add_Rectangle_Frame(CENTER_TOP, X_IN_PERCENT_Y_IN_PIXEL, 50, 141, NOT_SELECTABLE, COLOR_DARKGREEN, GRAPH_DATA_WDITH+2, 8, 1, NO_STYLE, NO_ANIMATION); + Display_Objects_Add_Graph(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, false, _Data_Threshold_Current, GRAPH_DATA_WDITH, 5000, 0, DISPLAY_COLOR_ORANGE, 200, NO_STYLE, NO_ANIMATION); - Display_Objects_Add_Float(CENTER_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 50, 232, NOT_SELECTABLE, &_Current_BusVoltage_V, "%2.3fV", Font_10_1, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + // Threshold Labels + Display_Objects_Add_Text(LEFT_BOTTOM, BOTH_IN_PIXEL, 19, 140, NOT_SELECTABLE, "12.5V", Font_6_1, COLOR_DARKGREEN, NO_STYLE, NO_ANIMATION); + Display_Objects_Add_Text(LEFT_TOP , BOTH_IN_PIXEL, 19, 149, NOT_SELECTABLE, "11.5V", Font_6_1, COLOR_DARKGREEN, NO_STYLE, NO_ANIMATION); + Display_Objects_Add_Text(CENTER_BOTTOM, X_IN_PERCENT_Y_IN_PIXEL, 50, Current_Threshold_Label_Y, NOT_SELECTABLE, Current_Threshold, Font_6_1, DISPLAY_COLOR_ORANGE, NO_STYLE, NO_ANIMATION); + + // Data Graphs (Voltage and Current) + Display_Objects_Add_Graph(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, false, _Data_BusVoltage, GRAPH_DATA_WDITH, 32000, 0, DISPLAY_COLOR_RED, 200, NO_STYLE, NO_ANIMATION); + Display_Objects_Add_Graph(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, false, _Data_Current, GRAPH_DATA_WDITH, 5000, 0, DISPLAY_COLOR_YELLOW, 200, NO_STYLE, NO_ANIMATION); + + // Data Values (Voltage and Current) + _Object_Value_BusVoltage = Display_Objects_Add_Float(RIGHT_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 48, 50, NOT_SELECTABLE, &_Actual_BusVoltage_V, "%2.1fV", Font_11_1_B, DISPLAY_COLOR_WHITE, NO_STYLE, NO_ANIMATION); + _Object_Value_Current = Display_Objects_Add_Float(LEFT_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 52, 50, NOT_SELECTABLE, &_Actual_Current_A, "%1.3fA", Font_11_1_B, DISPLAY_COLOR_YELLOW, NO_STYLE, NO_ANIMATION); } void Screen_Tick(void) { - for(int i=0;iValue_Display_Ratio; + _Config = config; + + Screen_Init(direction_out, direction_in, type, frame_duration); + + _Return_Menu = return_menu; + _Return_List = return_list; + _Return_Selected_Item = return_selected_item; + + _Decision_Made = false; + _Counter = 0; + + _Current_Mode = Mode_Manager_Get_Current_Mode(); + + Mode_Manager_Set_Mode(PREVIEW); +} + +void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + _Screen_Last = Screen_Init; + _Screen_Tick = Screen_Tick; + _Screen_Click = Screen_Click; + _Screen_Touch_Event = Screen_Touch_Event; + _Screen_Action_CW = Screen_Action_CW; + _Screen_Action_CCW = Screen_Action_CCW; + _Screen_On_Objects_Focused = Screen_On_Object_Focused; + _Screen_On_Objects_Defocused = Screen_On_Object_Defocused; + _Screen_On_Object_Select = Screen_On_Object_Select; + _Screen_On_Object_Deselect = Screen_On_Object_Deselect; + + Display_Objects_Clear(); + Display_Screen_Transition_Start(direction_out, direction_in, type, frame_duration); + + + ////////////////////////////// + // Add Display Objects here // + ////////////////////////////// + Style_ID Style_Value_Var = Display_Objects_Add_Style(DISPLAY_COLOR_BLACK, DISPLAY_COLOR_LIGHTGREY, 1, 0, PADDING_1(3), STYLE_WIDTH_HEIGHT_RATIO_AUTO); + + Display_Objects_Add_Select_Value(_Title, _Title_Length, &_Display_Value, _Config->Max, _Config->Min, (char*)_Config->Format, &_Configuration_Default_Select_Value); + _Object_Value_Bar = Display_Objects_Add_Value_Bar_Rect(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 63, NOT_SELECTABLE, _Value, 359, 0, LEFT_TO_RIGHT, DISPLAY_COLOR_BLACK, 200, 10, Style_Value_Var, NO_ANIMATION); + _Object_Message_Box = Display_Objects_Add_Message_Box(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, "Saved", MESSAGE_BOX_ICON_CIRCLE_CHECKMARK, &_Message_Box_Style_Regular); + + Display_Select_Object(); + + UI_Control_Acceleration_Reset(); + UI_Control_Acceleration_Set_Enabled(_Config->Use_Acceleration); +} + +void Screen_Tick(void) +{ + LED_Data_t RGB_Value; + RGB_Value.Pixel = Hue_Get_Color_From_Angle(*_Value); + + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_RED , MULTICORE_NO_PARAMETER, RGB_Value.R); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_GREEN, MULTICORE_NO_PARAMETER, RGB_Value.G); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_BLUE , MULTICORE_NO_PARAMETER, RGB_Value.B); + + Display_Objects_Update_Color(_Object_Value_Bar, DISPLAY_COLOR_FROM_RGB888(RGB_Value.R, RGB_Value.G, RGB_Value.B)); + + if(_Decision_Made) { + _Counter++; + } + + if(_Counter == MESSAGE_BOX_DEFAULT_TICKS) { + Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_DOWN, TRANSITION_RIGHT, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Return_Menu, _Return_List, _Return_Selected_Item); + } +} + +void Screen_Click(uint button_return_value) +{ + +} + +void Screen_Touch_Event(int16_t x, int16_t y) +{ + +} + +void Screen_Action_CW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + UI_Control_Selector_Inc(_Value, _Config->Min, _Config->Max, _Config->Cycle_Selector); + + _Display_Value = *_Value * _Config->Value_Display_Ratio; +} + +void Screen_Action_CCW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + UI_Control_Selector_Dec(_Value, _Config->Min, _Config->Max, _Config->Cycle_Selector); + + _Display_Value = *_Value * _Config->Value_Display_Ratio; +} + +void Screen_On_Object_Focused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Defocused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Select(Object_ID object_id) +{ + +} + +void Screen_On_Object_Deselect(Object_ID object_id) +{ + if(!_Decision_Made) { + Display_Objects_Show_Message_Box(_Object_Message_Box, MESSAGE_BOX_DEFAULT_TICKS); + _Decision_Made = true; + + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_RED , MULTICORE_NO_PARAMETER, 0); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_GREEN, MULTICORE_NO_PARAMETER, 0); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_BLUE , MULTICORE_NO_PARAMETER, 0); + + Mode_Manager_Set_Mode(_Current_Mode); + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ + diff --git a/Firmware/Screens_Display/Screen_Select_List.c b/Firmware/Screens_Display/Screen_Select_List.c new file mode 100644 index 0000000..4ec8136 --- /dev/null +++ b/Firmware/Screens_Display/Screen_Select_List.c @@ -0,0 +1,175 @@ +/* + * File: Screen_Select_List.c + * + * Created: Created: Friday September 2025 20:06:47 + * Author: Chris + */ + + +// ============================================================================================ +// Includes +#include "../Screens.h" +#include "../UI_Control.h" + +#include "../Display.h" +#include "../Display_Objects.h" +#include "../Display_Default_Configurations.h" + +// ============================================================================================ +// Defines + + +// ============================================================================================ +// Variables +extern const uint8_t _Font_DejaVu_Sans_Mono_Bold_11x17[]; + +static Object_ID _Object_Message_Box; + +static const Hierarchical_Menu* _Return_Menu = NULL; +static const Menu_List* _Return_List = NULL; +static int32_t _Return_Selected_Item; + +static char* _Title; +static uint32_t _Title_Length; +static int32_t* _Value; +static const Menu_Configuration_Select_List* _Config; + +static bool _Decision_Made; +static uint32_t _Counter; + + +// ============================================================================================ +// Function Declarations +void Screen_Setup_Select_List(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, int32_t* value, const Menu_Configuration_Select_List* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); + +static void Screen_Init (Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +static void Screen_Tick (void); +static void Screen_Click (uint button_return_value); +static void Screen_Touch_Event (int16_t x, int16_t y); +static void Screen_Action_CW (Object_ID object_id); +static void Screen_Action_CCW (Object_ID object_id); +static void Screen_On_Object_Focused (Object_ID object_id); +static void Screen_On_Object_Defocused (Object_ID object_id); +static void Screen_On_Object_Select (Object_ID object_id); +static void Screen_On_Object_Deselect (Object_ID object_id); + + +/******************************************************************* + Functions +*******************************************************************/ +void Screen_Setup_Select_List(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, int32_t* value, const Menu_Configuration_Select_List* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item) +{ + _Title = title; + _Title_Length = title_length; + _Value = value; + _Config = config; + + Screen_Init(direction_out, direction_in, type, frame_duration); + + _Return_Menu = return_menu; + _Return_List = return_list; + _Return_Selected_Item = return_selected_item; + + _Decision_Made = false; + _Counter = 0; +} + +void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + _Screen_Last = Screen_Init; + _Screen_Tick = Screen_Tick; + _Screen_Click = Screen_Click; + _Screen_Touch_Event = Screen_Touch_Event; + _Screen_Action_CW = Screen_Action_CW; + _Screen_Action_CCW = Screen_Action_CCW; + _Screen_On_Objects_Focused = Screen_On_Object_Focused; + _Screen_On_Objects_Defocused = Screen_On_Object_Defocused; + _Screen_On_Object_Select = Screen_On_Object_Select; + _Screen_On_Object_Deselect = Screen_On_Object_Deselect; + + Display_Objects_Clear(); + Display_Screen_Transition_Start(direction_out, direction_in, type, frame_duration); + + + ////////////////////////////// + // Add Display Objects here // + ////////////////////////////// + Font_ID Font_Title = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_11x17, 0); + + Display_Objects_Add_Select_List((char*)_Config->Item_Names, _Config->Item_Count, _Config->Name_Length, _Value, &_Configuration_Default_Select_List); + Display_Objects_Add_Text(CENTER_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 50, 60, NOT_SELECTABLE, _Title, Font_Title, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + _Object_Message_Box = Display_Objects_Add_Message_Box(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, "Saved", MESSAGE_BOX_ICON_CIRCLE_CHECKMARK, &_Message_Box_Style_Regular); + + Display_Select_Object(); + + UI_Control_Acceleration_Reset(); + UI_Control_Acceleration_Set_Enabled(_Config->Use_Acceleration); +} + +void Screen_Tick(void) +{ + if(_Decision_Made) { + _Counter++; + } + + if(_Counter == MESSAGE_BOX_DEFAULT_TICKS) { + Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_DOWN, TRANSITION_RIGHT, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Return_Menu, _Return_List, _Return_Selected_Item); + } +} + +void Screen_Click(uint button_return_value) +{ + +} + +void Screen_Touch_Event(int16_t x, int16_t y) +{ + +} + +void Screen_Action_CW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + UI_Control_Selector_Inc(_Value, 0, _Config->Item_Count-1, _Config->Cycle_Selector); +} + +void Screen_Action_CCW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + UI_Control_Selector_Dec(_Value, 0, _Config->Item_Count-1, _Config->Cycle_Selector); +} + +void Screen_On_Object_Focused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Defocused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Select(Object_ID object_id) +{ + +} + +void Screen_On_Object_Deselect(Object_ID object_id) +{ + if(!_Decision_Made) { + Display_Objects_Show_Message_Box(_Object_Message_Box, MESSAGE_BOX_DEFAULT_TICKS); + _Decision_Made = true; + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ + diff --git a/Firmware/Screens_Display/Screen_Select_MinMax.c b/Firmware/Screens_Display/Screen_Select_MinMax.c new file mode 100644 index 0000000..18ba47d --- /dev/null +++ b/Firmware/Screens_Display/Screen_Select_MinMax.c @@ -0,0 +1,267 @@ +/* + * File: Screen_Select_MinMax.c + * + * Created: Created: Friday October 2025 16:50:54 + * Author: Chris + */ + + +// ============================================================================================ +// Includes +#include "../Screens.h" +#include "../UI_Control.h" + +#include "../Display.h" +#include "../Display_Color.h" +#include "../Display_Objects.h" +#include "../Display_Default_Configurations.h" + + +// ============================================================================================ +// Defines +#define DISPLAY_COLOR_VERYDARKGREY DISPLAY_COLOR_FROM_RGB888(64, 64, 64) + + +// ============================================================================================ +// Variables +extern const uint8_t _Font_DejaVu_Sans_Mono_Bold_7x15[]; +extern const uint8_t _Font_DejaVu_Sans_Mono_10x17[]; + +static Object_ID _Object_Text_Min, _Object_Text_Max; +static Object_ID _Object_Box; +static Object_ID _Object_Message_Box; +static Object_ID _Object_Value_Bar; + +static const Hierarchical_Menu* _Return_Menu = NULL; +static const Menu_List* _Return_List = NULL; +static int32_t _Return_Selected_Item; + +static char* _Title; +static uint32_t _Title_Length; + +static MinMax_t* _Value; +static int32_t _Value_Min; +static int32_t _Value_Max; +static int32_t* _Current_Value; +static int32_t _Limit_Min; +static int32_t _Limit_Max; + +static int16_t _Box_Y_Current; +static int16_t _Box_Y_Target; + +static const Menu_Configuration_Select_MinMax* _Config; +static const int16_t _Y_Center_Min = DISPLAY_Y_CENTER; +static const int16_t _Y_Center_Max = DISPLAY_Y_CENTER + 40; + + +static bool _Decision_Made; +static uint32_t _Counter; + + +// ============================================================================================ +// Function Declarations +void Screen_Setup_Select_MinMax(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, MinMax_t* value, const Menu_Configuration_Select_MinMax* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); + +static void Screen_Init (Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +static void Screen_Tick (void); +static void Screen_Click (uint button_return_value); +static void Screen_Touch_Event (int16_t x, int16_t y); +static void Screen_Action_CW (Object_ID object_id); +static void Screen_Action_CCW (Object_ID object_id); +static void Screen_On_Object_Focused (Object_ID object_id); +static void Screen_On_Object_Defocused (Object_ID object_id); +static void Screen_On_Object_Select (Object_ID object_id); +static void Screen_On_Object_Deselect (Object_ID object_id); + + +/******************************************************************* + Functions +*******************************************************************/ +void Screen_Setup_Select_MinMax(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, MinMax_t* value, const Menu_Configuration_Select_MinMax* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item) +{ + _Title = title; + _Title_Length = title_length; + + _Value = value; + _Value_Min = _Value->Min; + _Value_Max = _Value->Max; + + _Current_Value = &_Value_Min; + _Limit_Min = config->Min; + _Limit_Max = config->Max - 1; + + _Box_Y_Target = _Y_Center_Min; + _Box_Y_Current = _Box_Y_Target; + + _Config = config; + + Screen_Init(direction_out, direction_in, type, frame_duration); + + _Return_Menu = return_menu; + _Return_List = return_list; + _Return_Selected_Item = return_selected_item; + + _Decision_Made = false; + _Counter = 0; +} + +void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + _Screen_Last = Screen_Init; + _Screen_Tick = Screen_Tick; + _Screen_Click = Screen_Click; + _Screen_Touch_Event = Screen_Touch_Event; + _Screen_Action_CW = Screen_Action_CW; + _Screen_Action_CCW = Screen_Action_CCW; + _Screen_On_Objects_Focused = Screen_On_Object_Focused; + _Screen_On_Objects_Defocused = Screen_On_Object_Defocused; + _Screen_On_Object_Select = Screen_On_Object_Select; + _Screen_On_Object_Deselect = Screen_On_Object_Deselect; + + Display_Objects_Clear(); + Display_Screen_Transition_Start(direction_out, direction_in, type, frame_duration); + + + ////////////////////////////// + // Add Display Objects here // + ////////////////////////////// + Font_ID Font_Title = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_7x15, DISPLAY_DEFAULT_CHAR_SPACING); + Font_ID Font_Value = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_10x17, 0); + Display_Objects_Add_Text(CENTER_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 50, DISPLAY_Y_CENTER - 50, NOT_SELECTABLE, _Title, Font_Title, DISPLAY_COLOR_WHITE, NO_STYLE, NO_ANIMATION); + + _Object_Text_Min = Display_Objects_Add_Integer(CENTER_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 50, _Y_Center_Min, NOT_SELECTABLE, (int*)(&_Value_Min), (char*)_Config->Format_Min, Font_Value, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + _Object_Text_Max = Display_Objects_Add_Integer(CENTER_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 50, _Y_Center_Max, NOT_SELECTABLE, (int*)(&_Value_Max), (char*)_Config->Format_Max, Font_Value, DISPLAY_COLOR_DARKGREY, NO_STYLE, NO_ANIMATION); + + _Object_Box = Display_Objects_Add_Rounded_Rectangle_Frame(CENTER_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 50, _Box_Y_Current, NOT_SELECTABLE, DISPLAY_COLOR_LIGHTGREY, 140, 30, 3, 1, NO_STYLE, NO_ANIMATION); + + _Object_Message_Box = Display_Objects_Add_Message_Box(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, "Saved", MESSAGE_BOX_ICON_CIRCLE_CHECKMARK, &_Message_Box_Style_Regular); + + Display_Select_Object(); + + UI_Control_Acceleration_Reset(); + UI_Control_Acceleration_Set_Enabled(_Config->Use_Acceleration); +} + +void Screen_Tick(void) +{ + // Update Values in actual datasctructure passed via pointer + _Value->Min = _Value_Min; + _Value->Max = _Value_Max; + + // Animate the slection box to see which values in currently being edited + if(_Box_Y_Target > _Box_Y_Current) { + int16_t Distance = abs(_Box_Y_Current - _Box_Y_Target); + _Box_Y_Current += ((Distance >> 1) + 1); + } + Display_Objects_Update_Coordinates(_Object_Box, CENTER_MIDDLE, X_IN_PERCENT_Y_IN_PIXEL, 50, _Box_Y_Current); + + // Adjust the colors of the text depending if the text is currently edited or not + int16_t Max_Distance = abs(_Y_Center_Max - _Y_Center_Min); + float Ratio = ((float)(_Box_Y_Current - _Y_Center_Min)) / (float)Max_Distance; + Display_Color Color_Min = Display_Color_Interpolate_Float(DISPLAY_COLOR_LIGHTGREY, DISPLAY_COLOR_VERYDARKGREY, Ratio); + Display_Color Color_Max = Display_Color_Interpolate_Float(DISPLAY_COLOR_VERYDARKGREY, DISPLAY_COLOR_LIGHTGREY, Ratio); + + Display_Objects_Update_Color(_Object_Text_Min, Color_Min); + Display_Objects_Update_Color(_Object_Text_Max, Color_Max); + + // Increment tick counter for message box if all values have been selected + if(_Decision_Made) { + _Counter++; + } + + // Change back to the former screen (Hierarchical Menu), when the ticks are up + if(_Counter == MESSAGE_BOX_DEFAULT_TICKS) { + Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_DOWN, TRANSITION_RIGHT, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Return_Menu, _Return_List, _Return_Selected_Item); + } +} + +void Screen_Click(uint button_return_value) +{ + +} + +void Screen_Touch_Event(int16_t x, int16_t y) +{ + +} + +void Screen_Action_CW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + UI_Control_Selector_Inc(_Current_Value, _Limit_Min, _Limit_Max, _Config->Cycle_Selector); + + if(_Current_Value == &_Value_Min) { + if(_Value_Min >= _Value_Max) { + _Value_Max = _Value_Min + 1; + } + } + else { + if(_Value_Max <= _Value_Min) { + _Value_Min = _Value_Max - 1; + } + } +} + +void Screen_Action_CCW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + UI_Control_Selector_Dec(_Current_Value, _Limit_Min, _Limit_Max, _Config->Cycle_Selector); + + if(_Current_Value == &_Value_Min) { + if(_Value_Min >= _Value_Max) { + _Value_Max = _Value_Min + 1; + } + } + else { + if(_Value_Max <= _Value_Min) { + _Value_Min = _Value_Max - 1; + } + } +} + +void Screen_On_Object_Focused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Defocused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Select(Object_ID object_id) +{ + +} + +void Screen_On_Object_Deselect(Object_ID object_id) +{ + if(_Current_Value == &_Value_Min) { + _Current_Value = &_Value_Max; + + _Limit_Min++; + _Limit_Max++; + + _Box_Y_Target = _Y_Center_Max; + + Display_Select_Object(); + return; + } + + if(!_Decision_Made) { + Display_Objects_Show_Message_Box(_Object_Message_Box, MESSAGE_BOX_DEFAULT_TICKS); + _Decision_Made = true; + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ + diff --git a/Firmware/Screens_Display/Screen_Select_RGB.c b/Firmware/Screens_Display/Screen_Select_RGB.c index 6eea0dd..61cecb9 100644 --- a/Firmware/Screens_Display/Screen_Select_RGB.c +++ b/Firmware/Screens_Display/Screen_Select_RGB.c @@ -8,7 +8,9 @@ // ============================================================================================ // Includes #include "../Screens.h" +#include "../Command.h" #include "../UI_Control.h" +#include "../Mode_Manager.h" #include "../Command_Definition.h" #include "../Display.h" @@ -33,6 +35,7 @@ static uint8_t* _Color; static bool _Decision_Made; static uint32_t _Counter; +static Mode _Current_Mode; // ============================================================================================ @@ -68,6 +71,9 @@ void Screen_Setup_Select_RGB(Screen_Transition_Direction direction_out, Screen_T _Decision_Made = false; _Counter = 0; + _Current_Mode = Mode_Manager_Get_Current_Mode(); + + Mode_Manager_Set_Mode(PREVIEW); } void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) @@ -101,6 +107,10 @@ void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Di void Screen_Tick(void) { + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_RED , MULTICORE_NO_PARAMETER, _RGB_Color->R); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_GREEN, MULTICORE_NO_PARAMETER, _RGB_Color->G); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_BLUE , MULTICORE_NO_PARAMETER, _RGB_Color->B); + if(_Decision_Made) { _Counter++; } @@ -171,6 +181,12 @@ void Screen_On_Object_Deselect(Object_ID object_id) if(!_Decision_Made) { Display_Objects_Show_Message_Box(_Object_Message_Box, MESSAGE_BOX_DEFAULT_TICKS); _Decision_Made = true; + + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_RED , MULTICORE_NO_PARAMETER, 0); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_GREEN, MULTICORE_NO_PARAMETER, 0); + Command_Issue_Set_Request(MULTICORE_COMMAND_SET_DIRECT_BLUE , MULTICORE_NO_PARAMETER, 0); + + Mode_Manager_Set_Mode(_Current_Mode); } } diff --git a/Firmware/Screens_Display/Screen_Select_Value.c b/Firmware/Screens_Display/Screen_Select_Value.c index 3bba44c..d020145 100644 --- a/Firmware/Screens_Display/Screen_Select_Value.c +++ b/Firmware/Screens_Display/Screen_Select_Value.c @@ -27,6 +27,7 @@ static int32_t _Return_Selected_Item; static char* _Title; static uint32_t _Title_Length; static int32_t* _Value; +static int32_t _Display_Value; static const Menu_Configuration_Select_Value* _Config; static bool _Decision_Made; @@ -54,7 +55,10 @@ static void Screen_On_Object_Deselect (Object_ID object_id); *******************************************************************/ void Screen_Setup_Select_Value(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, int32_t* value, const Menu_Configuration_Select_Value* config, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item) { + _Title = title; + _Title_Length = title_length; _Value = value; + _Display_Value = *value * config->Value_Display_Ratio; _Config = config; Screen_Init(direction_out, direction_in, type, frame_duration); @@ -87,13 +91,13 @@ void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Di ////////////////////////////// // Add Display Objects here // ////////////////////////////// - Display_Objects_Add_Select_Value(_Title, _Title_Length, _Value, _Config->Max, _Config->Min, _Config->Format, &_Configuration_Default_Select_Value); + Display_Objects_Add_Select_Value(_Title, _Title_Length, &_Display_Value, _Config->Max, _Config->Min, (char*)_Config->Format, &_Configuration_Default_Select_Value); _Object_Message_Box = Display_Objects_Add_Message_Box(CENTER_MIDDLE, BOTH_IN_PERCENT, 50, 50, "Saved", MESSAGE_BOX_ICON_CIRCLE_CHECKMARK, &_Message_Box_Style_Regular); Display_Select_Object(); UI_Control_Acceleration_Reset(); - UI_Control_Acceleration_Set_Enabled(true); + UI_Control_Acceleration_Set_Enabled(_Config->Use_Acceleration); } void Screen_Tick(void) @@ -123,7 +127,9 @@ void Screen_Action_CW(Object_ID object_id) return; } - UI_Control_Selector_Inc(_Value, _Config->Min, _Config->Max, true); + UI_Control_Selector_Inc(_Value, _Config->Min, _Config->Max, _Config->Cycle_Selector); + + _Display_Value = *_Value * _Config->Value_Display_Ratio; } void Screen_Action_CCW(Object_ID object_id) @@ -132,7 +138,9 @@ void Screen_Action_CCW(Object_ID object_id) return; } - UI_Control_Selector_Dec(_Value, _Config->Min, _Config->Max, true); + UI_Control_Selector_Dec(_Value, _Config->Min, _Config->Max, _Config->Cycle_Selector); + + _Display_Value = *_Value * _Config->Value_Display_Ratio; } void Screen_On_Object_Focused(Object_ID object_id) diff --git a/Firmware/Screens_Display/Screen_Settings.c b/Firmware/Screens_Display/Screen_Settings.c index eb1cb3e..e0532b6 100644 --- a/Firmware/Screens_Display/Screen_Settings.c +++ b/Firmware/Screens_Display/Screen_Settings.c @@ -59,6 +59,9 @@ static Configuration_Menu_Icon_Row _Configuration_Menu_Icon_Row = { static int32_t _Selected_Item; extern const Hierarchical_Menu _Hierarchical_Menu_MIDI; +extern const Hierarchical_Menu _Hierarchical_Menu_Jam; +extern const Hierarchical_Menu _Hierarchical_Menu_Const_Light; +extern const Hierarchical_Menu _Hierarchical_Menu_Device; // ============================================================================================ @@ -165,14 +168,13 @@ void Screen_On_Object_Deselect(Object_ID object_id) { switch (_Selected_Item) { - // case 0: Screen_Setup_Settings_MIDI(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, 0); break; - case 0: Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, &_Hierarchical_Menu_MIDI, _Hierarchical_Menu_MIDI.List, 0); break; - case 1: break; - case 2: break; - case 3: break; - case 4: break; - case 5: Screen_Setup_Settings_About(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES); break; - case 6: Screen_Setup_Menu_Main(TRANSITION_DOWN, TRANSITION_DOWN, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, false, 1); break; + case 0: Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, &_Hierarchical_Menu_MIDI, _Hierarchical_Menu_MIDI.List , 0); break; + case 1: Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, &_Hierarchical_Menu_Jam, _Hierarchical_Menu_Jam.List , 0); break; + case 2: Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, &_Hierarchical_Menu_Const_Light, _Hierarchical_Menu_Const_Light.List , 0); break; + case 3: Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, &_Hierarchical_Menu_Device, _Hierarchical_Menu_Device.List , 0); break; + case 4: Screen_Setup_EEPROM_Code (TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES); break; + case 5: Screen_Setup_Settings_About (TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES); break; + case 6: Screen_Setup_Menu_Main (TRANSITION_DOWN, TRANSITION_DOWN, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, false, 1); break; } Display_Select_Object(); diff --git a/Firmware/Screens_Display/Screen_Settings_Hierarchical_Menu.c b/Firmware/Screens_Display/Screen_Settings_Hierarchical_Menu.c index 00ad8bc..33fc9ec 100644 --- a/Firmware/Screens_Display/Screen_Settings_Hierarchical_Menu.c +++ b/Firmware/Screens_Display/Screen_Settings_Hierarchical_Menu.c @@ -244,16 +244,101 @@ void Handle_Item_Selection(void) switch(Selected_Item->Type) { case BOOL: - Screen_Setup_Select_Bool(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, (char*)Selected_Item->Variable_Title, strlen(Selected_Item->Variable_Title), (uint8_t*)Selected_Item->Variable, _Menu, Selected_Item->Containing_List, _Selected_Item); + Screen_Setup_Select_Bool(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + (char*)Selected_Item->Variable_Title, + strlen(Selected_Item->Variable_Title), + (uint8_t*)Selected_Item->Variable, + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); break; case RGB: - Screen_Setup_Select_RGB(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, (char*)Selected_Item->Variable_Title, strlen(Selected_Item->Variable_Title), (LED_Data_t*)Selected_Item->Variable, _Menu, Selected_Item->Containing_List, _Selected_Item); + Screen_Setup_Select_RGB(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + (char*)Selected_Item->Variable_Title, + strlen(Selected_Item->Variable_Title), + (LED_Data_t*)Selected_Item->Variable, + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); break; case VALUE: + if(Selected_Item->Configuration == NULL) { + return; + } + + Screen_Setup_Select_Value(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + (char*)Selected_Item->Variable_Title, + strlen(Selected_Item->Variable_Title), + (int32_t*)Selected_Item->Variable, + (const Menu_Configuration_Select_Value*)(Selected_Item->Configuration), + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); break; + case LIST: + if(Selected_Item->Configuration == NULL) { + return; + } + + Screen_Setup_Select_List(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + (char*)Selected_Item->Variable_Title, + strlen(Selected_Item->Variable_Title), + (int32_t*)Selected_Item->Variable, + (const Menu_Configuration_Select_List*)(Selected_Item->Configuration), + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); + break; + + case DEFAULT_NOTES: + Screen_Setup_Default_Notes(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + (char*)Selected_Item->Variable_Title, + strlen(Selected_Item->Variable_Title), + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); + break; + + case REBOOT: + Screen_Setup_Settings_Reboot(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); + break; + + case HUE: + Screen_Setup_Select_Hue(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + (char*)Selected_Item->Variable_Title, + strlen(Selected_Item->Variable_Title), + (int32_t*)Selected_Item->Variable, + (const Menu_Configuration_Select_Value*)(Selected_Item->Configuration), + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); + break; + + case MINMAX: + Screen_Setup_Select_MinMax(TRANSITION_LEFT, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, + (char*)Selected_Item->Variable_Title, + strlen(Selected_Item->Variable_Title), + (MinMax_t*)Selected_Item->Variable, + (const Menu_Configuration_Select_MinMax*)(Selected_Item->Configuration), + _Menu, + Selected_Item->Containing_List, + _Selected_Item + ); + break; + case NONE: default: break; diff --git a/Firmware/Screens_Display/Screen_Settings_Reboot.c b/Firmware/Screens_Display/Screen_Settings_Reboot.c new file mode 100644 index 0000000..b38213c --- /dev/null +++ b/Firmware/Screens_Display/Screen_Settings_Reboot.c @@ -0,0 +1,206 @@ +/* + * File: Screen_Settings_Reboot.c + * + * Created: Created: Tuesday September 2025 20:36:48 + * Author: Chris + */ + + +// ============================================================================================ +// Includes +#include "../Screens.h" +#include "../UI_Control.h" + +#include "../Display.h" +#include "../Display_Objects.h" +#include "../Display_Render_Complex.h" +#include "../Display_Default_Configurations.h" + +#include "hardware/watchdog.h" + + +// ============================================================================================ +// Defines +#define COLOR_DOT_ACTIVE 0xFFFF // Pure White #FFFFFF +#define COLOR_DOT_INACTIVE 0x0842 // Dark Gray #404450 + +#define DOT_ANIMATION_SPEED 8 + + +// ============================================================================================ +// Variables +extern const uint8_t _Font_DejaVu_Sans_Mono_Bold_15x26[]; + +static Object_ID _Object_YesNo; +static Object_ID _Object_Text; +static Object_ID _Object_Dots[3]; + +static const Hierarchical_Menu* _Return_Menu = NULL; +static const Menu_List* _Return_List = NULL; +static int32_t _Return_Selected_Item; + +static bool _Bool_Value; +static bool _Decision_Made; +static uint32_t _Counter; +static int32_t _Dot_Animation_Phase; + + +// ============================================================================================ +// Function Declarations +void Screen_Setup_Settings_Reboot(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item); + +static void Update_Dot_Animation(void); + +static void Screen_Init (Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration); +static void Screen_Tick (void); +static void Screen_Click (uint button_return_value); +static void Screen_Touch_Event (int16_t x, int16_t y); +static void Screen_Action_CW (Object_ID object_id); +static void Screen_Action_CCW (Object_ID object_id); +static void Screen_On_Object_Focused (Object_ID object_id); +static void Screen_On_Object_Defocused (Object_ID object_id); +static void Screen_On_Object_Select (Object_ID object_id); +static void Screen_On_Object_Deselect (Object_ID object_id); + + +/******************************************************************* + Functions +*******************************************************************/ +void Screen_Setup_Settings_Reboot(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, const Hierarchical_Menu* return_menu, const Menu_List* return_list, int32_t return_selected_item) +{ + _Bool_Value = false; + + Screen_Init(direction_out, direction_in, type, frame_duration); + + _Return_Menu = return_menu; + _Return_List = return_list; + _Return_Selected_Item = return_selected_item; + + _Counter = 0; + _Dot_Animation_Phase = 0; + _Decision_Made = false; +} + +void Screen_Init(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration) +{ + _Screen_Last = Screen_Init; + _Screen_Tick = Screen_Tick; + _Screen_Click = Screen_Click; + _Screen_Touch_Event = Screen_Touch_Event; + _Screen_Action_CW = Screen_Action_CW; + _Screen_Action_CCW = Screen_Action_CCW; + _Screen_On_Objects_Focused = Screen_On_Object_Focused; + _Screen_On_Objects_Defocused = Screen_On_Object_Defocused; + _Screen_On_Object_Select = Screen_On_Object_Select; + _Screen_On_Object_Deselect = Screen_On_Object_Deselect; + + Display_Objects_Clear(); + Display_Screen_Transition_Start(direction_out, direction_in, type, frame_duration); + + + ////////////////////////////// + // Add Display Objects here // + ////////////////////////////// + Font_ID Font_Text = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_15x26, 0); + + Display_Render_Complex_Select_YesNo_Set(_Bool_Value, &_Configuration_Default_Select_YesNo); + _Object_YesNo = Display_Objects_Add_Select_YesNo("Reboot Device", 13, &_Bool_Value, &_Configuration_Default_Select_YesNo); + + _Object_Text = Display_Objects_Add_Text(CENTER_BOTTOM, BOTH_IN_PERCENT, 50, 50, NOT_SELECTABLE, "Rebooting", Font_Text, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION); + Display_Objects_Update_Enabled(_Object_Text, false); + + for(int i = 0; i < 3; i++) { + _Object_Dots[i] = Display_Objects_Add_Circle_Frame(CENTER_MIDDLE, BOTH_IN_PERCENT, 50 + (i-1) * 6, 60, NOT_SELECTABLE, COLOR_DOT_INACTIVE, 4, 1, NO_STYLE, NO_ANIMATION); + Display_Objects_Update_Enabled(_Object_Dots[i], false); + } + + Display_Select_Object(); +} + +void Screen_Tick(void) +{ + if(_Decision_Made && _Bool_Value) { + Update_Dot_Animation(); + } +} + +void Screen_Click(uint button_return_value) +{ + +} + +void Screen_Touch_Event(int16_t x, int16_t y) +{ + +} + +void Screen_Action_CW(Object_ID object_id) +{ + if(_Decision_Made) { + return; + } + + _Bool_Value = !_Bool_Value; +} + +void Screen_Action_CCW(Object_ID object_id) +{ + Screen_Action_CW(object_id); +} + +void Screen_On_Object_Focused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Defocused(Object_ID object_id) +{ + +} + +void Screen_On_Object_Select(Object_ID object_id) +{ + +} + +void Screen_On_Object_Deselect(Object_ID object_id) +{ + if(!_Decision_Made) { + _Decision_Made = true; + + if(_Bool_Value == false) { + Screen_Setup_Settings_Hierarchical_Menu(TRANSITION_DOWN, TRANSITION_RIGHT, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Return_Menu, _Return_List, _Return_Selected_Item); + return; + } + + Display_Objects_Update_Enabled(_Object_YesNo, false); + Display_Objects_Update_Enabled(_Object_Text, true); + for(int i = 0; i < 3; i++) { + Display_Objects_Update_Enabled(_Object_Dots[i], true); + } + + watchdog_reboot(0, 0, 5000); + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ +void Update_Dot_Animation(void) +{ + _Dot_Animation_Phase++; + + if(_Dot_Animation_Phase >= (DOT_ANIMATION_SPEED * 3)) { + _Dot_Animation_Phase = 0; + } + + // Determine which dot should be active + int Active_Dot = _Dot_Animation_Phase / DOT_ANIMATION_SPEED; + + // Update dot colors + for(int i = 0; i < 3; i++) { + Display_Color Dot_Color = (i == Active_Dot) ? COLOR_DOT_ACTIVE : COLOR_DOT_INACTIVE; + Display_Objects_Update_Color(_Object_Dots[i], Dot_Color); + } +} diff --git a/Firmware/Serial_Command.c b/Firmware/Serial_Command.c new file mode 100644 index 0000000..8423332 --- /dev/null +++ b/Firmware/Serial_Command.c @@ -0,0 +1,232 @@ +/* + * File: Serial_Command.c + * + * Created: Created: Sunday October 2025 09:41:07 + * Author: Chris + */ +#include "Serial_Command.h" + + +// ============================================================================================ +// Includes +#include "Convert.h" +#include "USB_Serial.h" +#include "Mode_Manager.h" +#include "EEPROM_M24C64.h" + + +// ============================================================================================ +// Variables +static struct { + uint8_t Data[30]; + uint32_t Count; +} _Command_Buffer; + +static uint32_t _Configuration_Write_Counter; + +extern int32_t _Event_Received_Counter[NUM_LED_CHANNELS][NUM_LED_COLORS][2]; + + +// ============================================================================================ +// Function Declarations +void Serial_Command_Parse_Command(); +void Serial_Command_Send_Configuration_Text(void); +void Serial_Command_Send_Configuration_Hex(void); +void Serial_Command_Return_Ping(void); +void Serial_Command_Write_Configuration_Byte(void); +void Serial_Command_Save_To_EEPROM(void); + + +/******************************************************************* + Functions +*******************************************************************/ +void Serial_Command_Init() +{ + _Command_Buffer.Count = 0; + _Configuration_Write_Counter = 0; +} + +void Serial_Command_Check_For_Input() +{ + while(USB_Serial_Available()) + { + uint8_t USB_Data = USB_Serial_Get_Byte(); + if(USB_Data == USB_SERIAL_TERMINATOR) + { + Serial_Command_Parse_Command(); + } + else + { + _Command_Buffer.Data[_Command_Buffer.Count++] = USB_Data; + } + } +} + + +/******************************************************************* + Internal Functions +*******************************************************************/ +void Serial_Command_Parse_Command(void) +{ + uint32_t Index, ID, X, Y, Color; + + switch (_Command_Buffer.Data[0]) + { + case 'T': Serial_Command_Send_Configuration_Text(); break; + case 'X': Serial_Command_Send_Configuration_Hex(); break; + case 'P': Serial_Command_Return_Ping(); break; + case 'R': _Configuration_Write_Counter = 0; break; + case 'W': Serial_Command_Write_Configuration_Byte(); break; + // case 'S': Serial_Save_To_EEPROM(); break; + case 'd': Serial_Command_Send_Configuration_Text(); break; + + case 'a': + for(Color=0;Color < NUM_LED_COLORS; Color++) + { + USB_Serial_Send_Int_Dec(_Event_Received_Counter[LED_Channel_1][Color][MIDI_EVENT_NOTE_ON - MIDI_EVENT_NOTE_OFF], 6); + USB_SERIAL_SEND_STRING(";"); + USB_Serial_Send_Int_Dec(_Event_Received_Counter[LED_Channel_1][Color][MIDI_EVENT_NOTE_OFF - MIDI_EVENT_NOTE_OFF], 6); + USB_SERIAL_SEND_TERMINATOR(); + + _Event_Received_Counter[LED_Channel_1][Color][MIDI_EVENT_NOTE_ON - MIDI_EVENT_NOTE_OFF] = 0; + _Event_Received_Counter[LED_Channel_1][Color][MIDI_EVENT_NOTE_OFF - MIDI_EVENT_NOTE_OFF] = 0; + } + break; + + default: + USB_SERIAL_SEND_STRING("Unknown Command: "); + USB_Serial_Put_Char(_Command_Buffer.Data[0]); + USB_SERIAL_SEND_STRING(" ("); + USB_Serial_Send_Int_Hex(_Command_Buffer.Data[0], 2, true); + USB_SERIAL_SEND_STRING(")"); + USB_SERIAL_SEND_TERMINATOR(); + break; + } + + _Command_Buffer.Count = 0; +} + +void Serial_Command_Send_Configuration_Text(void) +{ + USB_SERIAL_SEND_STRING("Channel MIDI Configuration"); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" MIDI_Channel: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].MIDI_Channel, 2); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Octave: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].Octave, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Note Color Red: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Color_Red, 2); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Note Color Green: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Color_Green, 2); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Note Color Blue: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Color_Blue, 2); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Skip Note Off Event: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].Skip_Note_Off_Event, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Note Reset Enabled: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Reset_Enabled, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Note Reset Timeout: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Channel_MIDI_Configuration[0].Note_Reset_Timeout, 3); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_TERMINATOR(); + + USB_SERIAL_SEND_STRING("Pause Light Configuration"); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Enabled: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Pause_Light_Configuration[0].Enabled, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Color: RGB("); + USB_Serial_Send_Int_Dec(_EEPROM_Content.Pause_Light_Configuration[0].Color.R, 3); USB_SERIAL_SEND_STRING(", "); + USB_Serial_Send_Int_Dec(_EEPROM_Content.Pause_Light_Configuration[0].Color.G, 3); USB_SERIAL_SEND_STRING(", "); + USB_Serial_Send_Int_Dec(_EEPROM_Content.Pause_Light_Configuration[0].Color.B, 3); USB_SERIAL_SEND_STRING(")"); + USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Timeout: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Pause_Light_Configuration[0].Timeout, 8); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Reset: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Pause_Light_Configuration[0].Reset_Condition, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Fade Speed: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Pause_Light_Configuration[0].Fade_Speed, 3); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_TERMINATOR(); + + USB_SERIAL_SEND_STRING("Jam Light Configuration"); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Duration Min: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Jam_Light_Configuration.Durations.Min, 5); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Duration Max: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Jam_Light_Configuration.Durations.Max, 5); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Hue Angle Start: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Jam_Light_Configuration.Hue_Angle_Start_Color, 3); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Color Change: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Jam_Light_Configuration.Color_Change, 3); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Fade Speed: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Jam_Light_Configuration.Fade_Speed, 3); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_TERMINATOR(); + + USB_SERIAL_SEND_STRING("Const Light Configuration"); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Color: RGB("); + USB_Serial_Send_Int_Dec(_EEPROM_Content.Const_Light_Configuration.Color.R, 3); USB_SERIAL_SEND_STRING(", "); + USB_Serial_Send_Int_Dec(_EEPROM_Content.Const_Light_Configuration.Color.G, 3); USB_SERIAL_SEND_STRING(", "); + USB_Serial_Send_Int_Dec(_EEPROM_Content.Const_Light_Configuration.Color.B, 3); USB_SERIAL_SEND_STRING(")"); + USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Fade Speed: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Const_Light_Configuration.Fade_Speed, 3); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_TERMINATOR(); + + USB_SERIAL_SEND_STRING("Device Configuration"); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Idle Screen: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Device_Configuration.Idle_Screen, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Screen Timeout: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Device_Configuration.Screen_Timeout, 8); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Rev. Scrolling: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Device_Configuration.Reverse_List_Scrolling, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Use Color Corr.: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Device_Configuration.Use_Color_Correction, 1); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_STRING(" Current Threshold: "); USB_Serial_Send_Int_Dec(_EEPROM_Content.Device_Configuration.Current_Threshold, 8); USB_SERIAL_SEND_TERMINATOR(); + USB_SERIAL_SEND_TERMINATOR(); +} + +void Serial_Command_Send_Configuration_Hex(void) +{ + for(int i=0;i= EEPROM_Get_Content_Size()) { + USB_Serial_Put_Char(SERIAL_NACK); + USB_SERIAL_SEND_TERMINATOR(); + return; + } + + uint8_t Configuration_Data_Byte = (uint8_t)Convert_CharArray_To_Number(&_Command_Buffer.Data[1], 2); + *(((uint8_t*)&_EEPROM_Content) + _Configuration_Write_Counter) = Configuration_Data_Byte; + + _Configuration_Write_Counter++; + + USB_Serial_Put_Char(SERIAL_ACK); + USB_SERIAL_SEND_TERMINATOR(); +} + +void Serial_Command_Save_To_EEPROM(void) +{ + EEPROM_Trigger_Update(); + + USB_Serial_Put_Char(SERIAL_ACK); + USB_SERIAL_SEND_TERMINATOR(); +} + +void Display_Start_Buffer_Readout(void) +{ + // cancel_repeating_timer(&_Timer); + + // // Send header + // USB_SERIAL_SEND_STRING("IMGBUF"); + // USB_Serial_Send_Int_Dec(DISPLAY_WIDTH, 4); + // USB_Serial_Put_Char(','); + // USB_Serial_Send_Int_Dec(DISPLAY_HEIGHT, 4); + // USB_Serial_Put_Char(','); + // USB_Serial_Send_Int_Dec(16, 2); + // USB_SERIAL_SEND_TERMINATOR(); + + // uint32_t Pixel_Count = DISPLAY_WIDTH * DISPLAY_HEIGHT; + + // for(uint32_t i = 0; i < Pixel_Count; i++) + // { + // Display_Color Pixel = Display_Get_Pixel(i); + // USB_Serial_Send_Int_Hex(Pixel, 4, false); + // } + // sleep_ms(100); + // USB_SERIAL_SEND_TERMINATOR(); + + // add_repeating_timer_ms(40, ISR_Repeating_Timer, NULL, &_Timer); +} \ No newline at end of file diff --git a/Firmware/Serial_Command.h b/Firmware/Serial_Command.h new file mode 100644 index 0000000..dfce246 --- /dev/null +++ b/Firmware/Serial_Command.h @@ -0,0 +1,30 @@ +/* + * File: Serial_Command.h + * Created: Created: Sunday October 2025 09:41:12 + * Author: Chris + */ +#ifndef SERIAL_COMMAND_H +#define SERIAL_COMMAND_H + +// ============================================================================================ +// Includes + + +// ============================================================================================ +// Defines +#define SERIAL_ACK 'O' +#define SERIAL_NACK 'N' + + +// ============================================================================================ +// Datatypes + + +// ============================================================================================ +// Function Declarations +void Serial_Command_Init(); + +void Serial_Command_Check_For_Input(); + + +#endif // SERIAL_COMMAND_H \ No newline at end of file diff --git a/Firmware/UI_Control.c b/Firmware/UI_Control.c index 4affebb..bab40a4 100644 --- a/Firmware/UI_Control.c +++ b/Firmware/UI_Control.c @@ -6,6 +6,8 @@ */ #include "UI_Control.h" +#include "EEPROM_M24C64.h" + #include @@ -83,8 +85,7 @@ void UI_Control_Selector_Inc(int32_t* selector, int32_t minimum, int32_t maximum // Apply increment with bounds checking for (uint8_t i = 0; i < Increment; i++) { - // if(_EEPROM_Content.Device_Configuration.Reverse_List_Scrolling == 0) { - if(true) { + if(_EEPROM_Content.Device_Configuration.Reverse_List_Scrolling == 0) { SELECTOR_INC(selector, _Acceleration_Instance.config->Base_Step, minimum, maximum, circle_around); } else { SELECTOR_DEC(selector, _Acceleration_Instance.config->Base_Step, minimum, maximum, circle_around); @@ -106,8 +107,7 @@ void UI_Control_Selector_Dec(int32_t* selector, int32_t minimum, int32_t maximum // Apply decrement with bounds checking for (uint8_t i = 0; i < Decrement; i++) { - // if(_EEPROM_Content.Device_Configuration.Reverse_List_Scrolling == 0) { - if(true) { + if(_EEPROM_Content.Device_Configuration.Reverse_List_Scrolling == 0) { SELECTOR_DEC(selector, _Acceleration_Instance.config->Base_Step, minimum, maximum, circle_around); } else { SELECTOR_INC(selector, _Acceleration_Instance.config->Base_Step, minimum, maximum, circle_around); diff --git a/Firmware/build/build_number.txt b/Firmware/build/build_number.txt index 0d635ca..79bb657 100644 --- a/Firmware/build/build_number.txt +++ b/Firmware/build/build_number.txt @@ -1 +1 @@ -426 +840 diff --git a/Firmware/main.c b/Firmware/main.c index 9e431e6..cdec144 100644 --- a/Firmware/main.c +++ b/Firmware/main.c @@ -22,15 +22,17 @@ #include "INA260.h" #include "Switch.h" +#include "Screens.h" #include "EEPROM_M24C64.h" #include "Rotary_Encoder.h" #include "Display.h" #include "Display_SPI.h" #include "Display_Image.h" -#include "Screens.h" +#include "Display_Default_Configurations.h" #include "USB_Serial.h" +#include "Serial_Command.h" // ============================================================================================ @@ -64,11 +66,20 @@ extern uint16_t _Image_Power_Critical_32x32[]; extern uint16_t _Image_Power_Overvoltage_32x32[]; extern uint16_t _Image_Power_Undervoltage_32x32[]; extern uint16_t _Image_Power_Unplugged_32x32[]; +extern uint16_t _Image_Overcurrent_32x32[]; + +static uint32_t _Idle_Counter; // ============================================================================================ // Function Declarations void Check_For_Serial_Input(void); +void Parse_Command(void); +void Serial_Send_Configuration_Text(void); +void Serial_Send_Configuration_Hex(void); +void Serial_Return_Ping(void); +void Serial_Write_Configuration_Byte(void); +void Serial_Save_To_EEPROM(void); void Display_Start_Buffer_Readout(void); @@ -96,7 +107,10 @@ int main(void) // Trigger ================================================= TRIGGER_CONFIG; TRIGGER_OFF; - + + // Serial Command ============================================= + Serial_Command_Init(); + // USB Serial ================================================= USB_Serial_Init(); @@ -120,8 +134,8 @@ int main(void) // Display ================================================= Display_Init(DISPLAY_COLOR_BLACK, true, false); - // Screen_Setup_Loading(); - Screen_Setup_Menu_Main(TRANSITION_NONE, TRANSITION_NONE, LINEAR, 0, false, 3); + Screen_Setup_Loading(); + // Screen_Setup_Menu_Main(TRANSITION_NONE, TRANSITION_NONE, LINEAR, 0, false, 3); // Rotary Encoder ============================================= Rotary_Encoder_Init(); @@ -135,6 +149,7 @@ int main(void) // Repeating Timer ============================================= add_repeating_timer_ms(40, ISR_Repeating_Timer, NULL, &_Timer); + _Idle_Counter = 0; while (1) { @@ -150,9 +165,29 @@ int main(void) UI_Control_Acceleration_Update(CURRENT_TIME_ms); - INA260_Read_BusVoltage(); + INA260_Update_Current_Threshold(); + INA260_Read_BusVoltage(); INA260_Read_Current(); Command_Issue_Set_Request(MULTICORE_COMMAND_SET_INA260_BUSVOLTAGE, 0, INA260_Get_BusVoltage_mV()); + + if(_EEPROM_Content.Device_Configuration.Screen_Timeout > 0) + { + if(_Idle_Counter >= _EEPROM_Content.Device_Configuration.Screen_Timeout * (1000 / 40)) + { + if(_Screen_Idle_Active != true) + { + Screen_Setup_Idle(TRANSITION_UP, TRANSITION_UP, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES); + } + } + else if(_Screen_Idle_Counter_Disable == false) + { + _Idle_Counter++; + } + else if(_Screen_Idle_Counter_Disable == true) + { + _Idle_Counter = 0; + } + } } // Add functions here to execute during the DMA Transfer @@ -164,6 +199,9 @@ int main(void) if(Display_Send_Buffer_Completed()) { TRIGGER_ON; + Mode_Manager_Tick(); + EEPROM_Tick(); + Command_Issue_Get_Request(MULTICORE_COMMAND_GET_LED_POWER_ERROR, 0); Display_Render_Objects(); LED_Power_Error Error = Command_Get_Request_Response_By_Command_Only(MULTICORE_COMMAND_GET_LED_POWER_ERROR, 100); @@ -176,6 +214,7 @@ int main(void) case BUS_UNDERVOLTAGE: Image = _Image_Power_Undervoltage_32x32; break; case BUS_OVERVOLTAGE: Image = _Image_Power_Overvoltage_32x32; break; case BUS_VOLTAGE_MEASUREMENT: Image = _Image_Power_Critical_32x32; break; + case OVERCURRENT: Image = _Image_Overcurrent_32x32; break; } if(Image != NULL && Display_Screen_Transition_Ongoing() == false) { @@ -185,84 +224,31 @@ int main(void) } else { - Check_For_Serial_Input(); + Serial_Command_Check_For_Input(); if(Rotary_Encoder_Rotation_CW_Occurred()) { + _Idle_Counter = 0; Display_Action_CW(); } if(Rotary_Encoder_Rotation_CCW_Occurred()) { + _Idle_Counter = 0; Display_Action_CCW(); } if(Rotary_Encoder_Switch_Press_Occurred()) { + _Idle_Counter = 0; Display_Action_SW(); } + + if(Switch_Press_Occurred()) { + if(_Screen_Idle_Active == false) { + _Idle_Counter = 0; + } + Mode_Manager_Cycle_Mode(); + } } } } -void Check_For_Serial_Input(void) -{ - int Analog_Data = -1; - int i; - - while(USB_Serial_Available()) - { - uint8_t USB_Data = USB_Serial_Get_Byte(); - switch(USB_Data) - { - case 'a': - USB_SERIAL_SEND_STRING("SPI Baudrate: "); - USB_Serial_Send_Int_Dec(Display_SPI_Get_Baudrate(), 10); - USB_SERIAL_SEND_TERMINATOR(); - break; - case 'b': // New command for buffer readout - Display_Start_Buffer_Readout(); - break; - - case 'c': - Command_Issue_Get_Request(MULTICORE_COMMAND_GET_ANALOG_VOLTAGE, 0); - Analog_Data = Command_Get_Request_Response_By_Command_Only(MULTICORE_COMMAND_GET_ANALOG_VOLTAGE, 100); - USB_SERIAL_SEND_STRING("Analog: "); USB_Serial_Send_Int_Dec(Analog_Data, 5); USB_SERIAL_SEND_STRING("mV"); USB_SERIAL_SEND_TERMINATOR(); - USB_SERIAL_SEND_STRING("INA260: "); USB_Serial_Send_Int_Dec(INA260_Get_BusVoltage_mV(), 5); USB_SERIAL_SEND_STRING("mV"); USB_SERIAL_SEND_TERMINATOR(); - break; - - default: - USB_SERIAL_SEND_STRING("Unknown Command: "); - USB_Serial_Put_Char(USB_Data); - USB_SERIAL_SEND_STRING(" ("); - USB_Serial_Send_Int_Hex(USB_Data, 2, true); - USB_SERIAL_SEND_STRING(")"); - USB_SERIAL_SEND_TERMINATOR(); - break; - } - } -} - -void Display_Start_Buffer_Readout(void) -{ - cancel_repeating_timer(&_Timer); - - // Send header - USB_SERIAL_SEND_STRING("IMGBUF"); - USB_Serial_Send_Int_Dec(DISPLAY_WIDTH, 4); - USB_Serial_Put_Char(','); - USB_Serial_Send_Int_Dec(DISPLAY_HEIGHT, 4); - USB_Serial_Put_Char(','); - USB_Serial_Send_Int_Dec(16, 2); - USB_SERIAL_SEND_TERMINATOR(); - - uint32_t Pixel_Count = DISPLAY_WIDTH * DISPLAY_HEIGHT; - - for(uint32_t i = 0; i < Pixel_Count; i++) - { - Display_Color Pixel = Display_Get_Pixel(i); - USB_Serial_Send_Int_Hex(Pixel, 4, false); - } - sleep_ms(100); - USB_SERIAL_SEND_TERMINATOR(); - - add_repeating_timer_ms(40, ISR_Repeating_Timer, NULL, &_Timer); -} diff --git a/Python/Event_Compare/Event_Compare.py b/Python/Event_Compare/Event_Compare.py new file mode 100644 index 0000000..7850132 --- /dev/null +++ b/Python/Event_Compare/Event_Compare.py @@ -0,0 +1,452 @@ +#!/usr/bin/env python3 +""" +MIDI Test Validator +Compares MIDI events from USB MIDI device with firmware event counters +""" + +import serial +import time +import rtmidi +import random + +# Serial port configuration - adjust COM port as needed +FIRMWARE_PORT = "COM9" # Firmware USB serial port +BAUD_RATE = 115200 + +# MIDI device name to look for +MIDI_DEVICE_NAME = "Midilink" # Will search for devices containing this string + +# MIDI Octave to filter (0-10, or None for all octaves) +MIDI_OCTAVE = 1 # Only count notes in octave 4 (middle C is C4) + +# MIDI Channel (0-15, where 0 = channel 1) +MIDI_CHANNEL = 0 + +# Test data generation settings +TEST_NUM_EVENTS = 200000 # Total number of Note ON events to generate +TEST_MIN_DELAY_MS = 5 # Minimum delay between events (ms) +TEST_MAX_DELAY_MS = 30 # Maximum delay between events (ms) +TEST_MAX_OVERLAPPING = 300 # Maximum number of overlapping notes + +# Debug output +DEBUG_ENABLED = False # Set to False to disable debug output + +# MIDI definitions +MIDI_NOTE_ON = 0x90 +MIDI_NOTE_OFF = 0x80 + +class MidiEventCounter: + def __init__(self): + self.red_on = 0 + self.red_off = 0 + self.green_on = 0 + self.green_off = 0 + self.blue_on = 0 + self.blue_off = 0 + + def add_event(self, note, velocity, is_note_on, debug=False): + # Calculate octave (MIDI note 0-127, octave = note // 12, where C4 = MIDI note 60) + # MIDI octaves: C-1=0-11, C0=12-23, C1=24-35, C2=36-47, C3=48-59, C4=60-71, etc. + octave = note // 12 - 1 # Adjust so C4 = octave 4 + note_in_octave = note % 12 + + if debug: + note_names = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'] + note_name = f"{note_names[note_in_octave]}{octave}" + print(f"[DEBUG] Note {note} = {note_name} (Octave: {octave}, Note in octave: {note_in_octave})") + + # Check if octave matches (if MIDI_OCTAVE is set) + if MIDI_OCTAVE is not None and octave != MIDI_OCTAVE: + if debug: + print(f"[DEBUG] -> Ignoring: Wrong octave (expected {MIDI_OCTAVE}, got {octave})") + return + + # Determine color based on note (adjust to your config) + # Assuming C=Red, D=Green, E=Blue + color_mapped = None + + if note_in_octave in [0, 1]: # C, C# = Red + if is_note_on: + self.red_on += 1 + else: + self.red_off += 1 + color_mapped = "RED" + elif note_in_octave in [2, 3]: # D, D# = Green + if is_note_on: + self.green_on += 1 + else: + self.green_off += 1 + color_mapped = "GREEN" + elif note_in_octave in [4, 5]: # E, F = Blue + if is_note_on: + self.blue_on += 1 + else: + self.blue_off += 1 + color_mapped = "BLUE" + else: + color_mapped = "NONE (ignored)" + + if debug: + event_type = "ON " if is_note_on else "OFF" + print(f"[DEBUG] Mapped Note {note} -> {color_mapped} {event_type}") + + def print_summary(self): + print("\nMIDI Device Event Counts:") + print(f" Red - ON: {self.red_on:6d}, OFF: {self.red_off:6d}") + print(f" Green - ON: {self.green_on:6d}, OFF: {self.green_off:6d}") + print(f" Blue - ON: {self.blue_on:6d}, OFF: {self.blue_off:6d}") + +def midi_callback(message, data): + """Callback for MIDI input - called when MIDI messages are received""" + event_counter = data + midi_message = message[0] + + if len(midi_message) >= 3: + status = midi_message[0] + note = midi_message[1] + velocity = midi_message[2] + + # Check for Note On or Note Off + if (status & 0xF0) == MIDI_NOTE_ON or (status & 0xF0) == MIDI_NOTE_OFF: + channel = status & 0x0F + is_note_on = ((status & 0xF0) == MIDI_NOTE_ON and velocity > 0) + event_type = "Note ON" if is_note_on else "Note OFF" + + if DEBUG_ENABLED: + print(f"[MIDI] {event_type}, Channel: {channel}, Note: {note}, Velocity: {velocity}") + + event_counter.add_event(note, velocity, is_note_on, debug=DEBUG_ENABLED) + +def find_midi_device(device_name): + """Find MIDI input device by name""" + midiin = rtmidi.MidiIn() + ports = midiin.get_ports() + + print(f"\nAvailable MIDI Input devices:") + for i, port in enumerate(ports): + print(f" [{i}] {port}") + + # Search for device containing the name + for i, port in enumerate(ports): + if device_name.lower() in port.lower(): + print(f"\n✓ Found '{device_name}' input at port {i}: {port}") + return i + + print(f"\n✗ Could not find MIDI input device containing '{device_name}'") + return None + +def find_midi_output_device(device_name): + """Find MIDI output device by name""" + midiout = rtmidi.MidiOut() + ports = midiout.get_ports() + + print(f"\nAvailable MIDI Output devices:") + for i, port in enumerate(ports): + print(f" [{i}] {port}") + + # Search for device containing the name + for i, port in enumerate(ports): + if device_name.lower() in port.lower(): + print(f"\n✓ Found '{device_name}' output at port {i}: {port}") + return i + + print(f"\n✗ Could not find MIDI output device containing '{device_name}'") + return None + +def generate_test_data(midiout): + """Generate random MIDI test data with overlapping notes""" + # Notes to use: C, C#, D, D#, E, F (Red, Green, Blue colors with alternates) + # Calculate MIDI note numbers for the configured octave + base_note = (MIDI_OCTAVE + 1) * 12 # Base note for the octave + + notes = { + 'C': base_note + 0, # Red + 'C#': base_note + 1, # Red alternate + 'D': base_note + 2, # Green + 'D#': base_note + 3, # Green alternate + 'E': base_note + 4, # Blue + 'F': base_note + 5 # Blue alternate + } + + note_names = list(notes.keys()) + note_values = list(notes.values()) + + print(f"\nGenerating {TEST_NUM_EVENTS} random MIDI events...") + print(f"Octave: {MIDI_OCTAVE}, Channel: {MIDI_CHANNEL + 1}") + print(f"Using notes: {', '.join([f'{name}({notes[name]})' for name in note_names])}") + print("="*50 + "\n") + + active_notes = [] # Track currently active (on but not yet off) notes + event_queue = [] # Queue of all events to send + + # Generate NOTE ON events + for i in range(TEST_NUM_EVENTS): + note_idx = random.randint(0, len(note_values) - 1) + note = note_values[note_idx] + velocity = random.randint(64, 127) # Random velocity + + event_queue.append({ + 'type': 'on', + 'note': note, + 'note_name': note_names[note_idx], + 'velocity': velocity + }) + active_notes.append(note) + + # Randomly send some NOTE OFF events if we have overlapping notes + while len(active_notes) >= TEST_MAX_OVERLAPPING: + off_note = active_notes.pop(0) + off_note_name = note_names[note_values.index(off_note)] + event_queue.append({ + 'type': 'off', + 'note': off_note, + 'note_name': off_note_name, + 'velocity': 0 + }) + + # Random chance to send an OFF event even if under max + if len(active_notes) > 0 and random.random() < 0.4: + off_note = active_notes.pop(random.randint(0, len(active_notes) - 1)) + off_note_name = note_names[note_values.index(off_note)] + event_queue.append({ + 'type': 'off', + 'note': off_note, + 'note_name': off_note_name, + 'velocity': 0 + }) + + # Send remaining NOTE OFF events + while len(active_notes) > 0: + off_note = active_notes.pop(0) + off_note_name = note_names[note_values.index(off_note)] + event_queue.append({ + 'type': 'off', + 'note': off_note, + 'note_name': off_note_name, + 'velocity': 0 + }) + + # Send all events with random delays + total_events = len(event_queue) + for idx, event in enumerate(event_queue): + if event['type'] == 'on': + message = [MIDI_NOTE_ON | MIDI_CHANNEL, event['note'], event['velocity']] + if DEBUG_ENABLED: + print(f"→ Note ON: {event['note_name']:3s} (MIDI {event['note']:3d}), Velocity: {event['velocity']:3d}") + else: + message = [MIDI_NOTE_OFF | MIDI_CHANNEL, event['note'], event['velocity']] + if DEBUG_ENABLED: + print(f"← Note OFF: {event['note_name']:3s} (MIDI {event['note']:3d})") + + midiout.send_message(message) + + # Show progress bar (only if debug is disabled to avoid cluttering output) + if not DEBUG_ENABLED: + progress = (idx + 1) / total_events + bar_length = 40 + filled_length = int(bar_length * progress) + bar = '█' * filled_length + '░' * (bar_length - filled_length) + print(f'\rProgress: [{bar}] {idx + 1}/{total_events} events ({progress*100:.1f}%)', end='', flush=True) + + # Random delay before next event + delay_ms = random.randint(TEST_MIN_DELAY_MS, TEST_MAX_DELAY_MS) + time.sleep(delay_ms / 1000.0) + + if not DEBUG_ENABLED: + print() # New line after progress bar + + print("\n" + "="*50) + print("✓ Test data generation complete") + print("="*50) + +def read_firmware_counters(ser_fw): + """Send 'a' command and read firmware event counters""" + # Clear input buffer + ser_fw.reset_input_buffer() + + # Send command + ser_fw.write(b'a\r') + time.sleep(0.2) + + # Read all available data + response = ser_fw.read(ser_fw.in_waiting).decode('ascii') + + # Split by \r to get individual lines + lines = response.split('\r') + + counters = {} + colors = ['red', 'green', 'blue'] + + line_idx = 0 + for color in colors: + if line_idx < len(lines): + line = lines[line_idx].strip() + if ';' in line: + parts = line.split(';') + on_count = int(parts[0].strip()) + off_count = int(parts[1].strip()) + counters[color] = {'on': on_count, 'off': off_count} + else: + print(f"Warning: Could not parse line for {color}: {line}") + counters[color] = {'on': 0, 'off': 0} + line_idx += 1 + else: + print(f"Warning: No data for {color}") + counters[color] = {'on': 0, 'off': 0} + + return counters + +def compare_results(midi_counts, firmware_counts): + """Compare MIDI device and firmware event counts""" + print("\nFirmware Event Counts:") + print(f" Red - ON: {firmware_counts['red']['on']:6d}, OFF: {firmware_counts['red']['off']:6d}") + print(f" Green - ON: {firmware_counts['green']['on']:6d}, OFF: {firmware_counts['green']['off']:6d}") + print(f" Blue - ON: {firmware_counts['blue']['on']:6d}, OFF: {firmware_counts['blue']['off']:6d}") + + print("\n" + "="*50) + print("COMPARISON RESULTS:") + print("="*50) + + all_match = True + + # Compare Red + if midi_counts.red_on == firmware_counts['red']['on'] and \ + midi_counts.red_off == firmware_counts['red']['off']: + print("Red: PASS ✓") + else: + print(f"Red: FAIL ✗ (MIDI: {midi_counts.red_on}/{midi_counts.red_off}, " + f"Firmware: {firmware_counts['red']['on']}/{firmware_counts['red']['off']})") + all_match = False + + # Compare Green + if midi_counts.green_on == firmware_counts['green']['on'] and \ + midi_counts.green_off == firmware_counts['green']['off']: + print("Green: PASS ✓") + else: + print(f"Green: FAIL ✗ (MIDI: {midi_counts.green_on}/{midi_counts.green_off}, " + f"Firmware: {firmware_counts['green']['on']}/{firmware_counts['green']['off']})") + all_match = False + + # Compare Blue + if midi_counts.blue_on == firmware_counts['blue']['on'] and \ + midi_counts.blue_off == firmware_counts['blue']['off']: + print("Blue: PASS ✓") + else: + print(f"Blue: FAIL ✗ (MIDI: {midi_counts.blue_on}/{midi_counts.blue_off}, " + f"Firmware: {firmware_counts['blue']['on']}/{firmware_counts['blue']['off']})") + all_match = False + + print("="*50) + + if all_match: + print("✓ ALL TESTS PASSED") + else: + print("✗ SOME TESTS FAILED") + + return all_match + +def main(): + print("MIDI Test Validator") + print("="*50) + print("\nSelect mode:") + print(" 1. Manual mode (record MIDI events manually)") + print(" 2. Auto-test mode (send random test data)") + + mode = input("\nEnter mode (1 or 2): ").strip() + + auto_test = (mode == '2') + + # Find and open MIDI input device + midi_in_port = find_midi_device(MIDI_DEVICE_NAME) + if midi_in_port is None: + print("\nPlease check:") + print(" 1. MIDI device is connected") + print(" 2. MIDI_DEVICE_NAME variable matches your device") + return + + midiin = rtmidi.MidiIn() + event_counter = MidiEventCounter() + + # Set callback and open input port + midiin.set_callback(midi_callback, data=event_counter) + midiin.open_port(midi_in_port) + print(f"✓ Opened MIDI input port") + + # Find and open MIDI output device (for auto-test mode) + midiout = None + if auto_test: + midi_out_port = find_midi_output_device(MIDI_DEVICE_NAME) + if midi_out_port is None: + print("\nCould not find MIDI output device for auto-test mode") + midiin.close_port() + return + + midiout = rtmidi.MidiOut() + midiout.open_port(midi_out_port) + print(f"✓ Opened MIDI output port") + + # Open firmware serial port + try: + ser_firmware = serial.Serial(FIRMWARE_PORT, BAUD_RATE, timeout=1) + print(f"✓ Connected to firmware on {FIRMWARE_PORT}") + except serial.SerialException as e: + print(f"Error opening serial port: {e}") + midiin.close_port() + if midiout: + midiout.close_port() + return + + # Clear firmware counters at startup + print("\nClearing firmware counters...") + read_firmware_counters(ser_firmware) # This reads and resets the counters + print("✓ Firmware counters cleared") + + if MIDI_OCTAVE is not None: + print(f"\nConfiguration: Filtering for MIDI Octave {MIDI_OCTAVE} only") + else: + print(f"\nConfiguration: Accepting all MIDI octaves") + + print(f"Debug output: {'ENABLED' if DEBUG_ENABLED else 'DISABLED'}") + + if auto_test: + # Auto-test mode: send test data + print("\n" + "="*50) + print("AUTO-TEST MODE") + print("="*50) + time.sleep(0.5) # Small delay to ensure everything is ready + + generate_test_data(midiout) + + # Give some time for last events to be processed + time.sleep(0.5) + else: + # Manual mode: wait for user input + print("\n" + "="*50) + print("MANUAL MODE - Recording MIDI events...") + print("Press ENTER to stop recording and compare results") + print("="*50 + "\n") + + try: + input() # Wait for user to press enter + except KeyboardInterrupt: + print("\n\nStopped by user (Ctrl+C)") + + # Display results + event_counter.print_summary() + + # Read firmware counters + print("\nReading firmware counters...") + firmware_counts = read_firmware_counters(ser_firmware) + + # Compare results + compare_results(event_counter, firmware_counts) + + # Close ports + midiin.close_port() + if midiout: + midiout.close_port() + ser_firmware.close() + print("\nPorts closed.") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Python/Buffer_Reader.cmd b/Python/Read_Buffer/Buffer_Reader.cmd similarity index 100% rename from Python/Buffer_Reader.cmd rename to Python/Read_Buffer/Buffer_Reader.cmd diff --git a/Python/Buffer_Reader.py b/Python/Read_Buffer/Buffer_Reader.py similarity index 100% rename from Python/Buffer_Reader.py rename to Python/Read_Buffer/Buffer_Reader.py